From 5c7a4924f10f338bf14add324d4a96c39c8dc200 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 11 Sep 2021 11:39:19 +0300 Subject: [PATCH 01/20] test: Refactor Hashicorp and Hex versioning (#11684) --- lib/versioning/hashicorp/index.spec.ts | 192 ++++++--------- lib/versioning/hex/index.spec.ts | 314 +++++++------------------ 2 files changed, 163 insertions(+), 343 deletions(-) diff --git a/lib/versioning/hashicorp/index.spec.ts b/lib/versioning/hashicorp/index.spec.ts index b6e06d36392476..e05f9ae507add4 100644 --- a/lib/versioning/hashicorp/index.spec.ts +++ b/lib/versioning/hashicorp/index.spec.ts @@ -1,125 +1,77 @@ import { api as semver } from '.'; describe('versioning/hashicorp/index', () => { - describe('semver.matches()', () => { - it('handles tilde greater than', () => { - expect(semver.matches('4.2.0', '~> 4.0')).toBe(true); - expect(semver.matches('4.2.0', '~> 4.0.0')).toBe(false); - }); - }); - describe('semver.getSatisfyingVersion()', () => { - it('handles tilde greater than', () => { - expect( - semver.getSatisfyingVersion( - ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], - '~> 4.0' - ) - ).toBe('4.2.0'); - expect( - semver.getSatisfyingVersion( - ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], - '~> 4.0.0' - ) - ).toBe('4.0.0'); - }); - }); - describe('semver.isValid()', () => { - it('handles comma', () => { - expect(semver.isValid('>= 1.0.0, <= 2.0.0')).toBeTruthy(); - }); - }); - describe('semver.isLessThanRange()', () => { - it('handles comma', () => { - expect(semver.isLessThanRange('0.9.0', '>= 1.0.0, <= 2.0.0')).toBe(true); - expect(semver.isLessThanRange('1.9.0', '>= 1.0.0, <= 2.0.0')).toBe(false); - }); - }); - describe('semver.minSatisfyingVersion()', () => { - it('handles tilde greater than', () => { - expect( - semver.minSatisfyingVersion( - ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], - '~> 4.0' - ) - ).toBe('4.2.0'); - expect( - semver.minSatisfyingVersion( - ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], - '~> 4.0.0' - ) - ).toBeNull(); - }); - }); - describe('semver.getNewValue()', () => { - it('handles tilde greater than', () => { - expect( - semver.getNewValue({ - currentValue: '~> 1.2', - rangeStrategy: 'replace', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('~> 2.0'); - expect( - semver.getNewValue({ - currentValue: '~> 1.2.0', - rangeStrategy: 'replace', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('~> 2.0.0'); - expect( - semver.getNewValue({ - currentValue: '~> 0.14.0', - rangeStrategy: 'replace', - currentVersion: '0.14.1', - newVersion: '0.15.0', - }) - ).toEqual('~> 0.15.0'); - expect( - semver.getNewValue({ - currentValue: '~> 0.14.0', - rangeStrategy: 'replace', - currentVersion: '0.14.1', - newVersion: '0.15.1', - }) - ).toEqual('~> 0.15.0'); - expect( - semver.getNewValue({ - currentValue: '~> 0.14.6', - rangeStrategy: 'replace', - currentVersion: '0.14.6', - newVersion: '0.15.0', - }) - ).toEqual('~> 0.15.0'); - }); - it('handles comma dividers', () => { - expect( - semver.getNewValue({ - currentValue: '>= 1.0.0, <= 2.0.0', - rangeStrategy: 'widen', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('>= 1.0.0, <= 2.0.7'); - }); - it('updates short ranges', () => { - expect( - semver.getNewValue({ - currentValue: '0.14', - rangeStrategy: 'replace', - currentVersion: '0.14.2', - newVersion: '0.15.0', - }) - ).toEqual('0.15'); - expect( - semver.getNewValue({ - currentValue: '~> 0.14', - rangeStrategy: 'replace', - currentVersion: '0.14.2', - newVersion: '0.15.0', - }) - ).toEqual('~> 0.15'); - }); + test.each` + version | range | expected + ${'4.2.0'} | ${'~> 4.0'} | ${true} + ${'4.2.0'} | ${'~> 4.0.0'} | ${false} + `( + 'matches("$version", "$range") === $expected', + ({ version, range, expected }) => { + expect(semver.matches(version, range)).toBe(expected); + } + ); + test.each` + versions | range | expected + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'} + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${'4.0.0'} + `( + 'getSatisfyingVersion($versions, "$range") === $expected', + ({ versions, range, expected }) => { + expect(semver.getSatisfyingVersion(versions, range)).toBe(expected); + } + ); + + test.each` + input | expected + ${'>= 1.0.0, <= 2.0.0'} | ${true} + `('isValid("$input") === $expected', ({ input, expected }) => { + const res = !!semver.isValid(input); + expect(res).toBe(expected); }); + + test.each` + version | range | expected + ${'0.9.0'} | ${'>= 1.0.0, <= 2.0.0'} | ${true} + ${'1.9.0'} | ${'>= 1.0.0, <= 2.0.0'} | ${false} + `( + 'isLessThanRange($version, $range) === $expected', + ({ version, range, expected }) => { + expect(semver.isLessThanRange(version, range)).toBe(expected); + } + ); + + test.each` + versions | range | expected + ${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'} + ${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${null} + `( + 'minSatisfyingVersion($versions, "$range") === $expected', + ({ versions, range, expected }) => { + expect(semver.minSatisfyingVersion(versions, range)).toBe(expected); + } + ); + + test.each` + currentValue | rangeStrategy | currentVersion | newVersion | expected + ${'~> 1.2'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0'} + ${'~> 1.2.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0.0'} + ${'~> 0.14.0'} | ${'replace'} | ${'0.14.1'} | ${'0.15.0'} | ${'~> 0.15.0'} + ${'~> 0.14.0'} | ${'replace'} | ${'0.14.1'} | ${'0.15.1'} | ${'~> 0.15.0'} + ${'~> 0.14.6'} | ${'replace'} | ${'0.14.6'} | ${'0.15.0'} | ${'~> 0.15.0'} + ${'>= 1.0.0, <= 2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.0.7'} | ${'>= 1.0.0, <= 2.0.7'} + ${'0.14'} | ${'replace'} | ${'0.14.2'} | ${'0.15.0'} | ${'0.15'} + ${'~> 0.14'} | ${'replace'} | ${'0.14.2'} | ${'0.15.0'} | ${'~> 0.15'} + `( + 'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"', + ({ currentValue, rangeStrategy, currentVersion, newVersion, expected }) => { + const res = semver.getNewValue({ + currentValue, + rangeStrategy, + currentVersion, + newVersion, + }); + expect(res).toEqual(expected); + } + ); }); diff --git a/lib/versioning/hex/index.spec.ts b/lib/versioning/hex/index.spec.ts index 4388e001985ea3..05e6beadf4b14f 100644 --- a/lib/versioning/hex/index.spec.ts +++ b/lib/versioning/hex/index.spec.ts @@ -1,228 +1,96 @@ import { api as hexScheme } from '.'; describe('versioning/hex/index', () => { - describe('hexScheme.matches()', () => { - it('handles tilde greater than', () => { - expect(hexScheme.matches('4.2.0', '~> 4.0')).toBe(true); - expect(hexScheme.matches('2.1.0', '~> 2.0.0')).toBe(false); - expect(hexScheme.matches('2.0.0', '>= 2.0.0 and < 2.1.0')).toBe(true); - expect(hexScheme.matches('2.1.0', '== 2.0.0 or < 2.1.0')).toBe(false); - expect(hexScheme.matches('1.9.4', '== 1.9.4')).toBe(true); - expect(hexScheme.matches('1.9.5', '== 1.9.4')).toBe(false); - }); - }); - it('handles tilde greater than', () => { - expect( - hexScheme.getSatisfyingVersion( - ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], - '~> 4.0' - ) - ).toBe('4.2.0'); - expect( - hexScheme.getSatisfyingVersion( - ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], - '~> 4.0.0' - ) - ).toBe('4.0.0'); - }); - describe('hexScheme.isValid()', () => { - it('handles and', () => { - expect(hexScheme.isValid('>= 1.0.0 and <= 2.0.0')).toBeTruthy(); - }); - it('handles or', () => { - expect(hexScheme.isValid('>= 1.0.0 or <= 2.0.0')).toBeTruthy(); - }); - it('handles !=', () => { - expect(hexScheme.isValid('!= 1.0.0')).toBeTruthy(); - }); - it('handles ==', () => { - expect(hexScheme.isValid('== 1.0.0')).toBeTruthy(); - }); - }); - describe('hexScheme.isLessThanRange()', () => { - it('handles and', () => { - expect(hexScheme.isLessThanRange('0.1.0', '>= 1.0.0 and <= 2.0.0')).toBe( - true - ); - expect(hexScheme.isLessThanRange('1.9.0', '>= 1.0.0 and <= 2.0.0')).toBe( - false - ); - }); - it('handles or', () => { - expect(hexScheme.isLessThanRange('0.9.0', '>= 1.0.0 or >= 2.0.0')).toBe( - true - ); - expect(hexScheme.isLessThanRange('1.9.0', '>= 1.0.0 or >= 2.0.0')).toBe( - false - ); - }); - }); - describe('hexScheme.minSatisfyingVersion()', () => { - it('handles tilde greater than', () => { - expect( - hexScheme.minSatisfyingVersion( - ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], - '~> 4.0' - ) - ).toBe('4.2.0'); - expect( - hexScheme.minSatisfyingVersion( - ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], - '~> 4.0.0' - ) - ).toBeNull(); - }); - }); - describe('hexScheme.getNewValue()', () => { - it('handles exact pin', () => { - expect( - hexScheme.getNewValue({ - currentValue: '== 1.2.3', - rangeStrategy: 'pin', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('== 2.0.7'); - }); - it('handles exact bump', () => { - expect( - hexScheme.getNewValue({ - currentValue: '== 3.6.1', - rangeStrategy: 'bump', - currentVersion: '3.6.1', - newVersion: '3.6.2', - }) - ).toEqual('== 3.6.2'); - }); - it('handles exact replace', () => { - expect( - hexScheme.getNewValue({ - currentValue: '== 3.6.1', - rangeStrategy: 'replace', - currentVersion: '3.6.1', - newVersion: '3.6.2', - }) - ).toEqual('== 3.6.2'); - }); - it('handles tilde greater than', () => { - expect( - hexScheme.getNewValue({ - currentValue: '~> 1.2', - rangeStrategy: 'replace', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('~> 2.0'); - expect( - hexScheme.getNewValue({ - currentValue: '~> 1.2', - rangeStrategy: 'pin', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('== 2.0.7'); - expect( - hexScheme.getNewValue({ - currentValue: '~> 1.2', - rangeStrategy: 'bump', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('~> 2.0'); - expect( - hexScheme.getNewValue({ - currentValue: '~> 1.2', - rangeStrategy: 'bump', - currentVersion: '1.2.3', - newVersion: '1.3.1', - }) - ).toEqual('~> 1.3'); - expect( - hexScheme.getNewValue({ - currentValue: '~> 1.2.0', - rangeStrategy: 'replace', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('~> 2.0.0'); - expect( - hexScheme.getNewValue({ - currentValue: '~> 1.2.0', - rangeStrategy: 'pin', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('== 2.0.7'); - expect( - hexScheme.getNewValue({ - currentValue: '~> 1.2.0', - rangeStrategy: 'bump', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('~> 2.0.7'); - }); - }); - it('handles and', () => { - expect( - hexScheme.getNewValue({ - currentValue: '>= 1.0.0 and <= 2.0.0', - rangeStrategy: 'widen', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('>= 1.0.0 and <= 2.0.7'); - expect( - hexScheme.getNewValue({ - currentValue: '>= 1.0.0 and <= 2.0.0', - rangeStrategy: 'replace', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('<= 2.0.7'); - expect( - hexScheme.getNewValue({ - currentValue: '>= 1.0.0 and <= 2.0.0', - rangeStrategy: 'pin', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('== 2.0.7'); - }); - it('handles or', () => { - expect( - hexScheme.getNewValue({ - currentValue: '>= 1.0.0 or <= 2.0.0', - rangeStrategy: 'widen', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('>= 1.0.0 or <= 2.0.0'); - expect( - hexScheme.getNewValue({ - currentValue: '>= 1.0.0 or <= 2.0.0', - rangeStrategy: 'replace', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('<= 2.0.7'); - expect( - hexScheme.getNewValue({ - currentValue: '>= 1.0.0 or <= 2.0.0', - rangeStrategy: 'pin', - currentVersion: '1.2.3', - newVersion: '2.0.7', - }) - ).toEqual('== 2.0.7'); - }); - it('handles short range replace', () => { - expect( - hexScheme.getNewValue({ - currentValue: '~> 0.4', - rangeStrategy: 'replace', - currentVersion: '0.4.2', - newVersion: '0.6.0', - }) - ).toEqual('~> 0.6'); + test.each` + version | range | expected + ${'4.2.0'} | ${'~> 4.0'} | ${true} + ${'2.1.0'} | ${'~> 2.0.0'} | ${false} + ${'2.0.0'} | ${'>= 2.0.0 and < 2.1.0'} | ${true} + ${'2.1.0'} | ${'== 2.0.0 or < 2.1.0'} | ${false} + ${'1.9.4'} | ${'== 1.9.4'} | ${true} + ${'1.9.5'} | ${'== 1.9.4'} | ${false} + `( + 'matches("$version", "$range") === $expected', + ({ version, range, expected }) => { + expect(hexScheme.matches(version, range)).toBe(expected); + } + ); + + test.each` + versions | range | expected + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'} + ${['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${'4.0.0'} + `( + 'getSatisfyingVersion($versions, "$range") === $expected', + ({ versions, range, expected }) => { + expect(hexScheme.getSatisfyingVersion(versions, range)).toBe(expected); + } + ); + + test.each` + input | expected + ${'>= 1.0.0 and <= 2.0.0'} | ${true} + ${'>= 1.0.0 or <= 2.0.0'} | ${true} + ${'!= 1.0.0'} | ${true} + ${'== 1.0.0'} | ${true} + `('isValid("$input") === $expected', ({ input, expected }) => { + const res = !!hexScheme.isValid(input); + expect(res).toBe(expected); }); + + test.each` + version | range | expected + ${'0.1.0'} | ${'>= 1.0.0 and <= 2.0.0'} | ${true} + ${'1.9.0'} | ${'>= 1.0.0 and <= 2.0.0'} | ${false} + ${'0.9.0'} | ${'>= 1.0.0 or >= 2.0.0'} | ${true} + ${'1.9.0'} | ${'>= 1.0.0 or >= 2.0.0'} | ${false} + `( + 'isLessThanRange($version, $range) === $expected', + ({ version, range, expected }) => { + expect(hexScheme.isLessThanRange(version, range)).toBe(expected); + } + ); + + test.each` + versions | range | expected + ${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0'} | ${'4.2.0'} + ${['0.4.0', '0.5.0', '4.2.0', '5.0.0']} | ${'~> 4.0.0'} | ${null} + `( + 'minSatisfyingVersion($versions, "$range") === $expected', + ({ versions, range, expected }) => { + expect(hexScheme.minSatisfyingVersion(versions, range)).toBe(expected); + } + ); + + test.each` + currentValue | rangeStrategy | currentVersion | newVersion | expected + ${'== 1.2.3'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'} + ${'== 3.6.1'} | ${'bump'} | ${'3.6.1'} | ${'3.6.2'} | ${'== 3.6.2'} + ${'== 3.6.1'} | ${'replace'} | ${'3.6.1'} | ${'3.6.2'} | ${'== 3.6.2'} + ${'~> 1.2'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0'} + ${'~> 1.2'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'} + ${'~> 1.2'} | ${'bump'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0'} + ${'~> 1.2'} | ${'bump'} | ${'1.2.3'} | ${'1.3.1'} | ${'~> 1.3'} + ${'~> 1.2.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0.0'} + ${'~> 1.2.0'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'} + ${'~> 1.2.0'} | ${'bump'} | ${'1.2.3'} | ${'2.0.7'} | ${'~> 2.0.7'} + ${'>= 1.0.0 and <= 2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.0.7'} | ${'>= 1.0.0 and <= 2.0.7'} + ${'>= 1.0.0 and <= 2.0.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'<= 2.0.7'} + ${'>= 1.0.0 and <= 2.0.0'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'} + ${'>= 1.0.0 or <= 2.0.0'} | ${'widen'} | ${'1.2.3'} | ${'2.0.7'} | ${'>= 1.0.0 or <= 2.0.0'} + ${'>= 1.0.0 or <= 2.0.0'} | ${'replace'} | ${'1.2.3'} | ${'2.0.7'} | ${'<= 2.0.7'} + ${'>= 1.0.0 or <= 2.0.0'} | ${'pin'} | ${'1.2.3'} | ${'2.0.7'} | ${'== 2.0.7'} + ${'~> 0.4'} | ${'replace'} | ${'0.4.2'} | ${'0.6.0'} | ${'~> 0.6'} + `( + 'getNewValue("$currentValue", "$rangeStrategy", "$currentVersion", "$newVersion") === "$expected"', + ({ currentValue, rangeStrategy, currentVersion, newVersion, expected }) => { + const res = hexScheme.getNewValue({ + currentValue, + rangeStrategy, + currentVersion, + newVersion, + }); + expect(res).toEqual(expected); + } + ); }); From 3e503bdd8e18c99256b973e921815ccab85ee307 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 Sep 2021 14:32:44 +0000 Subject: [PATCH 02/20] build(deps): update dependency simple-git to v2.45.1 (#11686) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4481ea839d875c..8b4b8b0b118afc 100644 --- a/package.json +++ b/package.json @@ -184,7 +184,7 @@ "semver-utils": "1.1.4", "shlex": "2.1.0", "shortid": "2.2.16", - "simple-git": "2.45.0", + "simple-git": "2.45.1", "slugify": "1.6.0", "traverse": "0.6.6", "upath": "2.0.1", diff --git a/yarn.lock b/yarn.lock index d5c87cce21f7a6..b3dd7e1b944362 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8580,10 +8580,10 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -simple-git@2.45.0: - version "2.45.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.45.0.tgz#4d53b146fc23496099ebfc7af5b0d605d0e3e504" - integrity sha512-wu/Ujs9IXn0HuyYm4HyRvne+EKsjJSWKEMkB3wQa3gNHSMHt7y3oeNX9zRQ3UBPk7bRRMLLHAdIZCZfHT9ehPg== +simple-git@2.45.1: + version "2.45.1" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.45.1.tgz#27d26ae59f734ffd7e1dea16a1ee3b309d68f5ef" + integrity sha512-NmEoThiLTJxl26WNtZxtJTue18ReTcSrf3so5vJG/O8KY9uMxH+yAhXV/DElBJyOYZrrBbVsH8JOFxgENdc9Xg== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" From 5e2a615332ac500503a5e86f04484ba106d59df8 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 12 Sep 2021 14:44:00 +0200 Subject: [PATCH 03/20] test: fix typo in spec file (#11693) --- lib/versioning/poetry/index.spec.ts | 170 ++++++++++++++-------------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/lib/versioning/poetry/index.spec.ts b/lib/versioning/poetry/index.spec.ts index 3e702bc70c4195..2db974e4cd3a38 100644 --- a/lib/versioning/poetry/index.spec.ts +++ b/lib/versioning/poetry/index.spec.ts @@ -1,4 +1,4 @@ -import { api as versionig } from '.'; +import { api as versioning } from '.'; describe('versioning/poetry/index', () => { describe('equals', () => { @@ -8,7 +8,7 @@ describe('versioning/poetry/index', () => { ['1.0.0', '1'], ['1.9.0', '1.9'], ])('%s == %s', (a, b) => { - expect(versionig.equals(a, b)).toBe(true); + expect(versioning.equals(a, b)).toBe(true); }); it.each([ @@ -16,7 +16,7 @@ describe('versioning/poetry/index', () => { ['1.9.1', '1.9'], ['1.9-beta', '1.9'], ])('%s != %s', (a, b) => { - expect(versionig.equals(a, b)).toBe(false); + expect(versioning.equals(a, b)).toBe(false); }); }); @@ -26,7 +26,7 @@ describe('versioning/poetry/index', () => { ['1.9', 1], ['1.9.0', 1], ])('%s -> %i', (version, expected) => { - expect(versionig.getMajor(version)).toEqual(expected); + expect(versioning.getMajor(version)).toEqual(expected); }); }); @@ -36,7 +36,7 @@ describe('versioning/poetry/index', () => { ['1.9', 9], ['1.9.0', 9], ])('%s -> %i', (version, expected) => { - expect(versionig.getMinor(version)).toEqual(expected); + expect(versioning.getMinor(version)).toEqual(expected); }); }); @@ -47,7 +47,7 @@ describe('versioning/poetry/index', () => { ['1.9.0', 0], ['1.9.4', 4], ])('%s -> %i', (version, expected) => { - expect(versionig.getPatch(version)).toEqual(expected); + expect(versioning.getPatch(version)).toEqual(expected); }); }); @@ -59,7 +59,7 @@ describe('versioning/poetry/index', () => { ['1.10.0', '1.9'], ['1.9', '1.9-beta'], ])('%s > %s', (a, b) => { - expect(versionig.isGreaterThan(a, b)).toBe(true); + expect(versioning.isGreaterThan(a, b)).toBe(true); }); it.each([ @@ -68,7 +68,7 @@ describe('versioning/poetry/index', () => { ['1.0.0', '1'], ['1.9.0', '1.9'], ])('%s <= %s', (a, b) => { - expect(versionig.isGreaterThan(a, b)).toBe(false); + expect(versioning.isGreaterThan(a, b)).toBe(false); }); }); @@ -80,74 +80,74 @@ describe('versioning/poetry/index', () => { ['1.9.4', true], ['1.9.4-beta', false], ])('%s -> %i', (version, expected) => { - expect(versionig.isStable(version)).toEqual(expected); + expect(versioning.isStable(version)).toEqual(expected); }); }); describe('isValid(input)', () => { it('should return null for irregular versions', () => { - expect(versionig.isValid('17.04.0')).toBeFalsy(); + expect(versioning.isValid('17.04.0')).toBeFalsy(); }); it('should support simple semver', () => { - expect(versionig.isValid('1.2.3')).toBeTruthy(); + expect(versioning.isValid('1.2.3')).toBeTruthy(); }); it('should support semver with dash', () => { - expect(versionig.isValid('1.2.3-foo')).toBeTruthy(); + expect(versioning.isValid('1.2.3-foo')).toBeTruthy(); }); it('should reject semver without dash', () => { - expect(versionig.isValid('1.2.3foo')).toBeFalsy(); + expect(versioning.isValid('1.2.3foo')).toBeFalsy(); }); it('should work with wildcards', () => { - expect(versionig.isValid('*')).toBeTruthy(); + expect(versioning.isValid('*')).toBeTruthy(); }); it('should support ranges', () => { - expect(versionig.isValid('~1.2.3')).toBeTruthy(); - expect(versionig.isValid('^1.2.3')).toBeTruthy(); - expect(versionig.isValid('>1.2.3')).toBeTruthy(); + expect(versioning.isValid('~1.2.3')).toBeTruthy(); + expect(versioning.isValid('^1.2.3')).toBeTruthy(); + expect(versioning.isValid('>1.2.3')).toBeTruthy(); }); it('should reject github repositories', () => { - expect(versionig.isValid('renovatebot/renovate')).toBeFalsy(); - expect(versionig.isValid('renovatebot/renovate#master')).toBeFalsy(); + expect(versioning.isValid('renovatebot/renovate')).toBeFalsy(); + expect(versioning.isValid('renovatebot/renovate#master')).toBeFalsy(); expect( - versionig.isValid('https://github.com/renovatebot/renovate.git') + versioning.isValid('https://github.com/renovatebot/renovate.git') ).toBeFalsy(); }); }); describe('isSingleVersion()', () => { it('returns true if naked version', () => { - expect(versionig.isSingleVersion('1.2.3')).toBeTruthy(); - expect(versionig.isSingleVersion('1.2.3-alpha.1')).toBeTruthy(); + expect(versioning.isSingleVersion('1.2.3')).toBeTruthy(); + expect(versioning.isSingleVersion('1.2.3-alpha.1')).toBeTruthy(); }); it('returns true if equals', () => { - expect(versionig.isSingleVersion('=1.2.3')).toBeTruthy(); - expect(versionig.isSingleVersion('= 1.2.3')).toBeTruthy(); + expect(versioning.isSingleVersion('=1.2.3')).toBeTruthy(); + expect(versioning.isSingleVersion('= 1.2.3')).toBeTruthy(); }); it('returns false when not version', () => { - expect(versionig.isSingleVersion('1.*')).toBeFalsy(); + expect(versioning.isSingleVersion('1.*')).toBeFalsy(); }); }); describe('matches()', () => { it('handles comma', () => { - expect(versionig.matches('4.2.0', '4.2, >= 3.0, < 5.0.0')).toBe(true); - expect(versionig.matches('4.2.0', '2.0, >= 3.0, < 5.0.0')).toBe(false); - expect(versionig.matches('4.2.2', '4.2.0, < 4.2.4')).toBe(false); - expect(versionig.matches('4.2.2', '^4.2.0, < 4.2.4')).toBe(true); - expect(versionig.matches('4.2.0', '4.3.0, 3.0.0')).toBe(false); - expect(versionig.matches('4.2.0', '> 5.0.0, <= 6.0.0')).toBe(false); + expect(versioning.matches('4.2.0', '4.2, >= 3.0, < 5.0.0')).toBe(true); + expect(versioning.matches('4.2.0', '2.0, >= 3.0, < 5.0.0')).toBe(false); + expect(versioning.matches('4.2.2', '4.2.0, < 4.2.4')).toBe(false); + expect(versioning.matches('4.2.2', '^4.2.0, < 4.2.4')).toBe(true); + expect(versioning.matches('4.2.0', '4.3.0, 3.0.0')).toBe(false); + expect(versioning.matches('4.2.0', '> 5.0.0, <= 6.0.0')).toBe(false); }); it('handles wildcards', () => { - expect(versionig.matches('4.2.0', '*')).toBe(true); + expect(versioning.matches('4.2.0', '*')).toBe(true); }); it('handles short', () => { - expect(versionig.matches('1.4', '1.4')).toBe(true); + expect(versioning.matches('1.4', '1.4')).toBe(true); }); }); describe('isLessThanRange()', () => { it('handles comma', () => { - expect(versionig.isLessThanRange('0.9.0', '>= 1.0.0 <= 2.0.0')).toBe( + expect(versioning.isLessThanRange('0.9.0', '>= 1.0.0 <= 2.0.0')).toBe( true ); - expect(versionig.isLessThanRange('1.9.0', '>= 1.0.0 <= 2.0.0')).toBe( + expect(versioning.isLessThanRange('1.9.0', '>= 1.0.0 <= 2.0.0')).toBe( false ); }); @@ -155,31 +155,31 @@ describe('versioning/poetry/index', () => { describe('minSatisfyingVersion()', () => { it('handles comma', () => { expect( - versionig.minSatisfyingVersion( + versioning.minSatisfyingVersion( ['0.4.0', '0.5.0', '4.2.0', '4.3.0', '5.0.0'], '4.*, > 4.2' ) ).toBe('4.3.0'); expect( - versionig.minSatisfyingVersion( + versioning.minSatisfyingVersion( ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], '^4.0.0' ) ).toBe('4.2.0'); expect( - versionig.minSatisfyingVersion( + versioning.minSatisfyingVersion( ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], '^4.0.0, = 0.5.0' ) ).toBeNull(); expect( - versionig.minSatisfyingVersion( + versioning.minSatisfyingVersion( ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], '^4.0.0, > 4.1.0, <= 4.3.5' ) ).toBe('4.2.0'); expect( - versionig.minSatisfyingVersion( + versioning.minSatisfyingVersion( ['0.4.0', '0.5.0', '4.2.0', '5.0.0'], '^6.2.0, 3.*' ) @@ -189,13 +189,13 @@ describe('versioning/poetry/index', () => { describe('getSatisfyingVersion()', () => { it('handles comma', () => { expect( - versionig.getSatisfyingVersion( + versioning.getSatisfyingVersion( ['4.2.1', '0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0'], '4.*.0, < 4.2.5' ) ).toBe('4.2.1'); expect( - versionig.getSatisfyingVersion( + versioning.getSatisfyingVersion( ['0.4.0', '0.5.0', '4.0.0', '4.2.0', '5.0.0', '5.0.3'], '5.0, > 5.0.0' ) @@ -206,7 +206,7 @@ describe('versioning/poetry/index', () => { describe('getNewValue()', () => { it('bumps exact', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -214,7 +214,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('1.1.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: ' 1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -222,7 +222,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('1.1.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -232,7 +232,7 @@ describe('versioning/poetry/index', () => { }); it('bumps equals', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '=1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -240,7 +240,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('=1.1.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '= 1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -250,7 +250,7 @@ describe('versioning/poetry/index', () => { }); it('bumps equals space', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '= 1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -258,7 +258,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('=1.1.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: ' = 1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -266,7 +266,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('=1.1.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: ' = 1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -274,7 +274,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('=1.1.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '= 1.0.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -284,7 +284,7 @@ describe('versioning/poetry/index', () => { }); it('bumps short caret to same', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -294,7 +294,7 @@ describe('versioning/poetry/index', () => { }); it('replaces caret with newer', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1.0.0', rangeStrategy: 'replace', currentVersion: '1.0.0', @@ -304,7 +304,7 @@ describe('versioning/poetry/index', () => { }); it('handles precision change caret', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^5.0.3', rangeStrategy: 'replace', currentVersion: '5.3.1', @@ -314,7 +314,7 @@ describe('versioning/poetry/index', () => { }); it('replaces naked version', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '1.0.0', rangeStrategy: 'replace', currentVersion: '1.0.0', @@ -324,7 +324,7 @@ describe('versioning/poetry/index', () => { }); it('replaces with version range', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1.0.0', rangeStrategy: 'replace', currentVersion: '1.0.0', @@ -334,7 +334,7 @@ describe('versioning/poetry/index', () => { }); it('returns currentValue', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^0.5.15', rangeStrategy: 'replace', currentVersion: '0.5.15', @@ -344,7 +344,7 @@ describe('versioning/poetry/index', () => { }); it('bumps naked caret', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -354,7 +354,7 @@ describe('versioning/poetry/index', () => { }); it('bumps naked tilde', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '~1', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -364,7 +364,7 @@ describe('versioning/poetry/index', () => { }); it('bumps naked major', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '5', rangeStrategy: 'bump', currentVersion: '5.0.0', @@ -372,7 +372,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('5'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '5', rangeStrategy: 'bump', currentVersion: '5.0.0', @@ -382,7 +382,7 @@ describe('versioning/poetry/index', () => { }); it('bumps naked minor', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '5.0', rangeStrategy: 'bump', currentVersion: '5.0.0', @@ -390,7 +390,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('5.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '5.0', rangeStrategy: 'bump', currentVersion: '5.0.0', @@ -398,7 +398,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('5.1'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '5.0', rangeStrategy: 'bump', currentVersion: '5.0.0', @@ -408,7 +408,7 @@ describe('versioning/poetry/index', () => { }); it('replaces minor', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '5.0', rangeStrategy: 'replace', currentVersion: '5.0.0', @@ -418,7 +418,7 @@ describe('versioning/poetry/index', () => { }); it('replaces equals', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '=1.0.0', rangeStrategy: 'replace', currentVersion: '1.0.0', @@ -428,7 +428,7 @@ describe('versioning/poetry/index', () => { }); it('bumps caret to prerelease', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -438,7 +438,7 @@ describe('versioning/poetry/index', () => { }); it('replaces with newer', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1.0.0', rangeStrategy: 'replace', currentVersion: '1.0.0', @@ -448,7 +448,7 @@ describe('versioning/poetry/index', () => { }); it('bumps short tilde', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '~1.0', rangeStrategy: 'bump', currentVersion: '1.0.0', @@ -458,7 +458,7 @@ describe('versioning/poetry/index', () => { }); it('handles long asterisk', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '1.0.*', rangeStrategy: 'replace', currentVersion: '1.0.0', @@ -468,7 +468,7 @@ describe('versioning/poetry/index', () => { }); it('handles short asterisk', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '1.*', rangeStrategy: 'replace', currentVersion: '1.0.0', @@ -478,7 +478,7 @@ describe('versioning/poetry/index', () => { }); it('handles updating from stable to unstable', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '~0.6.1', rangeStrategy: 'replace', currentVersion: '0.6.8', @@ -488,7 +488,7 @@ describe('versioning/poetry/index', () => { }); it('handles less than version requirements', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '<1.3.4', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -496,7 +496,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('<1.5.1'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '< 1.3.4', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -504,7 +504,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('< 1.5.1'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '< 1.3.4', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -514,7 +514,7 @@ describe('versioning/poetry/index', () => { }); it('handles less than equals version requirements', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '<=1.3.4', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -522,7 +522,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('<=1.5.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '<= 1.3.4', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -530,7 +530,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('<= 1.5.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '<= 1.3.4', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -540,7 +540,7 @@ describe('versioning/poetry/index', () => { }); it('handles replacing short caret versions', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1.2', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -548,7 +548,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('^2.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^1', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -558,7 +558,7 @@ describe('versioning/poetry/index', () => { }); it('handles replacing short tilde versions', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '~1.2', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -566,7 +566,7 @@ describe('versioning/poetry/index', () => { }) ).toEqual('~2.0'); expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '~1', rangeStrategy: 'replace', currentVersion: '1.2.3', @@ -576,7 +576,7 @@ describe('versioning/poetry/index', () => { }); it('widens range', () => { expect( - versionig.getNewValue({ + versioning.getNewValue({ currentValue: '^2.2', rangeStrategy: 'widen', currentVersion: '2.2.0', @@ -594,7 +594,7 @@ describe('versioning/poetry/index', () => { ['1.10.0', '1.9'], ['1.9', '1.9-beta'], ])('%s > %s', (a, b) => { - expect(versionig.sortVersions(a, b)).toBe(1); + expect(versioning.sortVersions(a, b)).toBe(1); }); it.each([ @@ -603,7 +603,7 @@ describe('versioning/poetry/index', () => { ['1.0.0', '1'], ['1.9.0', '1.9'], ])('%s == %s', (a, b) => { - expect(versionig.sortVersions(a, b)).toBe(0); + expect(versioning.sortVersions(a, b)).toBe(0); }); }); }); From 050b6a9e5908135808d6aed2a447f23a4040b549 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 12 Sep 2021 15:26:24 +0200 Subject: [PATCH 04/20] fix: don't pin monorepo groups (#11688) --- lib/config/presets/index.spec.ts | 6 ++++++ lib/config/presets/internal/group.ts | 3 +++ 2 files changed, 9 insertions(+) diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index c6e67143d5a60a..e1eb4df266640f 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -601,6 +601,12 @@ Object { "monorepo:opentelemetry-js", ], "groupName": "opentelemetry-js monorepo", + "matchUpdateTypes": Array [ + "digest", + "patch", + "minor", + "major", + ], }, ], } diff --git a/lib/config/presets/internal/group.ts b/lib/config/presets/internal/group.ts index 5167de81d1aa05..b1865417f788cb 100644 --- a/lib/config/presets/internal/group.ts +++ b/lib/config/presets/internal/group.ts @@ -1,6 +1,8 @@ import type { Preset } from '../types'; import * as monorepos from './monorepo'; +const nonPinUpdateTypes = ['digest', 'patch', 'minor', 'major']; + const staticGroups = { all: { description: 'Group all updates together', @@ -596,6 +598,7 @@ for (const monorepo of Object.keys(monorepos.presets)) { { description: `Group packages from ${monorepo} monorepo together`, extends: `monorepo:${monorepo}`, + matchUpdateTypes: nonPinUpdateTypes, groupName: `${monorepo} monorepo`, }, ], From fe45377b6de82972179285648264535bccd75366 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 12 Sep 2021 16:09:08 +0200 Subject: [PATCH 05/20] docs: fix display style of word ESLint (#11689) --- docs/usage/config-presets.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage/config-presets.md b/docs/usage/config-presets.md index c62bbb96204d08..b38e2fdded272b 100644 --- a/docs/usage/config-presets.md +++ b/docs/usage/config-presets.md @@ -6,7 +6,7 @@ description: Renovate's support for ESLint-like shareable configs # Shareable Config Presets Renovate's "config presets" are a convenient way to distribute config for reuse across multiple repositories. -It is similar in design to `eslint`'s shareable configs, and can be used for whole repository configs and for individual rules. +It is similar in design to ESLint's shareable configs, and can be used for whole repository configs and for individual rules. They are defined using the `extends` array within config and may also be nested. In short: @@ -33,7 +33,7 @@ Renovate's configuration is self-documenting, because you can fill in the `"desc ## Implementation Approach -In order to achieve these goals, preset configs allow for a very modular approach - preset configs can be as small as a partial package rule or as large as an entire configuration, like an `eslint` config. +In order to achieve these goals, preset configs allow for a very modular approach - preset configs can be as small as a partial package rule or as large as an entire configuration, like an ESLint config. ## Preset Hosting From 0a5cee1f2540841ac21e5adebeec4d196dc50ef9 Mon Sep 17 00:00:00 2001 From: ylemkimon Date: Sun, 12 Sep 2021 23:17:07 +0900 Subject: [PATCH 06/20] docs(private-packages): add a note about Yarn 2+ (#11692) --- docs/usage/getting-started/private-packages.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/usage/getting-started/private-packages.md b/docs/usage/getting-started/private-packages.md index 36db3a72ea2996..f5e70f05a989aa 100644 --- a/docs/usage/getting-started/private-packages.md +++ b/docs/usage/getting-started/private-packages.md @@ -259,6 +259,12 @@ However be aware that if your `.npmrc` is too big to encrypt then the above comm } ``` +#### Yarn 2+ + +Renovate doesn't support reading `npmRegistries` and `npmScopes` from `.yarnrc.yml`, so `hostRules` (or `npmToken`) and `npmrc` should be configured like above. +Renovate updates `npmRegistries` in `.yarnrc.yml` with resolved `hostRules` before running Yarn. +For Renovate to overwrite existing `npmRegistries` entry, the key should match the `matchHost` without the protocol (`http:` or `https:`) and with the trailing slash. + ### nuget For each known NuGet registry, Renovate searches for `hostRules` with `hostType=nuget` and matching host. From 7801ae7c1652426de10557555fc7c71dbfd47f71 Mon Sep 17 00:00:00 2001 From: Maksim Date: Sun, 12 Sep 2021 17:23:18 +0200 Subject: [PATCH 07/20] feat(config): migrate requiredStatusChecks to ignoreTests (#11355) * feat(config): migrate requiredStatusChecks to ignoreTests * fix(config): restore order of props * feat(config): add applyMigrations function * feat(platform): check ignoreTests param in worker * feat(config): rename getBranchStatus to resolveBranchStatus Co-authored-by: Michael Kriese Co-authored-by: Rhys Arkins --- docs/usage/configuration-options.md | 21 ++++---- docs/usage/key-concepts/automerge.md | 2 +- lib/config/migration.ts | 2 + lib/config/migrations/index.ts | 18 +++++++ lib/config/migrations/migration.ts | 18 +++++++ .../required-status-checks-migration.spec.ts | 21 ++++++++ .../required-status-checks-migration.ts | 11 ++++ lib/config/options/index.ts | 11 ++-- .../presets/__snapshots__/index.spec.ts.snap | 2 +- lib/config/presets/internal/default.ts | 4 +- lib/config/types.ts | 2 +- lib/platform/azure/index.spec.ts | 20 ++------ lib/platform/azure/index.ts | 12 +---- lib/platform/bitbucket-server/index.spec.ts | 18 +++---- lib/platform/bitbucket-server/index.ts | 13 +---- .../__snapshots__/index.spec.ts.snap | 32 ------------ lib/platform/bitbucket/index.spec.ts | 28 +++-------- lib/platform/bitbucket/index.ts | 13 +---- lib/platform/gitea/index.spec.ts | 18 ++----- lib/platform/gitea/index.ts | 14 +----- .../github/__snapshots__/index.spec.ts.snap | 50 +------------------ lib/platform/github/index.spec.ts | 27 +++------- lib/platform/github/index.ts | 13 +---- .../gitlab/__snapshots__/index.spec.ts.snap | 20 ++++---- lib/platform/gitlab/index.spec.ts | 30 ++++------- lib/platform/gitlab/index.ts | 14 +----- lib/platform/types.ts | 5 +- lib/workers/branch/automerge.ts | 5 +- lib/workers/branch/index.spec.ts | 4 +- lib/workers/branch/index.ts | 4 +- lib/workers/branch/status-checks.spec.ts | 9 ++++ lib/workers/branch/status-checks.ts | 19 +++++++ lib/workers/pr/automerge.ts | 11 ++-- lib/workers/pr/body/config-description.ts | 6 +-- lib/workers/pr/index.ts | 38 ++++++-------- lib/workers/repository/process/write.spec.ts | 2 +- 36 files changed, 206 insertions(+), 331 deletions(-) create mode 100644 lib/config/migrations/index.ts create mode 100644 lib/config/migrations/migration.ts create mode 100644 lib/config/migrations/required-status-checks-migration.spec.ts create mode 100644 lib/config/migrations/required-status-checks-migration.ts diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 41ad1ce9994144..8abfac7a137caa 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -201,7 +201,7 @@ In that case Renovate first creates a branch and associated Pull Request, and th If by the next run the PR is already behind the base branch it will be automatically rebased, because Renovate only automerges branches which are up-to-date and green. If Renovate is scheduled for hourly runs on the repository but commits are made every 15 minutes to the main branch, then an automerge like this will keep getting deferred with every rebase. -Note: if you have no tests but still want Renovate to automerge, you need to add `"requiredStatusChecks": null` to your configuration. +Note: if you have no tests but still want Renovate to automerge, you need to add `"ignoreTests": true` to your configuration. If you prefer that Renovate more silently automerge _without_ Pull Requests at all, you can configure `"automergeType": "branch"`. In this case Renovate will: @@ -1103,6 +1103,14 @@ It would take the entire `"config:base"` preset - which contains a lot of sub-pr Applicable for npm and Composer only for now. Set this to `true` if running scripts causes problems. +## ignoreTests + +Currently Renovate's default behavior is to only automerge if every status check has succeeded. + +Setting this option to `true` means that Renovate will ignore _all_ status checks. +You can set this if you don't have any status checks but still want Renovate to automerge PRs. +Beware: configuring Renovate to automerge without any tests can lead to broken builds on your base branch, please think again before enabling this! + ## ignoreUnstable By default, Renovate won't update any package versions to unstable versions (e.g. `4.0.0-rc3`) unless the current version has the same `major.minor.patch` and was _already_ unstable (e.g. it was already on `4.0.0-rc2`). @@ -2141,17 +2149,6 @@ In case there is a need to configure them manually, it can be done using this `r The field supports multiple URLs however it is datasource-dependent on whether only the first is used or multiple. -## requiredStatusChecks - -Currently Renovate's default behavior is to only automerge if every status check has succeeded. - -Setting this option to `null` means that Renovate will ignore _all_ status checks. -You can set this if you don't have any status checks but still want Renovate to automerge PRs. -Beware: configuring Renovate to automerge without any tests can lead to broken builds on your base branch, please think again before enabling this! - -In future, this might be configurable to allow certain status checks to be ignored/required. -See [issue 1853 at the Renovate repository](https://github.com/renovatebot/renovate/issues/1853) for more details. - ## respectLatest Similar to `ignoreUnstable`, this option controls whether to update to versions that are greater than the version tagged as `latest` in the repository. diff --git a/docs/usage/key-concepts/automerge.md b/docs/usage/key-concepts/automerge.md index b33323d65bb921..7c66c0d2192520 100644 --- a/docs/usage/key-concepts/automerge.md +++ b/docs/usage/key-concepts/automerge.md @@ -117,7 +117,7 @@ If you see "Automerge: Disabled by config" it means you need to make a config ch ### Absence of tests By default, Renovate will not automerge until it sees passing status checks / check runs for the branch. -If you have no tests but still want Renovate to automerge, you need to add `"requiredStatusChecks": null` to your configuration. +If you have no tests but still want Renovate to automerge, you need to add `"ignoreTests": true` to your configuration. However, we strongly recommend you have tests in any project where you are regularly updating dependencies. ### Committer restrictions diff --git a/lib/config/migration.ts b/lib/config/migration.ts index ef305caef7b100..13497ff59cbd13 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -4,6 +4,7 @@ import { dequal } from 'dequal'; import { logger } from '../logger'; import { clone } from '../util/clone'; import { getGlobalConfig } from './global'; +import { applyMigrations } from './migrations'; import { getOptions } from './options'; import { removedPresets } from './presets/common'; import type { @@ -57,6 +58,7 @@ export function migrateConfig( 'peerDependencies', ]; const { migratePresets } = getGlobalConfig(); + applyMigrations(config, migratedConfig); for (const [key, val] of Object.entries(config)) { if (removedOptions.includes(key)) { delete migratedConfig[key]; diff --git a/lib/config/migrations/index.ts b/lib/config/migrations/index.ts new file mode 100644 index 00000000000000..1f6c961c293031 --- /dev/null +++ b/lib/config/migrations/index.ts @@ -0,0 +1,18 @@ +import { RenovateConfig } from '../types'; +import type { Migration } from './migration'; +import { RequiredStatusChecksMigration } from './required-status-checks-migration'; + +export function applyMigrations( + originalConfig: RenovateConfig, + migratedConfig: RenovateConfig +): RenovateConfig { + const migrations: Migration[] = [ + new RequiredStatusChecksMigration(originalConfig, migratedConfig), + ]; + + for (const migration of migrations) { + migration.migrate(); + } + + return migratedConfig; +} diff --git a/lib/config/migrations/migration.ts b/lib/config/migrations/migration.ts new file mode 100644 index 00000000000000..616b96caeaeb17 --- /dev/null +++ b/lib/config/migrations/migration.ts @@ -0,0 +1,18 @@ +import type { RenovateConfig } from '../types'; + +export abstract class Migration { + protected readonly originalConfig: RenovateConfig; + + protected readonly migratedConfig: RenovateConfig; + + constructor(originalConfig: RenovateConfig, migratedConfig: RenovateConfig) { + this.originalConfig = originalConfig; + this.migratedConfig = migratedConfig; + } + + abstract migrate(): void; + + protected delete(property: string): void { + delete this.migratedConfig[property]; + } +} diff --git a/lib/config/migrations/required-status-checks-migration.spec.ts b/lib/config/migrations/required-status-checks-migration.spec.ts new file mode 100644 index 00000000000000..afe9019ee573f3 --- /dev/null +++ b/lib/config/migrations/required-status-checks-migration.spec.ts @@ -0,0 +1,21 @@ +import { RequiredStatusChecksMigration } from './required-status-checks-migration'; + +describe('config/migrations/required-status-checks-migration', () => { + it('should migrate requiredStatusChecks=null to ignoreTests=true', () => { + const originalConfig: any = { + requiredStatusChecks: null, + }; + const migratedConfig: any = { + requiredStatusChecks: null, + }; + const migration = new RequiredStatusChecksMigration( + originalConfig, + migratedConfig + ); + + expect(migratedConfig.requiredStatusChecks).toBeNull(); + migration.migrate(); + expect(migratedConfig.requiredStatusChecks).toBeUndefined(); + expect(migratedConfig.ignoreTests).toBeTrue(); + }); +}); diff --git a/lib/config/migrations/required-status-checks-migration.ts b/lib/config/migrations/required-status-checks-migration.ts new file mode 100644 index 00000000000000..3f6d64e28fe7cf --- /dev/null +++ b/lib/config/migrations/required-status-checks-migration.ts @@ -0,0 +1,11 @@ +import { Migration } from './migration'; + +export class RequiredStatusChecksMigration extends Migration { + public migrate(): void { + this.delete('requiredStatusChecks'); + + if (this.originalConfig.requiredStatusChecks === null) { + this.migratedConfig.ignoreTests = true; + } + } +} diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 45dcbc13f993ac..6cc5c664440d05 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -1310,13 +1310,10 @@ const options: RenovateOptions[] = [ default: 'automergeComment', }, { - name: 'requiredStatusChecks', - description: - 'List of status checks that must pass before automerging. Set to null to enable automerging without tests.', - type: 'array', - subType: 'string', - cli: false, - env: false, + name: 'ignoreTests', + description: 'Set to true to enable automerging without tests.', + type: 'boolean', + default: false, }, { name: 'transitiveRemediation', diff --git a/lib/config/presets/__snapshots__/index.spec.ts.snap b/lib/config/presets/__snapshots__/index.spec.ts.snap index 63987db40e2a8e..ac7b6c8d96f8bd 100644 --- a/lib/config/presets/__snapshots__/index.spec.ts.snap +++ b/lib/config/presets/__snapshots__/index.spec.ts.snap @@ -33,6 +33,7 @@ Object { "Require all status checks to pass before any automerging", "Pin dependency versions for devDependencies and retain semver ranges for others", ], + "ignoreTests": false, "ignoreUnstable": true, "labels": Array [ "dependencies", @@ -85,7 +86,6 @@ Object { ], "prCreation": "immediate", "rebaseWhen": "behind-base-branch", - "requiredStatusChecks": Array [], "respectLatest": true, "schedule": Array [ "before 8am", diff --git a/lib/config/presets/internal/default.ts b/lib/config/presets/internal/default.ts index 633c53948bc1ae..40fbcd749d194a 100644 --- a/lib/config/presets/internal/default.ts +++ b/lib/config/presets/internal/default.ts @@ -316,11 +316,11 @@ export const presets: Record = { }, automergeRequireAllStatusChecks: { description: 'Require all status checks to pass before any automerging', - requiredStatusChecks: [], + ignoreTests: false, }, skipStatusChecks: { description: 'Skip status checks and automerge right away', - requiredStatusChecks: null, + ignoreTests: true, }, maintainLockFilesDisabled: { description: diff --git a/lib/config/types.ts b/lib/config/types.ts index ea13c491911235..322eea60ad1207 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -38,6 +38,7 @@ export interface RenovateSharedConfig { includePaths?: string[]; ignoreDeps?: string[]; ignorePaths?: string[]; + ignoreTests?: boolean; labels?: string[]; addLabels?: string[]; dependencyDashboardApproval?: boolean; @@ -55,7 +56,6 @@ export interface RenovateSharedConfig { recreateClosed?: boolean; repository?: string; repositoryCache?: RepositoryCacheConfig; - requiredStatusChecks?: string[]; schedule?: string[]; semanticCommits?: 'auto' | 'enabled' | 'disabled'; semanticCommitScope?: string; diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts index 90e2361480b256..88ff522dd04dc0 100644 --- a/lib/platform/azure/index.spec.ts +++ b/lib/platform/azure/index.spec.ts @@ -474,17 +474,7 @@ describe('platform/azure/index', () => { expect(res).toBeNull(); }); }); - describe('getBranchStatus(branchName, requiredStatusChecks)', () => { - it('return success if requiredStatusChecks null', async () => { - await initRepo('some/repo'); - const res = await azure.getBranchStatus('somebranch', null); - expect(res).toEqual(BranchStatus.green); - }); - it('return failed if unsupported requiredStatusChecks', async () => { - await initRepo('some/repo'); - const res = await azure.getBranchStatus('somebranch', ['foo']); - expect(res).toEqual(BranchStatus.red); - }); + describe('getBranchStatus(branchName, ignoreTests)', () => { it('should pass through success', async () => { await initRepo({ repository: 'some/repo' }); azureApi.gitApi.mockImplementationOnce( @@ -494,7 +484,7 @@ describe('platform/azure/index', () => { getStatuses: jest.fn(() => [{ state: GitStatusState.Succeeded }]), } as any) ); - const res = await azure.getBranchStatus('somebranch', []); + const res = await azure.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.green); }); it('should pass through failed', async () => { @@ -506,7 +496,7 @@ describe('platform/azure/index', () => { getStatuses: jest.fn(() => [{ state: GitStatusState.Error }]), } as any) ); - const res = await azure.getBranchStatus('somebranch', []); + const res = await azure.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.red); }); it('should pass through pending', async () => { @@ -518,7 +508,7 @@ describe('platform/azure/index', () => { getStatuses: jest.fn(() => [{ state: GitStatusState.Pending }]), } as any) ); - const res = await azure.getBranchStatus('somebranch', []); + const res = await azure.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.yellow); }); it('should fall back to yellow if no statuses returned', async () => { @@ -530,7 +520,7 @@ describe('platform/azure/index', () => { getStatuses: jest.fn(() => []), } as any) ); - const res = await azure.getBranchStatus('somebranch', []); + const res = await azure.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.yellow); }); }); diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts index d91f5aa485fe2d..e91aa5e06ec510 100644 --- a/lib/platform/azure/index.ts +++ b/lib/platform/azure/index.ts @@ -331,19 +331,9 @@ export async function getBranchStatusCheck( } export async function getBranchStatus( - branchName: string, - requiredStatusChecks: string[] + branchName: string ): Promise { logger.debug(`getBranchStatus(${branchName})`); - if (!requiredStatusChecks) { - // null means disable status checks, so it always succeeds - return BranchStatus.green; - } - if (requiredStatusChecks.length) { - // This is Unsupported - logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`); - return BranchStatus.red; - } const statuses = await getStatusCheck(branchName); logger.debug({ branch: branchName, statuses }, 'branch status check result'); if (!statuses.length) { diff --git a/lib/platform/bitbucket-server/index.spec.ts b/lib/platform/bitbucket-server/index.spec.ts index 9ca7dba1e8353c..a42764fe0ed5c5 100644 --- a/lib/platform/bitbucket-server/index.spec.ts +++ b/lib/platform/bitbucket-server/index.spec.ts @@ -1749,10 +1749,6 @@ Followed by some information. failed: 0, }); - expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual( - BranchStatus.green - ); - expect(await bitbucket.getBranchStatus('somebranch')).toEqual( BranchStatus.green ); @@ -1772,7 +1768,7 @@ Followed by some information. failed: 0, }); - expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual( + expect(await bitbucket.getBranchStatus('somebranch')).toEqual( BranchStatus.yellow ); @@ -1786,7 +1782,7 @@ Followed by some information. failed: 0, }); - expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual( + expect(await bitbucket.getBranchStatus('somebranch')).toEqual( BranchStatus.yellow ); @@ -1805,7 +1801,7 @@ Followed by some information. failed: 1, }); - expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual( + expect(await bitbucket.getBranchStatus('somebranch')).toEqual( BranchStatus.red ); @@ -1815,7 +1811,7 @@ Followed by some information. ) .replyWithError('requst-failed'); - expect(await bitbucket.getBranchStatus('somebranch', [])).toEqual( + expect(await bitbucket.getBranchStatus('somebranch')).toEqual( BranchStatus.red ); @@ -1825,9 +1821,9 @@ Followed by some information. it('throws repository-changed', async () => { git.branchExists.mockReturnValue(false); await initRepo(); - await expect( - bitbucket.getBranchStatus('somebranch', []) - ).rejects.toThrow(REPOSITORY_CHANGED); + await expect(bitbucket.getBranchStatus('somebranch')).rejects.toThrow( + REPOSITORY_CHANGED + ); expect(httpMock.getTrace()).toMatchSnapshot(); }); }); diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts index 711be02aa8b476..2bc866b66464fd 100644 --- a/lib/platform/bitbucket-server/index.ts +++ b/lib/platform/bitbucket-server/index.ts @@ -396,18 +396,9 @@ async function getStatus( // umbrella for status checks // https://docs.atlassian.com/bitbucket-server/rest/6.0.0/bitbucket-build-rest.html#idp2 export async function getBranchStatus( - branchName: string, - requiredStatusChecks?: string[] | null + branchName: string ): Promise { - logger.debug( - `getBranchStatus(${branchName}, requiredStatusChecks=${!!requiredStatusChecks})` - ); - - if (!requiredStatusChecks) { - // null means disable status checks, so it always succeeds - logger.debug('Status checks disabled = returning "success"'); - return BranchStatus.green; - } + logger.debug(`getBranchStatus(${branchName})`); if (!git.branchExists(branchName)) { logger.debug('Branch does not exist - cannot fetch status'); diff --git a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap index 6931731cdb83da..a2e14ba769ec51 100644 --- a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap +++ b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap @@ -557,38 +557,6 @@ Array [ ] `; -exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 1 1`] = ` -Array [ - Object { - "headers": Object { - "accept": "application/json", - "accept-encoding": "gzip, deflate, br", - "authorization": "Basic YWJjOjEyMw==", - "host": "api.bitbucket.org", - "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", - }, - "method": "GET", - "url": "https://api.bitbucket.org/2.0/repositories/some/repo", - }, -] -`; - -exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 2 1`] = ` -Array [ - Object { - "headers": Object { - "accept": "application/json", - "accept-encoding": "gzip, deflate, br", - "authorization": "Basic YWJjOjEyMw==", - "host": "api.bitbucket.org", - "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", - }, - "method": "GET", - "url": "https://api.bitbucket.org/2.0/repositories/some/repo", - }, -] -`; - exports[`platform/bitbucket/index getBranchStatus() getBranchStatus 3 1`] = ` Array [ Object { diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts index 2d8508446e5942..4716c77ab5e5f7 100644 --- a/lib/platform/bitbucket/index.spec.ts +++ b/lib/platform/bitbucket/index.spec.ts @@ -186,20 +186,6 @@ describe('platform/bitbucket/index', () => { }); describe('getBranchStatus()', () => { - it('getBranchStatus 1', async () => { - await initRepoMock(); - expect(await bitbucket.getBranchStatus('master', null)).toBe( - BranchStatus.green - ); - expect(httpMock.getTrace()).toMatchSnapshot(); - }); - it('getBranchStatus 2', async () => { - await initRepoMock(); - expect(await bitbucket.getBranchStatus('master', ['foo'])).toBe( - BranchStatus.red - ); - expect(httpMock.getTrace()).toMatchSnapshot(); - }); it('getBranchStatus 3', async () => { const scope = await initRepoMock(); scope @@ -219,9 +205,7 @@ describe('platform/bitbucket/index', () => { }, ], }); - expect(await bitbucket.getBranchStatus('master', [])).toBe( - BranchStatus.red - ); + expect(await bitbucket.getBranchStatus('master')).toBe(BranchStatus.red); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('getBranchStatus 4', async () => { @@ -246,7 +230,7 @@ describe('platform/bitbucket/index', () => { }, ], }); - expect(await bitbucket.getBranchStatus('branch', [])).toBe( + expect(await bitbucket.getBranchStatus('branch')).toBe( BranchStatus.green ); expect(httpMock.getTrace()).toMatchSnapshot(); @@ -273,7 +257,7 @@ describe('platform/bitbucket/index', () => { }, ], }); - expect(await bitbucket.getBranchStatus('pending/branch', [])).toBe( + expect(await bitbucket.getBranchStatus('pending/branch')).toBe( BranchStatus.yellow ); expect(httpMock.getTrace()).toMatchSnapshot(); @@ -297,9 +281,9 @@ describe('platform/bitbucket/index', () => { .reply(200, { values: [], }); - expect( - await bitbucket.getBranchStatus('branch-with-empty-status', []) - ).toBe(BranchStatus.yellow); + expect(await bitbucket.getBranchStatus('branch-with-empty-status')).toBe( + BranchStatus.yellow + ); expect(httpMock.getTrace()).toMatchSnapshot(); }); }); diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts index 7f2cc28fc5f219..d9df2f0870e30f 100644 --- a/lib/platform/bitbucket/index.ts +++ b/lib/platform/bitbucket/index.ts @@ -328,20 +328,9 @@ async function getStatus( } // Returns the combined status for a branch. export async function getBranchStatus( - branchName: string, - requiredStatusChecks?: string[] + branchName: string ): Promise { logger.debug(`getBranchStatus(${branchName})`); - if (!requiredStatusChecks) { - // null means disable status checks, so it always succeeds - logger.debug('Status checks disabled = returning "success"'); - return BranchStatus.green; - } - if (requiredStatusChecks.length) { - // This is Unsupported - logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`); - return BranchStatus.red; - } const statuses = await getStatus(branchName); logger.debug({ branch: branchName, statuses }, 'branch status check result'); if (!statuses.length) { diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts index 1cd6325da00ce1..05b9a3de361c3d 100644 --- a/lib/platform/gitea/index.spec.ts +++ b/lib/platform/gitea/index.spec.ts @@ -400,21 +400,9 @@ describe('platform/gitea/index', () => { }) ); - return gitea.getBranchStatus('some-branch', []); + return gitea.getBranchStatus('some-branch'); }; - it('should return success if requiredStatusChecks null', async () => { - expect(await gitea.getBranchStatus('some-branch', null)).toEqual( - BranchStatus.green - ); - }); - - it('should return failed if unsupported requiredStatusChecks', async () => { - expect(await gitea.getBranchStatus('some-branch', ['foo'])).toEqual( - BranchStatus.red - ); - }); - it('should return yellow for unknown result', async () => { expect(await getBranchStatus('unknown')).toEqual(BranchStatus.yellow); }); @@ -434,7 +422,7 @@ describe('platform/gitea/index', () => { it('should abort when branch status returns 404', async () => { helper.getCombinedCommitStatus.mockRejectedValueOnce({ statusCode: 404 }); - await expect(gitea.getBranchStatus('some-branch', [])).rejects.toThrow( + await expect(gitea.getBranchStatus('some-branch')).rejects.toThrow( REPOSITORY_CHANGED ); }); @@ -444,7 +432,7 @@ describe('platform/gitea/index', () => { new Error('getCombinedCommitStatus()') ); - await expect(gitea.getBranchStatus('some-branch', [])).rejects.toThrow( + await expect(gitea.getBranchStatus('some-branch')).rejects.toThrow( 'getCombinedCommitStatus()' ); }); diff --git a/lib/platform/gitea/index.ts b/lib/platform/gitea/index.ts index a72082431d3995..c6f34b19bd1c19 100644 --- a/lib/platform/gitea/index.ts +++ b/lib/platform/gitea/index.ts @@ -350,19 +350,7 @@ const platform: Platform = { } }, - async getBranchStatus( - branchName: string, - requiredStatusChecks?: string[] | null - ): Promise { - if (!requiredStatusChecks) { - return BranchStatus.green; - } - - if (Array.isArray(requiredStatusChecks) && requiredStatusChecks.length) { - logger.warn({ requiredStatusChecks }, 'Unsupported requiredStatusChecks'); - return BranchStatus.red; - } - + async getBranchStatus(branchName: string): Promise { let ccs: helper.CombinedCommitStatus; try { ccs = await helper.getCombinedCommitStatus(config.repository, branchName); diff --git a/lib/platform/github/__snapshots__/index.spec.ts.snap b/lib/platform/github/__snapshots__/index.spec.ts.snap index 7abd4022f17182..f5bfa16060db20 100644 --- a/lib/platform/github/__snapshots__/index.spec.ts.snap +++ b/lib/platform/github/__snapshots__/index.spec.ts.snap @@ -4347,55 +4347,7 @@ Array [ ] `; -exports[`platform/github/index getBranchStatus() return failed if unsupported requiredStatusChecks 1`] = ` -Array [ - Object { - "graphql": Object { - "query": Object { - "__vars": Object { - "$name": "String!", - "$owner": "String!", - }, - "repository": Object { - "__args": Object { - "name": "$name", - "owner": "$owner", - }, - "defaultBranchRef": Object { - "name": null, - "target": Object { - "oid": null, - }, - }, - "isArchived": null, - "isFork": null, - "mergeCommitAllowed": null, - "nameWithOwner": null, - "rebaseMergeAllowed": null, - "squashMergeAllowed": null, - }, - }, - "variables": Object { - "name": "repo", - "owner": "some", - }, - }, - "headers": Object { - "accept": "application/vnd.github.v3+json", - "accept-encoding": "gzip, deflate, br", - "authorization": "token 123test", - "content-length": "351", - "content-type": "application/json", - "host": "api.github.com", - "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", - }, - "method": "POST", - "url": "https://api.github.com/graphql", - }, -] -`; - -exports[`platform/github/index getBranchStatus() returns success if requiredStatusChecks null 1`] = ` +exports[`platform/github/index getBranchStatus() returns success if ignoreTests true 1`] = ` Array [ Object { "graphql": Object { diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts index b028dcafdb0e89..6553c70c0dc538 100644 --- a/lib/platform/github/index.spec.ts +++ b/lib/platform/github/index.spec.ts @@ -678,26 +678,13 @@ describe('platform/github/index', () => { }); }); describe('getBranchStatus()', () => { - it('returns success if requiredStatusChecks null', async () => { + it('returns success if ignoreTests true', async () => { const scope = httpMock.scope(githubApiHost); initRepoMock(scope, 'some/repo'); await github.initRepo({ repository: 'some/repo', } as any); - const res = await github.getBranchStatus('somebranch', null); - expect(res).toEqual(BranchStatus.green); - expect(httpMock.getTrace()).toMatchSnapshot(); - }); - it('return failed if unsupported requiredStatusChecks', async () => { - const scope = httpMock.scope(githubApiHost); - initRepoMock(scope, 'some/repo'); - - await github.initRepo({ - repository: 'some/repo', - } as any); - const res = await github.getBranchStatus('somebranch', ['foo']); - expect(res).toEqual(BranchStatus.red); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('should pass through success', async () => { @@ -714,7 +701,7 @@ describe('platform/github/index', () => { await github.initRepo({ repository: 'some/repo', } as any); - const res = await github.getBranchStatus('somebranch', []); + const res = await github.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.green); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -732,7 +719,7 @@ describe('platform/github/index', () => { await github.initRepo({ repository: 'some/repo', } as any); - const res = await github.getBranchStatus('somebranch', []); + const res = await github.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.red); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -749,7 +736,7 @@ describe('platform/github/index', () => { await github.initRepo({ repository: 'some/repo', } as any); - const res = await github.getBranchStatus('somebranch', []); + const res = await github.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.yellow); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -783,7 +770,7 @@ describe('platform/github/index', () => { await github.initRepo({ repository: 'some/repo', } as any); - const res = await github.getBranchStatus('somebranch', []); + const res = await github.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.red); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -823,7 +810,7 @@ describe('platform/github/index', () => { await github.initRepo({ repository: 'some/repo', } as any); - const res = await github.getBranchStatus('somebranch', []); + const res = await github.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.green); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -856,7 +843,7 @@ describe('platform/github/index', () => { await github.initRepo({ repository: 'some/repo', } as any); - const res = await github.getBranchStatus('somebranch', []); + const res = await github.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.yellow); expect(httpMock.getTrace()).toMatchSnapshot(); }); diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts index de7953ea1400c4..bc76286e56fb65 100644 --- a/lib/platform/github/index.ts +++ b/lib/platform/github/index.ts @@ -799,20 +799,9 @@ async function getStatus( // Returns the combined status for a branch. export async function getBranchStatus( - branchName: string, - requiredStatusChecks: any[] | undefined + branchName: string ): Promise { logger.debug(`getBranchStatus(${branchName})`); - if (!requiredStatusChecks) { - // null means disable status checks, so it always succeeds - logger.debug('Status checks disabled = returning "success"'); - return BranchStatus.green; - } - if (requiredStatusChecks.length) { - // This is Unsupported - logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`); - return BranchStatus.red; - } let commitStatus: CombinedBranchStatus; try { commitStatus = await getStatus(branchName); diff --git a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap index cb3bc7f6992e5f..c4cb788edc58bb 100644 --- a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap +++ b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap @@ -1852,7 +1852,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) maps custom statuses to yellow 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) maps custom statuses to yellow 1`] = ` Array [ Object { "headers": Object { @@ -1879,7 +1879,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns failure if any mandatory jobs fails 1`] = ` Array [ Object { "headers": Object { @@ -1906,7 +1906,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns failure if any mandatory jobs fails and one job is skipped 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns failure if any mandatory jobs fails and one job is skipped 1`] = ` Array [ Object { "headers": Object { @@ -1933,7 +1933,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns pending if no results 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns pending if no results 1`] = ` Array [ Object { "headers": Object { @@ -1960,7 +1960,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if all are optional 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if all are optional 1`] = ` Array [ Object { "headers": Object { @@ -1987,7 +1987,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if all are success 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if all are success 1`] = ` Array [ Object { "headers": Object { @@ -2014,7 +2014,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if job is skipped 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if job is skipped 1`] = ` Array [ Object { "headers": Object { @@ -2041,7 +2041,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns success if optional jobs fail 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns success if optional jobs fail 1`] = ` Array [ Object { "headers": Object { @@ -2068,7 +2068,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) returns yellow if there are no jobs expect skipped 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) returns yellow if there are no jobs expect skipped 1`] = ` Array [ Object { "headers": Object { @@ -2095,7 +2095,7 @@ Array [ ] `; -exports[`platform/gitlab/index getBranchStatus(branchName, requiredStatusChecks) throws repository-changed 1`] = ` +exports[`platform/gitlab/index getBranchStatus(branchName, ignoreTests) throws repository-changed 1`] = ` Array [ Object { "headers": Object { diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts index 51eb145adc641f..6e847a727781d8 100644 --- a/lib/platform/gitlab/index.spec.ts +++ b/lib/platform/gitlab/index.spec.ts @@ -527,15 +527,7 @@ describe('platform/gitlab/index', () => { expect(httpMock.getTrace()).toMatchSnapshot(); }); }); - describe('getBranchStatus(branchName, requiredStatusChecks)', () => { - it('returns success if requiredStatusChecks null', async () => { - const res = await gitlab.getBranchStatus('somebranch', null); - expect(res).toEqual(BranchStatus.green); - }); - it('return failed if unsupported requiredStatusChecks', async () => { - const res = await gitlab.getBranchStatus('somebranch', ['foo']); - expect(res).toEqual(BranchStatus.red); - }); + describe('getBranchStatus(branchName, ignoreTests)', () => { it('returns pending if no results', async () => { const scope = await initRepo(); scope @@ -543,7 +535,7 @@ describe('platform/gitlab/index', () => { '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses' ) .reply(200, []); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.yellow); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -554,7 +546,7 @@ describe('platform/gitlab/index', () => { '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses' ) .reply(200, [{ status: 'success' }, { status: 'success' }]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.green); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -568,7 +560,7 @@ describe('platform/gitlab/index', () => { { status: 'success' }, { status: 'failed', allow_failure: true }, ]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.green); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -579,7 +571,7 @@ describe('platform/gitlab/index', () => { '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses' ) .reply(200, [{ status: 'failed', allow_failure: true }]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.green); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -590,7 +582,7 @@ describe('platform/gitlab/index', () => { '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses' ) .reply(200, [{ status: 'success' }, { status: 'skipped' }]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.green); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -601,7 +593,7 @@ describe('platform/gitlab/index', () => { '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses' ) .reply(200, [{ status: 'skipped' }]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.yellow); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -612,7 +604,7 @@ describe('platform/gitlab/index', () => { '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses' ) .reply(200, [{ status: 'skipped' }, { status: 'failed' }]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.red); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -627,7 +619,7 @@ describe('platform/gitlab/index', () => { { status: 'failed', allow_failure: true }, { status: 'failed' }, ]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.red); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -638,7 +630,7 @@ describe('platform/gitlab/index', () => { '/api/v4/projects/some%2Frepo/repository/commits/0d9c7726c3d628b7e28af234595cfd20febdbf8e/statuses' ) .reply(200, [{ status: 'success' }, { status: 'foo' }]); - const res = await gitlab.getBranchStatus('somebranch', []); + const res = await gitlab.getBranchStatus('somebranch'); expect(res).toEqual(BranchStatus.yellow); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -646,7 +638,7 @@ describe('platform/gitlab/index', () => { expect.assertions(2); git.branchExists.mockReturnValue(false); await initRepo(); - await expect(gitlab.getBranchStatus('somebranch', [])).rejects.toThrow( + await expect(gitlab.getBranchStatus('somebranch')).rejects.toThrow( REPOSITORY_CHANGED ); expect(httpMock.getTrace()).toMatchSnapshot(); diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index 82cac84d0f59ed..236bc5f8595385 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -370,19 +370,9 @@ const gitlabToRenovateStatusMapping: Record = { // Returns the combined status for a branch. export async function getBranchStatus( - branchName: string, - requiredStatusChecks?: string[] | null + branchName: string ): Promise { logger.debug(`getBranchStatus(${branchName})`); - if (!requiredStatusChecks) { - // null means disable status checks, so it always succeeds - return BranchStatus.green; - } - if (Array.isArray(requiredStatusChecks) && requiredStatusChecks.length) { - // This is Unsupported - logger.warn({ requiredStatusChecks }, `Unsupported requiredStatusChecks`); - return BranchStatus.red; - } if (!git.branchExists(branchName)) { throw new Error(REPOSITORY_CHANGED); @@ -614,7 +604,7 @@ export async function getPr(iid: number): Promise { pr.canMerge = false; pr.isConflicted = true; } else if (pr.state === PrState.Open) { - const branchStatus = await getBranchStatus(pr.sourceBranch, []); + const branchStatus = await getBranchStatus(pr.sourceBranch); if (branchStatus === BranchStatus.green) { pr.canMerge = true; } diff --git a/lib/platform/types.ts b/lib/platform/types.ts index 2f95f8c609fdd2..b371dc016b92e2 100644 --- a/lib/platform/types.ts +++ b/lib/platform/types.ts @@ -184,10 +184,7 @@ export interface Platform { getPr(number: number): Promise; findPr(findPRConfig: FindPRConfig): Promise; refreshPr?(number: number): Promise; - getBranchStatus( - branchName: string, - requiredStatusChecks?: string[] | null - ): Promise; + getBranchStatus(branchName: string): Promise; getBranchPr(branchName: string): Promise; initPlatform(config: PlatformParams): Promise; filterUnavailableUsers?(users: string[]): Promise; diff --git a/lib/workers/branch/automerge.ts b/lib/workers/branch/automerge.ts index c44dfc78a6fb90..8ae312e8ffd7b4 100644 --- a/lib/workers/branch/automerge.ts +++ b/lib/workers/branch/automerge.ts @@ -4,6 +4,7 @@ import { logger } from '../../logger'; import { platform } from '../../platform'; import { BranchStatus } from '../../types'; import { mergeBranch } from '../../util/git'; +import { resolveBranchStatus } from './status-checks'; export type AutomergeResult = | 'automerged' @@ -25,9 +26,9 @@ export async function tryBranchAutomerge( if (existingPr) { return 'automerge aborted - PR exists'; } - const branchStatus = await platform.getBranchStatus( + const branchStatus = await resolveBranchStatus( config.branchName, - config.requiredStatusChecks + config.ignoreTests ); if (branchStatus === BranchStatus.green) { logger.debug(`Automerging branch`); diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts index a73e58ea75d567..877672413d37c5 100644 --- a/lib/workers/branch/index.spec.ts +++ b/lib/workers/branch/index.spec.ts @@ -410,7 +410,7 @@ describe('workers/branch/index', () => { automerge.tryBranchAutomerge.mockResolvedValueOnce('automerged'); await branchWorker.processBranch({ ...config, - requiredStatusChecks: null, + ignoreTests: true, }); expect(automerge.tryBranchAutomerge).toHaveBeenCalledTimes(1); expect(prWorker.ensurePr).toHaveBeenCalledTimes(0); @@ -535,7 +535,7 @@ describe('workers/branch/index', () => { expect( await branchWorker.processBranch({ ...config, - requiredStatusChecks: null, + ignoreTests: true, prCreation: 'not-pending', }) ).toMatchSnapshot(); diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts index 78802336d76b38..96b33b94932d84 100644 --- a/lib/workers/branch/index.ts +++ b/lib/workers/branch/index.ts @@ -464,7 +464,7 @@ export async function processBranch( !dependencyDashboardCheck && !config.rebaseRequested && commitSha && - (config.requiredStatusChecks?.length || config.prCreation !== 'immediate') + config.prCreation !== 'immediate' ) { logger.debug({ commitSha }, `Branch status pending`); return { @@ -475,7 +475,7 @@ export async function processBranch( } // Try to automerge branch and finish if successful, but only if branch already existed before this run - if (branchExists || !config.requiredStatusChecks) { + if (branchExists || config.ignoreTests) { const mergeStatus = await tryBranchAutomerge(config); logger.debug(`mergeStatus=${mergeStatus}`); if (mergeStatus === 'automerged') { diff --git a/lib/workers/branch/status-checks.spec.ts b/lib/workers/branch/status-checks.spec.ts index 02c15babf94a8a..ad4d1c262702f6 100644 --- a/lib/workers/branch/status-checks.spec.ts +++ b/lib/workers/branch/status-checks.spec.ts @@ -3,6 +3,7 @@ import { BranchStatus } from '../../types'; import { ConfidenceConfig, StabilityConfig, + resolveBranchStatus, setConfidence, setStability, } from './status-checks'; @@ -86,4 +87,12 @@ describe('workers/branch/status-checks', () => { expect(platform.setBranchStatus).toHaveBeenCalledTimes(0); }); }); + + describe('getBranchStatus', () => { + it('should return green if ignoreTests=true', async () => { + expect(await resolveBranchStatus('somebranch', true)).toBe( + BranchStatus.green + ); + }); + }); }); diff --git a/lib/workers/branch/status-checks.ts b/lib/workers/branch/status-checks.ts index 97ec3eb76946ce..58b7e79b223083 100644 --- a/lib/workers/branch/status-checks.ts +++ b/lib/workers/branch/status-checks.ts @@ -7,6 +7,25 @@ import { isActiveConfidenceLevel, } from '../../util/merge-confidence'; +export async function resolveBranchStatus( + branchName: string, + ignoreTests = false +): Promise { + logger.debug( + `resolveBranchStatus(branchName=${branchName}, ignoreTests=${ignoreTests})` + ); + + if (ignoreTests) { + logger.debug('Ignore tests. Return green'); + return BranchStatus.green; + } + + const status = await platform.getBranchStatus(branchName); + logger.debug(`Branch status ${status}`); + + return status; +} + async function setStatusCheck( branchName: string, context: string, diff --git a/lib/workers/pr/automerge.ts b/lib/workers/pr/automerge.ts index 30d4d5bb72e3a1..f96dd04b3dd8ae 100644 --- a/lib/workers/pr/automerge.ts +++ b/lib/workers/pr/automerge.ts @@ -3,6 +3,7 @@ import { logger } from '../../logger'; import { Pr, platform } from '../../platform'; import { BranchStatus } from '../../types'; import { deleteBranch, isBranchModified } from '../../util/git'; +import { resolveBranchStatus } from '../branch/status-checks'; import { BranchConfig } from '../types'; export enum PrAutomergeBlockReason { @@ -30,7 +31,7 @@ export async function checkAutoMerge( automergeType, automergeStrategy, automergeComment, - requiredStatusChecks, + ignoreTests, rebaseRequested, } = config; // Return if PR not ready for automerge @@ -41,7 +42,7 @@ export async function checkAutoMerge( prAutomergeBlockReason: PrAutomergeBlockReason.Conflicted, }; } - if (requiredStatusChecks && pr.canMerge !== true) { + if (!ignoreTests && pr.canMerge !== true) { logger.debug( { canMergeReason: pr.canMergeReason }, 'PR is not ready for merge' @@ -51,9 +52,9 @@ export async function checkAutoMerge( prAutomergeBlockReason: PrAutomergeBlockReason.PlatformNotReady, }; } - const branchStatus = await platform.getBranchStatus( - branchName, - requiredStatusChecks + const branchStatus = await resolveBranchStatus( + config.branchName, + config.ignoreTests ); if (branchStatus !== BranchStatus.green) { logger.debug( diff --git a/lib/workers/pr/body/config-description.ts b/lib/workers/pr/body/config-description.ts index 804a19fbcddfbb..17ac4d82d1202a 100644 --- a/lib/workers/pr/body/config-description.ts +++ b/lib/workers/pr/body/config-description.ts @@ -1,6 +1,6 @@ -import { platform } from '../../../platform'; import { BranchStatus } from '../../../types'; import { emojify } from '../../../util/emoji'; +import { resolveBranchStatus } from '../../branch/status-checks'; import type { BranchConfig } from '../../types'; export async function getPrConfigDescription( @@ -26,9 +26,9 @@ export async function getPrConfigDescription( prBody += '\n\n'; prBody += emojify(':vertical_traffic_light: **Automerge**: '); if (config.automerge) { - const branchStatus = await platform.getBranchStatus( + const branchStatus = await resolveBranchStatus( config.branchName, - config.requiredStatusChecks + config.ignoreTests ); // istanbul ignore if if (branchStatus === BranchStatus.red) { diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts index f6f317cfdde3d3..eef8e1b684a18e 100644 --- a/lib/workers/pr/index.ts +++ b/lib/workers/pr/index.ts @@ -13,6 +13,7 @@ import { sampleSize } from '../../util'; import { stripEmojis } from '../../util/emoji'; import { deleteBranch, getBranchLastCommitTime } from '../../util/git'; import * as template from '../../util/template'; +import { resolveBranchStatus } from '../branch/status-checks'; import { Limit, incLimitedValue, isLimitReached } from '../global/limits'; import type { BranchConfig, PrBlockedBy } from '../types'; import { getPrBody } from './body'; @@ -164,17 +165,10 @@ export async function ensurePr( config.forcePr = true; } - let branchStatus: BranchStatus; - async function getBranchStatus(): Promise { - if (!branchStatus) { - branchStatus = await platform.getBranchStatus( - branchName, - config.requiredStatusChecks - ); - logger.debug({ branchStatus, branchName }, 'getBranchStatus() result'); - } - return branchStatus; - } + const branchStatus = await resolveBranchStatus( + config.branchName, + config.ignoreTests + ); // Only create a PR if a branch automerge has failed if ( @@ -183,11 +177,11 @@ export async function ensurePr( !config.forcePr ) { logger.debug( - `Branch is configured for branch automerge, branch status) is: ${await getBranchStatus()}` + `Branch is configured for branch automerge, branch status) is: ${branchStatus}` ); if ( config.stabilityStatus !== BranchStatus.yellow && - (await getBranchStatus()) === BranchStatus.yellow + branchStatus === BranchStatus.yellow ) { logger.debug('Checking how long this branch has been pending'); const lastCommitTime = await getBranchLastCommitTime(branchName); @@ -201,7 +195,7 @@ export async function ensurePr( config.forcePr = true; } } - if (config.forcePr || (await getBranchStatus()) === BranchStatus.red) { + if (config.forcePr || branchStatus === BranchStatus.red) { logger.debug(`Branch tests failed, so will create PR`); } else { // Branch should be automerged, so we don't want to create a PR @@ -210,10 +204,8 @@ export async function ensurePr( } if (config.prCreation === 'status-success') { logger.debug('Checking branch combined status'); - if ((await getBranchStatus()) !== BranchStatus.green) { - logger.debug( - `Branch status is "${await getBranchStatus()}" - not creating PR` - ); + if (branchStatus !== BranchStatus.green) { + logger.debug(`Branch status is "${branchStatus}" - not creating PR`); return { prBlockedBy: 'AwaitingTests' }; } logger.debug('Branch status success'); @@ -229,10 +221,8 @@ export async function ensurePr( !config.forcePr ) { logger.debug('Checking branch combined status'); - if ((await getBranchStatus()) === BranchStatus.yellow) { - logger.debug( - `Branch status is "${await getBranchStatus()}" - checking timeout` - ); + if (branchStatus === BranchStatus.yellow) { + logger.debug(`Branch status is "${branchStatus}" - checking timeout`); const lastCommitTime = await getBranchLastCommitTime(branchName); const currentTime = new Date(); const millisecondsPerHour = 1000 * 60 * 60; @@ -337,7 +327,7 @@ export async function ensurePr( !existingPr.hasAssignees && !existingPr.hasReviewers && config.automerge && - (await getBranchStatus()) === BranchStatus.red + branchStatus === BranchStatus.red ) { logger.debug(`Setting assignees and reviewers as status checks failed`); await addAssigneesReviewers(config, existingPr); @@ -482,7 +472,7 @@ export async function ensurePr( if ( config.automerge && !config.assignAutomerge && - (await getBranchStatus()) !== BranchStatus.red + branchStatus !== BranchStatus.red ) { logger.debug( `Skipping assignees and reviewers as automerge=${config.automerge}` diff --git a/lib/workers/repository/process/write.spec.ts b/lib/workers/repository/process/write.spec.ts index 5b57436fd477b8..e818bc2aaf3f45 100644 --- a/lib/workers/repository/process/write.spec.ts +++ b/lib/workers/repository/process/write.spec.ts @@ -27,7 +27,7 @@ describe('workers/repository/process/write', () => { const branches: BranchConfig[] = [ {}, {}, - { automergeType: 'pr-comment', requiredStatusChecks: null }, + { automergeType: 'pr-comment', ignoreTests: true }, {}, {}, ] as never; From d9fcd6b72a6c73a8c82de924badeef0dd16529b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 Sep 2021 19:50:40 +0000 Subject: [PATCH 08/20] chore(deps): update dependency type-fest to v2.2.0 (#11695) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 8b4b8b0b118afc..595d4c4f6b0c6d 100644 --- a/package.json +++ b/package.json @@ -269,7 +269,7 @@ "tmp-promise": "3.0.2", "ts-jest": "27.0.5", "ts-node": "10.2.1", - "type-fest": "2.1.0", + "type-fest": "2.2.0", "typescript": "4.4.2", "unified": "9.2.2" }, diff --git a/yarn.lock b/yarn.lock index b3dd7e1b944362..1c5dd24f3672f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9372,10 +9372,10 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.1.0.tgz#1f8b20ff51519f3b01b3188d50dea9f9ebfbf1b8" - integrity sha512-2wHUmKDy5wNLmebekbHx/zE9ElYAKOmz34psTLG7OwyEJHaIUr6jnaCd55EvgrawAvliwbwgbyH1LkxIfWFyNg== +type-fest@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.2.0.tgz#046d9b65ab5083e691ac4c7c264b54207046a755" + integrity sha512-T/HWTs/P20wqgy3GoIDv80tAB3Xvgk2vpxnS1vF8oVboipjrSB1hP5f1gFhCVt5QuMvOsALSwBBd02J94P51lg== type-fest@^0.13.1: version "0.13.1" From 12ef0f9025d8403384b8d7d1ea2d9da02bfe46c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 12 Sep 2021 23:05:42 +0000 Subject: [PATCH 09/20] chore(deps): update dependency @types/luxon to v2.0.3 (#11700) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 595d4c4f6b0c6d..04d3e44e68daea 100644 --- a/package.json +++ b/package.json @@ -219,7 +219,7 @@ "@types/js-yaml": "4.0.3", "@types/json-dup-key-validator": "1.0.0", "@types/linkify-markdown": "1.0.1", - "@types/luxon": "2.0.2", + "@types/luxon": "2.0.3", "@types/markdown-it": "12.2.1", "@types/markdown-table": "2.0.0", "@types/moo": "0.5.5", diff --git a/yarn.lock b/yarn.lock index 1c5dd24f3672f9..2524efe150d2e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1858,10 +1858,10 @@ resolved "https://registry.yarnpkg.com/@types/linkify-markdown/-/linkify-markdown-1.0.1.tgz#0b750a592107dd46ecf2b5be0eeb7656b1fc814d" integrity sha512-RYDOtCol7/sHGhSJvWVnl0AmOdQQWgUYys6cwn5Lt3RiYhyhTLMLv7B9wdixMgCfnNt0MQj/YSGi3qN0IQqLeQ== -"@types/luxon@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.0.2.tgz#89db62ab8299ed3a703e75eef525d6bdf94349bc" - integrity sha512-CUrDlIVYv7TNkdQV8YfT2WGAHyMAwFIT1PXoUcQhX2EFMVL20lxEQHWc73gdJfRtMsI6Vc22HvR7eUN0jkx6+w== +"@types/luxon@2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.0.3.tgz#03de7fa45451bffe9978700dca85fd6f242ef961" + integrity sha512-qhyivlWLuSnQa6EMx7W2oPiMUD4/F9BLuQynZe3jBgmfCS6Xr+Ock1+ZotN6xEkdJvdckyX+z1r5fyvi31GV5Q== "@types/markdown-it@12.2.1": version "12.2.1" From f5e08d5c1a41f520ed2f1086c31936ac89dce1be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 06:34:14 +0000 Subject: [PATCH 10/20] docs: update references to renovate/renovate to v27 (#11703) Co-authored-by: Renovate Bot --- docs/usage/docker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/docker.md b/docs/usage/docker.md index 83323d0cde5828..690a0e79e32a60 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -227,7 +227,7 @@ To get access to the token a custom Renovate Docker image is needed that include The Dockerfile to create such an image can look like this: ```Dockerfile -FROM renovate/renovate:26.19.1 +FROM renovate/renovate:27.5.0 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From 1f16f8a5b4416437b8c78f29f48a03c472565aad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 09:16:20 +0000 Subject: [PATCH 11/20] chore(deps): update dependency graphql to v15.5.3 (#11706) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 04d3e44e68daea..989b2a0dff12ce 100644 --- a/package.json +++ b/package.json @@ -248,7 +248,7 @@ "eslint-plugin-jest": "24.4.0", "eslint-plugin-promise": "5.1.0", "glob": "7.1.7", - "graphql": "15.5.2", + "graphql": "15.5.3", "husky": "7.0.2", "jest": "27.1.0", "jest-extended": "0.11.5", diff --git a/yarn.lock b/yarn.lock index 2524efe150d2e5..c364239787266d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4681,10 +4681,10 @@ grapheme-splitter@^1.0.4: resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== -graphql@15.5.2: - version "15.5.2" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.2.tgz#efa19f8f2bf1a48eb7d5c85bf17e144ba8bb0480" - integrity sha512-dZjLPWNQqYv0dqV2RNbiFed0LtSp6yd4jchsDGnuhDKa9OQHJYCfovaOEvY91w9gqbYO7Se9LKDTl3xxYva/3w== +graphql@15.5.3: + version "15.5.3" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.3.tgz#c72349017d5c9f5446a897fe6908b3186db1da00" + integrity sha512-sM+jXaO5KinTui6lbK/7b7H/Knj9BpjGxZ+Ki35v7YbUJxxdBCUqNM0h3CRVU1ZF9t5lNiBzvBCSYPvIwxPOQA== handlebars@4.7.7, handlebars@^4.7.6: version "4.7.7" From f5d557a3dd7fa01009a43c86da4f773974ad23aa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 11:23:02 +0000 Subject: [PATCH 12/20] chore(deps): lock file maintenance (#11704) Co-authored-by: Renovate Bot --- yarn.lock | 943 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 528 insertions(+), 415 deletions(-) diff --git a/yarn.lock b/yarn.lock index c364239787266d..e4a594c59504ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -774,9 +774,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.15.4", "@babel/parser@^7.15.5", "@babel/parser@^7.7.2": - version "7.15.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac" - integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg== + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.6.tgz#043b9aa3c303c0722e5377fef9197f4cf1796549" + integrity sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -902,9 +902,9 @@ globals "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.15.4", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d" - integrity sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw== + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== dependencies: "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" @@ -995,76 +995,76 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/console@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.1.0.tgz#de13b603cb1d389b50c0dc6296e86e112381e43c" - integrity sha512-+Vl+xmLwAXLNlqT61gmHEixeRbS4L8MUzAjtpBCOPWH+izNI/dR16IeXjkXJdRtIVWVSf9DO1gdp67B1XorZhQ== +"@jest/console@^27.1.0", "@jest/console@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.2.0.tgz#57f702837ec52899be58c3794dce5941c77a8b63" + integrity sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.1.0" - jest-util "^27.1.0" + jest-message-util "^27.2.0" + jest-util "^27.2.0" slash "^3.0.0" -"@jest/core@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.1.0.tgz#622220f18032f5869e579cecbe744527238648bf" - integrity sha512-3l9qmoknrlCFKfGdrmiQiPne+pUR4ALhKwFTYyOeKw6egfDwJkO21RJ1xf41rN8ZNFLg5W+w6+P4fUqq4EMRWA== +"@jest/core@^27.1.0", "@jest/core@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.2.0.tgz#61fc27b244e9709170ed9ffe41b006add569f1b3" + integrity sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw== dependencies: - "@jest/console" "^27.1.0" - "@jest/reporters" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/console" "^27.2.0" + "@jest/reporters" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" - jest-changed-files "^27.1.0" - jest-config "^27.1.0" - jest-haste-map "^27.1.0" - jest-message-util "^27.1.0" + jest-changed-files "^27.1.1" + jest-config "^27.2.0" + jest-haste-map "^27.2.0" + jest-message-util "^27.2.0" jest-regex-util "^27.0.6" - jest-resolve "^27.1.0" - jest-resolve-dependencies "^27.1.0" - jest-runner "^27.1.0" - jest-runtime "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" - jest-watcher "^27.1.0" + jest-resolve "^27.2.0" + jest-resolve-dependencies "^27.2.0" + jest-runner "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" + jest-watcher "^27.2.0" micromatch "^4.0.4" p-each-series "^2.1.0" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.1.0.tgz#c7224a67004759ec203d8fa44e8bc0db93f66c44" - integrity sha512-wRp50aAMY2w1U2jP1G32d6FUVBNYqmk8WaGkiIEisU48qyDV0WPtw3IBLnl7orBeggveommAkuijY+RzVnNDOQ== +"@jest/environment@^27.1.0", "@jest/environment@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.2.0.tgz#48d1dbfa65f8e4a5a5c6cbeb9c59d1a5c2776f6b" + integrity sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ== dependencies: - "@jest/fake-timers" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/fake-timers" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.1.0" + jest-mock "^27.1.1" -"@jest/fake-timers@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.1.0.tgz#c0b343d8a16af17eab2cb6862e319947c0ea2abe" - integrity sha512-22Zyn8il8DzpS+30jJNVbTlm7vAtnfy1aYvNeOEHloMlGy1PCYLHa4PWlSws0hvNsMM5bON6GISjkLoQUV3oMA== +"@jest/fake-timers@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.2.0.tgz#560841bc21ae7fbeff0cbff8de8f5cf43ad3561d" + integrity sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@sinonjs/fake-timers" "^7.0.2" "@types/node" "*" - jest-message-util "^27.1.0" - jest-mock "^27.1.0" - jest-util "^27.1.0" + jest-message-util "^27.2.0" + jest-mock "^27.1.1" + jest-util "^27.2.0" -"@jest/globals@27.1.0", "@jest/globals@^27.1.0": +"@jest/globals@27.1.0": version "27.1.0" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.1.0.tgz#e093a49c718dd678a782c197757775534c88d3f2" integrity sha512-73vLV4aNHAlAgjk0/QcSIzzCZSqVIPbmFROJJv9D3QUR7BI4f517gVdJpSrCHxuRH3VZFhe0yGG/tmttlMll9g== @@ -1073,7 +1073,16 @@ "@jest/types" "^27.1.0" expect "^27.1.0" -"@jest/reporters@27.1.0", "@jest/reporters@^27.1.0": +"@jest/globals@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.2.0.tgz#4d7085f51df5ac70c8240eb3501289676503933d" + integrity sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg== + dependencies: + "@jest/environment" "^27.2.0" + "@jest/types" "^27.1.1" + expect "^27.2.0" + +"@jest/reporters@27.1.0": version "27.1.0" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.1.0.tgz#02ed1e6601552c2f6447378533f77aad002781d4" integrity sha512-5T/zlPkN2HnK3Sboeg64L5eC8iiaZueLpttdktWTJsvALEtP2YMkC5BQxwjRWQACG9SwDmz+XjjkoxXUDMDgdw== @@ -1103,6 +1112,36 @@ terminal-link "^2.0.0" v8-to-istanbul "^8.0.0" +"@jest/reporters@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.2.0.tgz#629886d9a42218e504a424889a293abb27919e25" + integrity sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.2.4" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.3" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + jest-haste-map "^27.2.0" + jest-resolve "^27.2.0" + jest-util "^27.2.0" + jest-worker "^27.2.0" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.0.0" + "@jest/source-map@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" @@ -1121,7 +1160,7 @@ graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@27.1.0", "@jest/test-result@^27.1.0": +"@jest/test-result@27.1.0": version "27.1.0" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.1.0.tgz#9345ae5f97f6a5287af9ebd54716cd84331d42e8" integrity sha512-Aoz00gpDL528ODLghat3QSy6UBTD5EmmpjrhZZMK/v1Q2/rRRqTGnFxHuEkrD4z/Py96ZdOHxIWkkCKRpmnE1A== @@ -1140,31 +1179,41 @@ "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-sequencer@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.1.0.tgz#04e8b3bd735570d3d48865e74977a14dc99bff2d" - integrity sha512-lnCWawDr6Z1DAAK9l25o3AjmKGgcutq1iIbp+hC10s/HxnB8ZkUsYq1FzjOoxxZ5hW+1+AthBtvS4x9yno3V1A== +"@jest/test-result@^27.1.0", "@jest/test-result@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.2.0.tgz#377b46a41a6415dd4839fd0bed67b89fecea6b20" + integrity sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA== dependencies: - "@jest/test-result" "^27.1.0" + "@jest/console" "^27.2.0" + "@jest/types" "^27.1.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz#b02b507687825af2fdc84e90c539d36fd8cf7bc9" + integrity sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA== + dependencies: + "@jest/test-result" "^27.2.0" graceful-fs "^4.2.4" - jest-haste-map "^27.1.0" - jest-runtime "^27.1.0" + jest-haste-map "^27.2.0" + jest-runtime "^27.2.0" -"@jest/transform@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.1.0.tgz#962e385517e3d1f62827fa39c305edcc3ca8544b" - integrity sha512-ZRGCA2ZEVJ00ubrhkTG87kyLbN6n55g1Ilq0X9nJb5bX3MhMp3O6M7KG+LvYu+nZRqG5cXsQnJEdZbdpTAV8pQ== +"@jest/transform@^27.1.0", "@jest/transform@^27.2.0": + version "27.2.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.2.0.tgz#e7e6e49d2591792db2385c33cdbb4379d407068d" + integrity sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" babel-plugin-istanbul "^6.0.0" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^27.1.0" + jest-haste-map "^27.2.0" jest-regex-util "^27.0.6" - jest-util "^27.1.0" + jest-util "^27.2.0" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -1191,10 +1240,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.1.0": - version "27.1.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.0.tgz#674a40325eab23c857ebc0689e7e191a3c5b10cc" - integrity sha512-pRP5cLIzN7I7Vp6mHKRSaZD7YpBTK7hawx5si8trMKqk4+WOdK8NEKOTO2G8PKWD1HbKMVckVB6/XHh/olhf2g== +"@jest/types@^27.1.0", "@jest/types@^27.1.1": + version "27.1.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.1.tgz#77a3fc014f906c65752d12123a0134359707c0ad" + integrity sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -1429,17 +1478,17 @@ "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^10.1.0": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-10.1.1.tgz#74607482d193e9c9cc7e23ecf04b1bde3eabb6d8" - integrity sha512-ygp/6r25Ezb1CJuVMnFfOsScEtPF0zosdTJDZ7mZ+I8IULl7DP1BS5ZvPRwglcarGPXOvS5sHdR0bjnVDDfQdQ== +"@octokit/openapi-types@^10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-10.1.4.tgz#b66cefc70e83fd413a1307a2b9381aac0e14a76b" + integrity sha512-poafDt5Ac5GV86baVXDdj6xeIMrEVEuRweMwkZfoXwySYWA0eKgrOP/ZaDE7V/hlW32z6oO61Zy/5U2oSZlDWw== "@octokit/plugin-paginate-rest@^2.16.0": - version "2.16.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.0.tgz#09dbda2e5fbca022e3cdf76b63618f7b357c9f0c" - integrity sha512-8YYzALPMvEZ35kgy5pdYvQ22Roz+BIuEaedO575GwE2vb/ACDqQn0xQrTJR4tnZCJn7pi8+AWPVjrFDaERIyXQ== + version "2.16.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.1.tgz#699ea5c4d0274626bd7c4b896b4789c21ea3540e" + integrity sha512-53RGhlRNhQVepZq063YCoIssZkAYjIU1kWQi9m7Qjdq/1IiuZOB9iSHdjDQmKtHWDRSqNwbtsX+tlJNhP1DHEQ== dependencies: - "@octokit/types" "^6.26.0" + "@octokit/types" "^6.27.1" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" @@ -1447,11 +1496,11 @@ integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== "@octokit/plugin-rest-endpoint-methods@^5.9.0": - version "5.10.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.10.0.tgz#8058acf408d518defa2dc59a46777adbcd7ee8e8" - integrity sha512-HiUZliq5wNg15cevJlTo9zDnPXAD0BMRhLxbRNPnq9J3HELKesDTOiou56ax2jC/rECUkK/uJTugrizYKSo/jg== + version "5.10.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.10.2.tgz#84ae65ae3f40b2d8a25bf7db7c1054a15d9383b6" + integrity sha512-Q1QdPqA1HuKbXBuUnyNEImp948htcxgOVwUFTbUbRUsWSJPhabDe3Imd+C8vZg2czpBkl9uR8zx71WE1CP9TxA== dependencies: - "@octokit/types" "^6.27.0" + "@octokit/types" "^6.27.1" deprecation "^2.3.1" "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": @@ -1485,12 +1534,12 @@ "@octokit/plugin-request-log" "^1.0.4" "@octokit/plugin-rest-endpoint-methods" "^5.9.0" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.26.0", "@octokit/types@^6.27.0": - version "6.27.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.27.0.tgz#2ffcd4d1cf344285f4151978c6fd36a2edcdf922" - integrity sha512-ha27f8DToxXBPEJdzHCCuqpw7AgKfjhWGdNf3yIlBAhAsaexBXTfWw36zNSsncALXGvJq4EjLy1p3Wz45Aqb4A== +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.27.1": + version "6.27.1" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.27.1.tgz#88ec25f0cff5fb637c475cf420a0a2e35ba564c7" + integrity sha512-p8VR2OTO1ozxqdAvPeCDDMNmcBzkOL6sPogy2MaEQCapbeWcWNDbwZnqMT3VTZ0DLBBAO0PyHYzU8bA99zd1Fg== dependencies: - "@octokit/openapi-types" "^10.1.0" + "@octokit/openapi-types" "^10.1.4" "@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.3": version "0.0.1" @@ -1598,11 +1647,16 @@ lodash "^4.17.4" read-pkg-up "^7.0.0" -"@sindresorhus/is@4.0.1", "@sindresorhus/is@^4.0.0": +"@sindresorhus/is@4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== +"@sindresorhus/is@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.1.0.tgz#3853c0c48b47f0ebcdd3cd9a66fdd0d277173e78" + integrity sha512-Cgva8HxclecUCmAImsWsbZGUh6p5DSzQ8l2Uzxuj9ANiD7LVhLM1UJ2hX/R2Y+ILpvqgW9QjmTCaBkXtj8+UOg== + "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -1650,9 +1704,9 @@ integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.15" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.15.tgz#2ccfb1ad55a02c83f8e0ad327cbc332f55eb1024" - integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== + version "7.1.16" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.16.tgz#bc12c74b7d65e82d29876b5d0baf5c625ac58702" + integrity sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1842,9 +1896,9 @@ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= "@types/keyv@*": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5" - integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41" + integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg== dependencies: "@types/node" "*" @@ -1917,9 +1971,9 @@ integrity sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA== "@types/node@*": - version "16.7.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.10.tgz#7aa732cc47341c12a16b7d562f519c2383b6d4fc" - integrity sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA== + version "16.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" + integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== "@types/node@14.17.14": version "14.17.14" @@ -1952,9 +2006,9 @@ integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== "@types/redis@^2.8.30": - version "2.8.31" - resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.31.tgz#c11c1b269fec132ac2ec9eb891edf72fc549149e" - integrity sha512-daWrrTDYaa5iSDFbgzZ9gOOzyp2AJmYK59OlG/2KGBgYWF3lfs8GDKm1c//tik5Uc93hDD36O+qLPvzDolChbA== + version "2.8.32" + resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.32.tgz#1d3430219afbee10f8cfa389dad2571a05ecfb11" + integrity sha512-7jkMKxcGq9p242exlbsVzuJb57KqHRhNl4dHoQu2Y5v9bCAbtIXXH0R3HleSQW4CTOqpHIYUW3t6tpUj4BVQ+w== dependencies: "@types/node" "*" @@ -2079,7 +2133,7 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.30.0", "@typescript-eslint/experimental-utils@^4.0.1": +"@typescript-eslint/experimental-utils@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz#9e49704fef568432ae16fc0d6685c13d67db0fd5" integrity sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw== @@ -2091,7 +2145,19 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@4.30.0", "@typescript-eslint/parser@^4.4.1": +"@typescript-eslint/experimental-utils@^4.0.1": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz#0ef1d5d86c334f983a00f310e43c1ce4c14e054d" + integrity sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.31.0" + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/typescript-estree" "4.31.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.30.0.tgz#6abd720f66bd790f3e0e80c3be77180c8fcb192d" integrity sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg== @@ -2101,6 +2167,16 @@ "@typescript-eslint/typescript-estree" "4.30.0" debug "^4.3.1" +"@typescript-eslint/parser@^4.4.1": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" + integrity sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w== + dependencies: + "@typescript-eslint/scope-manager" "4.31.0" + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/typescript-estree" "4.31.0" + debug "^4.3.1" + "@typescript-eslint/scope-manager@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz#1a3ffbb385b1a06be85cd5165a22324f069a85ee" @@ -2109,11 +2185,24 @@ "@typescript-eslint/types" "4.30.0" "@typescript-eslint/visitor-keys" "4.30.0" +"@typescript-eslint/scope-manager@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" + integrity sha512-LJ+xtl34W76JMRLjbaQorhR0hfRAlp3Lscdiz9NeI/8i+q0hdBZ7BsiYieLoYWqy+AnRigaD3hUwPFugSzdocg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + "@typescript-eslint/types@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.30.0.tgz#fb9d9b0358426f18687fba82eb0b0f869780204f" integrity sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw== +"@typescript-eslint/types@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" + integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== + "@typescript-eslint/typescript-estree@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz#ae57833da72a753f4846cd3053758c771670c2ac" @@ -2127,6 +2216,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" + integrity sha512-QHl2014t3ptg+xpmOSSPn5hm4mY8D4s97ftzyk9BZ8RxYQ3j73XcwuijnJ9cMa6DO4aLXeo8XS3z1omT9LA/Eg== + dependencies: + "@typescript-eslint/types" "4.31.0" + "@typescript-eslint/visitor-keys" "4.31.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.30.0": version "4.30.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz#a47c6272fc71b0c627d1691f68eaecf4ad71445e" @@ -2135,6 +2237,14 @@ "@typescript-eslint/types" "4.30.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" + integrity sha512-HUcRp2a9I+P21+O21yu3ezv3GEPGjyGiXoEUQwZXjR8UxRApGeLyWH4ZIIUSalE28aG4YsV6GjtaAVB3QKOu0w== + dependencies: + "@typescript-eslint/types" "4.31.0" + eslint-visitor-keys "^2.0.0" + "@yarnpkg/core@2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-2.4.0.tgz#b5d8cc7ee2ddb022816c7afa3f83c3ee3d317c80" @@ -2264,9 +2374,9 @@ acorn-walk@^7.1.1: integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== acorn-walk@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc" - integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" @@ -2274,9 +2384,9 @@ acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4, acorn@^8.4.1: - version "8.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -2313,9 +2423,9 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: 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== + version "8.6.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.3.tgz#11a66527761dc3e9a3845ea775d2d3c0414e8764" + integrity sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -2569,16 +2679,16 @@ azure-devops-node-api@11.0.1: tunnel "0.0.6" typed-rest-client "^1.8.4" -babel-jest@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.1.0.tgz#e96ca04554fd32274439869e2b6d24de9d91bc4e" - integrity sha512-6NrdqzaYemALGCuR97QkC/FkFIEBWP5pw5TMJoUHZTVXyOgocujp6A0JE2V6gE0HtqAAv6VKU/nI+OCR1Z4gHA== +babel-jest@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.2.0.tgz#c0f129a81f1197028aeb4447acbc04564c8bfc52" + integrity sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA== dependencies: - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^27.0.6" + babel-preset-jest "^27.2.0" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -2594,10 +2704,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz#f7c6b3d764af21cb4a2a1ab6870117dbde15b456" - integrity sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw== +babel-plugin-jest-hoist@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz#79f37d43f7e5c4fdc4b2ca3e10cc6cf545626277" + integrity sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2622,12 +2732,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz#909ef08e9f24a4679768be2f60a3df0856843f9d" - integrity sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw== +babel-preset-jest@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz#556bbbf340608fed5670ab0ea0c8ef2449fba885" + integrity sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg== dependencies: - babel-plugin-jest-hoist "^27.0.6" + babel-plugin-jest-hoist "^27.2.0" babel-preset-current-node-syntax "^1.0.0" backslash@^0.2.0: @@ -2910,9 +3020,9 @@ camelcase@^6.2.0: integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30001254: - version "1.0.30001255" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz#f3b09b59ab52e39e751a569523618f47c4298ca0" - integrity sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ== + version "1.0.30001257" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz#150aaf649a48bee531104cfeda57f92ce587f6e5" + integrity sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA== cardinal@^2.1.1: version "2.1.1" @@ -3135,9 +3245,9 @@ color-support@^1.1.2: integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colorette@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" - integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== + 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" @@ -3203,9 +3313,9 @@ console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control- integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= conventional-changelog-angular@^5.0.0: - version "5.0.12" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" - integrity sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw== + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== dependencies: compare-func "^2.0.0" q "^1.5.1" @@ -3254,9 +3364,9 @@ conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: modify-values "^1.0.0" conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: - version "3.2.1" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz#ba44f0b3b6588da2ee9fd8da508ebff50d116ce2" - integrity sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA== + version "3.2.2" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.2.tgz#190fb9900c6e02be0c0bca9b03d57e24982639fd" + integrity sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" @@ -3264,7 +3374,6 @@ conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: meow "^8.0.0" split2 "^3.0.0" through2 "^4.0.0" - trim-off-newlines "^1.0.0" convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" @@ -3279,14 +3388,14 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-pure@^3.16.0: - version "3.17.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.17.2.tgz#ba6311b6aa1e2f2adeba4ac6ec51a9ff40bdc1af" - integrity sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ== + version "3.17.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.17.3.tgz#98ea3587188ab7ef4695db6518eeb71aec42604a" + integrity sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ== core-js@^3.6.5: - version "3.17.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.17.2.tgz#f960eae710dc62c29cca93d5332e3660e289db10" - integrity sha512-XkbXqhcXeMHPRk2ItS+zQYliAMilea2euoMsnpRRdDad6b2VY6CQQcwz1K8AnWesfw4p165RzY0bTnr3UrbYiA== + version "3.17.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.17.3.tgz#8e8bd20e91df9951e903cabe91f9af4a0895bc1e" + integrity sha512-lyvajs+wd8N1hXfzob1LdOCCHFU4bGMbqqmLn1Q4QlCpDqWPpGf+p0nj+LNrvDDG33j0hZXw2nsvvVpHysxyNw== core-util-is@1.0.2: version "1.0.2" @@ -3716,9 +3825,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.830: - version "1.3.830" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz#40e3144204f8ca11b2cebec83cf14c20d3499236" - integrity sha512-gBN7wNAxV5vl1430dG+XRcQhD4pIeYeak6p6rjdCtlz5wWNwDad8jwvphe5oi1chL5MV6RNRikfffBBiFuj+rQ== + version "1.3.836" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz#823cb9c98f28c64c673920f1c90ea3826596eaf9" + integrity sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg== email-addresses@5.0.0: version "5.0.0" @@ -3819,21 +3928,22 @@ error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" - integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== + version "1.18.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.6.tgz#2c44e3ea7a6255039164d26559777a6d978cb456" + integrity sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" has-symbols "^1.0.2" internal-slot "^1.0.3" - is-callable "^1.2.3" + is-callable "^1.2.4" is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" + is-regex "^1.1.4" + is-string "^1.0.7" object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" @@ -4161,16 +4271,16 @@ expect@^24.1.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -expect@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.1.0.tgz#380de0abb3a8f2299c4c6c66bbe930483b5dba9b" - integrity sha512-9kJngV5hOJgkFil4F/uXm3hVBubUK2nERVfvqNNwxxuW8ZOUwSTTSysgfzckYtv/LBzj/LJXbiAF7okHCXgdug== +expect@^27.1.0, expect@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.2.0.tgz#40eb89a492afb726a3929ccf3611ee0799ab976f" + integrity sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" ansi-styles "^5.0.0" jest-get-type "^27.0.6" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" jest-regex-util "^27.0.6" extend-shallow@^2.0.1: @@ -4270,9 +4380,9 @@ fastest-levenshtein@*: integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== fastq@^1.6.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.12.0.tgz#ed7b6ab5d62393fb2cc591c853652a5c318bf794" - integrity sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg== + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" @@ -4525,6 +4635,14 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -4999,15 +5117,14 @@ ini@~1.3.0: integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== init-package-json@*: - version "2.0.4" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.4.tgz#9f9f66cd5934e6d5f645150e15013d384d0b90d2" - integrity sha512-gUACSdZYka+VvnF90TsQorC+1joAVWNI724vBNj3RD0LLMeDss2IuzaeiQs0T4YzKs76BPHtrp/z3sn2p+KDTw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-2.0.5.tgz#78b85f3c36014db42d8f32117252504f68022646" + integrity sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA== dependencies: - glob "^7.1.1" - npm-package-arg "^8.1.2" + npm-package-arg "^8.1.5" promzard "^0.3.0" read "~1.0.1" - read-package-json "^4.0.0" + read-package-json "^4.1.1" semver "^7.3.5" validate-npm-package-license "^3.0.4" validate-npm-package-name "^3.0.0" @@ -5101,7 +5218,7 @@ is-buffer@^2.0.0: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.3: +is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== @@ -5300,7 +5417,7 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.1.3: +is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -5320,7 +5437,7 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.6: +is-string@^1.0.5, 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== @@ -5440,84 +5557,84 @@ java-properties@^1.0.0: resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== -jest-changed-files@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.1.0.tgz#42da6ea00f06274172745729d55f42b60a9dffe0" - integrity sha512-eRcb13TfQw0xiV2E98EmiEgs9a5uaBIqJChyl0G7jR9fCIvGjXovnDS6Zbku3joij4tXYcSK4SE1AXqOlUxjWg== +jest-changed-files@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.1.1.tgz#9b3f67a34cc58e3e811e2e1e21529837653e4200" + integrity sha512-5TV9+fYlC2A6hu3qtoyGHprBwCAn0AuGA77bZdUgYvVlRMjHXo063VcWTEAyx6XAZ85DYHqp0+aHKbPlfRDRvA== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.1.0.tgz#24c280c90a625ea57da20ee231d25b1621979a57" - integrity sha512-6FWtHs3nZyZlMBhRf1wvAC5CirnflbGJAY1xssSAnERLiiXQRH+wY2ptBVtXjX4gz4AA2EwRV57b038LmifRbA== +jest-circus@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.2.0.tgz#ad0d6d75514050f539d422bae41344224d2328f9" + integrity sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA== dependencies: - "@jest/environment" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/environment" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.1.0" + expect "^27.2.0" is-generator-fn "^2.0.0" - jest-each "^27.1.0" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" - jest-runtime "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - pretty-format "^27.1.0" + jest-each "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + pretty-format "^27.2.0" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" jest-cli@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.1.0.tgz#118438e4d11cf6fb66cb2b2eb5778817eab3daeb" - integrity sha512-h6zPUOUu+6oLDrXz0yOWY2YXvBLk8gQinx4HbZ7SF4V3HzasQf+ncoIbKENUMwXyf54/6dBkYXvXJos+gOHYZw== + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.2.0.tgz#6da5ecca5bd757e20449f5ec1f1cad5b0303d16b" + integrity sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA== dependencies: - "@jest/core" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/core" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-config "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" prompts "^2.0.1" yargs "^16.0.3" -jest-config@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.1.0.tgz#e6826e2baaa34c07c3839af86466870e339d9ada" - integrity sha512-GMo7f76vMYUA3b3xOdlcKeKQhKcBIgurjERO2hojo0eLkKPGcw7fyIoanH+m6KOP2bLad+fGnF8aWOJYxzNPeg== +jest-config@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.2.0.tgz#d1c359253927005c53d11ab3e50d3b2f402a673a" + integrity sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.1.0" - "@jest/types" "^27.1.0" - babel-jest "^27.1.0" + "@jest/test-sequencer" "^27.2.0" + "@jest/types" "^27.1.1" + babel-jest "^27.2.0" chalk "^4.0.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" is-ci "^3.0.0" - jest-circus "^27.1.0" - jest-environment-jsdom "^27.1.0" - jest-environment-node "^27.1.0" + jest-circus "^27.2.0" + jest-environment-jsdom "^27.2.0" + jest-environment-node "^27.2.0" jest-get-type "^27.0.6" - jest-jasmine2 "^27.1.0" + jest-jasmine2 "^27.2.0" jest-regex-util "^27.0.6" - jest-resolve "^27.1.0" - jest-runner "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-resolve "^27.2.0" + jest-runner "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" micromatch "^4.0.4" - pretty-format "^27.1.0" + pretty-format "^27.2.0" jest-diff@^24.9.0: version "24.9.0" @@ -5529,15 +5646,15 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^27.0.0, jest-diff@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.1.0.tgz#c7033f25add95e2218f3c7f4c3d7b634ab6b3cd2" - integrity sha512-rjfopEYl58g/SZTsQFmspBODvMSytL16I+cirnScWTLkQVXYVZfxm78DFfdIIXc05RCYuGjxJqrdyG4PIFzcJg== +jest-diff@^27.0.0, jest-diff@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.0.tgz#bda761c360f751bab1e7a2fe2fc2b0a35ce8518c" + integrity sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw== dependencies: chalk "^4.0.0" diff-sequences "^27.0.6" jest-get-type "^27.0.6" - pretty-format "^27.1.0" + pretty-format "^27.2.0" jest-docblock@^27.0.6: version "27.0.6" @@ -5546,41 +5663,41 @@ jest-docblock@^27.0.6: dependencies: detect-newline "^3.0.0" -jest-each@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.1.0.tgz#36ac75f7aeecb3b8da2a8e617ccb30a446df408c" - integrity sha512-K/cNvQlmDqQMRHF8CaQ0XPzCfjP5HMJc2bIJglrIqI9fjwpNqITle63IWE+wq4p+3v+iBgh7Wq0IdGpLx5xjDg== +jest-each@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.2.0.tgz#4c531c7223de289429fc7b2473a86e653c86d61f" + integrity sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" chalk "^4.0.0" jest-get-type "^27.0.6" - jest-util "^27.1.0" - pretty-format "^27.1.0" + jest-util "^27.2.0" + pretty-format "^27.2.0" -jest-environment-jsdom@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.1.0.tgz#5fb3eb8a67e02e6cc623640388d5f90e33075f18" - integrity sha512-JbwOcOxh/HOtsj56ljeXQCUJr3ivnaIlM45F5NBezFLVYdT91N5UofB1ux2B1CATsQiudcHdgTaeuqGXJqjJYQ== +jest-environment-jsdom@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz#c654dfae50ca2272c2a2e2bb95ff0af298283a3c" + integrity sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA== dependencies: - "@jest/environment" "^27.1.0" - "@jest/fake-timers" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.1.0" - jest-util "^27.1.0" + jest-mock "^27.1.1" + jest-util "^27.2.0" jsdom "^16.6.0" -jest-environment-node@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.1.0.tgz#feea6b765f1fd4582284d4f1007df2b0a8d15b7f" - integrity sha512-JIyJ8H3wVyM4YCXp7njbjs0dIT87yhGlrXCXhDKNIg1OjurXr6X38yocnnbXvvNyqVTqSI4M9l+YfPKueqL1lw== +jest-environment-node@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.2.0.tgz#73ef2151cb62206669becb94cd84f33276252de5" + integrity sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg== dependencies: - "@jest/environment" "^27.1.0" - "@jest/fake-timers" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" - jest-mock "^27.1.0" - jest-util "^27.1.0" + jest-mock "^27.1.1" + jest-util "^27.2.0" jest-extended@0.11.5: version "0.11.5" @@ -5613,12 +5730,12 @@ jest-github-actions-reporter@1.0.3: dependencies: "@actions/core" "^1.2.0" -jest-haste-map@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.1.0.tgz#a39f456823bd6a74e3c86ad25f6fa870428326bf" - integrity sha512-7mz6LopSe+eA6cTFMf10OfLLqRoIPvmMyz5/OnSXnHO7hB0aDP1iIeLWCXzAcYU5eIJVpHr12Bk9yyq2fTW9vg== +jest-haste-map@^27.1.0, jest-haste-map@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.2.0.tgz#703b3a473e3f2e27d75ab07864ffd7bbaad0d75e" + integrity sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" @@ -5626,35 +5743,35 @@ jest-haste-map@^27.1.0: graceful-fs "^4.2.4" jest-regex-util "^27.0.6" jest-serializer "^27.0.6" - jest-util "^27.1.0" - jest-worker "^27.1.0" + jest-util "^27.2.0" + jest-worker "^27.2.0" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.1.0.tgz#324a3de0b2ee20d238b2b5b844acc4571331a206" - integrity sha512-Z/NIt0wBDg3przOW2FCWtYjMn3Ip68t0SL60agD/e67jlhTyV3PIF8IzT9ecwqFbeuUSO2OT8WeJgHcalDGFzQ== +jest-jasmine2@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz#1ece0ee37c348b59ed3dfcfe509fc24e3377b12d" + integrity sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.1.0" + "@jest/environment" "^27.2.0" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.1.0" + expect "^27.2.0" is-generator-fn "^2.0.0" - jest-each "^27.1.0" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" - jest-runtime "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - pretty-format "^27.1.0" + jest-each "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-runtime "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + pretty-format "^27.2.0" throat "^6.0.1" jest-junit@12.2.0: @@ -5667,13 +5784,13 @@ jest-junit@12.2.0: uuid "^8.3.2" xml "^1.0.1" -jest-leak-detector@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.1.0.tgz#fe7eb633c851e06280ec4dd248067fe232c00a79" - integrity sha512-oHvSkz1E80VyeTKBvZNnw576qU+cVqRXUD3/wKXh1zpaki47Qty2xeHg2HKie9Hqcd2l4XwircgNOWb/NiGqdA== +jest-leak-detector@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz#9a7ca2dad1a21c4e49ad2a8ad7f1214ffdb86a28" + integrity sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA== dependencies: jest-get-type "^27.0.6" - pretty-format "^27.1.0" + pretty-format "^27.2.0" jest-matcher-utils@^22.0.0: version "22.4.3" @@ -5694,15 +5811,15 @@ jest-matcher-utils@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-matcher-utils@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz#68afda0885db1f0b9472ce98dc4c535080785301" - integrity sha512-VmAudus2P6Yt/JVBRdTPFhUzlIN8DYJd+et5Rd9QDsO/Z82Z4iwGjo43U8Z+PTiz8CBvKvlb6Fh3oKy39hykkQ== +jest-matcher-utils@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz#b4d224ab88655d5fab64b96b989ac349e2f5da43" + integrity sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw== dependencies: chalk "^4.0.0" - jest-diff "^27.1.0" + jest-diff "^27.2.0" jest-get-type "^27.0.6" - pretty-format "^27.1.0" + pretty-format "^27.2.0" jest-message-util@^24.9.0: version "24.9.0" @@ -5718,18 +5835,18 @@ jest-message-util@^24.9.0: slash "^2.0.0" stack-utils "^1.0.1" -jest-message-util@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.1.0.tgz#e77692c84945d1d10ef00afdfd3d2c20bd8fb468" - integrity sha512-Eck8NFnJ5Sg36R9XguD65cf2D5+McC+NF5GIdEninoabcuoOfWrID5qJhufq5FB0DRKoiyxB61hS7MKoMD0trQ== +jest-message-util@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.2.0.tgz#2f65c71df55267208686b1d7514e18106c91ceaf" + integrity sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.1.0" + pretty-format "^27.2.0" slash "^3.0.0" stack-utils "^2.0.3" @@ -5740,12 +5857,12 @@ jest-mock-extended@1.0.18: dependencies: ts-essentials "^7.0.2" -jest-mock@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.0.tgz#7ca6e4d09375c071661642d1c14c4711f3ab4b4f" - integrity sha512-iT3/Yhu7DwAg/0HvvLCqLvrTKTRMyJlrrfJYWzuLSf9RCAxBoIXN3HoymZxMnYsC3eD8ewGbUa9jUknwBenx2w== +jest-mock@^27.1.1: + version "27.1.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.1.1.tgz#c7a2e81301fdcf3dab114931d23d89ec9d0c3a82" + integrity sha512-SClsFKuYBf+6SSi8jtAYOuPw8DDMsTElUWEae3zq7vDhH01ayVSIHUSIa8UgbDOUalCFp6gNsaikN0rbxN4dbw== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -5763,72 +5880,72 @@ jest-regex-util@^27.0.6: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5" integrity sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ== -jest-resolve-dependencies@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.0.tgz#d32ea4a2c82f76410f6157d0ec6cde24fbff2317" - integrity sha512-Kq5XuDAELuBnrERrjFYEzu/A+i2W7l9HnPWqZEeKGEQ7m1R+6ndMbdXCVCx29Se1qwLZLgvoXwinB3SPIaitMQ== +jest-resolve-dependencies@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz#b56a1aab95b0fd21e0a69a15fda985c05f902b8a" + integrity sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" jest-regex-util "^27.0.6" - jest-snapshot "^27.1.0" + jest-snapshot "^27.2.0" -jest-resolve@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.1.0.tgz#bb22303c9e240cccdda28562e3c6fbcc6a23ac86" - integrity sha512-TXvzrLyPg0vLOwcWX38ZGYeEztSEmW+cQQKqc4HKDUwun31wsBXwotRlUz4/AYU/Fq4GhbMd/ileIWZEtcdmIA== +jest-resolve@^27.1.0, jest-resolve@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.2.0.tgz#f5d053693ab3806ec2f778e6df8b0aa4cfaef95f" + integrity sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" chalk "^4.0.0" escalade "^3.1.1" graceful-fs "^4.2.4" - jest-haste-map "^27.1.0" + jest-haste-map "^27.2.0" jest-pnp-resolver "^1.2.2" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" resolve "^1.20.0" slash "^3.0.0" -jest-runner@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.1.0.tgz#1b28d114fb3b67407b8354c9385d47395e8ff83f" - integrity sha512-ZWPKr9M5w5gDplz1KsJ6iRmQaDT/yyAFLf18fKbb/+BLWsR1sCNC2wMT0H7pP3gDcBz0qZ6aJraSYUNAGSJGaw== +jest-runner@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.2.0.tgz#281b255d88a473aebc0b5cb46e58a83a1251cab3" + integrity sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww== dependencies: - "@jest/console" "^27.1.0" - "@jest/environment" "^27.1.0" - "@jest/test-result" "^27.1.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/console" "^27.2.0" + "@jest/environment" "^27.2.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" graceful-fs "^4.2.4" jest-docblock "^27.0.6" - jest-environment-jsdom "^27.1.0" - jest-environment-node "^27.1.0" - jest-haste-map "^27.1.0" - jest-leak-detector "^27.1.0" - jest-message-util "^27.1.0" - jest-resolve "^27.1.0" - jest-runtime "^27.1.0" - jest-util "^27.1.0" - jest-worker "^27.1.0" + jest-environment-jsdom "^27.2.0" + jest-environment-node "^27.2.0" + jest-haste-map "^27.2.0" + jest-leak-detector "^27.2.0" + jest-message-util "^27.2.0" + jest-resolve "^27.2.0" + jest-runtime "^27.2.0" + jest-util "^27.2.0" + jest-worker "^27.2.0" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.1.0.tgz#1a98d984ffebc16a0b4f9eaad8ab47c00a750cf5" - integrity sha512-okiR2cpGjY0RkWmUGGado6ETpFOi9oG3yV0CioYdoktkVxy5Hv0WRLWnJFuArSYS8cHMCNcceUUMGiIfgxCO9A== +jest-runtime@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.2.0.tgz#998295ccd80008b3031eeb5cc60e801e8551024b" + integrity sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ== dependencies: - "@jest/console" "^27.1.0" - "@jest/environment" "^27.1.0" - "@jest/fake-timers" "^27.1.0" - "@jest/globals" "^27.1.0" + "@jest/console" "^27.2.0" + "@jest/environment" "^27.2.0" + "@jest/fake-timers" "^27.2.0" + "@jest/globals" "^27.2.0" "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.1.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/test-result" "^27.2.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" @@ -5837,14 +5954,14 @@ jest-runtime@^27.1.0: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.1.0" - jest-message-util "^27.1.0" - jest-mock "^27.1.0" + jest-haste-map "^27.2.0" + jest-message-util "^27.2.0" + jest-mock "^27.1.1" jest-regex-util "^27.0.6" - jest-resolve "^27.1.0" - jest-snapshot "^27.1.0" - jest-util "^27.1.0" - jest-validate "^27.1.0" + jest-resolve "^27.2.0" + jest-snapshot "^27.2.0" + jest-util "^27.2.0" + jest-validate "^27.2.0" slash "^3.0.0" strip-bom "^4.0.0" yargs "^16.0.3" @@ -5865,10 +5982,10 @@ jest-silent-reporter@0.5.0: chalk "^4.0.0" jest-util "^26.0.0" -jest-snapshot@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.1.0.tgz#2a063ab90064017a7e9302528be7eaea6da12d17" - integrity sha512-eaeUBoEjuuRwmiRI51oTldUsKOohB1F6fPqWKKILuDi/CStxzp2IWekVUXbuHHoz5ik33ioJhshiHpgPFbYgcA== +jest-snapshot@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.2.0.tgz#7961e7107ac666a46fbb23e7bb48ce0b8c6a9285" + integrity sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -5876,23 +5993,23 @@ jest-snapshot@^27.1.0: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/transform" "^27.2.0" + "@jest/types" "^27.1.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.1.0" + expect "^27.2.0" graceful-fs "^4.2.4" - jest-diff "^27.1.0" + jest-diff "^27.2.0" jest-get-type "^27.0.6" - jest-haste-map "^27.1.0" - jest-matcher-utils "^27.1.0" - jest-message-util "^27.1.0" - jest-resolve "^27.1.0" - jest-util "^27.1.0" + jest-haste-map "^27.2.0" + jest-matcher-utils "^27.2.0" + jest-message-util "^27.2.0" + jest-resolve "^27.2.0" + jest-util "^27.2.0" natural-compare "^1.4.0" - pretty-format "^27.1.0" + pretty-format "^27.2.0" semver "^7.3.2" jest-util@^26.0.0: @@ -5907,47 +6024,47 @@ jest-util@^26.0.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.0.0, jest-util@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.1.0.tgz#06a53777a8cb7e4940ca8e20bf9c67dd65d9bd68" - integrity sha512-edSLD2OneYDKC6gZM1yc+wY/877s/fuJNoM1k3sOEpzFyeptSmke3SLnk1dDHk9CgTA+58mnfx3ew3J11Kes/w== +jest-util@^27.0.0, jest-util@^27.1.0, jest-util@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.2.0.tgz#bfccb85cfafae752257319e825a5b8d4ada470dc" + integrity sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" "@types/node" "*" chalk "^4.0.0" graceful-fs "^4.2.4" is-ci "^3.0.0" picomatch "^2.2.3" -jest-validate@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.1.0.tgz#d9e82024c5e3f5cef52a600cfc456793a84c0998" - integrity sha512-QiJ+4XuSuMsfPi9zvdO//IrSRSlG6ybJhOpuqYSsuuaABaNT84h0IoD6vvQhThBOKT+DIKvl5sTM0l6is9+SRA== +jest-validate@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.2.0.tgz#b7535f12d95dd3b4382831f4047384ca098642ab" + integrity sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^27.0.6" leven "^3.1.0" - pretty-format "^27.1.0" + pretty-format "^27.2.0" -jest-watcher@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.1.0.tgz#2511fcddb0e969a400f3d1daa74265f93f13ce93" - integrity sha512-ivaWTrA46aHWdgPDgPypSHiNQjyKnLBpUIHeBaGg11U+pDzZpkffGlcB1l1a014phmG0mHgkOHtOgiqJQM6yKQ== +jest-watcher@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.2.0.tgz#dc2eef4c13c6d41cebf3f1fc5f900a54b51c2ea0" + integrity sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg== dependencies: - "@jest/test-result" "^27.1.0" - "@jest/types" "^27.1.0" + "@jest/test-result" "^27.2.0" + "@jest/types" "^27.1.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.1.0" + jest-util "^27.2.0" string-length "^4.0.1" -jest-worker@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.1.0.tgz#65f4a88e37148ed984ba8ca8492d6b376938c0aa" - integrity sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg== +jest-worker@^27.1.0, jest-worker@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.2.0.tgz#11eef39f1c88f41384ca235c2f48fe50bc229bc0" + integrity sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -6874,9 +6991,9 @@ moo@0.5.1: integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== mri@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" - integrity sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ== + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== ms@*, ms@^2.0.0, ms@^2.1.1: version "2.1.3" @@ -6993,9 +7110,9 @@ node-emoji@^1.10.0: lodash "^4.17.21" node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + version "2.6.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.2.tgz#986996818b73785e47b1965cc34eb093a1d464d0" + integrity sha512-aLoxToI6RfZ+0NOjmWAgn9+LEd30YCkJKFSyWacNZdEKTit/ZMcKjGkTRo8uWEsnIb/hfKecNPEbln02PdWbcA== node-gyp@*, node-gyp@^8.0.0: version "8.2.0" @@ -7111,7 +7228,7 @@ npm-bundled@^1.1.1: dependencies: npm-normalize-package-bin "^1.0.1" -npm-install-checks@^4.0.0: +npm-install-checks@*, npm-install-checks@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== @@ -7199,9 +7316,9 @@ npm-user-validate@*: integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== npm@^7.0.0: - version "7.22.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-7.22.0.tgz#11db1860c68c569eb2e3f4d4e97934b005b585bc" - integrity sha512-HJnjTCrGGnacPMCSnrxuHGf2H4VdrY7hwTAK1RwByg0K96KIuTR4QNioFW+bnc/pW0uwpk9lLsDf4BeEQhTv2Q== + version "7.23.0" + resolved "https://registry.yarnpkg.com/npm/-/npm-7.23.0.tgz#aeafaafe847fdd7c496d8e4d4bcbb5201aa1930c" + integrity sha512-m7WFTwGfiBX+jL4ObX7rIDkug/hG/Jn8vZUjKw4WS8CqMjVydHiWTARLDIll7LtHu5i7ZHBnqXZbL2S73U5p6A== dependencies: "@npmcli/arborist" "*" "@npmcli/ci-detect" "*" @@ -7247,6 +7364,7 @@ npm@^7.0.0: node-gyp "*" nopt "*" npm-audit-report "*" + npm-install-checks "*" npm-package-arg "*" npm-pick-manifest "*" npm-profile "*" @@ -7820,12 +7938,12 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -pretty-format@^27.0.0, pretty-format@^27.1.0: - version "27.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.1.0.tgz#022f3fdb19121e0a2612f3cff8d724431461b9ca" - integrity sha512-4aGaud3w3rxAO6OXmK3fwBFQ0bctIOG3/if+jYEFGNGIs0EvuidQm3bZ9mlP2/t9epLNC/12czabfy7TZNSwVA== +pretty-format@^27.0.0, pretty-format@^27.2.0: + version "27.2.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.0.tgz#ee37a94ce2a79765791a8649ae374d468c18ef19" + integrity sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA== dependencies: - "@jest/types" "^27.1.0" + "@jest/types" "^27.1.1" ansi-regex "^5.0.0" ansi-styles "^5.0.0" react-is "^17.0.1" @@ -8034,7 +8152,7 @@ read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@ json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" -read-package-json@*, read-package-json@^4.0.0: +read-package-json@*, read-package-json@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-4.1.1.tgz#153be72fce801578c1c86b8ef2b21188df1b9eea" integrity sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw== @@ -8452,9 +8570,9 @@ semver-diff@^3.1.1: semver "^6.3.0" semver-regex@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.2.tgz#34b4c0d361eef262e07199dbef316d0f2ab11807" - integrity sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.3.tgz#b2bcc6f97f63269f286994e297e229b6245d0dc3" + integrity sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ== semver-stable@3.0.0: version "3.0.0" @@ -8691,9 +8809,9 @@ source-map-resolve@^0.5.0: urix "^0.1.0" source-map-support@^0.5.6: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.20" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9172,9 +9290,9 @@ tmp@^0.2.0: rimraf "^3.0.0" tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" @@ -9257,11 +9375,6 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -trim-off-newlines@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= - trough@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" @@ -9439,9 +9552,9 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== uglify-js@^3.1.4: - version "3.14.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.1.tgz#e2cb9fe34db9cb4cf7e35d1d26dfea28e09a7d06" - integrity sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g== + version "3.14.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.2.tgz#d7dd6a46ca57214f54a2d0a43cad0f35db82ac99" + integrity sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A== unbox-primitive@^1.0.1: version "1.0.1" @@ -9782,9 +9895,9 @@ write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: typedarray-to-buffer "^3.1.5" ws@^7.4.6: - version "7.5.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.4.tgz#56bfa20b167427e138a7795de68d134fe92e21f9" - integrity sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg== + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== www-authenticate@0.6.2: version "0.6.2" From f937f73e6424eac3ce6ab811b72363fc52a27cd9 Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Mon, 13 Sep 2021 13:31:01 +0200 Subject: [PATCH 13/20] feat(manager/terraform/lockfile): support multiple deps during dep update (#11630) Co-authored-by: Michael Kriese --- .../lockfile/__fixtures__/validLockfile2.hcl | 78 ++++++++++++ .../lockfile/__snapshots__/index.spec.ts.snap | 70 ++++++++++ lib/manager/terraform/lockfile/index.spec.ts | 120 +++++++++++------- lib/manager/terraform/lockfile/index.ts | 63 ++++----- lib/manager/terraform/lockfile/util.ts | 3 + lib/manager/types.ts | 1 + 6 files changed, 256 insertions(+), 79 deletions(-) create mode 100644 lib/manager/terraform/lockfile/__fixtures__/validLockfile2.hcl diff --git a/lib/manager/terraform/lockfile/__fixtures__/validLockfile2.hcl b/lib/manager/terraform/lockfile/__fixtures__/validLockfile2.hcl new file mode 100644 index 00000000000000..fb8589a6ee31ee --- /dev/null +++ b/lib/manager/terraform/lockfile/__fixtures__/validLockfile2.hcl @@ -0,0 +1,78 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.0.0" + constraints = "3.0.0" + hashes = [ + "h1:ULKfwySvQ4pDhy027ryRhLxDhg640wsojYc+7NHMFBU=", + "zh:25294510ae9c250502f2e37ac32b01017439735f098f82a1728772427626a2fd", + "zh:3b723e7772d47bd8cc11bea6e5d3e0b5e1df8398c0e7aaf510e3a8a54e0f1874", + "zh:4b7b73b86f4a0705d5d2a7f1d3ad3279706bdb3957a48f4a389c36918fba838e", + "zh:9e26cdc3be97e3001c253c0ca28c5c8ff2d5476373ca1beb849f3f3957ce7f1a", + "zh:9e73cf1304bf57968d3048d70c0b766d41497430a2a9a7a718a196f3a385106a", + "zh:a30b5b66facfbb2b02814e4cd33ca9899f9ade5bbf478f78c41d2fe789f0582a", + "zh:b06fb5da094db41cb5e430c95c988b73f32695e9f90f25499e926842dbd21b21", + "zh:c5a4ff607e9e9edee3fcd6d6666241fb532adf88ea1fe24f2aa1eb36845b3ca3", + "zh:df568a69087831c1780fac4395630a2cfb3cdf67b7dffbfe16bd78c64770bb75", + "zh:fce1b69dd673aace19508640b0b9b7eb1ef7e746d76cb846b49e7d52e0f5fb7e", + ] +} + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "2.50.0" + constraints = "~> 2.50" + hashes = [ + "h1:Vr6WUm88s9hXGkyVjHtHsP2Jmc2ypQXn6ww7dXtvk1M=", + "zh:0c0688d5a743248f8646d39eb3645a4ac19fd7523ba1b47072fa3fb03b92b1b0", + "zh:2beb3a55ee970f87a9292ae96d57134be8a03d0566117e7be0fe0d9c1267e4ea", + "zh:38091b463fbafe5756420ce34c87845c2a391fec0cded27bdcbbca28febad382", + "zh:4ba455da3b37ba8f8b03ff2781121d9c54d0bd8afd76dfe67593011c475dd73f", + "zh:5d32b9ed871b3c3b774dc69f1fe14cdf7c1fd63d12bb5f21aad4bfbf75e5ee3d", + "zh:6c80cf90a3fc1e17d9caf67cc558c2ff91f8b25e29fdf00942f67711895be5c0", + "zh:c0a53e3165407999d10de7aaa983485d42797433c60b5775791ae299121279ed", + "zh:dab51d6d76041505aeebf20111febe8616ec465ca31dfb7901f5f5c23a5af095", + "zh:e1ad6399f6a6d799002206ee4cb7b794dbb2533b8c3c14502a4419955ec96bff", + "zh:e98f1d178d1e111b3f3449e27d305ce263071226fad3d86272e1bd161c26fd43", + "zh:eb76ec000c9c49a0bf730370c8880f671597bc01f7b7401ab301df7124c049ec", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "2.2.1" + constraints = "~> 2.2" + hashes = [ + "h1:Zg1Bpi6vr7b0H6no8kVDfEucn5pvNALivdrVKVHarGs=", + "zh:072ce92b0138ee65df2e4e2e6e5f6632fa12a7e6453b91399bad89291855d426", + "zh:5731987fe61051515f449033e456ee55207caf17ef41096eb82247810585f53b", + "zh:6f18b10175708bb5839e1f2082dcc02651b876786cd54ec415a091f3821807c3", + "zh:7fa7737661380d18cba3cdc71c4ec6f2fd281b9d61112f6b48d06ca8bbf97771", + "zh:8466cb8fbb4de887b23039082a6e3dc85aeabce86dd808e2a7a65e4e1c51dbae", + "zh:888c63417701c13bbe785ab11dc690d4803e6a2156318cf188970b7b6400b99e", + "zh:a231df55d36fbad1a6705f5d3be4f7459a73ec76117d13f22aa83c10fc610278", + "zh:b62d9a4cd64a2d229070260f4abfef476ebbd7c5511b43e9cdccf23ce938f630", + "zh:b6bd1a325f909bb93f7c9bef00eb306bef1e406cbdf557901d755a3e7a4a5448", + "zh:b9f59afc23cc5567075f76313214baa1e5ce909325229e23c9a4666f7b26e7f7", + "zh:d040220c09b8d9d6bd937572bd5b14bc069af2b883185a873460530d8a1de6e6", + "zh:f254c1f943eb016ae07ebe91b23f813dc79f2064616c65f98c8f64ce23be90c4", + ] +} + +provider "registry.terraform.io/telmate/proxmox" { + version = "2.6.1" + constraints = "~> 2.6.1" + hashes = [ + "h1:eAFb62Hxq4BcKMZXUus2G32/sl0DmLhcBAj6IJeMNo4=", + "zh:0837e6a52120caa538330278c13086f7a7d8c15be2000afdf73fcb2f0d30daa1", + "zh:2964c02fd3eeff4f19aead79c91087e7375eca1bb582036ea1105cd4d5949e2f", + "zh:4540f5fd9db1d2d07466e00a09b610d64ac86ff72ba6f7cbfa8161b07e5c9d04", + "zh:660d6b9b931cc0a2dc8c3c47058448d5cdfcccc38f371441c23e8e5de1a77ba8", + "zh:6e01766d94883a77c1883a71784d6cdc1f04f862fa8087043ce06a4b9d8c9ea6", + "zh:80d8fb293008b9d226996acd158b1a69208b67df15cc15b23a5a24957356400d", + "zh:8cd7def49251517bf65dd8a345ae047dc4dd2e1e6178e4c20e4d473f507b3004", + "zh:a51bd83d57fe718bb5b86d8c464dcd152558ea7bc04bdeb6202690722e5288b5", + "zh:a70f60a5ce57a40857226d8728684bc6a752e1a0003fac0e5cbc87428a87364a", + "zh:b7b27e276c0bb79acb262564db151988d676c96d6384debdf4b7c21bd0967cea", + "zh:c215f5f6a4a34238307294f4900c12c704f99e0e69e9d2a265d40f92b6ccb759", + ] +} diff --git a/lib/manager/terraform/lockfile/__snapshots__/index.spec.ts.snap b/lib/manager/terraform/lockfile/__snapshots__/index.spec.ts.snap index 182047b7165274..ad42a772025324 100644 --- a/lib/manager/terraform/lockfile/__snapshots__/index.spec.ts.snap +++ b/lib/manager/terraform/lockfile/__snapshots__/index.spec.ts.snap @@ -137,6 +137,76 @@ Array [ ] `; +exports[`manager/terraform/lockfile/index update multiple dependencies which are not ordered 1`] = ` +Object { + "contents": "# This file is maintained automatically by \\"terraform init\\". +# Manual edits may be lost in future updates. + +provider \\"registry.terraform.io/hashicorp/aws\\" { + version = \\"3.1.0\\" + constraints = \\"~> 3.0\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/azurerm\\" { + version = \\"2.56.0\\" + constraints = \\"~> 2.50\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} + +provider \\"registry.terraform.io/hashicorp/random\\" { + version = \\"3.1.0\\" + constraints = \\"~> 3.0\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} + +provider \\"registry.terraform.io/telmate/proxmox\\" { + version = \\"2.7.0\\" + constraints = \\"~> 2.7.0\\" + hashes = [ + \\"h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=\\", + \\"h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=\\", + ] +} +", + "name": "test/.terraform.lock.hcl", +} +`; + +exports[`manager/terraform/lockfile/index update multiple dependencies which are not ordered 2`] = ` +Array [ + Array [ + "https://registry.terraform.io", + "hashicorp/aws", + "3.1.0", + ], + Array [ + "https://registry.terraform.io", + "hashicorp/random", + "3.1.0", + ], + Array [ + "https://registry.terraform.io", + "hashicorp/azurerm", + "2.56.0", + ], + Array [ + "https://registry.terraform.io", + "telmate/proxmox", + "2.7.0", + ], +] +`; + exports[`manager/terraform/lockfile/index update single dependency in subfolder 1`] = ` Object { "contents": "# This file is maintained automatically by \\"terraform init\\". diff --git a/lib/manager/terraform/lockfile/index.spec.ts b/lib/manager/terraform/lockfile/index.spec.ts index 731d287b5aef07..2964b081bd0fce 100644 --- a/lib/manager/terraform/lockfile/index.spec.ts +++ b/lib/manager/terraform/lockfile/index.spec.ts @@ -22,6 +22,7 @@ const adminConfig = { }; const validLockfile = loadFixture('validLockfile.hcl'); +const validLockfile2 = loadFixture('validLockfile2.hcl'); const mockHash = mocked(TerraformProviderHash).createHashes; const mockGetPkgReleases = getPkgReleases as jest.MockedFunction< @@ -70,13 +71,6 @@ describe('manager/terraform/lockfile/index', () => { 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', ]); - const localConfig: UpdateArtifactsConfig = { - updateType: 'minor', - newVersion: '3.36.0', - newValue: '3.36.0', - ...config, - }; - const result = await updateArtifacts({ packageFileName: 'main.tf', updatedDeps: [ @@ -84,10 +78,12 @@ describe('manager/terraform/lockfile/index', () => { depName: 'hashicorp/aws', lookupName: 'hashicorp/aws', depType: 'provider', + newVersion: '3.36.0', + newValue: '3.36.0', }, ], newPackageFileContent: '', - config: localConfig, + config, }); expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); @@ -107,13 +103,6 @@ describe('manager/terraform/lockfile/index', () => { 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', ]); - const localConfig: UpdateArtifactsConfig = { - updateType: 'minor', - newVersion: '3.36.0', - newValue: '3.36.0', - ...config, - }; - const result = await updateArtifacts({ packageFileName: 'main.tf', updatedDeps: [ @@ -121,10 +110,12 @@ describe('manager/terraform/lockfile/index', () => { depName: 'hashicorp/aws', lookupName: 'hashicorp/aws', depType: 'required_provider', + newVersion: '3.36.0', + newValue: '3.36.0', }, ], newPackageFileContent: '', - config: localConfig, + config, }); expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); @@ -136,13 +127,6 @@ describe('manager/terraform/lockfile/index', () => { }); it('do not update dependency with depType module', async () => { - const localConfig: UpdateArtifactsConfig = { - updateType: 'minor', - newVersion: '3.36.0', - newValue: '3.36.0', - ...config, - }; - const result = await updateArtifacts({ packageFileName: 'main.tf', updatedDeps: [ @@ -150,10 +134,12 @@ describe('manager/terraform/lockfile/index', () => { depName: 'terraform-aws-modules/vpc/aws', lookupName: 'terraform-aws-modules/vpc/aws', depType: 'module', + newVersion: '3.36.0', + newValue: '3.36.0', }, ], newPackageFileContent: '', - config: localConfig, + config, }); expect(result).toBeNull(); }); @@ -167,13 +153,6 @@ describe('manager/terraform/lockfile/index', () => { 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', ]); - const localConfig: UpdateArtifactsConfig = { - updateType: 'minor', - newVersion: '2.56.0', - newValue: '~> 2.50', - ...config, - }; - const result = await updateArtifacts({ packageFileName: 'main.tf', updatedDeps: [ @@ -182,10 +161,12 @@ describe('manager/terraform/lockfile/index', () => { depType: 'provider', lookupName: 'azurerm', registryUrls: ['https://registry.example.com'], + newVersion: '2.56.0', + newValue: '~> 2.50', }, ], newPackageFileContent: '', - config: localConfig, + config, }); expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); @@ -205,13 +186,6 @@ describe('manager/terraform/lockfile/index', () => { 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', ]); - const localConfig: UpdateArtifactsConfig = { - updateType: 'major', - newVersion: '3.1.0', - newValue: '~> 3.0', - ...config, - }; - const result = await updateArtifacts({ packageFileName: 'main.tf', updatedDeps: [ @@ -219,10 +193,12 @@ describe('manager/terraform/lockfile/index', () => { depName: 'random', lookupName: 'hashicorp/random', depType: 'provider', + newVersion: '3.1.0', + newValue: '~> 3.0', }, ], newPackageFileContent: '', - config: localConfig, + config, }); expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); @@ -242,13 +218,6 @@ describe('manager/terraform/lockfile/index', () => { 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', ]); - const localConfig: UpdateArtifactsConfig = { - updateType: 'major', - newVersion: '3.1.0', - newValue: '~> 3.0', - ...config, - }; - const result = await updateArtifacts({ packageFileName: 'test/main.tf', updatedDeps: [ @@ -256,10 +225,12 @@ describe('manager/terraform/lockfile/index', () => { depName: 'random', lookupName: 'hashicorp/random', depType: 'provider', + newVersion: '3.1.0', + newValue: '~> 3.0', }, ], newPackageFileContent: '', - config: localConfig, + config, }); expect(result).not.toBeNull(); expect(result).toBeArrayOfSize(1); @@ -270,6 +241,59 @@ describe('manager/terraform/lockfile/index', () => { expect(mockHash.mock.calls).toMatchSnapshot(); }); + it('update multiple dependencies which are not ordered', async () => { + fs.readLocalFile.mockResolvedValue(validLockfile2 as any); + fs.getSiblingFileName.mockReturnValue('test/.terraform.lock.hcl'); + + mockHash.mockResolvedValue([ + 'h1:lDsKRxDRXPEzA4AxkK4t+lJd3IQIP2UoaplJGjQSp2s=', + 'h1:6zB2hX7YIOW26OrKsLJn0uLMnjqbPNxcz9RhlWEuuSY=', + ]); + + const result = await updateArtifacts({ + packageFileName: 'test/main.tf', + updatedDeps: [ + { + depName: 'aws', + lookupName: 'hashicorp/aws', + depType: 'provider', + newVersion: '3.1.0', + newValue: '~> 3.0', + }, + { + depName: 'random', + lookupName: 'hashicorp/random', + depType: 'provider', + newVersion: '3.1.0', + newValue: '~> 3.0', + }, + { + depName: 'azurerm', + lookupName: 'hashicorp/azurerm', + depType: 'provider', + newVersion: '2.56.0', + newValue: '~> 2.50', + }, + { + depName: 'proxmox', + lookupName: 'Telmate/proxmox', + depType: 'provider', + newVersion: '2.7.0', + newValue: '~> 2.7.0', + }, + ], + newPackageFileContent: '', + config, + }); + expect(result).not.toBeNull(); + expect(result).toBeArrayOfSize(1); + expect(result[0].file).not.toBeNull(); + expect(result[0].file).toMatchSnapshot(); + + expect(mockHash.mock.calls).toBeArrayOfSize(4); + expect(mockHash.mock.calls).toMatchSnapshot(); + }); + it('do full lock file maintenance', async () => { fs.readLocalFile.mockResolvedValueOnce(validLockfile as any); fs.getSiblingFileName.mockReturnValueOnce('.terraform.lock.hcl'); diff --git a/lib/manager/terraform/lockfile/index.ts b/lib/manager/terraform/lockfile/index.ts index 1171d4d4dd1c37..6322f3e6fedc05 100644 --- a/lib/manager/terraform/lockfile/index.ts +++ b/lib/manager/terraform/lockfile/index.ts @@ -80,40 +80,41 @@ export async function updateArtifacts({ // update all locks in the file during maintenance --> only update version in constraints const maintenanceUpdates = await updateAllLocks(locks); updates.push(...maintenanceUpdates); - } else if ( - ['provider', 'required_provider'].includes(updatedDeps[0].depType) - ) { - // update only specific locks but with constrain updates - const dep = updatedDeps[0]; - - const lookupName = dep.lookupName ?? dep.depName; + } else { + const providerDeps = updatedDeps.filter((dep) => + ['provider', 'required_provider'].includes(dep.depType) + ); + for (const dep of providerDeps) { + const lookupName = dep.lookupName ?? dep.depName; - // handle cases like `Telmate/proxmox` - const massagedLookupName = lookupName.toLowerCase(); + // handle cases like `Telmate/proxmox` + const massagedLookupName = lookupName.toLowerCase(); - const repository = massagedLookupName.includes('/') - ? massagedLookupName - : `hashicorp/${massagedLookupName}`; - const registryUrl = dep.registryUrls - ? dep.registryUrls[0] - : TerraformProviderDatasource.defaultRegistryUrls[0]; - const newConstraint = isPinnedVersion(config.newValue) - ? config.newVersion - : config.newValue; - const updateLock = locks.find((value) => value.lookupName === repository); - const update: ProviderLockUpdate = { - newVersion: config.newVersion, - newConstraint, - newHashes: await TerraformProviderHash.createHashes( - registryUrl, - repository, - config.newVersion - ), - ...updateLock, - }; - updates.push(update); + const repository = massagedLookupName.includes('/') + ? massagedLookupName + : `hashicorp/${massagedLookupName}`; + const registryUrl = dep.registryUrls + ? dep.registryUrls[0] + : TerraformProviderDatasource.defaultRegistryUrls[0]; + const newConstraint = isPinnedVersion(dep.newValue) + ? dep.newVersion + : dep.newValue; + const updateLock = locks.find( + (value) => value.lookupName === repository + ); + const update: ProviderLockUpdate = { + newVersion: dep.newVersion, + newConstraint, + newHashes: await TerraformProviderHash.createHashes( + registryUrl, + repository, + dep.newVersion + ), + ...updateLock, + }; + updates.push(update); + } } - // if no updates have been found or there are failed hashes abort if ( updates.length === 0 || diff --git a/lib/manager/terraform/lockfile/util.ts b/lib/manager/terraform/lockfile/util.ts index 47039cf6969c7d..d8282800fa959c 100644 --- a/lib/manager/terraform/lockfile/util.ts +++ b/lib/manager/terraform/lockfile/util.ts @@ -133,6 +133,9 @@ export function writeLockUpdates( const lines = oldLockFileContent.split('\n'); const sections: string[][] = []; + + // sort updates in order of appearance in the lockfile + updates.sort((a, b) => a.lineNumbers.block.start - b.lineNumbers.block.start); updates.forEach((update, index, array) => { // re add leading whitespace let startWhitespace; diff --git a/lib/manager/types.ts b/lib/manager/types.ts index 657a8d853017a3..69358a103eb96a 100644 --- a/lib/manager/types.ts +++ b/lib/manager/types.ts @@ -136,6 +136,7 @@ export interface LookupUpdate { } export interface PackageDependency> extends Package { + newValue?: string; warnings?: ValidationMessage[]; commitMessageTopic?: string; currentDigestShort?: string; From e108537964a1ec1b1b981248074feb879861bb2c Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 13 Sep 2021 15:27:01 +0200 Subject: [PATCH 14/20] fix(config): migrate empty array check (#11713) --- lib/config/migration.spec.ts | 11 +++++++++++ lib/config/migration.ts | 18 ++++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts index 5073963864aa03..462124b8e28b83 100644 --- a/lib/config/migration.spec.ts +++ b/lib/config/migration.spec.ts @@ -772,4 +772,15 @@ describe('config/migration', () => { expect(isMigrated).toBe(true); expect(migratedConfig).toMatchSnapshot(); }); + it('migrates empty requiredStatusChecks', () => { + const config: RenovateConfig = { + requiredStatusChecks: [], + }; + const { isMigrated, migratedConfig } = configMigration.migrateConfig( + config, + defaultConfig + ); + expect(isMigrated).toBe(true); + expect(migratedConfig).toMatchInlineSnapshot(`Object {}`); + }); }); diff --git a/lib/config/migration.ts b/lib/config/migration.ts index 13497ff59cbd13..1fb49fc3a3caa3 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -490,16 +490,18 @@ export function migrateConfig( delete migratedConfig.node; } } else if (is.array(val)) { - const newArray = []; - for (const item of migratedConfig[key] as unknown[]) { - if (is.object(item) && !is.array(item)) { - const arrMigrate = migrateConfig(item as RenovateConfig, key); - newArray.push(arrMigrate.migratedConfig); - } else { - newArray.push(item); + if (is.array(migratedConfig?.[key])) { + const newArray = []; + for (const item of migratedConfig[key] as unknown[]) { + if (is.object(item) && !is.array(item)) { + const arrMigrate = migrateConfig(item as RenovateConfig, key); + newArray.push(arrMigrate.migratedConfig); + } else { + newArray.push(item); + } } + migratedConfig[key] = newArray; } - migratedConfig[key] = newArray; } else if (key === 'compatibility' && is.object(val)) { migratedConfig.constraints = migratedConfig.compatibility; delete migratedConfig.compatibility; From d2bb86f3416c7ab1d0a187fce76321c7b06c606b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 16:16:45 +0000 Subject: [PATCH 15/20] build(deps): update dependency git-url-parse to v11.6.0 (#11711) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 989b2a0dff12ce..8bb8b24c4e0bfc 100644 --- a/package.json +++ b/package.json @@ -150,7 +150,7 @@ "fast-safe-stringify": "2.0.8", "find-up": "5.0.0", "fs-extra": "10.0.0", - "git-url-parse": "11.5.0", + "git-url-parse": "11.6.0", "github-url-from-git": "1.5.0", "global-agent": "2.2.0", "got": "11.8.2", diff --git a/yarn.lock b/yarn.lock index e4a594c59504ba..1b1292bfa00d65 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4686,10 +4686,10 @@ git-up@^4.0.0: is-ssh "^1.3.0" parse-url "^6.0.0" -git-url-parse@11.5.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.5.0.tgz#acaaf65239cb1536185b19165a24bbc754b3f764" - integrity sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA== +git-url-parse@11.6.0: + version "11.6.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" + integrity sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g== dependencies: git-up "^4.0.0" From 49ab0c8929427ca4e41d94180207d6a2f424da12 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 17:49:20 +0000 Subject: [PATCH 16/20] chore(deps): update codecov/codecov-action action to v2.1.0 (#11714) Co-authored-by: Renovate Bot --- .github/workflows/build-pr.yml | 2 +- .github/workflows/build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 980b7fc97c05e7..299350a8755aac 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -54,7 +54,7 @@ jobs: run: yarn jest --maxWorkers=2 --ci - name: Codecov - uses: codecov/codecov-action@5a8bb4701eca7ba3673f21664b887f652c58d0a3 # renovate: tag=v2.0.3 + uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # renovate: tag=v2.1.0 if: always() # build after tests to exclude files diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56e1549952fbc5..303eb15be19c6a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -87,7 +87,7 @@ jobs: run: yarn jest --maxWorkers=2 --ci --coverage ${{ env.coverage }} - name: Codecov - uses: codecov/codecov-action@5a8bb4701eca7ba3673f21664b887f652c58d0a3 # renovate: tag=v2.0.3 + uses: codecov/codecov-action@f32b3a3741e1053eb607407145bc9619351dc93b # renovate: tag=v2.1.0 if: always() && env.coverage == 'true' # build after tests to exclude build files from tests From 0decf99b9d39e9a70e0bbe289abdd1fbb8f48b0c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Sep 2021 19:02:43 +0000 Subject: [PATCH 17/20] chore(deps): update linters to v4.31.0 (#11719) Co-authored-by: Renovate Bot --- package.json | 4 +-- yarn.lock | 72 ++++++---------------------------------------------- 2 files changed, 10 insertions(+), 66 deletions(-) diff --git a/package.json b/package.json index 8bb8b24c4e0bfc..6db218d464f081 100644 --- a/package.json +++ b/package.json @@ -235,8 +235,8 @@ "@types/traverse": "0.6.32", "@types/url-join": "4.0.1", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "4.30.0", - "@typescript-eslint/parser": "4.30.0", + "@typescript-eslint/eslint-plugin": "4.31.0", + "@typescript-eslint/parser": "4.31.0", "conventional-changelog-conventionalcommits": "4.6.0", "cross-env": "7.0.3", "emojibase-data": "6.2.0", diff --git a/yarn.lock b/yarn.lock index 1b1292bfa00d65..fd87cc4e229b01 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2120,32 +2120,20 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz#4a0c1ae96b953f4e67435e20248d812bfa55e4fb" - integrity sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g== +"@typescript-eslint/eslint-plugin@4.31.0": + version "4.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.0.tgz#9c3fa6f44bad789a962426ad951b54695bd3af6b" + integrity sha512-iPKZTZNavAlOhfF4gymiSuUkgLne/nh5Oz2/mdiUmuZVD42m9PapnCnzjxuDsnpnbH3wT5s2D8bw6S39TC6GNw== dependencies: - "@typescript-eslint/experimental-utils" "4.30.0" - "@typescript-eslint/scope-manager" "4.30.0" + "@typescript-eslint/experimental-utils" "4.31.0" + "@typescript-eslint/scope-manager" "4.31.0" debug "^4.3.1" functional-red-black-tree "^1.0.1" regexpp "^3.1.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz#9e49704fef568432ae16fc0d6685c13d67db0fd5" - integrity sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.30.0" - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/typescript-estree" "4.30.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/experimental-utils@^4.0.1": +"@typescript-eslint/experimental-utils@4.31.0", "@typescript-eslint/experimental-utils@^4.0.1": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz#0ef1d5d86c334f983a00f310e43c1ce4c14e054d" integrity sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw== @@ -2157,17 +2145,7 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.30.0.tgz#6abd720f66bd790f3e0e80c3be77180c8fcb192d" - integrity sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg== - dependencies: - "@typescript-eslint/scope-manager" "4.30.0" - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/typescript-estree" "4.30.0" - debug "^4.3.1" - -"@typescript-eslint/parser@^4.4.1": +"@typescript-eslint/parser@4.31.0", "@typescript-eslint/parser@^4.4.1": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" integrity sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w== @@ -2177,14 +2155,6 @@ "@typescript-eslint/typescript-estree" "4.31.0" debug "^4.3.1" -"@typescript-eslint/scope-manager@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz#1a3ffbb385b1a06be85cd5165a22324f069a85ee" - integrity sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A== - dependencies: - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/visitor-keys" "4.30.0" - "@typescript-eslint/scope-manager@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" @@ -2193,29 +2163,11 @@ "@typescript-eslint/types" "4.31.0" "@typescript-eslint/visitor-keys" "4.31.0" -"@typescript-eslint/types@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.30.0.tgz#fb9d9b0358426f18687fba82eb0b0f869780204f" - integrity sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw== - "@typescript-eslint/types@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== -"@typescript-eslint/typescript-estree@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz#ae57833da72a753f4846cd3053758c771670c2ac" - integrity sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg== - dependencies: - "@typescript-eslint/types" "4.30.0" - "@typescript-eslint/visitor-keys" "4.30.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" @@ -2229,14 +2181,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.30.0": - version "4.30.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz#a47c6272fc71b0c627d1691f68eaecf4ad71445e" - integrity sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw== - dependencies: - "@typescript-eslint/types" "4.30.0" - eslint-visitor-keys "^2.0.0" - "@typescript-eslint/visitor-keys@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" From 2d99e767b70f9890c1e2346aab140fd1c2eda80b Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 14 Sep 2021 09:36:03 +0200 Subject: [PATCH 18/20] fix(platform): put typed platform rule first (#11722) --- lib/platform/index.spec.ts | 2 +- lib/platform/index.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/platform/index.spec.ts b/lib/platform/index.spec.ts index 790180605afb67..ef366e3a2bc436 100644 --- a/lib/platform/index.spec.ts +++ b/lib/platform/index.spec.ts @@ -61,12 +61,12 @@ describe('platform/index', () => { gitAuthor: 'user@domain.com', hostRules: [ { + hostType: 'bitbucket', matchHost: 'api.bitbucket.org', password: '123', username: 'abc', }, { - hostType: 'bitbucket', matchHost: 'api.bitbucket.org', password: '123', username: 'abc', diff --git a/lib/platform/index.ts b/lib/platform/index.ts index c99763c5279f90..f86e7382c2da43 100644 --- a/lib/platform/index.ts +++ b/lib/platform/index.ts @@ -65,13 +65,13 @@ export async function initPlatform(config: AllConfig): Promise { } }); returnConfig.hostRules = returnConfig.hostRules || []; - returnConfig.hostRules.push(platformRule); - hostRules.add(platformRule); const typedPlatformRule = { ...platformRule, hostType: returnConfig.platform, }; returnConfig.hostRules.push(typedPlatformRule); hostRules.add(typedPlatformRule); + returnConfig.hostRules.push(platformRule); + hostRules.add(platformRule); return returnConfig; } From 5ac93683228b45c59612508381badfa5d274cadc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 09:04:44 +0000 Subject: [PATCH 19/20] chore(deps): update dependency @types/node to v14.17.15 (#11726) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 6db218d464f081..902ef299b79ee7 100644 --- a/package.json +++ b/package.json @@ -224,7 +224,7 @@ "@types/markdown-table": "2.0.0", "@types/moo": "0.5.5", "@types/nock": "10.0.3", - "@types/node": "14.17.14", + "@types/node": "14.17.15", "@types/node-emoji": "1.8.1", "@types/parse-link-header": "1.0.0", "@types/registry-auth-token": "4.2.1", diff --git a/yarn.lock b/yarn.lock index fd87cc4e229b01..7b0bcf889a98e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1975,10 +1975,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== -"@types/node@14.17.14": - version "14.17.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.14.tgz#6fda9785b41570eb628bac27be4b602769a3f938" - integrity sha512-rsAj2u8Xkqfc332iXV12SqIsjVi07H479bOP4q94NAcjzmAvapumEhuVIt53koEf7JFrpjgNKjBga5Pnn/GL8A== +"@types/node@14.17.15": + version "14.17.15" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.15.tgz#d5ebfb62a69074ebb85cbe0529ad917bb8f2bae8" + integrity sha512-D1sdW0EcSCmNdLKBGMYb38YsHUS6JcM7yQ6sLQ9KuZ35ck7LYCKE7kYFHOO59ayFOY3zobWVZxf4KXhYHcHYFA== "@types/node@^13.7.0": version "13.13.52" From 45d1aeecc327538f4f42a0faa261e437613938c8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 11:20:31 +0200 Subject: [PATCH 20/20] chore(deps): lock file maintenance (#11728) Co-authored-by: Renovate Bot --- yarn.lock | 106 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 25 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b0bcf889a98e9..3868905ec8db3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1478,17 +1478,17 @@ "@octokit/types" "^6.0.3" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^10.1.4": - version "10.1.4" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-10.1.4.tgz#b66cefc70e83fd413a1307a2b9381aac0e14a76b" - integrity sha512-poafDt5Ac5GV86baVXDdj6xeIMrEVEuRweMwkZfoXwySYWA0eKgrOP/ZaDE7V/hlW32z6oO61Zy/5U2oSZlDWw== +"@octokit/openapi-types@^10.1.5": + version "10.1.5" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-10.1.5.tgz#deafbec805896ae963d7d3846e70b18003cafda1" + integrity sha512-OoShNYzhAU8p8JbGHe1rRs1GIErRtmN2230AQCJAjL5lc0AUU5OhppVe6693HIZ2eCBLUhoLPhnnnmQ5ASH7Wg== "@octokit/plugin-paginate-rest@^2.16.0": - version "2.16.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.1.tgz#699ea5c4d0274626bd7c4b896b4789c21ea3540e" - integrity sha512-53RGhlRNhQVepZq063YCoIssZkAYjIU1kWQi9m7Qjdq/1IiuZOB9iSHdjDQmKtHWDRSqNwbtsX+tlJNhP1DHEQ== + version "2.16.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.16.2.tgz#9ca5bebbaf3e6672b345502f89ae4ef3be6c2ddd" + integrity sha512-WF5/MTPnFgYH6rMGuxBvbxX2S/3ygNWylakgD7njKES0Qwk5e+d/L6r/BYXSw7B6xJJ3hlwIAmUmOxxYrR+Q8A== dependencies: - "@octokit/types" "^6.27.1" + "@octokit/types" "^6.27.2" "@octokit/plugin-request-log@^1.0.4": version "1.0.4" @@ -1496,11 +1496,11 @@ integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== "@octokit/plugin-rest-endpoint-methods@^5.9.0": - version "5.10.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.10.2.tgz#84ae65ae3f40b2d8a25bf7db7c1054a15d9383b6" - integrity sha512-Q1QdPqA1HuKbXBuUnyNEImp948htcxgOVwUFTbUbRUsWSJPhabDe3Imd+C8vZg2czpBkl9uR8zx71WE1CP9TxA== + version "5.10.3" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.10.3.tgz#9207e8e893d980d7828d85950bbb460b187146f2" + integrity sha512-eAT4gje+VR9xdSlhuHWNXsNLpiODqdqz8jqShMgaxRH82Le2nS6EV6LAo3QPZ05Fso5oGmDfJF6eq9vs1cEhdA== dependencies: - "@octokit/types" "^6.27.1" + "@octokit/types" "^6.27.2" deprecation "^2.3.1" "@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": @@ -1534,12 +1534,12 @@ "@octokit/plugin-request-log" "^1.0.4" "@octokit/plugin-rest-endpoint-methods" "^5.9.0" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.27.1": - version "6.27.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.27.1.tgz#88ec25f0cff5fb637c475cf420a0a2e35ba564c7" - integrity sha512-p8VR2OTO1ozxqdAvPeCDDMNmcBzkOL6sPogy2MaEQCapbeWcWNDbwZnqMT3VTZ0DLBBAO0PyHYzU8bA99zd1Fg== +"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.27.2": + version "6.27.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.27.2.tgz#b6f88d002aa06104f46ccaec0aaa8a5de1bf262c" + integrity sha512-AgajmAJh7LhStgaEaNoY1N7znst2q07CKZVdnVB/V4tmitMbk+qijmD0IkkSKulXE5RVLbJjQikJF9+XLqhsVA== dependencies: - "@octokit/openapi-types" "^10.1.4" + "@octokit/openapi-types" "^10.1.5" "@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.3": version "0.0.1" @@ -1653,9 +1653,9 @@ integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== "@sindresorhus/is@^4.0.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.1.0.tgz#3853c0c48b47f0ebcdd3cd9a66fdd0d277173e78" - integrity sha512-Cgva8HxclecUCmAImsWsbZGUh6p5DSzQ8l2Uzxuj9ANiD7LVhLM1UJ2hX/R2Y+ILpvqgW9QjmTCaBkXtj8+UOg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" + integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw== "@sinonjs/commons@^1.7.0": version "1.8.3" @@ -2133,7 +2133,7 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.31.0", "@typescript-eslint/experimental-utils@^4.0.1": +"@typescript-eslint/experimental-utils@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.0.tgz#0ef1d5d86c334f983a00f310e43c1ce4c14e054d" integrity sha512-Hld+EQiKLMppgKKkdUsLeVIeEOrwKc2G983NmznY/r5/ZtZCDvIOXnXtwqJIgYz/ymsy7n7RGvMyrzf1WaSQrw== @@ -2145,7 +2145,19 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@4.31.0", "@typescript-eslint/parser@^4.4.1": +"@typescript-eslint/experimental-utils@^4.0.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz#0c900f832f270b88e13e51753647b02d08371ce5" + integrity sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.31.1" + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/typescript-estree" "4.31.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.0.tgz#87b7cd16b24b9170c77595d8b1363f8047121e05" integrity sha512-oWbzvPh5amMuTmKaf1wp0ySxPt2ZXHnFQBN2Szu1O//7LmOvgaKTCIDNLK2NvzpmVd5A2M/1j/rujBqO37hj3w== @@ -2155,6 +2167,16 @@ "@typescript-eslint/typescript-estree" "4.31.0" debug "^4.3.1" +"@typescript-eslint/parser@^4.4.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.1.tgz#8f9a2672033e6f6d33b1c0260eebdc0ddf539064" + integrity sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ== + dependencies: + "@typescript-eslint/scope-manager" "4.31.1" + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/typescript-estree" "4.31.1" + debug "^4.3.1" + "@typescript-eslint/scope-manager@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.0.tgz#9be33aed4e9901db753803ba233b70d79a87fc3e" @@ -2163,11 +2185,24 @@ "@typescript-eslint/types" "4.31.0" "@typescript-eslint/visitor-keys" "4.31.0" +"@typescript-eslint/scope-manager@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz#0c21e8501f608d6a25c842fcf59541ef4f1ab561" + integrity sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ== + dependencies: + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/visitor-keys" "4.31.1" + "@typescript-eslint/types@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.0.tgz#9a7c86fcc1620189567dc4e46cad7efa07ee8dce" integrity sha512-9XR5q9mk7DCXgXLS7REIVs+BaAswfdHhx91XqlJklmqWpTALGjygWVIb/UnLh4NWhfwhR5wNe1yTyCInxVhLqQ== +"@typescript-eslint/types@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.1.tgz#5f255b695627a13401d2fdba5f7138bc79450d66" + integrity sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ== + "@typescript-eslint/typescript-estree@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.0.tgz#4da4cb6274a7ef3b21d53f9e7147cc76f278a078" @@ -2181,6 +2216,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz#4a04d5232cf1031232b7124a9c0310b577a62d17" + integrity sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg== + dependencies: + "@typescript-eslint/types" "4.31.1" + "@typescript-eslint/visitor-keys" "4.31.1" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.31.0": version "4.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.0.tgz#4e87b7761cb4e0e627dc2047021aa693fc76ea2b" @@ -2189,6 +2237,14 @@ "@typescript-eslint/types" "4.31.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.31.1": + version "4.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz#f2e7a14c7f20c4ae07d7fc3c5878c4441a1da9cc" + integrity sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ== + dependencies: + "@typescript-eslint/types" "4.31.1" + eslint-visitor-keys "^2.0.0" + "@yarnpkg/core@2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-2.4.0.tgz#b5d8cc7ee2ddb022816c7afa3f83c3ee3d317c80" @@ -3769,9 +3825,9 @@ ecc-jsbn@~0.1.1: safer-buffer "^2.1.0" electron-to-chromium@^1.3.830: - version "1.3.836" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz#823cb9c98f28c64c673920f1c90ea3826596eaf9" - integrity sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg== + version "1.3.838" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.838.tgz#d178b34a268c750c0444ba69e4c94d4c4fb3aa0d" + integrity sha512-65O6UJiyohFAdX/nc6KJ0xG/4zOn7XCO03kQNNbCeMRGxlWTLzc6Uyi0tFNQuuGWqySZJi8CD2KXPXySVYmzMA== email-addresses@5.0.0: version "5.0.0"