diff --git a/README.md b/README.md index dd47791..d66afbb 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,9 @@ Then, we can add our assertion to the chain. - `await expect(selector).to.have.text('string')` - Test the text value of the selected element(s) against supplied string. Succeeds if at least one element matches exactly - `await expect(selector).to.have.text(/regex/)` - Test the text value of the selected element(s) against the supplied regular expression. Succeeds if at least one element matches - `await expect(selector).to.have.text(/regex/)` - Test the text value of the selected element(s) against the supplied regular expression. Succeeds if at least one element matches +- `await expect(selector).text.to.ordered.include.members(['foo', 'bar'])` - Test that the text of the selected elements includes `'foo'` followed by `'bar'` +- `await expect(selector).text.to.have.members(['foo', 'bar'])` - Test that the text of the selected elements is exactly the set `['foo', 'bar']`, in any order +- `await expect(selector).text.to.satisfy(fn)` - Test that `fn` returns `true` when called with the array of texts of the selected elements - `await expect(selector).to.have.attribute('attributeName')` - Test whether [at least one] matching element has the given attribute - `await expect(selector).to.have.attribute('attributeName', 'string')` - Test the attribute value of the selected element(s) against supplied string. Succeeds if at least one element matches exactly - `await expect(selector).to.have.attribute('attributeName', /regex/)` - Test the attribute value of the selected element(s) against supplied regular expression. Succeeds if at least one element matches exactly @@ -45,6 +48,9 @@ Then, we can add our assertion to the chain. - `await expect(selector).to.have.count.at.most(n)` - Test that at most `n` elements exist in the DOM with the supplied selector - `await expect(selector).to.have.value('string')` - Test that [at least one] selected element has a value matching the given string - `await expect(selector).to.have.value(/regex/)` - Test that [at least one] selected element has a value matching the given regular expression +- `await expect(selector).value.to.ordered.include.members(['foo', 'bar'])` - Test that the value of the selected elements includes `'foo'` followed by `'bar'` +- `await expect(selector).value.to.have.members(['foo', 'bar'])` - Test that the value of the selected elements is exactly the set `['foo', 'bar']`, in any order +- `await expect(selector).value.to.satisfy(fn)` - Test that `fn` returns `true` when called with the array of values of the selected elements - `await expect(selector).to.have.focus()` - (alias for `to.be.focused()`) You can also always add a `not` in there to negate the assertion: diff --git a/package.json b/package.json index 4927744..b706361 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "trailingComma": "es5" }, "config": { - "mocha": "-r @babel/register test/configure.js 'test/**/*.js'", + "mocha": "-r @babel/register test/configure.js test/index.js 'test/**/*.js'", "commitizen": { "path": "cz-conventional-changelog" } @@ -96,7 +96,7 @@ "@jedwards1211/eslint-config-flow": "^2.0.0", "babel-eslint": "^10.0.1", "babel-plugin-istanbul": "^5.1.0", - "chai": "^4.2.0", + "chai": "^4.3.0", "chai-as-promised": "^7.1.1", "codecov": "^3.1.0", "copy": "^0.3.2", @@ -111,7 +111,7 @@ "husky": "^1.1.4", "istanbul": "^0.4.5", "lint-staged": "^8.0.4", - "mocha": "^8.2.1", + "mocha": "^8.3.0", "nyc": "^13.1.0", "prettier": "^1.15.2", "prettier-eslint": "^8.8.2", diff --git a/src/assertions/text.js b/src/assertions/text.js index 262b660..3fc601b 100644 --- a/src/assertions/text.js +++ b/src/assertions/text.js @@ -6,18 +6,17 @@ import getElements from '../util/getElements' -const text = (client, chai, utils, options) => - async function(expected) { +const text = (client, chai, utils, options) => { + async function assertText(expected) { const negate = utils.flag(this, 'negate') + const { getValueAndSelector } = utils.flag(this, 'chai-webdriverio-async') + const [texts, selector] = await getValueAndSelector() + const expectedStr = typeof expected === 'string' ? JSON.stringify(expected) : expected - const [elements, selector] = await getElements( - utils.flag(this, 'object'), - client - ) - if (!elements.length) { + if (!texts.length) { throw new chai.AssertionError( negate ? `Expected element <${selector}> to not have text ${expectedStr}, but no matching elements were found` @@ -25,16 +24,9 @@ const text = (client, chai, utils, options) => ) } - const texts = [] - const filteredList = (await Promise.all( - elements.map(async element => { - const text = await element.getText() - texts.push(text) - return expected instanceof RegExp - ? text.match(expected) - : text === expected - }) - )).filter(Boolean) + const filteredList = texts.filter(text => + expected instanceof RegExp ? text.match(expected) : text === expected + ) this.assert( filteredList.length > 0, @@ -46,5 +38,18 @@ const text = (client, chai, utils, options) => .join(', ')}` ) } + assertText.chain = function chainText() { + const obj = utils.flag(this, 'object') + utils.flag(this, 'chai-webdriverio-async', { + type: 'text', + message: `elements' text for #{selector}`, + getValueAndSelector: async () => { + const [elements, selector] = await getElements(obj, client) + return [await Promise.all(elements.map(e => e.getText())), selector] + }, + }) + } + return assertText +} export default text diff --git a/src/assertions/value.js b/src/assertions/value.js index 6cf5d88..33b4193 100644 --- a/src/assertions/value.js +++ b/src/assertions/value.js @@ -6,18 +6,17 @@ import getElements from '../util/getElements' -const value = (client, chai, utils, options) => - async function(expected) { +const value = (client, chai, utils, options) => { + async function assertValue(expected) { const negate = utils.flag(this, 'negate') + const { getValueAndSelector } = utils.flag(this, 'chai-webdriverio-async') + const [values, selector] = await getValueAndSelector() + const expectedStr = typeof expected === 'string' ? JSON.stringify(expected) : expected - const [elements, selector] = await getElements( - utils.flag(this, 'object'), - client - ) - if (!elements.length) { + if (!values.length) { throw new chai.AssertionError( negate ? `Expected element <${selector}> to not have value ${expectedStr}, but no matching elements were found` @@ -25,16 +24,9 @@ const value = (client, chai, utils, options) => ) } - const values = [] - const filteredList = (await Promise.all( - elements.map(async element => { - const value = await element.getValue() - values.push(value) - return expected instanceof RegExp - ? value.match(expected) - : value === expected - }) - )).filter(Boolean) + const filteredList = values.filter(value => + expected instanceof RegExp ? value.match(expected) : value === expected + ) this.assert( filteredList.length > 0, @@ -46,5 +38,18 @@ const value = (client, chai, utils, options) => .join(', ')}` ) } + assertValue.chain = function chainValue() { + const obj = utils.flag(this, 'object') + utils.flag(this, 'chai-webdriverio-async', { + type: 'value', + message: `elements' values for #{selector}`, + getValueAndSelector: async () => { + const [elements, selector] = await getElements(obj, client) + return [await Promise.all(elements.map(e => e.getValue())), selector] + }, + }) + } + return assertValue +} export default value diff --git a/src/index.js b/src/index.js index f49f00d..5307912 100644 --- a/src/index.js +++ b/src/index.js @@ -60,15 +60,64 @@ export default function(client, options = {}) { return (async () => { const { getValueAndSelector, ...rest } = ourFlag const [value, selector] = await getValueAndSelector() - return handler.call(this, { ...rest, value, selector, args }) + if (!handler) return _super.apply(this, args) + return handler.call(this, { + ...rest, + _super, + value, + selector, + args, + }) })() } else { - _super.apply(this, arguments) + _super.apply(this, args) } } }) } + function defaultOverwriteAssert(_super) { + return function chaiWebdriverIOAssertion(...args) { + const ourFlag = utils.flag(this, 'chai-webdriverio-async') + if (ourFlag) { + return (async () => { + const { getValueAndSelector, message } = ourFlag + const [value, selector] = await getValueAndSelector() + const assertion = new Assertion(value) + utils.transferFlags(this, assertion) + utils.flag(assertion, 'object', value) + if (message) { + utils.flag( + assertion, + 'message', + [ + utils.flag(this, 'message'), + message.replace(/#\{selector\}/g, `<${selector}>`), + ] + .filter(Boolean) + .join(': ') + ) + } + return _super.apply(assertion, args) + })() + } else { + _super.apply(this, args) + } + } + } + + function defaultOverwriteMethod(name) { + Assertion.overwriteMethod(name, defaultOverwriteAssert) + } + + function defaultOverwriteChainableMethod(name) { + Assertion.overwriteChainableMethod( + name, + defaultOverwriteAssert, + chain => chain + ) + } + overwriteMethod('above', function assertAbove({ value, selector, @@ -124,5 +173,25 @@ export default function(client, options = {}) { value ) }) + + overwriteMethod('within', function assertAtMost({ + value, + selector, + args: [lower, upper], + }) { + this.assert( + value >= lower && value <= upper, + `Expected <${selector}> to appear in the DOM between ${lower} and ${upper} times, but it shows up ${value} times instead.`, + `Expected <${selector}> not to appear in the DOM between ${lower} and ${upper} times, but it shows up ${value} times instead.` + ) + }) + + defaultOverwriteMethod('members') + defaultOverwriteMethod('oneOf') + defaultOverwriteMethod('satisfy') + defaultOverwriteChainableMethod('include') + defaultOverwriteChainableMethod('includes') + defaultOverwriteChainableMethod('contain') + defaultOverwriteChainableMethod('contains') } } diff --git a/test/assertions/attribute-test.js b/test/assertions/attribute-test.js index c8a851d..334848d 100644 --- a/test/assertions/attribute-test.js +++ b/test/assertions/attribute-test.js @@ -4,23 +4,18 @@ * https://github.com/marcodejongh/chai-webdriverio */ -import chai, { expect } from 'chai' -import FakeClient from '../stubs/fake-client' +import { expect } from 'chai' import FakeElement from '../stubs/fake-element' import { describe, beforeEach, it } from 'mocha' -import chaiWebdriverio from '../../src' +import fakeClient from '../stubs/fakeClient' -const fakeClient = new FakeClient() const fakeElement1 = new FakeElement() const fakeElement2 = new FakeElement() describe('attribute', () => { beforeEach(() => { - fakeClient.__resetStubs__() fakeElement1.__resetStubs__() fakeElement2.__resetStubs__() - - chai.use(chaiWebdriverio(fakeClient)) }) describe(`When element doesn't exist`, function() { diff --git a/test/assertions/booleanAssertionTest.js b/test/assertions/booleanAssertionTest.js index 076ba44..d4794e1 100644 --- a/test/assertions/booleanAssertionTest.js +++ b/test/assertions/booleanAssertionTest.js @@ -1,10 +1,8 @@ -import chai, { expect } from 'chai' - +import { expect } from 'chai' import { describe, beforeEach, afterEach, it } from 'mocha' -import FakeClient from '../stubs/fake-client' import FakeElement from '../stubs/fake-element' -import chaiWebdriverio from '../../src' import { upperFirst, lowerCase } from 'lodash' +import fakeClient from '../stubs/fakeClient' export const booleanAssertionTest = ({ method, @@ -12,22 +10,17 @@ export const booleanAssertionTest = ({ allowNone, }) => describe(method, () => { - let fakeClient let fakeElement1 beforeEach(() => { - fakeClient = new FakeClient() fakeElement1 = new FakeElement() fakeElement1[`is${upperFirst(method)}`].resolves(false) fakeClient.$$.withArgs('.some-selector').resolves([fakeElement1]) fakeClient.$$.withArgs('.other-selector').resolves([]) - - chai.use(chaiWebdriverio(fakeClient)) }) afterEach(() => { - fakeClient.__resetStubs__() fakeElement1.__resetStubs__() }) diff --git a/test/assertions/count-test.js b/test/assertions/count-test.js index 82c8fe4..8fb2ef0 100644 --- a/test/assertions/count-test.js +++ b/test/assertions/count-test.js @@ -4,27 +4,21 @@ * https://github.com/marcodejongh/chai-webdriverio */ -import chai, { expect } from 'chai' -import FakeClient from '../stubs/fake-client' +import { expect } from 'chai' import FakeElement from '../stubs/fake-element' -import chaiWebdriverio from '../../src/index' +import { describe, beforeEach, it } from 'mocha' +import fakeClient from '../stubs/fakeClient' describe('count', () => { let elements - let fakeClient beforeEach(() => { elements = [new FakeElement(), new FakeElement()] - fakeClient = new FakeClient() fakeClient.$$.rejects('ArgumentError') fakeClient.$$.withArgs('.some-selector').resolves(elements) - - chai.use(chaiWebdriverio(fakeClient)) }) - afterEach(() => fakeClient.__resetStubs__()) - describe('When not negated', () => { it(`resolves when element count matches expectation`, async function() { await expect('.some-selector').to.have.count(2) @@ -174,4 +168,36 @@ describe('count', () => { ) }) }) + + describe(`when not negated with within`, function() { + it(`resolves when element count is within expectation`, async function() { + await expect('.some-selector').to.have.count.within(2, 4) + await expect('.some-selector').to.have.count.within(1, 2) + await expect('.some-selector').to.have.count.within(1, 4) + }) + it(`rejects when element count is not within expectation`, async function() { + await expect( + expect('.some-selector') + .to.have.count.within(0, 1) + .then(null) + ).to.be.rejectedWith( + 'Expected <.some-selector> to appear in the DOM between 0 and 1 times, but it shows up 2 times instead.' + ) + }) + }) + describe(`when negated with within`, function() { + it(`resolves when element count is not within expectation`, async function() { + await expect('.some-selector').to.not.have.count.within(0, 1) + await expect('.some-selector').to.not.have.count.within(3, 4) + }) + it(`rejects when element count is within expectation`, async function() { + await expect( + expect('.some-selector') + .to.not.have.count.within(1, 2) + .then(null) + ).to.be.rejectedWith( + 'Expected <.some-selector> not to appear in the DOM between 1 and 2 times, but it shows up 2 times instead.' + ) + }) + }) }) diff --git a/test/assertions/text-test.js b/test/assertions/text-test.js index 8304a9e..9c5e3b6 100644 --- a/test/assertions/text-test.js +++ b/test/assertions/text-test.js @@ -4,23 +4,18 @@ * https://github.com/marcodejongh/chai-webdriverio */ -import chai, { expect } from 'chai' -import FakeClient from '../stubs/fake-client' +import { expect } from 'chai' import FakeElement from '../stubs/fake-element' import { describe, beforeEach, it } from 'mocha' -import chaiWebdriverio from '../../src' +import fakeClient from '../stubs/fakeClient' -const fakeClient = new FakeClient() const fakeElement1 = new FakeElement() const fakeElement2 = new FakeElement() describe('text', () => { beforeEach(() => { - fakeClient.__resetStubs__() fakeElement1.__resetStubs__() fakeElement2.__resetStubs__() - - chai.use(chaiWebdriverio(fakeClient)) }) describe(`When element doesn't exist`, function() { @@ -184,5 +179,84 @@ describe('text', () => { ) }) }) + + describe(`When not negated with .members`, function() { + it(`resolves when all texts are present`, async function() { + await expect('.some-selector').text.to.have.members([ + elementText2, + elementText1, + ]) + await expect('.some-selector').text.to.have.members([ + elementText1, + elementText2, + ]) + }) + it(`rejects when excess actual texts are present`, async function() { + await expect( + expect('.some-selector') + .text.to.have.members([elementText1]) + .then(null) + ).to.be.rejectedWith( + `elements' text for <.some-selector>: expected [ Array(2) ] to have the same members as` + ) + }) + it(`rejects when some expected texts are missing`, async function() { + await expect( + expect('.some-selector') + .text.to.have.members([elementText1, 'blah']) + .then(null) + ).to.be.rejectedWith(`elements' text for <.some-selector>`) + }) + }) + + describe(`With .include/.contain/.includes`, function() { + it(`resolves when all texts are present`, async function() { + await expect('.some-selector').text.to.include.members([ + elementText1, + elementText2, + ]) + await expect('.some-selector').text.to.include.members([ + elementText2, + elementText1, + ]) + await expect('.some-selector').text.to.include.members([elementText1]) + await expect('.some-selector').text.to.include.members([elementText2]) + await expect('.some-selector').text.to.contain(elementText1) + await expect('.some-selector').text.to.include(elementText2) + await expect('.some-selector').text.includes(elementText2) + await expect('.some-selector').text.to.contain.oneOf([ + 'blah', + elementText2, + ]) + }) + it(`rejects when some expected texts are missing`, async function() { + await expect( + expect('.some-selector') + .text.to.include.members([elementText1, 'blah']) + .then(null) + ).to.be.rejectedWith( + `elements' text for <.some-selector>: expected [ Array(2) ] to be a superset of` + ) + }) + }) + + describe(`With .satisfy`, function() { + it(`resolves when satisfies expression`, async function() { + await expect('.some-selector').text.to.satisfy(arr => arr.length === 2) + await expect('.some-selector').text.to.satisfy( + arr => arr[0] === elementText1 + ) + }) + + it(`rejects when doesn't satisfy expression`, async function() { + await expect( + expect('.some-selector') + .text.to.satisfy(arr => arr[0] === elementText2) + .then(null) + ).to.be.rejectedWith( + `elements' text for <.some-selector>: expected [ Array(2) ] to satisfy [Function]` + ) + }) + }) }) }) diff --git a/test/assertions/value-test.js b/test/assertions/value-test.js index 3b19e26..86f3975 100644 --- a/test/assertions/value-test.js +++ b/test/assertions/value-test.js @@ -4,23 +4,18 @@ * https://github.com/marcodejongh/chai-webdriverio */ -import chai, { expect } from 'chai' -import FakeClient from '../stubs/fake-client' +import { expect } from 'chai' import FakeElement from '../stubs/fake-element' import { describe, beforeEach, it } from 'mocha' -import chaiWebdriverio from '../../src' +import fakeClient from '../stubs/fakeClient' -const fakeClient = new FakeClient() const fakeElement1 = new FakeElement() const fakeElement2 = new FakeElement() describe('value', () => { beforeEach(() => { - fakeClient.__resetStubs__() fakeElement1.__resetStubs__() fakeElement2.__resetStubs__() - - chai.use(chaiWebdriverio(fakeClient)) }) describe(`When element doesn't exist`, function() { @@ -184,5 +179,32 @@ describe('value', () => { ) }) }) + + describe(`When not negated with .members`, function() { + it(`resolves when all values are present`, async function() { + await expect('.some-selector').value.to.have.members([ + elementValue2, + elementValue1, + ]) + await expect('.some-selector').value.to.have.members([ + elementValue1, + elementValue2, + ]) + }) + it(`rejects when excess actual values are present`, async function() { + await expect( + expect('.some-selector') + .value.to.have.members([elementValue1]) + .then(null) + ).to.be.rejectedWith(`elements' values for <.some-selector>`) + }) + it(`rejects when some expected values are missing`, async function() { + await expect( + expect('.some-selector') + .value.to.have.members([elementValue1, 'blah']) + .then(null) + ).to.be.rejectedWith(`elements' values for <.some-selector>`) + }) + }) }) }) diff --git a/test/index.js b/test/index.js new file mode 100644 index 0000000..7a4949a --- /dev/null +++ b/test/index.js @@ -0,0 +1,10 @@ +import chai from 'chai' +import fakeClient from './stubs/fakeClient' +import { beforeEach } from 'mocha' +import chaiWebdriverio from '../src' + +chai.use(chaiWebdriverio(fakeClient)) + +beforeEach(() => { + fakeClient.__resetStubs__() +}) diff --git a/test/stubs/fake-client.js b/test/stubs/fakeClient.js similarity index 89% rename from test/stubs/fake-client.js rename to test/stubs/fakeClient.js index 678e2fc..c65f0bb 100644 --- a/test/stubs/fake-client.js +++ b/test/stubs/fakeClient.js @@ -3,7 +3,7 @@ import { getPrototype } from 'webdriverio/build/utils' const clientPrototype = getPrototype('browser') -export default class FakeClient { +class FakeClient { constructor() { const fakeClient = {} Object.keys(clientPrototype).forEach( @@ -18,3 +18,5 @@ export default class FakeClient { .forEach(key => this[key].reset()) } } + +export default new FakeClient() diff --git a/yarn.lock b/yarn.lock index 29d8b19..ba8cefa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1196,11 +1196,6 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -1218,6 +1213,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + ansi-styles@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" @@ -1328,6 +1330,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + argv-formatter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" @@ -1813,11 +1820,6 @@ camelcase@^4.0.0, camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - camelcase@^6.0.0: version "6.2.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" @@ -1853,10 +1855,10 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" - integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== +chai@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.0.tgz#5523a5faf7f819c8a92480d70a8cccbadacfc25f" + integrity sha512-/BFd2J30EcOwmdOgXvVsmM48l0Br0nmZPlO0uOW4XKh6kpsUumRXBgPV+IlaqFaqr9cYbeoZAM1Npx0i4A+aiA== dependencies: assertion-error "^1.1.0" check-error "^1.0.2" @@ -1925,10 +1927,10 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -chokidar@3.4.3: - version "3.4.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -1938,7 +1940,7 @@ chokidar@3.4.3: normalize-path "~3.0.0" readdirp "~3.5.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.1" chokidar@^2.0.0, chokidar@^2.0.3, chokidar@^2.0.4: version "2.0.4" @@ -2068,14 +2070,14 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" clone-stats@^0.0.1: version "0.0.1" @@ -2512,10 +2514,10 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== +debug@4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" @@ -2553,7 +2555,7 @@ decamelize-keys@^1.0.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2683,7 +2685,12 @@ dezalgo@^1.0.0, dezalgo@~1.0.3: asap "^2.0.0" wrappy "1" -diff@4.0.2, diff@^4.0.2: +diff@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== @@ -2772,10 +2779,10 @@ elegant-spinner@^1.0.1: resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== encoding@^0.1.11: version "0.1.12" @@ -2842,6 +2849,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -3553,10 +3565,10 @@ fsevents@^1.2.2: nan "^2.9.2" node-pre-gyp "^0.10.0" -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== fstream@^1.0.0, fstream@^1.0.2: version "1.0.11" @@ -3620,9 +3632,9 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: +get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.0: @@ -4332,6 +4344,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -4669,14 +4686,6 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.14.0: - version "3.14.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" @@ -4685,6 +4694,13 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.9.0, js-yaml@^3.9.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -5647,35 +5663,35 @@ mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkd dependencies: minimist "0.0.8" -mocha@^8.2.1: - version "8.2.1" - resolved "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" - integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== +mocha@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz#a83a7432d382ae1ca29686062d7fdc2c36f63fe5" + integrity sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.4.3" - debug "4.2.0" - diff "4.0.2" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" glob "7.1.6" growl "1.10.5" he "1.2.0" - js-yaml "3.14.0" + js-yaml "4.0.0" log-symbols "4.0.0" minimatch "3.0.4" - ms "2.1.2" - nanoid "3.1.12" + ms "2.1.3" + nanoid "3.1.20" serialize-javascript "5.0.1" strip-json-comments "3.1.1" - supports-color "7.2.0" + supports-color "8.1.1" which "2.0.2" wide-align "1.1.3" - workerpool "6.0.2" - yargs "13.3.2" - yargs-parser "13.1.2" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" yargs-unparser "2.0.0" modify-values@^1.0.0: @@ -5710,6 +5726,11 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@^2.0.0, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -5725,10 +5746,10 @@ nan@^2.9.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA== -nanoid@3.1.12: - version "3.1.12" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" - integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== nanomatch@^1.2.9: version "1.2.13" @@ -7200,11 +7221,6 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - require-relative@^0.8.7: version "0.8.7" resolved "https://registry.yarnpkg.com/require-relative/-/require-relative-0.8.7.tgz#7999539fc9e047a37928fa196f8e1563dabd36de" @@ -7883,14 +7899,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -7939,13 +7955,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -7996,10 +8005,10 @@ success-symbol@^0.1.0: resolved "https://registry.yarnpkg.com/success-symbol/-/success-symbol-0.1.0.tgz#24022e486f3bf1cdca094283b769c472d3b72897" integrity sha1-JAIuSG878c3KCUKDt2nEctO3KJc= -supports-color@7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" @@ -8625,10 +8634,10 @@ worker-farm@^1.6.0: dependencies: errno "~0.1.7" -workerpool@6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" - integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== wrap-ansi@^2.0.0: version "2.1.0" @@ -8646,14 +8655,14 @@ wrap-ansi@^3.0.1: string-width "^2.1.1" strip-ansi "^4.0.0" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" @@ -8701,6 +8710,11 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -8711,13 +8725,10 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^10.1.0: version "10.1.0" @@ -8726,6 +8737,11 @@ yargs-parser@^10.1.0: dependencies: camelcase "^4.1.0" +yargs-parser@^20.2.2: + version "20.2.6" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" + integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== + yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" @@ -8761,21 +8777,18 @@ yargs@11.1.0, yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@13.3.2: - version "13.3.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" yargs@^12.0.0, yargs@^12.0.1: version "12.0.2"