diff --git a/.eslintrc.js b/.eslintrc.js index 20d43c8b5fac46a54e15cfb0aa11d32140f502e2..00db94b2f096dab80f04cbab8d9957426d4a3b0a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -111,7 +111,7 @@ module.exports = { }, overrides: [ { - files: ['**/*.spec.ts'], + files: ['**/*.spec.ts', 'test/**'], env: { jest: true, }, @@ -125,6 +125,8 @@ module.exports = { '@typescript-eslint/no-object-literal-type-assertion': 0, '@typescript-eslint/explicit-function-return-type': 0, '@typescript-eslint/unbound-method': 0, + + 'jest/valid-title': [0, { ignoreTypeOfDescribeName: true }], }, }, { diff --git a/lib/config/__snapshots__/migration.spec.ts.snap b/lib/config/__snapshots__/migration.spec.ts.snap index e7467aa783e7aaf9a7e20ac560bd81ef7cf16cbf..0f201826dcdc541eb2d8ce50fba0866b088c92a6 100644 --- a/lib/config/__snapshots__/migration.spec.ts.snap +++ b/lib/config/__snapshots__/migration.spec.ts.snap @@ -6,7 +6,31 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it migrates config 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) migrates before and after schedules 1`] = ` +Object { + "major": Object { + "schedule": Array [ + "after 10pm", + "before 7am", + ], + }, + "minor": Object { + "schedule": Array [ + "after 10pm every weekday", + "before 7am every weekday", + ], + }, +} +`; + +exports[`config/migration migrateConfig(config, parentConfig) migrates before and after schedules 2`] = ` +Array [ + "after 10pm every weekday", + "before 7am every weekday", +] +`; + +exports[`config/migration migrateConfig(config, parentConfig) migrates config 1`] = ` Object { "additionalBranchPrefix": "{{parentDir}}-", "autodiscover": true, @@ -164,7 +188,7 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it migrates more packageFiles 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) migrates more packageFiles 1`] = ` Object { "includePaths": Array [ "package.json", @@ -192,7 +216,7 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it migrates node to travis 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) migrates node to travis 1`] = ` Object { "node": Object { "automerge": false, @@ -206,7 +230,7 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it migrates packageFiles 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) migrates packageFiles 1`] = ` Object { "includePaths": Array [ "package.json", @@ -249,7 +273,7 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it migrates packages 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) migrates packages 1`] = ` Object { "packageRules": Array [ Object { @@ -260,7 +284,7 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it migrates subconfig 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) migrates subconfig 1`] = ` Object { "lockFileMaintenance": Object { "packageRules": Array [ @@ -275,7 +299,7 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it overrides existing automerge setting 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) overrides existing automerge setting 1`] = ` Object { "major": Object { "automerge": false, @@ -300,7 +324,7 @@ Object { } `; -exports[`config/migration migrateConfig(config, parentConfig) it removes invalid configs 1`] = ` +exports[`config/migration migrateConfig(config, parentConfig) removes invalid configs 1`] = ` Object { "baseBranches": Array [], "commitMessage": "test", @@ -311,27 +335,3 @@ Object { "rebaseWhen": "auto", } `; - -exports[`config/migration migrateConfig(config, parentConfig) migrates before and after schedules 1`] = ` -Object { - "major": Object { - "schedule": Array [ - "after 10pm", - "before 7am", - ], - }, - "minor": Object { - "schedule": Array [ - "after 10pm every weekday", - "before 7am every weekday", - ], - }, -} -`; - -exports[`config/migration migrateConfig(config, parentConfig) migrates before and after schedules 2`] = ` -Array [ - "after 10pm every weekday", - "before 7am every weekday", -] -`; diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts index b904f26f04a302cd8a2d3c0265af07f62d068e02..b81057b142c8dd7c10edf13cd416606964529634 100644 --- a/lib/config/migration.spec.ts +++ b/lib/config/migration.spec.ts @@ -11,7 +11,7 @@ interface RenovateConfig extends _RenovateConfig { describe('config/migration', () => { describe('migrateConfig(config, parentConfig)', () => { - it('it migrates config', () => { + it('migrates config', () => { const config: RenovateConfig = { endpoints: [{}] as never, enabled: true, @@ -230,7 +230,7 @@ describe('config/migration', () => { expect(migratedConfig.schedule).toEqual(config.schedule); expect(isMigrated).toBe(false); }); - it('it migrates packages', () => { + it('migrates packages', () => { const config = { packages: [ { @@ -247,7 +247,7 @@ describe('config/migration', () => { expect(isMigrated).toBe(true); expect(migratedConfig).toMatchSnapshot(); }); - it('it overrides existing automerge setting', () => { + it('overrides existing automerge setting', () => { const config: RenovateConfig = { automerge: 'minor' as never, packages: [ @@ -266,7 +266,7 @@ describe('config/migration', () => { expect(migratedConfig).toMatchSnapshot(); expect(migratedConfig.packageRules[0].minor.automerge).toBe(false); }); - it('it does not migrate config', () => { + it('does not migrate config', () => { const config: RenovateConfig = { enabled: true, semanticCommits: true, @@ -278,7 +278,7 @@ describe('config/migration', () => { expect(isMigrated).toBe(false); expect(migratedConfig).toMatchObject(config); }); - it('it migrates subconfig', () => { + it('migrates subconfig', () => { const config: RenovateConfig = { lockFileMaintenance: { depTypes: [ @@ -301,7 +301,7 @@ describe('config/migration', () => { migratedConfig.lockFileMaintenance.packageRules[0].respectLatest ).toBe(false); }); - it('it migrates node to travis', () => { + it('migrates node to travis', () => { const config: RenovateConfig = { node: { enabled: true, @@ -325,7 +325,7 @@ describe('config/migration', () => { (migratedConfig.node as RenovateConfig).supportPolicy ).toBeDefined(); }); - it('it migrates packageFiles', () => { + it('migrates packageFiles', () => { const config: RenovateConfig = { packageFiles: [ 'package.json', @@ -350,7 +350,7 @@ describe('config/migration', () => { expect(migratedConfig.packageRules[0].rangeStrategy).toBe('replace'); expect(migratedConfig.packageRules[1].rangeStrategy).toBe('pin'); }); - it('it migrates more packageFiles', () => { + it('migrates more packageFiles', () => { const config: RenovateConfig = { packageFiles: [ { @@ -379,7 +379,7 @@ describe('config/migration', () => { expect(migratedConfig.packageRules).toHaveLength(2); }); - it('it removes invalid configs', () => { + it('removes invalid configs', () => { const config: RenovateConfig = { pathRules: {}, packageFiles: [{ packageFile: 'test' }], diff --git a/lib/datasource/go/index.ts b/lib/datasource/go/index.ts index ac0ba1309693e3004dadbaa412859f68ea6d2c90..75348d3634914f97cde61991605843580c2011e5 100644 --- a/lib/datasource/go/index.ts +++ b/lib/datasource/go/index.ts @@ -8,6 +8,7 @@ import * as gitlab from '../gitlab-tags'; export const id = 'go'; const http = new Http(id); +const gitlabRegExp = /^(https:\/\/[^/]*gitlab.[^/]*)\/(.*)$/; interface DataSource { datasource: string; @@ -54,9 +55,8 @@ async function getDatasource(goModule: string): Promise<DataSource | null> { .replace(/\/$/, ''), }; } - if (goSourceUrl?.match('^https://[^/]*gitlab.[^/]*/.+')) { - const gitlabRegExp = /^(https:\/\/[^/]*gitlab.[^/]*)\/(.*)$/; - const gitlabRes = gitlabRegExp.exec(goSourceUrl); + const gitlabRes = gitlabRegExp.exec(goSourceUrl); + if (gitlabRes) { return { datasource: gitlab.id, registryUrl: gitlabRes[1], diff --git a/lib/datasource/jenkins-plugins/get.ts b/lib/datasource/jenkins-plugins/get.ts index 8605e8b6248fbc2376186a04b7db871bbfdd0e4d..7d9b1a14651bb376e468eb7dfdaf447af471cea2 100644 --- a/lib/datasource/jenkins-plugins/get.ts +++ b/lib/datasource/jenkins-plugins/get.ts @@ -130,6 +130,7 @@ async function getJenkinsUpdateCenterResponse<T>( async function updateJenkinsPluginCache<T>( cache: JenkinsCache<JenkinsCacheTypes>, + // eslint-disable-next-line @typescript-eslint/no-shadow callback: (resp: T, cache: JenkinsCache<any>) => void ): Promise<void> { const response = await getJenkinsUpdateCenterResponse<T>(cache); diff --git a/lib/logger/index.ts b/lib/logger/index.ts index bdf75289e447bec62a70196a7586ff7e9bfa6ebc..58257e4ca179240690c2a2fdcdd8b7f9fa738582 100644 --- a/lib/logger/index.ts +++ b/lib/logger/index.ts @@ -9,7 +9,7 @@ import { RenovateStream } from './pretty-stdout'; import { ErrorStream, withSanitizer } from './utils'; let logContext: string = process.env.LOG_CONTEXT || shortid.generate(); -let meta = {}; +let curMeta = {}; export interface LogError { level: bunyan.LogLevel; @@ -61,13 +61,13 @@ const logFactory = (level: bunyan.LogLevelString): any => { return (p1: any, p2: any): void => { if (p2) { // meta and msg provided - bunyanLogger[level]({ logContext, ...meta, ...p1 }, p2); + bunyanLogger[level]({ logContext, ...curMeta, ...p1 }, p2); } else if (is.string(p1)) { // only message provided - bunyanLogger[level]({ logContext, ...meta }, p1); + bunyanLogger[level]({ logContext, ...curMeta }, p1); } else { // only meta provided - bunyanLogger[level]({ logContext, ...meta, ...p1 }); + bunyanLogger[level]({ logContext, ...curMeta, ...p1 }); } }; }; @@ -112,19 +112,19 @@ export function getContext(): any { // setMeta overrides existing meta, may remove fields if no longer existing export function setMeta(obj: Record<string, unknown>): void { - meta = { ...obj }; + curMeta = { ...obj }; } // addMeta overrides or adds fields but does not remove any export function addMeta(obj: Record<string, unknown>): void { - meta = { ...meta, ...obj }; + curMeta = { ...curMeta, ...obj }; } // removeMeta removes the provided fields from meta export function removeMeta(fields: string[]): void { - Object.keys(meta).forEach((key) => { + Object.keys(curMeta).forEach((key) => { if (fields.includes(key)) { - delete meta[key]; + delete curMeta[key]; } }); } diff --git a/lib/manager/kustomize/extract.spec.ts b/lib/manager/kustomize/extract.spec.ts index b826040bd3eb044ed7a637adea94ce1255a9a2a7..24b1131f05428f33b6a5e05ba26c3e6b2ec0fbff 100644 --- a/lib/manager/kustomize/extract.spec.ts +++ b/lib/manager/kustomize/extract.spec.ts @@ -59,7 +59,7 @@ describe('manager/kustomize/extract', () => { expect(file).toBeNull(); }); describe('extractBase', () => { - it('should return null for a local base ', () => { + it('should return null for a local base', () => { const res = extractBase('./service-1'); expect(res).toBeNull(); }); diff --git a/lib/manager/nuget/extract.ts b/lib/manager/nuget/extract.ts index 1273ec1cc4c61fe58ba0c38f52ebbbc89511a7c9..3f087d2fe23b1f489907db260b375b0995ab057d 100644 --- a/lib/manager/nuget/extract.ts +++ b/lib/manager/nuget/extract.ts @@ -104,8 +104,8 @@ function extractDepsFromXml(xmlNode: XmlDocument): PackageDependency[] { child.valueWithPath('Version') || attr?.VersionOverride || child.valueWithPath('VersionOverride'); - const currentValue = version - ?.match(checkVersion) + const currentValue = checkVersion + ?.exec(version) ?.groups?.currentValue?.trim(); if (depName && currentValue) { results.push({ diff --git a/lib/manager/poetry/extract.ts b/lib/manager/poetry/extract.ts index 123abf719c20cf5822bd95ac61f4216fe37a6f65..917fd5285a1e49d25bf29a6b6276d5d7f4d9ab57 100644 --- a/lib/manager/poetry/extract.ts +++ b/lib/manager/poetry/extract.ts @@ -121,8 +121,8 @@ export function extractPackageFile( compatibility.poetry = pyprojectfile['build-system']?.requires.join(' '); } - if (is.nonEmptyString(pyprojectfile.tool?.poetry?.['dependencies']?.python)) { - compatibility.python = pyprojectfile.tool?.poetry?.['dependencies']?.python; + if (is.nonEmptyString(pyprojectfile.tool?.poetry?.dependencies?.python)) { + compatibility.python = pyprojectfile.tool?.poetry?.dependencies?.python; } return { diff --git a/lib/manager/travis/__snapshots__/update.spec.ts.snap b/lib/manager/travis/__snapshots__/update.spec.ts.snap index 195389bb7382f10837b14e95a88bee96b9c82fc2..f27b320ee151d41d7b5224d0a59785511679fe6a 100644 --- a/lib/manager/travis/__snapshots__/update.spec.ts.snap +++ b/lib/manager/travis/__snapshots__/update.spec.ts.snap @@ -2,13 +2,6 @@ exports[`manager/travis/update updateDependency falls back to 2 spaces 1`] = `"hello: world"`; -exports[`manager/travis/update updateDependency it uses double quotes 1`] = ` -"node_js: - - \\"6\\" - - \\"8\\" -" -`; - exports[`manager/travis/update updateDependency updates values 1`] = ` "dist: trusty language: node_js @@ -32,3 +25,10 @@ notifications: on_success: never " `; + +exports[`manager/travis/update updateDependency uses double quotes 1`] = ` +"node_js: + - \\"6\\" + - \\"8\\" +" +`; diff --git a/lib/manager/travis/update.spec.ts b/lib/manager/travis/update.spec.ts index 8e91d243c822ed5734b92dac7daf90af9555c0d6..61ac24099d87c558b2a9ee847663b817ed8567fc 100644 --- a/lib/manager/travis/update.spec.ts +++ b/lib/manager/travis/update.spec.ts @@ -30,7 +30,7 @@ describe('manager/travis/update', () => { }); expect(res).toMatchSnapshot(); }); - it('it uses double quotes', () => { + it('uses double quotes', () => { // TODO: should be `Upgrade` const upgrade: any = { currentValue: ['6'], diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts index 7ef78ebc29dbcd97a290a51e6156bdd589db3044..bb80df56c22efafd66ee389553ade4b9af69dde3 100644 --- a/lib/platform/gitea/index.spec.ts +++ b/lib/platform/gitea/index.spec.ts @@ -1013,6 +1013,7 @@ describe('platform/gitea', () => { expect(helper.closeIssue).toHaveBeenCalledTimes(duplicates.length - 1); for (const issue of duplicates) { if (issue.number !== firstDuplicate.number) { + // eslint-disable-next-line jest/no-conditional-expect expect(helper.closeIssue).toHaveBeenCalledWith( mockRepo.full_name, issue.number diff --git a/lib/versioning/docker/index.spec.ts b/lib/versioning/docker/index.spec.ts index c8d55cd16b8c476754731a37fecc399137adf193..b2427778f94362d7ca8c33f9278aabb2c9f379ca 100644 --- a/lib/versioning/docker/index.spec.ts +++ b/lib/versioning/docker/index.spec.ts @@ -11,7 +11,7 @@ describe('docker.', () => { expect(docker.isValid('3')).toBe('3'); expect(docker.isValid('foo')).toBeNull(); }); - it('it should return null if the version string looks like a git commit hash', () => { + it('should return null if the version string looks like a git commit hash', () => { [ '0a1b2c3', '0a1b2c3d', diff --git a/lib/versioning/loose/index.spec.ts b/lib/versioning/loose/index.spec.ts index a5585f60d0e0d3f2437493136e23df1777239798..f75c2df566e122235a02abf33864919ae6853194 100644 --- a/lib/versioning/loose/index.spec.ts +++ b/lib/versioning/loose/index.spec.ts @@ -9,7 +9,7 @@ describe('loose.', () => { }); }); describe('isValid(version)', () => { - it('it must support varied precision, from 1 to 6 sections', () => { + it('must support varied precision, from 1 to 6 sections', () => { [ 'v1.4', '3.5.0', @@ -29,7 +29,7 @@ describe('loose.', () => { expect(loose.isValid(version)).toBeNull(); }); }); - it('it should return null if the version string looks like a git commit hash', () => { + it('should return null if the version string looks like a git commit hash', () => { [ '0a1b2c3', '0a1b2c3d', @@ -49,7 +49,7 @@ describe('loose.', () => { }); }); describe('isGreaterThan(version)', () => { - it('it should compare using release number than suffix', () => { + it('should compare using release number than suffix', () => { expect(loose.isGreaterThan('2.4.0', '2.4')).toBe(true); expect(loose.isGreaterThan('2.4.2', '2.4.1')).toBe(true); expect(loose.isGreaterThan('2.4.beta', '2.4.alpha')).toBe(true); diff --git a/lib/versioning/maven/index.spec.ts b/lib/versioning/maven/index.spec.ts index b401c53588542b36f482a0e382303e859d0bedaa..e10acd65474444dddd928c02fb43db641c6d929c 100644 --- a/lib/versioning/maven/index.spec.ts +++ b/lib/versioning/maven/index.spec.ts @@ -235,8 +235,10 @@ describe('versioning/maven/compare', () => { const fullRange = parseRange(rangeStr); expect(presetValue).toEqual(fullRange); if (fullRange === null) { + // eslint-disable-next-line jest/no-conditional-expect expect(presetValue).toBeNull(); } else { + // eslint-disable-next-line jest/no-conditional-expect expect(rangeToStr(fullRange)).toEqual(rangeStr); } }); diff --git a/lib/versioning/versioning-metadata.spec.ts b/lib/versioning/versioning-metadata.spec.ts index 0d2aea55c49d8d6d59cbeda5ae69b659a6cf9738..38d0b26e735d57841c319e4473cfea1dca655208 100644 --- a/lib/versioning/versioning-metadata.spec.ts +++ b/lib/versioning/versioning-metadata.spec.ts @@ -16,6 +16,7 @@ describe('versioning metadata', () => { // ignore missing file } if (readme) { + // eslint-disable-next-line jest/no-conditional-expect expect(RegExp(/(^|\n)#+ /).exec(readme)).toBeNull(); } } @@ -32,6 +33,7 @@ describe('versioning metadata', () => { expect(versioningObj.urls).toBeDefined(); expect(versioningObj.supportsRanges).toBeDefined(); if (versioningObj.supportsRanges === true) { + // eslint-disable-next-line jest/no-conditional-expect expect(versioningObj.supportedRangeStrategies).toBeDefined(); } } diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts index a14d71e874c117990c3c2b84a0e308ea6e5f7acd..08d2045db69e3df0cd378b5570371feb9a2ad545 100644 --- a/lib/workers/repository/dependency-dashboard.spec.ts +++ b/lib/workers/repository/dependency-dashboard.spec.ts @@ -24,7 +24,7 @@ beforeEach(() => { async function dryRun( branches: BranchConfig[], - // eslint-disable-next-line no-shadow + // eslint-disable-next-line @typescript-eslint/no-shadow platform: jest.Mocked<Platform>, ensureIssueClosingCalls = 0, ensureIssueCalls = 0, diff --git a/package.json b/package.json index 4fd7c1c03c24a06b4c0ff83b0beab32f63af66dd..a08934540d161e5586bd1eb94b332acc80605b02 100644 --- a/package.json +++ b/package.json @@ -219,18 +219,18 @@ "@types/shelljs": "0.8.8", "@types/traverse": "0.6.32", "@types/xmldoc": "1.1.4", - "@typescript-eslint/eslint-plugin": "3.10.1", - "@typescript-eslint/parser": "3.10.1", + "@typescript-eslint/eslint-plugin": "4.0.1", + "@typescript-eslint/parser": "4.0.1", "aws-sdk-mock": "5.1.0", "babel-jest": "26.3.0", "babel-plugin-dynamic-import-node": "2.3.3", "conventional-changelog-conventionalcommits": "4.4.0", "cross-env": "7.0.2", "eslint": "7.8.1", - "eslint-config-airbnb-typescript": "8.0.2", + "eslint-config-airbnb-typescript": "10.0.0", "eslint-config-prettier": "6.11.0", "eslint-plugin-import": "2.22.0", - "eslint-plugin-jest": "23.20.0", + "eslint-plugin-jest": "24.0.0", "eslint-plugin-promise": "4.2.1", "glob": "7.1.6", "graphql": "15.3.0", diff --git a/test/globals.ts b/test/globals.ts index d8c3db8ff91a22fb159a127b8e86d53570f224a9..93060e0c7984fa4e0053db138d69db87faf298c5 100644 --- a/test/globals.ts +++ b/test/globals.ts @@ -2,7 +2,7 @@ import nock from 'nock'; import 'jest-extended'; jest.mock('../lib/platform', () => ({ - platform: jest.genMockFromModule('../lib/platform/github'), + platform: jest.createMockFromModule('../lib/platform/github'), initPlatform: jest.fn(), getPlatformList: jest.fn(), })); diff --git a/test/static-files.spec.ts b/test/static-files.spec.ts index 3a9d945fbab41e2f30c5086ea0d3e74e12bbc465..c8db196f31ff238d366b9a1a9b81ef339da64325 100644 --- a/test/static-files.spec.ts +++ b/test/static-files.spec.ts @@ -21,6 +21,9 @@ async function getFiles(dir: string): Promise<string[]> { } describe('static-files', () => { + // workaround for github macos + jest.setTimeout(10 * 1000); + it('has same static files in lib and dist', async () => { expect(await getFiles('dist')).toEqual(await getFiles('lib')); }); diff --git a/yarn.lock b/yarn.lock index 456423cf99c95e88d51a8f69f96cd1e15e9afbe9..f6660a24bbc03c135965c474d77a08f958c71c74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1572,11 +1572,6 @@ resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.4.tgz#d61990c0cee72c4e475de737a140b51fe925a2c8" integrity sha512-k3LLVMFrdNA9UCvMDPWMbFrGPNb+GcPyw29ktJTo1RCN7RmxFG5XzPZcPKRlnLuLT/FRm8wp4ohvDwNY7GlROQ== -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - "@types/eslint@7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.2.tgz#c88426b896efeb0b2732a92431ce8aa7ec0dee61" @@ -1882,88 +1877,75 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f" - integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ== +"@typescript-eslint/eslint-plugin@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.0.1.tgz#88bde9239e29d688315718552cf80a3490491017" + integrity sha512-pQZtXupCn11O4AwpYVUX4PDFfmIJl90ZgrEBg0CEcqlwvPiG0uY81fimr1oMFblZnpKAq6prrT9a59pj1x58rw== dependencies: - "@typescript-eslint/experimental-utils" "3.10.1" + "@typescript-eslint/experimental-utils" "4.0.1" + "@typescript-eslint/scope-manager" "4.0.1" debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" - integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== +"@typescript-eslint/experimental-utils@4.0.1", "@typescript-eslint/experimental-utils@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.0.1.tgz#7d9a3ab6821ad5274dad2186c1aa0d93afd696eb" + integrity sha512-gAqOjLiHoED79iYTt3F4uSHrYmg/GPz/zGezdB0jAdr6S6gwNiR/j7cTZ8nREKVzMVKLd9G3xbg1sV9GClW3sw== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" + "@typescript-eslint/scope-manager" "4.0.1" + "@typescript-eslint/types" "4.0.1" + "@typescript-eslint/typescript-estree" "4.0.1" eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/experimental-utils@^2.5.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== +"@typescript-eslint/parser@4.0.1", "@typescript-eslint/parser@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.0.1.tgz#73772080db7a7a4534a35d719e006f503e664dc3" + integrity sha512-1+qLmXHNAWSQ7RB6fdSQszAiA7JTwzakj5cNYjBTUmpH2cqilxMZEIV+DRKjVZs8NzP3ALmKexB0w/ExjcK9Iw== dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" + "@typescript-eslint/scope-manager" "4.0.1" + "@typescript-eslint/types" "4.0.1" + "@typescript-eslint/typescript-estree" "4.0.1" + debug "^4.1.1" -"@typescript-eslint/parser@3.10.1", "@typescript-eslint/parser@^3.1.0": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" - integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== +"@typescript-eslint/scope-manager@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.0.1.tgz#24d93c3000bdfcc5a157dc4d32b742405a8631b5" + integrity sha512-u3YEXVJ8jsj7QCJk3om0Y457fy2euEOkkzxIB/LKU3MdyI+FJ2gI0M4aKEaXzwCSfNDiZ13a3lDo5DVozc+XLQ== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.10.1" - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/typescript-estree" "3.10.1" - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/types" "4.0.1" + "@typescript-eslint/visitor-keys" "4.0.1" -"@typescript-eslint/types@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" - integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== - -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" +"@typescript-eslint/types@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.0.1.tgz#1cf72582f764931f085cb8230ff215980fe467b2" + integrity sha512-S+gD3fgbkZYW2rnbjugNMqibm9HpEjqZBZkTiI3PwbbNGWmAcxolWIUwZ0SKeG4Dy2ktpKKaI/6+HGYVH8Qrlg== -"@typescript-eslint/typescript-estree@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" - integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== +"@typescript-eslint/typescript-estree@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.0.1.tgz#29a43c7060641ec51c902d9f50ac7c5866ec479f" + integrity sha512-zGzleORFXrRWRJAMLTB2iJD1IZbCPkg4hsI8mGdpYlKaqzvKYSEWVAYh14eauaR+qIoZVWrXgYSXqLtTlxotiw== dependencies: - "@typescript-eslint/types" "3.10.1" - "@typescript-eslint/visitor-keys" "3.10.1" + "@typescript-eslint/types" "4.0.1" + "@typescript-eslint/visitor-keys" "4.0.1" debug "^4.1.1" - glob "^7.1.6" + globby "^11.0.1" is-glob "^4.0.1" lodash "^4.17.15" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" - integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== +"@typescript-eslint/visitor-keys@4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.0.1.tgz#d4e8de62775f2a6db71c7e8539633680039fdd6c" + integrity sha512-yBSqd6FjnTzbg5RUy9J+9kJEyQjTI34JdGMJz+9ttlJzLCnGkBikxw+N5n2VDcc3CesbIEJ0MnZc5uRYnrEnCw== dependencies: - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/types" "4.0.1" + eslint-visitor-keys "^2.0.0" "@yarnpkg/core@2.2.2": version "2.2.2" @@ -3890,7 +3872,7 @@ escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" -eslint-config-airbnb-base@^14.1.0, eslint-config-airbnb-base@^14.2.0: +eslint-config-airbnb-base@^14.2.0: version "14.2.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== @@ -3899,16 +3881,16 @@ eslint-config-airbnb-base@^14.1.0, eslint-config-airbnb-base@^14.2.0: object.assign "^4.1.0" object.entries "^1.1.2" -eslint-config-airbnb-typescript@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-8.0.2.tgz#465b17b0b1facdcca4fe23a5426bc27ab7b2b2f2" - integrity sha512-TCOftyCoIogJzzLGSg0Qlxd27qvf+1a3MHyN/PqynTqINS4iFy+SlXy/CrAN+6xkleGMSrvmPbm3pyFEku2+IQ== +eslint-config-airbnb-typescript@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-10.0.0.tgz#fb0b307de31ce9465d706e987590da0f0f594f81" + integrity sha512-me2QQj+MUc9+vsr44ZMgGdI2f7Brd7dWTl/+ly9r5RFsoSPkwzV/N4tTg5ZOrtA4Ay18urKPKmwLGe9TTIDxnw== dependencies: - "@typescript-eslint/parser" "^3.1.0" - eslint-config-airbnb "^18.1.0" - eslint-config-airbnb-base "^14.1.0" + "@typescript-eslint/parser" "^4.0.1" + eslint-config-airbnb "^18.2.0" + eslint-config-airbnb-base "^14.2.0" -eslint-config-airbnb@^18.1.0: +eslint-config-airbnb@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz#8a82168713effce8fc08e10896a63f1235499dcd" integrity sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg== @@ -3959,12 +3941,12 @@ eslint-plugin-import@2.22.0: resolve "^1.17.0" tsconfig-paths "^3.9.0" -eslint-plugin-jest@23.20.0: - version "23.20.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz#e1d69c75f639e99d836642453c4e75ed22da4099" - integrity sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw== +eslint-plugin-jest@24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.0.0.tgz#6b1c460c529104c7d16d889e76fe708b281c4d14" + integrity sha512-a0G7hSDbuBCW4PNT6MVpAyfnGbUDOqxzOyhR6wT2BIBnR7MhvfAqd6KKfsTjX+Z3gxzIHiEsihzdClU4cSc6qQ== dependencies: - "@typescript-eslint/experimental-utils" "^2.5.0" + "@typescript-eslint/experimental-utils" "^4.0.1" eslint-plugin-promise@4.2.1: version "4.2.1" @@ -3991,6 +3973,11 @@ eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + eslint@7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.8.1.tgz#e59de3573fb6a5be8ff526c791571646d124a8fa"