From 081accde27897100a66764c5047147a7e80a7a54 Mon Sep 17 00:00:00 2001 From: Stefan Penner <stefan.penner@gmail.com> Date: Thu, 29 Jul 2021 16:53:53 -0600 Subject: [PATCH 1/6] Add deprecation assertions --- .../assertions/deprecations-include.js | 13 + addon-test-support/assertions/deprecations.js | 23 + .../assertions/expect-deprecation.js | 37 + .../assertions/expect-no-deprecation.js | 37 + .../assertions/expect-no-runloop.js | 65 ++ .../assertions/expect-no-warning.js | 15 + .../assertions/expect-warning.js | 24 + .../assertions/utils/check-matcher.js | 21 + .../assertions/utils/to-assertion-message.js | 3 + addon-test-support/index.js | 22 + server/index.js | 1 + tests/unit/assertions/assertion-test.js | 58 ++ .../assertions/expect-deprecation-test.js | 410 +++++++++ tests/unit/assertions/runloop-test.js | 86 ++ tests/unit/assertions/warning-test.js | 381 +++++++++ yarn.lock | 794 ++++++++++++++---- 16 files changed, 1848 insertions(+), 142 deletions(-) create mode 100644 addon-test-support/assertions/deprecations-include.js create mode 100644 addon-test-support/assertions/deprecations.js create mode 100644 addon-test-support/assertions/expect-deprecation.js create mode 100644 addon-test-support/assertions/expect-no-deprecation.js create mode 100644 addon-test-support/assertions/expect-no-runloop.js create mode 100644 addon-test-support/assertions/expect-no-warning.js create mode 100644 addon-test-support/assertions/expect-warning.js create mode 100644 addon-test-support/assertions/utils/check-matcher.js create mode 100644 addon-test-support/assertions/utils/to-assertion-message.js create mode 100644 server/index.js create mode 100644 tests/unit/assertions/assertion-test.js create mode 100644 tests/unit/assertions/expect-deprecation-test.js create mode 100644 tests/unit/assertions/runloop-test.js create mode 100644 tests/unit/assertions/warning-test.js diff --git a/addon-test-support/assertions/deprecations-include.js b/addon-test-support/assertions/deprecations-include.js new file mode 100644 index 00000000..65a12ba6 --- /dev/null +++ b/addon-test-support/assertions/deprecations-include.js @@ -0,0 +1,13 @@ +import { getDeprecations } from '@ember/test-helpers'; + +export default function deprecationsInclude(expected) { + const deprecations = getDeprecations().map( + (deprecation) => deprecation.message + ); + + this.pushResult({ + result: deprecations.indexOf(expected) > -1, + actual: deprecations, + message: `expected to find \`${expected}\` deprecation`, + }); +} diff --git a/addon-test-support/assertions/deprecations.js b/addon-test-support/assertions/deprecations.js new file mode 100644 index 00000000..0396a450 --- /dev/null +++ b/addon-test-support/assertions/deprecations.js @@ -0,0 +1,23 @@ +import { getDeprecationsDuringCallback } from '@ember/test-helpers'; + +export default async function deprecations(callback, expectedDeprecations) { + const maybeThenable = getDeprecationsDuringCallback(callback); + + const operation = (deprecations) => { + this.deepEqual( + deprecations.map((deprecation) => deprecation.message), + expectedDeprecations, + 'Expected deprecations during test.' + ); + }; + + if ( + typeof maybeThenable === 'object' && + maybeThenable !== null && + typeof maybeThenable.then === 'function' + ) { + operation(await maybeThenable); + } else { + operation(maybeThenable); + } +} diff --git a/addon-test-support/assertions/expect-deprecation.js b/addon-test-support/assertions/expect-deprecation.js new file mode 100644 index 00000000..3c6926c2 --- /dev/null +++ b/addon-test-support/assertions/expect-deprecation.js @@ -0,0 +1,37 @@ +import { + getDeprecationsDuringCallback, + getDeprecations, +} from '@ember/test-helpers'; +import checkMatcher from './utils/check-matcher'; + +export default function expectDeprecation(cb, matcher) { + const test = (deprecations, matcher) => { + const matchedDeprecations = deprecations.filter((deprecation) => { + return checkMatcher(deprecation.message, matcher); + }); + + this.pushResult({ + result: matchedDeprecations.length !== 0, + actual: matchedDeprecations, + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + }); + }; + + if (typeof cb !== 'function') { + // cb is not a callback, so we assume it is the matcher + test(getDeprecations(), cb); + } else { + const maybeThenable = getDeprecationsDuringCallback(cb); + if ( + maybeThenable !== null && + typeof maybeThenable === 'object' && + typeof maybeThenable.then === 'function' + ) { + return maybeThenable.then((deprecations) => test(deprecations, matcher)); + } else { + test(maybeThenable, matcher); + } + } +} diff --git a/addon-test-support/assertions/expect-no-deprecation.js b/addon-test-support/assertions/expect-no-deprecation.js new file mode 100644 index 00000000..69a4d211 --- /dev/null +++ b/addon-test-support/assertions/expect-no-deprecation.js @@ -0,0 +1,37 @@ +import checkMatcher from './utils/check-matcher'; +import { + getDeprecations, + getDeprecationsDuringCallback, +} from '@ember/test-helpers'; + +export default function expectNoDeprecation(cb, matcher) { + const test = (deprecations, matcher) => { + const matchedDeprecations = deprecations.filter((deprecation) => { + return checkMatcher(deprecation.message, matcher); + }); + + this.pushResult({ + result: matchedDeprecations.length === 0, + actual: matchedDeprecations, + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + }); + }; + + if (typeof cb !== 'function') { + // cb is not a callback, so we assume it is the matcher + test(getDeprecations(), cb); + } else { + const maybeThenable = getDeprecationsDuringCallback(cb); + if ( + maybeThenable !== null && + typeof maybeThenable === 'object' && + typeof maybeThenable.then === 'function' + ) { + return maybeThenable.then((deprecations) => test(deprecations, matcher)); + } else { + test(maybeThenable, matcher); + } + } +} diff --git a/addon-test-support/assertions/expect-no-runloop.js b/addon-test-support/assertions/expect-no-runloop.js new file mode 100644 index 00000000..497e67a0 --- /dev/null +++ b/addon-test-support/assertions/expect-no-runloop.js @@ -0,0 +1,65 @@ +import { + run, + end, + _getCurrentRunLoop, + _hasScheduledTimers, + _cancelTimers, +} from '@ember/runloop'; + +function getCurrentRunLoop() { + // Ember 3.24.4 does not have _getCurrentRunLoop, but does have run.currentRunLoop; + if ('currentRunLoop' in run) { + return run.currentRunLoop; + } else { + return _getCurrentRunLoop(); + } +} + +// TODO: It seems very odd to mix runloop + timers into a runloop +// specific assertion. +// +// We should likely: +// +// * have timer specific expectations +// * have runloop specific expectations +// * not have either cancel timers or runloop, rather those should +// be the explicitly choosen by the user +export default function expectNoRunloop() { + if (getCurrentRunLoop()) { + this.pushResult({ + result: false, + actual: getCurrentRunLoop(), + expected: null, + message: 'expected no active runloop', + }); + + while (getCurrentRunLoop()) { + end(); + } + } else { + this.pushResult({ + result: true, + actual: null, + expected: null, + message: 'expected no active runloop', + }); + } + + if (_hasScheduledTimers()) { + this.pushResult({ + result: false, + actual: true, + expected: false, + message: 'expected no active timers', + }); + + _cancelTimers(); + } else { + this.pushResult({ + result: true, + actual: false, + expected: false, + message: 'expected no active timers', + }); + } +} diff --git a/addon-test-support/assertions/expect-no-warning.js b/addon-test-support/assertions/expect-no-warning.js new file mode 100644 index 00000000..fc750290 --- /dev/null +++ b/addon-test-support/assertions/expect-no-warning.js @@ -0,0 +1,15 @@ +import { getWarnings, getWarningsDuringCallback } from '@ember/test-helpers'; + +export default function expectNoWarning(callback) { + const warnings = + typeof callback === 'function' + ? getWarningsDuringCallback(callback) + : getWarnings(); + + this.pushResult({ + result: warnings.length === 0, + actual: warnings, + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + }); +} diff --git a/addon-test-support/assertions/expect-warning.js b/addon-test-support/assertions/expect-warning.js new file mode 100644 index 00000000..e51dab01 --- /dev/null +++ b/addon-test-support/assertions/expect-warning.js @@ -0,0 +1,24 @@ +import checkMatcher from './utils/check-matcher'; +import { getWarningsDuringCallback, getWarnings } from '@ember/test-helpers'; + +export default function expectWarning(callback, matcher) { + let warnings; + if (typeof callback === 'function') { + warnings = getWarningsDuringCallback(callback); + } else { + matcher = callback; + warnings = getWarnings(); + } + + const actual = warnings.filter((warning) => + checkMatcher(warning.message, matcher) + ); + + const result = actual.length !== 0; + this.pushResult({ + result, + actual, + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + }); +} diff --git a/addon-test-support/assertions/utils/check-matcher.js b/addon-test-support/assertions/utils/check-matcher.js new file mode 100644 index 00000000..6d51a069 --- /dev/null +++ b/addon-test-support/assertions/utils/check-matcher.js @@ -0,0 +1,21 @@ +function includes(message, search) { + return message.includes + ? message.includes(search) + : message.indexOf(search) !== -1; +} + +// TODO: test +export default function checkMatcher(message, matcher) { + if (typeof matcher === 'string') { + return includes(message, matcher); + } else if (matcher instanceof RegExp) { + return !!message.match(matcher); + } else if (matcher) { + throw new Error( + `[ember-qunit] can only match Strings and RegExps. "${typeof matcher}" was provided.` + ); + } + + // No matcher always returns true. Makes the code easier elsewhere. + return true; +} diff --git a/addon-test-support/assertions/utils/to-assertion-message.js b/addon-test-support/assertions/utils/to-assertion-message.js new file mode 100644 index 00000000..b608eb61 --- /dev/null +++ b/addon-test-support/assertions/utils/to-assertion-message.js @@ -0,0 +1,3 @@ +export default function toAssertionMessage(assertion) { + return assertion.message; +} diff --git a/addon-test-support/index.js b/addon-test-support/index.js index a5258ce4..67d3dea8 100644 --- a/addon-test-support/index.js +++ b/addon-test-support/index.js @@ -26,6 +26,24 @@ import { installTestNotIsolatedHook } from './test-isolation-validation'; let waitForSettled = true; +import deprecationsInclude from './assertions/deprecations-include'; +import deprecations from './assertions/deprecations'; +import expectNoDeprecation from './assertions/expect-no-deprecation'; +import expectDeprecation from './assertions/expect-deprecation'; +import expectNoRunloop from './assertions/expect-no-runloop'; +// import expectWarning from './assertions/expect-warning'; +// +export function setupAsserts(assert) { + // TODO: decide which of these we should keep, which depreacte and which drop. + assert.deprecationsInclude = deprecationsInclude; + assert.deprecations = deprecations; + assert.expectNoDeprecation = expectNoDeprecation; + assert.expectDeprecation = expectDeprecation; // compat + assert.expectNoRunloop = expectNoRunloop; // compat but fixed name + // around for compat + assert.exepectNoRunLoop = expectNoRunloop; // compat but wrong camelization +} + export function setupTest(hooks, _options) { let options = { waitForSettled, ..._options }; @@ -213,5 +231,9 @@ export function start(options = {}) { startTests(); } + if (options.setupAssertAdditions !== false) { + setupAsserts(QUnit.assert); + } + setupResetOnerror(); } diff --git a/server/index.js b/server/index.js new file mode 100644 index 00000000..891ce327 --- /dev/null +++ b/server/index.js @@ -0,0 +1 @@ +module.exports = (app) => app.get('/', (_, res) => res.redirect('/tests')); diff --git a/tests/unit/assertions/assertion-test.js b/tests/unit/assertions/assertion-test.js new file mode 100644 index 00000000..de53dc2b --- /dev/null +++ b/tests/unit/assertions/assertion-test.js @@ -0,0 +1,58 @@ +import { module, test } from 'qunit'; +// import expectAssertion from 'ember-qunit/assertions/expect-assertion'; +import { assert as emberAssert } from '@ember/debug'; + +module.skip('expectAssertion', function (hooks) { + let mockAssert; + + hooks.beforeEach(() => { + mockAssert = { + pushedResults: [], + expectAssertion, + }; + }); + + test('called with assert', function (assert) { + mockAssert.expectAssertion(() => { + emberAssert('testing assert'); + }); + + assert.ok( + mockAssert.pushedResults[0].result, + '`expectAssertion` captured deprecation call' + ); + }); + + test('called without deprecation', function (assert) { + mockAssert.expectAssertion(() => { + emberAssert('testing assert', true); + }); + + assert.notOk( + mockAssert.pushedResults[0].result, + '`expectAssertion` logged failed result' + ); + }); + + test('called with deprecation and matched assert', function (assert) { + mockAssert.expectAssertion(() => { + emberAssert('testing assert'); + }, /testing/); + + assert.ok( + mockAssert.pushedResults[0].result, + '`expectAssertion` captured deprecation call' + ); + }); + + test('called with deprecation and unmatched assert', function (assert) { + mockAssert.expectAssertion(() => { + emberAssert('testing assert'); + }, /different/); + + assert.notOk( + mockAssert.pushedResults[0].result, + '`expectAssertion` logged failed result' + ); + }); +}); diff --git a/tests/unit/assertions/expect-deprecation-test.js b/tests/unit/assertions/expect-deprecation-test.js new file mode 100644 index 00000000..6d3081e2 --- /dev/null +++ b/tests/unit/assertions/expect-deprecation-test.js @@ -0,0 +1,410 @@ +import { module, test } from 'qunit'; +import expectDeprecation from 'ember-qunit/assertions/expect-deprecation'; +import expectNoDeprecation from 'ember-qunit/assertions/expect-no-deprecation'; +import { deprecate } from '@ember/debug'; +import { setupTest } from 'ember-qunit'; +// ............................................................ +// Deprecation outside of a test. Should not cause test failures. +deprecate('Deprecation outside of a test', false, { + id: 'deprecation-test', + until: '3.0.0', +}); +// ............................................................ + +module('expectDeprecation', function (hooks) { + let mockAssert; + + setupTest(hooks); + hooks.beforeEach(() => { + mockAssert = { + pushedResults: [], + pushResult(result) { + this.pushedResults.push(result); + }, + expectDeprecation, + }; + }); + + test('called after test and with deprecation', function (assert) { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + + mockAssert.expectDeprecation(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: true, + }); + }); + + test('called after test and without deprecation', function (assert) { + mockAssert.expectDeprecation(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: false, + }); + }); + + test('called with callback and with deprecation', function (assert) { + mockAssert.expectDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: true, + }); + }); + + test('called with callback and without deprecation', function (assert) { + mockAssert.expectDeprecation(() => {}); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: false, + }); + }); + + test('called with callback and after test', function (assert) { + mockAssert.expectDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }); + + mockAssert.expectDeprecation(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: true, + }); + + // TODO: think about this, old library would have no deprecations here, as the above callback variant would "capture" them + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: true, + }); + }); + + test('called after test, with matcher and matched deprecation', function (assert) { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + + mockAssert.expectDeprecation(/Something deprecated/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: null, + result: true, + message: + 'Expected deprecations during test, but no deprecations were found.', + }); + }); + + test('called after test, with matcher and unmatched deprecation', function (assert) { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + + mockAssert.expectDeprecation(/different deprecation/); + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: false, + }); + }); + + test('called with callback, matcher and matched deprecation', function (assert) { + mockAssert.expectDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }, /Something deprecated/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: true, + }); + }); + + test('called with callback, matcher and unmatched deprecation', function (assert) { + mockAssert.expectDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }, /different deprecation/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + result: false, + }); + }); + + test('with regex matcher', function (assert) { + mockAssert.expectDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }, /Somethi[a-z ]*ecated/); + mockAssert.expectDeprecation(() => { + deprecate('/Something* deprecated/', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }, /Something* deprecated/); + + assert.ok( + mockAssert.pushedResults[0].result, + '`expectDeprecation` matched RegExp' + ); + assert.notOk( + mockAssert.pushedResults[1].result, + "`expectDeprecation` didn't RegExp as String match" + ); + }); + + test('with string matcher', function (assert) { + mockAssert.expectDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }, 'Something'); + + mockAssert.expectDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }, 'Something.*'); + + assert.ok( + mockAssert.pushedResults[0].result, + '`expectDeprecation` captured deprecation for partial String match' + ); + assert.notOk( + mockAssert.pushedResults[1].result, + "`expectDeprecation` didn't test a String match as RegExp" + ); + }); +}); + +module('expectNoDeprecation', function (hooks) { + let mockAssert; + + setupTest(hooks); + hooks.beforeEach(() => { + mockAssert = { + pushedResults: [], + pushResult(result) { + this.pushedResults.push(result); + }, + expectNoDeprecation, + }; + }); + + test('called after test and without deprecation', function (assert) { + mockAssert.expectNoDeprecation(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + result: true, + }); + }); + + // current + test('called after test and with deprecation', function (assert) { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + + mockAssert.expectNoDeprecation(); + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + result: false, + }); + }); + + test('called with callback and with deprecation', function (assert) { + mockAssert.expectNoDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + result: false, + }); + }); + + test('called with callback and without deprecation', function (assert) { + mockAssert.expectNoDeprecation(() => {}); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + result: true, + }); + }); + + test('called with callback and after test', function (assert) { + mockAssert.expectNoDeprecation(() => { + deprecate('Something deprecated', false, { + id: 'deprecation-test', + until: '3.0.0', + }); + }); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + result: false, + }); + + mockAssert.expectNoDeprecation(); + + // TODO: should we? + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something deprecated', + options: { + id: 'deprecation-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + result: false, + }); + }); +}); diff --git a/tests/unit/assertions/runloop-test.js b/tests/unit/assertions/runloop-test.js new file mode 100644 index 00000000..fda2c6f6 --- /dev/null +++ b/tests/unit/assertions/runloop-test.js @@ -0,0 +1,86 @@ +import { run, begin, later } from '@ember/runloop'; +import { test, module } from 'qunit'; +import expectNoRunloop from 'ember-qunit/assertions/expect-no-runloop'; + +module('expectNoRunLoop', function (hooks) { + let mockAssert; + hooks.beforeEach(function () { + mockAssert = { + pushedResults: [], + pushResult(result) { + this.pushedResults.push(result); + }, + expectNoRunloop, + }; + }); + + test('in a run loop', function (assert) { + mockAssert.expectNoRunloop(); + + assert.deepEqual(mockAssert.pushedResults.shift(), { + result: true, + actual: null, + expected: null, + message: 'expected no active runloop', + }); + + assert.deepEqual(mockAssert.pushedResults.shift(), { + result: true, + actual: false, + expected: false, + message: 'expected no active timers', + }); + + begin(); + + mockAssert.expectNoRunloop(); + + { + const { result, message } = mockAssert.pushedResults.shift(); + assert.deepEqual( + { result, message }, + { + result: false, + message: 'expected no active runloop', + } + ); + } + }); + + test('`expectNoRunLoop` when timers are active', function (assert) { + later(() => { + assert.ok(false, 'should not execute'); + }); + + assert.ok(run.hasScheduledTimers(), 'expect timers to exist'); + mockAssert.expectNoRunloop(); + + { + const result = mockAssert.pushedResults.shift(); + + assert.deepEqual(result, { + result: true, + actual: null, + expected: null, + message: 'expected no active runloop', + }); + } + + // TODO: i don't think this should have cancelled timers + { + const result = mockAssert.pushedResults.shift(); + + assert.deepEqual(result, { + result: false, + actual: true, + expected: false, + message: 'expected no active timers', + }); + } + + assert.notOk( + run.hasScheduledTimers(), + 'expects timers to have all been ended' + ); + }); +}); diff --git a/tests/unit/assertions/warning-test.js b/tests/unit/assertions/warning-test.js new file mode 100644 index 00000000..947d69bb --- /dev/null +++ b/tests/unit/assertions/warning-test.js @@ -0,0 +1,381 @@ +import { module, test } from 'qunit'; +import expectWarning from 'ember-qunit/assertions/expect-warning'; +import expectNoWarning from 'ember-qunit/assertions/expect-no-warning'; +import { warn } from '@ember/debug'; + +import { setupTest } from 'ember-qunit'; +// ............................................................ +// Warning outside of a test. Should not cause test failures. +warn('Warning outside of a test', false, { + id: 'warning-test', + until: '3.0.0', +}); +// ............................................................ + +module('expectWarning', function (hooks) { + let mockAssert; + setupTest(hooks); + + hooks.beforeEach(() => { + mockAssert = { + pushedResults: [], + pushResult(results) { + this.pushedResults.push(results); + }, + expectWarning, + }; + }); + + test('called after test and with warning', function (assert) { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + + mockAssert.expectWarning(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + }); + + test('called after test and without warning', function (assert) { + mockAssert.expectWarning(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: false, + }); + }); + + test('called with callback and with warning', function (assert) { + mockAssert.expectWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + }); + + test('called with callback and without warning', function (assert) { + mockAssert.expectWarning(() => {}); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: false, + }); + }); + + test('called with callback and after test', function (assert) { + mockAssert.expectWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + + mockAssert.expectWarning(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + }); + + test('called after test, with matcher and matched warning', function (assert) { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + + mockAssert.expectWarning(/Something warned/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + }); + + test('called after test, with matcher and unmatched warning', function (assert) { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + + mockAssert.expectWarning(/different warning/); + + assert.notOk( + mockAssert.pushedResults[0].result, + '`expectWarning` logged failed result' + ); + }); + + test('called with callback, matcher and matched warning', function (assert) { + mockAssert.expectWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }, /Something warned/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + }); + + test('called with callback, matcher and unmatched warning', function (assert) { + mockAssert.expectWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }, /different warning/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: false, + }); + }); + + test('with regex matcher', function (assert) { + mockAssert.expectWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }, /Somethi[a-z ]*rned/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + + mockAssert.expectWarning(() => { + warn('/Something* warned/', false, { + id: 'warning-test', + until: '3.0.0', + }); + }, /Something* warned/); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: false, + }); + }); + + test('with string matcher', function (assert) { + mockAssert.expectWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }, 'Something'); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: true, + }); + + mockAssert.expectWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }, 'Something.*'); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: null, + message: 'Expected warnings during test, but no warnings were found.', + result: false, + }); + }); +}); + +module('expectNoWarning', function (hooks) { + let mockAssert; + setupTest(hooks); + + hooks.beforeEach(() => { + mockAssert = { + pushedResults: [], + pushResult(results) { + this.pushedResults.push(results); + }, + expectNoWarning, + }; + }); + + test('expectNoWarning called after test and without warning', function (assert) { + mockAssert.expectNoWarning(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + result: true, + }); + }); + + test('expectNoWarning called after test and with warning', function (assert) { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + + mockAssert.expectNoWarning(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + result: false, + }); + }); + + test('expectNoWarning called with callback and with warning', function (assert) { + mockAssert.expectNoWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + result: false, + }); + }); + + test('expectNoWarning called with callback and without warning', function (assert) { + mockAssert.expectNoWarning(() => {}); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [], + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + result: true, + }); + }); + + test('expectNoWarning called with callback and after test', function (assert) { + mockAssert.expectNoWarning(() => { + warn('Something warned', false, { id: 'warning-test', until: '3.0.0' }); + }); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + result: false, + }); + + // TODO: sHould this pass or fail? + mockAssert.expectNoWarning(); + + assert.deepEqual(mockAssert.pushedResults.pop(), { + actual: [ + { + message: 'Something warned', + options: { + id: 'warning-test', + until: '3.0.0', + }, + }, + ], + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + result: false, + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index e67603d2..946dd37e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,14 +17,21 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6": +"@babel/code-frame@^7.0.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/code-frame@^7.14.5", "@babel/code-frame@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.3", "@babel/compat-data@^7.19.4": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.19.3", "@babel/compat-data@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.4.tgz#95c86de137bf0317f3a570e1b6e996b427299747" integrity sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw== @@ -50,7 +57,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.19.6": +"@babel/generator@^7.14.9", "@babel/generator@^7.19.6": version "7.19.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.6.tgz#9e481a3fe9ca6261c972645ae3904ec0f9b34a1d" integrity sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA== @@ -59,6 +66,13 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -74,7 +88,17 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.9" -"@babel/helper-compilation-targets@^7.12.0", "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3": +"@babel/helper-compilation-targets@^7.12.0", "@babel/helper-compilation-targets@^7.13.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== + dependencies: + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.19.0", "@babel/helper-compilation-targets@^7.19.3": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== @@ -84,6 +108,18 @@ browserslist "^4.21.3" semver "^6.3.0" +"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz#a6f8c3de208b1e5629424a9a63567f56501955fc" + integrity sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.14.7" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" @@ -97,6 +133,14 @@ "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + regexpu-core "^4.7.1" + "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" @@ -105,6 +149,20 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" @@ -129,7 +187,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": +"@babel/helper-function-name@^7.14.5", "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== @@ -137,13 +195,20 @@ "@babel/template" "^7.18.10" "@babel/types" "^7.19.0" -"@babel/helper-hoist-variables@^7.18.6": +"@babel/helper-hoist-variables@^7.14.5", "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== dependencies: "@babel/types" "^7.18.6" +"@babel/helper-member-expression-to-functions@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-member-expression-to-functions@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" @@ -151,6 +216,13 @@ dependencies: "@babel/types" "^7.18.9" +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" @@ -158,7 +230,21 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.6": +"@babel/helper-module-transforms@^7.18.6": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" + +"@babel/helper-module-transforms@^7.19.6": version "7.19.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz#6c52cc3ac63b70952d33ee987cbee1c9368b533f" integrity sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw== @@ -172,6 +258,13 @@ "@babel/traverse" "^7.19.6" "@babel/types" "^7.19.4" +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" @@ -179,7 +272,17 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + +"@babel/helper-plugin-utils@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== @@ -194,7 +297,7 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9", "@babel/helper-replace-supers@^7.19.1": +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9", "@babel/helper-replace-supers@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== @@ -219,6 +322,13 @@ dependencies: "@babel/types" "^7.18.9" +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" @@ -231,12 +341,17 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@babel/helper-validator-identifier@^7.14.9": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" + integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== -"@babel/helper-validator-option@^7.18.6": +"@babel/helper-validator-option@^7.14.5", "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== @@ -260,7 +375,7 @@ "@babel/traverse" "^7.19.4" "@babel/types" "^7.19.4" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5", "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== @@ -269,11 +384,21 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.18.10", "@babel/parser@^7.19.6", "@babel/parser@^7.4.5", "@babel/parser@^7.7.0": +"@babel/parser@^7.14.9", "@babel/parser@^7.19.6": version "7.19.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.6.tgz#b923430cb94f58a7eae8facbffa9efd19130e7f8" integrity sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA== +"@babel/parser@^7.18.10": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.3.tgz#8dd36d17c53ff347f9e55c328710321b49479a9a" + integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== + +"@babel/parser@^7.4.5", "@babel/parser@^7.7.0": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.9.tgz#596c1ad67608070058ebf8df50c1eaf65db895a4" + integrity sha512-RdUTOseXJ8POjjOeEBEvNMIZU/nm4yu2rufRkcibzkkg7DmQvXU8v3M4Xk9G7uuI86CDGkKcuDWgioqZm+mScQ== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -300,7 +425,23 @@ "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.16.5", "@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.18.6": +"@babel/plugin-proposal-class-properties@^7.1.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-class-properties@^7.16.5", "@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-class-properties@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== @@ -317,16 +458,23 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-decorators@^7.13.5", "@babel/plugin-proposal-decorators@^7.16.7": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.6.tgz#0f1af5c21957e9a438cc1d08d2a6a6858af127b7" - integrity sha512-PKWforYpkVkogpOW0RaPuh7eQ7AoFgBJP+d87tQCRY2LVbvyGtfRM7RtrhCBsNgZb+2EY28SeWB6p2xe1Z5oAw== +"@babel/plugin-proposal-decorators@^7.13.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz#59bc4dfc1d665b5a6749cf798ff42297ed1b2c1d" + integrity sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/helper-replace-supers" "^7.19.1" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/plugin-syntax-decorators" "^7.19.0" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-decorators" "^7.14.5" + +"@babel/plugin-proposal-decorators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.16.7.tgz#922907d2e3e327f5b07d2246bcfc0bd438f360d2" + integrity sha512-DoEpnuXK14XV9btI1k8tzNGCutMclpj4yru8aXKoHlVmbO1s+2A+g2+h4JhcjrxkFJqzbymnLG6j/niOf3iFXQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-decorators" "^7.16.7" "@babel/plugin-proposal-dynamic-import@^7.18.6": version "7.18.6" @@ -422,7 +570,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -430,6 +578,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -451,7 +607,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.16.7", "@babel/plugin-syntax-decorators@^7.19.0": +"@babel/plugin-syntax-decorators@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz#eafb9c0cbe09c8afeb964ba3a7bbd63945a72f20" + integrity sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.16.7.tgz#f66a0199f16de7c1ef5192160ccf5d069739e3d3" + integrity sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-decorators@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== @@ -542,7 +712,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.2.0": +"@babel/plugin-syntax-typescript@^7.14.5", "@babel/plugin-syntax-typescript@^7.2.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== @@ -608,7 +785,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.19.0" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== @@ -616,6 +793,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-duplicate-keys@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" @@ -749,15 +934,15 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-runtime@^7.13.9": - version "7.19.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194" - integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523" + integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.19.0" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.18.6": @@ -796,7 +981,16 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typescript@^7.13.0", "@babel/plugin-transform-typescript@^7.16.8": +"@babel/plugin-transform-typescript@^7.13.0": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.14.6.tgz#6e9c2d98da2507ebe0a883b100cde3c7279df36c" + integrity sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.6" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript" "^7.14.5" + +"@babel/plugin-transform-typescript@^7.16.8": version "7.19.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz#4f1db1e0fe278b42ddbc19ec2f6cd2f8262e35d6" integrity sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w== @@ -935,13 +1129,20 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.14.0", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.14.0": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.4.tgz#a42f814502ee467d55b38dd1c256f53a7b885c78" integrity sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.8.4": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" + integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -951,7 +1152,38 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.19.4", "@babel/traverse@^7.19.6", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.9.tgz#016126b331210bf06fff29d52971eef8383e556f" + integrity sha512-bldh6dtB49L8q9bUyB7bC20UKgU+EFDwKJylwl234Kv+ySZeMD31Xeht6URyueQ6LrRRpF2tmkfcZooZR9/e8g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.9" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.14.9" + "@babel/types" "^7.14.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.3.tgz#3a3c5348d4988ba60884e8494b0592b2f15a04b4" + integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.19.3" + "@babel/types" "^7.19.3" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.19.4", "@babel/traverse@^7.19.6": version "7.19.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.6.tgz#7b4c865611df6d99cb131eec2e8ac71656a490dc" integrity sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ== @@ -967,7 +1199,15 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": +"@babel/types@^7.14.5", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2": + version "7.14.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.9.tgz#f2b19c3f2f77c5708d67fe8f6046e9cea2b5036d" + integrity sha512-u0bLTnv3DFHeaQLYzb7oRJ1JHr1sv/SYDM7JSqHFFLwXG1wTZRughxFI5NCP8qBEo1rVVsn7Yg2Lvw49nne/Ow== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + +"@babel/types@^7.14.9", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.4.tgz#0dd5c91c573a202d600490a35b33246fed8a41c7" integrity sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw== @@ -1374,9 +1614,9 @@ integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/body-parser@*": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + version "1.19.1" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.1.tgz#0c0174c42a7d017b818303d4b5d969cb0b75929c" + integrity sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg== dependencies: "@types/connect" "*" "@types/node" "*" @@ -1389,9 +1629,9 @@ "@types/chai" "*" "@types/chai@*", "@types/chai@^4.2.9": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07" - integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== + version "4.2.21" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.21.tgz#9f35a5643129df132cf3b5c1ec64046ea1af0650" + integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== "@types/connect@*": version "3.4.35" @@ -1444,9 +1684,9 @@ integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/express-serve-static-core@^4.17.18": - version "4.17.31" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" - integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== + version "4.17.24" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz#ea41f93bf7e0d59cd5a76665068ed6aab6815c07" + integrity sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1476,18 +1716,10 @@ dependencies: "@types/node" "*" -"@types/glob@*": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.0.0.tgz#321607e9cbaec54f687a0792b2d1d370739455d2" - integrity sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== +"@types/glob@*", "@types/glob@^7.1.1": + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -1503,9 +1735,9 @@ integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/mdast@^3.0.0": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" - integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.7.tgz#cba63d0cc11eb1605cea5c0ad76e02684394166b" + integrity sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg== dependencies: "@types/unist" "*" @@ -1530,9 +1762,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*", "@types/node@>=10.0.0": - version "18.11.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.4.tgz#7017a52e18dfaad32f55eebd539993014441949c" - integrity sha512-BxcJpBu8D3kv/GZkx/gSMz6VnTJREBj/4lbzYOQueUOELkt8WrO6zAcSPmp9uRPEW/d+lUO8QK0W2xnS1hEU0A== + version "16.4.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.10.tgz#e57e2a54fc6da58da94b3571b1cb456d39f88597" + integrity sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ== "@types/parse-json@^4.0.0": version "4.0.0" @@ -1802,10 +2034,20 @@ ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== +ajv@^8.0.0, ajv@^8.8.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2227,6 +2469,15 @@ babel-plugin-module-resolver@^4.1.0: reselect "^4.0.0" resolve "^1.13.1" +babel-plugin-polyfill-corejs2@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + babel-plugin-polyfill-corejs2@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" @@ -2236,6 +2487,14 @@ babel-plugin-polyfill-corejs2@^0.3.3: "@babel/helper-define-polyfill-provider" "^0.3.3" semver "^6.1.1" +babel-plugin-polyfill-corejs3@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz#68cb81316b0e8d9d721a92e0009ec6ecd4cd2ca9" + integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.14.0" + babel-plugin-polyfill-corejs3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" @@ -2244,6 +2503,13 @@ babel-plugin-polyfill-corejs3@^0.6.0: "@babel/helper-define-polyfill-provider" "^0.3.3" core-js-compat "^3.25.1" +babel-plugin-polyfill-regenerator@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + babel-plugin-polyfill-regenerator@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" @@ -2797,7 +3063,29 @@ broccoli@^3.5.2: underscore.string "^3.2.2" watch-detector "^1.0.0" -browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4: +browserslist@^4.14.5: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +browserslist@^4.16.6: + version "4.16.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335" + integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA== + dependencies: + caniuse-lite "^1.0.30001248" + colorette "^1.2.2" + electron-to-chromium "^1.3.793" + escalade "^3.1.1" + node-releases "^1.1.73" + +browserslist@^4.21.3, browserslist@^4.21.4: version "4.21.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== @@ -2951,7 +3239,7 @@ can-symlink@^1.0.0: dependencies: tmp "0.0.28" -caniuse-lite@^1.0.30001400: +caniuse-lite@^1.0.30001248, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001400: version "1.0.30001423" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001423.tgz#57176d460aa8cd85ee1a72016b961eb9aca55d91" integrity sha512-09iwWGOlifvE1XuHokFMP7eR38a0JnajoyL3/i87c8ZjRWRrdKo1fqjNfugfBD0UDBIOz0U+jtNhJ0EPm1VleQ== @@ -3121,7 +3409,12 @@ cli-highlight@^2.1.11: parse5-htmlparser2-tree-adapter "^6.0.0" yargs "^16.0.0" -cli-spinners@^2.0.0, cli-spinners@^2.6.1: +cli-spinners@^2.0.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + +cli-spinners@^2.6.1: version "2.7.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== @@ -3136,9 +3429,9 @@ cli-table3@^0.6.0: "@colors/colors" "1.5.0" cli-table@^0.3.1: - version "0.3.11" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" - integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== + version "0.3.6" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc" + integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== dependencies: colors "1.0.3" @@ -3229,6 +3522,11 @@ color-support@^1.1.3: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +colorette@^1.2.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -3409,6 +3707,14 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== +core-js-compat@^3.14.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.0.tgz#fced4a0a534e7e02f7e084bff66c701f8281805f" + integrity sha512-5D9sPHCdewoUK7pSUPfTF7ZhLh8k9/CoJXWUEo+F1dZT5Z1DVgcuRqUKhjeKW+YLb8f21rTFgWwQJiNw1hoZ5Q== + dependencies: + browserslist "^4.16.6" + semver "7.0.0" + core-js-compat@^3.25.1: version "3.26.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.0.tgz#94e2cf8ba3e63800c4956ea298a6473bc9d62b44" @@ -3429,9 +3735,9 @@ core-object@^3.1.5: chalk "^2.0.0" core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cors@~2.8.5: version "2.8.5" @@ -3527,10 +3833,10 @@ debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3. dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@~4.3.1, debug@~4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" @@ -3541,6 +3847,13 @@ debug@^3.0.1, debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@~4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + decode-named-character-reference@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" @@ -3748,9 +4061,9 @@ editions@^2.2.0: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.4.251: +electron-to-chromium@^1.3.793, electron-to-chromium@^1.4.17, electron-to-chromium@^1.4.251: version "1.4.284" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== @@ -4110,14 +4423,23 @@ ember-cli@~4.7.0: workerpool "^6.2.1" yam "^1.0.0" -ember-compatibility-helpers@^1.0.2, ember-compatibility-helpers@^1.2.1: - version "1.2.6" - resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.6.tgz#603579ab2fb14be567ef944da3fc2d355f779cd8" - integrity sha512-2UBUa5SAuPg8/kRVaiOfTwlXdeVweal1zdNPibwItrhR0IvPrXpaqwJDlEZnWKEoB+h33V0JIfiWleSG6hGkkA== +ember-compatibility-helpers@^1.0.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.5.tgz#b8363b1d5b8725afa9a4fe2b2986ac28626c6f23" + integrity sha512-7cddkQQp8Rs2Mqrj0xqZ0uO7eC9tBCKyZNcP2iE1RxQqOGPv8fiPkj1TUeidUB/Qe80lstoVXWMEuqqhW7Yy9A== + dependencies: + babel-plugin-debug-macros "^0.2.0" + ember-cli-version-checker "^5.1.1" + fs-extra "^9.1.0" + semver "^5.4.1" + +ember-compatibility-helpers@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/ember-compatibility-helpers/-/ember-compatibility-helpers-1.2.4.tgz#70e0fef7048969141626eed6006f3880df612cd1" + integrity sha512-qjzQVtogyYJrSs6I4DuyCDwDCaj5JWBVNPoZDZBk8pt7caNoN0eBYRYJdin95QKaNMQODxTLPWaI4UUDQ1YWhg== dependencies: babel-plugin-debug-macros "^0.2.0" ember-cli-version-checker "^5.1.1" - find-up "^5.0.0" fs-extra "^9.1.0" semver "^5.4.1" @@ -4349,6 +4671,29 @@ error@^7.0.0: dependencies: string-template "~0.2.1" +es-abstract@^1.18.0-next.2: + version "1.18.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" + integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: version "1.20.4" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" @@ -4815,7 +5160,18 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.0.3, fast-glob@^3.2.11: +fast-glob@^3.0.3: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.2.11: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -4858,9 +5214,9 @@ fast-sourcemap-concat@^2.1.0: sourcemap-validator "^1.1.0" fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.11.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.1.tgz#5d8175aae17db61947f8b162cfc7f63264d22807" + integrity sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw== dependencies: reusify "^1.0.4" @@ -5105,14 +5461,14 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== follow-redirects@^1.0.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + version "1.14.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" + integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== for-in@^1.0.2: version "1.0.2" @@ -5334,7 +5690,16 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-intrinsic@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== @@ -5440,7 +5805,19 @@ glob@^5.0.10: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.4, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@^7.0.0, glob@^7.0.4, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5485,9 +5862,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + version "13.10.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" + integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== dependencies: type-fest "^0.20.2" @@ -5577,11 +5954,21 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@4.2.10, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@4.2.10, graceful-fs@^4.2.6: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -5831,7 +6218,7 @@ http2-wrapper@^2.1.10: quick-lru "^5.1.1" resolve-alpn "^1.2.0" -https-proxy-agent@5, https-proxy-agent@^5.0.0: +https-proxy-agent@5: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -5839,6 +6226,14 @@ https-proxy-agent@5, https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" @@ -6107,7 +6502,12 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -6141,11 +6541,9 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" + integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== is-descriptor@^0.1.0: version "0.1.6" @@ -6239,7 +6637,7 @@ is-map@^2.0.2: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== -is-negative-zero@^2.0.2: +is-negative-zero@^2.0.1, is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== @@ -6295,6 +6693,14 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -6337,7 +6743,7 @@ is-stream@^3.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== -is-string@^1.0.5, is-string@^1.0.7: +is-string@^1.0.5, is-string@^1.0.6, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== @@ -6699,9 +7105,9 @@ linkify-it@^4.0.1: uc.micro "^1.0.1" livereload-js@^3.3.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.4.1.tgz#ba90fbc708ed1b9a024bb89c4ee12c96ea03d66f" - integrity sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g== + version "3.3.2" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.3.2.tgz#c88b009c6e466b15b91faa26fd7c99d620e12651" + integrity sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA== load-json-file@^4.0.0: version "4.0.0" @@ -7394,18 +7800,30 @@ micromatch@^4.0.2, micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.49.0, "mime-db@>= 1.43.0 < 2": + version "1.49.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" + integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== + +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@2.1.35, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.26, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@2.1.35, mime-types@^2.1.27, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.26, mime-types@~2.1.24: + version "2.1.32" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" + integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== + dependencies: + mime-db "1.49.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -7716,7 +8134,12 @@ node-notifier@^10.0.0: uuid "^8.3.2" which "^2.0.2" -node-releases@^2.0.6: +node-releases@^1.1.73: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + +node-releases@^2.0.1, node-releases@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== @@ -7840,7 +8263,12 @@ object-hash@^1.3.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== -object-inspect@^1.12.2, object-inspect@^1.9.0: +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + +object-inspect@^1.12.2: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== @@ -7857,7 +8285,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.4: +object.assign@^4.1.2, object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -8294,7 +8722,12 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.3.1: +picomatch@^2.0.4: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -8559,13 +8992,20 @@ pupa@^3.1.0: dependencies: escape-goat "^4.0.0" -qs@6.11.0, qs@^6.4.0: +qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" +qs@^6.4.0: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -8703,6 +9143,13 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -8742,6 +9189,18 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + regexpu-core@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.1.tgz#a69c26f324c1e962e9ffd0b88b055caba8089139" @@ -8782,11 +9241,23 @@ registry-url@^6.0.0: dependencies: rc "1.2.8" +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + regjsgen@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -9209,6 +9680,11 @@ semver-diff@^4.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -9575,9 +10051,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + version "3.0.9" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -9633,7 +10109,7 @@ string-template@~0.2.1: resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" integrity sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw== -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9650,6 +10126,15 @@ string-width@^2.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -9674,15 +10159,15 @@ string.prototype.matchall@^4.0.5: side-channel "^1.0.4" string.prototype.padend@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" - integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" + integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.19.1" + es-abstract "^1.18.0-next.2" -string.prototype.trimend@^1.0.5: +string.prototype.trimend@^1.0.4, string.prototype.trimend@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== @@ -9691,7 +10176,7 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.19.5" -string.prototype.trimstart@^1.0.5: +string.prototype.trimstart@^1.0.4, string.prototype.trimstart@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== @@ -10189,10 +10674,15 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript-memoize@^1.0.0-alpha.3, typescript-memoize@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.1.tgz#02737495d5df6ebf72c07ba0d002e8f4cf5ccfa0" - integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== +typescript-memoize@^1.0.0-alpha.3: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.0.1.tgz#0a8199aa28f6fe18517f6e9308ef7bfbe9a98d59" + integrity sha512-oJNge1qUrOK37d5Y6Ly2txKeuelYVsFtNF6U9kXIN7juudcQaHJQg2MxLOy0CqtkW65rVDYuTCOjnSIVPd8z3w== + +typescript-memoize@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.0.tgz#4a8f512d06fc995167c703a3592219901db8bc79" + integrity sha512-LQPKVXK8QrBBkL/zclE6YgSWn0I8ew5m0Lf+XL00IwMhlotqRLlzHV+BRrljVQIc+NohUAuQP7mg4HQwrx5Xbg== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -10200,9 +10690,19 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + version "3.14.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.1.tgz#e2cb9fe34db9cb4cf7e35d1d26dfea28e09a7d06" + integrity sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" unbox-primitive@^1.0.2: version "1.0.2" @@ -10502,7 +11002,17 @@ walker@~1.0.5: dependencies: makeerror "1.0.12" -watch-detector@^1.0.0, watch-detector@^1.0.1: +watch-detector@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/watch-detector/-/watch-detector-1.0.1.tgz#3106a6b489284ec2ecaef0e65cf1b8ec9117296e" + integrity sha512-8sJ8rvNfg2ciqCa5IxIdmdxU/vuUe9V/jw+thXbdreELSv3+Cq6k8K42cLEL86W2td1PMmfNCWZuAhrZ/sD4mw== + dependencies: + heimdalljs-logger "^0.1.10" + semver "^6.3.0" + silent-error "^1.1.1" + tmp "^0.1.0" + +watch-detector@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/watch-detector/-/watch-detector-1.0.2.tgz#95deb9189f8c89c0a9f211739cef6d01cffcf452" integrity sha512-MrJK9z7kD5Gl3jHBnnBVHvr1saVGAfmkyyrvuNzV/oe0Gr1nwZTy5VSA0Gw2j2Or0Mu8HcjUa44qlBvC2Ofnpg== From 52654536d0528382610e12087d17a5c2c182dbcc Mon Sep 17 00:00:00 2001 From: Robert Jackson <rjackson@linkedin.com> Date: Fri, 5 Nov 2021 13:43:02 -0400 Subject: [PATCH 2/6] Merge deprecation related helper utilities into single file --- .../assertions/deprecations-include.js | 13 --- addon-test-support/assertions/deprecations.js | 86 ++++++++++++++++++- .../assertions/expect-deprecation.js | 37 -------- .../assertions/expect-no-deprecation.js | 37 -------- addon-test-support/index.js | 20 +++-- .../assertions/expect-deprecation-test.js | 3 +- 6 files changed, 99 insertions(+), 97 deletions(-) delete mode 100644 addon-test-support/assertions/deprecations-include.js delete mode 100644 addon-test-support/assertions/expect-deprecation.js delete mode 100644 addon-test-support/assertions/expect-no-deprecation.js diff --git a/addon-test-support/assertions/deprecations-include.js b/addon-test-support/assertions/deprecations-include.js deleted file mode 100644 index 65a12ba6..00000000 --- a/addon-test-support/assertions/deprecations-include.js +++ /dev/null @@ -1,13 +0,0 @@ -import { getDeprecations } from '@ember/test-helpers'; - -export default function deprecationsInclude(expected) { - const deprecations = getDeprecations().map( - (deprecation) => deprecation.message - ); - - this.pushResult({ - result: deprecations.indexOf(expected) > -1, - actual: deprecations, - message: `expected to find \`${expected}\` deprecation`, - }); -} diff --git a/addon-test-support/assertions/deprecations.js b/addon-test-support/assertions/deprecations.js index 0396a450..235b2616 100644 --- a/addon-test-support/assertions/deprecations.js +++ b/addon-test-support/assertions/deprecations.js @@ -1,6 +1,22 @@ -import { getDeprecationsDuringCallback } from '@ember/test-helpers'; +import { + getDeprecationsDuringCallback, + getDeprecations, +} from '@ember/test-helpers'; +import checkMatcher from './utils/check-matcher'; -export default async function deprecations(callback, expectedDeprecations) { +export function deprecationsInclude(expected) { + const deprecations = getDeprecations().map( + (deprecation) => deprecation.message + ); + + this.pushResult({ + result: deprecations.indexOf(expected) > -1, + actual: deprecations, + message: `expected to find \`${expected}\` deprecation`, + }); +} + +export function expectDeprecations(callback, expectedDeprecations) { const maybeThenable = getDeprecationsDuringCallback(callback); const operation = (deprecations) => { @@ -16,8 +32,72 @@ export default async function deprecations(callback, expectedDeprecations) { maybeThenable !== null && typeof maybeThenable.then === 'function' ) { - operation(await maybeThenable); + return maybeThenable.then(operation); } else { operation(maybeThenable); } } + +export function expectDeprecation(cb, matcher) { + const test = (deprecations, matcher) => { + const matchedDeprecations = deprecations.filter((deprecation) => { + return checkMatcher(deprecation.message, matcher); + }); + + this.pushResult({ + result: matchedDeprecations.length !== 0, + actual: matchedDeprecations, + expected: null, + message: + 'Expected deprecations during test, but no deprecations were found.', + }); + }; + + if (typeof cb !== 'function') { + // cb is not a callback, so we assume it is the matcher + test(getDeprecations(), cb); + } else { + const maybeThenable = getDeprecationsDuringCallback(cb); + if ( + maybeThenable !== null && + typeof maybeThenable === 'object' && + typeof maybeThenable.then === 'function' + ) { + return maybeThenable.then((deprecations) => test(deprecations, matcher)); + } else { + test(maybeThenable, matcher); + } + } +} + +export function expectNoDeprecation(cb, matcher) { + const test = (deprecations, matcher) => { + const matchedDeprecations = deprecations.filter((deprecation) => { + return checkMatcher(deprecation.message, matcher); + }); + + this.pushResult({ + result: matchedDeprecations.length === 0, + actual: matchedDeprecations, + expected: [], + message: + 'Expected no deprecations during test, but deprecations were found.', + }); + }; + + if (typeof cb !== 'function') { + // cb is not a callback, so we assume it is the matcher + test(getDeprecations(), cb); + } else { + const maybeThenable = getDeprecationsDuringCallback(cb); + if ( + maybeThenable !== null && + typeof maybeThenable === 'object' && + typeof maybeThenable.then === 'function' + ) { + return maybeThenable.then((deprecations) => test(deprecations, matcher)); + } else { + test(maybeThenable, matcher); + } + } +} diff --git a/addon-test-support/assertions/expect-deprecation.js b/addon-test-support/assertions/expect-deprecation.js deleted file mode 100644 index 3c6926c2..00000000 --- a/addon-test-support/assertions/expect-deprecation.js +++ /dev/null @@ -1,37 +0,0 @@ -import { - getDeprecationsDuringCallback, - getDeprecations, -} from '@ember/test-helpers'; -import checkMatcher from './utils/check-matcher'; - -export default function expectDeprecation(cb, matcher) { - const test = (deprecations, matcher) => { - const matchedDeprecations = deprecations.filter((deprecation) => { - return checkMatcher(deprecation.message, matcher); - }); - - this.pushResult({ - result: matchedDeprecations.length !== 0, - actual: matchedDeprecations, - expected: null, - message: - 'Expected deprecations during test, but no deprecations were found.', - }); - }; - - if (typeof cb !== 'function') { - // cb is not a callback, so we assume it is the matcher - test(getDeprecations(), cb); - } else { - const maybeThenable = getDeprecationsDuringCallback(cb); - if ( - maybeThenable !== null && - typeof maybeThenable === 'object' && - typeof maybeThenable.then === 'function' - ) { - return maybeThenable.then((deprecations) => test(deprecations, matcher)); - } else { - test(maybeThenable, matcher); - } - } -} diff --git a/addon-test-support/assertions/expect-no-deprecation.js b/addon-test-support/assertions/expect-no-deprecation.js deleted file mode 100644 index 69a4d211..00000000 --- a/addon-test-support/assertions/expect-no-deprecation.js +++ /dev/null @@ -1,37 +0,0 @@ -import checkMatcher from './utils/check-matcher'; -import { - getDeprecations, - getDeprecationsDuringCallback, -} from '@ember/test-helpers'; - -export default function expectNoDeprecation(cb, matcher) { - const test = (deprecations, matcher) => { - const matchedDeprecations = deprecations.filter((deprecation) => { - return checkMatcher(deprecation.message, matcher); - }); - - this.pushResult({ - result: matchedDeprecations.length === 0, - actual: matchedDeprecations, - expected: [], - message: - 'Expected no deprecations during test, but deprecations were found.', - }); - }; - - if (typeof cb !== 'function') { - // cb is not a callback, so we assume it is the matcher - test(getDeprecations(), cb); - } else { - const maybeThenable = getDeprecationsDuringCallback(cb); - if ( - maybeThenable !== null && - typeof maybeThenable === 'object' && - typeof maybeThenable.then === 'function' - ) { - return maybeThenable.then((deprecations) => test(deprecations, matcher)); - } else { - test(maybeThenable, matcher); - } - } -} diff --git a/addon-test-support/index.js b/addon-test-support/index.js index 67d3dea8..c7f8a88a 100644 --- a/addon-test-support/index.js +++ b/addon-test-support/index.js @@ -26,17 +26,27 @@ import { installTestNotIsolatedHook } from './test-isolation-validation'; let waitForSettled = true; -import deprecationsInclude from './assertions/deprecations-include'; -import deprecations from './assertions/deprecations'; -import expectNoDeprecation from './assertions/expect-no-deprecation'; -import expectDeprecation from './assertions/expect-deprecation'; +export { + expectDeprecations, + deprecationsInclude, + expectDeprecation, + expectNoDeprecation, +} from './assertions/deprecations'; + +import { + expectDeprecations, + deprecationsInclude, + expectDeprecation, + expectNoDeprecation, +} from './assertions/deprecations'; import expectNoRunloop from './assertions/expect-no-runloop'; + // import expectWarning from './assertions/expect-warning'; // export function setupAsserts(assert) { // TODO: decide which of these we should keep, which depreacte and which drop. assert.deprecationsInclude = deprecationsInclude; - assert.deprecations = deprecations; + assert.deprecations = expectDeprecations; assert.expectNoDeprecation = expectNoDeprecation; assert.expectDeprecation = expectDeprecation; // compat assert.expectNoRunloop = expectNoRunloop; // compat but fixed name diff --git a/tests/unit/assertions/expect-deprecation-test.js b/tests/unit/assertions/expect-deprecation-test.js index 6d3081e2..2796daf2 100644 --- a/tests/unit/assertions/expect-deprecation-test.js +++ b/tests/unit/assertions/expect-deprecation-test.js @@ -1,6 +1,5 @@ import { module, test } from 'qunit'; -import expectDeprecation from 'ember-qunit/assertions/expect-deprecation'; -import expectNoDeprecation from 'ember-qunit/assertions/expect-no-deprecation'; +import { expectDeprecation, expectNoDeprecation } from 'ember-qunit'; import { deprecate } from '@ember/debug'; import { setupTest } from 'ember-qunit'; // ............................................................ From a709a2e4bd6fc63abf31cf40b11f0132d71c66c3 Mon Sep 17 00:00:00 2001 From: Robert Jackson <rjackson@linkedin.com> Date: Fri, 5 Nov 2021 13:45:23 -0400 Subject: [PATCH 3/6] Remove runloop related assertions --- .../assertions/expect-no-runloop.js | 65 -------------- addon-test-support/index.js | 4 - tests/unit/assertions/runloop-test.js | 86 ------------------- 3 files changed, 155 deletions(-) delete mode 100644 addon-test-support/assertions/expect-no-runloop.js delete mode 100644 tests/unit/assertions/runloop-test.js diff --git a/addon-test-support/assertions/expect-no-runloop.js b/addon-test-support/assertions/expect-no-runloop.js deleted file mode 100644 index 497e67a0..00000000 --- a/addon-test-support/assertions/expect-no-runloop.js +++ /dev/null @@ -1,65 +0,0 @@ -import { - run, - end, - _getCurrentRunLoop, - _hasScheduledTimers, - _cancelTimers, -} from '@ember/runloop'; - -function getCurrentRunLoop() { - // Ember 3.24.4 does not have _getCurrentRunLoop, but does have run.currentRunLoop; - if ('currentRunLoop' in run) { - return run.currentRunLoop; - } else { - return _getCurrentRunLoop(); - } -} - -// TODO: It seems very odd to mix runloop + timers into a runloop -// specific assertion. -// -// We should likely: -// -// * have timer specific expectations -// * have runloop specific expectations -// * not have either cancel timers or runloop, rather those should -// be the explicitly choosen by the user -export default function expectNoRunloop() { - if (getCurrentRunLoop()) { - this.pushResult({ - result: false, - actual: getCurrentRunLoop(), - expected: null, - message: 'expected no active runloop', - }); - - while (getCurrentRunLoop()) { - end(); - } - } else { - this.pushResult({ - result: true, - actual: null, - expected: null, - message: 'expected no active runloop', - }); - } - - if (_hasScheduledTimers()) { - this.pushResult({ - result: false, - actual: true, - expected: false, - message: 'expected no active timers', - }); - - _cancelTimers(); - } else { - this.pushResult({ - result: true, - actual: false, - expected: false, - message: 'expected no active timers', - }); - } -} diff --git a/addon-test-support/index.js b/addon-test-support/index.js index c7f8a88a..0a3b49e7 100644 --- a/addon-test-support/index.js +++ b/addon-test-support/index.js @@ -39,7 +39,6 @@ import { expectDeprecation, expectNoDeprecation, } from './assertions/deprecations'; -import expectNoRunloop from './assertions/expect-no-runloop'; // import expectWarning from './assertions/expect-warning'; // @@ -49,9 +48,6 @@ export function setupAsserts(assert) { assert.deprecations = expectDeprecations; assert.expectNoDeprecation = expectNoDeprecation; assert.expectDeprecation = expectDeprecation; // compat - assert.expectNoRunloop = expectNoRunloop; // compat but fixed name - // around for compat - assert.exepectNoRunLoop = expectNoRunloop; // compat but wrong camelization } export function setupTest(hooks, _options) { diff --git a/tests/unit/assertions/runloop-test.js b/tests/unit/assertions/runloop-test.js deleted file mode 100644 index fda2c6f6..00000000 --- a/tests/unit/assertions/runloop-test.js +++ /dev/null @@ -1,86 +0,0 @@ -import { run, begin, later } from '@ember/runloop'; -import { test, module } from 'qunit'; -import expectNoRunloop from 'ember-qunit/assertions/expect-no-runloop'; - -module('expectNoRunLoop', function (hooks) { - let mockAssert; - hooks.beforeEach(function () { - mockAssert = { - pushedResults: [], - pushResult(result) { - this.pushedResults.push(result); - }, - expectNoRunloop, - }; - }); - - test('in a run loop', function (assert) { - mockAssert.expectNoRunloop(); - - assert.deepEqual(mockAssert.pushedResults.shift(), { - result: true, - actual: null, - expected: null, - message: 'expected no active runloop', - }); - - assert.deepEqual(mockAssert.pushedResults.shift(), { - result: true, - actual: false, - expected: false, - message: 'expected no active timers', - }); - - begin(); - - mockAssert.expectNoRunloop(); - - { - const { result, message } = mockAssert.pushedResults.shift(); - assert.deepEqual( - { result, message }, - { - result: false, - message: 'expected no active runloop', - } - ); - } - }); - - test('`expectNoRunLoop` when timers are active', function (assert) { - later(() => { - assert.ok(false, 'should not execute'); - }); - - assert.ok(run.hasScheduledTimers(), 'expect timers to exist'); - mockAssert.expectNoRunloop(); - - { - const result = mockAssert.pushedResults.shift(); - - assert.deepEqual(result, { - result: true, - actual: null, - expected: null, - message: 'expected no active runloop', - }); - } - - // TODO: i don't think this should have cancelled timers - { - const result = mockAssert.pushedResults.shift(); - - assert.deepEqual(result, { - result: false, - actual: true, - expected: false, - message: 'expected no active timers', - }); - } - - assert.notOk( - run.hasScheduledTimers(), - 'expects timers to have all been ended' - ); - }); -}); From 7d3cc0772987fe45e64b3b046faf9744c51d90ae Mon Sep 17 00:00:00 2001 From: Robert Jackson <rjackson@linkedin.com> Date: Fri, 5 Nov 2021 13:49:45 -0400 Subject: [PATCH 4/6] Remove expectAssertion tests --- tests/unit/assertions/assertion-test.js | 58 ------------------------- 1 file changed, 58 deletions(-) delete mode 100644 tests/unit/assertions/assertion-test.js diff --git a/tests/unit/assertions/assertion-test.js b/tests/unit/assertions/assertion-test.js deleted file mode 100644 index de53dc2b..00000000 --- a/tests/unit/assertions/assertion-test.js +++ /dev/null @@ -1,58 +0,0 @@ -import { module, test } from 'qunit'; -// import expectAssertion from 'ember-qunit/assertions/expect-assertion'; -import { assert as emberAssert } from '@ember/debug'; - -module.skip('expectAssertion', function (hooks) { - let mockAssert; - - hooks.beforeEach(() => { - mockAssert = { - pushedResults: [], - expectAssertion, - }; - }); - - test('called with assert', function (assert) { - mockAssert.expectAssertion(() => { - emberAssert('testing assert'); - }); - - assert.ok( - mockAssert.pushedResults[0].result, - '`expectAssertion` captured deprecation call' - ); - }); - - test('called without deprecation', function (assert) { - mockAssert.expectAssertion(() => { - emberAssert('testing assert', true); - }); - - assert.notOk( - mockAssert.pushedResults[0].result, - '`expectAssertion` logged failed result' - ); - }); - - test('called with deprecation and matched assert', function (assert) { - mockAssert.expectAssertion(() => { - emberAssert('testing assert'); - }, /testing/); - - assert.ok( - mockAssert.pushedResults[0].result, - '`expectAssertion` captured deprecation call' - ); - }); - - test('called with deprecation and unmatched assert', function (assert) { - mockAssert.expectAssertion(() => { - emberAssert('testing assert'); - }, /different/); - - assert.notOk( - mockAssert.pushedResults[0].result, - '`expectAssertion` logged failed result' - ); - }); -}); From 58ed3a072186f2aac6be3ba9c0669cac3179180a Mon Sep 17 00:00:00 2001 From: Robert Jackson <rjackson@linkedin.com> Date: Mon, 24 Oct 2022 14:16:58 -0400 Subject: [PATCH 5/6] Add required deprecation fields for Ember 4 --- .../assertions/expect-deprecation-test.js | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/tests/unit/assertions/expect-deprecation-test.js b/tests/unit/assertions/expect-deprecation-test.js index 2796daf2..2c4e4f73 100644 --- a/tests/unit/assertions/expect-deprecation-test.js +++ b/tests/unit/assertions/expect-deprecation-test.js @@ -7,6 +7,11 @@ import { setupTest } from 'ember-qunit'; deprecate('Deprecation outside of a test', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); // ............................................................ @@ -28,6 +33,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); mockAssert.expectDeprecation(); @@ -39,6 +49,11 @@ module('expectDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -66,6 +81,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }); @@ -76,6 +96,11 @@ module('expectDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -103,6 +128,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }); @@ -115,6 +145,11 @@ module('expectDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -132,6 +167,11 @@ module('expectDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -146,6 +186,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); mockAssert.expectDeprecation(/Something deprecated/); @@ -157,6 +202,11 @@ module('expectDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -171,6 +221,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); mockAssert.expectDeprecation(/different deprecation/); @@ -188,6 +243,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }, /Something deprecated/); @@ -198,6 +258,11 @@ module('expectDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -213,6 +278,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }, /different deprecation/); @@ -230,12 +300,22 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }, /Somethi[a-z ]*ecated/); mockAssert.expectDeprecation(() => { deprecate('/Something* deprecated/', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }, /Something* deprecated/); @@ -254,6 +334,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }, 'Something'); @@ -261,6 +346,11 @@ module('expectDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }, 'Something.*'); @@ -306,6 +396,11 @@ module('expectNoDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); mockAssert.expectNoDeprecation(); @@ -316,6 +411,11 @@ module('expectNoDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -331,6 +431,11 @@ module('expectNoDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }); @@ -341,6 +446,11 @@ module('expectNoDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -368,6 +478,11 @@ module('expectNoDeprecation', function (hooks) { deprecate('Something deprecated', false, { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }); }); @@ -378,6 +493,11 @@ module('expectNoDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], @@ -397,6 +517,11 @@ module('expectNoDeprecation', function (hooks) { options: { id: 'deprecation-test', until: '3.0.0', + for: 'ember-qunit-tests', + since: { + available: '6.1.0', + enabled: '6.1.0', + }, }, }, ], From 3658245da10943831b4aae59852e9de4f35b8b59 Mon Sep 17 00:00:00 2001 From: Robert Jackson <rjackson@linkedin.com> Date: Mon, 24 Oct 2022 15:23:42 -0400 Subject: [PATCH 6/6] Add `assert.expectWarning` / `assert.expectNoWarning`. --- .../assertions/expect-no-warning.js | 15 ----------- .../{expect-warning.js => warnings.js} | 19 +++++++++++-- addon-test-support/index.js | 27 +++++++++++++------ tests/unit/assertions/warning-test.js | 4 +-- yarn.lock | 19 +++++-------- 5 files changed, 44 insertions(+), 40 deletions(-) delete mode 100644 addon-test-support/assertions/expect-no-warning.js rename addon-test-support/assertions/{expect-warning.js => warnings.js} (53%) diff --git a/addon-test-support/assertions/expect-no-warning.js b/addon-test-support/assertions/expect-no-warning.js deleted file mode 100644 index fc750290..00000000 --- a/addon-test-support/assertions/expect-no-warning.js +++ /dev/null @@ -1,15 +0,0 @@ -import { getWarnings, getWarningsDuringCallback } from '@ember/test-helpers'; - -export default function expectNoWarning(callback) { - const warnings = - typeof callback === 'function' - ? getWarningsDuringCallback(callback) - : getWarnings(); - - this.pushResult({ - result: warnings.length === 0, - actual: warnings, - expected: [], - message: 'Expected no warnings during test, but warnings were found.', - }); -} diff --git a/addon-test-support/assertions/expect-warning.js b/addon-test-support/assertions/warnings.js similarity index 53% rename from addon-test-support/assertions/expect-warning.js rename to addon-test-support/assertions/warnings.js index e51dab01..ae70e26a 100644 --- a/addon-test-support/assertions/expect-warning.js +++ b/addon-test-support/assertions/warnings.js @@ -1,7 +1,22 @@ import checkMatcher from './utils/check-matcher'; -import { getWarningsDuringCallback, getWarnings } from '@ember/test-helpers'; -export default function expectWarning(callback, matcher) { +import { getWarnings, getWarningsDuringCallback } from '@ember/test-helpers'; + +export function expectNoWarning(callback) { + const warnings = + typeof callback === 'function' + ? getWarningsDuringCallback(callback) + : getWarnings(); + + this.pushResult({ + result: warnings.length === 0, + actual: warnings, + expected: [], + message: 'Expected no warnings during test, but warnings were found.', + }); +} + +export function expectWarning(callback, matcher) { let warnings; if (typeof callback === 'function') { warnings = getWarningsDuringCallback(callback); diff --git a/addon-test-support/index.js b/addon-test-support/index.js index 0a3b49e7..548e8a78 100644 --- a/addon-test-support/index.js +++ b/addon-test-support/index.js @@ -3,6 +3,19 @@ export { default as QUnitAdapter, nonTestDoneCallback } from './adapter'; export { loadTests } from './test-loader'; +export { + expectDeprecations, + deprecationsInclude, + expectDeprecation, + expectNoDeprecation, +} from './assertions/deprecations'; + +export { + expectWarning, + expectNoWarning, +} from './assertions/warnings'; + + import './qunit-configuration'; if (typeof Testem !== 'undefined') { @@ -26,7 +39,7 @@ import { installTestNotIsolatedHook } from './test-isolation-validation'; let waitForSettled = true; -export { +import { expectDeprecations, deprecationsInclude, expectDeprecation, @@ -34,20 +47,18 @@ export { } from './assertions/deprecations'; import { - expectDeprecations, - deprecationsInclude, - expectDeprecation, - expectNoDeprecation, -} from './assertions/deprecations'; + expectWarning, + expectNoWarning, +} from './assertions/warnings'; -// import expectWarning from './assertions/expect-warning'; -// export function setupAsserts(assert) { // TODO: decide which of these we should keep, which depreacte and which drop. assert.deprecationsInclude = deprecationsInclude; assert.deprecations = expectDeprecations; assert.expectNoDeprecation = expectNoDeprecation; assert.expectDeprecation = expectDeprecation; // compat + assert.expectWarning = expectWarning; + assert.expectNoWarning = expectNoWarning; } export function setupTest(hooks, _options) { diff --git a/tests/unit/assertions/warning-test.js b/tests/unit/assertions/warning-test.js index 947d69bb..5c5efa17 100644 --- a/tests/unit/assertions/warning-test.js +++ b/tests/unit/assertions/warning-test.js @@ -1,6 +1,6 @@ import { module, test } from 'qunit'; -import expectWarning from 'ember-qunit/assertions/expect-warning'; -import expectNoWarning from 'ember-qunit/assertions/expect-no-warning'; +import { expectWarning } from 'ember-qunit'; +import { expectNoWarning } from 'ember-qunit'; import { warn } from '@ember/debug'; import { setupTest } from 'ember-qunit'; diff --git a/yarn.lock b/yarn.lock index 946dd37e..4aa86698 100644 --- a/yarn.lock +++ b/yarn.lock @@ -57,7 +57,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.14.9", "@babel/generator@^7.19.6": +"@babel/generator@^7.14.9", "@babel/generator@^7.19.3", "@babel/generator@^7.19.6": version "7.19.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.6.tgz#9e481a3fe9ca6261c972645ae3904ec0f9b34a1d" integrity sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA== @@ -120,7 +120,7 @@ "@babel/helper-replace-supers" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": +"@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz#bfd6904620df4e46470bae4850d66be1054c404b" integrity sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw== @@ -297,7 +297,7 @@ "@babel/helper-wrap-function" "^7.18.9" "@babel/types" "^7.18.9" -"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9", "@babel/helper-replace-supers@^7.19.1": +"@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz#e1592a9b4b368aa6bdb8784a711e0bcbf0612b78" integrity sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw== @@ -308,7 +308,7 @@ "@babel/traverse" "^7.19.1" "@babel/types" "^7.19.0" -"@babel/helper-simple-access@^7.19.4": +"@babel/helper-simple-access@^7.18.6", "@babel/helper-simple-access@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz#be553f4951ac6352df2567f7daa19a0ee15668e7" integrity sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg== @@ -384,7 +384,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.14.9", "@babel/parser@^7.19.6": +"@babel/parser@^7.14.9", "@babel/parser@^7.19.3", "@babel/parser@^7.19.6": version "7.19.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.6.tgz#b923430cb94f58a7eae8facbffa9efd19130e7f8" integrity sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA== @@ -621,13 +621,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-decorators@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz#5f13d1d8fce96951bea01a10424463c9a5b3a599" - integrity sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ== - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -1207,7 +1200,7 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" -"@babel/types@^7.14.9", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.4": +"@babel/types@^7.14.9", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.19.4": version "7.19.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.4.tgz#0dd5c91c573a202d600490a35b33246fed8a41c7" integrity sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==