From 2b8fcd445e67e97eca376273e1f6352d115f7cbe Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 6 Nov 2021 10:21:08 +0300 Subject: [PATCH 001/248] fix(ubuntu): Consider 22.04 unstable (#12528) --- lib/versioning/ubuntu/index.spec.ts | 1 + lib/versioning/ubuntu/index.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/lib/versioning/ubuntu/index.spec.ts b/lib/versioning/ubuntu/index.spec.ts index 4f7362b4679767..99812ccdfb7156 100644 --- a/lib/versioning/ubuntu/index.spec.ts +++ b/lib/versioning/ubuntu/index.spec.ts @@ -121,6 +121,7 @@ describe('versioning/ubuntu/index', () => { ${'42.10'} | ${false} ${'42.11'} | ${false} ${'2020.04'} | ${false} + ${'22.04'} | ${false} `('isStable("$version") === $expected', ({ version, expected }) => { const res = !!ubuntu.isStable(version); expect(res).toBe(expected); diff --git a/lib/versioning/ubuntu/index.ts b/lib/versioning/ubuntu/index.ts index 0e4d3a22dd7a6c..d875e52aedd586 100644 --- a/lib/versioning/ubuntu/index.ts +++ b/lib/versioning/ubuntu/index.ts @@ -6,6 +6,9 @@ export const displayName = 'Ubuntu'; export const urls = ['https://changelogs.ubuntu.com/meta-release']; export const supportsRanges = false; +// #12509 +const temporarilyUnstable = ['22.04']; + // validation function isValid(input: string): string | boolean | null { @@ -34,6 +37,9 @@ function isStable(version: string): boolean { if (!isValid(version)) { return false; } + if (temporarilyUnstable.includes(version)) { + return false; + } return regEx(/^\d?[02468]\.04/).test(version); } From 39a947ce055af5bb6547d64872378d6047fb241d Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Sat, 6 Nov 2021 08:35:15 +0100 Subject: [PATCH 002/248] test: reduce memory footprint (#12517) * test: reduce memory footprint * test: use new ts config Co-authored-by: Rhys Arkins --- jest.config.ts | 1 + tsconfig.spec.json | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 tsconfig.spec.json diff --git a/jest.config.ts b/jest.config.ts index 5c94e02bd80b56..0ddfc41e98d7ea 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -36,6 +36,7 @@ const config: InitialOptionsTsJest = { testRunner: 'jest-circus/runner', globals: { 'ts-jest': { + tsconfig: '/tsconfig.spec.json', diagnostics: false, isolatedModules: true, }, diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 00000000000000..101c5a0ad2f8fb --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "allowJs": false, + "checkJs": false + } +} From 0052cbc745232c687955171cc813b0b02cae57bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 6 Nov 2021 10:41:30 +0000 Subject: [PATCH 003/248] chore(deps): update dependency @semantic-release/exec to v6.0.2 (#12530) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 391 ++++++++++++++++++++++----------------------------- 2 files changed, 170 insertions(+), 223 deletions(-) diff --git a/package.json b/package.json index 2b1e530575197a..7cf8fe1c059179 100644 --- a/package.json +++ b/package.json @@ -206,7 +206,7 @@ "@jest/test-result": "27.3.1", "@ls-lint/ls-lint": "1.10.0", "@renovate/eslint-plugin": "https://github.com/renovatebot/eslint-plugin#v0.0.3", - "@semantic-release/exec": "6.0.1", + "@semantic-release/exec": "6.0.2", "@types/auth-header": "1.0.2", "@types/bunyan": "1.8.7", "@types/cacache": "15.0.1", diff --git a/yarn.lock b/yarn.lock index e27199c45abd43..24b77630d37929 100644 --- a/yarn.lock +++ b/yarn.lock @@ -978,7 +978,7 @@ resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== -"@isaacs/string-locale-compare@*", "@isaacs/string-locale-compare@^1.0.1": +"@isaacs/string-locale-compare@^1.0.1", "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== @@ -1217,21 +1217,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@*", "@npmcli/arborist@^4.0.0": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.0.3.tgz#5e1632192f970c3a4e43c4699ad875089418bed0" - integrity sha512-gFz/dNJtpv2bYXlupcUpEaWlFDRUNmvVnQNbE6dY4ild6beZ2SkG4R5/CM4GZZwj9HD2TyfGjO350Ja+xlLzuA== +"@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0", "@npmcli/arborist@^2.9.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" + integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== dependencies: "@isaacs/string-locale-compare" "^1.0.1" "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.0" - "@npmcli/metavuln-calculator" "^2.0.0" + "@npmcli/map-workspaces" "^1.0.2" + "@npmcli/metavuln-calculator" "^1.1.0" "@npmcli/move-file" "^1.1.0" "@npmcli/name-from-folder" "^1.0.1" "@npmcli/node-gyp" "^1.0.1" "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^2.0.0" - bin-links "^2.3.0" + "@npmcli/run-script" "^1.8.2" + bin-links "^2.2.1" cacache "^15.0.3" common-ancestor-path "^1.0.1" json-parse-even-better-errors "^2.3.1" @@ -1242,7 +1242,7 @@ npm-package-arg "^8.1.5" npm-pick-manifest "^6.1.0" npm-registry-fetch "^11.0.0" - pacote "^12.0.0" + pacote "^11.3.5" parse-conflict-json "^1.1.1" proc-log "^1.0.0" promise-all-reject-late "^1.0.0" @@ -1255,15 +1255,15 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@*", "@npmcli/ci-detect@^1.3.0": +"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== -"@npmcli/config@*": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.0.tgz#364fbe942037e562a832a113206e14ccb651f7bc" - integrity sha512-yjiC1xv7KTmUTqfRwN2ZL7BHV160ctGF0fLXmKkkMXj40UOvBe45Apwvt5JsFRtXSoHkUYy1ouzscziuWNzklg== +"@npmcli/config@^2.3.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.1.tgz#41d80ce272831461b5cb158afa110525d4be0fed" + integrity sha512-F/8R/Zqun8682TgaCILUNoaVfd1LVaYZ/jcVt9KWzfKpzcPus1zEApAl54PqVqVJbNq6f01QTDQHD6L/n56BXw== dependencies: ini "^2.0.0" mkdirp-infer-owner "^2.0.0" @@ -1308,24 +1308,23 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/map-workspaces@*", "@npmcli/map-workspaces@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz#e342efbbdd0dad1bba5d7723b674ca668bf8ac5a" - integrity sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g== +"@npmcli/map-workspaces@^1.0.2", "@npmcli/map-workspaces@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab" + integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q== dependencies: "@npmcli/name-from-folder" "^1.0.1" glob "^7.1.6" minimatch "^3.0.4" read-package-json-fast "^2.0.1" -"@npmcli/metavuln-calculator@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" - integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== +"@npmcli/metavuln-calculator@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" + integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== dependencies: cacache "^15.0.5" - json-parse-even-better-errors "^2.3.1" - pacote "^12.0.0" + pacote "^11.1.11" semver "^7.3.2" "@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": @@ -1346,7 +1345,7 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== -"@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": +"@npmcli/package-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== @@ -1360,17 +1359,7 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@*", "@npmcli/run-script@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" - integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== - dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^8.2.0" - read-package-json-fast "^2.0.1" - -"@npmcli/run-script@^1.8.2": +"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.6": version "1.8.6" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== @@ -1512,7 +1501,7 @@ lodash "^4.17.4" micromatch "^4.0.2" -"@semantic-release/error@^2.1.0", "@semantic-release/error@^2.2.0": +"@semantic-release/error@^2.2.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-2.2.0.tgz#ee9d5a09c9969eade1ec864776aeda5c5cddbbf0" integrity sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg== @@ -1522,12 +1511,12 @@ resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== -"@semantic-release/exec@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/exec/-/exec-6.0.1.tgz#6316f52ad786c7fafff5e1cbcfeeb7608501db78" - integrity sha512-RlMoxuhQ7QujrykIG5uw0NU6x82BR4E7ssKsl+ISCFhFHnvxxH+w4h4klWOs/cT/XEPJdoPFbBOVoruKtAwfDg== +"@semantic-release/exec@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/exec/-/exec-6.0.2.tgz#1eba943170595192083e71c7788823c570443bbb" + integrity sha512-ciaqJTHB1TFtU6C78xrgmoNI9UyfheR9+Bk6Ico7CJ7+ADOEAvUrPBKvz64UCfoWlg+SlKGTVGbFnA509wRUVw== dependencies: - "@semantic-release/error" "^2.1.0" + "@semantic-release/error" "^3.0.0" aggregate-error "^3.0.0" debug "^4.0.0" execa "^5.0.0" @@ -2230,7 +2219,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@*, abbrev@1: +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -2358,12 +2347,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@*, ansicolors@~0.3.2: +ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= -ansistyles@*: +ansistyles@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= @@ -2391,7 +2380,7 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archy@*: +archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= @@ -2632,7 +2621,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -bin-links@^2.3.0: +bin-links@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== @@ -2766,7 +2755,7 @@ bunyan@1.8.15: mv "~2" safe-json-stringify "~1" -cacache@*, cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: +cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -2858,7 +2847,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@*, chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2908,7 +2897,7 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chownr@*, chownr@^2.0.0: +chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== @@ -2945,15 +2934,15 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" + string-width "^2.0.0" + strip-ansi "^3.0.1" -cli-table3@*, cli-table3@^0.6.0: +cli-table3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -3045,7 +3034,7 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -columnify@*: +columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= @@ -4144,7 +4133,7 @@ fast-xml-parser@3.19.0: resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== -fastest-levenshtein@*: +fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -4453,7 +4442,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@*, glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -4537,7 +4526,7 @@ got@11.8.2, got@^11.7.0: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@*, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -4646,18 +4635,18 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@*, hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -4766,13 +4755,6 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore-walk@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" - integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== - dependencies: - minimatch "^3.0.4" - ignore@5.1.8, ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" @@ -4832,7 +4814,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@*, ini@2.0.0, ini@^2.0.0: +ini@2.0.0, ini@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== @@ -4842,7 +4824,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@*: +init-package-json@^2.0.5: 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== @@ -4942,7 +4924,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-cidr@*: +is-cidr@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== @@ -5820,7 +5802,7 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@*, json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -5946,7 +5928,7 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@*: +libnpmaccess@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== @@ -5956,7 +5938,7 @@ libnpmaccess@*: npm-package-arg "^8.1.2" npm-registry-fetch "^11.0.0" -libnpmdiff@*: +libnpmdiff@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== @@ -5970,31 +5952,31 @@ libnpmdiff@*: pacote "^11.3.0" tar "^6.1.0" -libnpmexec@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-3.0.1.tgz#bc2fddf1b7bd2c1b2c43b4b726ec4cf11920ad0a" - integrity sha512-VUZTpkKBRPv3Z9DIjbsiHhEQXmQ+OwSQ/yLCY9i6CFE8UIczWyE6wVxP5sJ5NSGtSTUs6I98WewQOL45OKMyxA== +libnpmexec@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-2.0.1.tgz#729ae3e15a3ba225964ccf248117a75d311eeb73" + integrity sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw== dependencies: - "@npmcli/arborist" "^4.0.0" + "@npmcli/arborist" "^2.3.0" "@npmcli/ci-detect" "^1.3.0" - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.4" chalk "^4.1.0" mkdirp-infer-owner "^2.0.0" npm-package-arg "^8.1.2" - pacote "^12.0.0" + pacote "^11.3.1" proc-log "^1.0.0" read "^1.0.7" read-package-json-fast "^2.0.2" walk-up-path "^1.0.0" -libnpmfund@*: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-2.0.1.tgz#3c7e2be61e8c79e22c4918dde91ef57f64faf064" - integrity sha512-OhDbjB3gqdRyuQ56AhUtO49HZ7cZHSM7yCnhQa1lsNpmAmGPnjCImfx8SoWaAkUM7Ov8jngMR5JHKAr1ddjHTQ== +libnpmfund@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.1.0.tgz#ee91313905b3194b900530efa339bc3f9fc4e5c4" + integrity sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ== dependencies: - "@npmcli/arborist" "^4.0.0" + "@npmcli/arborist" "^2.5.0" -libnpmhook@*: +libnpmhook@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.3.tgz#1d7f0d7e6a7932fbf7ce0881fdb0ed8bf8748a30" integrity sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g== @@ -6002,7 +5984,7 @@ libnpmhook@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmorg@*: +libnpmorg@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.3.tgz#4e605d4113dfa16792d75343824a0625c76703bc" integrity sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA== @@ -6010,16 +5992,16 @@ libnpmorg@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmpack@*: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-3.0.0.tgz#b1cdf182106bc0d25910e79bb5c9b6c23cd71670" - integrity sha512-W6lt4blkR9YXu/qOrFknfnKBajz/1GvAc5q1XcWTGuBJn2DYKDWHtA7x1fuMQdn7hKDBOPlZ/Aqll+ZvAnrM6g== +libnpmpack@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" + integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== dependencies: - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.3" npm-package-arg "^8.1.0" - pacote "^12.0.0" + pacote "^11.2.6" -libnpmpublish@*: +libnpmpublish@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== @@ -6030,14 +6012,14 @@ libnpmpublish@*: semver "^7.1.3" ssri "^8.0.1" -libnpmsearch@*: +libnpmsearch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.2.tgz#aee81b9e4768750d842b627a3051abc89fdc15f3" integrity sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw== dependencies: npm-registry-fetch "^11.0.0" -libnpmteam@*: +libnpmteam@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.4.tgz#9dbe2e18ae3cb97551ec07d2a2daf9944f3edc4c" integrity sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw== @@ -6045,13 +6027,13 @@ libnpmteam@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmversion@*: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-2.0.1.tgz#20b1425d88cd99c66806a54b458d2d654066b550" - integrity sha512-uFGtNTe/m0GOIBQCE4ryIsgGNJdeShW+qvYtKNLCCuiG7JY3YEslL/maFFZbaO4wlQa/oj1t0Bm9TyjahvtgQQ== +libnpmversion@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.2.1.tgz#689aa7fe0159939b3cbbf323741d34976f4289e9" + integrity sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ== dependencies: "@npmcli/git" "^2.0.7" - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.4" json-parse-even-better-errors "^2.3.1" semver "^7.3.5" stringify-package "^1.0.1" @@ -6202,7 +6184,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@*, make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: +make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -6528,7 +6510,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@*, minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -6542,7 +6524,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== @@ -6557,7 +6539,7 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: +mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== @@ -6566,11 +6548,6 @@ mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -6578,6 +6555,11 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mock-fs@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.1.tgz#d4c95e916abf400664197079d7e399d133bb6048" @@ -6608,11 +6590,6 @@ mri@^1.1.5: 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" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6623,6 +6600,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -6712,36 +6694,36 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-gyp@*, node-gyp@^8.0.0, node-gyp@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.3.0.tgz#ebc36a146d45095e1c6af6ccb0e47d1c8fc3fe69" - integrity sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA== +node-gyp@^7.1.0, node-gyp@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" + graceful-fs "^4.2.3" nopt "^5.0.0" npmlog "^4.1.2" + request "^2.88.2" rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" + semver "^7.3.2" + tar "^6.0.2" which "^2.0.2" -node-gyp@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.3.0.tgz#ebc36a146d45095e1c6af6ccb0e47d1c8fc3fe69" + integrity sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.3" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" nopt "^5.0.0" npmlog "^4.1.2" - request "^2.88.2" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" node-html-parser@3.3.6: @@ -6775,7 +6757,7 @@ node.extend@^2.0.0: has "^1.0.3" is "^3.2.1" -nopt@*, nopt@^5.0.0: +nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== @@ -6812,7 +6794,7 @@ normalize-url@^6.0.0, normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@*: +npm-audit-report@^2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== @@ -6826,7 +6808,7 @@ npm-bundled@^1.1.1: dependencies: npm-normalize-package-bin "^1.0.1" -npm-install-checks@*, npm-install-checks@^4.0.0: +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== @@ -6838,7 +6820,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -6857,17 +6839,7 @@ npm-packlist@^2.1.4: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-packlist@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" - integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== - dependencies: - glob "^7.1.6" - ignore-walk "^4.0.1" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -6877,14 +6849,14 @@ npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pic npm-package-arg "^8.1.2" semver "^7.3.4" -npm-profile@*: +npm-profile@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.4.tgz#73e5bd1d808edc2c382d7139049cc367ac43161b" integrity sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA== dependencies: npm-registry-fetch "^11.0.0" -npm-registry-fetch@*, npm-registry-fetch@^11.0.0: +npm-registry-fetch@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== @@ -6918,7 +6890,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@*: +npm-user-validate@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== @@ -6999,16 +6971,6 @@ npm@^7.0.0: which "^2.0.2" write-file-atomic "^3.0.3" -npmlog@*: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -7019,6 +6981,16 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -7105,7 +7077,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@*: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -7267,32 +7239,7 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@*, pacote@^12.0.0: - version "12.0.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.2.tgz#14ae30a81fe62ec4fc18c071150e6763e932527c" - integrity sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg== - dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^2.0.0" - cacache "^15.0.5" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^3.0.0" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^11.0.0" - promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" - -pacote@^11.3.0: +pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: version "11.3.5" resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== @@ -7324,7 +7271,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@*, parse-conflict-json@^1.1.1: +parse-conflict-json@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== @@ -7671,7 +7618,7 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qrcode-terminal@*: +qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== @@ -7742,7 +7689,7 @@ read-cmd-shim@^2.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: +read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -7750,7 +7697,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.1.1: +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== @@ -7788,7 +7735,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@*, read@1, read@^1.0.7, read@~1.0.1: +read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -7817,7 +7764,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -8023,7 +7970,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@*, rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8151,18 +8098,18 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -semver@*, semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -8418,7 +8365,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@*, ssri@^8.0.0, ssri@^8.0.1: +ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -8483,7 +8430,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.1 || ^2.0.0": +"string-width@^1.0.1 || ^2.0.0", string-width@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8654,7 +8601,7 @@ tar-stream@^2.0.1: inherits "^2.0.3" readable-stream "^3.1.1" -tar@*, tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -8704,7 +8651,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@*, text-table@^0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -8741,7 +8688,7 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tiny-relative-date@*: +tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== @@ -8816,7 +8763,7 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -treeverse@*, treeverse@^1.0.4: +treeverse@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== @@ -9153,7 +9100,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@*, validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0: +validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= @@ -9275,13 +9222,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@*, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -9289,6 +9229,13 @@ which@^1.2.9: dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -9320,7 +9267,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== From ca45a2c2e2707cd245cf47adde66e9344354b260 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 6 Nov 2021 11:42:46 +0100 Subject: [PATCH 004/248] fix(config): handle + in preset filename --- lib/config/presets/index.spec.ts | 9 +++++++++ lib/config/presets/index.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index c96efd8360884f..5eed460ee8f638 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -322,6 +322,15 @@ describe('config/presets/index', () => { presetSource: 'github', }); }); + it('handles special chars', () => { + expect(presets.parsePreset('github>some/repo:foo+bar')).toEqual({ + packageName: 'some/repo', + params: undefined, + presetName: 'foo+bar', + presetPath: undefined, + presetSource: 'github', + }); + }); it('parses github subfiles', () => { expect(presets.parsePreset('github>some/repo:somefile')).toEqual({ packageName: 'some/repo', diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index d60baf3122ecb4..21298a144797cc 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -39,7 +39,7 @@ const nonScopedPresetWithSubdirRegex = regEx( /^(?~?[\w\-./]+?)\/\/(?:(?[\w\-./]+)\/)?(?[\w\-.]+)(?:#(?[\w\-.]+?))?$/ ); const gitPresetRegex = regEx( - /^(?[\w\-./]+)(?::(?[\w-./]+\/))?(?::?(?[\w\-.]+))?(?:#(?[\w\-.]+?))?$/ + /^(?[\w\-./]+)(?::(?[\w-./]+\/))?(?::?(?[\w\-.+]+))?(?:#(?[\w\-.]+?))?$/ ); export function replaceArgs( From b9be8d4d6ab642905f3b030dedba2464c6c64f61 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 6 Nov 2021 18:59:09 +0300 Subject: [PATCH 005/248] fix(http): Destroy some got responses explicitly to avoid onCancel errors (#12533) --- lib/util/http/hooks.ts | 25 +++++++++++++++++++++++++ lib/util/http/index.ts | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 lib/util/http/hooks.ts diff --git a/lib/util/http/hooks.ts b/lib/util/http/hooks.ts new file mode 100644 index 00000000000000..2d6c571627d655 --- /dev/null +++ b/lib/util/http/hooks.ts @@ -0,0 +1,25 @@ +// Renovate issue: https://github.com/renovatebot/renovate/issues/12127 +// Got issue: https://github.com/sindresorhus/got/issues/1489 +// From here: https://github.com/sindresorhus/got/issues/1489#issuecomment-805485731 +import type { Hooks, Response } from 'got'; + +function isResponseOk(response: Response): boolean { + const { statusCode } = response; + const limitStatusCode = response.request.options.followRedirect ? 299 : 399; + + return ( + (statusCode >= 200 && statusCode <= limitStatusCode) || statusCode === 304 + ); +} + +export const hooks: Hooks = { + afterResponse: [ + (response: Response): Response => { + if (isResponseOk(response)) { + response.request.destroy(); + } + + return response; + }, + ], +}; diff --git a/lib/util/http/index.ts b/lib/util/http/index.ts index d9c727ecab81f6..0dc25d94f38134 100644 --- a/lib/util/http/index.ts +++ b/lib/util/http/index.ts @@ -8,6 +8,7 @@ import * as memCache from '../cache/memory'; import { clone } from '../clone'; import { resolveBaseUrl } from '../url'; import { applyAuthorization, removeAuthorization } from './auth'; +import { hooks } from './hooks'; import { applyHostRules } from './host-rules'; import { getQueue } from './queue'; import type { @@ -98,7 +99,7 @@ async function gotRoutine( // Cheat the TS compiler using `as` to pick a specific overload. // Otherwise it doesn't typecheck. - const resp = await got(url, options as GotJSONOptions); + const resp = await got(url, { ...options, hooks } as GotJSONOptions); const duration = resp.timings.phases.total || /* istanbul ignore next: can't be tested */ 0; From 6a0f593db78bbb120083c03203879485378ebc87 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 7 Nov 2021 02:03:11 +0100 Subject: [PATCH 006/248] docs: clarify GitHub team review assignment (#12536) --- docs/usage/configuration-options.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 049774b458ac85..d5acec9a848113 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2241,7 +2241,15 @@ By default, `renovate` will update to a version greater than `latest` only if th ## reviewers Must be valid usernames. -If on GitHub and assigning a team to review, use the prefix `team:`, e.g. provide a value like `team:someteam`. + +If on GitHub and assigning a team to review, you must use the prefix `team:` and add the _last part_ of the team name. +Say the full team name on GitHub is `@organization/foo`, then you'd set the config option like this: + +```json +{ + "reviewers": "team:foo" +} +``` ## reviewersFromCodeOwners From 84704c6d8b79b1965abde602e54e0885bd2f00ff Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 7 Nov 2021 10:17:21 +0300 Subject: [PATCH 007/248] fix(gradle): Enhance parsing (#12534) --- lib/manager/gradle/shallow/extract.spec.ts | 14 ++--- lib/manager/gradle/shallow/extract.ts | 3 +- lib/manager/gradle/shallow/parser.spec.ts | 58 +++++++++++++++++++++ lib/manager/gradle/shallow/parser.ts | 59 ++++++++++++++++++++-- lib/manager/gradle/shallow/utils.spec.ts | 22 +++++++- lib/manager/gradle/shallow/utils.ts | 42 ++++++++++++--- 6 files changed, 176 insertions(+), 22 deletions(-) diff --git a/lib/manager/gradle/shallow/extract.spec.ts b/lib/manager/gradle/shallow/extract.spec.ts index 951001c92c74ba..c0a68d4b982ab7 100644 --- a/lib/manager/gradle/shallow/extract.spec.ts +++ b/lib/manager/gradle/shallow/extract.spec.ts @@ -61,12 +61,12 @@ describe('manager/gradle/shallow/extract', () => { }, ], }, - { packageFile: 'build.gradle', deps: [] }, { datasource: 'maven', deps: [], packageFile: 'settings.gradle', }, + { packageFile: 'build.gradle', deps: [] }, ]); }); @@ -88,6 +88,11 @@ describe('manager/gradle/shallow/extract', () => { packageFile: 'gradle.properties', deps: [], }, + { + datasource: 'maven', + deps: [], + packageFile: 'settings.gradle', + }, { packageFile: 'build.gradle', deps: [ @@ -101,11 +106,6 @@ describe('manager/gradle/shallow/extract', () => { }, ], }, - { - datasource: 'maven', - deps: [], - packageFile: 'settings.gradle', - }, ]); }); @@ -164,12 +164,12 @@ describe('manager/gradle/shallow/extract', () => { }, ], }, - { packageFile: 'build.gradle', deps: [] }, { datasource: 'maven', deps: [], packageFile: 'settings.gradle', }, + { packageFile: 'build.gradle', deps: [] }, ]); }); diff --git a/lib/manager/gradle/shallow/extract.ts b/lib/manager/gradle/shallow/extract.ts index 3ed9208a144266..d233e30f69dba4 100644 --- a/lib/manager/gradle/shallow/extract.ts +++ b/lib/manager/gradle/shallow/extract.ts @@ -46,7 +46,8 @@ export async function extractAllPackageFiles( const registry: VariableRegistry = {}; const packageFilesByName: Record = {}; const registryUrls = []; - for (const packageFile of reorderFiles(packageFiles)) { + const reorderedFiles = reorderFiles(packageFiles); + for (const packageFile of reorderedFiles) { packageFilesByName[packageFile] = { packageFile, datasource, diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index c3c439f0af916e..0437a3aef1eaf5 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -1,4 +1,5 @@ import { loadFixture } from '../../../../test/util'; +import { SkipReason } from '../../../types'; import { GOOGLE_REPO, GRADLE_PLUGIN_PORTAL_REPO, @@ -45,6 +46,52 @@ describe('manager/gradle/shallow/parser', () => { ({ deps } = parseGradle('version = "1.2.3"\n"foo:bar:$version@@@"')); expect(deps).toBeEmpty(); + + ({ deps } = parseGradle( + // eslint-disable-next-line no-template-curly-in-string + ['versions.foobar = "1.2.3"', '"foo:bar:${versions.foobar}"'].join('\n') + )); + expect(deps).toMatchObject([ + { + depName: 'foo:bar', + currentValue: '1.2.3', + groupName: 'versions.foobar', + }, + ]); + + ({ deps } = parseGradle( + ['versions.foobar = "1.2.3"', '"foo:bar:$versions.foobar"'].join('\n') + )); + expect(deps).toMatchObject([ + { + depName: 'foo:bar', + currentValue: '1.2.3', + groupName: 'versions.foobar', + }, + ]); + + expect( + parseGradle('foo.bar = "foo:bar:1.2.3"', {}, 'versions.gradle') + ).toMatchObject({ + vars: { + 'foo.bar': { + fileReplacePosition: 11, + key: 'foo.bar', + packageFile: 'versions.gradle', + value: 'foo:bar:1.2.3', + }, + }, + deps: [ + { + depName: 'foo:bar', + currentValue: '1.2.3', + groupName: 'foo.bar', + managerData: { + fileReplacePosition: 19, + }, + }, + ], + }); }); it('parses registryUrls', () => { let urls; @@ -148,6 +195,17 @@ describe('manager/gradle/shallow/parser', () => { currentValue: '1.2.3', }, ]); + + ({ deps } = parseGradle( + 'createXmlValueRemover("defaults", "integer", "integer")' + )); + expect(deps).toMatchObject([ + { + depName: 'defaults:integer', + currentValue: 'integer', + skipReason: SkipReason.Ignored, + }, + ]); }); it('parses plugin', () => { let deps; diff --git a/lib/manager/gradle/shallow/parser.ts b/lib/manager/gradle/shallow/parser.ts index 6c913197f089b4..33c49dec9f376e 100644 --- a/lib/manager/gradle/shallow/parser.ts +++ b/lib/manager/gradle/shallow/parser.ts @@ -113,14 +113,32 @@ function handleAssignment({ packageFile, tokenMap, }: SyntaxHandlerInput): SyntaxHandlerOutput { - const { keyToken, valToken } = tokenMap; - const variableData: VariableData = { - key: keyToken.value, + const { objectToken, keyToken, valToken } = tokenMap; + const obj = objectToken?.value; + const key = obj ? `${obj}.${keyToken.value}` : keyToken.value; + + const dep = parseDependencyString(valToken.value); + if (dep) { + dep.groupName = key; + dep.managerData = { + fileReplacePosition: valToken.offset + dep.depName.length + 1, + packageFile, + }; + } + + const varData: VariableData = { + key, value: valToken.value, fileReplacePosition: valToken.offset, packageFile, }; - return { vars: { [variableData.key]: variableData } }; + + const result: SyntaxHandlerOutput = { + vars: { [key]: varData }, + deps: dep ? [dep] : [], + }; + + return result; } function processDepString({ @@ -230,6 +248,8 @@ function processPredefinedRegistryUrl({ return { urls: [registryUrl] }; } +const annoyingMethods = new Set(['createXmlValueRemover']); + function processLongFormDep({ tokenMap, variables, @@ -253,12 +273,29 @@ function processLongFormDep({ packageFile, }; } + const methodName = tokenMap.methodName?.value; + if (annoyingMethods.has(methodName)) { + dep.skipReason = SkipReason.Ignored; + } + return { deps: [dep] }; } return null; } const matcherConfigs: SyntaxMatchConfig[] = [ + { + // foo.bar = 'baz' + matchers: [ + { matchType: TokenType.Word, tokenMapKey: 'objectToken' }, + { matchType: TokenType.Dot }, + { matchType: TokenType.Word, tokenMapKey: 'keyToken' }, + { matchType: TokenType.Assignment }, + { matchType: TokenType.String, tokenMapKey: 'valToken' }, + endOfInstruction, + ], + handler: handleAssignment, + }, { // foo = 'bar' matchers: [ @@ -465,6 +502,20 @@ const matcherConfigs: SyntaxMatchConfig[] = [ ], handler: processLongFormDep, }, + { + // fooBarBaz("com.example", "my.dependency", "1.2.3") + matchers: [ + { matchType: TokenType.Word, tokenMapKey: 'methodName' }, + { matchType: TokenType.LeftParen }, + { matchType: potentialStringTypes, tokenMapKey: 'groupId' }, + { matchType: TokenType.Comma }, + { matchType: potentialStringTypes, tokenMapKey: 'artifactId' }, + { matchType: TokenType.Comma }, + { matchType: potentialStringTypes, tokenMapKey: 'version' }, + { matchType: TokenType.RightParen }, + ], + handler: processLongFormDep, + }, { // ("com.example", "my.dependency", "1.2.3") matchers: [ diff --git a/lib/manager/gradle/shallow/utils.spec.ts b/lib/manager/gradle/shallow/utils.spec.ts index 5dfa16dec5d260..9801792639d115 100644 --- a/lib/manager/gradle/shallow/utils.spec.ts +++ b/lib/manager/gradle/shallow/utils.spec.ts @@ -98,23 +98,41 @@ describe('manager/gradle/shallow/utils', () => { }); it('reorderFiles', () => { - expect(reorderFiles(['a.gradle', 'b.gradle', 'a.gradle'])).toStrictEqual([ + expect( + reorderFiles([ + 'build.gradle', + 'a.gradle', + 'b.gradle', + 'a.gradle', + 'versions.gradle', + ]) + ).toStrictEqual([ + 'versions.gradle', 'a.gradle', 'a.gradle', 'b.gradle', + 'build.gradle', ]); expect( reorderFiles([ 'a/b/c/build.gradle', + 'a/b/versions.gradle', 'a/build.gradle', + 'versions.gradle', 'a/b/build.gradle', + 'a/versions.gradle', 'build.gradle', + 'a/b/c/versions.gradle', ]) ).toStrictEqual([ + 'versions.gradle', 'build.gradle', + 'a/versions.gradle', 'a/build.gradle', + 'a/b/versions.gradle', 'a/b/build.gradle', + 'a/b/c/versions.gradle', 'a/b/c/build.gradle', ]); @@ -146,8 +164,8 @@ describe('manager/gradle/shallow/utils', () => { 'gradle.properties', 'a.gradle', 'b.gradle', - 'build.gradle', 'c.gradle', + 'build.gradle', 'a/gradle.properties', 'a/build.gradle', 'a/b/gradle.properties', diff --git a/lib/manager/gradle/shallow/utils.ts b/lib/manager/gradle/shallow/utils.ts index c9c2a36a795520..3c7e15171d4037 100644 --- a/lib/manager/gradle/shallow/utils.ts +++ b/lib/manager/gradle/shallow/utils.ts @@ -95,9 +95,23 @@ export function interpolateString( return resolvedSubstrings.join(''); } +const gradleVersionsFileRegex = regEx('^versions\\.gradle(?:\\.kts)?$', 'i'); +const gradleBuildFileRegex = regEx('^build\\.gradle(?:\\.kts)?$', 'i'); +const gradleFileRegex = regEx('\\.gradle(?:\\.kts)?$', 'i'); + +export function isGradleVersionsFile(path: string): boolean { + const filename = upath.basename(path); + return gradleVersionsFileRegex.test(filename); +} + +export function isGradleBuildFile(path: string): boolean { + const filename = upath.basename(path); + return gradleBuildFileRegex.test(filename); +} + export function isGradleFile(path: string): boolean { - const filename = upath.basename(path).toLowerCase(); - return filename.endsWith('.gradle') || filename.endsWith('.gradle.kts'); + const filename = upath.basename(path); + return gradleFileRegex.test(filename); } export function isPropsFile(path: string): boolean { @@ -114,6 +128,19 @@ export function toAbsolutePath(packageFile: string): string { return upath.join(packageFile.replace(regEx(/^[/\\]*/), '/')); } +function getFileRank(filename: string): number { + if (isPropsFile(filename)) { + return 0; + } + if (isGradleVersionsFile(filename)) { + return 1; + } + if (isGradleBuildFile(filename)) { + return 3; + } + return 2; +} + export function reorderFiles(packageFiles: string[]): string[] { return packageFiles.sort((x, y) => { const xAbs = toAbsolutePath(x); @@ -123,19 +150,18 @@ export function reorderFiles(packageFiles: string[]): string[] { const yDir = upath.dirname(yAbs); if (xDir === yDir) { - if ( - (isGradleFile(xAbs) && isGradleFile(yAbs)) || - (isPropsFile(xAbs) && isPropsFile(yAbs)) - ) { + const xRank = getFileRank(xAbs); + const yRank = getFileRank(yAbs); + if (xRank === yRank) { if (xAbs > yAbs) { return 1; } if (xAbs < yAbs) { return -1; } - } else if (isGradleFile(xAbs)) { + } else if (xRank > yRank) { return 1; - } else if (isGradleFile(yAbs)) { + } else if (yRank > xRank) { return -1; } } else if (xDir.startsWith(yDir)) { From 6224af558d4897712953403429ca0682a79374e9 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 7 Nov 2021 18:34:42 +0300 Subject: [PATCH 008/248] test(workers): Refactor snapshot tests (#12542) --- .../dependency-dashboard.spec.ts.snap | 12 --- .../__snapshots__/index.spec.ts.snap | 3 - .../repository/dependency-dashboard.spec.ts | 11 ++- .../extract/__snapshots__/index.spec.ts.snap | 9 --- .../__snapshots__/manager-files.spec.ts.snap | 17 ---- lib/workers/repository/extract/index.spec.ts | 3 +- .../repository/extract/manager-files.spec.ts | 24 +++++- lib/workers/repository/index.spec.ts | 3 +- .../init/__snapshots__/index.spec.ts.snap | 3 - .../init/__snapshots__/merge.spec.ts.snap | 76 ----------------- lib/workers/repository/init/index.spec.ts | 3 +- lib/workers/repository/init/merge.spec.ts | 81 ++++++++++++------- .../repository/init/vulnerability.spec.ts | 12 ++- .../branch/__snapshots__/index.spec.ts.snap | 16 ---- .../onboarding/branch/index.spec.ts | 23 +++--- .../pr/__snapshots__/base-branch.spec.ts.snap | 9 --- .../config-description.spec.ts.snap | 17 ---- .../errors-warnings.spec.ts.snap | 41 ---------- .../pr/__snapshots__/pr-list.spec.ts.snap | 60 -------------- .../onboarding/pr/base-branch.spec.ts | 10 ++- .../onboarding/pr/config-description.spec.ts | 19 ++++- .../onboarding/pr/errors-warnings.spec.ts | 43 ++++++++-- .../repository/onboarding/pr/pr-list.spec.ts | 62 ++++++++++++-- .../__snapshots__/deprecated.spec.ts.snap | 23 ------ .../__snapshots__/extract-update.spec.ts.snap | 18 ----- .../repository/process/deprecated.spec.ts | 5 +- .../repository/process/extract-update.spec.ts | 15 +++- 27 files changed, 235 insertions(+), 383 deletions(-) delete mode 100644 lib/workers/repository/__snapshots__/index.spec.ts.snap delete mode 100644 lib/workers/repository/extract/__snapshots__/index.spec.ts.snap delete mode 100644 lib/workers/repository/init/__snapshots__/index.spec.ts.snap delete mode 100644 lib/workers/repository/init/__snapshots__/merge.spec.ts.snap delete mode 100644 lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap delete mode 100644 lib/workers/repository/onboarding/pr/__snapshots__/base-branch.spec.ts.snap delete mode 100644 lib/workers/repository/onboarding/pr/__snapshots__/errors-warnings.spec.ts.snap delete mode 100644 lib/workers/repository/onboarding/pr/__snapshots__/pr-list.spec.ts.snap delete mode 100644 lib/workers/repository/process/__snapshots__/deprecated.spec.ts.snap delete mode 100644 lib/workers/repository/process/__snapshots__/extract-update.spec.ts.snap diff --git a/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap b/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap index 02d286d9fd624d..73af65201bc704 100644 --- a/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap +++ b/lib/workers/repository/__snapshots__/dependency-dashboard.spec.ts.snap @@ -59,15 +59,3 @@ These updates are awaiting their schedule. Click on a checkbox to get an update " `; - -exports[`workers/repository/dependency-dashboard readDashboardBody() reads dashboard body 1`] = ` -Object { - "dependencyDashboardChecks": Object { - "branchName1": "approve", - }, - "dependencyDashboardIssue": 1, - "dependencyDashboardRebaseAllOpen": true, - "dependencyDashboardTitle": "Dependency Dashboard", - "prCreation": "approval", -} -`; diff --git a/lib/workers/repository/__snapshots__/index.spec.ts.snap b/lib/workers/repository/__snapshots__/index.spec.ts.snap deleted file mode 100644 index b51587e46bcac5..00000000000000 --- a/lib/workers/repository/__snapshots__/index.spec.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/index renovateRepository() runs 1`] = `undefined`; diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts index ef16629b7a969c..ac1c353cbe2202 100644 --- a/lib/workers/repository/dependency-dashboard.spec.ts +++ b/lib/workers/repository/dependency-dashboard.spec.ts @@ -53,8 +53,15 @@ describe('workers/repository/dependency-dashboard', () => { '\n\n - [x] ', }); await dependencyDashboard.readDashboardBody(conf); - // FIXME: explicit assert condition - expect(conf).toMatchSnapshot(); + expect(conf).toEqual({ + dependencyDashboardChecks: { + branchName1: 'approve', + }, + dependencyDashboardIssue: 1, + dependencyDashboardRebaseAllOpen: true, + dependencyDashboardTitle: 'Dependency Dashboard', + prCreation: 'approval', + }); }); }); diff --git a/lib/workers/repository/extract/__snapshots__/index.spec.ts.snap b/lib/workers/repository/extract/__snapshots__/index.spec.ts.snap deleted file mode 100644 index 310997713ce6df..00000000000000 --- a/lib/workers/repository/extract/__snapshots__/index.spec.ts.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/extract/index extractAllDependencies() skips non-enabled managers 1`] = ` -Object { - "npm": Array [ - Object {}, - ], -} -`; diff --git a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap index 281f2250844f50..125d5e754a4b09 100644 --- a/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap +++ b/lib/workers/repository/extract/__snapshots__/manager-files.spec.ts.snap @@ -33,20 +33,3 @@ Array [ }, ] `; - -exports[`workers/repository/extract/manager-files getManagerPackageFiles() returns files with extractPackageFile 1`] = ` -Array [ - Object { - "deps": Array [ - Object { - "depIndex": 0, - }, - Object { - "depIndex": 1, - "replaceString": "abc", - }, - ], - "packageFile": "Dockerfile", - }, -] -`; diff --git a/lib/workers/repository/extract/index.spec.ts b/lib/workers/repository/extract/index.spec.ts index 2e75237e523db3..f7afcf2bc2d548 100644 --- a/lib/workers/repository/extract/index.spec.ts +++ b/lib/workers/repository/extract/index.spec.ts @@ -27,8 +27,7 @@ describe('workers/repository/extract/index', () => { config.enabledManagers = ['npm']; managerFiles.getManagerPackageFiles.mockResolvedValue([{} as never]); const res = await extractAllDependencies(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toEqual({ npm: [{}] }); }); it('warns if no packages found for a enabled manager', async () => { diff --git a/lib/workers/repository/extract/manager-files.spec.ts b/lib/workers/repository/extract/manager-files.spec.ts index c83f5a55f7ad60..79f5b14cbee4ee 100644 --- a/lib/workers/repository/extract/manager-files.spec.ts +++ b/lib/workers/repository/extract/manager-files.spec.ts @@ -47,8 +47,12 @@ describe('workers/repository/extract/manager-files', () => { deps: [{}, { replaceString: 'abc' }], })) as never; const res = await getManagerPackageFiles(managerConfig); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toEqual([ + { + packageFile: 'Dockerfile', + deps: [{ depIndex: 0 }, { depIndex: 1, replaceString: 'abc' }], + }, + ]); }); it('returns files with extractAllPackageFiles', async () => { const managerConfig = { @@ -61,8 +65,20 @@ describe('workers/repository/extract/manager-files', () => { '{"dependencies":{"chalk":"2.0.0"}}' ); const res = await getManagerPackageFiles(managerConfig); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot([ + { + packageFile: 'package.json', + packageJsonType: 'app', + deps: [ + { + currentValue: '2.0.0', + datasource: 'npm', + depName: 'chalk', + depType: 'dependencies', + }, + ], + }, + ]); }); }); }); diff --git a/lib/workers/repository/index.spec.ts b/lib/workers/repository/index.spec.ts index 28fda468626ce3..212de3ee05947e 100644 --- a/lib/workers/repository/index.spec.ts +++ b/lib/workers/repository/index.spec.ts @@ -23,8 +23,7 @@ describe('workers/repository/index', () => { it('runs', async () => { process.extractDependencies.mockResolvedValue(mock()); const res = await renovateRepository(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toBeUndefined(); }); }); }); diff --git a/lib/workers/repository/init/__snapshots__/index.spec.ts.snap b/lib/workers/repository/init/__snapshots__/index.spec.ts.snap deleted file mode 100644 index 802c8eb539672e..00000000000000 --- a/lib/workers/repository/init/__snapshots__/index.spec.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/init/index initRepo runs 1`] = `Object {}`; diff --git a/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap b/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap deleted file mode 100644 index 2271e01caa04df..00000000000000 --- a/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap +++ /dev/null @@ -1,76 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/init/merge detectRepoFileConfig() finds .github/renovate.json 1`] = ` -Object { - "configFileName": ".github/renovate.json", - "configFileParsed": Object {}, -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() finds .gitlab/renovate.json 1`] = ` -Object { - "configFileName": ".gitlab/renovate.json", - "configFileParsed": Object {}, -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() finds .renovaterc.json 1`] = ` -Object { - "configFileName": ".renovaterc.json", - "configFileParsed": Object {}, -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() finds .renovaterc.json 2`] = ` -Object { - "configFileName": ".renovaterc.json", - "configFileParsed": "{\\"something\\":\\"new\\"}", -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() finds and parse renovate.json5 1`] = ` -Object { - "configFileName": "renovate.json5", - "configFileParsed": Object {}, -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() returns config if not found 1`] = `Object {}`; - -exports[`workers/repository/init/merge detectRepoFileConfig() returns error if cannot parse 1`] = ` -Object { - "configFileName": "renovate.json", - "configFileParseError": Object { - "validationError": "Invalid JSON (parsing failed)", - "validationMessage": "Syntax error near cannot par", - }, -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() throws error if duplicate keys 1`] = ` -Object { - "configFileName": ".renovaterc", - "configFileParseError": Object { - "validationError": "Duplicate keys in JSON", - "validationMessage": "\\"Syntax error: duplicated keys \\\\\\"enabled\\\\\\" near \\\\\\": false }\\"", - }, -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() uses package.json config if found 1`] = ` -Object { - "configFileName": "package.json", - "configFileParsed": Object { - "prHourlyLimit": 10, - }, -} -`; - -exports[`workers/repository/init/merge detectRepoFileConfig() uses package.json config if found 2`] = ` -Object { - "configFileName": "package.json", - "configFileParsed": undefined, -} -`; - -exports[`workers/repository/init/merge mergeRenovateConfig() throws error if misconfigured 1`] = `[Error: config-validation]`; diff --git a/lib/workers/repository/init/index.spec.ts b/lib/workers/repository/init/index.spec.ts index 16b7e0bbe36987..d21970e174a77d 100644 --- a/lib/workers/repository/init/index.spec.ts +++ b/lib/workers/repository/init/index.spec.ts @@ -38,8 +38,7 @@ describe('workers/repository/init/index', () => { merge.mergeRenovateConfig.mockResolvedValueOnce({}); secrets.applySecretsToConfig.mockReturnValueOnce({} as never); const renovateConfig = await initRepo({}); - // FIXME: explicit assert condition - expect(renovateConfig).toMatchSnapshot(); + expect(renovateConfig).toEqual({}); }); it('warns on unsupported options', async () => { apis.initApis.mockResolvedValue({} as never); diff --git a/lib/workers/repository/init/merge.spec.ts b/lib/workers/repository/init/merge.spec.ts index 937ef640628ec3..fed851fe5f3440 100644 --- a/lib/workers/repository/init/merge.spec.ts +++ b/lib/workers/repository/init/merge.spec.ts @@ -41,8 +41,7 @@ describe('workers/repository/init/merge', () => { it('returns config if not found', async () => { git.getFileList.mockResolvedValue(['package.json']); fs.readLocalFile.mockResolvedValue('{}'); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({}); }); it('uses package.json config if found', async () => { git.getFileList.mockResolvedValue(['package.json']); @@ -54,9 +53,14 @@ describe('workers/repository/init/merge', () => { }); fs.readLocalFile.mockResolvedValue(pJson); platform.getJsonFile.mockResolvedValueOnce(pJson); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: 'package.json', + configFileParsed: { prHourlyLimit: 10 }, + }); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: 'package.json', + configFileParsed: undefined, + }); }); it('massages package.json renovate string', async () => { git.getFileList.mockResolvedValue(['package.json']); @@ -66,38 +70,45 @@ describe('workers/repository/init/merge', () => { }); fs.readLocalFile.mockResolvedValue(pJson); platform.getJsonFile.mockResolvedValueOnce(pJson); - expect(await detectRepoFileConfig()).toMatchInlineSnapshot(` - Object { - "configFileName": "package.json", - "configFileParsed": Object { - "extends": Array [ - "github>renovatebot/renovate", - ], - }, - } - `); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: 'package.json', + configFileParsed: { extends: ['github>renovatebot/renovate'] }, + }); }); it('returns error if cannot parse', async () => { git.getFileList.mockResolvedValue(['package.json', 'renovate.json']); fs.readLocalFile.mockResolvedValue('cannot parse'); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: 'renovate.json', + configFileParseError: { + validationError: 'Invalid JSON (parsing failed)', + validationMessage: 'Syntax error near cannot par', + }, + }); }); it('throws error if duplicate keys', async () => { git.getFileList.mockResolvedValue(['package.json', '.renovaterc']); fs.readLocalFile.mockResolvedValue( '{ "enabled": true, "enabled": false }' ); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: '.renovaterc', + configFileParseError: { + validationError: 'Duplicate keys in JSON', + validationMessage: + '"Syntax error: duplicated keys \\"enabled\\" near \\": false }"', + }, + }); }); it('finds and parse renovate.json5', async () => { git.getFileList.mockResolvedValue(['package.json', 'renovate.json5']); fs.readLocalFile.mockResolvedValue(`{ // this is json5 format }`); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: 'renovate.json5', + configFileParsed: {}, + }); }); it('finds .github/renovate.json', async () => { git.getFileList.mockResolvedValue([ @@ -105,8 +116,10 @@ describe('workers/repository/init/merge', () => { '.github/renovate.json', ]); fs.readLocalFile.mockResolvedValue('{}'); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: '.github/renovate.json', + configFileParsed: {}, + }); }); it('finds .gitlab/renovate.json', async () => { git.getFileList.mockResolvedValue([ @@ -114,16 +127,25 @@ describe('workers/repository/init/merge', () => { '.gitlab/renovate.json', ]); fs.readLocalFile.mockResolvedValue('{}'); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: '.gitlab/renovate.json', + configFileParsed: {}, + }); }); it('finds .renovaterc.json', async () => { git.getFileList.mockResolvedValue(['package.json', '.renovaterc.json']); fs.readLocalFile.mockResolvedValue('{}'); platform.getJsonFile.mockResolvedValueOnce('{"something":"new"}'); - // FIXME: explicit assert condition - expect(await detectRepoFileConfig()).toMatchSnapshot(); - expect(await detectRepoFileConfig()).toMatchSnapshot(); + expect(await detectRepoFileConfig()).toEqual({ + configFileName: '.renovaterc.json', + configFileParsed: {}, + }); + expect(await detectRepoFileConfig()).toMatchInlineSnapshot(` + Object { + "configFileName": ".renovaterc.json", + "configFileParsed": "{\\"something\\":\\"new\\"}", + } + `); }); }); describe('checkForRepoConfigError', () => { @@ -158,8 +180,7 @@ describe('workers/repository/init/merge', () => { e = err; } expect(e).toBeDefined(); - // FIXME: explicit assert condition - expect(e).toMatchSnapshot(); + expect(e.toString()).toEqual('Error: config-validation'); }); it('migrates nested config', async () => { git.getFileList.mockResolvedValue(['renovate.json']); diff --git a/lib/workers/repository/init/vulnerability.spec.ts b/lib/workers/repository/init/vulnerability.spec.ts index c894e046eb5d48..2bef7df68734d3 100644 --- a/lib/workers/repository/init/vulnerability.spec.ts +++ b/lib/workers/repository/init/vulnerability.spec.ts @@ -289,8 +289,16 @@ describe('workers/repository/init/vulnerability', () => { const res = await detectVulnerabilityAlerts(config); expect(res.packageRules).toMatchSnapshot(); expect(res.packageRules).toHaveLength(3); - // FIXME: explicit assert condition - expect(res.remediations).toMatchSnapshot(); + expect(res.remediations).toMatchSnapshot({ + 'backend/package-lock.json': [ + { + currentVersion: '1.8.2', + datasource: 'npm', + depName: 'electron', + newVersion: '1.8.3', + }, + ], + }); }); }); }); diff --git a/lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap b/lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap deleted file mode 100644 index b94efadcf3a66c..00000000000000 --- a/lib/workers/repository/onboarding/branch/__snapshots__/index.spec.ts.snap +++ /dev/null @@ -1,16 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/onboarding/branch/index checkOnboardingBranch has default onboarding config 1`] = ` -"{ - \\"$schema\\": \\"https://docs.renovatebot.com/renovate-schema.json\\" -} -" -`; - -exports[`workers/repository/onboarding/branch/index checkOnboardingBranch uses discovered onboarding config 1`] = ` -"{ - \\"$schema\\": \\"https://docs.renovatebot.com/renovate-schema.json\\", - \\"extends: [\\"some/renovate-config\\"] -} -" -`; diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts index 08e7117d008bcb..233f9f69848662 100644 --- a/lib/workers/repository/onboarding/branch/index.spec.ts +++ b/lib/workers/repository/onboarding/branch/index.spec.ts @@ -71,10 +71,12 @@ describe('workers/repository/onboarding/branch/index', () => { git.getFileList.mockResolvedValue(['package.json']); fs.readLocalFile.mockResolvedValue('{}'); await checkOnboardingBranch(config); - // FIXME: explicit assert condition - expect( - git.commitFiles.mock.calls[0][0].files[0].contents - ).toMatchSnapshot(); + const contents = + git.commitFiles.mock.calls[0][0].files[0].contents?.toString(); + expect(contents).toBeJsonString(); + expect(JSON.parse(contents)).toEqual({ + $schema: 'https://docs.renovatebot.com/renovate-schema.json', + }); }); it('uses discovered onboarding config', async () => { configModule.getOnboardingConfig.mockResolvedValue({ @@ -83,7 +85,7 @@ describe('workers/repository/onboarding/branch/index', () => { configModule.getOnboardingConfigContents.mockResolvedValue( '{\n' + ' "$schema": "https://docs.renovatebot.com/renovate-schema.json",\n' + - ' "extends: ["some/renovate-config"]\n' + + ' "extends": ["some/renovate-config"]\n' + '}\n' ); git.getFileList.mockResolvedValue(['package.json']); @@ -98,10 +100,13 @@ describe('workers/repository/onboarding/branch/index', () => { }, configFileNames[0] ); - // FIXME: explicit assert condition - expect( - git.commitFiles.mock.calls[0][0].files[0].contents - ).toMatchSnapshot(); + const contents = + git.commitFiles.mock.calls[0][0].files[0].contents?.toString(); + expect(contents).toBeJsonString(); + expect(JSON.parse(contents)).toEqual({ + $schema: 'https://docs.renovatebot.com/renovate-schema.json', + extends: ['some/renovate-config'], + }); }); it('handles skipped onboarding combined with requireConfig = false', async () => { config.requireConfig = false; diff --git a/lib/workers/repository/onboarding/pr/__snapshots__/base-branch.spec.ts.snap b/lib/workers/repository/onboarding/pr/__snapshots__/base-branch.spec.ts.snap deleted file mode 100644 index c403cbb8b89076..00000000000000 --- a/lib/workers/repository/onboarding/pr/__snapshots__/base-branch.spec.ts.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/onboarding/pr/base-branch getBaseBranchDesc() describes baseBranch 1`] = ` -"You have configured Renovate to use branch \`some-branch\` as base branch. - -" -`; - -exports[`workers/repository/onboarding/pr/base-branch getBaseBranchDesc() describes baseBranches 1`] = `"You have configured Renovate to use the following baseBranches: \`some-branch\`, \`some-other-branch\`."`; diff --git a/lib/workers/repository/onboarding/pr/__snapshots__/config-description.spec.ts.snap b/lib/workers/repository/onboarding/pr/__snapshots__/config-description.spec.ts.snap index 6580a0b369f5a3..d8eaf6ade3ebbd 100644 --- a/lib/workers/repository/onboarding/pr/__snapshots__/config-description.spec.ts.snap +++ b/lib/workers/repository/onboarding/pr/__snapshots__/config-description.spec.ts.snap @@ -1,20 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`workers/repository/onboarding/pr/config-description getConfigDesc() assignees, labels and schedule 1`] = ` -" -### Configuration Summary - -Based on the default config's presets, Renovate will: - - - Start dependency updates only once this onboarding PR is merged - - Run Renovate on following schedule: before 5am - -🔡 Would you like to change the way Renovate is upgrading your dependencies? Simply edit the \`renovate.json\` in this branch with your custom config and the list of Pull Requests in the \\"What to Expect\\" section below will be updated the next time Renovate runs. - ---- -" -`; - exports[`workers/repository/onboarding/pr/config-description getConfigDesc() contains the onboardingConfigFileName if set 1`] = ` " ### Configuration Summary @@ -77,5 +62,3 @@ Based on the default config's presets, Renovate will: --- " `; - -exports[`workers/repository/onboarding/pr/config-description getConfigDesc() returns empty 1`] = `""`; diff --git a/lib/workers/repository/onboarding/pr/__snapshots__/errors-warnings.spec.ts.snap b/lib/workers/repository/onboarding/pr/__snapshots__/errors-warnings.spec.ts.snap deleted file mode 100644 index 0262a1986aaba4..00000000000000 --- a/lib/workers/repository/onboarding/pr/__snapshots__/errors-warnings.spec.ts.snap +++ /dev/null @@ -1,41 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/onboarding/pr/errors-warnings getDepWarnings() returns warning text 1`] = ` -" ---- - -### ⚠ Dependency Lookup Warnings ⚠ - -Please correct - or verify that you can safely ignore - these lookup failures before you merge this PR. - -- \`Warning 1\` -- \`Warning 2\` - -Files affected: \`package.json\`, \`backend/package.json\`, \`Dockerfile\` - -" -`; - -exports[`workers/repository/onboarding/pr/errors-warnings getErrors() returns error text 1`] = ` -" -# Errors (1) - -Renovate has found errors that you should fix (in this branch) before finishing this PR. - -- \`renovate.json\`: Failed to parse - ---- -" -`; - -exports[`workers/repository/onboarding/pr/errors-warnings getWarnings() returns warning text 1`] = ` -" -# Warnings (1) - -Please correct - or verify that you can safely ignore - these warnings before you merge this PR. - -- \`foo\`: Failed to look up dependency - ---- -" -`; diff --git a/lib/workers/repository/onboarding/pr/__snapshots__/pr-list.spec.ts.snap b/lib/workers/repository/onboarding/pr/__snapshots__/pr-list.spec.ts.snap deleted file mode 100644 index bc5336ad222400..00000000000000 --- a/lib/workers/repository/onboarding/pr/__snapshots__/pr-list.spec.ts.snap +++ /dev/null @@ -1,60 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/onboarding/pr/pr-list getPrList() handles empty 1`] = ` -" -### What to Expect - -It looks like your repository dependencies are already up-to-date and no Pull Requests will be necessary right away. -" -`; - -exports[`workers/repository/onboarding/pr/pr-list getPrList() handles multiple 1`] = ` -" -### What to Expect - -With your current configuration, Renovate will create 2 Pull Requests: - -
-Pin dependencies - - - Branch name: \`renovate/pin-dependencies\` - - Merge into: \`some-other\` - - Pin [a](https://a) to \`1.1.0\` - - Pin b to \`1.5.3\` - - -
- -
-Update a to v2 - - - Branch name: \`renovate/a-2.x\` - - Upgrade [a](https://a) to \`undefined\` - - -
- -
- -🚸 Branch creation will be limited to maximum 1 per hour, so it doesn't swamp any CI resources or spam the project. See docs for \`prhourlylimit\` for details. - -" -`; - -exports[`workers/repository/onboarding/pr/pr-list getPrList() has special lock file maintenance description 1`] = ` -" -### What to Expect - -With your current configuration, Renovate will create 1 Pull Request: - -
-Lock file maintenance - - - Schedule: [\\"before 5am\\"] - - Branch name: \`renovate/lock-file-maintenance\` - - Regenerate lock files to use latest dependency versions - -
- -" -`; diff --git a/lib/workers/repository/onboarding/pr/base-branch.spec.ts b/lib/workers/repository/onboarding/pr/base-branch.spec.ts index 220da0b7c7731f..f83123c863d8ba 100644 --- a/lib/workers/repository/onboarding/pr/base-branch.spec.ts +++ b/lib/workers/repository/onboarding/pr/base-branch.spec.ts @@ -16,14 +16,16 @@ describe('workers/repository/onboarding/pr/base-branch', () => { it('describes baseBranch', () => { config.baseBranches = ['some-branch']; const res = getBaseBranchDesc(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res.trim()).toEqual( + 'You have configured Renovate to use branch `some-branch` as base branch.' + ); }); it('describes baseBranches', () => { config.baseBranches = ['some-branch', 'some-other-branch']; const res = getBaseBranchDesc(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res.trim()).toEqual( + 'You have configured Renovate to use the following baseBranches: `some-branch`, `some-other-branch`.' + ); }); }); }); diff --git a/lib/workers/repository/onboarding/pr/config-description.spec.ts b/lib/workers/repository/onboarding/pr/config-description.spec.ts index 2229c6c4cc2ff8..76f8f5c1730d82 100644 --- a/lib/workers/repository/onboarding/pr/config-description.spec.ts +++ b/lib/workers/repository/onboarding/pr/config-description.spec.ts @@ -12,8 +12,7 @@ describe('workers/repository/onboarding/pr/config-description', () => { it('returns empty', () => { delete config.description; const res = getConfigDesc(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toEqual(''); }); it('returns a full list', () => { const packageFiles: Record = { @@ -37,8 +36,20 @@ describe('workers/repository/onboarding/pr/config-description', () => { config.labels = ['renovate', 'deps']; config.schedule = ['before 5am']; const res = getConfigDesc(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchInlineSnapshot(` + " + ### Configuration Summary + + Based on the default config's presets, Renovate will: + + - Start dependency updates only once this onboarding PR is merged + - Run Renovate on following schedule: before 5am + + 🔡 Would you like to change the way Renovate is upgrading your dependencies? Simply edit the \`renovate.json\` in this branch with your custom config and the list of Pull Requests in the \\"What to Expect\\" section below will be updated the next time Renovate runs. + + --- + " + `); }); it('contains the onboardingConfigFileName if set', () => { delete config.description; diff --git a/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts b/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts index 7790cbd30704dd..4d04bfc461cdee 100644 --- a/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts +++ b/lib/workers/repository/onboarding/pr/errors-warnings.spec.ts @@ -17,8 +17,17 @@ describe('workers/repository/onboarding/pr/errors-warnings', () => { }, ]; const res = getWarnings(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchInlineSnapshot(` + " + # Warnings (1) + + Please correct - or verify that you can safely ignore - these warnings before you merge this PR. + + - \`foo\`: Failed to look up dependency + + --- + " + `); }); }); describe('getDepWarnings()', () => { @@ -58,8 +67,21 @@ describe('workers/repository/onboarding/pr/errors-warnings', () => { ], }; const res = getDepWarnings(packageFiles); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchInlineSnapshot(` + " + --- + + ### ⚠ Dependency Lookup Warnings ⚠ + + Please correct - or verify that you can safely ignore - these lookup failures before you merge this PR. + + - \`Warning 1\` + - \`Warning 2\` + + Files affected: \`package.json\`, \`backend/package.json\`, \`Dockerfile\` + + " + `); }); }); describe('getErrors()', () => { @@ -76,8 +98,17 @@ describe('workers/repository/onboarding/pr/errors-warnings', () => { }, ]; const res = getErrors(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchInlineSnapshot(` + " + # Errors (1) + + Renovate has found errors that you should fix (in this branch) before finishing this PR. + + - \`renovate.json\`: Failed to parse + + --- + " + `); }); }); }); diff --git a/lib/workers/repository/onboarding/pr/pr-list.spec.ts b/lib/workers/repository/onboarding/pr/pr-list.spec.ts index 7971514845a2ce..c0bef2c4d82603 100644 --- a/lib/workers/repository/onboarding/pr/pr-list.spec.ts +++ b/lib/workers/repository/onboarding/pr/pr-list.spec.ts @@ -12,8 +12,13 @@ describe('workers/repository/onboarding/pr/pr-list', () => { it('handles empty', () => { const branches: BranchConfig[] = []; const res = getPrList(config, branches); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchInlineSnapshot(` + " + ### What to Expect + + It looks like your repository dependencies are already up-to-date and no Pull Requests will be necessary right away. + " + `); }); it('has special lock file maintenance description', () => { const branches = [ @@ -29,8 +34,23 @@ describe('workers/repository/onboarding/pr/pr-list', () => { }, ]; const res = getPrList(config, branches); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchInlineSnapshot(` + " + ### What to Expect + + With your current configuration, Renovate will create 1 Pull Request: + +
+ Lock file maintenance + + - Schedule: [\\"before 5am\\"] + - Branch name: \`renovate/lock-file-maintenance\` + - Regenerate lock files to use latest dependency versions + +
+ + " + `); }); it('handles multiple', () => { const branches = [ @@ -70,8 +90,38 @@ describe('workers/repository/onboarding/pr/pr-list', () => { ]; config.prHourlyLimit = 1; const res = getPrList(config, branches); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchInlineSnapshot(` + " + ### What to Expect + + With your current configuration, Renovate will create 2 Pull Requests: + +
+ Pin dependencies + + - Branch name: \`renovate/pin-dependencies\` + - Merge into: \`some-other\` + - Pin [a](https://a) to \`1.1.0\` + - Pin b to \`1.5.3\` + + +
+ +
+ Update a to v2 + + - Branch name: \`renovate/a-2.x\` + - Upgrade [a](https://a) to \`undefined\` + + +
+ +
+ + 🚸 Branch creation will be limited to maximum 1 per hour, so it doesn't swamp any CI resources or spam the project. See docs for \`prhourlylimit\` for details. + + " + `); }); }); }); diff --git a/lib/workers/repository/process/__snapshots__/deprecated.spec.ts.snap b/lib/workers/repository/process/__snapshots__/deprecated.spec.ts.snap deleted file mode 100644 index e30d27e02a7f8f..00000000000000 --- a/lib/workers/repository/process/__snapshots__/deprecated.spec.ts.snap +++ /dev/null @@ -1,23 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/process/deprecated raiseDeprecationWarnings() raises deprecation warnings 1`] = ` -Array [ - Array [ - Object { - "body": "foo is deprecated - -Affected package file(s): \`package.json\`, \`frontend/package.json\` - -If you don't care about this, you can close this issue and not be warned about \`foo\`'s deprecation again. If you would like to completely disable all future deprecation warnings then add the following to your config: - -\`\`\` -\\"suppressNotifications\\": [\\"deprecationWarningIssues\\"] -\`\`\` - -", - "once": true, - "title": "Dependency deprecation warning: foo (npm)", - }, - ], -] -`; diff --git a/lib/workers/repository/process/__snapshots__/extract-update.spec.ts.snap b/lib/workers/repository/process/__snapshots__/extract-update.spec.ts.snap deleted file mode 100644 index 2b515357e01873..00000000000000 --- a/lib/workers/repository/process/__snapshots__/extract-update.spec.ts.snap +++ /dev/null @@ -1,18 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`workers/repository/process/extract-update extract() runs with baseBranches 1`] = `undefined`; - -exports[`workers/repository/process/extract-update extract() runs with no baseBranches 1`] = ` -Object { - "branchList": Array [ - "branchName", - ], - "branches": Array [ - Object { - "branchName": "some-branch", - "upgrades": Array [], - }, - ], - "packageFiles": undefined, -} -`; diff --git a/lib/workers/repository/process/deprecated.spec.ts b/lib/workers/repository/process/deprecated.spec.ts index dd53179b765795..c9ca70c71537f3 100644 --- a/lib/workers/repository/process/deprecated.spec.ts +++ b/lib/workers/repository/process/deprecated.spec.ts @@ -59,8 +59,9 @@ describe('workers/repository/process/deprecated', () => { ]; platform.getIssueList.mockResolvedValue(mockIssue); await raiseDeprecationWarnings(config, packageFiles); - // FIXME: explicit assert condition - expect(platform.ensureIssue.mock.calls).toMatchSnapshot(); + expect(platform.ensureIssue.mock.calls).toMatchObject([ + [{ once: true, title: 'Dependency deprecation warning: foo (npm)' }], + ]); expect(platform.getIssueList).toHaveBeenCalledTimes(1); expect(platform.ensureIssue).toHaveBeenCalledTimes(1); }); diff --git a/lib/workers/repository/process/extract-update.spec.ts b/lib/workers/repository/process/extract-update.spec.ts index daa9840aadff9a..bd50bd1f76d168 100644 --- a/lib/workers/repository/process/extract-update.spec.ts +++ b/lib/workers/repository/process/extract-update.spec.ts @@ -32,8 +32,16 @@ describe('workers/repository/process/extract-update', () => { git.checkoutBranch.mockResolvedValueOnce('123test'); const packageFiles = await extract(config); const res = await lookup(config, packageFiles); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toEqual({ + branchList: ['branchName'], + branches: [ + { + branchName: 'some-branch', + upgrades: [], + }, + ], + packageFiles: undefined, + }); await expect(update(config, res.branches)).resolves.not.toThrow(); }); it('runs with baseBranches', async () => { @@ -45,8 +53,7 @@ describe('workers/repository/process/extract-update', () => { git.checkoutBranch.mockResolvedValueOnce('123test'); repositoryCache.getCache.mockReturnValueOnce({ scan: {} }); const packageFiles = await extract(config); - // FIXME: explicit assert condition - expect(packageFiles).toMatchSnapshot(); + expect(packageFiles).toBeUndefined(); }); it('uses repository cache', async () => { const packageFiles: Record = {}; From cc190eda1db0fe476b9cf1fcf5f86c85f791df8c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Nov 2021 02:37:49 +0000 Subject: [PATCH 009/248] docs: update references to renovate/renovate to v29 (#12545) 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 a726f1bdac89fd..6fedd98948010d 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:28.20.0 +FROM renovate/renovate:29.2.6 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From 00a8086fcc544d0f3e7539c1e66c5207e4bb041c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Nov 2021 05:27:29 +0000 Subject: [PATCH 010/248] chore(deps): lock file maintenance (#12546) Co-authored-by: Renovate Bot --- yarn.lock | 636 +++++++++++++++++++++++++++++------------------------- 1 file changed, 347 insertions(+), 289 deletions(-) diff --git a/yarn.lock b/yarn.lock index 24b77630d37929..d724e0ac9d8e13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -485,11 +485,16 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" -"@aws-sdk/types@3.38.0", "@aws-sdk/types@^3.1.0": +"@aws-sdk/types@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.38.0.tgz#16b3c2d78512d7f193edb519de46c5ef00fffd2b" integrity sha512-Opux3HLwMlWb7GIJxERsOnmbHrT2A1gsd8aF5zHapWPPH5Z0rYsgTIq64qgim896XlKlOw6/YzhD5CdyNjlQWg== +"@aws-sdk/types@^3.1.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.40.0.tgz#a9d7926fcb9b699bc46be975033559d2293e60d1" + integrity sha512-KpILcfvRaL88TLvo3SY4OuCCg90SvcNLPyjDwUuBqiOyWODjrKShHtAPJzej4CLp92lofh+ul0UnBfV9Jb/5PA== + "@aws-sdk/url-parser@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.38.0.tgz#32bea12a3f4a1e3b4f83987ffb5543347b1b9d14" @@ -782,9 +787,9 @@ js-tokens "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.0.tgz#cf147d7ada0a3655e79bf4b08ee846f00a00a295" - integrity sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A== + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" + integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -969,16 +974,16 @@ minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@iarna/toml@2.2.5": version "2.2.5" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== -"@isaacs/string-locale-compare@^1.0.1", "@isaacs/string-locale-compare@^1.1.0": +"@isaacs/string-locale-compare@*", "@isaacs/string-locale-compare@^1.0.1": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== @@ -1217,21 +1222,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0", "@npmcli/arborist@^2.9.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" - integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== +"@npmcli/arborist@*", "@npmcli/arborist@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.0.4.tgz#a532a7cc430ccbd87c0595a8828f9614f29d2dac" + integrity sha512-5hRkiHF9zu62z6a7CJqhVG5CFUVnbYqvrrcxxEmhxFgyH2ovICyULOrj7nF4VBlfzp7OPu/rveV2ts9iYrn74g== dependencies: "@isaacs/string-locale-compare" "^1.0.1" "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^1.0.2" - "@npmcli/metavuln-calculator" "^1.1.0" + "@npmcli/map-workspaces" "^2.0.0" + "@npmcli/metavuln-calculator" "^2.0.0" "@npmcli/move-file" "^1.1.0" "@npmcli/name-from-folder" "^1.0.1" "@npmcli/node-gyp" "^1.0.1" "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^1.8.2" - bin-links "^2.2.1" + "@npmcli/run-script" "^2.0.0" + bin-links "^2.3.0" cacache "^15.0.3" common-ancestor-path "^1.0.1" json-parse-even-better-errors "^2.3.1" @@ -1242,7 +1247,7 @@ npm-package-arg "^8.1.5" npm-pick-manifest "^6.1.0" npm-registry-fetch "^11.0.0" - pacote "^11.3.5" + pacote "^12.0.0" parse-conflict-json "^1.1.1" proc-log "^1.0.0" promise-all-reject-late "^1.0.0" @@ -1255,12 +1260,12 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": +"@npmcli/ci-detect@*", "@npmcli/ci-detect@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== -"@npmcli/config@^2.3.0": +"@npmcli/config@*": version "2.3.1" resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.1.tgz#41d80ce272831461b5cb158afa110525d4be0fed" integrity sha512-F/8R/Zqun8682TgaCILUNoaVfd1LVaYZ/jcVt9KWzfKpzcPus1zEApAl54PqVqVJbNq6f01QTDQHD6L/n56BXw== @@ -1308,23 +1313,24 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/map-workspaces@^1.0.2", "@npmcli/map-workspaces@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab" - integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q== +"@npmcli/map-workspaces@*", "@npmcli/map-workspaces@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz#e342efbbdd0dad1bba5d7723b674ca668bf8ac5a" + integrity sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g== dependencies: "@npmcli/name-from-folder" "^1.0.1" glob "^7.1.6" minimatch "^3.0.4" read-package-json-fast "^2.0.1" -"@npmcli/metavuln-calculator@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" - integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== +"@npmcli/metavuln-calculator@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" + integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== dependencies: cacache "^15.0.5" - pacote "^11.1.11" + json-parse-even-better-errors "^2.3.1" + pacote "^12.0.0" semver "^7.3.2" "@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": @@ -1345,7 +1351,7 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== -"@npmcli/package-json@^1.0.1": +"@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== @@ -1359,7 +1365,17 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.6": +"@npmcli/run-script@*", "@npmcli/run-script@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" + integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== + dependencies: + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + node-gyp "^8.2.0" + read-package-json-fast "^2.0.1" + +"@npmcli/run-script@^1.8.2": version "1.8.6" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== @@ -1472,6 +1488,7 @@ "@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.3": version "0.0.1" + uid c88253170ce9e9248bc0653197ed2ff1ecf41ac1 resolved "https://github.com/renovatebot/eslint-plugin#c88253170ce9e9248bc0653197ed2ff1ecf41ac1" "@renovate/pep440@1.0.0": @@ -1524,9 +1541,9 @@ parse-json "^5.0.0" "@semantic-release/github@^8.0.0": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.1.tgz#58d6bc5cdb4b4beaa0a106a9a9ad420318144e4f" - integrity sha512-T01lfh4yBZodAeo8t0U+W5hmPYR9BdnfwLDerXnGaYeLXm8+KMx4mQEBAf/UbRVlzmIKTqMx+/s9fY/mSQNV0A== + version "8.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.2.tgz#80114a41f6ec8ab6c0d38a436b48ff3f2223ab16" + integrity sha512-wIbfhOeuxlYzMTjtSAa2xgr54n7ZuPAS2gadyTWBpUt2PNAPgla7A6XxCXJnaKPgfVF0iFfSk3B+KlVKk6ByVg== dependencies: "@octokit/rest" "^18.0.0" "@semantic-release/error" "^2.2.0" @@ -1540,15 +1557,15 @@ https-proxy-agent "^5.0.0" issue-parser "^6.0.0" lodash "^4.17.4" - mime "^2.4.3" + mime "^3.0.0" p-filter "^2.0.0" p-retry "^4.0.0" url-join "^4.0.0" "@semantic-release/npm@^8.0.0": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-8.0.2.tgz#1dc285e4250380bc3259735bf843738c7151f275" - integrity sha512-ky7QczJGExZJnS8wjdhag1EV+T3u/DbcxqpBQOIZu1fcJYKsGxr2uK9guc/H2cg0yFCto5atbuZm2sZmaG5qxg== + version "8.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-8.0.3.tgz#69378ce529bbd263aa8fc899b2d0f874114e0302" + integrity sha512-Qbg7x/O1t3sJqsv2+U0AL4Utgi/ymlCiUdt67Ftz9HL9N8aDML4t2tE0T9MBaYdqwD976hz57DqHHXKVppUBoA== dependencies: "@semantic-release/error" "^3.0.0" aggregate-error "^3.0.0" @@ -1593,9 +1610,9 @@ type-detect "4.0.8" "@sinonjs/fake-timers@^8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz#1c1c9a91419f804e59ae8df316a07dd1c3a76b94" - integrity sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew== + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== dependencies: "@sinonjs/commons" "^1.7.0" @@ -2219,7 +2236,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@1, abbrev@~1.1.1: +abbrev@*, abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -2347,12 +2364,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@~0.3.2: +ansicolors@*, ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= -ansistyles@~0.1.3: +ansistyles@*: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= @@ -2380,7 +2397,7 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archy@~1.0.0: +archy@*: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= @@ -2484,9 +2501,9 @@ asn1.js@^5.0.0: safer-buffer "^2.1.0" asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -2621,7 +2638,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -bin-links@^2.2.1: +bin-links@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== @@ -2698,12 +2715,12 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.16.6: - version "4.17.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.5.tgz#c827bbe172a4c22b123f5e337533ceebadfdd559" - integrity sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA== + version "4.17.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" + integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== dependencies: - caniuse-lite "^1.0.30001271" - electron-to-chromium "^1.3.878" + caniuse-lite "^1.0.30001274" + electron-to-chromium "^1.3.886" escalade "^3.1.1" node-releases "^2.0.1" picocolors "^1.0.0" @@ -2755,7 +2772,7 @@ bunyan@1.8.15: mv "~2" safe-json-stringify "~1" -cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: +cacache@*, cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -2829,10 +2846,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001271: - version "1.0.30001274" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz#26ca36204d15b17601ba6fc35dbdad950a647cc7" - integrity sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew== +caniuse-lite@^1.0.30001274: + version "1.0.30001278" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz#51cafc858df77d966b17f59b5839250b24417fff" + integrity sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg== cardinal@^2.1.1: version "2.1.1" @@ -2847,7 +2864,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@*, chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2897,7 +2914,7 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chownr@^2.0.0: +chownr@*, chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== @@ -2934,15 +2951,15 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= +cli-columns@*: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" -cli-table3@^0.6.0: +cli-table3@*, cli-table3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -3034,7 +3051,7 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -columnify@~1.5.4: +columnify@*: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= @@ -3157,14 +3174,14 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: safe-buffer "~5.1.1" core-js-pure@^3.19.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.0.tgz#db6fdadfdd4dc280ec93b64c3c2e8460e6f10094" - integrity sha512-UEQk8AxyCYvNAs6baNoPqDADv7BX0AmBLGxVsrAifPPx/C8EAzV4Q+2ZUJqVzfI2TQQEZITnwUkWcHpgc/IubQ== + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.1.tgz#edffc1fc7634000a55ba05e95b3f0fe9587a5aa4" + integrity sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ== core-js@^3.6.5: - version "3.19.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.0.tgz#9e40098a9bc326c7e81b486abbd5e12b9d275176" - integrity sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg== + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" + integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== core-util-is@1.0.2: version "1.0.2" @@ -3581,10 +3598,10 @@ editorconfig@0.15.3: semver "^5.6.0" sigmund "^1.0.1" -electron-to-chromium@^1.3.878: - version "1.3.885" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz#c8cec32fbc61364127849ae00f2395a1bae7c454" - integrity sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg== +electron-to-chromium@^1.3.886: + version "1.3.890" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.890.tgz#e7143b659f73dc4d0512d1ae4baeb0fb9e7bc835" + integrity sha512-VWlVXSkv0cA/OOehrEyqjUTHwV8YXCPTfPvbtoeU2aHR21vI4Ejh5aC4AxUwOmbLbBgb6Gd3URZahoCxtBqCYQ== email-addresses@5.0.0: version "5.0.0" @@ -4093,9 +4110,9 @@ extsprintf@1.3.0: integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -4133,7 +4150,7 @@ fast-xml-parser@3.19.0: resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== -fastest-levenshtein@^1.0.12: +fastest-levenshtein@*: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -4442,7 +4459,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@*, glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -4526,7 +4543,7 @@ got@11.8.2, got@^11.7.0: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8: +graceful-fs@*, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -4635,18 +4652,18 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: +hosted-git-info@*, hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -4755,7 +4772,14 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore@5.1.8, ignore@^5.1.4, ignore@^5.1.8: +ignore-walk@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" + integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== + dependencies: + minimatch "^3.0.4" + +ignore@5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -4765,6 +4789,11 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4, ignore@^5.1.8: + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -4814,7 +4843,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@2.0.0, ini@^2.0.0: +ini@*, ini@2.0.0, ini@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== @@ -4824,7 +4853,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^2.0.5: +init-package-json@*: 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== @@ -4924,7 +4953,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-cidr@^4.0.2: +is-cidr@*: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== @@ -5802,7 +5831,7 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@*, json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -5928,7 +5957,7 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@^4.0.2: +libnpmaccess@*: version "4.0.3" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== @@ -5938,7 +5967,7 @@ libnpmaccess@^4.0.2: npm-package-arg "^8.1.2" npm-registry-fetch "^11.0.0" -libnpmdiff@^2.0.4: +libnpmdiff@*: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== @@ -5952,31 +5981,31 @@ libnpmdiff@^2.0.4: pacote "^11.3.0" tar "^6.1.0" -libnpmexec@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-2.0.1.tgz#729ae3e15a3ba225964ccf248117a75d311eeb73" - integrity sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw== +libnpmexec@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-3.0.1.tgz#bc2fddf1b7bd2c1b2c43b4b726ec4cf11920ad0a" + integrity sha512-VUZTpkKBRPv3Z9DIjbsiHhEQXmQ+OwSQ/yLCY9i6CFE8UIczWyE6wVxP5sJ5NSGtSTUs6I98WewQOL45OKMyxA== dependencies: - "@npmcli/arborist" "^2.3.0" + "@npmcli/arborist" "^4.0.0" "@npmcli/ci-detect" "^1.3.0" - "@npmcli/run-script" "^1.8.4" + "@npmcli/run-script" "^2.0.0" chalk "^4.1.0" mkdirp-infer-owner "^2.0.0" npm-package-arg "^8.1.2" - pacote "^11.3.1" + pacote "^12.0.0" proc-log "^1.0.0" read "^1.0.7" read-package-json-fast "^2.0.2" walk-up-path "^1.0.0" -libnpmfund@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.1.0.tgz#ee91313905b3194b900530efa339bc3f9fc4e5c4" - integrity sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ== +libnpmfund@*: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-2.0.1.tgz#3c7e2be61e8c79e22c4918dde91ef57f64faf064" + integrity sha512-OhDbjB3gqdRyuQ56AhUtO49HZ7cZHSM7yCnhQa1lsNpmAmGPnjCImfx8SoWaAkUM7Ov8jngMR5JHKAr1ddjHTQ== dependencies: - "@npmcli/arborist" "^2.5.0" + "@npmcli/arborist" "^4.0.0" -libnpmhook@^6.0.2: +libnpmhook@*: version "6.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.3.tgz#1d7f0d7e6a7932fbf7ce0881fdb0ed8bf8748a30" integrity sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g== @@ -5984,7 +6013,7 @@ libnpmhook@^6.0.2: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmorg@^2.0.2: +libnpmorg@*: version "2.0.3" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.3.tgz#4e605d4113dfa16792d75343824a0625c76703bc" integrity sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA== @@ -5992,16 +6021,16 @@ libnpmorg@^2.0.2: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmpack@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" - integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== +libnpmpack@*: + version "3.0.0" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-3.0.0.tgz#b1cdf182106bc0d25910e79bb5c9b6c23cd71670" + integrity sha512-W6lt4blkR9YXu/qOrFknfnKBajz/1GvAc5q1XcWTGuBJn2DYKDWHtA7x1fuMQdn7hKDBOPlZ/Aqll+ZvAnrM6g== dependencies: - "@npmcli/run-script" "^1.8.3" + "@npmcli/run-script" "^2.0.0" npm-package-arg "^8.1.0" - pacote "^11.2.6" + pacote "^12.0.0" -libnpmpublish@^4.0.1: +libnpmpublish@*: version "4.0.2" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== @@ -6012,14 +6041,14 @@ libnpmpublish@^4.0.1: semver "^7.1.3" ssri "^8.0.1" -libnpmsearch@^3.1.1: +libnpmsearch@*: version "3.1.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.2.tgz#aee81b9e4768750d842b627a3051abc89fdc15f3" integrity sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw== dependencies: npm-registry-fetch "^11.0.0" -libnpmteam@^2.0.3: +libnpmteam@*: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.4.tgz#9dbe2e18ae3cb97551ec07d2a2daf9944f3edc4c" integrity sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw== @@ -6027,13 +6056,13 @@ libnpmteam@^2.0.3: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmversion@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.2.1.tgz#689aa7fe0159939b3cbbf323741d34976f4289e9" - integrity sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ== +libnpmversion@*: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-2.0.1.tgz#20b1425d88cd99c66806a54b458d2d654066b550" + integrity sha512-uFGtNTe/m0GOIBQCE4ryIsgGNJdeShW+qvYtKNLCCuiG7JY3YEslL/maFFZbaO4wlQa/oj1t0Bm9TyjahvtgQQ== dependencies: "@npmcli/git" "^2.0.7" - "@npmcli/run-script" "^1.8.4" + "@npmcli/run-script" "^2.0.0" json-parse-even-better-errors "^2.3.1" semver "^7.3.5" stringify-package "^1.0.1" @@ -6087,11 +6116,6 @@ lodash.capitalize@^4.2.1: resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" integrity sha1-+CbJtOKoUR2E46yinbBeGk87cqk= -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" @@ -6184,7 +6208,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: +make-fetch-happen@*, make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -6426,10 +6450,10 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.50.0" -mime@^2.4.3: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== mimic-fn@^2.1.0: version "2.1.0" @@ -6510,7 +6534,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@*, minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -6524,7 +6548,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== @@ -6539,7 +6563,7 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@^2.0.0: +mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== @@ -6548,6 +6572,11 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -6555,11 +6584,6 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mock-fs@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.1.tgz#d4c95e916abf400664197079d7e399d133bb6048" @@ -6590,6 +6614,11 @@ mri@^1.1.5: 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" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6600,11 +6629,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -6694,36 +6718,36 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-gyp@^7.1.0, node-gyp@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@*, node-gyp@^8.0.0, node-gyp@^8.2.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.0.tgz#6e1112b10617f0f8559c64b3f737e8109e5a8338" + integrity sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.3" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" nopt "^5.0.0" npmlog "^4.1.2" - request "^2.88.2" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" -node-gyp@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.3.0.tgz#ebc36a146d45095e1c6af6ccb0e47d1c8fc3fe69" - integrity sha512-e+vmKyTiybKgrmvs4M2REFKCnOd+NcrAAnn99Yko6NQA+zZdMlRvbIUHojfsHrSQ1CddLgZnHicnEVgDHziJzA== +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" + graceful-fs "^4.2.3" nopt "^5.0.0" npmlog "^4.1.2" + request "^2.88.2" rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" + semver "^7.3.2" + tar "^6.0.2" which "^2.0.2" node-html-parser@3.3.6: @@ -6757,7 +6781,7 @@ node.extend@^2.0.0: has "^1.0.3" is "^3.2.1" -nopt@^5.0.0: +nopt@*, nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== @@ -6794,7 +6818,7 @@ normalize-url@^6.0.0, normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@^2.1.5: +npm-audit-report@*: version "2.1.5" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== @@ -6808,7 +6832,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== @@ -6820,7 +6844,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -6839,7 +6863,17 @@ npm-packlist@^2.1.4: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: +npm-packlist@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" + integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== + dependencies: + glob "^7.1.6" + ignore-walk "^4.0.1" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -6849,14 +6883,14 @@ npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: npm-package-arg "^8.1.2" semver "^7.3.4" -npm-profile@^5.0.3: +npm-profile@*: version "5.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.4.tgz#73e5bd1d808edc2c382d7139049cc367ac43161b" integrity sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA== dependencies: npm-registry-fetch "^11.0.0" -npm-registry-fetch@^11.0.0: +npm-registry-fetch@*, npm-registry-fetch@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== @@ -6890,7 +6924,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@^1.0.1: +npm-user-validate@*: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== @@ -6900,76 +6934,86 @@ npm@^7.0.0: resolved "https://registry.yarnpkg.com/npm/-/npm-7.24.2.tgz#861117af8241bea592289f22407230e5300e59ca" integrity sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ== dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^2.9.0" - "@npmcli/ci-detect" "^1.2.0" - "@npmcli/config" "^2.3.0" - "@npmcli/map-workspaces" "^1.0.4" - "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^1.8.6" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - archy "~1.0.0" - cacache "^15.3.0" - chalk "^4.1.2" - chownr "^2.0.0" - cli-columns "^3.1.2" - cli-table3 "^0.6.0" - columnify "~1.5.4" - fastest-levenshtein "^1.0.12" - glob "^7.2.0" - graceful-fs "^4.2.8" - hosted-git-info "^4.0.2" - ini "^2.0.0" - init-package-json "^2.0.5" - is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - libnpmaccess "^4.0.2" - libnpmdiff "^2.0.4" - libnpmexec "^2.0.1" - libnpmfund "^1.1.0" - libnpmhook "^6.0.2" - libnpmorg "^2.0.2" - libnpmpack "^2.0.1" - libnpmpublish "^4.0.1" - libnpmsearch "^3.1.1" - libnpmteam "^2.0.3" - libnpmversion "^1.2.1" - make-fetch-happen "^9.1.0" - minipass "^3.1.3" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - ms "^2.1.2" - node-gyp "^7.1.2" - nopt "^5.0.0" - npm-audit-report "^2.1.5" - npm-install-checks "^4.0.0" - npm-package-arg "^8.1.5" - npm-pick-manifest "^6.1.1" - npm-profile "^5.0.3" - npm-registry-fetch "^11.0.0" - npm-user-validate "^1.0.1" - npmlog "^5.0.1" - opener "^1.5.2" - pacote "^11.3.5" - parse-conflict-json "^1.1.1" - qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^4.1.1" - read-package-json-fast "^2.0.3" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.5" - ssri "^8.0.1" - tar "^6.1.11" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^1.0.4" - validate-npm-package-name "~3.0.0" - which "^2.0.2" - write-file-atomic "^3.0.3" + "@isaacs/string-locale-compare" "*" + "@npmcli/arborist" "*" + "@npmcli/ci-detect" "*" + "@npmcli/config" "*" + "@npmcli/map-workspaces" "*" + "@npmcli/package-json" "*" + "@npmcli/run-script" "*" + abbrev "*" + ansicolors "*" + ansistyles "*" + archy "*" + cacache "*" + chalk "*" + chownr "*" + cli-columns "*" + cli-table3 "*" + columnify "*" + fastest-levenshtein "*" + glob "*" + graceful-fs "*" + hosted-git-info "*" + ini "*" + init-package-json "*" + is-cidr "*" + json-parse-even-better-errors "*" + libnpmaccess "*" + libnpmdiff "*" + libnpmexec "*" + libnpmfund "*" + libnpmhook "*" + libnpmorg "*" + libnpmpack "*" + libnpmpublish "*" + libnpmsearch "*" + libnpmteam "*" + libnpmversion "*" + make-fetch-happen "*" + minipass "*" + minipass-pipeline "*" + mkdirp "*" + mkdirp-infer-owner "*" + ms "*" + node-gyp "*" + nopt "*" + npm-audit-report "*" + npm-install-checks "*" + npm-package-arg "*" + npm-pick-manifest "*" + npm-profile "*" + npm-registry-fetch "*" + npm-user-validate "*" + npmlog "*" + opener "*" + pacote "*" + parse-conflict-json "*" + qrcode-terminal "*" + read "*" + read-package-json "*" + read-package-json-fast "*" + readdir-scoped-modules "*" + rimraf "*" + semver "*" + ssri "*" + tar "*" + text-table "*" + tiny-relative-date "*" + treeverse "*" + validate-npm-package-name "*" + which "*" + write-file-atomic "*" + +npmlog@*: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" npmlog@^4.1.2: version "4.1.2" @@ -6981,16 +7025,6 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -7077,7 +7111,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@^1.5.2: +opener@*: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -7239,7 +7273,32 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: +pacote@*, pacote@^12.0.0: + version "12.0.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.2.tgz#14ae30a81fe62ec4fc18c071150e6763e932527c" + integrity sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg== + dependencies: + "@npmcli/git" "^2.1.0" + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^2.0.0" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^3.0.0" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^11.0.0" + promise-retry "^2.0.1" + read-package-json-fast "^2.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.0" + +pacote@^11.3.0: version "11.3.5" resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== @@ -7271,7 +7330,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^1.1.1: +parse-conflict-json@*, parse-conflict-json@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== @@ -7618,7 +7677,7 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qrcode-terminal@^0.12.0: +qrcode-terminal@*: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== @@ -7689,7 +7748,7 @@ read-cmd-shim@^2.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: +read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -7697,7 +7756,7 @@ read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json- json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" -read-package-json@^4.1.1: +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== @@ -7735,7 +7794,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: +read@*, read@1, read@^1.0.7, read@~1.0.1: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -7764,7 +7823,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -7970,7 +8029,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@*, rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8098,18 +8157,18 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@*, semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -8365,7 +8424,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^8.0.0, ssri@^8.0.1: +ssri@*, ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -8430,7 +8489,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.1 || ^2.0.0", string-width@^2.0.0: +"string-width@^1.0.1 || ^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8579,12 +8638,11 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^6.0.9: - version "6.7.2" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.2.tgz#a8d39b9f5966693ca8b0feba270a78722cbaf3b0" - integrity sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g== + version "6.7.3" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" + integrity sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw== dependencies: ajv "^8.0.1" - lodash.clonedeep "^4.5.0" lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.3" @@ -8601,7 +8659,7 @@ tar-stream@^2.0.1: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: +tar@*, tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -8651,7 +8709,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@^0.2.0, text-table@~0.2.0: +text-table@*, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -8688,7 +8746,7 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tiny-relative-date@^1.3.0: +tiny-relative-date@*: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== @@ -8763,7 +8821,7 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -treeverse@^1.0.4: +treeverse@*, treeverse@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== @@ -8950,9 +9008,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.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.2.tgz#d7dd6a46ca57214f54a2d0a43cad0f35db82ac99" - integrity sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A== + version "3.14.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" + integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== unbox-primitive@^1.0.1: version "1.0.1" @@ -9100,7 +9158,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: +validate-npm-package-name@*, validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= @@ -9222,6 +9280,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which@*, which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -9229,13 +9294,6 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -9267,7 +9325,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== From 4b6270b981612f1108d23c3fbe0f85ed28f2ca18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20CROCQUESEL?= <88554524+scrocquesel@users.noreply.github.com> Date: Mon, 8 Nov 2021 08:30:23 +0100 Subject: [PATCH 011/248] docs: document how docker datasource resolve sourceUrl (#12468) --- lib/datasource/docker/readme.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 lib/datasource/docker/readme.md diff --git a/lib/datasource/docker/readme.md b/lib/datasource/docker/readme.md new file mode 100644 index 00000000000000..fac24ca3072660 --- /dev/null +++ b/lib/datasource/docker/readme.md @@ -0,0 +1,5 @@ +This datasource identifies an image's source repository according to the [pre-defined annotation keys of the OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/main/annotations.md). + +This datasource looks for the metadata of the **latest stable** image found on the Docker registry and uses the value of the label `org.opencontainers.image.source` as the `sourceUrl`. + +The [Label Schema](https://label-schema.org/) is superseded by OCI annotations, therefore this datasource does not support the `org.label-schema.vcs-url` label. From 616736266365c5006d66bd811eaa63154f62fab3 Mon Sep 17 00:00:00 2001 From: Daniel Edholm Ignat Date: Mon, 8 Nov 2021 09:19:32 +0100 Subject: [PATCH 012/248] feat(nuget): Check for dotnet-tools.json everywhere (#12475) --- lib/manager/nuget/extract.ts | 2 +- lib/manager/nuget/index.ts | 4 ++-- lib/manager/nuget/readme.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/manager/nuget/extract.ts b/lib/manager/nuget/extract.ts index a5e6ab86a7f2d2..b110aa8346bf60 100644 --- a/lib/manager/nuget/extract.ts +++ b/lib/manager/nuget/extract.ts @@ -78,7 +78,7 @@ export async function extractPackageFile( ? registries.map((registry) => registry.url) : undefined; - if (packageFile.endsWith('.config/dotnet-tools.json')) { + if (packageFile.endsWith('dotnet-tools.json')) { const deps: PackageDependency[] = []; let manifest: DotnetToolsManifest; diff --git a/lib/manager/nuget/index.ts b/lib/manager/nuget/index.ts index c5e1689cc7304f..35f875646841c3 100644 --- a/lib/manager/nuget/index.ts +++ b/lib/manager/nuget/index.ts @@ -9,7 +9,7 @@ export const defaultConfig = { fileMatch: [ '\\.(?:cs|fs|vb)proj$', '\\.(?:props|targets)$', - '\\.config\\/dotnet-tools\\.json$', - '(^|//)global\\.json$', + '(^|\\/)dotnet-tools\\.json$', + '(^|\\/)global\\.json$', ], }; diff --git a/lib/manager/nuget/readme.md b/lib/manager/nuget/readme.md index d8d14edd29bc8c..9ee0df70d66bb3 100644 --- a/lib/manager/nuget/readme.md +++ b/lib/manager/nuget/readme.md @@ -2,4 +2,4 @@ The `nuget` configuration object is used to control settings for the NuGet packa The NuGet package manager supports a SDK-style `.csproj`/`.fsproj`/`.vbproj`/`.props`/`.targets` format, as described [here](https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/). This means that .NET Core projects are all supported but any .NET Framework projects need to be updated to the new `.csproj`/`.fsproj`/`.vbproj`/`.props`/`.targets` format in order to be detected and supported by Renovate. -The NuGet manager also supports `global.json` and `.config/dotnet-tools.json` SDK files. +The NuGet manager also supports `global.json` and `dotnet-tools.json` SDK files. From 7afc2b75d5a7396ae130359f05722210d7de146d Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Mon, 8 Nov 2021 13:16:58 +0100 Subject: [PATCH 013/248] test: fix lint (#12551) --- lib/config/decrypt.spec.ts | 34 +++++++------- lib/config/index.spec.ts | 6 +-- lib/config/migration.spec.ts | 18 +++----- lib/config/presets/index.spec.ts | 26 +++++------ lib/config/validation.spec.ts | 6 +-- lib/datasource/bitbucket-tags/index.spec.ts | 4 +- lib/datasource/clojure/index.spec.ts | 2 +- lib/datasource/go/releases-goproxy.spec.ts | 18 ++++---- lib/datasource/helm/index.spec.ts | 2 +- lib/datasource/index.spec.ts | 6 +-- lib/datasource/maven/index.spec.ts | 2 +- lib/datasource/metadata.spec.ts | 6 +-- lib/datasource/npm/get.spec.ts | 6 +-- lib/datasource/nuget/index.spec.ts | 24 +++++----- lib/datasource/orb/index.spec.ts | 2 +- lib/datasource/repology/index.spec.ts | 14 +++--- lib/logger/index.spec.ts | 24 +++++----- lib/manager/bundler/gemfile.spec.ts | 2 +- lib/manager/bundler/host-rules.spec.ts | 4 +- lib/manager/bundler/locked-version.spec.ts | 10 ++-- lib/manager/bundler/range.spec.ts | 4 +- lib/manager/cargo/extract.spec.ts | 2 +- lib/manager/composer/range.spec.ts | 12 ++--- lib/manager/composer/utils.spec.ts | 18 ++++---- lib/manager/dockerfile/extract.spec.ts | 6 +-- lib/manager/git-submodules/extract.spec.ts | 4 +- lib/manager/git-submodules/update.spec.ts | 2 +- lib/manager/gitlabci-include/extract.spec.ts | 2 +- lib/manager/gomod/extract.spec.ts | 2 +- .../gradle-wrapper/artifacts-real.spec.ts | 8 ++-- lib/manager/gradle-wrapper/util.spec.ts | 8 ++-- lib/manager/gradle/deep/build-gradle.spec.ts | 30 ++++++------ lib/manager/gradle/deep/index.spec.ts | 6 +-- lib/manager/gradle/shallow/parser.spec.ts | 4 +- lib/manager/gradle/shallow/update.spec.ts | 4 +- lib/manager/helm-requirements/extract.spec.ts | 4 +- lib/manager/helmv3/extract.spec.ts | 4 +- lib/manager/kustomize/extract.spec.ts | 42 ++++++++--------- lib/manager/leiningen/extract.spec.ts | 4 +- lib/manager/npm/extract/index.spec.ts | 2 +- lib/manager/npm/extract/monorepo.spec.ts | 6 +-- lib/manager/npm/extract/npm.spec.ts | 2 +- lib/manager/npm/extract/pnpm.spec.ts | 2 +- lib/manager/npm/extract/yarn.spec.ts | 2 +- .../npm/post-update/node-version.spec.ts | 8 ++-- lib/manager/npm/post-update/npm.spec.ts | 20 ++++---- lib/manager/npm/post-update/pnpm.spec.ts | 10 ++-- lib/manager/npm/post-update/yarn.spec.ts | 16 +++---- lib/manager/npm/range.spec.ts | 14 +++--- .../npm/update/dependency/index.spec.ts | 12 ++--- .../update/locked-dependency/index.spec.ts | 8 ++-- .../locked-dependency/parent-version.spec.ts | 8 ++-- lib/manager/pip_requirements/range.spec.ts | 4 +- lib/manager/pipenv/extract.spec.ts | 8 ++-- lib/manager/range.spec.ts | 8 ++-- lib/manager/regex/index.spec.ts | 12 ++--- lib/manager/setup-cfg/range.spec.ts | 4 +- lib/platform/azure/util.spec.ts | 2 +- lib/platform/bitbucket/index.spec.ts | 4 +- lib/platform/gitea/gitea-helper.spec.ts | 2 +- lib/platform/gitea/index.spec.ts | 30 ++++++------ lib/platform/github/index.spec.ts | 12 ++--- lib/platform/gitlab/index.spec.ts | 8 ++-- lib/platform/utils/pr-body.spec.ts | 4 +- lib/util/cache/memory/index.spec.ts | 2 +- lib/util/cache/package/decorator.spec.ts | 8 ++-- lib/util/emoji.spec.ts | 8 ++-- lib/util/git/index.spec.ts | 6 +-- lib/util/host-rules.spec.ts | 24 +++++----- lib/util/http/github.spec.ts | 2 +- lib/util/http/index.spec.ts | 2 +- lib/util/json-writer/json-writer.spec.ts | 12 ++--- lib/util/mask.spec.ts | 4 +- lib/util/package-rules.spec.ts | 2 +- lib/versioning/git/index.spec.ts | 2 +- lib/versioning/semver-coerced/index.spec.ts | 28 +++++------ lib/workers/branch/auto-replace.spec.ts | 2 +- lib/workers/branch/index.spec.ts | 2 +- lib/workers/global/config/parse/cli.spec.ts | 4 +- lib/workers/global/config/parse/env.spec.ts | 6 +-- lib/workers/global/config/parse/file.spec.ts | 2 +- lib/workers/global/config/parse/index.spec.ts | 2 +- lib/workers/global/index.spec.ts | 10 ++-- .../pr/changelog/release-notes.spec.ts | 4 +- lib/workers/pr/index.spec.ts | 16 +++---- lib/workers/repository/init/merge.spec.ts | 6 +-- .../onboarding/pr/base-branch.spec.ts | 4 +- .../onboarding/pr/config-description.spec.ts | 2 +- lib/workers/repository/process/fetch.spec.ts | 4 +- lib/workers/repository/process/limits.spec.ts | 28 +++++------ .../process/lookup/filter-checks.spec.ts | 16 +++---- .../repository/process/lookup/index.spec.ts | 46 +++++++++---------- lib/workers/repository/process/write.spec.ts | 2 +- .../repository/updates/branch-name.spec.ts | 24 +++++----- .../repository/updates/generate.spec.ts | 14 +++--- 95 files changed, 429 insertions(+), 455 deletions(-) diff --git a/lib/config/decrypt.spec.ts b/lib/config/decrypt.spec.ts index ba2ad76e2d1ff6..18c2c3808dbaa6 100644 --- a/lib/config/decrypt.spec.ts +++ b/lib/config/decrypt.spec.ts @@ -22,14 +22,14 @@ describe('config/decrypt', () => { it('warns if no privateKey found', async () => { config.encrypted = { a: '1' }; const res = await decryptConfig(config, repository); - expect(res.encrypted).not.toBeDefined(); - expect(res.a).not.toBeDefined(); + expect(res.encrypted).toBeUndefined(); + expect(res.a).toBeUndefined(); }); it('handles invalid encrypted type', async () => { config.encrypted = 1; setGlobalConfig({ privateKey }); const res = await decryptConfig(config, repository); - expect(res.encrypted).not.toBeDefined(); + expect(res.encrypted).toBeUndefined(); }); it('handles invalid encrypted value', async () => { config.encrypted = { a: 1 }; @@ -47,9 +47,9 @@ describe('config/decrypt', () => { 'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==', }; const res = await decryptConfig(config, repository); - expect(res.encrypted).not.toBeDefined(); - expect(res.npmToken).not.toBeDefined(); - expect(res.npmrc).toEqual( + expect(res.encrypted).toBeUndefined(); + expect(res.npmToken).toBeUndefined(); + expect(res.npmrc).toBe( '//registry.npmjs.org/:_authToken=abcdef-ghijklm-nopqf-stuvwxyz\n//registry.npmjs.org/:_authToken=abcdef-ghijklm-nopqf-stuvwxyz\n' ); }); @@ -61,8 +61,8 @@ describe('config/decrypt', () => { 'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==', }; const res = await decryptConfig(config, repository); - expect(res.encrypted).not.toBeDefined(); - expect(res.npmToken).not.toBeDefined(); + expect(res.encrypted).toBeUndefined(); + expect(res.npmToken).toBeUndefined(); expect(res.npmrc).toMatchSnapshot(); }); it('decrypts nested', async () => { @@ -82,13 +82,13 @@ describe('config/decrypt', () => { 'backend/package.json', ]; const res = await decryptConfig(config, repository); - expect(res.encrypted).not.toBeDefined(); - expect(res.packageFiles[0].devDependencies.encrypted).not.toBeDefined(); - expect(res.packageFiles[0].devDependencies.branchPrefix).toEqual( + expect(res.encrypted).toBeUndefined(); + expect(res.packageFiles[0].devDependencies.encrypted).toBeUndefined(); + expect(res.packageFiles[0].devDependencies.branchPrefix).toBe( 'abcdef-ghijklm-nopqf-stuvwxyz' ); - expect(res.packageFiles[0].devDependencies.npmToken).not.toBeDefined(); - expect(res.packageFiles[0].devDependencies.npmrc).toEqual( + expect(res.packageFiles[0].devDependencies.npmToken).toBeUndefined(); + expect(res.packageFiles[0].devDependencies.npmrc).toBe( '//registry.npmjs.org/:_authToken=abcdef-ghijklm-nopqf-stuvwxyz\n' ); }); @@ -139,8 +139,8 @@ describe('config/decrypt', () => { 'wcFMAw+4H7SgaqGOAQ/+Lz6RlbEymbnmMhrktuaGiDPWRNPEQFuMRwwYM6/B/r0JMZa9tskAA5RpyYKxGmJJeuRtlA8GkTw02GoZomlJf/KXJZ95FwSbkXMSRJRD8LJ2402Hw2TaOTaSvfamESnm8zhNo8cok627nkKQkyrpk64heVlU5LIbO2+UgYgbiSQjuXZiW+QuJ1hVRjx011FQgEYc59+22yuKYqd8rrni7TrVqhGRlHCAqvNAGjBI4H7uTFh0sP4auunT/JjxTeTkJoNu8KgS/LdrvISpO67TkQziZo9XD5FOzSN7N3e4f8vO4N4fpjgkIDH/9wyEYe0zYz34xMAFlnhZzqrHycRqzBJuMxGqlFQcKWp9IisLMoVJhLrnvbDLuwwcjeqYkhvODjSs7UDKwTE4X4WmvZr0x4kOclOeAAz/pM6oNVnjgWJd9SnYtoa67bZVkne0k6mYjVhosie8v8icijmJ4OyLZUGWnjZCRd/TPkzQUw+B0yvsop9FYGidhCI+4MVx6W5w7SRtCctxVfCjLpmU4kWaBUUJ5YIQ5xm55yxEYuAsQkxOAYDCMFlV8ntWStYwIG1FsBgJX6VPevXuPPMjWiPNedIpJwBH2PLB4blxMfzDYuCeaIqU4daDaEWxxpuFTTK9fLdJKuipwFG6rwE3OuijeSN+2SLszi834DXtUjQdikHSTQG392+oTmZCFPeffLk/OiV2VpdXF3gGL7sr5M9hOWIZ783q0vW1l6nAElZ7UA//kW+L6QRxbnBVTJK5eCmMY6RJmL76zjqC1jQ0FC10', }; const res = await decryptConfig(config, repository); - expect(res.encrypted).not.toBeDefined(); - expect(res.token).toEqual('123'); + expect(res.encrypted).toBeUndefined(); + expect(res.token).toBe('123'); await expect(decryptConfig(config, 'wrong/org')).rejects.toThrow( 'config-validation' ); @@ -152,8 +152,8 @@ describe('config/decrypt', () => { 'wcFMAw+4H7SgaqGOAQ//Wp7N0PaDZp0uOdwsc1CuqAq0UPcq+IQdHyKpJs3tHiCecXBHogy4P+rY9nGaUrVneCr4HexuKGuyJf1yl0ZqFffAUac5PjF8eDvjukQGOUq4aBlOogJCEefnuuVxVJx+NRR5iF1P6v57bmI1c+zoqZI/EQB30KU6O1BsdGPLUA/+R3dwCZd5Mbd36s34eYBasqcY9/QbqFcpElXMEPMse3kMCsVXPbZ+UMjtPJiBPUmtJq+ifnu1LzDrfshusSQMwgd/QNk7nEsijiYKllkWhHTP6g7zigvJ46x0h6AYS108YiuK3B9XUhXN9m05Ac6KTEEUdRI3E/dK2dQuRkLjXC8wceQm4A19Gm0uHoMIJYOCbiVoBCH6ayvKbZWZV5lZ4D1JbDNGmKeIj6OX9XWEMKiwTx0Xe89V7BdJzwIGrL0TCLtXuYWZ/R2k+UuBqtgzr44BsBqMpKUA0pcGBoqsEou1M05Ae9fJMF6ADezF5UQZPxT1hrMldiTp3p9iHGfWN2tKHeoW/8CqlIqg9JEkTc+Pl/L9E6ndy5Zjf097PvcmSGhxUQBE7XlrZoIlGhiEU/1HPMen0UUIs0LUu1ywpjCex2yTWnU2YmEwy0MQI1sekSr96QFxDDz9JcynYOYbqR/X9pdxEWyzQ+NJ3n6K97nE1Dj9Sgwu7mFGiUdNkf/SUAF0eZi/eXg71qumpMGBd4eWPtgkeMPLHjvMSYw9vBUfcoKFz6RJ4woG0dw5HOFkPnIjXKWllnl/o01EoBp/o8uswsIS9Nb8i+bp27U6tAHE', }; const res = await decryptConfig(config, repository); - expect(res.encrypted).not.toBeDefined(); - expect(res.token).toEqual('123'); + expect(res.encrypted).toBeUndefined(); + expect(res.token).toBe('123'); await expect(decryptConfig(config, 'abc/defg')).rejects.toThrow( 'config-validation' ); diff --git a/lib/config/index.spec.ts b/lib/config/index.spec.ts index f0ab843c78e13c..8aff5b04ab866e 100644 --- a/lib/config/index.spec.ts +++ b/lib/config/index.spec.ts @@ -22,8 +22,8 @@ describe('config/index', () => { }; const configParser = await import('./index'); const config = configParser.mergeChildConfig(parentConfig, childConfig); - expect(config.foo).toEqual('bar'); - expect(config.rangeStrategy).toEqual('replace'); + expect(config.foo).toBe('bar'); + expect(config.rangeStrategy).toBe('replace'); expect(config.lockFileMaintenance.schedule).toEqual(['on monday']); expect(config.lockFileMaintenance).toMatchSnapshot(); }); @@ -57,7 +57,7 @@ describe('config/index', () => { const configParser = await import('./index'); const config = configParser.mergeChildConfig(parentConfig, childConfig); expect(config.constraints).toMatchSnapshot(); - expect(config.constraints.node).toEqual('<15'); + expect(config.constraints.node).toBe('<15'); }); it('handles null parent packageRules', async () => { const parentConfig = { ...defaultConfig }; diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts index f0bbd8a9fead6c..9f2b54634d494a 100644 --- a/lib/config/migration.spec.ts +++ b/lib/config/migration.spec.ts @@ -164,8 +164,8 @@ describe('config/migration', () => { ); expect(migratedConfig).toMatchSnapshot(); expect(isMigrated).toBeTrue(); - expect(migratedConfig.depTypes).not.toBeDefined(); - expect(migratedConfig.automerge).toEqual(false); + expect(migratedConfig.depTypes).toBeUndefined(); + expect(migratedConfig.automerge).toBe(false); expect(migratedConfig.packageRules).toHaveLength(9); expect(migratedConfig.hostRules).toHaveLength(1); }); @@ -186,16 +186,12 @@ describe('config/migration', () => { expect(migratedConfig).toMatchSnapshot(); expect(isMigrated).toBeTrue(); expect(migratedConfig.major.schedule).toHaveLength(2); - expect(migratedConfig.major.schedule[0]).toEqual('after 10pm'); - expect(migratedConfig.major.schedule[1]).toEqual('before 7am'); + expect(migratedConfig.major.schedule[0]).toBe('after 10pm'); + expect(migratedConfig.major.schedule[1]).toBe('before 7am'); expect(migratedConfig.minor.schedule).toMatchSnapshot(); expect(migratedConfig.minor.schedule).toHaveLength(2); - expect(migratedConfig.minor.schedule[0]).toEqual( - 'after 10pm every weekday' - ); - expect(migratedConfig.minor.schedule[1]).toEqual( - 'before 7am every weekday' - ); + expect(migratedConfig.minor.schedule[0]).toBe('after 10pm every weekday'); + expect(migratedConfig.minor.schedule[1]).toBe('before 7am every weekday'); }); it('migrates every friday', () => { const config = { @@ -207,7 +203,7 @@ describe('config/migration', () => { parentConfig ); expect(isMigrated).toBeTrue(); - expect(migratedConfig.schedule).toEqual('on friday'); + expect(migratedConfig.schedule).toBe('on friday'); }); it('migrates semantic prefix with no scope', () => { const config = { diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index 5eed460ee8f638..49e052eb0f7a59 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -63,9 +63,7 @@ describe('config/presets/index', () => { } expect(e).toBeDefined(); expect(e.validationSource).toBeUndefined(); - expect(e.validationError).toEqual( - "Cannot find preset's package (notfound)" - ); + expect(e.validationError).toBe("Cannot find preset's package (notfound)"); expect(e.validationMessage).toBeUndefined(); }); it('throws if invalid preset', async () => { @@ -79,7 +77,7 @@ describe('config/presets/index', () => { } expect(e).toBeDefined(); expect(e.validationSource).toBeUndefined(); - expect(e.validationError).toEqual( + expect(e.validationError).toBe( 'Preset name not found within published preset config (wrongpreset:invalid-preset)' ); expect(e.validationMessage).toBeUndefined(); @@ -96,9 +94,7 @@ describe('config/presets/index', () => { } expect(e).toBeDefined(); expect(e.validationSource).toBeUndefined(); - expect(e.validationError).toEqual( - 'Preset is invalid (github>user/repo//)' - ); + expect(e.validationError).toBe('Preset is invalid (github>user/repo//)'); expect(e.validationMessage).toBeUndefined(); }); @@ -113,7 +109,7 @@ describe('config/presets/index', () => { } expect(e).toBeDefined(); expect(e.validationSource).toBeUndefined(); - expect(e.validationError).toEqual( + expect(e.validationError).toBe( 'Sub-presets cannot be combined with a custom path (github>user/repo//path:subpreset)' ); expect(e.validationMessage).toBeUndefined(); @@ -130,7 +126,7 @@ describe('config/presets/index', () => { } expect(e).toBeDefined(); expect(e.validationSource).toBeUndefined(); - expect(e.validationError).toEqual( + expect(e.validationError).toBe( 'Preset package is missing a renovate-config entry (noconfig:base)' ); expect(e.validationMessage).toBeUndefined(); @@ -161,7 +157,7 @@ describe('config/presets/index', () => { ignoreDeps: [], rangeStrategy: 'pin', }); - expect(res.rangeStrategy).toEqual('pin'); + expect(res.rangeStrategy).toBe('pin'); }); it('throws if valid and invalid', async () => { config.foo = 1; @@ -174,7 +170,7 @@ describe('config/presets/index', () => { } expect(e).toBeDefined(); expect(e.validationSource).toBeUndefined(); - expect(e.validationError).toEqual( + expect(e.validationError).toBe( 'Preset name not found within published preset config (wrongpreset:invalid-preset)' ); expect(e.validationMessage).toBeUndefined(); @@ -233,7 +229,7 @@ describe('config/presets/index', () => { config.extends = ['ikatyang:library']; const res = await presets.resolveConfigPresets(config); expect(res).toMatchSnapshot(); - expect(res.automerge).not.toBeDefined(); + expect(res.automerge).toBeUndefined(); expect(res.minor.automerge).toBeTrue(); }); @@ -256,7 +252,7 @@ describe('config/presets/index', () => { expect(res.labels).toEqual(['self-hosted resolved']); expect(local.getPreset.mock.calls).toHaveLength(1); - expect(local.getPreset.mock.calls[0][0].baseConfig).not.toBeUndefined(); + expect(local.getPreset.mock.calls[0][0].baseConfig).toBeDefined(); expect(res).toMatchSnapshot(); }); }); @@ -269,12 +265,12 @@ describe('config/presets/index', () => { it('replaces args in strings', () => { const str = '{{arg2}} foo {{arg0}}{{arg1}}'; const res = presets.replaceArgs(str, argMappings); - expect(res).toEqual('c foo ab'); + expect(res).toBe('c foo ab'); }); it('replaces args twice in same string', () => { const str = '{{arg2}}{{arg0}} foo {{arg0}}{{arg1}}'; const res = presets.replaceArgs(str, argMappings); - expect(res).toEqual('ca foo ab'); + expect(res).toBe('ca foo ab'); }); it('replaces objects', () => { const obj = { diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts index eaa44fec3bf26d..f850f7f291e188 100644 --- a/lib/config/validation.spec.ts +++ b/lib/config/validation.spec.ts @@ -7,12 +7,10 @@ describe('config/validation', () => { expect(configValidation.getParentName('encrypted')).toBeEmptyString(); }); it('handles array types', () => { - expect(configValidation.getParentName('hostRules[1]')).toEqual( - 'hostRules' - ); + expect(configValidation.getParentName('hostRules[1]')).toBe('hostRules'); }); it('handles encrypted within array types', () => { - expect(configValidation.getParentName('hostRules[0].encrypted')).toEqual( + expect(configValidation.getParentName('hostRules[0].encrypted')).toBe( 'hostRules' ); }); diff --git a/lib/datasource/bitbucket-tags/index.spec.ts b/lib/datasource/bitbucket-tags/index.spec.ts index ef011d6e13dac7..9e9e773b2897b6 100644 --- a/lib/datasource/bitbucket-tags/index.spec.ts +++ b/lib/datasource/bitbucket-tags/index.spec.ts @@ -73,7 +73,7 @@ describe('datasource/bitbucket-tags/index', () => { }); expect(res).toMatchSnapshot(); expect(res).toBeString(); - expect(res).toEqual('123'); + expect(res).toBe('123'); expect(httpMock.getTrace()).toMatchSnapshot(); }); }); @@ -123,7 +123,7 @@ describe('datasource/bitbucket-tags/index', () => { ); expect(res).toMatchSnapshot(); expect(res).toBeString(); - expect(res).toEqual('123'); + expect(res).toBe('123'); expect(httpMock.getTrace()).toMatchSnapshot(); }); }); diff --git a/lib/datasource/clojure/index.spec.ts b/lib/datasource/clojure/index.spec.ts index 642829eb34ae8a..66aab7a7ecbf7f 100644 --- a/lib/datasource/clojure/index.spec.ts +++ b/lib/datasource/clojure/index.spec.ts @@ -311,6 +311,6 @@ describe('datasource/clojure/index', () => { const { sourceUrl } = await get(); - expect(sourceUrl).toEqual('https://github.com/example/test'); + expect(sourceUrl).toBe('https://github.com/example/test'); }); }); diff --git a/lib/datasource/go/releases-goproxy.spec.ts b/lib/datasource/go/releases-goproxy.spec.ts index 4d85ca647bdf9b..e6ec16ca38612d 100644 --- a/lib/datasource/go/releases-goproxy.spec.ts +++ b/lib/datasource/go/releases-goproxy.spec.ts @@ -98,15 +98,15 @@ describe('datasource/go/releases-goproxy', () => { expect(parseNoproxy(undefined)).toBeNull(); expect(parseNoproxy(null)).toBeNull(); expect(parseNoproxy('')).toBeNull(); - expect(parseNoproxy('*')?.source).toEqual('^(?:[^\\/]*)$'); - expect(parseNoproxy('?')?.source).toEqual('^(?:[^\\/])$'); - expect(parseNoproxy('foo')?.source).toEqual('^(?:foo)$'); - expect(parseNoproxy('\\f\\o\\o')?.source).toEqual('^(?:foo)$'); - expect(parseNoproxy('foo,bar')?.source).toEqual('^(?:foo|bar)$'); - expect(parseNoproxy('[abc]')?.source).toEqual('^(?:[abc])$'); - expect(parseNoproxy('[a-c]')?.source).toEqual('^(?:[a-c])$'); - expect(parseNoproxy('[\\a-\\c]')?.source).toEqual('^(?:[a-c])$'); - expect(parseNoproxy('a.b.c')?.source).toEqual('^(?:a\\.b\\.c)$'); + expect(parseNoproxy('*')?.source).toBe('^(?:[^\\/]*)$'); + expect(parseNoproxy('?')?.source).toBe('^(?:[^\\/])$'); + expect(parseNoproxy('foo')?.source).toBe('^(?:foo)$'); + expect(parseNoproxy('\\f\\o\\o')?.source).toBe('^(?:foo)$'); + expect(parseNoproxy('foo,bar')?.source).toBe('^(?:foo|bar)$'); + expect(parseNoproxy('[abc]')?.source).toBe('^(?:[abc])$'); + expect(parseNoproxy('[a-c]')?.source).toBe('^(?:[a-c])$'); + expect(parseNoproxy('[\\a-\\c]')?.source).toBe('^(?:[a-c])$'); + expect(parseNoproxy('a.b.c')?.source).toBe('^(?:a\\.b\\.c)$'); }); it('matches on real package prefixes', () => { diff --git a/lib/datasource/helm/index.spec.ts b/lib/datasource/helm/index.spec.ts index 051b5df29f66b0..31544ce46e46a3 100644 --- a/lib/datasource/helm/index.spec.ts +++ b/lib/datasource/helm/index.spec.ts @@ -180,7 +180,7 @@ describe('datasource/helm/index', () => { registryUrls: ['https://example-repository.com/subdir'], }); const trace = httpMock.getTrace(); - expect(trace[0].url).toEqual( + expect(trace[0].url).toBe( 'https://example-repository.com/subdir/index.yaml' ); expect(trace).toMatchSnapshot(); diff --git a/lib/datasource/index.spec.ts b/lib/datasource/index.spec.ts index 95a2a1b1e18db2..8042ddd59773f9 100644 --- a/lib/datasource/index.spec.ts +++ b/lib/datasource/index.spec.ts @@ -137,7 +137,7 @@ describe('datasource/index', () => { versioning: 'loose', }); expect(res.releases).toHaveLength(1); - expect(res.releases[0].version).toEqual('v1.0'); + expect(res.releases[0].version).toBe('v1.0'); }); it('adds sourceUrl', async () => { npmDatasource.getReleases.mockResolvedValue({ @@ -285,7 +285,7 @@ describe('datasource/index', () => { datasource: datasourceNpm.id, depName: 'abc', }); - expect(res.sourceUrl).toEqual('https://abc.com'); + expect(res.sourceUrl).toBe('https://abc.com'); }); it('massages sourceUrl', async () => { npmDatasource.getReleases.mockResolvedValue({ @@ -296,6 +296,6 @@ describe('datasource/index', () => { datasource: datasourceNpm.id, depName: 'cas', }); - expect(res.sourceUrl).toEqual('https://github.com/Jasig/cas'); + expect(res.sourceUrl).toBe('https://github.com/Jasig/cas'); }); }); diff --git a/lib/datasource/maven/index.spec.ts b/lib/datasource/maven/index.spec.ts index 5361a99e6226e4..c6812fd6dbf054 100644 --- a/lib/datasource/maven/index.spec.ts +++ b/lib/datasource/maven/index.spec.ts @@ -327,7 +327,7 @@ describe('datasource/maven/index', () => { const { sourceUrl } = await get(); - expect(sourceUrl).toEqual('https://github.com/example/test'); + expect(sourceUrl).toBe('https://github.com/example/test'); }); it('removes authentication header after redirect', async () => { diff --git a/lib/datasource/metadata.spec.ts b/lib/datasource/metadata.spec.ts index 7a05cc72f9402f..71ff2932c4c2e4 100644 --- a/lib/datasource/metadata.spec.ts +++ b/lib/datasource/metadata.spec.ts @@ -161,7 +161,7 @@ describe('datasource/metadata', () => { const lookupName = 'io.mockk:mockk'; addMetaData(dep, datasource, lookupName); - expect(dep.sourceUrl).toEqual('https://github.com/mockk/mockk'); + expect(dep.sourceUrl).toBe('https://github.com/mockk/mockk'); }); it('Should move github homepage to sourceUrl', () => { @@ -174,7 +174,7 @@ describe('datasource/metadata', () => { const lookupName = 'io.mockk:mockk'; addMetaData(dep, datasource, lookupName); - expect(dep.sourceUrl).toEqual('https://github.com/mockk/mockk'); + expect(dep.sourceUrl).toBe('https://github.com/mockk/mockk'); expect(dep.homepage).toBeUndefined(); }); @@ -187,7 +187,7 @@ describe('datasource/metadata', () => { const lookupName = 'dropzone'; addMetaData(dep, datasource, lookupName); - expect(dep.sourceUrl).toEqual('https://gitlab.com/meno/dropzone'); + expect(dep.sourceUrl).toBe('https://gitlab.com/meno/dropzone'); }); it('Should normalize releaseTimestamp', () => { diff --git a/lib/datasource/npm/get.spec.ts b/lib/datasource/npm/get.spec.ts index c9e7e4baf127ab..36df1ce3bcb752 100644 --- a/lib/datasource/npm/get.spec.ts +++ b/lib/datasource/npm/get.spec.ts @@ -43,7 +43,7 @@ describe('datasource/npm/get', () => { await getDependency('@myco/test'); const trace = httpMock.getTrace(); - expect(trace[0].headers.authorization).toEqual('Bearer XXX'); + expect(trace[0].headers.authorization).toBe('Bearer XXX'); expect(trace).toMatchSnapshot(); }); }); @@ -75,7 +75,7 @@ describe('datasource/npm/get', () => { await getDependency('@myco/test'); const trace = httpMock.getTrace(); - expect(trace[0].headers.authorization).toEqual('Basic dGVzdDp0ZXN0'); + expect(trace[0].headers.authorization).toBe('Basic dGVzdDp0ZXN0'); expect(trace).toMatchSnapshot(); }); }); @@ -302,7 +302,7 @@ describe('datasource/npm/get', () => { expect(dep.sourceUrl).toBe('https://github.com/vuejs/vue.git'); expect(dep.releases[0].sourceUrl).toBeUndefined(); - expect(dep.releases[1].sourceUrl).toEqual( + expect(dep.releases[1].sourceUrl).toBe( 'https://github.com/vuejs/vue-next.git' ); }); diff --git a/lib/datasource/nuget/index.spec.ts b/lib/datasource/nuget/index.spec.ts index d6832c70351a2a..926de848f3ed56 100644 --- a/lib/datasource/nuget/index.spec.ts +++ b/lib/datasource/nuget/index.spec.ts @@ -99,22 +99,22 @@ describe('datasource/nuget/index', () => { it('extracts feed version from registry URL hash (v3)', () => { const parsed = parseRegistryUrl('https://my-registry#protocolVersion=3'); - expect(parsed.feedUrl).toEqual('https://my-registry/'); - expect(parsed.protocolVersion).toEqual(3); + expect(parsed.feedUrl).toBe('https://my-registry/'); + expect(parsed.protocolVersion).toBe(3); }); it('extracts feed version from registry URL hash (v2)', () => { const parsed = parseRegistryUrl('https://my-registry#protocolVersion=2'); - expect(parsed.feedUrl).toEqual('https://my-registry/'); - expect(parsed.protocolVersion).toEqual(2); + expect(parsed.feedUrl).toBe('https://my-registry/'); + expect(parsed.protocolVersion).toBe(2); }); it('defaults to v2', () => { const parsed = parseRegistryUrl('https://my-registry'); - expect(parsed.feedUrl).toEqual('https://my-registry/'); - expect(parsed.protocolVersion).toEqual(2); + expect(parsed.feedUrl).toBe('https://my-registry/'); + expect(parsed.protocolVersion).toBe(2); }); it('returns null for unparseable', () => { @@ -122,9 +122,7 @@ describe('datasource/nuget/index', () => { 'https://test:malfor%5Med@test.example.com' ); - expect(parsed.feedUrl).toEqual( - 'https://test:malfor%5Med@test.example.com' - ); + expect(parsed.feedUrl).toBe('https://test:malfor%5Med@test.example.com'); expect(parsed.protocolVersion).toBeNull(); }); }); @@ -163,7 +161,7 @@ describe('datasource/nuget/index', () => { ...config, }); const trace = httpMock.getTrace(); - expect(trace[0].url).toEqual('https://my-registry/'); + expect(trace[0].url).toBe('https://my-registry/'); expect(trace).toMatchSnapshot(); }); @@ -445,7 +443,7 @@ describe('datasource/nuget/index', () => { }); expect(res).not.toBeNull(); expect(res).toMatchSnapshot(); - expect(res.sourceUrl).not.toBeDefined(); + expect(res.sourceUrl).toBeUndefined(); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('processes real data (v3) nuspec fetch 404 error', async () => { @@ -463,7 +461,7 @@ describe('datasource/nuget/index', () => { }); expect(res).not.toBeNull(); expect(res).toMatchSnapshot(); - expect(res.sourceUrl).not.toBeDefined(); + expect(res.sourceUrl).toBeUndefined(); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('processes real data (v2)', async () => { @@ -506,7 +504,7 @@ describe('datasource/nuget/index', () => { }); expect(res).not.toBeNull(); expect(res).toMatchSnapshot(); - expect(res.sourceUrl).not.toBeDefined(); + expect(res.sourceUrl).toBeUndefined(); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('processes real data with no github project url (v2)', async () => { diff --git a/lib/datasource/orb/index.spec.ts b/lib/datasource/orb/index.spec.ts index 57f1aa678b9fb6..fa40d1bd2e9307 100644 --- a/lib/datasource/orb/index.spec.ts +++ b/lib/datasource/orb/index.spec.ts @@ -94,7 +94,7 @@ describe('datasource/orb/index', () => { depName: 'hyper-expanse/library-release-workflows', }); expect(res).toMatchSnapshot(); - expect(res.homepage).toEqual('https://google.com'); + expect(res.homepage).toBe('https://google.com'); expect(httpMock.getTrace()).toMatchSnapshot(); }); }); diff --git a/lib/datasource/repology/index.spec.ts b/lib/datasource/repology/index.spec.ts index c7b7e1378320b6..7f9a67c136f32a 100644 --- a/lib/datasource/repology/index.spec.ts +++ b/lib/datasource/repology/index.spec.ts @@ -221,7 +221,7 @@ describe('datasource/repology/index', () => { }); expect(res).toMatchSnapshot(); expect(res.releases).toHaveLength(1); - expect(res.releases[0].version).toEqual('1.14.2-2+deb10u1'); + expect(res.releases[0].version).toBe('1.14.2-2+deb10u1'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -241,7 +241,7 @@ describe('datasource/repology/index', () => { }); expect(res).toMatchSnapshot(); expect(res.releases).toHaveLength(1); - expect(res.releases[0].version).toEqual('1.181'); + expect(res.releases[0].version).toBe('1.181'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -258,7 +258,7 @@ describe('datasource/repology/index', () => { }); expect(res).toMatchSnapshot(); expect(res.releases).toHaveLength(1); - expect(res.releases[0].version).toEqual('1.181'); + expect(res.releases[0].version).toBe('1.181'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -275,7 +275,7 @@ describe('datasource/repology/index', () => { }); expect(res).toMatchSnapshot(); expect(res.releases).toHaveLength(1); - expect(res.releases[0].version).toEqual('9.3.0-r2'); + expect(res.releases[0].version).toBe('9.3.0-r2'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -292,7 +292,7 @@ describe('datasource/repology/index', () => { }); expect(res).toMatchSnapshot(); expect(res.releases).toHaveLength(1); - expect(res.releases[0].version).toEqual('12.2-4+deb10u1'); + expect(res.releases[0].version).toBe('12.2-4+deb10u1'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -312,8 +312,8 @@ describe('datasource/repology/index', () => { }); expect(res).toMatchSnapshot(); expect(res.releases).toHaveLength(6); - expect(res.releases[0].version).toEqual('1:11.0.7.10-1.el8_1'); - expect(res.releases[5].version).toEqual('1:11.0.9.11-3.el8_3'); + expect(res.releases[0].version).toBe('1:11.0.7.10-1.el8_1'); + expect(res.releases[5].version).toBe('1:11.0.9.11-3.el8_3'); expect(httpMock.getTrace()).toMatchSnapshot(); }); diff --git a/lib/logger/index.spec.ts b/lib/logger/index.spec.ts index 29d7b931adf803..c6de2300da9b2e 100644 --- a/lib/logger/index.spec.ts +++ b/lib/logger/index.spec.ts @@ -25,7 +25,7 @@ describe('logger/index', () => { }); it('sets and gets context', () => { setContext('123test'); - expect(getContext()).toEqual('123test'); + expect(getContext()).toBe('123test'); }); it('supports logging with metadata', () => { expect(() => logger.debug({ some: 'meta' }, 'some meta')).not.toThrow(); @@ -108,7 +108,7 @@ describe('logger/index', () => { logger.error('foo'); - expect(JSON.parse(chunk).msg).toEqual('foo'); + expect(JSON.parse(chunk).msg).toBe('foo'); }); it('handles cycles', () => { @@ -130,10 +130,10 @@ describe('logger/index', () => { meta.foo = meta; meta.bar.push(meta); logger.error(meta, 'foo'); - expect(logged.msg).toEqual('foo'); - expect(logged.foo.foo).toEqual('[Circular]'); + expect(logged.msg).toBe('foo'); + expect(logged.foo.foo).toBe('[Circular]'); expect(logged.foo.bar).toEqual(['[Circular]']); - expect(logged.bar).toEqual('[Circular]'); + expect(logged.bar).toBe('[Circular]'); }); it('sanitizes secrets', () => { @@ -164,14 +164,14 @@ describe('logger/index', () => { }, }); - expect(logged.foo).not.toEqual('secret"password'); - expect(logged.bar[0]).toEqual('somethingelse'); + expect(logged.foo).not.toBe('secret"password'); + expect(logged.bar[0]).toBe('somethingelse'); expect(logged.foo).toContain('redacted'); expect(logged.bar[1]).toContain('redacted'); - expect(logged.npmToken).not.toEqual('token'); - expect(logged.buffer).toEqual('[content]'); - expect(logged.content).toEqual('[content]'); - expect(logged.prBody).toEqual('[Template]'); - expect(logged.secrets.foo).toEqual('***********'); + expect(logged.npmToken).not.toBe('token'); + expect(logged.buffer).toBe('[content]'); + expect(logged.content).toBe('[content]'); + expect(logged.prBody).toBe('[Template]'); + expect(logged.secrets.foo).toBe('***********'); }); }); diff --git a/lib/manager/bundler/gemfile.spec.ts b/lib/manager/bundler/gemfile.spec.ts index 6d6dfc8ec4ae29..849a921e9d3890 100644 --- a/lib/manager/bundler/gemfile.spec.ts +++ b/lib/manager/bundler/gemfile.spec.ts @@ -6,7 +6,7 @@ const gemLockFile = loadFixture('Gemfile.rails.lock'); describe('manager/bundler/gemfile', () => { it('matches the expected output', () => { const res = extractLockFileEntries(gemLockFile); - expect(res.size).toEqual(185); + expect(res.size).toBe(185); expect(res).toMatchSnapshot(); }); }); diff --git a/lib/manager/bundler/host-rules.spec.ts b/lib/manager/bundler/host-rules.spec.ts index 3a8c85b01a4fce..faccd49560f227 100644 --- a/lib/manager/bundler/host-rules.spec.ts +++ b/lib/manager/bundler/host-rules.spec.ts @@ -17,14 +17,14 @@ describe('manager/bundler/host-rules', () => { username: 'test', password: 'password', }) - ).toEqual('test:password'); + ).toBe('test:password'); }); it('returns the authentication header with the token', () => { expect( getAuthenticationHeaderValue({ token: 'token', }) - ).toEqual('token'); + ).toBe('token'); }); }); describe('findAllAuthenticatable()', () => { diff --git a/lib/manager/bundler/locked-version.spec.ts b/lib/manager/bundler/locked-version.spec.ts index 6921b83bd28000..8110d6cdab59ff 100644 --- a/lib/manager/bundler/locked-version.spec.ts +++ b/lib/manager/bundler/locked-version.spec.ts @@ -10,27 +10,27 @@ const gitlabFossGemfileLock = loadFixture('Gemfile.gitlab-foss.lock'); describe('manager/bundler/locked-version', () => { test('Parse Rails Gem Lock File', () => { const parsedLockEntries = extractLockFileEntries(railsGemfileLock); - expect(parsedLockEntries.size).toEqual(185); + expect(parsedLockEntries.size).toBe(185); expect(parsedLockEntries).toMatchSnapshot(); }); test('Parse WebPacker Gem Lock File', () => { const parsedLockEntries = extractLockFileEntries(webPackerGemfileLock); - expect(parsedLockEntries.size).toEqual(53); + expect(parsedLockEntries.size).toBe(53); expect(parsedLockEntries).toMatchSnapshot(); }); test('Parse Mastodon Gem Lock File', () => { const parsedLockEntries = extractLockFileEntries(mastodonGemfileLock); - expect(parsedLockEntries.size).toEqual(266); + expect(parsedLockEntries.size).toBe(266); expect(parsedLockEntries).toMatchSnapshot(); }); test('Parse Ruby CI Gem Lock File', () => { const parsedLockEntries = extractLockFileEntries(rubyCIGemfileLock); - expect(parsedLockEntries.size).toEqual(64); + expect(parsedLockEntries.size).toBe(64); expect(parsedLockEntries).toMatchSnapshot(); }); test('Parse Gitlab Foss Gem Lock File', () => { const parsedLockEntries = extractLockFileEntries(gitlabFossGemfileLock); - expect(parsedLockEntries.size).toEqual(478); + expect(parsedLockEntries.size).toBe(478); expect(parsedLockEntries).toMatchSnapshot(); }); }); diff --git a/lib/manager/bundler/range.spec.ts b/lib/manager/bundler/range.spec.ts index 7591971aa8d10e..3755b379fd59cc 100644 --- a/lib/manager/bundler/range.spec.ts +++ b/lib/manager/bundler/range.spec.ts @@ -5,11 +5,11 @@ describe('manager/bundler/range', () => { describe('getRangeStrategy()', () => { it('returns replace when rangeStrategy is auto', () => { const config: RangeConfig = { rangeStrategy: 'auto' }; - expect(getRangeStrategy(config)).toEqual('replace'); + expect(getRangeStrategy(config)).toBe('replace'); }); it('returns the config value when rangeStrategy is different than auto', () => { const config: RangeConfig = { rangeStrategy: 'update-lockfile' }; - expect(getRangeStrategy(config)).toEqual('update-lockfile'); + expect(getRangeStrategy(config)).toBe('update-lockfile'); }); }); }); diff --git a/lib/manager/cargo/extract.spec.ts b/lib/manager/cargo/extract.spec.ts index 585ed908e334cf..d8c33612858f8b 100644 --- a/lib/manager/cargo/extract.spec.ts +++ b/lib/manager/cargo/extract.spec.ts @@ -131,7 +131,7 @@ describe('manager/cargo/extract', () => { expect(res.deps).toMatchSnapshot(); expect(res.deps).toHaveLength(1); - expect(res.deps[0].lookupName).toEqual('boolector'); + expect(res.deps[0].lookupName).toBe('boolector'); }); }); }); diff --git a/lib/manager/composer/range.spec.ts b/lib/manager/composer/range.spec.ts index 91e53b001752d0..2f1d3621e0bbda 100644 --- a/lib/manager/composer/range.spec.ts +++ b/lib/manager/composer/range.spec.ts @@ -4,14 +4,14 @@ import { getRangeStrategy } from '.'; describe('manager/composer/range', () => { it('returns same if not auto', () => { const config: RangeConfig = { rangeStrategy: 'widen' }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('pins require-dev', () => { const config: RangeConfig = { rangeStrategy: 'auto', depType: 'require-dev', }; - expect(getRangeStrategy(config)).toEqual('pin'); + expect(getRangeStrategy(config)).toBe('pin'); }); it('pins project require', () => { const config: RangeConfig = { @@ -19,7 +19,7 @@ describe('manager/composer/range', () => { managerData: { composerJsonType: 'project' }, depType: 'require', }; - expect(getRangeStrategy(config)).toEqual('pin'); + expect(getRangeStrategy(config)).toBe('pin'); }); it('widens complex ranges', () => { const config: RangeConfig = { @@ -27,7 +27,7 @@ describe('manager/composer/range', () => { depType: 'require', currentValue: '^1.6.0 || ^2.0.0', }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('widens complex bump', () => { const config: RangeConfig = { @@ -35,10 +35,10 @@ describe('manager/composer/range', () => { depType: 'require', currentValue: '^1.6.0 || ^2.0.0', }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('defaults to replace', () => { const config: RangeConfig = { rangeStrategy: 'auto', depType: 'require' }; - expect(getRangeStrategy(config)).toEqual('replace'); + expect(getRangeStrategy(config)).toBe('replace'); }); }); diff --git a/lib/manager/composer/utils.spec.ts b/lib/manager/composer/utils.spec.ts index 516d751fe24c8f..edeab175287343 100644 --- a/lib/manager/composer/utils.spec.ts +++ b/lib/manager/composer/utils.spec.ts @@ -25,13 +25,11 @@ describe('manager/composer/utils', () => { }); }); it('returns from config', async () => { - expect(await getComposerConstraint({ composer: '1.1.0' })).toEqual( - '1.1.0' - ); + expect(await getComposerConstraint({ composer: '1.1.0' })).toBe('1.1.0'); }); it('returns from latest', async () => { - expect(await getComposerConstraint({})).toEqual('2.1.0'); + expect(await getComposerConstraint({})).toBe('2.1.0'); }); it('throws no releases', async () => { @@ -97,7 +95,7 @@ describe('manager/composer/utils', () => { }); it('disables scripts and plugins by default', () => { - expect(getComposerArguments({})).toEqual( + expect(getComposerArguments({})).toBe( ' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' ); }); @@ -106,7 +104,7 @@ describe('manager/composer/utils', () => { getComposerArguments({ composerIgnorePlatformReqs: [], }) - ).toEqual( + ).toBe( ' --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' ); }); @@ -115,7 +113,7 @@ describe('manager/composer/utils', () => { getComposerArguments({ composerIgnorePlatformReqs: ['ext-intl'], }) - ).toEqual( + ).toBe( ' --ignore-platform-req ext-intl --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' ); }); @@ -124,7 +122,7 @@ describe('manager/composer/utils', () => { getComposerArguments({ composerIgnorePlatformReqs: ['ext-intl', 'ext-icu'], }) - ).toEqual( + ).toBe( ' --ignore-platform-req ext-intl --ignore-platform-req ext-icu --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' ); }); @@ -132,7 +130,7 @@ describe('manager/composer/utils', () => { setGlobalConfig({ allowScripts: true, }); - expect(getComposerArguments({})).toEqual(' --no-ansi --no-interaction'); + expect(getComposerArguments({})).toBe(' --no-ansi --no-interaction'); }); it('disables scripts/plugins when configured locally', () => { setGlobalConfig({ @@ -142,7 +140,7 @@ describe('manager/composer/utils', () => { getComposerArguments({ ignoreScripts: true, }) - ).toEqual( + ).toBe( ' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' ); }); diff --git a/lib/manager/dockerfile/extract.spec.ts b/lib/manager/dockerfile/extract.spec.ts index 0bd7c01e625b38..4caefc8777945b 100644 --- a/lib/manager/dockerfile/extract.spec.ts +++ b/lib/manager/dockerfile/extract.spec.ts @@ -191,8 +191,8 @@ describe('manager/dockerfile/extract', () => { }, ] `); - expect(res[0].depName).toEqual('registry2.something.info:5005/node'); - expect(res[0].currentValue).toEqual('8'); + expect(res[0].depName).toBe('registry2.something.info:5005/node'); + expect(res[0].currentValue).toBe('8'); }); it('handles custom hosts with port without tag', () => { @@ -212,7 +212,7 @@ describe('manager/dockerfile/extract', () => { }, ] `); - expect(res[0].depName).toEqual('registry2.something.info:5005/node'); + expect(res[0].depName).toBe('registry2.something.info:5005/node'); }); it('handles quay hosts with port', () => { diff --git a/lib/manager/git-submodules/extract.spec.ts b/lib/manager/git-submodules/extract.spec.ts index 12de81b03ce9e7..1b5ba0982896d6 100644 --- a/lib/manager/git-submodules/extract.spec.ts +++ b/lib/manager/git-submodules/extract.spec.ts @@ -50,14 +50,14 @@ describe('manager/git-submodules/extract', () => { expect(await extractPackageFile('', '.gitmodules.1', {})).toBeNull(); res = await extractPackageFile('', '.gitmodules.2', {}); expect(res.deps).toHaveLength(1); - expect(res.deps[0].currentValue).toEqual('main'); + expect(res.deps[0].currentValue).toBe('main'); res = await extractPackageFile('', '.gitmodules.3', {}); expect(res.deps).toHaveLength(1); res = await extractPackageFile('', '.gitmodules.4', {}); expect(res.deps).toHaveLength(1); res = await extractPackageFile('', '.gitmodules.5', {}); expect(res.deps).toHaveLength(3); - expect(res.deps[2].lookupName).toEqual( + expect(res.deps[2].lookupName).toBe( 'https://github.com/renovatebot/renovate-config.git' ); }); diff --git a/lib/manager/git-submodules/update.spec.ts b/lib/manager/git-submodules/update.spec.ts index 3e9b6c7f73e787..358f06671370c7 100644 --- a/lib/manager/git-submodules/update.spec.ts +++ b/lib/manager/git-submodules/update.spec.ts @@ -50,7 +50,7 @@ describe('manager/git-submodules/update', () => { fileContent: '', upgrade, }); - expect(update).toEqual(''); + expect(update).toBe(''); }); }); }); diff --git a/lib/manager/gitlabci-include/extract.spec.ts b/lib/manager/gitlabci-include/extract.spec.ts index c7729dd9e86e00..b5a36706e704db 100644 --- a/lib/manager/gitlabci-include/extract.spec.ts +++ b/lib/manager/gitlabci-include/extract.spec.ts @@ -44,7 +44,7 @@ describe('manager/gitlabci-include/extract', () => { const res = extractPackageFile(yamlFileMultiConfig, '.gitlab-ci.yml', { endpoint, }); - expect(res.deps[0].registryUrls[0]).toEqual('http://gitlab.test'); + expect(res.deps[0].registryUrls[0]).toBe('http://gitlab.test'); } }); }); diff --git a/lib/manager/gomod/extract.spec.ts b/lib/manager/gomod/extract.spec.ts index 45889a2c516767..b702220681b0d7 100644 --- a/lib/manager/gomod/extract.spec.ts +++ b/lib/manager/gomod/extract.spec.ts @@ -20,7 +20,7 @@ describe('manager/gomod/extract', () => { it('extracts constraints', () => { const res = extractPackageFile(gomod3); expect(res).toMatchSnapshot(); - expect(res.constraints.go).toEqual('^1.13'); + expect(res.constraints.go).toBe('^1.13'); }); it('extracts multi-line requires', () => { const res = extractPackageFile(gomod2).deps; diff --git a/lib/manager/gradle-wrapper/artifacts-real.spec.ts b/lib/manager/gradle-wrapper/artifacts-real.spec.ts index 88fe508870ebd4..b8a406f0621afd 100644 --- a/lib/manager/gradle-wrapper/artifacts-real.spec.ts +++ b/lib/manager/gradle-wrapper/artifacts-real.spec.ts @@ -151,10 +151,10 @@ describe('manager/gradle-wrapper/artifacts-real', () => { config, }); - expect(res[0].artifactError.lockFile).toEqual( + expect(res[0].artifactError.lockFile).toBe( 'gradle/wrapper/gradle-wrapper.properties' ); - expect(res[0].artifactError.stderr).toEqual('failed'); + expect(res[0].artifactError.stderr).toBe('failed'); // 5.6.4 => 5.6.4 (updates execs) - unexpected behavior (looks like a bug in Gradle) ['gradle/wrapper/gradle-wrapper.properties'].forEach((file) => { @@ -178,11 +178,11 @@ describe('manager/gradle-wrapper/artifacts-real', () => { config, }); - expect(res[0].artifactError.lockFile).toEqual( + expect(res[0].artifactError.lockFile).toBe( 'gradle/wrapper/gradle-wrapper.properties' ); expect(res[0].artifactError.stderr).not.toBeNull(); - expect(res[0].artifactError.stderr).not.toEqual(''); + expect(res[0].artifactError.stderr).not.toBe(''); // 5.6.4 => 5.6.4 (updates execs) - unexpected behavior (looks like a bug in Gradle) ['gradle/wrapper/gradle-wrapper.properties'].forEach((file) => { diff --git a/lib/manager/gradle-wrapper/util.spec.ts b/lib/manager/gradle-wrapper/util.spec.ts index 9a65c9c4b9c5d2..61dd0852c7fc7e 100644 --- a/lib/manager/gradle-wrapper/util.spec.ts +++ b/lib/manager/gradle-wrapper/util.spec.ts @@ -9,22 +9,22 @@ describe('manager/gradle-wrapper/util', () => { it('return ^11.0.0 for docker mode and undefined gradle', () => { setGlobalConfig({ binarySource: 'docker' }); - expect(getJavaContraint(undefined)).toEqual('^11.0.0'); + expect(getJavaContraint(undefined)).toBe('^11.0.0'); }); it('return ^8.0.0 for docker gradle < 5', () => { setGlobalConfig({ binarySource: 'docker' }); - expect(getJavaContraint('4.9')).toEqual('^8.0.0'); + expect(getJavaContraint('4.9')).toBe('^8.0.0'); }); it('return ^11.0.0 for docker gradle >=5 && <7', () => { setGlobalConfig({ binarySource: 'docker' }); - expect(getJavaContraint('6.0')).toEqual('^11.0.0'); + expect(getJavaContraint('6.0')).toBe('^11.0.0'); }); it('return ^16.0.0 for docker gradle >= 7', () => { setGlobalConfig({ binarySource: 'docker' }); - expect(getJavaContraint('7.0.1')).toEqual('^16.0.0'); + expect(getJavaContraint('7.0.1')).toBe('^16.0.0'); }); }); diff --git a/lib/manager/gradle/deep/build-gradle.spec.ts b/lib/manager/gradle/deep/build-gradle.spec.ts index f12807a96f1274..639a906c5c3609 100644 --- a/lib/manager/gradle/deep/build-gradle.spec.ts +++ b/lib/manager/gradle/deep/build-gradle.spec.ts @@ -32,7 +32,7 @@ describe('manager/gradle/deep/build-gradle', () => { { group: 'mysql', name: 'mysql-connector-java', version: '6.0.5' }, '7.0.0' ); - expect(updatedGradleFile).toEqual( + expect(updatedGradleFile).toBe( "runtime ( 'mysql:mysql-connector-java:7.0.0' )" ); }); @@ -49,7 +49,7 @@ describe('manager/gradle/deep/build-gradle', () => { }, '2.10.1' ); - expect(updatedGradleFile).toEqual( + expect(updatedGradleFile).toBe( "runtime ( 'com.crashlytics.sdk.android:crashlytics:2.10.1@aar' )" ); }); @@ -61,7 +61,7 @@ describe('manager/gradle/deep/build-gradle', () => { { group: 'junit', name: 'junit', version: '4.0' }, '5.0' ); - expect(updatedGradleFile).toEqual( + expect(updatedGradleFile).toBe( "runtime ( 'junit:junit:5.0:javadoc@jar' )" ); }); @@ -575,7 +575,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('String mysqlVersion = "7.0.0"'); + expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); }); it('should replace a external groovy map variable assigned to a specific dependency', () => { @@ -595,9 +595,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual( - 'ext.versions = [ mysqlVersion: "7.0.0" ]' - ); + expect(updatedGradleFile).toBe('ext.versions = [ mysqlVersion: "7.0.0" ]'); }); it('should replace a external groovy map nested variable assigned to a specific dependency', () => { @@ -618,7 +616,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual( + expect(updatedGradleFile).toBe( 'ext.versions = [ nested: [ mysqlVersion: "7.0.0" ] ]' ); }); @@ -640,7 +638,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('mysqlVersion=7.0.0'); + expect(updatedGradleFile).toBe('mysqlVersion=7.0.0'); }); it('should replace a external property variable assigned to a specific dependency parenthesis syntax', () => { @@ -660,7 +658,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('mysqlVersion=7.0.0'); + expect(updatedGradleFile).toBe('mysqlVersion=7.0.0'); }); it('should replace a external variable assigned to a map dependency', () => { @@ -682,7 +680,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('String mysqlVersion = "7.0.0"'); + expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); }); it('should replace a external variable assigned to a Kotlin named argument dependency', () => { @@ -704,7 +702,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('val mysqlVersion = "7.0.0"'); + expect(updatedGradleFile).toBe('val mysqlVersion = "7.0.0"'); }); it('should replace a external variable assigned to a interpolated dependency', () => { @@ -724,7 +722,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('String mysqlVersion = "7.0.0"'); + expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); }); it('should replace a external extra variable assigned to a Kotlin named argument dependency', () => { @@ -746,7 +744,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('val mysqlVersion by extra("7.0.0")'); + expect(updatedGradleFile).toBe('val mysqlVersion by extra("7.0.0")'); }); it('should replace a external lazy extra variable assigned to a Kotlin named argument dependency', () => { @@ -768,7 +766,7 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('val mysqlVersion by extra { "7.0.0" }'); + expect(updatedGradleFile).toBe('val mysqlVersion by extra { "7.0.0" }'); }); it('should replace a external variable assigned to a plugin dependency', () => { @@ -787,6 +785,6 @@ describe('manager/gradle/deep/build-gradle', () => { mysqlDependency, '7.0.0' ); - expect(updatedGradleFile).toEqual('String mysqlVersion = "7.0.0"'); + expect(updatedGradleFile).toBe('String mysqlVersion = "7.0.0"'); }); }); diff --git a/lib/manager/gradle/deep/index.spec.ts b/lib/manager/gradle/deep/index.spec.ts index 06f3ab781808c1..ae157097710703 100644 --- a/lib/manager/gradle/deep/index.spec.ts +++ b/lib/manager/gradle/deep/index.spec.ts @@ -321,7 +321,7 @@ describe('manager/gradle/deep/index', () => { packageFile: 'build.gradle', }, ]); - expect(execSnapshots[0].cmd).toEqual('docker pull renovate/java:11.0.12'); + expect(execSnapshots[0].cmd).toBe('docker pull renovate/java:11.0.12'); expect(execSnapshots).toMatchSnapshot(); }); @@ -340,7 +340,7 @@ describe('manager/gradle/deep/index', () => { packageFile: 'build.gradle', }, ]); - expect(execSnapshots[0].cmd).toEqual('docker pull renovate/java:11.0.12'); + expect(execSnapshots[0].cmd).toBe('docker pull renovate/java:11.0.12'); expect(execSnapshots).toMatchSnapshot(); }); @@ -360,7 +360,7 @@ describe('manager/gradle/deep/index', () => { packageFile: 'build.gradle', }, ]); - expect(execSnapshots[0].cmd).toEqual('docker pull renovate/java:11.0.12'); + expect(execSnapshots[0].cmd).toBe('docker pull renovate/java:11.0.12'); expect(execSnapshots).toMatchSnapshot(); }); }); diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index 0437a3aef1eaf5..4c962d4600d664 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -246,7 +246,7 @@ describe('manager/gradle/shallow/parser', () => { content .slice(dep.managerData.fileReplacePosition) .indexOf(dep.currentValue) - ).toEqual(0); + ).toBe(0); }); expect(deps).toMatchSnapshot(); }); @@ -256,7 +256,7 @@ describe('manager/gradle/shallow/parser', () => { const res = deps[0]; expect( content.slice(res.managerData.fileReplacePosition).indexOf('1.2.3') - ).toEqual(0); + ).toBe(0); }); it('gradle.properties', () => { expect(parseProps('foo=bar')).toMatchObject({ diff --git a/lib/manager/gradle/shallow/update.spec.ts b/lib/manager/gradle/shallow/update.spec.ts index 73033ef1c19eb3..3ef39f28f950e6 100644 --- a/lib/manager/gradle/shallow/update.spec.ts +++ b/lib/manager/gradle/shallow/update.spec.ts @@ -13,7 +13,7 @@ describe('manager/gradle/shallow/update', () => { }, }, }) - ).toEqual('___1.2.4___'); + ).toBe('___1.2.4___'); }); it('groups', () => { @@ -29,7 +29,7 @@ describe('manager/gradle/shallow/update', () => { }, }, }) - ).toEqual('___1.2.5___'); + ).toBe('___1.2.5___'); }); it('returns same content', () => { diff --git a/lib/manager/helm-requirements/extract.spec.ts b/lib/manager/helm-requirements/extract.spec.ts index 413c939d6181a8..0420e15ff88e5c 100644 --- a/lib/manager/helm-requirements/extract.spec.ts +++ b/lib/manager/helm-requirements/extract.spec.ts @@ -37,7 +37,7 @@ describe('manager/helm-requirements/extract', () => { }); expect(result).not.toBeNull(); expect(result).toMatchSnapshot(); - expect(result.deps.every((dep) => dep.skipReason)).toEqual(true); + expect(result.deps.every((dep) => dep.skipReason)).toBe(true); }); it('parses simple requirements.yaml correctly', () => { fs.readLocalFile.mockResolvedValueOnce(` @@ -111,7 +111,7 @@ describe('manager/helm-requirements/extract', () => { }); expect(result).not.toBeNull(); expect(result).toMatchSnapshot(); - expect(result.deps.every((dep) => dep.skipReason)).toEqual(false); + expect(result.deps.every((dep) => dep.skipReason)).toBe(false); }); it('skips local dependencies', () => { fs.readLocalFile.mockResolvedValueOnce(` diff --git a/lib/manager/helmv3/extract.spec.ts b/lib/manager/helmv3/extract.spec.ts index 3aa609097db193..fdee21c75621cf 100644 --- a/lib/manager/helmv3/extract.spec.ts +++ b/lib/manager/helmv3/extract.spec.ts @@ -35,7 +35,7 @@ describe('manager/helmv3/extract', () => { }); expect(result).not.toBeNull(); expect(result).toMatchSnapshot(); - expect(result.deps.every((dep) => dep.skipReason)).toEqual(true); + expect(result.deps.every((dep) => dep.skipReason)).toBe(true); }); it('parses simple Chart.yaml correctly', async () => { const content = ` @@ -129,7 +129,7 @@ describe('manager/helmv3/extract', () => { }); expect(result).not.toBeNull(); expect(result).toMatchSnapshot(); - expect(result.deps.every((dep) => dep.skipReason)).toEqual(false); + expect(result.deps.every((dep) => dep.skipReason)).toBe(false); }); it("doesn't fail if Chart.yaml is invalid", async () => { const content = ` diff --git a/lib/manager/kustomize/extract.spec.ts b/lib/manager/kustomize/extract.spec.ts index 265d0cc3d6888d..9abae0efc101ff 100644 --- a/lib/manager/kustomize/extract.spec.ts +++ b/lib/manager/kustomize/extract.spec.ts @@ -221,16 +221,16 @@ describe('manager/kustomize/extract', () => { const res = extractPackageFile(kustomizeHTTP); expect(res.deps).toMatchSnapshot(); expect(res.deps).toHaveLength(2); - expect(res.deps[0].currentValue).toEqual('v0.0.1'); - expect(res.deps[1].currentValue).toEqual('1.19.0'); - expect(res.deps[1].depName).toEqual('fluxcd/flux'); + expect(res.deps[0].currentValue).toBe('v0.0.1'); + expect(res.deps[1].currentValue).toBe('1.19.0'); + expect(res.deps[1].depName).toBe('fluxcd/flux'); }); it('should extract out image versions', () => { const res = extractPackageFile(gitImages); expect(res.deps).toMatchSnapshot(); expect(res.deps).toHaveLength(6); - expect(res.deps[0].currentValue).toEqual('v0.1.0'); - expect(res.deps[1].currentValue).toEqual('v0.0.1'); + expect(res.deps[0].currentValue).toBe('v0.1.0'); + expect(res.deps[1].currentValue).toBe('v0.0.1'); expect(res.deps[5].skipReason).toEqual(SkipReason.InvalidValue); }); it('ignores non-Kubernetes empty files', () => { @@ -244,28 +244,28 @@ describe('manager/kustomize/extract', () => { expect(res).not.toBeNull(); expect(res.deps).toMatchSnapshot(); expect(res.deps).toHaveLength(3); - expect(res.deps[0].currentValue).toEqual('v0.0.1'); - expect(res.deps[1].currentValue).toEqual('1.19.0'); - expect(res.deps[2].currentValue).toEqual('1.18.0'); - expect(res.deps[1].depName).toEqual('fluxcd/flux'); - expect(res.deps[2].depName).toEqual('fluxcd/flux'); - expect(res.deps[0].depType).toEqual('Kustomization'); - expect(res.deps[1].depType).toEqual('Kustomization'); - expect(res.deps[2].depType).toEqual('Kustomization'); + expect(res.deps[0].currentValue).toBe('v0.0.1'); + expect(res.deps[1].currentValue).toBe('1.19.0'); + expect(res.deps[2].currentValue).toBe('1.18.0'); + expect(res.deps[1].depName).toBe('fluxcd/flux'); + expect(res.deps[2].depName).toBe('fluxcd/flux'); + expect(res.deps[0].depType).toBe('Kustomization'); + expect(res.deps[1].depType).toBe('Kustomization'); + expect(res.deps[2].depType).toBe('Kustomization'); }); it('should extract dependencies when kind is Component', () => { const res = extractPackageFile(kustomizeComponent); expect(res).not.toBeNull(); expect(res.deps).toMatchSnapshot(); expect(res.deps).toHaveLength(3); - expect(res.deps[0].currentValue).toEqual('1.19.0'); - expect(res.deps[1].currentValue).toEqual('1.18.0'); - expect(res.deps[2].currentValue).toEqual('v0.1.0'); - expect(res.deps[1].depName).toEqual('fluxcd/flux'); - expect(res.deps[2].depName).toEqual('node'); - expect(res.deps[0].depType).toEqual('Component'); - expect(res.deps[1].depType).toEqual('Component'); - expect(res.deps[2].depType).toEqual('Component'); + expect(res.deps[0].currentValue).toBe('1.19.0'); + expect(res.deps[1].currentValue).toBe('1.18.0'); + expect(res.deps[2].currentValue).toBe('v0.1.0'); + expect(res.deps[1].depName).toBe('fluxcd/flux'); + expect(res.deps[2].depName).toBe('node'); + expect(res.deps[0].depType).toBe('Component'); + expect(res.deps[1].depType).toBe('Component'); + expect(res.deps[2].depType).toBe('Component'); }); const postgresDigest = diff --git a/lib/manager/leiningen/extract.spec.ts b/lib/manager/leiningen/extract.spec.ts index b5c250ebc67fdc..368a459ae3de55 100644 --- a/lib/manager/leiningen/extract.spec.ts +++ b/lib/manager/leiningen/extract.spec.ts @@ -13,9 +13,7 @@ describe('manager/leiningen/extract', () => { it('trimAtKey', () => { expect(trimAtKey('foo', 'bar')).toBeNull(); expect(trimAtKey(':dependencies ', 'dependencies')).toBeNull(); - expect(trimAtKey(':dependencies \nfoobar', 'dependencies')).toEqual( - 'foobar' - ); + expect(trimAtKey(':dependencies \nfoobar', 'dependencies')).toBe('foobar'); }); it('extractFromVectors', () => { expect(extractFromVectors('')).toBeEmptyArray(); diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts index d12c23e157bed9..7226b7cc7687bc 100644 --- a/lib/manager/npm/extract/index.spec.ts +++ b/lib/manager/npm/extract/index.spec.ts @@ -163,7 +163,7 @@ describe('manager/npm/extract/index', () => { 'package.json', {} ); - expect(res.npmrc).toEqual('registry=https://registry.npmjs.org\n'); + expect(res.npmrc).toBe('registry=https://registry.npmjs.org\n'); }); it('finds lerna', async () => { fs.readLocalFile = jest.fn((fileName) => { diff --git a/lib/manager/npm/extract/monorepo.spec.ts b/lib/manager/npm/extract/monorepo.spec.ts index 19763b49b334ae..128563c7310337 100644 --- a/lib/manager/npm/extract/monorepo.spec.ts +++ b/lib/manager/npm/extract/monorepo.spec.ts @@ -50,7 +50,7 @@ describe('manager/npm/extract/monorepo', () => { ] as any; await detectMonorepos(packageFiles, false); expect(packageFiles).toMatchSnapshot(); - expect(packageFiles[1].managerData.lernaJsonFile).toEqual('lerna.json'); + expect(packageFiles[1].managerData.lernaJsonFile).toBe('lerna.json'); expect( packageFiles.some((packageFile) => packageFile.deps?.some((dep) => dep.skipReason) @@ -104,7 +104,7 @@ describe('manager/npm/extract/monorepo', () => { ] as any; await detectMonorepos(packageFiles, true); expect(packageFiles).toMatchSnapshot(); - expect(packageFiles[1].managerData.lernaJsonFile).toEqual('lerna.json'); + expect(packageFiles[1].managerData.lernaJsonFile).toBe('lerna.json'); expect( packageFiles.some((packageFile) => packageFile.deps?.some((dep) => dep.skipReason) @@ -134,7 +134,7 @@ describe('manager/npm/extract/monorepo', () => { ]; await detectMonorepos(packageFiles, false); expect(packageFiles).toMatchSnapshot(); - expect(packageFiles[1].managerData.lernaJsonFile).toEqual('lerna.json'); + expect(packageFiles[1].managerData.lernaJsonFile).toBe('lerna.json'); }); it('uses yarn workspaces package settings without lerna', async () => { diff --git a/lib/manager/npm/extract/npm.spec.ts b/lib/manager/npm/extract/npm.spec.ts index 8e704676f4bd40..1cd429d659f3b9 100644 --- a/lib/manager/npm/extract/npm.spec.ts +++ b/lib/manager/npm/extract/npm.spec.ts @@ -23,7 +23,7 @@ describe('manager/npm/extract/npm', () => { const res = await getNpmLock('package.json'); expect(res).toMatchSnapshot(); expect(Object.keys(res.lockedVersions)).toHaveLength(7); - expect(res.lockfileVersion).toEqual(2); + expect(res.lockfileVersion).toBe(2); }); it('returns empty if no deps', async () => { fs.readLocalFile.mockResolvedValueOnce('{}'); diff --git a/lib/manager/npm/extract/pnpm.spec.ts b/lib/manager/npm/extract/pnpm.spec.ts index d27216433f47ad..fc69ee6aa86c17 100644 --- a/lib/manager/npm/extract/pnpm.spec.ts +++ b/lib/manager/npm/extract/pnpm.spec.ts @@ -168,7 +168,7 @@ describe('manager/npm/extract/pnpm', () => { (packageFile) => packageFile.packageFile === 'not-matching/b/package.json' ).pnpmShrinkwrap - ).not.toBeDefined(); + ).toBeUndefined(); }); }); }); diff --git a/lib/manager/npm/extract/yarn.spec.ts b/lib/manager/npm/extract/yarn.spec.ts index 94ae015d7baf55..6cc368a48cd067 100644 --- a/lib/manager/npm/extract/yarn.spec.ts +++ b/lib/manager/npm/extract/yarn.spec.ts @@ -27,7 +27,7 @@ describe('manager/npm/extract/yarn', () => { fs.readLocalFile.mockResolvedValueOnce(plocktest1Lock); const res = await getYarnLock('package.json'); expect(res.isYarn1).toBeFalse(); - expect(res.lockfileVersion).toBe(NaN); + expect(res.lockfileVersion).toBeNaN(); expect(res.lockedVersions).toMatchSnapshot(); expect(Object.keys(res.lockedVersions)).toHaveLength(8); }); diff --git a/lib/manager/npm/post-update/node-version.spec.ts b/lib/manager/npm/post-update/node-version.spec.ts index c32f94d27116d8..f2993e14b7bf27 100644 --- a/lib/manager/npm/post-update/node-version.spec.ts +++ b/lib/manager/npm/post-update/node-version.spec.ts @@ -13,27 +13,27 @@ describe('manager/npm/post-update/node-version', () => { fs.readLocalFile.mockResolvedValueOnce(null); fs.readLocalFile.mockResolvedValueOnce(null); const res = await getNodeConstraint(config); - expect(res).toEqual('^12.16.0'); + expect(res).toBe('^12.16.0'); }); it('returns .node-version value', async () => { fs.readLocalFile = jest.fn(); fs.readLocalFile.mockResolvedValueOnce(null); fs.readLocalFile.mockResolvedValueOnce('12.16.1\n'); const res = await getNodeConstraint(config); - expect(res).toEqual('12.16.1'); + expect(res).toBe('12.16.1'); }); it('returns .nvmrc value', async () => { fs.readLocalFile = jest.fn(); fs.readLocalFile.mockResolvedValueOnce('12.16.2\n'); const res = await getNodeConstraint(config); - expect(res).toEqual('12.16.2'); + expect(res).toBe('12.16.2'); }); it('ignores unusable ranges in dotfiles', async () => { fs.readLocalFile = jest.fn(); fs.readLocalFile.mockResolvedValueOnce('latest'); fs.readLocalFile.mockResolvedValueOnce('lts'); const res = await getNodeConstraint(config); - expect(res).toEqual('^12.16.0'); + expect(res).toBe('^12.16.0'); }); it('returns no constraint', async () => { fs.readLocalFile = jest.fn(); diff --git a/lib/manager/npm/post-update/npm.spec.ts b/lib/manager/npm/post-update/npm.spec.ts index f42342037210de..4fd11cf91c3e64 100644 --- a/lib/manager/npm/post-update/npm.spec.ts +++ b/lib/manager/npm/post-update/npm.spec.ts @@ -40,7 +40,7 @@ describe('manager/npm/post-update/npm', () => { ); expect(fs.readFile).toHaveBeenCalledTimes(2); expect(res.error).toBeUndefined(); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('massages lock files', async () => { @@ -86,7 +86,7 @@ describe('manager/npm/post-update/npm', () => { ); expect(fs.readFile).toHaveBeenCalledTimes(2); expect(res.error).toBeUndefined(); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('performs npm-shrinkwrap.json updates', async () => { @@ -115,7 +115,7 @@ describe('manager/npm/post-update/npm', () => { 'utf8' ); expect(res.error).toBeUndefined(); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('performs npm-shrinkwrap.json updates (no package-lock.json)', async () => { @@ -140,7 +140,7 @@ describe('manager/npm/post-update/npm', () => { 'utf8' ); expect(res.error).toBeUndefined(); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('performs full install', async () => { @@ -156,7 +156,7 @@ describe('manager/npm/post-update/npm', () => { ); expect(fs.readFile).toHaveBeenCalledTimes(2); expect(res.error).toBeUndefined(); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('runs twice if remediating', async () => { @@ -172,7 +172,7 @@ describe('manager/npm/post-update/npm', () => { ); expect(fs.readFile).toHaveBeenCalledTimes(2); expect(res.error).toBeUndefined(); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toHaveLength(2); }); it('catches errors', async () => { @@ -187,7 +187,7 @@ describe('manager/npm/post-update/npm', () => { ); expect(fs.readFile).toHaveBeenCalledTimes(2); expect(res.error).toBeTrue(); - expect(res.lockFile).not.toBeDefined(); + expect(res.lockFile).toBeUndefined(); expect(execSnapshots).toMatchSnapshot(); }); it('finds npm globally', async () => { @@ -199,7 +199,7 @@ describe('manager/npm/post-update/npm', () => { 'package-lock.json' ); expect(fs.readFile).toHaveBeenCalledTimes(2); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('uses docker npm', async () => { @@ -212,7 +212,7 @@ describe('manager/npm/post-update/npm', () => { { binarySource: 'docker', constraints: { npm: '^6.0.0' } } ); expect(fs.readFile).toHaveBeenCalledTimes(2); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('performs lock file maintenance', async () => { @@ -227,7 +227,7 @@ describe('manager/npm/post-update/npm', () => { ); expect(fs.readFile).toHaveBeenCalledTimes(1); expect(fs.remove).toHaveBeenCalledTimes(1); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); }); diff --git a/lib/manager/npm/post-update/pnpm.spec.ts b/lib/manager/npm/post-update/pnpm.spec.ts index f3f1002abff218..14c46e2dcac122 100644 --- a/lib/manager/npm/post-update/pnpm.spec.ts +++ b/lib/manager/npm/post-update/pnpm.spec.ts @@ -28,7 +28,7 @@ describe('manager/npm/post-update/pnpm', () => { fs.readFile = jest.fn(() => 'package-lock-contents') as never; const res = await pnpmHelper.generateLockFile('some-dir', {}, config); expect(fs.readFile).toHaveBeenCalledTimes(1); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('catches errors', async () => { @@ -39,7 +39,7 @@ describe('manager/npm/post-update/pnpm', () => { const res = await pnpmHelper.generateLockFile('some-dir', {}, config); expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.error).toBeTrue(); - expect(res.lockFile).not.toBeDefined(); + expect(res.lockFile).toBeUndefined(); expect(execSnapshots).toMatchSnapshot(); }); it('finds pnpm globally', async () => { @@ -47,7 +47,7 @@ describe('manager/npm/post-update/pnpm', () => { fs.readFile = jest.fn(() => 'package-lock-contents') as never; const res = await pnpmHelper.generateLockFile('some-dir', {}, config); expect(fs.readFile).toHaveBeenCalledTimes(1); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); it('performs lock file maintenance', async () => { @@ -58,7 +58,7 @@ describe('manager/npm/post-update/pnpm', () => { ]); expect(fs.readFile).toHaveBeenCalledTimes(1); expect(fs.remove).toHaveBeenCalledTimes(1); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); @@ -73,7 +73,7 @@ describe('manager/npm/post-update/pnpm', () => { }, ]); expect(fs.readFile).toHaveBeenCalledTimes(1); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); // TODO: check docker preCommands }); diff --git a/lib/manager/npm/post-update/yarn.spec.ts b/lib/manager/npm/post-update/yarn.spec.ts index 004297a6cb9925..8c7534524da7bb 100644 --- a/lib/manager/npm/post-update/yarn.spec.ts +++ b/lib/manager/npm/post-update/yarn.spec.ts @@ -71,7 +71,7 @@ describe('manager/npm/post-update/yarn', () => { ); expect(fs.readFile).toHaveBeenCalledTimes(expectedFsCalls); expect(fs.remove).toHaveBeenCalledTimes(0); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); } ); @@ -90,7 +90,7 @@ describe('manager/npm/post-update/yarn', () => { skipInstalls: false, }; const res = await yarnHelper.generateLockFile('some-dir', {}, config); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); }); @@ -108,7 +108,7 @@ describe('manager/npm/post-update/yarn', () => { managerData: { yarnZeroInstall: true }, }; const res = await yarnHelper.generateLockFile('some-dir', {}, config); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); }); @@ -143,7 +143,7 @@ describe('manager/npm/post-update/yarn', () => { isLockfileUpdate: true, }, ]); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); } ); @@ -166,7 +166,7 @@ describe('manager/npm/post-update/yarn', () => { isLockfileUpdate: true, }, ]); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); } ); @@ -201,7 +201,7 @@ describe('manager/npm/post-update/yarn', () => { ]); expect(fs.readFile).toHaveBeenCalledTimes(expectedFsCalls); expect(fs.remove).toHaveBeenCalledTimes(1); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); } ); @@ -236,7 +236,7 @@ describe('manager/npm/post-update/yarn', () => { newValue: '3.0.1', }, ]); - expect(res.lockFile).toEqual('package-lock-contents'); + expect(res.lockFile).toBe('package-lock-contents'); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); } ); @@ -252,7 +252,7 @@ describe('manager/npm/post-update/yarn', () => { const res = await yarnHelper.generateLockFile('some-dir', {}); expect(fs.readFile).toHaveBeenCalledTimes(2); expect(res.error).toBeTrue(); - expect(res.lockFile).not.toBeDefined(); + expect(res.lockFile).toBeUndefined(); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); }); diff --git a/lib/manager/npm/range.spec.ts b/lib/manager/npm/range.spec.ts index 89bda5778ae906..2508e6b94c5b5f 100644 --- a/lib/manager/npm/range.spec.ts +++ b/lib/manager/npm/range.spec.ts @@ -4,14 +4,14 @@ import { getRangeStrategy } from '.'; describe('manager/npm/range', () => { it('returns same if not auto', () => { const config: RangeConfig = { rangeStrategy: 'widen' }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('pins devDependencies', () => { const config: RangeConfig = { rangeStrategy: 'auto', depType: 'devDependencies', }; - expect(getRangeStrategy(config)).toEqual('pin'); + expect(getRangeStrategy(config)).toBe('pin'); }); it('pins app dependencies', () => { const config: RangeConfig = { @@ -19,14 +19,14 @@ describe('manager/npm/range', () => { depType: 'dependencies', packageJsonType: 'app', }; - expect(getRangeStrategy(config)).toEqual('pin'); + expect(getRangeStrategy(config)).toBe('pin'); }); it('widens peerDependencies', () => { const config: RangeConfig = { rangeStrategy: 'auto', depType: 'peerDependencies', }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('widens complex ranges', () => { const config: RangeConfig = { @@ -34,7 +34,7 @@ describe('manager/npm/range', () => { depType: 'dependencies', currentValue: '^1.6.0 || ^2.0.0', }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('widens complex bump', () => { const config: RangeConfig = { @@ -42,13 +42,13 @@ describe('manager/npm/range', () => { depType: 'dependencies', currentValue: '^1.6.0 || ^2.0.0', }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('defaults to replace', () => { const config: RangeConfig = { rangeStrategy: 'auto', depType: 'dependencies', }; - expect(getRangeStrategy(config)).toEqual('replace'); + expect(getRangeStrategy(config)).toBe('replace'); }); }); diff --git a/lib/manager/npm/update/dependency/index.spec.ts b/lib/manager/npm/update/dependency/index.spec.ts index f80a404095cb9b..fda93a11ffc8dd 100644 --- a/lib/manager/npm/update/dependency/index.spec.ts +++ b/lib/manager/npm/update/dependency/index.spec.ts @@ -113,8 +113,8 @@ describe('manager/npm/update/dependency/index', () => { fileContent: input01Content, upgrade, }); - expect(JSON.parse(testContent).dependencies.config).toEqual('1.22.0'); - expect(JSON.parse(testContent).resolutions.config).toEqual('1.22.0'); + expect(JSON.parse(testContent).dependencies.config).toBe('1.22.0'); + expect(JSON.parse(testContent).resolutions.config).toBe('1.22.0'); }); it('updates glob resolutions', () => { const upgrade = { @@ -126,10 +126,8 @@ describe('manager/npm/update/dependency/index', () => { fileContent: input01GlobContent, upgrade, }); - expect(JSON.parse(testContent).dependencies.config).toEqual('1.22.0'); - expect(JSON.parse(testContent).resolutions['**/config']).toEqual( - '1.22.0' - ); + expect(JSON.parse(testContent).dependencies.config).toBe('1.22.0'); + expect(JSON.parse(testContent).resolutions['**/config']).toBe('1.22.0'); }); it('updates glob resolutions without dep', () => { const upgrade = { @@ -142,7 +140,7 @@ describe('manager/npm/update/dependency/index', () => { fileContent: input01Content, upgrade, }); - expect(JSON.parse(testContent).resolutions['**/@angular/cli']).toEqual( + expect(JSON.parse(testContent).resolutions['**/@angular/cli']).toBe( '8.1.0' ); }); diff --git a/lib/manager/npm/update/locked-dependency/index.spec.ts b/lib/manager/npm/update/locked-dependency/index.spec.ts index 910b6713d746ed..2e9431873381e1 100644 --- a/lib/manager/npm/update/locked-dependency/index.spec.ts +++ b/lib/manager/npm/update/locked-dependency/index.spec.ts @@ -77,7 +77,7 @@ describe('manager/npm/update/locked-dependency/index', () => { }); expect( JSON.parse(res['package-lock.json']).dependencies.mime.version - ).toEqual('1.2.12'); + ).toBe('1.2.12'); }); it('fails to remediate if parent dep cannot support', async () => { const acceptsModified = clone(acceptsJson); @@ -105,7 +105,7 @@ describe('manager/npm/update/locked-dependency/index', () => { const res = await updateLockedDependency(config); expect(res['package.json']).toContain('"express": "4.1.0"'); const packageLock = JSON.parse(res['package-lock.json']); - expect(packageLock.dependencies.express.version).toEqual('4.1.0'); + expect(packageLock.dependencies.express.version).toBe('4.1.0'); }); it('remediates mime', async () => { config.depName = 'mime'; @@ -129,8 +129,8 @@ describe('manager/npm/update/locked-dependency/index', () => { .reply(200, typeIsJson); const res = await updateLockedDependency(config); const packageLock = JSON.parse(res['package-lock.json']); - expect(packageLock.dependencies.mime.version).toEqual('1.4.1'); - expect(packageLock.dependencies.express.version).toEqual('4.16.0'); + expect(packageLock.dependencies.mime.version).toBe('1.4.1'); + expect(packageLock.dependencies.express.version).toBe('4.16.0'); expect(httpMock.getTrace()).toMatchSnapshot(); }); }); diff --git a/lib/manager/npm/update/locked-dependency/parent-version.spec.ts b/lib/manager/npm/update/locked-dependency/parent-version.spec.ts index b69240da05c2cd..5ecfd4fee648f7 100644 --- a/lib/manager/npm/update/locked-dependency/parent-version.spec.ts +++ b/lib/manager/npm/update/locked-dependency/parent-version.spec.ts @@ -28,7 +28,7 @@ describe('manager/npm/update/locked-dependency/parent-version', () => { expect( await findFirstParentVersion('express', '4.0.0', 'send', '0.11.1') - ).toEqual('4.11.1'); + ).toBe('4.11.1'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -52,7 +52,7 @@ describe('manager/npm/update/locked-dependency/parent-version', () => { 'buffer-crc32', '10.0.0' ) - ).toEqual('4.9.1'); + ).toBe('4.9.1'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -73,7 +73,7 @@ describe('manager/npm/update/locked-dependency/parent-version', () => { expect( await findFirstParentVersion('express', '4.0.0', 'qs', '6.0.4') - ).toEqual('4.14.0'); + ).toBe('4.14.0'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -93,7 +93,7 @@ describe('manager/npm/update/locked-dependency/parent-version', () => { expect( await findFirstParentVersion('express', '4.16.1', 'type-is', '1.2.1') - ).toEqual('4.16.1'); + ).toBe('4.16.1'); expect(httpMock.getTrace()).toMatchSnapshot(); }); diff --git a/lib/manager/pip_requirements/range.spec.ts b/lib/manager/pip_requirements/range.spec.ts index 00d2861330cb46..80fbe2b14a0fba 100644 --- a/lib/manager/pip_requirements/range.spec.ts +++ b/lib/manager/pip_requirements/range.spec.ts @@ -4,10 +4,10 @@ import { getRangeStrategy } from '.'; describe('manager/pip_requirements/range', () => { it('returns same if not auto', () => { const config: RangeConfig = { rangeStrategy: 'widen' }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('pins if auto', () => { const config: RangeConfig = { rangeStrategy: 'auto' }; - expect(getRangeStrategy(config)).toEqual('pin'); + expect(getRangeStrategy(config)).toBe('pin'); }); }); diff --git a/lib/manager/pipenv/extract.spec.ts b/lib/manager/pipenv/extract.spec.ts index 88804599b428df..1e5b711304d6a5 100644 --- a/lib/manager/pipenv/extract.spec.ts +++ b/lib/manager/pipenv/extract.spec.ts @@ -83,24 +83,24 @@ describe('manager/pipenv/extract', () => { '[packages]\r\nfoo = "==1.0.0"\r\n' + '[requires]\r\npython_version = "3.8"'; const res = await extractPackageFile(content, 'Pipfile'); - expect(res.constraints.python).toEqual('== 3.8.*'); + expect(res.constraints.python).toBe('== 3.8.*'); }); it('gets python constraint from python_full_version', async () => { const content = '[packages]\r\nfoo = "==1.0.0"\r\n' + '[requires]\r\npython_full_version = "3.8.6"'; const res = await extractPackageFile(content, 'Pipfile'); - expect(res.constraints.python).toEqual('== 3.8.6'); + expect(res.constraints.python).toBe('== 3.8.6'); }); it('gets pipenv constraint from packages', async () => { const content = '[packages]\r\npipenv = "==2020.8.13"'; const res = await extractPackageFile(content, 'Pipfile'); - expect(res.constraints.pipenv).toEqual('==2020.8.13'); + expect(res.constraints.pipenv).toBe('==2020.8.13'); }); it('gets pipenv constraint from dev-packages', async () => { const content = '[dev-packages]\r\npipenv = "==2020.8.13"'; const res = await extractPackageFile(content, 'Pipfile'); - expect(res.constraints.pipenv).toEqual('==2020.8.13'); + expect(res.constraints.pipenv).toBe('==2020.8.13'); }); }); }); diff --git a/lib/manager/range.spec.ts b/lib/manager/range.spec.ts index 4726cc910e5999..943901f89a5018 100644 --- a/lib/manager/range.spec.ts +++ b/lib/manager/range.spec.ts @@ -7,7 +7,7 @@ describe('manager/range', () => { manager: 'npm', rangeStrategy: 'widen', }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('returns manager strategy', () => { const config: RangeConfig = { @@ -16,20 +16,20 @@ describe('manager/range', () => { depType: 'dependencies', packageJsonType: 'app', }; - expect(getRangeStrategy(config)).toEqual('pin'); + expect(getRangeStrategy(config)).toBe('pin'); }); it('defaults to replace', () => { const config: RangeConfig = { manager: 'circleci', rangeStrategy: 'auto', }; - expect(getRangeStrategy(config)).toEqual('replace'); + expect(getRangeStrategy(config)).toBe('replace'); }); it('returns rangeStrategy if not auto', () => { const config: RangeConfig = { manager: 'circleci', rangeStrategy: 'future', }; - expect(getRangeStrategy(config)).toEqual('future'); + expect(getRangeStrategy(config)).toBe('future'); }); }); diff --git a/lib/manager/regex/index.spec.ts b/lib/manager/regex/index.spec.ts index 62e3fdc024a241..480af832794e11 100644 --- a/lib/manager/regex/index.spec.ts +++ b/lib/manager/regex/index.spec.ts @@ -30,10 +30,10 @@ describe('manager/regex/index', () => { ); expect(res).toMatchSnapshot(); expect(res.deps).toHaveLength(8); - expect(res.deps.find((dep) => dep.depName === 'yarn').versioning).toEqual( + expect(res.deps.find((dep) => dep.depName === 'yarn').versioning).toBe( 'semver' ); - expect(res.deps.find((dep) => dep.depName === 'gradle').versioning).toEqual( + expect(res.deps.find((dep) => dep.depName === 'gradle').versioning).toBe( 'maven' ); expect(res.deps.filter((dep) => dep.depType === 'final')).toHaveLength(8); @@ -80,7 +80,7 @@ describe('manager/regex/index', () => { res.deps.find( (dep) => dep.depName === 'openresty/headers-more-nginx-module' ).extractVersion - ).toEqual('^v(?.*)$'); + ).toBe('^v(?.*)$'); }); it('extracts registryUrl', async () => { const config = { @@ -165,8 +165,8 @@ describe('manager/regex/index', () => { expect(res.deps).toHaveLength(2); expect( res.deps.find((dep) => dep.depName === 'nodejs/node').versioning - ).toEqual('node'); - expect(res.deps.find((dep) => dep.depName === 'gradle').versioning).toEqual( + ).toBe('node'); + expect(res.deps.find((dep) => dep.depName === 'gradle').versioning).toBe( 'maven' ); }); @@ -225,7 +225,7 @@ describe('manager/regex/index', () => { config ); expect(res.deps).toHaveLength(1); - expect(res.deps[0].depName).toEqual('docker.io/prom/prometheus'); + expect(res.deps[0].depName).toBe('docker.io/prom/prometheus'); expect(res).toMatchSnapshot(); }); diff --git a/lib/manager/setup-cfg/range.spec.ts b/lib/manager/setup-cfg/range.spec.ts index 5f6cc8796412cf..dd7e15f55e9a2d 100644 --- a/lib/manager/setup-cfg/range.spec.ts +++ b/lib/manager/setup-cfg/range.spec.ts @@ -4,10 +4,10 @@ import { getRangeStrategy } from '.'; describe('manager/setup-cfg/range', () => { it('returns same if not auto', () => { const config: RangeConfig = { rangeStrategy: 'widen' }; - expect(getRangeStrategy(config)).toEqual('widen'); + expect(getRangeStrategy(config)).toBe('widen'); }); it('replaces if auto', () => { const config: RangeConfig = { rangeStrategy: 'auto' }; - expect(getRangeStrategy(config)).toEqual('replace'); + expect(getRangeStrategy(config)).toBe('replace'); }); }); diff --git a/lib/platform/azure/util.spec.ts b/lib/platform/azure/util.spec.ts index 9cdd579a7a5481..8dad90be812e26 100644 --- a/lib/platform/azure/util.spec.ts +++ b/lib/platform/azure/util.spec.ts @@ -117,7 +117,7 @@ describe('platform/azure/util', () => { describe('streamToString', () => { it('converts Readable stream to string', async () => { const res = await streamToString(Readable.from('foobar')); - expect(res).toEqual('foobar'); + expect(res).toBe('foobar'); }); it('handles error', async () => { const stream = Readable.from('foobar'); diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts index 3abe950b01aa58..2f8bda30a35b93 100644 --- a/lib/platform/bitbucket/index.spec.ts +++ b/lib/platform/bitbucket/index.spec.ts @@ -431,7 +431,7 @@ describe('platform/bitbucket/index', () => { .reply(200); expect( await bitbucket.ensureIssue({ title: 'title', body: 'body' }) - ).toEqual('updated'); + ).toBe('updated'); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('creates new issue', async () => { @@ -456,7 +456,7 @@ describe('platform/bitbucket/index', () => { reuseTitle: 'old-title', body: 'body', }) - ).toEqual('created'); + ).toBe('created'); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('noop for existing issue', async () => { diff --git a/lib/platform/gitea/gitea-helper.spec.ts b/lib/platform/gitea/gitea-helper.spec.ts index 9011dd0a6d561a..0b27f26fc09927 100644 --- a/lib/platform/gitea/gitea-helper.spec.ts +++ b/lib/platform/gitea/gitea-helper.spec.ts @@ -692,7 +692,7 @@ describe('platform/gitea/gitea-helper', () => { mockRepo.full_name, mockBranch.name ); - expect(res.worstStatus).not.toEqual('unknown'); + expect(res.worstStatus).not.toBe('unknown'); expect(res.statuses).toEqual([mockCommitStatus, otherMockCommitStatus]); expect(httpMock.getTrace()).toMatchSnapshot(); }); diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts index 5b41b8fb95c59f..01af9de574a19b 100644 --- a/lib/platform/gitea/index.spec.ts +++ b/lib/platform/gitea/index.spec.ts @@ -892,7 +892,7 @@ describe('platform/gitea/index', () => { branchName: 'some-branch', id: 1, }) - ).toEqual(true); + ).toBe(true); expect(helper.mergePR).toHaveBeenCalledTimes(1); expect(helper.mergePR).toHaveBeenCalledWith( mockRepo.full_name, @@ -910,7 +910,7 @@ describe('platform/gitea/index', () => { branchName: 'some-branch', id: 1, }) - ).toEqual(false); + ).toBe(false); }); }); @@ -973,7 +973,7 @@ describe('platform/gitea/index', () => { await initFakeRepo(); const res = await gitea.ensureIssue(mockIssue); - expect(res).toEqual('created'); + expect(res).toBe('created'); expect(helper.createIssue).toHaveBeenCalledTimes(1); expect(helper.createIssue).toHaveBeenCalledWith(mockRepo.full_name, { body: mockIssue.body, @@ -1005,7 +1005,7 @@ describe('platform/gitea/index', () => { await initFakeRepo(); const res = await gitea.ensureIssue(mockIssue); - expect(res).toEqual('created'); + expect(res).toBe('created'); expect(helper.createIssue).toHaveBeenCalledTimes(1); expect(helper.createIssue).toHaveBeenCalledWith(mockRepo.full_name, { body: mockIssue.body, @@ -1027,7 +1027,7 @@ describe('platform/gitea/index', () => { once: false, }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(helper.updateIssue).toHaveBeenCalledTimes(1); expect(helper.updateIssue).toHaveBeenCalledWith( mockRepo.full_name, @@ -1066,7 +1066,7 @@ describe('platform/gitea/index', () => { labels: ['Renovate', 'Maintenance'], }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(helper.updateIssue).toHaveBeenCalledTimes(1); expect(helper.updateIssueLabels).toHaveBeenCalledTimes(0); }); @@ -1097,7 +1097,7 @@ describe('platform/gitea/index', () => { labels: ['Renovate', 'Maintenance'], }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(helper.updateIssue).toHaveBeenCalledTimes(1); expect(helper.updateIssueLabels).toHaveBeenCalledTimes(1); expect(helper.updateIssueLabels).toHaveBeenCalledWith( @@ -1136,7 +1136,7 @@ describe('platform/gitea/index', () => { labels: ['Renovate', 'Maintenance'], }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(helper.updateIssue).toHaveBeenCalledTimes(1); expect(helper.updateIssueLabels).toHaveBeenCalledTimes(1); expect(helper.updateIssueLabels).toHaveBeenCalledWith( @@ -1161,7 +1161,7 @@ describe('platform/gitea/index', () => { once: false, }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(helper.updateIssue).toHaveBeenCalledTimes(1); expect(helper.updateIssue).toHaveBeenCalledWith( mockRepo.full_name, @@ -1296,7 +1296,7 @@ describe('platform/gitea/index', () => { describe('getRepoForceRebase', () => { it('should return false - unsupported by platform', async () => { - expect(await gitea.getRepoForceRebase()).toEqual(false); + expect(await gitea.getRepoForceRebase()).toBe(false); }); }); @@ -1315,7 +1315,7 @@ describe('platform/gitea/index', () => { }); const body = '### other-topic\n\nother-content'; - expect(res).toEqual(true); + expect(res).toBe(true); expect(helper.updateComment).not.toHaveBeenCalled(); expect(helper.createComment).toHaveBeenCalledTimes(1); expect(helper.createComment).toHaveBeenCalledWith( @@ -1338,7 +1338,7 @@ describe('platform/gitea/index', () => { topic: undefined, }); - expect(res).toEqual(true); + expect(res).toBe(true); expect(helper.updateComment).not.toHaveBeenCalled(); expect(helper.createComment).toHaveBeenCalledTimes(1); expect(helper.createComment).toHaveBeenCalledWith( @@ -1362,7 +1362,7 @@ describe('platform/gitea/index', () => { }); const body = '### some-topic\n\nsome-new-content'; - expect(res).toEqual(true); + expect(res).toBe(true); expect(helper.createComment).not.toHaveBeenCalled(); expect(helper.updateComment).toHaveBeenCalledTimes(1); expect(helper.updateComment).toHaveBeenCalledWith( @@ -1381,7 +1381,7 @@ describe('platform/gitea/index', () => { content: 'some-content', }); - expect(res).toEqual(true); + expect(res).toBe(true); expect(helper.createComment).not.toHaveBeenCalled(); expect(helper.updateComment).not.toHaveBeenCalled(); }); @@ -1395,7 +1395,7 @@ describe('platform/gitea/index', () => { content: 'some-content', }); - expect(res).toEqual(false); + expect(res).toBe(false); expect(logger.warn).toHaveBeenCalledTimes(1); }); }); diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts index 874e099f6174ba..1f4cb3419dfc62 100644 --- a/lib/platform/github/index.spec.ts +++ b/lib/platform/github/index.spec.ts @@ -1104,7 +1104,7 @@ describe('platform/github/index', () => { title: 'new-title', body: 'new-content', }); - expect(res).toEqual('created'); + expect(res).toBe('created'); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('creates issue if not ensuring only once', async () => { @@ -1213,7 +1213,7 @@ describe('platform/github/index', () => { body: 'new-content', labels: ['Renovate', 'Maintenance'], }); - expect(res).toEqual('created'); + expect(res).toBe('created'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -1304,7 +1304,7 @@ describe('platform/github/index', () => { reuseTitle: 'title-2', body: 'newer-content', }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -1349,7 +1349,7 @@ describe('platform/github/index', () => { body: 'newer-content', labels: ['Renovate', 'Maintenance'], }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -1471,7 +1471,7 @@ describe('platform/github/index', () => { once: false, shouldReOpen: false, }); - expect(res).toEqual('created'); + expect(res).toBe('created'); expect(httpMock.getTrace()).toMatchSnapshot(); }); it('does not create issue if reopen flag false and issue is already open', async () => { @@ -1816,7 +1816,7 @@ describe('platform/github/index', () => { }); expect(res).toBeDefined(); res = await github.findPr({ branchName: 'branch-b' }); - expect(res).not.toBeDefined(); + expect(res).toBeUndefined(); expect(httpMock.getTrace()).toMatchSnapshot(); }); }); diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts index 4f3107759acb3f..72e26a2970a903 100644 --- a/lib/platform/gitlab/index.spec.ts +++ b/lib/platform/gitlab/index.spec.ts @@ -786,7 +786,7 @@ describe('platform/gitlab/index', () => { title: 'new-title', body: 'new-content', }); - expect(res).toEqual('created'); + expect(res).toBe('created'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -804,7 +804,7 @@ describe('platform/gitlab/index', () => { body: 'new-content', labels: ['Renovate', 'Maintenance'], }); - expect(res).toEqual('created'); + expect(res).toBe('created'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -832,7 +832,7 @@ describe('platform/gitlab/index', () => { title: 'title-2', body: 'newer-content', }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(httpMock.getTrace()).toMatchSnapshot(); }); @@ -861,7 +861,7 @@ describe('platform/gitlab/index', () => { body: 'newer-content', labels: ['Renovate', 'Maintenance'], }); - expect(res).toEqual('updated'); + expect(res).toBe('updated'); expect(httpMock.getTrace()).toMatchSnapshot(); }); diff --git a/lib/platform/utils/pr-body.spec.ts b/lib/platform/utils/pr-body.spec.ts index 710a4ceda601dd..45bb155e7f5f0d 100644 --- a/lib/platform/utils/pr-body.spec.ts +++ b/lib/platform/utils/pr-body.spec.ts @@ -8,7 +8,7 @@ describe('platform/utils/pr-body', () => { it('truncates to 1000', () => { const body = smartTruncate(prBody, 1000); expect(body).toMatchSnapshot(); - expect(body.length < prBody.length).toEqual(true); + expect(body.length < prBody.length).toBe(true); }); it('truncates to 300 not smart', () => { @@ -19,7 +19,7 @@ describe('platform/utils/pr-body', () => { it('truncates to 10', () => { const body = smartTruncate('Lorem ipsum dolor sit amet', 10); - expect(body).toEqual('Lorem ipsu'); + expect(body).toBe('Lorem ipsu'); }); it('does not truncate', () => { diff --git a/lib/util/cache/memory/index.spec.ts b/lib/util/cache/memory/index.spec.ts index 6d4fcdb2fdbdcf..09abf21e1f9c55 100644 --- a/lib/util/cache/memory/index.spec.ts +++ b/lib/util/cache/memory/index.spec.ts @@ -7,7 +7,7 @@ describe('util/cache/memory/index', () => { it('sets and gets repo cache', () => { memCache.init(); memCache.set('key2', 'value'); - expect(memCache.get('key2')).toEqual('value'); + expect(memCache.get('key2')).toBe('value'); }); it('resets', () => { memCache.init(); diff --git a/lib/util/cache/package/decorator.spec.ts b/lib/util/cache/package/decorator.spec.ts index 5921bc34651c61..dd9f27244d0d15 100644 --- a/lib/util/cache/package/decorator.spec.ts +++ b/lib/util/cache/package/decorator.spec.ts @@ -29,7 +29,7 @@ describe('util/cache/package/decorator', () => { } const myClass = new MyClass(); expect(await myClass.getNumber()).toEqual(await myClass.getNumber()); - expect(await myClass.getNumber()).not.toBeUndefined(); + expect(await myClass.getNumber()).toBeDefined(); expect(spy).toHaveBeenCalledTimes(1); }); @@ -44,8 +44,8 @@ describe('util/cache/package/decorator', () => { const myClass = new MyClass(); expect(await myClass.getString('null', null)).toBeNull(); expect(await myClass.getString('null', null)).toBeNull(); - expect(await myClass.getString('test', 'test')).toEqual('test'); - expect(await myClass.getString('test', 'test')).not.toBeUndefined(); + expect(await myClass.getString('test', 'test')).toBe('test'); + expect(await myClass.getString('test', 'test')).toBeDefined(); expect(spy).toHaveBeenCalledTimes(2); }); @@ -82,7 +82,7 @@ describe('util/cache/package/decorator', () => { expect(await myClass.getNumber(getReleasesConfig)).toEqual( await myClass.getNumber(getReleasesConfig) ); - expect(await myClass.getNumber(getReleasesConfig)).not.toBeUndefined(); + expect(await myClass.getNumber(getReleasesConfig)).toBeDefined(); expect(spy).toHaveBeenCalledTimes(1); }); }); diff --git a/lib/util/emoji.spec.ts b/lib/util/emoji.spec.ts index 969563e339565a..d663320fe69593 100644 --- a/lib/util/emoji.spec.ts +++ b/lib/util/emoji.spec.ts @@ -8,7 +8,7 @@ describe('util/emoji', () => { describe('emojify', () => { it('encodes known shortcodes', () => { - expect(emojify('Let it :bee:')).toEqual('Let it 🐝'); + expect(emojify('Let it :bee:')).toBe('Let it 🐝'); }); it('encodes aliases', () => { @@ -18,12 +18,12 @@ describe('util/emoji', () => { }); it('omits unknown shortcodes', () => { - expect(emojify(':foo: :bar: :bee:')).toEqual(':foo: :bar: 🐝'); + expect(emojify(':foo: :bar: :bee:')).toBe(':foo: :bar: 🐝'); }); it('does not encode when config option is disabled', () => { setEmojiConfig({ unicodeEmoji: false }); - expect(emojify('Let it :bee:')).toEqual('Let it :bee:'); + expect(emojify('Let it :bee:')).toBe('Let it :bee:'); }); }); @@ -51,7 +51,7 @@ describe('util/emoji', () => { it('uses replacement character', () => { setEmojiConfig({ unicodeEmoji: false }); - expect(unemojify(unsupported)).toEqual('īŋŊ'); + expect(unemojify(unsupported)).toBe('īŋŊ'); }); }); }); diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index b2b27b4e31f8f7..83aff7d3e2196a 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -449,14 +449,14 @@ describe('util/git/index', () => { hostname: 'host', repository: 'some/repo', }) - ).toEqual('https://user:pass@host/some/repo.git'); + ).toBe('https://user:pass@host/some/repo.git'); expect( getUrl({ auth: 'user:pass', hostname: 'host', repository: 'some/repo', }) - ).toEqual('https://user:pass@host/some/repo.git'); + ).toBe('https://user:pass@host/some/repo.git'); }); it('returns ssh url', () => { @@ -467,7 +467,7 @@ describe('util/git/index', () => { hostname: 'host', repository: 'some/repo', }) - ).toEqual('git@host:some/repo.git'); + ).toBe('git@host:some/repo.git'); }); }); diff --git a/lib/util/host-rules.spec.ts b/lib/util/host-rules.spec.ts index c60d24d9b51fea..9f64b19c6311ae 100644 --- a/lib/util/host-rules.spec.ts +++ b/lib/util/host-rules.spec.ts @@ -97,10 +97,10 @@ describe('util/host-rules', () => { expect( find({ hostType: datasourceNuget.id, url: 'https://api.github.com' }) .token - ).toEqual('def'); + ).toBe('def'); expect( find({ hostType: datasourceNuget.id, url: 'https://github.com' }).token - ).toEqual('def'); + ).toBe('def'); expect( find({ hostType: datasourceNuget.id, url: 'https://apigithub.com' }) .token @@ -131,7 +131,7 @@ describe('util/host-rules', () => { hostType: PlatformId.Github, url: 'https://api.github.com/repos/org-b/someRepo/tags?per_page=100', }).token - ).toEqual('def'); + ).toBe('def'); }); it('matches for several hostTypes when no hostType rule is configured', () => { @@ -144,13 +144,13 @@ describe('util/host-rules', () => { hostType: PlatformId.Github, url: 'https://api.github.com/repos/org-b/someRepo/tags?per_page=100', }).token - ).toEqual('abc'); + ).toBe('abc'); expect( find({ hostType: 'github-releases', url: 'https://api.github.com/repos/org-b/someRepo/tags?per_page=100', }).token - ).toEqual('abc'); + ).toBe('abc'); }); it('matches if hostType is configured and host rule is filtered with datasource', () => { @@ -169,7 +169,7 @@ describe('util/host-rules', () => { hostType: 'github-tags', url: 'https://api.github.com/repos/org-b/someRepo/tags?per_page=100', }).token - ).toEqual('def'); + ).toBe('def'); }); it('matches on hostName', () => { @@ -188,21 +188,21 @@ describe('util/host-rules', () => { token: 'def', }); expect(find({ url: 'https://api.domain.com' }).token).toBeUndefined(); - expect(find({ url: 'https://domain.com' }).token).toEqual('def'); + expect(find({ url: 'https://domain.com' }).token).toBe('def'); expect( find({ hostType: datasourceNuget.id, url: 'https://domain.com/renovatebot', }).token - ).toEqual('def'); + ).toBe('def'); }); it('matches on matchHost without protocol', () => { add({ matchHost: 'domain.com', token: 'def', }); - expect(find({ url: 'https://api.domain.com' }).token).toEqual('def'); - expect(find({ url: 'https://domain.com' }).token).toEqual('def'); + expect(find({ url: 'https://api.domain.com' }).token).toBe('def'); + expect(find({ url: 'https://domain.com' }).token).toBe('def'); expect(find({ url: 'httpsdomain.com' }).token).toBeUndefined(); }); it('matches on matchHost with dot prefix', () => { @@ -210,7 +210,7 @@ describe('util/host-rules', () => { matchHost: '.domain.com', token: 'def', }); - expect(find({ url: 'https://api.domain.com' }).token).toEqual('def'); + expect(find({ url: 'https://api.domain.com' }).token).toBe('def'); expect(find({ url: 'https://domain.com' }).token).toBeUndefined(); expect(find({ url: 'httpsdomain.com' }).token).toBeUndefined(); }); @@ -223,7 +223,7 @@ describe('util/host-rules', () => { expect( find({ hostType: datasourceNuget.id, url: 'https://nuget.local/api' }) .token - ).toEqual('abc'); + ).toBe('abc'); }); it('matches on endpoint subresource', () => { add({ diff --git a/lib/util/http/github.spec.ts b/lib/util/http/github.spec.ts index c4043d3122bff5..67fc7e5a2c60bf 100644 --- a/lib/util/http/github.spec.ts +++ b/lib/util/http/github.spec.ts @@ -356,7 +356,7 @@ describe('util/http/github', () => { await githubApi.requestGraphql(graphqlQuery); const [req] = httpMock.getTrace(); expect(req).toBeDefined(); - expect(req.url).toEqual('https://ghe.mycompany.com/api/graphql'); + expect(req.url).toBe('https://ghe.mycompany.com/api/graphql'); }); it('supports app mode', async () => { hostRules.add({ hostType: 'github', token: 'x-access-token:123test' }); diff --git a/lib/util/http/index.spec.ts b/lib/util/http/index.spec.ts index 5a9c9f47cc9f23..b3003dfad468c2 100644 --- a/lib/util/http/index.spec.ts +++ b/lib/util/http/index.spec.ts @@ -213,6 +213,6 @@ describe('util/http/index', () => { httpMock.scope(baseUrl).get('/').reply(200, Buffer.from('test')); const res = await http.getBuffer('http://renovate.com'); expect(res.body).toBeInstanceOf(Buffer); - expect(res.body.toString('utf-8')).toEqual('test'); + expect(res.body.toString('utf-8')).toBe('test'); }); }); diff --git a/lib/util/json-writer/json-writer.spec.ts b/lib/util/json-writer/json-writer.spec.ts index aa7ea661c65afa..4e3f813810c9e0 100644 --- a/lib/util/json-writer/json-writer.spec.ts +++ b/lib/util/json-writer/json-writer.spec.ts @@ -9,7 +9,7 @@ describe('util/json-writer/json-writer', () => { it('should apply 2 spaces indentation by default', () => { const jsonWriter = new JSONWriter(); - expect(jsonWriter.write(DATA)).toStrictEqual('{\n "value": 1\n}\n'); + expect(jsonWriter.write(DATA)).toBe('{\n "value": 1\n}\n'); }); it('should apply indentation size', () => { @@ -18,9 +18,7 @@ describe('util/json-writer/json-writer', () => { indentationSize: 10, }); - expect(jsonWriter.write(DATA)).toStrictEqual( - '{\n "value": 1\n}\n' - ); + expect(jsonWriter.write(DATA)).toBe('{\n "value": 1\n}\n'); }); it('should apply indentation type', () => { @@ -28,7 +26,7 @@ describe('util/json-writer/json-writer', () => { indentationType: IndentationType.Tab, }); - expect(jsonWriter.write(DATA)).toStrictEqual('{\n\t"value": 1\n}\n'); + expect(jsonWriter.write(DATA)).toBe('{\n\t"value": 1\n}\n'); }); it('new line at the end should be optional', () => { @@ -37,8 +35,6 @@ describe('util/json-writer/json-writer', () => { indentationSize: 10, }); - expect(jsonWriter.write(DATA, false)).toStrictEqual( - '{\n "value": 1\n}' - ); + expect(jsonWriter.write(DATA, false)).toBe('{\n "value": 1\n}'); }); }); diff --git a/lib/util/mask.spec.ts b/lib/util/mask.spec.ts index 7d0753ba9604d2..a3150839d138d9 100644 --- a/lib/util/mask.spec.ts +++ b/lib/util/mask.spec.ts @@ -3,11 +3,11 @@ import { maskToken } from './mask'; describe('util/mask', () => { describe('.maskToken', () => { it('returns value if passed value is falsy', () => { - expect(maskToken('')).toEqual(''); + expect(maskToken('')).toBe(''); }); it('hides value content', () => { - expect(maskToken('123456789')).toEqual('12*****89'); + expect(maskToken('123456789')).toBe('12*****89'); }); }); }); diff --git a/lib/util/package-rules.spec.ts b/lib/util/package-rules.spec.ts index 79647e1c675ab2..afc4da063e03ff 100644 --- a/lib/util/package-rules.spec.ts +++ b/lib/util/package-rules.spec.ts @@ -731,6 +731,6 @@ describe('util/package-rules', () => { ], }; const res = applyPackageRules(config); - expect(res.groupSlug).toEqual('b'); + expect(res.groupSlug).toBe('b'); }); }); diff --git a/lib/versioning/git/index.spec.ts b/lib/versioning/git/index.spec.ts index 41d2a764cca376..53b5b8b35c9e4a 100644 --- a/lib/versioning/git/index.spec.ts +++ b/lib/versioning/git/index.spec.ts @@ -18,7 +18,7 @@ describe('versioning/git/index', () => { }); describe('valueToVersion(version)', () => { it('should return same as input', () => { - expect(git.valueToVersion('')).toEqual(''); + expect(git.valueToVersion('')).toBe(''); }); }); }); diff --git a/lib/versioning/semver-coerced/index.spec.ts b/lib/versioning/semver-coerced/index.spec.ts index c0ec30e40297b1..25fdee12ad445f 100644 --- a/lib/versioning/semver-coerced/index.spec.ts +++ b/lib/versioning/semver-coerced/index.spec.ts @@ -18,31 +18,31 @@ describe('versioning/semver-coerced/index', () => { describe('.getMajor(input)', () => { it('should return major version number for strict semver', () => { - expect(semverCoerced.getMajor('1.0.2')).toEqual(1); + expect(semverCoerced.getMajor('1.0.2')).toBe(1); }); it('should return major version number for non-strict semver', () => { - expect(semverCoerced.getMajor('v3.1')).toEqual(3); + expect(semverCoerced.getMajor('v3.1')).toBe(3); }); }); describe('.getMinor(input)', () => { it('should return minor version number for strict semver', () => { - expect(semverCoerced.getMinor('1.0.2')).toEqual(0); + expect(semverCoerced.getMinor('1.0.2')).toBe(0); }); it('should return minor version number for non-strict semver', () => { - expect(semverCoerced.getMinor('v3.1')).toEqual(1); + expect(semverCoerced.getMinor('v3.1')).toBe(1); }); }); describe('.getPatch(input)', () => { it('should return patch version number for strict semver', () => { - expect(semverCoerced.getPatch('1.0.2')).toEqual(2); + expect(semverCoerced.getPatch('1.0.2')).toBe(2); }); it('should return patch version number for non-strict semver', () => { - expect(semverCoerced.getPatch('v3.1.2-foo')).toEqual(2); + expect(semverCoerced.getPatch('v3.1.2-foo')).toBe(2); }); }); @@ -174,13 +174,13 @@ describe('versioning/semver-coerced/index', () => { it('should return max satisfying version in range', () => { expect( semverCoerced.getSatisfyingVersion(['1.0.0', '1.0.4'], '^1.0') - ).toEqual('1.0.4'); + ).toBe('1.0.4'); }); it('should support coercion', () => { expect( semverCoerced.getSatisfyingVersion(['v1.0', '1.0.4-foo'], '^1.0') - ).toEqual('1.0.4'); + ).toBe('1.0.4'); }); }); @@ -188,13 +188,13 @@ describe('versioning/semver-coerced/index', () => { it('should return min satisfying version in range', () => { expect( semverCoerced.minSatisfyingVersion(['1.0.0', '1.0.4'], '^1.0') - ).toEqual('1.0.0'); + ).toBe('1.0.0'); }); it('should support coercion', () => { expect( semverCoerced.minSatisfyingVersion(['v1.0', '1.0.4-foo'], '^1.0') - ).toEqual('1.0.0'); + ).toBe('1.0.0'); }); }); @@ -207,13 +207,13 @@ describe('versioning/semver-coerced/index', () => { currentVersion: '1.0.0', newVersion: '1.1.0', }) - ).toEqual('1.1.0'); + ).toBe('1.1.0'); }); }); describe('.sortVersions(a, b)', () => { it('should return zero for equal versions', () => { - expect(semverCoerced.sortVersions('1.0.0', '1.0.0')).toEqual(0); + expect(semverCoerced.sortVersions('1.0.0', '1.0.0')).toBe(0); }); it('should return -1 for a < b', () => { @@ -221,11 +221,11 @@ describe('versioning/semver-coerced/index', () => { }); it('should return 1 for a > b', () => { - expect(semverCoerced.sortVersions('1.0.1', '1.0.0')).toEqual(1); + expect(semverCoerced.sortVersions('1.0.1', '1.0.0')).toBe(1); }); it('should return zero for equal non-strict versions', () => { - expect(semverCoerced.sortVersions('v1.0', '1.x')).toEqual(0); + expect(semverCoerced.sortVersions('v1.0', '1.x')).toBe(0); }); }); }); diff --git a/lib/workers/branch/auto-replace.spec.ts b/lib/workers/branch/auto-replace.spec.ts index 99faf7b5ab30b2..e89415f4dd6dfc 100644 --- a/lib/workers/branch/auto-replace.spec.ts +++ b/lib/workers/branch/auto-replace.spec.ts @@ -103,7 +103,7 @@ describe('workers/branch/auto-replace', () => { reuseExistingBranch ); // FIXME: explicit assert condition - expect(res).toEqual('wrong source'); + expect(res).toBe('wrong source'); }); it('updates version and integrity', async () => { const script = diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts index 877672413d37c5..07231792f93bbb 100644 --- a/lib/workers/branch/index.spec.ts +++ b/lib/workers/branch/index.spec.ts @@ -1196,7 +1196,7 @@ describe('workers/branch/index', () => { (f) => f.contents === 'modified_then_deleted_file' && f.name === '|delete|' ) - ).not.toBeUndefined(); + ).toBeDefined(); }); it('executes post-upgrade tasks once when set to branch mode', async () => { diff --git a/lib/workers/global/config/parse/cli.spec.ts b/lib/workers/global/config/parse/cli.spec.ts index 76455df6f260f7..cc9aa78092b25e 100644 --- a/lib/workers/global/config/parse/cli.spec.ts +++ b/lib/workers/global/config/parse/cli.spec.ts @@ -13,14 +13,14 @@ describe('workers/global/config/parse/cli', () => { const option: Partial = { name: 'oneTwoThree', }; - expect(cli.getCliName(option)).toEqual('--one-two-three'); + expect(cli.getCliName(option)).toBe('--one-two-three'); }); it('generates returns empty if CLI false', () => { const option: Partial = { name: 'oneTwoThree', cli: false, }; - expect(cli.getCliName(option)).toEqual(''); + expect(cli.getCliName(option)).toBe(''); }); }); describe('.getConfig(argv)', () => { diff --git a/lib/workers/global/config/parse/env.spec.ts b/lib/workers/global/config/parse/env.spec.ts index 432183313c4dcc..f52a856b9545e2 100644 --- a/lib/workers/global/config/parse/env.spec.ts +++ b/lib/workers/global/config/parse/env.spec.ts @@ -231,20 +231,20 @@ describe('workers/global/config/parse/env', () => { name: 'foo', env: false, }; - expect(env.getEnvName(option)).toEqual(''); + expect(env.getEnvName(option)).toBe(''); }); it('returns existing env', () => { const option: Partial = { name: 'foo', env: 'FOO', }; - expect(env.getEnvName(option)).toEqual('FOO'); + expect(env.getEnvName(option)).toBe('FOO'); }); it('generates RENOVATE_ env', () => { const option: Partial = { name: 'oneTwoThree', }; - expect(env.getEnvName(option)).toEqual('RENOVATE_ONE_TWO_THREE'); + expect(env.getEnvName(option)).toBe('RENOVATE_ONE_TWO_THREE'); }); }); }); diff --git a/lib/workers/global/config/parse/file.spec.ts b/lib/workers/global/config/parse/file.spec.ts index 0934b9d0be1ff7..f2a78c48d07e8c 100644 --- a/lib/workers/global/config/parse/file.spec.ts +++ b/lib/workers/global/config/parse/file.spec.ts @@ -26,7 +26,7 @@ describe('workers/global/config/parse/file', () => { const configFile = upath.resolve(__dirname, './__fixtures__/file2.js'); const res = file.getConfig({ RENOVATE_CONFIG_FILE: configFile }); expect(res).toMatchSnapshot(); - expect(res.rangeStrategy).toEqual('bump'); + expect(res.rangeStrategy).toBe('bump'); }); it('parse and returns empty config if there is no RENOVATE_CONFIG_FILE in env', () => { diff --git a/lib/workers/global/config/parse/index.spec.ts b/lib/workers/global/config/parse/index.spec.ts index 5fd74b6d3920e4..10503f757c2b16 100644 --- a/lib/workers/global/config/parse/index.spec.ts +++ b/lib/workers/global/config/parse/index.spec.ts @@ -121,7 +121,7 @@ describe('workers/global/config/parse/index', () => { '--endpoint=https://github.renovatebot.com/api/v3', ]); const parsed = await configParser.parseConfigs(defaultEnv, defaultArgv); - expect(parsed.endpoint).toEqual('https://github.renovatebot.com/api/v3/'); + expect(parsed.endpoint).toBe('https://github.renovatebot.com/api/v3/'); }); it('parses global manager config', async () => { defaultArgv = defaultArgv.concat(['--detect-global-manager-config=true']); diff --git a/lib/workers/global/index.spec.ts b/lib/workers/global/index.spec.ts index 92f46e7e91ca4f..237bcd76690309 100644 --- a/lib/workers/global/index.spec.ts +++ b/lib/workers/global/index.spec.ts @@ -31,7 +31,7 @@ describe('workers/global/index', () => { maintainYarnLock: true, foo: 1, }); - await expect(globalWorker.start()).resolves.toEqual(0); + await expect(globalWorker.start()).resolves.toBe(0); }); it('handles zero repos', async () => { configParser.parseConfigs.mockResolvedValueOnce({ @@ -39,7 +39,7 @@ describe('workers/global/index', () => { cacheDir: '/tmp/cache', repositories: [], }); - await expect(globalWorker.start()).resolves.toEqual(0); + await expect(globalWorker.start()).resolves.toBe(0); }); it('processes repositories', async () => { configParser.parseConfigs.mockResolvedValueOnce({ @@ -90,7 +90,7 @@ describe('workers/global/index', () => { msg: 'meh', }, ]); - await expect(globalWorker.start()).resolves.not.toEqual(0); + await expect(globalWorker.start()).resolves.not.toBe(0); }); it('exits with zero when warnings are logged', async () => { configParser.parseConfigs.mockResolvedValueOnce({ @@ -105,7 +105,7 @@ describe('workers/global/index', () => { msg: 'meh', }, ]); - await expect(globalWorker.start()).resolves.toEqual(0); + await expect(globalWorker.start()).resolves.toBe(0); }); describe('processes platforms', () => { it('github', async () => { @@ -140,7 +140,7 @@ describe('workers/global/index', () => { }); fs.writeFile.mockReturnValueOnce(null); - expect(await globalWorker.start()).toEqual(0); + expect(await globalWorker.start()).toBe(0); expect(fs.writeFile).toHaveBeenCalledTimes(1); expect(fs.writeFile).toHaveBeenCalledWith( '/tmp/renovate-output.json', diff --git a/lib/workers/pr/changelog/release-notes.spec.ts b/lib/workers/pr/changelog/release-notes.spec.ts index fbb145bc4c7122..d3af0fb71f76bf 100644 --- a/lib/workers/pr/changelog/release-notes.spec.ts +++ b/lib/workers/pr/changelog/release-notes.spec.ts @@ -75,11 +75,11 @@ describe('workers/pr/changelog/release-notes', () => { }); it('handles date object', () => { - expect(releaseNotesCacheMinutes(new Date())).toEqual(55); + expect(releaseNotesCacheMinutes(new Date())).toBe(55); }); it.each([null, undefined, 'fake', 123])('handles invalid: %s', (date) => { - expect(releaseNotesCacheMinutes(date as never)).toEqual(55); + expect(releaseNotesCacheMinutes(date as never)).toBe(55); }); }); diff --git a/lib/workers/pr/index.spec.ts b/lib/workers/pr/index.spec.ts index b511c9b5e2b296..2cd7adeec71b26 100644 --- a/lib/workers/pr/index.spec.ts +++ b/lib/workers/pr/index.spec.ts @@ -214,14 +214,14 @@ describe('workers/pr/index', () => { platform.getBranchStatus.mockResolvedValueOnce(BranchStatus.red); config.prCreation = 'status-success'; const { prBlockedBy, pr } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('AwaitingTests'); + expect(prBlockedBy).toBe('AwaitingTests'); expect(pr).toBeUndefined(); }); it('should return needs-approval if prCreation set to approval', async () => { platform.getBranchStatus.mockResolvedValueOnce(BranchStatus.green); config.prCreation = 'approval'; const { prBlockedBy, pr } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('NeedsApproval'); + expect(prBlockedBy).toBe('NeedsApproval'); expect(pr).toBeUndefined(); }); it('should create PR if success for gitlab deps', async () => { @@ -265,7 +265,7 @@ describe('workers/pr/index', () => { config.schedule = ['before 5am']; limits.isLimitReached.mockReturnValueOnce(true); const { prBlockedBy } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('RateLimited'); + expect(prBlockedBy).toBe('RateLimited'); expect(platform.createPr.mock.calls).toBeEmpty(); }); it('should create PR if limit is reached but dashboard checked', async () => { @@ -341,7 +341,7 @@ describe('workers/pr/index', () => { }); config.prCreation = 'status-success'; const { prBlockedBy, pr } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('Error'); + expect(prBlockedBy).toBe('Error'); expect(pr).toBeUndefined(); }); it('should return null if waiting for not pending', async () => { @@ -351,7 +351,7 @@ describe('workers/pr/index', () => { ); config.prCreation = 'not-pending'; const { prBlockedBy, pr } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('AwaitingTests'); + expect(prBlockedBy).toBe('AwaitingTests'); expect(pr).toBeUndefined(); }); it('should not create PR if waiting for not pending with stabilityStatus yellow', async () => { @@ -362,7 +362,7 @@ describe('workers/pr/index', () => { config.prCreation = 'not-pending'; config.stabilityStatus = BranchStatus.yellow; const { prBlockedBy, pr } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('AwaitingTests'); + expect(prBlockedBy).toBe('AwaitingTests'); expect(pr).toBeUndefined(); }); it('should create PR if pending timeout hit', async () => { @@ -579,7 +579,7 @@ describe('workers/pr/index', () => { platform.getBranchStatus.mockResolvedValueOnce(BranchStatus.yellow); git.getBranchLastCommitTime.mockResolvedValueOnce(new Date()); const { prBlockedBy, pr } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('BranchAutomerge'); + expect(prBlockedBy).toBe('BranchAutomerge'); expect(pr).toBeUndefined(); }); it('should return PR if branch automerging taking too long', async () => { @@ -597,7 +597,7 @@ describe('workers/pr/index', () => { platform.getBranchStatus.mockResolvedValueOnce(BranchStatus.yellow); git.getBranchLastCommitTime.mockResolvedValueOnce(new Date('2018-01-01')); const { prBlockedBy, pr } = await prWorker.ensurePr(config); - expect(prBlockedBy).toEqual('BranchAutomerge'); + expect(prBlockedBy).toBe('BranchAutomerge'); expect(pr).toBeUndefined(); }); it('handles duplicate upgrades', async () => { diff --git a/lib/workers/repository/init/merge.spec.ts b/lib/workers/repository/init/merge.spec.ts index fed851fe5f3440..36c7a4076dc9b4 100644 --- a/lib/workers/repository/init/merge.spec.ts +++ b/lib/workers/repository/init/merge.spec.ts @@ -180,7 +180,7 @@ describe('workers/repository/init/merge', () => { e = err; } expect(e).toBeDefined(); - expect(e.toString()).toEqual('Error: config-validation'); + expect(e.toString()).toBe('Error: config-validation'); }); it('migrates nested config', async () => { git.getFileList.mockResolvedValue(['renovate.json']); @@ -194,7 +194,7 @@ describe('workers/repository/init/merge', () => { migratedConfig: {}, }); config.extends = [':automergeDisabled']; - expect(await mergeRenovateConfig(config)).not.toBeUndefined(); + expect(await mergeRenovateConfig(config)).toBeDefined(); }); it('continues if no errors', async () => { git.getFileList.mockResolvedValue(['package.json', '.renovaterc.json']); @@ -204,7 +204,7 @@ describe('workers/repository/init/merge', () => { errors: [], }); config.extends = [':automergeDisabled']; - expect(await mergeRenovateConfig(config)).not.toBeUndefined(); + expect(await mergeRenovateConfig(config)).toBeDefined(); }); }); }); diff --git a/lib/workers/repository/onboarding/pr/base-branch.spec.ts b/lib/workers/repository/onboarding/pr/base-branch.spec.ts index f83123c863d8ba..39bcac7a8b35ea 100644 --- a/lib/workers/repository/onboarding/pr/base-branch.spec.ts +++ b/lib/workers/repository/onboarding/pr/base-branch.spec.ts @@ -16,14 +16,14 @@ describe('workers/repository/onboarding/pr/base-branch', () => { it('describes baseBranch', () => { config.baseBranches = ['some-branch']; const res = getBaseBranchDesc(config); - expect(res.trim()).toEqual( + expect(res.trim()).toBe( 'You have configured Renovate to use branch `some-branch` as base branch.' ); }); it('describes baseBranches', () => { config.baseBranches = ['some-branch', 'some-other-branch']; const res = getBaseBranchDesc(config); - expect(res.trim()).toEqual( + expect(res.trim()).toBe( 'You have configured Renovate to use the following baseBranches: `some-branch`, `some-other-branch`.' ); }); diff --git a/lib/workers/repository/onboarding/pr/config-description.spec.ts b/lib/workers/repository/onboarding/pr/config-description.spec.ts index 76f8f5c1730d82..7bfeb3403d4cd1 100644 --- a/lib/workers/repository/onboarding/pr/config-description.spec.ts +++ b/lib/workers/repository/onboarding/pr/config-description.spec.ts @@ -12,7 +12,7 @@ describe('workers/repository/onboarding/pr/config-description', () => { it('returns empty', () => { delete config.description; const res = getConfigDesc(config); - expect(res).toEqual(''); + expect(res).toBe(''); }); it('returns a full list', () => { const packageFiles: Record = { diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts index 25b9e901a49f20..bf44f283a16a4d 100644 --- a/lib/workers/repository/process/fetch.spec.ts +++ b/lib/workers/repository/process/fetch.spec.ts @@ -45,9 +45,9 @@ describe('workers/repository/process/fetch', () => { }; await fetchUpdates(config, packageFiles); expect(packageFiles).toMatchSnapshot(); - expect(packageFiles.npm[0].deps[0].skipReason).toEqual('ignored'); + expect(packageFiles.npm[0].deps[0].skipReason).toBe('ignored'); expect(packageFiles.npm[0].deps[0].updates).toHaveLength(0); - expect(packageFiles.npm[0].deps[1].skipReason).toEqual('disabled'); + expect(packageFiles.npm[0].deps[1].skipReason).toBe('disabled'); expect(packageFiles.npm[0].deps[1].updates).toHaveLength(0); }); it('fetches updates', async () => { diff --git a/lib/workers/repository/process/limits.spec.ts b/lib/workers/repository/process/limits.spec.ts index 7f1128ea90ceee..eb16171a052c7c 100644 --- a/lib/workers/repository/process/limits.spec.ts +++ b/lib/workers/repository/process/limits.spec.ts @@ -39,17 +39,17 @@ describe('workers/repository/process/limits', () => { branchPrefix: 'foo/', onboardingBranch: 'bar/configure', }); - expect(res).toEqual(7); + expect(res).toBe(7); }); it('returns prHourlyLimit if errored', async () => { config.prHourlyLimit = 2; platform.getPrList.mockRejectedValue('Unknown error'); const res = await limits.getPrHourlyRemaining(config); - expect(res).toEqual(2); + expect(res).toBe(2); }); it('returns 99 if no hourly limit', async () => { const res = await limits.getPrHourlyRemaining(config); - expect(res).toEqual(99); + expect(res).toBe(99); }); }); describe('getConcurrentPrsRemaining()', () => { @@ -68,11 +68,11 @@ describe('workers/repository/process/limits', () => { { branchName: null }, ] as never; const res = await limits.getConcurrentPrsRemaining(config, branches); - expect(res).toEqual(19); + expect(res).toBe(19); }); it('returns 99 if no concurrent limit', async () => { const res = await limits.getConcurrentPrsRemaining(config, []); - expect(res).toEqual(99); + expect(res).toBe(99); }); }); @@ -81,12 +81,12 @@ describe('workers/repository/process/limits', () => { config.prHourlyLimit = 5; platform.getPrList.mockResolvedValueOnce([]); const res = await limits.getPrsRemaining(config, []); - expect(res).toEqual(5); + expect(res).toBe(5); }); it('returns concurrent limit', async () => { config.prConcurrentLimit = 5; const res = await limits.getPrsRemaining(config, []); - expect(res).toEqual(5); + expect(res).toBe(5); }); }); @@ -97,7 +97,7 @@ describe('workers/repository/process/limits', () => { const res = limits.getConcurrentBranchesRemaining(config, [ { branchName: 'foo' }, ] as never); - expect(res).toEqual(19); + expect(res).toBe(19); }); it('defaults to prConcurrentLimit', () => { config.branchConcurrentLimit = null; @@ -106,22 +106,22 @@ describe('workers/repository/process/limits', () => { const res = limits.getConcurrentBranchesRemaining(config, [ { branchName: 'foo' }, ] as never); - expect(res).toEqual(19); + expect(res).toBe(19); }); it('does not use prConcurrentLimit for explicit branchConcurrentLimit=0', () => { config.branchConcurrentLimit = 0; config.prConcurrentLimit = 20; const res = limits.getConcurrentBranchesRemaining(config, []); - expect(res).toEqual(99); + expect(res).toBe(99); }); it('returns 99 if no limits are set', () => { const res = limits.getConcurrentBranchesRemaining(config, []); - expect(res).toEqual(99); + expect(res).toBe(99); }); it('returns prConcurrentLimit if errored', () => { config.branchConcurrentLimit = 2; const res = limits.getConcurrentBranchesRemaining(config, null); - expect(res).toEqual(2); + expect(res).toBe(2); }); }); @@ -138,7 +138,7 @@ describe('workers/repository/process/limits', () => { }, [] ) - ).resolves.toEqual(3); + ).resolves.toBe(3); await expect( limits.getBranchesRemaining( @@ -149,7 +149,7 @@ describe('workers/repository/process/limits', () => { }, [] ) - ).resolves.toEqual(7); + ).resolves.toBe(7); }); }); }); diff --git a/lib/workers/repository/process/lookup/filter-checks.spec.ts b/lib/workers/repository/process/lookup/filter-checks.spec.ts index d9898d6204b79e..092e145b22d6a3 100644 --- a/lib/workers/repository/process/lookup/filter-checks.spec.ts +++ b/lib/workers/repository/process/lookup/filter-checks.spec.ts @@ -60,7 +60,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toEqual('1.0.4'); + expect(res.release.version).toBe('1.0.4'); }); it('returns non-pending latest release if internalChecksFilter=flexible and none pass checks', async () => { @@ -75,7 +75,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toEqual('1.0.4'); + expect(res.release.version).toBe('1.0.4'); }); it('returns pending latest release if internalChecksFilter=strict and none pass checks', async () => { @@ -90,7 +90,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeTrue(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toEqual('1.0.4'); + expect(res.release.version).toBe('1.0.4'); }); it('returns non-latest release if internalChecksFilter=strict and some pass checks', async () => { @@ -105,7 +105,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(2); - expect(res.release.version).toEqual('1.0.2'); + expect(res.release.version).toBe('1.0.2'); }); it('returns non-latest release if internalChecksFilter=flexible and some pass checks', async () => { @@ -120,7 +120,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(2); - expect(res.release.version).toEqual('1.0.2'); + expect(res.release.version).toBe('1.0.2'); }); it('picks up stabilityDays settings from hostRules', async () => { @@ -136,7 +136,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(0); - expect(res.release.version).toEqual('1.0.4'); + expect(res.release.version).toBe('1.0.4'); }); it('picks up stabilityDays settings from updateType', async () => { @@ -151,7 +151,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(1); - expect(res.release.version).toEqual('1.0.3'); + expect(res.release.version).toBe('1.0.3'); }); it('picks up minimumConfidence settings from updateType', async () => { @@ -171,7 +171,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { expect(res).toMatchSnapshot(); expect(res.pendingChecks).toBeFalse(); expect(res.pendingReleases).toHaveLength(3); - expect(res.release.version).toEqual('1.0.1'); + expect(res.release.version).toBe('1.0.1'); }); }); }); diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index b1db1cba7cc65b..ff172c99ff6134 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -209,8 +209,8 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(2); - expect(res.updates[0].updateType).toEqual('patch'); - expect(res.updates[1].updateType).toEqual('major'); + expect(res.updates[0].updateType).toBe('patch'); + expect(res.updates[1].updateType).toBe('major'); }); it('returns minor update if automerging both patch and minor', async () => { config.patch = { @@ -226,7 +226,7 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); - expect(res.updates[0].updateType).toEqual('patch'); + expect(res.updates[0].updateType).toBe('patch'); }); it('returns patch update if separateMinorPatch', async () => { config.separateMinorPatch = true; @@ -315,7 +315,7 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); - expect(res.updates[0].updateType).toEqual('minor'); + expect(res.updates[0].updateType).toBe('minor'); }); it('widens minor ranged versions if configured', async () => { config.currentValue = '~1.3.0'; @@ -624,7 +624,7 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); - expect(res.updates[0].newValue).toEqual('<= 1.4.1'); + expect(res.updates[0].newValue).toBe('<= 1.4.1'); }); it('upgrades major less than ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -634,7 +634,7 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); - expect(res.updates[0].newValue).toEqual('< 2.0.0'); + expect(res.updates[0].newValue).toBe('< 2.0.0'); }); it('upgrades major greater than less than ranges without pinning', async () => { config.rangeStrategy = 'widen'; @@ -644,7 +644,7 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); - expect(res.updates[0].newValue).toEqual('>= 0.5.0 < 2.0.0'); + expect(res.updates[0].newValue).toBe('>= 0.5.0 < 2.0.0'); }); it('upgrades minor greater than less than ranges without pinning', async () => { config.rangeStrategy = 'widen'; @@ -654,8 +654,8 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); - expect(res.updates[0].newValue).toEqual('>= 0.5.0 <0.10'); - expect(res.updates[1].newValue).toEqual('>= 0.5.0 <1.5'); + expect(res.updates[0].newValue).toBe('>= 0.5.0 <0.10'); + expect(res.updates[1].newValue).toBe('>= 0.5.0 <1.5'); }); it('upgrades minor greater than less than equals ranges without pinning', async () => { config.rangeStrategy = 'widen'; @@ -665,8 +665,8 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); - expect(res.updates[0].newValue).toEqual('>= 0.5.0 <= 0.9.7'); - expect(res.updates[1].newValue).toEqual('>= 0.5.0 <= 1.4.1'); + expect(res.updates[0].newValue).toBe('>= 0.5.0 <= 0.9.7'); + expect(res.updates[1].newValue).toBe('>= 0.5.0 <= 1.4.1'); }); it('rejects reverse ordered less than greater than', async () => { config.rangeStrategy = 'widen'; @@ -746,7 +746,7 @@ describe('workers/repository/process/lookup/index', () => { }); const res = await lookup.lookupUpdates(config); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newVersion).toEqual('1.4.6'); + expect(res.updates[0].newVersion).toBe('1.4.6'); expect(res.updates[0].pendingChecks).toBeTrue(); }); @@ -777,7 +777,7 @@ describe('workers/repository/process/lookup/index', () => { }); const res = await lookup.lookupUpdates(config); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newVersion).toEqual('1.4.5'); + expect(res.updates[0].newVersion).toBe('1.4.5'); expect(res.updates[0].pendingVersions).toHaveLength(1); }); @@ -794,7 +794,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newValue).toEqual('2.5.17-beta.0'); + expect(res.updates[0].newValue).toBe('2.5.17-beta.0'); }); it('should allow unstable versions if the current version is unstable', async () => { config.currentValue = '3.1.0-dev.20180731'; @@ -807,7 +807,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newValue).toEqual('3.1.0-dev.20180813'); + expect(res.updates[0].newValue).toBe('3.1.0-dev.20180813'); }); it('should not jump unstable versions', async () => { config.currentValue = '3.0.1-insiders.20180726'; @@ -820,7 +820,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newValue).toEqual('3.0.1'); + expect(res.updates[0].newValue).toBe('3.0.1'); }); it('should update pinned versions if updatePinnedDependencies=true', async () => { @@ -835,7 +835,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newValue).toEqual('0.0.35'); + expect(res.updates[0].newValue).toBe('0.0.35'); }); it('should not update pinned versions if updatePinnedDependencies=false', async () => { @@ -863,7 +863,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newValue).toEqual('3.0.1-insiders.20180726'); + expect(res.updates[0].newValue).toBe('3.0.1-insiders.20180726'); }); it('should roll back to dist-tag if current version is higher', async () => { config.currentValue = '3.1.0-dev.20180813'; @@ -878,7 +878,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newValue).toEqual('3.0.1-insiders.20180726'); + expect(res.updates[0].newValue).toBe('3.0.1-insiders.20180726'); }); it('should jump unstable versions if followTag', async () => { config.currentValue = '3.0.0-insiders.20180706'; @@ -892,7 +892,7 @@ describe('workers/repository/process/lookup/index', () => { const res = await lookup.lookupUpdates(config); expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(1); - expect(res.updates[0].newValue).toEqual('3.0.1-insiders.20180726'); + expect(res.updates[0].newValue).toBe('3.0.1-insiders.20180726'); }); it('should update nothing if current version is dist-tag', async () => { config.currentValue = '3.0.1-insiders.20180726'; @@ -919,7 +919,7 @@ describe('workers/repository/process/lookup/index', () => { expect(res.updates).toMatchSnapshot(); expect(res.updates).toHaveLength(0); expect(res.warnings).toHaveLength(1); - expect(res.warnings[0].message).toEqual( + expect(res.warnings[0].message).toBe( "Can't find version with tag foo for typescript" ); }); @@ -1159,7 +1159,7 @@ describe('workers/repository/process/lookup/index', () => { .reply(200, returnJson); const res = await lookup.lookupUpdates(config); expect(res).toMatchSnapshot(); - expect(res.updates[0].newVersion).toEqual('1.4.0'); + expect(res.updates[0].newVersion).toBe('1.4.0'); }); it('is deprecated', async () => { config.currentValue = '1.3.0'; @@ -1178,7 +1178,7 @@ describe('workers/repository/process/lookup/index', () => { .reply(200, returnJson); const res = await lookup.lookupUpdates(config); expect(res).toMatchSnapshot(); - expect(res.updates[0].newVersion).toEqual('1.4.1'); + expect(res.updates[0].newVersion).toBe('1.4.1'); }); it('skips unsupported values', async () => { config.currentValue = 'alpine'; diff --git a/lib/workers/repository/process/write.spec.ts b/lib/workers/repository/process/write.spec.ts index e818bc2aaf3f45..067e1fe952179c 100644 --- a/lib/workers/repository/process/write.spec.ts +++ b/lib/workers/repository/process/write.spec.ts @@ -49,7 +49,7 @@ describe('workers/repository/process/write', () => { result: BranchResult.Automerged, }); const res = await writeUpdates(config, branches); - expect(res).toEqual('automerged'); + expect(res).toBe('automerged'); expect(branchWorker.processBranch).toHaveBeenCalledTimes(4); }); it('increments branch counter', async () => { diff --git a/lib/workers/repository/updates/branch-name.spec.ts b/lib/workers/repository/updates/branch-name.spec.ts index 15ca57ac5cc9cc..3475b7328795b2 100644 --- a/lib/workers/repository/updates/branch-name.spec.ts +++ b/lib/workers/repository/updates/branch-name.spec.ts @@ -12,7 +12,7 @@ describe('workers/repository/updates/branch-name', () => { }, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('some-group-name-grouptopic'); + expect(upgrade.branchName).toBe('some-group-name-grouptopic'); }); it('uses groupSlug if defined', () => { const upgrade: RenovateConfig = { @@ -24,7 +24,7 @@ describe('workers/repository/updates/branch-name', () => { }, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('some-group-slug-grouptopic'); + expect(upgrade.branchName).toBe('some-group-slug-grouptopic'); }); it('separates major with groups', () => { const upgrade: RenovateConfig = { @@ -40,7 +40,7 @@ describe('workers/repository/updates/branch-name', () => { }, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('major-2-some-group-slug-grouptopic'); + expect(upgrade.branchName).toBe('major-2-some-group-slug-grouptopic'); }); it('uses single major with groups', () => { const upgrade: RenovateConfig = { @@ -56,7 +56,7 @@ describe('workers/repository/updates/branch-name', () => { }, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('major-some-group-slug-grouptopic'); + expect(upgrade.branchName).toBe('major-some-group-slug-grouptopic'); }); it('separates patch groups and uses update topic', () => { const upgrade: RenovateConfig = { @@ -71,7 +71,7 @@ describe('workers/repository/updates/branch-name', () => { group: {}, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual( + expect(upgrade.branchName).toBe( 'update-branch-patch-some-group-slug-update-topic' ); }); @@ -83,7 +83,7 @@ describe('workers/repository/updates/branch-name', () => { group: {}, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('dep'); + expect(upgrade.branchName).toBe('dep'); }); it('separates patches when separateMinorPatch=true', () => { const upgrade: RenovateConfig = { @@ -102,7 +102,7 @@ describe('workers/repository/updates/branch-name', () => { group: {}, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('renovate/lodash-4.17.x'); + expect(upgrade.branchName).toBe('renovate/lodash-4.17.x'); }); it('does not separate patches when separateMinorPatch=false', () => { const upgrade: RenovateConfig = { @@ -121,7 +121,7 @@ describe('workers/repository/updates/branch-name', () => { group: {}, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('renovate/lodash-4.x'); + expect(upgrade.branchName).toBe('renovate/lodash-4.x'); }); it('realistic defaults', () => { @@ -136,7 +136,7 @@ describe('workers/repository/updates/branch-name', () => { group: {}, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('renovate/jest-42.x'); + expect(upgrade.branchName).toBe('renovate/jest-42.x'); }); it('hashedBranchLength hashing', () => { @@ -152,7 +152,7 @@ describe('workers/repository/updates/branch-name', () => { group: {}, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('dep-df9ca0f348'); + expect(upgrade.branchName).toBe('dep-df9ca0f348'); }); it('hashedBranchLength hashing with group name', () => { @@ -170,7 +170,7 @@ describe('workers/repository/updates/branch-name', () => { }, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('dep-df9ca0f34833f3e0'); + expect(upgrade.branchName).toBe('dep-df9ca0f34833f3e0'); }); it('hashedBranchLength too short', () => { @@ -188,7 +188,7 @@ describe('workers/repository/updates/branch-name', () => { }, }; generateBranchName(upgrade); - expect(upgrade.branchName).toEqual('dep-df9ca0'); + expect(upgrade.branchName).toBe('dep-df9ca0'); }); it('enforces valid git branch name', () => { diff --git a/lib/workers/repository/updates/generate.spec.ts b/lib/workers/repository/updates/generate.spec.ts index 0a767cec1fc6f4..48da8cb6b820cd 100644 --- a/lib/workers/repository/updates/generate.spec.ts +++ b/lib/workers/repository/updates/generate.spec.ts @@ -146,7 +146,7 @@ describe('workers/repository/updates/generate', () => { const res = generateBranchConfig(branch); expect(res.foo).toBe(2); expect(res.groupName).toBeDefined(); - expect(res.releaseTimestamp).toEqual('2017-02-07T20:01:41+00:00'); + expect(res.releaseTimestamp).toBe('2017-02-07T20:01:41+00:00'); expect(res.automerge).toBeFalse(); expect(res.constraints).toEqual({ foo: '1.0.0', @@ -191,7 +191,7 @@ describe('workers/repository/updates/generate', () => { expect(res.singleVersion).toBeUndefined(); expect(res.recreateClosed).toBeTrue(); expect(res.groupName).toBeDefined(); - expect(res.releaseTimestamp).toEqual('2017-02-08T20:01:41+00:00'); + expect(res.releaseTimestamp).toBe('2017-02-08T20:01:41+00:00'); }); it('groups multiple digest updates', () => { const branch = [ @@ -285,7 +285,7 @@ describe('workers/repository/updates/generate', () => { }), ]; const res = generateBranchConfig(branch); - expect(res.prTitle).toEqual( + expect(res.prTitle).toBe( 'chore(package): update dependency some-dep to v1.2.0' ); }); @@ -309,9 +309,7 @@ describe('workers/repository/updates/generate', () => { }), ]; const res = generateBranchConfig(branch); - expect(res.prTitle).toEqual( - 'chore(): update dependency some-dep to v1.2.0' - ); + expect(res.prTitle).toBe('chore(): update dependency some-dep to v1.2.0'); }); it('scopes monorepo commits with nested package files using parent directory', () => { const branch = [ @@ -334,7 +332,7 @@ describe('workers/repository/updates/generate', () => { }), ]; const res = generateBranchConfig(branch); - expect(res.prTitle).toEqual( + expect(res.prTitle).toBe( 'chore(bar): update dependency some-dep to v1.2.0' ); }); @@ -358,7 +356,7 @@ describe('workers/repository/updates/generate', () => { }), ]; const res = generateBranchConfig(branch); - expect(res.prTitle).toEqual( + expect(res.prTitle).toBe( 'chore(foo/bar): update dependency some-dep to v1.2.0' ); }); From a15a97a457b936a5ebb75da4372d067f128d8680 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Mon, 8 Nov 2021 13:37:14 +0100 Subject: [PATCH 014/248] chore: prepare for typescript-eslint major (#12553) --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index 19699d6632e416..8b001b377ce644 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -95,6 +95,7 @@ module.exports = { // TODO: fix me '@typescript-eslint/no-unsafe-return': 0, '@typescript-eslint/no-unsafe-call': 0, + '@typescript-eslint/no-unsafe-argument': 0, // thousands of errors :-/ '@typescript-eslint/restrict-template-expressions': [ 1, From 82e89825ab43e2e7873733762f339c7f16fdec1a Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Mon, 8 Nov 2021 14:03:55 +0100 Subject: [PATCH 015/248] chore: remove airbnb (#12557) --- .eslintrc.js | 11 +- lib/datasource/datasource.ts | 2 +- lib/datasource/docker/types.ts | 3 + lib/manager/gradle/shallow/extract.spec.ts | 1 - lib/manager/terraform/common.ts | 3 + lib/manager/terragrunt/common.ts | 3 + lib/types/branch-status.ts | 3 + lib/workers/global/config/parse/env.spec.ts | 1 + package.json | 1 - yarn.lock | 184 ++++++++------------ 10 files changed, 93 insertions(+), 119 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 8b001b377ce644..6c9228c3ebef8e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -5,14 +5,13 @@ module.exports = { }, plugins: ['@renovate'], extends: [ - 'airbnb-typescript/base', + 'eslint:recommended', 'plugin:import/errors', 'plugin:import/warnings', 'plugin:import/typescript', 'plugin:jest/recommended', 'plugin:jest/style', // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/src/configs - 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'plugin:promise/recommended', @@ -103,7 +102,13 @@ module.exports = { ], '@typescript-eslint/restrict-plus-operands': 2, - '@typescript-eslint/naming-convention': 2, + '@typescript-eslint/naming-convention': [ + 2, + { + selector: 'enumMember', + format: ['PascalCase'], + }, + ], '@typescript-eslint/unbound-method': 2, '@typescript-eslint/ban-types': 2, diff --git a/lib/datasource/datasource.ts b/lib/datasource/datasource.ts index 5b2a2f68e02a17..033557c6d66d3c 100644 --- a/lib/datasource/datasource.ts +++ b/lib/datasource/datasource.ts @@ -33,7 +33,7 @@ export abstract class Datasource implements DatasourceApi { getDigest?(config: DigestConfig, newValue?: string): Promise; - // eslint-disable-next-line class-methods-use-this + // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-empty-function handleSpecificErrors(err: HttpError): void {} protected handleGenericErrors(err: HttpError): never { diff --git a/lib/datasource/docker/types.ts b/lib/datasource/docker/types.ts index 72f45fd37ec7fc..a73f044b961609 100644 --- a/lib/datasource/docker/types.ts +++ b/lib/datasource/docker/types.ts @@ -1,3 +1,5 @@ +// FIXME #12556 +/* eslint-disable @typescript-eslint/naming-convention */ /** * Media Types * https://docs.docker.com/registry/spec/manifest-v2-2/#media-types @@ -7,6 +9,7 @@ export enum MediaType { manifestV2 = 'application/vnd.docker.distribution.manifest.v2+json', manifestListV2 = 'application/vnd.docker.distribution.manifest.list.v2+json', } +/* eslint-enable @typescript-eslint/naming-convention */ export interface MediaObject { readonly digest: string; diff --git a/lib/manager/gradle/shallow/extract.spec.ts b/lib/manager/gradle/shallow/extract.spec.ts index c0a68d4b982ab7..b013534067ded7 100644 --- a/lib/manager/gradle/shallow/extract.spec.ts +++ b/lib/manager/gradle/shallow/extract.spec.ts @@ -15,7 +15,6 @@ function mockFs(files: Record): void { } describe('manager/gradle/shallow/extract', () => { - beforeAll(() => {}); afterAll(() => { jest.resetAllMocks(); }); diff --git a/lib/manager/terraform/common.ts b/lib/manager/terraform/common.ts index 25be93cd16927e..78cfaec994fbaf 100644 --- a/lib/manager/terraform/common.ts +++ b/lib/manager/terraform/common.ts @@ -1,3 +1,6 @@ +// FIXME #12556 +/* eslint-disable @typescript-eslint/naming-convention */ + export enum TerraformDependencyTypes { unknown = 'unknown', module = 'module', diff --git a/lib/manager/terragrunt/common.ts b/lib/manager/terragrunt/common.ts index c5a699e242bc5f..a13e424829e87b 100644 --- a/lib/manager/terragrunt/common.ts +++ b/lib/manager/terragrunt/common.ts @@ -1,3 +1,6 @@ +// FIXME #12556 +/* eslint-disable @typescript-eslint/naming-convention */ + export enum TerragruntResourceTypes { unknown = 'unknown', } diff --git a/lib/types/branch-status.ts b/lib/types/branch-status.ts index a92a3f88210512..23636ed97fd6d8 100644 --- a/lib/types/branch-status.ts +++ b/lib/types/branch-status.ts @@ -1,3 +1,6 @@ +// FIXME #12556 +/* eslint-disable @typescript-eslint/naming-convention */ + export enum BranchStatus { green = 'green', // 'success' yellow = 'yellow', // 'created', 'running' diff --git a/lib/workers/global/config/parse/env.spec.ts b/lib/workers/global/config/parse/env.spec.ts index f52a856b9545e2..725685ad2f002b 100644 --- a/lib/workers/global/config/parse/env.spec.ts +++ b/lib/workers/global/config/parse/env.spec.ts @@ -202,6 +202,7 @@ describe('workers/global/config/parse/env', () => { beforeAll(() => { processExit = jest .spyOn(process, 'exit') + // eslint-disable-next-line @typescript-eslint/no-empty-function .mockImplementation((() => {}) as never); }); diff --git a/package.json b/package.json index 7cf8fe1c059179..2a2b6e26cdba84 100644 --- a/package.json +++ b/package.json @@ -246,7 +246,6 @@ "cross-env": "7.0.3", "emojibase-data": "6.2.0", "eslint": "7.32.0", - "eslint-config-airbnb-typescript": "12.3.1", "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", "eslint-plugin-import": "2.25.2", diff --git a/yarn.lock b/yarn.lock index d724e0ac9d8e13..6ad22cb1f18018 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1488,7 +1488,6 @@ "@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.3": version "0.0.1" - uid c88253170ce9e9248bc0653197ed2ff1ecf41ac1 resolved "https://github.com/renovatebot/eslint-plugin#c88253170ce9e9248bc0653197ed2ff1ecf41ac1" "@renovate/pep440@1.0.0": @@ -2087,7 +2086,7 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@4.33.0", "@typescript-eslint/parser@^4.4.1": +"@typescript-eslint/parser@4.33.0": version "4.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== @@ -3094,11 +3093,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -confusing-browser-globals@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" - integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== - console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -3774,33 +3768,6 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-airbnb-base@^14.2.0, eslint-config-airbnb-base@^14.2.1: - version "14.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" - integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== - dependencies: - confusing-browser-globals "^1.0.10" - object.assign "^4.1.2" - object.entries "^1.1.2" - -eslint-config-airbnb-typescript@12.3.1: - version "12.3.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz#83ab40d76402c208eb08516260d1d6fac8f8acbc" - integrity sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw== - dependencies: - "@typescript-eslint/parser" "^4.4.1" - eslint-config-airbnb "^18.2.0" - eslint-config-airbnb-base "^14.2.0" - -eslint-config-airbnb@^18.2.0: - version "18.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9" - integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg== - dependencies: - eslint-config-airbnb-base "^14.2.1" - object.assign "^4.1.2" - object.entries "^1.1.2" - eslint-config-prettier@8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" @@ -6934,76 +6901,76 @@ npm@^7.0.0: resolved "https://registry.yarnpkg.com/npm/-/npm-7.24.2.tgz#861117af8241bea592289f22407230e5300e59ca" integrity sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ== dependencies: - "@isaacs/string-locale-compare" "*" - "@npmcli/arborist" "*" - "@npmcli/ci-detect" "*" - "@npmcli/config" "*" - "@npmcli/map-workspaces" "*" - "@npmcli/package-json" "*" - "@npmcli/run-script" "*" - abbrev "*" - ansicolors "*" - ansistyles "*" - archy "*" - cacache "*" - chalk "*" - chownr "*" - cli-columns "*" - cli-table3 "*" - columnify "*" - fastest-levenshtein "*" - glob "*" - graceful-fs "*" - hosted-git-info "*" - ini "*" - init-package-json "*" - is-cidr "*" - json-parse-even-better-errors "*" - libnpmaccess "*" - libnpmdiff "*" - libnpmexec "*" - libnpmfund "*" - libnpmhook "*" - libnpmorg "*" - libnpmpack "*" - libnpmpublish "*" - libnpmsearch "*" - libnpmteam "*" - libnpmversion "*" - make-fetch-happen "*" - minipass "*" - minipass-pipeline "*" - mkdirp "*" - mkdirp-infer-owner "*" - ms "*" - node-gyp "*" - nopt "*" - npm-audit-report "*" - npm-install-checks "*" - npm-package-arg "*" - npm-pick-manifest "*" - npm-profile "*" - npm-registry-fetch "*" - npm-user-validate "*" - npmlog "*" - opener "*" - pacote "*" - parse-conflict-json "*" - qrcode-terminal "*" - read "*" - read-package-json "*" - read-package-json-fast "*" - readdir-scoped-modules "*" - rimraf "*" - semver "*" - ssri "*" - tar "*" - text-table "*" - tiny-relative-date "*" - treeverse "*" - validate-npm-package-name "*" - which "*" - write-file-atomic "*" + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^2.9.0" + "@npmcli/ci-detect" "^1.2.0" + "@npmcli/config" "^2.3.0" + "@npmcli/map-workspaces" "^1.0.4" + "@npmcli/package-json" "^1.0.1" + "@npmcli/run-script" "^1.8.6" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + archy "~1.0.0" + cacache "^15.3.0" + chalk "^4.1.2" + chownr "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.6.0" + columnify "~1.5.4" + fastest-levenshtein "^1.0.12" + glob "^7.2.0" + graceful-fs "^4.2.8" + hosted-git-info "^4.0.2" + ini "^2.0.0" + init-package-json "^2.0.5" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + libnpmaccess "^4.0.2" + libnpmdiff "^2.0.4" + libnpmexec "^2.0.1" + libnpmfund "^1.1.0" + libnpmhook "^6.0.2" + libnpmorg "^2.0.2" + libnpmpack "^2.0.1" + libnpmpublish "^4.0.1" + libnpmsearch "^3.1.1" + libnpmteam "^2.0.3" + libnpmversion "^1.2.1" + make-fetch-happen "^9.1.0" + minipass "^3.1.3" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^7.1.2" + nopt "^5.0.0" + npm-audit-report "^2.1.5" + npm-install-checks "^4.0.0" + npm-package-arg "^8.1.5" + npm-pick-manifest "^6.1.1" + npm-profile "^5.0.3" + npm-registry-fetch "^11.0.0" + npm-user-validate "^1.0.1" + npmlog "^5.0.1" + opener "^1.5.2" + pacote "^11.3.5" + parse-conflict-json "^1.1.1" + qrcode-terminal "^0.12.0" + read "~1.0.7" + read-package-json "^4.1.1" + read-package-json-fast "^2.0.3" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.5" + ssri "^8.0.1" + tar "^6.1.11" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^1.0.4" + validate-npm-package-name "~3.0.0" + which "^2.0.2" + write-file-atomic "^3.0.3" npmlog@*: version "5.0.1" @@ -7072,15 +7039,6 @@ object.assign@^4.1.0, object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - object.values@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" From 0f687f23ee1e7ad0d70eb3f25f5421b4028bc229 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 8 Nov 2021 15:20:16 +0100 Subject: [PATCH 016/248] fix(npm): combine packages massage with widens (#12538) --- .../__snapshots__/npm.spec.ts.snap | 23 ---------- lib/manager/npm/post-update/index.ts | 21 ++++++++- lib/manager/npm/post-update/npm.spec.ts | 46 ++++--------------- lib/manager/npm/post-update/npm.ts | 40 +--------------- 4 files changed, 30 insertions(+), 100 deletions(-) diff --git a/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap b/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap index b21eac557d17a8..0abab7674b2c19 100644 --- a/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap +++ b/lib/manager/npm/post-update/__snapshots__/npm.spec.ts.snap @@ -45,29 +45,6 @@ Array [ ] `; -exports[`manager/npm/post-update/npm massages lock files 1`] = ` -Array [ - Object { - "cmd": "npm install --package-lock-only --no-audit --ignore-scripts", - "options": Object { - "cwd": "some-dir", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, -] -`; - exports[`manager/npm/post-update/npm performs full install 1`] = `Array []`; exports[`manager/npm/post-update/npm performs lock file maintenance 1`] = ` diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts index dc83a1ca949551..636ca8b5cb355a 100644 --- a/lib/manager/npm/post-update/index.ts +++ b/lib/manager/npm/post-update/index.ts @@ -167,7 +167,10 @@ export async function writeExistingFiles( } else { logger.debug(`Writing ${npmLock}`); let existingNpmLock = await getFile(npmLock); + const npmLockParsed = JSON.parse(existingNpmLock); + const packageNames = Object.keys(npmLockParsed?.packages || {}); // lockfileVersion=2 const widens = []; + let lockFileChanged = false; for (const upgrade of config.upgrades) { if ( upgrade.rangeStrategy === 'widen' && @@ -175,19 +178,29 @@ export async function writeExistingFiles( ) { widens.push(upgrade.depName); } + const { depName } = upgrade; + for (const packageName of packageNames) { + if ( + packageName === `node_modules/${depName}` || + packageName.startsWith(`node_modules/${depName}/`) + ) { + logger.trace({ packageName }, 'Massaging out package name'); + lockFileChanged = true; + delete npmLockParsed.packages[packageName]; + } + } } if (widens.length) { logger.debug( `Removing ${String(widens)} from ${npmLock} to force an update` ); + lockFileChanged = true; try { - const npmLockParsed = JSON.parse(existingNpmLock); if (npmLockParsed.dependencies) { widens.forEach((depName) => { delete npmLockParsed.dependencies[depName]; }); } - existingNpmLock = JSON.stringify(npmLockParsed, null, 2); } catch (err) { logger.warn( { npmLock }, @@ -195,6 +208,10 @@ export async function writeExistingFiles( ); } } + if (lockFileChanged) { + logger.debug('Massaging npm lock file before writing to disk'); + existingNpmLock = JSON.stringify(npmLockParsed, null, 2); + } await outputFile(npmLockPath, existingNpmLock); } } diff --git a/lib/manager/npm/post-update/npm.spec.ts b/lib/manager/npm/post-update/npm.spec.ts index 4fd11cf91c3e64..e4f9341151427b 100644 --- a/lib/manager/npm/post-update/npm.spec.ts +++ b/lib/manager/npm/post-update/npm.spec.ts @@ -1,5 +1,4 @@ import { exec as _exec } from 'child_process'; -import * as fsExtra from 'fs-extra'; import upath from 'upath'; import { envMock, mockExecAll } from '../../../../test/exec-util'; @@ -38,38 +37,11 @@ describe('manager/npm/post-update/npm', () => { { skipInstalls, postUpdateOptions }, updates ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.error).toBeUndefined(); expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); - it('massages lock files', async () => { - const execSnapshots = mockExecAll(exec); - const lockContents = await fsExtra.readFile( - upath.join(__dirname, '/__fixtures__/massage1/package-lock.json'), - 'utf8' - ); - fs.readFile = jest.fn(() => lockContents) as never; - const skipInstalls = true; - const updates = [ - { - depName: '@storybook/vue', - newVersion: '6.3.12', - isLockfileUpdate: false, - }, - ]; - const res = await npmHelper.generateLockFile( - 'some-dir', - {}, - 'package-lock.json', - { skipInstalls }, - updates - ); - expect(fs.readFile).toHaveBeenCalledTimes(2); - expect(fs.outputFile).toHaveBeenCalledTimes(1); - expect(res.error).toBeUndefined(); - expect(execSnapshots).toMatchSnapshot(); - }); it('performs lock file updates', async () => { const execSnapshots = mockExecAll(exec); fs.readFile = jest.fn(() => 'package-lock-contents') as never; @@ -84,7 +56,7 @@ describe('manager/npm/post-update/npm', () => { { skipInstalls }, updates ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.error).toBeUndefined(); expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); @@ -109,7 +81,7 @@ describe('manager/npm/post-update/npm', () => { upath.join('some-dir', 'package-lock.json'), upath.join('some-dir', 'npm-shrinkwrap.json') ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(fs.readFile).toHaveBeenCalledWith( upath.join('some-dir', 'npm-shrinkwrap.json'), 'utf8' @@ -134,7 +106,7 @@ describe('manager/npm/post-update/npm', () => { upath.join('some-dir', 'package-lock.json') ); expect(fs.move).toHaveBeenCalledTimes(0); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(fs.readFile).toHaveBeenCalledWith( upath.join('some-dir', 'npm-shrinkwrap.json'), 'utf8' @@ -154,7 +126,7 @@ describe('manager/npm/post-update/npm', () => { 'package-lock.json', { skipInstalls, binarySource } ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.error).toBeUndefined(); expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); @@ -170,7 +142,7 @@ describe('manager/npm/post-update/npm', () => { { binarySource }, [{ isRemediation: true }] ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.error).toBeUndefined(); expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toHaveLength(2); @@ -185,7 +157,7 @@ describe('manager/npm/post-update/npm', () => { {}, 'package-lock.json' ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.error).toBeTrue(); expect(res.lockFile).toBeUndefined(); expect(execSnapshots).toMatchSnapshot(); @@ -198,7 +170,7 @@ describe('manager/npm/post-update/npm', () => { {}, 'package-lock.json' ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); @@ -211,7 +183,7 @@ describe('manager/npm/post-update/npm', () => { 'package-lock.json', { binarySource: 'docker', constraints: { npm: '^6.0.0' } } ); - expect(fs.readFile).toHaveBeenCalledTimes(2); + expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.lockFile).toBe('package-lock-contents'); expect(execSnapshots).toMatchSnapshot(); }); diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index 9dd5414dcdd478..f84023593c5cec 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -1,4 +1,3 @@ -import is from '@sindresorhus/is'; import { validRange } from 'semver'; import { quote } from 'shlex'; import { join } from 'upath'; @@ -9,13 +8,7 @@ import { } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import { ExecOptions, exec } from '../../../util/exec'; -import { - move, - outputFile, - pathExists, - readFile, - remove, -} from '../../../util/fs'; +import { move, pathExists, readFile, remove } from '../../../util/fs'; import type { PostUpdateConfig, Upgrade } from '../../types'; import { getNodeConstraint } from './node-version'; import type { GenerateLockFileResult } from './types'; @@ -111,6 +104,7 @@ export async function generateLockFile( commands.push('npm dedupe'); } + // TODO: don't assume package-lock.json is in the same directory const lockFileName = join(cwd, filename); if (upgrades.find((upgrade) => upgrade.isLockFileMaintenance)) { @@ -125,36 +119,6 @@ export async function generateLockFile( 'Error removing yarn.lock for lock file maintenance' ); } - } else { - // massage lock file for npm 7+ - try { - const lockFileParsed = JSON.parse(await readFile(lockFileName, 'utf8')); - if (is.plainObject(lockFileParsed.packages)) { - const packageNames = Object.keys(lockFileParsed.packages); - let lockFileMassaged = false; - for (const { depName } of upgrades) { - for (const packageName of packageNames) { - if ( - packageName === `node_modules/${depName}` || - packageName.startsWith(`node_modules/${depName}/`) - ) { - logger.trace({ packageName }, 'Massaging out package name'); - lockFileMassaged = true; - delete lockFileParsed.packages[packageName]; - } - } - } - if (lockFileMassaged) { - logger.debug('Writing massaged package-lock.json'); - await outputFile( - lockFileName, - JSON.stringify(lockFileParsed, null, 2) - ); - } - } - } catch (err) { - logger.warn({ err }, 'Error massaging package-lock.json'); - } } // Run the commands From a17ade8d09e01f30613593058ebe40edb8d993d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Nov 2021 15:00:58 +0000 Subject: [PATCH 017/248] chore(deps): update linters (major) (#12550) Co-authored-by: Renovate Bot Co-authored-by: Rhys Arkins --- lib/manager/gradle/shallow/utils.ts | 4 +- package.json | 8 +- yarn.lock | 694 +++++++++++++--------------- 3 files changed, 324 insertions(+), 382 deletions(-) diff --git a/lib/manager/gradle/shallow/utils.ts b/lib/manager/gradle/shallow/utils.ts index 3c7e15171d4037..cd1a562ccbcd6d 100644 --- a/lib/manager/gradle/shallow/utils.ts +++ b/lib/manager/gradle/shallow/utils.ts @@ -56,14 +56,14 @@ export function parseDependencyString( if (!isDependencyString(input)) { return null; } - const [groupId, artifactId, FullValue] = input?.split(':'); + const [groupId, artifactId, FullValue] = input.split(':'); if (FullValue === versionLikeSubstring(FullValue)) { return { depName: `${groupId}:${artifactId}`, currentValue: FullValue, }; } - const [currentValue, dataType] = FullValue?.split('@'); + const [currentValue, dataType] = FullValue.split('@'); return { depName: `${groupId}:${artifactId}`, currentValue, diff --git a/package.json b/package.json index 2a2b6e26cdba84..960b6ec5940201 100644 --- a/package.json +++ b/package.json @@ -240,16 +240,16 @@ "@types/traverse": "0.6.32", "@types/url-join": "4.0.1", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "4.33.0", - "@typescript-eslint/parser": "4.33.0", + "@typescript-eslint/eslint-plugin": "5.2.0", + "@typescript-eslint/parser": "5.2.0", "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", "emojibase-data": "6.2.0", - "eslint": "7.32.0", + "eslint": "8.1.0", "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", "eslint-plugin-import": "2.25.2", - "eslint-plugin-jest": "24.7.0", + "eslint-plugin-jest": "25.2.2", "eslint-plugin-promise": "5.1.1", "expect-more-jest": "5.4.0", "glob": "7.2.0", diff --git a/yarn.lock b/yarn.lock index 6ad22cb1f18018..90cd9787b2e569 100644 --- a/yarn.lock +++ b/yarn.lock @@ -612,13 +612,6 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" @@ -777,7 +770,7 @@ "@babel/traverse" "^7.16.0" "@babel/types" "^7.16.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0": +"@babel/highlight@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== @@ -944,18 +937,18 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" + integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" + debug "^4.3.2" + espree "^9.0.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -964,10 +957,10 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.2.tgz#30aa825f11d438671d585bd44e7fd564535fc210" integrity sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw== -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" + integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== dependencies: "@humanwhocodes/object-schema" "^1.2.0" debug "^4.1.1" @@ -983,7 +976,7 @@ resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== -"@isaacs/string-locale-compare@*", "@isaacs/string-locale-compare@^1.0.1": +"@isaacs/string-locale-compare@^1.0.1", "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== @@ -1222,21 +1215,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@*", "@npmcli/arborist@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.0.4.tgz#a532a7cc430ccbd87c0595a8828f9614f29d2dac" - integrity sha512-5hRkiHF9zu62z6a7CJqhVG5CFUVnbYqvrrcxxEmhxFgyH2ovICyULOrj7nF4VBlfzp7OPu/rveV2ts9iYrn74g== +"@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0", "@npmcli/arborist@^2.9.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" + integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== dependencies: "@isaacs/string-locale-compare" "^1.0.1" "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.0" - "@npmcli/metavuln-calculator" "^2.0.0" + "@npmcli/map-workspaces" "^1.0.2" + "@npmcli/metavuln-calculator" "^1.1.0" "@npmcli/move-file" "^1.1.0" "@npmcli/name-from-folder" "^1.0.1" "@npmcli/node-gyp" "^1.0.1" "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^2.0.0" - bin-links "^2.3.0" + "@npmcli/run-script" "^1.8.2" + bin-links "^2.2.1" cacache "^15.0.3" common-ancestor-path "^1.0.1" json-parse-even-better-errors "^2.3.1" @@ -1247,7 +1240,7 @@ npm-package-arg "^8.1.5" npm-pick-manifest "^6.1.0" npm-registry-fetch "^11.0.0" - pacote "^12.0.0" + pacote "^11.3.5" parse-conflict-json "^1.1.1" proc-log "^1.0.0" promise-all-reject-late "^1.0.0" @@ -1260,12 +1253,12 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@*", "@npmcli/ci-detect@^1.3.0": +"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== -"@npmcli/config@*": +"@npmcli/config@^2.3.0": version "2.3.1" resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.1.tgz#41d80ce272831461b5cb158afa110525d4be0fed" integrity sha512-F/8R/Zqun8682TgaCILUNoaVfd1LVaYZ/jcVt9KWzfKpzcPus1zEApAl54PqVqVJbNq6f01QTDQHD6L/n56BXw== @@ -1313,24 +1306,23 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/map-workspaces@*", "@npmcli/map-workspaces@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz#e342efbbdd0dad1bba5d7723b674ca668bf8ac5a" - integrity sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g== +"@npmcli/map-workspaces@^1.0.2", "@npmcli/map-workspaces@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab" + integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q== dependencies: "@npmcli/name-from-folder" "^1.0.1" glob "^7.1.6" minimatch "^3.0.4" read-package-json-fast "^2.0.1" -"@npmcli/metavuln-calculator@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" - integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== +"@npmcli/metavuln-calculator@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" + integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== dependencies: cacache "^15.0.5" - json-parse-even-better-errors "^2.3.1" - pacote "^12.0.0" + pacote "^11.1.11" semver "^7.3.2" "@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": @@ -1351,7 +1343,7 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== -"@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": +"@npmcli/package-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== @@ -1365,17 +1357,7 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@*", "@npmcli/run-script@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" - integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== - dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^8.2.0" - read-package-json-fast "^2.0.1" - -"@npmcli/run-script@^1.8.2": +"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.6": version "1.8.6" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== @@ -1831,7 +1813,7 @@ resolved "https://registry.yarnpkg.com/@types/json-dup-key-validator/-/json-dup-key-validator-1.0.0.tgz#3a666ab980e5e957960e9341e13eabd4fd9a24f3" integrity sha512-D/pvJeKintUSW4G+aBRSvReECxCHbMcE9IuSU7cfWQAtYStE/vH8OLXFw38JJ37dSEnpcOkEV7q4WmdvtV0zHg== -"@types/json-schema@*", "@types/json-schema@^7.0.7": +"@types/json-schema@*", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -2060,75 +2042,121 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== +"@typescript-eslint/eslint-plugin@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz#2bdb247cc2e2afce7efbce09afb9a6f0a8a08434" + integrity sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw== dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" + "@typescript-eslint/experimental-utils" "5.2.0" + "@typescript-eslint/scope-manager" "5.2.0" + debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" - regexpp "^3.1.0" + regexpp "^3.2.0" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.33.0", "@typescript-eslint/experimental-utils@^4.0.1": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== +"@typescript-eslint/experimental-utils@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz#e3b2cb9cd0aff9b50f68d9a414c299fd26b067e6" + integrity sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.2.0" + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/typescript-estree" "5.2.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz#ee56b4957547ed2b0fc7451205e41502e664f546" + integrity sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w== dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.3.0" + "@typescript-eslint/types" "5.3.0" + "@typescript-eslint/typescript-estree" "5.3.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== +"@typescript-eslint/parser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.2.0.tgz#dc081aa89de16b5676b10215519af3aa7b58fb72" + integrity sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" + "@typescript-eslint/scope-manager" "5.2.0" + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/typescript-estree" "5.2.0" + debug "^4.3.2" -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== +"@typescript-eslint/scope-manager@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz#7ce8e4ab2baaa0ad5282913ea8e13ce03ec6a12a" + integrity sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ== + dependencies: + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/visitor-keys" "5.2.0" -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== +"@typescript-eslint/scope-manager@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz#97d0ccc7c9158e89e202d5e24ce6ba49052d432e" + integrity sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" + "@typescript-eslint/types" "5.3.0" + "@typescript-eslint/visitor-keys" "5.3.0" + +"@typescript-eslint/types@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.2.0.tgz#7ad32d15abddb0ee968a330f0ea182ea544ef7cf" + integrity sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ== + +"@typescript-eslint/types@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.0.tgz#af29fd53867c2df0028c57c36a655bd7e9e05416" + integrity sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg== + +"@typescript-eslint/typescript-estree@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz#c22e0ff6f8a4a3f78504a80ebd686fe2870a68ae" + integrity sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g== + dependencies: + "@typescript-eslint/types" "5.2.0" + "@typescript-eslint/visitor-keys" "5.2.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== +"@typescript-eslint/typescript-estree@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz#4f68ddd46dc2983182402d2ab21fb44ad94988cf" + integrity sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug== dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "5.3.0" + "@typescript-eslint/visitor-keys" "5.3.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz#03522d35df98474f08e0357171a7d1b259a88f55" + integrity sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg== + dependencies: + "@typescript-eslint/types" "5.2.0" + eslint-visitor-keys "^3.0.0" + +"@typescript-eslint/visitor-keys@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz#a6258790f3b7b2547f70ed8d4a1e0c3499994523" + integrity sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw== + dependencies: + "@typescript-eslint/types" "5.3.0" + eslint-visitor-keys "^3.0.0" "@yarnpkg/core@2.4.0": version "2.4.0" @@ -2235,7 +2263,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@*, abbrev@1: +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -2263,12 +2291,12 @@ acorn-walk@^8.1.1: 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: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1: +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0: 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== @@ -2307,16 +2335,6 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - 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" - require-from-string "^2.0.2" - uri-js "^4.2.2" - ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -2363,12 +2381,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@*, ansicolors@~0.3.2: +ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= -ansistyles@*: +ansistyles@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= @@ -2396,7 +2414,7 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archy@*: +archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= @@ -2511,11 +2529,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2637,7 +2650,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -bin-links@^2.3.0: +bin-links@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== @@ -2771,7 +2784,7 @@ bunyan@1.8.15: mv "~2" safe-json-stringify "~1" -cacache@*, cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: +cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -2863,7 +2876,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@*, chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2913,7 +2926,7 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chownr@*, chownr@^2.0.0: +chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== @@ -2950,15 +2963,15 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" + string-width "^2.0.0" + strip-ansi "^3.0.1" -cli-table3@*, cli-table3@^0.6.0: +cli-table3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -3050,7 +3063,7 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -columnify@*: +columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= @@ -3301,7 +3314,7 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -3832,12 +3845,12 @@ eslint-plugin-import@2.25.2: resolve "^1.20.0" tsconfig-paths "^3.11.0" -eslint-plugin-jest@24.7.0: - version "24.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz#206ac0833841e59e375170b15f8d0955219c4889" - integrity sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA== +eslint-plugin-jest@25.2.2: + version "25.2.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.2.2.tgz#aada85113268e79d4e7423f8ad4e1b740f112e71" + integrity sha512-frn5yhOF60U4kcqozO3zKTNZQUk+mfx037XOy2iiYL8FhorEkuCuL3/flzKcY1ECDP2WYT9ydmvlO3fRW9o4mg== dependencies: - "@typescript-eslint/experimental-utils" "^4.0.1" + "@typescript-eslint/experimental-utils" "^5.0.0" eslint-plugin-promise@5.1.1: version "5.1.1" @@ -3852,12 +3865,13 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-scope@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" + integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== dependencies: - eslint-visitor-keys "^1.1.0" + esrecurse "^4.3.0" + estraverse "^5.2.0" eslint-utils@^3.0.0: version "3.0.0" @@ -3866,47 +3880,46 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "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.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint-visitor-keys@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" + integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== + +eslint@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664" + integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.0.3" + "@humanwhocodes/config-array" "^0.6.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^6.0.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" + glob-parent "^6.0.1" globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" @@ -3914,22 +3927,21 @@ eslint@7.32.0: natural-compare "^1.4.0" optionator "^0.9.1" progress "^2.0.0" - regexpp "^3.1.0" + regexpp "^3.2.0" semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" + integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== dependencies: - acorn "^7.4.0" + acorn "^8.5.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^3.0.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" @@ -4117,7 +4129,7 @@ fast-xml-parser@3.19.0: resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== -fastest-levenshtein@*: +fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -4426,7 +4438,14 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@*, glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -4481,7 +4500,7 @@ globalthis@^1.0.1: dependencies: define-properties "^1.1.3" -globby@^11.0.0, globby@^11.0.1, globby@^11.0.3, globby@~11.0.4: +globby@^11.0.0, globby@^11.0.1, globby@^11.0.4, globby@~11.0.4: version "11.0.4" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== @@ -4510,7 +4529,7 @@ got@11.8.2, got@^11.7.0: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@*, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -4619,18 +4638,18 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@*, hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -4739,13 +4758,6 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore-walk@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" - integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== - dependencies: - minimatch "^3.0.4" - ignore@5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" @@ -4810,7 +4822,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@*, ini@2.0.0, ini@^2.0.0: +ini@2.0.0, ini@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== @@ -4820,7 +4832,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@*: +init-package-json@^2.0.5: 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== @@ -4920,7 +4932,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-cidr@*: +is-cidr@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== @@ -5712,7 +5724,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -5798,7 +5810,7 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@*, json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -5808,11 +5820,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -5924,7 +5931,7 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@*: +libnpmaccess@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== @@ -5934,7 +5941,7 @@ libnpmaccess@*: npm-package-arg "^8.1.2" npm-registry-fetch "^11.0.0" -libnpmdiff@*: +libnpmdiff@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== @@ -5948,31 +5955,31 @@ libnpmdiff@*: pacote "^11.3.0" tar "^6.1.0" -libnpmexec@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-3.0.1.tgz#bc2fddf1b7bd2c1b2c43b4b726ec4cf11920ad0a" - integrity sha512-VUZTpkKBRPv3Z9DIjbsiHhEQXmQ+OwSQ/yLCY9i6CFE8UIczWyE6wVxP5sJ5NSGtSTUs6I98WewQOL45OKMyxA== +libnpmexec@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-2.0.1.tgz#729ae3e15a3ba225964ccf248117a75d311eeb73" + integrity sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw== dependencies: - "@npmcli/arborist" "^4.0.0" + "@npmcli/arborist" "^2.3.0" "@npmcli/ci-detect" "^1.3.0" - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.4" chalk "^4.1.0" mkdirp-infer-owner "^2.0.0" npm-package-arg "^8.1.2" - pacote "^12.0.0" + pacote "^11.3.1" proc-log "^1.0.0" read "^1.0.7" read-package-json-fast "^2.0.2" walk-up-path "^1.0.0" -libnpmfund@*: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-2.0.1.tgz#3c7e2be61e8c79e22c4918dde91ef57f64faf064" - integrity sha512-OhDbjB3gqdRyuQ56AhUtO49HZ7cZHSM7yCnhQa1lsNpmAmGPnjCImfx8SoWaAkUM7Ov8jngMR5JHKAr1ddjHTQ== +libnpmfund@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.1.0.tgz#ee91313905b3194b900530efa339bc3f9fc4e5c4" + integrity sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ== dependencies: - "@npmcli/arborist" "^4.0.0" + "@npmcli/arborist" "^2.5.0" -libnpmhook@*: +libnpmhook@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.3.tgz#1d7f0d7e6a7932fbf7ce0881fdb0ed8bf8748a30" integrity sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g== @@ -5980,7 +5987,7 @@ libnpmhook@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmorg@*: +libnpmorg@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.3.tgz#4e605d4113dfa16792d75343824a0625c76703bc" integrity sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA== @@ -5988,16 +5995,16 @@ libnpmorg@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmpack@*: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-3.0.0.tgz#b1cdf182106bc0d25910e79bb5c9b6c23cd71670" - integrity sha512-W6lt4blkR9YXu/qOrFknfnKBajz/1GvAc5q1XcWTGuBJn2DYKDWHtA7x1fuMQdn7hKDBOPlZ/Aqll+ZvAnrM6g== +libnpmpack@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" + integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== dependencies: - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.3" npm-package-arg "^8.1.0" - pacote "^12.0.0" + pacote "^11.2.6" -libnpmpublish@*: +libnpmpublish@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== @@ -6008,14 +6015,14 @@ libnpmpublish@*: semver "^7.1.3" ssri "^8.0.1" -libnpmsearch@*: +libnpmsearch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.2.tgz#aee81b9e4768750d842b627a3051abc89fdc15f3" integrity sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw== dependencies: npm-registry-fetch "^11.0.0" -libnpmteam@*: +libnpmteam@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.4.tgz#9dbe2e18ae3cb97551ec07d2a2daf9944f3edc4c" integrity sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw== @@ -6023,13 +6030,13 @@ libnpmteam@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmversion@*: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-2.0.1.tgz#20b1425d88cd99c66806a54b458d2d654066b550" - integrity sha512-uFGtNTe/m0GOIBQCE4ryIsgGNJdeShW+qvYtKNLCCuiG7JY3YEslL/maFFZbaO4wlQa/oj1t0Bm9TyjahvtgQQ== +libnpmversion@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.2.1.tgz#689aa7fe0159939b3cbbf323741d34976f4289e9" + integrity sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ== dependencies: "@npmcli/git" "^2.0.7" - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.4" json-parse-even-better-errors "^2.3.1" semver "^7.3.5" stringify-package "^1.0.1" @@ -6118,11 +6125,6 @@ lodash.set@^4.3.2: resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - lodash.uniqby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" @@ -6175,7 +6177,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@*, make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: +make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -6501,7 +6503,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@*, minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -6515,7 +6517,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== @@ -6530,7 +6532,7 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: +mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== @@ -6539,11 +6541,6 @@ mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -6551,6 +6548,11 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mock-fs@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.1.tgz#d4c95e916abf400664197079d7e399d133bb6048" @@ -6581,11 +6583,6 @@ mri@^1.1.5: 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" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6596,6 +6593,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -6685,36 +6687,36 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-gyp@*, node-gyp@^8.0.0, node-gyp@^8.2.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.0.tgz#6e1112b10617f0f8559c64b3f737e8109e5a8338" - integrity sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q== +node-gyp@^7.1.0, node-gyp@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" + graceful-fs "^4.2.3" nopt "^5.0.0" npmlog "^4.1.2" + request "^2.88.2" rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" + semver "^7.3.2" + tar "^6.0.2" which "^2.0.2" -node-gyp@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@^8.0.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.0.tgz#6e1112b10617f0f8559c64b3f737e8109e5a8338" + integrity sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.3" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" nopt "^5.0.0" npmlog "^4.1.2" - request "^2.88.2" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" node-html-parser@3.3.6: @@ -6748,7 +6750,7 @@ node.extend@^2.0.0: has "^1.0.3" is "^3.2.1" -nopt@*, nopt@^5.0.0: +nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== @@ -6785,7 +6787,7 @@ normalize-url@^6.0.0, normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@*: +npm-audit-report@^2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== @@ -6799,7 +6801,7 @@ npm-bundled@^1.1.1: dependencies: npm-normalize-package-bin "^1.0.1" -npm-install-checks@*, npm-install-checks@^4.0.0: +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== @@ -6811,7 +6813,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -6830,17 +6832,7 @@ npm-packlist@^2.1.4: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-packlist@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" - integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== - dependencies: - glob "^7.1.6" - ignore-walk "^4.0.1" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -6850,14 +6842,14 @@ npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pic npm-package-arg "^8.1.2" semver "^7.3.4" -npm-profile@*: +npm-profile@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.4.tgz#73e5bd1d808edc2c382d7139049cc367ac43161b" integrity sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA== dependencies: npm-registry-fetch "^11.0.0" -npm-registry-fetch@*, npm-registry-fetch@^11.0.0: +npm-registry-fetch@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== @@ -6891,7 +6883,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@*: +npm-user-validate@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== @@ -6972,16 +6964,6 @@ npm@^7.0.0: which "^2.0.2" write-file-atomic "^3.0.3" -npmlog@*: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -6992,6 +6974,16 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -7069,7 +7061,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@*: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -7231,32 +7223,7 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@*, pacote@^12.0.0: - version "12.0.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.2.tgz#14ae30a81fe62ec4fc18c071150e6763e932527c" - integrity sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg== - dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^2.0.0" - cacache "^15.0.5" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^3.0.0" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^11.0.0" - promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" - -pacote@^11.3.0: +pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: version "11.3.5" resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== @@ -7288,7 +7255,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@*, parse-conflict-json@^1.1.1: +parse-conflict-json@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== @@ -7635,7 +7602,7 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qrcode-terminal@*: +qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== @@ -7706,7 +7673,7 @@ read-cmd-shim@^2.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: +read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -7714,7 +7681,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.1.1: +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== @@ -7752,7 +7719,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@*, read@1, read@^1.0.7, read@~1.0.1: +read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -7781,7 +7748,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -7845,7 +7812,7 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regexpp@^3.1.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -7925,11 +7892,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" @@ -7987,7 +7949,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@*, rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8115,18 +8077,18 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -semver@*, semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -8241,15 +8203,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - slugify@1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.1.tgz#a5fcaef29f4e57c6e932ce7044b6ffd9cf81b641" @@ -8382,7 +8335,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@*, ssri@^8.0.0, ssri@^8.0.1: +ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -8447,7 +8400,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.1 || ^2.0.0": +"string-width@^1.0.1 || ^2.0.0", string-width@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8455,7 +8408,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8595,17 +8548,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9: - version "6.7.3" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.3.tgz#255388439715a738391bd2ee4cbca89a4d05a9b7" - integrity sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - tar-stream@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" @@ -8617,7 +8559,7 @@ tar-stream@^2.0.1: inherits "^2.0.3" readable-stream "^3.1.1" -tar@*, tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -8667,7 +8609,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@*, text-table@^0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -8704,7 +8646,7 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tiny-relative-date@*: +tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== @@ -8779,7 +8721,7 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -treeverse@*, treeverse@^1.0.4: +treeverse@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== @@ -9116,7 +9058,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@*, validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0: +validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= @@ -9238,13 +9180,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@*, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -9252,6 +9187,13 @@ which@^1.2.9: dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -9283,7 +9225,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== From ab018191fac6961b5f9d0a73261ac8fba0b4566f Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 8 Nov 2021 20:20:03 +0100 Subject: [PATCH 018/248] chore: report and fix unused ESLint disable directives (#12548) --- lib/config-validator.ts | 2 - lib/config/decrypt.spec.ts | 4 +- lib/config/decrypt.ts | 1 - lib/config/global.ts | 2 +- lib/config/migration.ts | 6 +-- lib/config/presets/index.ts | 2 +- lib/config/presets/util.ts | 1 - lib/config/validation.ts | 2 +- lib/datasource/cdnjs/index.ts | 2 +- lib/datasource/clojure/index.spec.ts | 2 +- lib/datasource/clojure/index.ts | 1 - lib/datasource/datasource.ts | 2 +- lib/datasource/git-refs/index.ts | 2 - lib/datasource/git-tags/index.ts | 2 - lib/datasource/index.ts | 2 +- lib/datasource/jenkins-plugins/get.ts | 13 ++--- lib/datasource/maven/index.spec.ts | 2 +- lib/datasource/metadata.ts | 1 - lib/datasource/npm/index.spec.ts | 4 +- lib/datasource/npm/npmrc.spec.ts | 2 - lib/datasource/ruby-version/index.ts | 1 - lib/datasource/terraform-module/index.ts | 1 - lib/logger/config-serializer.ts | 25 ++++----- lib/logger/utils.ts | 1 - lib/manager/ansible-galaxy/collections.ts | 2 - lib/manager/bundler/extract.ts | 2 - lib/manager/circleci/extract.ts | 2 +- lib/manager/composer/extract.ts | 4 +- lib/manager/dockerfile/extract.spec.ts | 4 -- lib/manager/github-actions/extract.ts | 4 +- lib/manager/gitlabci/extract.ts | 2 +- lib/manager/gradle-wrapper/utils.ts | 1 - lib/manager/gradle/deep/build-gradle.spec.ts | 10 ++-- lib/manager/gradle/deep/build-gradle.ts | 1 - lib/manager/gradle/shallow/parser.spec.ts | 1 - lib/manager/gradle/shallow/tokenizer.spec.ts | 12 ++--- lib/manager/helmfile/extract.ts | 2 +- lib/manager/maven/extract.spec.ts | 1 - lib/manager/maven/extract.ts | 6 +-- lib/manager/maven/index.spec.ts | 1 - lib/manager/npm/extract/index.spec.ts | 1 - lib/manager/npm/extract/index.ts | 2 +- lib/manager/npm/extract/monorepo.ts | 4 +- lib/manager/npm/extract/pnpm.ts | 4 +- lib/manager/npm/post-update/index.ts | 6 +-- lib/manager/npm/update/dependency/index.ts | 2 - lib/manager/pip_requirements/extract.spec.ts | 4 +- lib/manager/swift/extract.ts | 2 +- lib/manager/terraform/extract.ts | 2 +- lib/manager/terraform/modules.ts | 3 +- lib/manager/terraform/providers.ts | 1 - lib/manager/terraform/required-providers.ts | 2 - lib/manager/terraform/required-version.ts | 1 - lib/manager/terraform/resources.ts | 2 - lib/manager/terraform/util.ts | 1 - lib/manager/terragrunt/extract.ts | 2 +- lib/manager/terragrunt/modules.ts | 3 +- lib/platform/azure/azure-helper.spec.ts | 9 ++-- lib/platform/azure/index.spec.ts | 2 +- lib/platform/azure/index.ts | 1 - lib/platform/azure/util.ts | 2 +- lib/platform/bitbucket/index.ts | 1 - lib/platform/index.ts | 1 - lib/util/exec/index.spec.ts | 1 - lib/util/http/auth.ts | 7 ++- lib/util/http/index.ts | 5 +- lib/util/index.ts | 2 +- lib/util/regex.spec.ts | 1 - lib/util/regex.ts | 2 +- lib/versioning/index.spec.ts | 4 -- lib/versioning/index.ts | 1 - lib/versioning/loose/generic.ts | 3 +- lib/versioning/loose/utils.spec.ts | 3 -- lib/versioning/regex/index.ts | 1 - lib/workers/branch/get-updated.ts | 2 +- lib/workers/branch/index.ts | 4 +- lib/workers/global/config/parse/cli.ts | 1 - lib/workers/global/config/parse/env.ts | 2 +- lib/workers/global/config/parse/file.ts | 1 - .../config/parse/host-rules-from-env.ts | 4 +- lib/workers/pr/body/index.ts | 1 - lib/workers/pr/index.ts | 2 +- lib/workers/repository/changelog/index.ts | 2 +- .../repository/dependency-dashboard.spec.ts | 2 +- .../repository/dependency-dashboard.ts | 1 - lib/workers/repository/error.ts | 52 +++++++++---------- lib/workers/repository/index.ts | 2 +- lib/workers/repository/init/vulnerability.ts | 8 +-- lib/workers/repository/process/fetch.ts | 2 +- .../process/lookup/filter-checks.ts | 4 +- .../repository/process/lookup/index.ts | 4 +- lib/workers/repository/updates/branch-name.ts | 1 - lib/workers/repository/updates/generate.ts | 5 +- package.json | 4 +- test/exec-util.ts | 1 - tools/check-re2.mjs | 2 +- 96 files changed, 128 insertions(+), 205 deletions(-) diff --git a/lib/config-validator.ts b/lib/config-validator.ts index bd659398db5ca9..2c6ddc237f04e1 100644 --- a/lib/config-validator.ts +++ b/lib/config-validator.ts @@ -11,8 +11,6 @@ import { validateConfig } from './config/validation'; import { logger } from './logger'; import { getConfig as getFileConfig } from './workers/global/config/parse/file'; -/* eslint-disable no-console */ - let returnVal = 0; async function validate( diff --git a/lib/config/decrypt.spec.ts b/lib/config/decrypt.spec.ts index 18c2c3808dbaa6..2d6d2151255cc5 100644 --- a/lib/config/decrypt.spec.ts +++ b/lib/config/decrypt.spec.ts @@ -41,7 +41,7 @@ describe('config/decrypt', () => { it('replaces npm token placeholder in npmrc', async () => { setGlobalConfig({ privateKey: 'invalid-key', privateKeyOld: privateKey }); // test old key failover config.npmrc = - '//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n'; // eslint-disable-line no-template-curly-in-string + '//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n'; config.encrypted = { npmToken: 'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==', @@ -55,7 +55,7 @@ describe('config/decrypt', () => { }); it('appends npm token in npmrc', async () => { setGlobalConfig({ privateKey }); - config.npmrc = 'foo=bar\n'; // eslint-disable-line no-template-curly-in-string + config.npmrc = 'foo=bar\n'; config.encrypted = { npmToken: 'FLA9YHIzpE7YetAg/P0X46npGRCMqn7hgyzwX5ZQ9wYgu9BRRbTiBVsUIFTyM5BuP1Q22slT2GkWvFvum7GU236Y6QiT7Nr8SLvtsJn2XUuq8H7REFKzdy3+wqyyWbCErYTFyY1dcPM7Ht+CaGDWdd8u/FsoX7AdMRs/X1jNUo6iSmlUiyGlYDKF+QMnCJom1VPVgZXWsGKdjI2MLny991QMaiv0VajmFIh4ENv4CtXOl/1twvIl/6XTXAaqpJJKDTPZEuydi+PHDZmal2RAOfrkH4m0UURa7SlfpUlIg+EaqbNGp85hCYXLwRcEET1OnYr3rH1oYkcYJ40any1tvQ==', diff --git a/lib/config/decrypt.ts b/lib/config/decrypt.ts index 86a51a435b78c7..e17c1b9b1e9c75 100644 --- a/lib/config/decrypt.ts +++ b/lib/config/decrypt.ts @@ -179,7 +179,6 @@ export async function decryptConfig( 'Migrating npmToken to npmrc' ); if (is.string(decryptedConfig.npmrc)) { - /* eslint-disable no-template-curly-in-string */ if (decryptedConfig.npmrc.includes('${NPM_TOKEN}')) { logger.debug('Replacing ${NPM_TOKEN} with decrypted token'); decryptedConfig.npmrc = decryptedConfig.npmrc.replace( diff --git a/lib/config/global.ts b/lib/config/global.ts index 0d17dd3992d23e..38f557c52fdb9c 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -29,7 +29,7 @@ export function setGlobalConfig( const result = { ...config }; for (const option of repoGlobalOptions) { repoGlobalConfig[option] = config[option]; - delete result[option]; // eslint-disable-line no-param-reassign + delete result[option]; } return result; } diff --git a/lib/config/migration.ts b/lib/config/migration.ts index d0482ef5aa566b..6b548e4f665b53 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -316,11 +316,11 @@ export function migrateConfig( migratedConfig.automergeType = 'branch'; } else if (key === 'automergeMinor') { migratedConfig.minor = migratedConfig.minor || {}; - migratedConfig.minor.automerge = val == true; // eslint-disable-line eqeqeq + migratedConfig.minor.automerge = val == true; delete migratedConfig[key]; } else if (key === 'automergeMajor') { migratedConfig.major = migratedConfig.major || {}; - migratedConfig.major.automerge = val == true; // eslint-disable-line eqeqeq + migratedConfig.major.automerge = val == true; delete migratedConfig[key]; } else if (key === 'multipleMajorPrs') { delete migratedConfig.multipleMajorPrs; @@ -336,7 +336,7 @@ export function migrateConfig( migratedConfig.separateMinorPatch = val; } else if (key === 'automergePatch') { migratedConfig.patch = migratedConfig.patch || {}; - migratedConfig.patch.automerge = val == true; // eslint-disable-line eqeqeq + migratedConfig.patch.automerge = val == true; delete migratedConfig[key]; } else if (key === 'ignoreNodeModules') { delete migratedConfig.ignoreNodeModules; diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 21298a144797cc..8ad679445e81bd 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -255,7 +255,7 @@ export async function resolveConfigPresets( existingPresets: string[] = [] ): Promise { if (!ignorePresets || ignorePresets.length === 0) { - ignorePresets = inputConfig.ignorePresets || []; // eslint-disable-line + ignorePresets = inputConfig.ignorePresets || []; } logger.trace( { config: inputConfig, existingPresets }, diff --git a/lib/config/presets/util.ts b/lib/config/presets/util.ts index 8b044b5a33e236..4f701cb4ed7e94 100644 --- a/lib/config/presets/util.ts +++ b/lib/config/presets/util.ts @@ -18,7 +18,6 @@ export async function fetchPreset({ packageTag = null, fetch, }: FetchPresetConfig): Promise { - // eslint-disable-next-line no-param-reassign endpoint = ensureTrailingSlash(endpoint); const [fileName, presetName, subPresetName] = filePreset.split('/'); const pathPrefix = presetPath ? `${presetPath}/` : ''; diff --git a/lib/config/validation.ts b/lib/config/validation.ts index 3faa3dbd77a292..7ca765b547fed4 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -122,7 +122,7 @@ export async function validateConfig( topic: 'Config security error', message: '__proto__', }); - continue; // eslint-disable-line + continue; } if (parentPath && topLevelObjects.includes(key)) { errors.push({ diff --git a/lib/datasource/cdnjs/index.ts b/lib/datasource/cdnjs/index.ts index cac132885f6c67..7fbce6cb9fcfa5 100644 --- a/lib/datasource/cdnjs/index.ts +++ b/lib/datasource/cdnjs/index.ts @@ -17,7 +17,7 @@ export class CdnJsDatasource extends Datasource { override readonly caching = true; // this.handleErrors will always throw - // eslint-disable-next-line consistent-return + async getReleases({ lookupName, registryUrl, diff --git a/lib/datasource/clojure/index.spec.ts b/lib/datasource/clojure/index.spec.ts index 66aab7a7ecbf7f..d6b4d312aa7e53 100644 --- a/lib/datasource/clojure/index.spec.ts +++ b/lib/datasource/clojure/index.spec.ts @@ -294,7 +294,7 @@ describe('datasource/clojure/index', () => { it('returns null for invalid registryUrls', async () => { const res = await get( 'org.example:package', - // eslint-disable-next-line no-template-curly-in-string + '${project.baseUri}../../repository/' ); expect(res).toBeNull(); diff --git a/lib/datasource/clojure/index.ts b/lib/datasource/clojure/index.ts index 79b2c8cf034a46..513909ab9a8598 100644 --- a/lib/datasource/clojure/index.ts +++ b/lib/datasource/clojure/index.ts @@ -17,7 +17,6 @@ export class ClojureDatasource extends Datasource { MAVEN_REPO, ]; - // eslint-disable-next-line class-methods-use-this getReleases({ lookupName, registryUrl, diff --git a/lib/datasource/datasource.ts b/lib/datasource/datasource.ts index 033557c6d66d3c..84b21952797f48 100644 --- a/lib/datasource/datasource.ts +++ b/lib/datasource/datasource.ts @@ -33,7 +33,7 @@ export abstract class Datasource implements DatasourceApi { getDigest?(config: DigestConfig, newValue?: string): Promise; - // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-empty-function + // eslint-disable-next-line @typescript-eslint/no-empty-function handleSpecificErrors(err: HttpError): void {} protected handleGenericErrors(err: HttpError): never { diff --git a/lib/datasource/git-refs/index.ts b/lib/datasource/git-refs/index.ts index dcd2e603506bfc..6567ece8ff47f6 100644 --- a/lib/datasource/git-refs/index.ts +++ b/lib/datasource/git-refs/index.ts @@ -22,7 +22,6 @@ export class GitRefsDatasource extends Datasource { namespace: `datasource-${GitRefsDatasource.id}`, key: ({ lookupName }: GetReleasesConfig) => lookupName, }) - // eslint-disable-next-line class-methods-use-this override async getReleases({ lookupName, }: GetReleasesConfig): Promise { @@ -54,7 +53,6 @@ export class GitRefsDatasource extends Datasource { return result; } - // eslint-disable-next-line class-methods-use-this override async getDigest( { lookupName }: DigestConfig, newValue?: string diff --git a/lib/datasource/git-tags/index.ts b/lib/datasource/git-tags/index.ts index f48a66fc10b9a4..e155a4d2e61bfb 100644 --- a/lib/datasource/git-tags/index.ts +++ b/lib/datasource/git-tags/index.ts @@ -18,7 +18,6 @@ export class GitTagsDatasource extends Datasource { namespace: `datasource-${GitTagsDatasource.id}`, key: ({ lookupName }: GetReleasesConfig) => lookupName, }) - // eslint-disable-next-line class-methods-use-this async getReleases({ lookupName, }: GetReleasesConfig): Promise { @@ -48,7 +47,6 @@ export class GitTagsDatasource extends Datasource { return result; } - // eslint-disable-next-line class-methods-use-this override async getDigest( { lookupName }: DigestConfig, newValue?: string diff --git a/lib/datasource/index.ts b/lib/datasource/index.ts index 7e1adab369a674..e77b06d45361e5 100644 --- a/lib/datasource/index.ts +++ b/lib/datasource/index.ts @@ -354,7 +354,7 @@ export async function getPkgReleases( } // Strip constraints from releases result res.releases.forEach((release) => { - delete release.constraints; // eslint-disable-line no-param-reassign + delete release.constraints; }); return res; } diff --git a/lib/datasource/jenkins-plugins/get.ts b/lib/datasource/jenkins-plugins/get.ts index 14b517d6a8928f..a80c96ef2c32a7 100644 --- a/lib/datasource/jenkins-plugins/get.ts +++ b/lib/datasource/jenkins-plugins/get.ts @@ -28,13 +28,12 @@ async function updateJenkinsCache( updateHandler: () => Promise ): Promise { if (hasCacheExpired(cache)) { - // eslint-disable-next-line no-param-reassign cache.updatePromise = // eslint-disable-next-line @typescript-eslint/no-misused-promises cache.updatePromise || updateHandler(); await cache.updatePromise; - cache.updatePromise = null; // eslint-disable-line no-param-reassign + cache.updatePromise = null; } } @@ -43,7 +42,6 @@ function updateJenkinsPluginInfoCacheCallback( cache: JenkinsCache ): void { for (const name of Object.keys(response.plugins || [])) { - // eslint-disable-next-line no-param-reassign cache.cache[name] = { releases: [], // releases are stored in another cache sourceUrl: response.plugins[name]?.scm, @@ -57,7 +55,6 @@ function updateJenkinsPluginVersionsCacheCallback( ): void { const plugins = response.plugins; for (const name of Object.keys(plugins || [])) { - // eslint-disable-next-line no-param-reassign cache.cache[name] = Object.keys(plugins[name]).map((version) => ({ version, downloadUrl: plugins[name][version]?.url, @@ -89,7 +86,6 @@ async function getJenkinsUpdateCenterResponse( `jenkins-plugins: Fetched Jenkins plugins ${cache.name}` ); } catch (err) /* istanbul ignore next */ { - // eslint-disable-next-line no-param-reassign cache.cache = Object.create(null); throw new ExternalHostError( new Error(`jenkins-plugins: Fetch plugins ${cache.name} error`) @@ -101,14 +97,14 @@ async function getJenkinsUpdateCenterResponse( async function updateJenkinsPluginCache( cache: JenkinsCache, - // eslint-disable-next-line @typescript-eslint/no-shadow + callback: (resp: T, cache: JenkinsCache) => void ): Promise { const response = await getJenkinsUpdateCenterResponse(cache); if (response) { callback(response, cache); } - cache.lastSync = new Date(); // eslint-disable-line no-param-reassign + cache.lastSync = new Date(); } const pluginInfoCache: JenkinsCache = { @@ -169,9 +165,8 @@ export function getReleases({ } function resetJenkinsCache(cache: JenkinsCache): void { - // eslint-disable-next-line no-param-reassign cache.lastSync = new Date('2000-01-01'); - cache.cache = Object.create(null); // eslint-disable-line no-param-reassign + cache.cache = Object.create(null); } // Note: use only for tests diff --git a/lib/datasource/maven/index.spec.ts b/lib/datasource/maven/index.spec.ts index c6812fd6dbf054..523ddc153ffe2c 100644 --- a/lib/datasource/maven/index.spec.ts +++ b/lib/datasource/maven/index.spec.ts @@ -315,7 +315,7 @@ describe('datasource/maven/index', () => { it('returns null for invalid registryUrls', async () => { const res = await get( 'org.example:package', - // eslint-disable-next-line no-template-curly-in-string + '${project.baseUri}../../repository/' ); expect(res).toBeNull(); diff --git a/lib/datasource/metadata.ts b/lib/datasource/metadata.ts index cd92345a504a46..25103f1927058a 100644 --- a/lib/datasource/metadata.ts +++ b/lib/datasource/metadata.ts @@ -175,7 +175,6 @@ function massageTimestamps(dep: ReleaseResult): void { } } -/* eslint-disable no-param-reassign */ export function addMetaData( dep?: ReleaseResult, datasource?: string, diff --git a/lib/datasource/npm/index.spec.ts b/lib/datasource/npm/index.spec.ts index d685608c9c4695..21d15880aaba9b 100644 --- a/lib/datasource/npm/index.spec.ts +++ b/lib/datasource/npm/index.spec.ts @@ -358,7 +358,7 @@ describe('datasource/npm/index', () => { process.env.REGISTRY = 'https://registry.from-env.com'; process.env.RENOVATE_CACHE_NPM_MINUTES = '15'; setGlobalConfig({ exposeAllEnv: true }); - // eslint-disable-next-line no-template-curly-in-string + const npmrc = 'registry=${REGISTRY}'; const res = await getPkgReleases({ datasource, depName: 'foobar', npmrc }); expect(res).toMatchSnapshot(); @@ -367,7 +367,7 @@ describe('datasource/npm/index', () => { it('should throw error if necessary env var is not present', () => { setGlobalConfig({ exposeAllEnv: true }); - // eslint-disable-next-line no-template-curly-in-string + expect(() => setNpmrc('registry=${REGISTRY_MISSING}')).toThrow( Error('env-replace') ); diff --git a/lib/datasource/npm/npmrc.spec.ts b/lib/datasource/npm/npmrc.spec.ts index 6e70054cc249b9..1bd3e86e84c59b 100644 --- a/lib/datasource/npm/npmrc.spec.ts +++ b/lib/datasource/npm/npmrc.spec.ts @@ -21,7 +21,6 @@ describe('datasource/npm/npmrc', () => { }); it('sanitize _authtoken', () => { - // eslint-disable-next-line no-template-curly-in-string setNpmrc('//registry.test.com:_authToken=test\n_authToken=${NPM_TOKEN}'); expect(sanitize.add).toHaveBeenCalledWith('test'); expect(sanitize.add).toHaveBeenCalledTimes(1); @@ -41,7 +40,6 @@ describe('datasource/npm/npmrc', () => { setGlobalConfig({ exposeAllEnv: true }); process.env.TEST_TOKEN = 'test'; setNpmrc( - // eslint-disable-next-line no-template-curly-in-string '//registry.test.com:_authToken=${TEST_TOKEN}\n_authToken=\nregistry=http://localhost' ); expect(sanitize.add).toHaveBeenCalledWith('test'); diff --git a/lib/datasource/ruby-version/index.ts b/lib/datasource/ruby-version/index.ts index c5c845b7b70317..ca7646277cdcb9 100644 --- a/lib/datasource/ruby-version/index.ts +++ b/lib/datasource/ruby-version/index.ts @@ -56,7 +56,6 @@ export class RubyVersionDatasource extends Datasource { return res; } - // eslint-disable-next-line class-methods-use-this override handleSpecificErrors(err: HttpError): never | void { throw new ExternalHostError(err); } diff --git a/lib/datasource/terraform-module/index.ts b/lib/datasource/terraform-module/index.ts index 84f287d57b4b80..0c6d4a44da6496 100644 --- a/lib/datasource/terraform-module/index.ts +++ b/lib/datasource/terraform-module/index.ts @@ -83,7 +83,6 @@ export class TerraformModuleDatasource extends TerraformDatasource { return dep; } - // eslint-disable-next-line class-methods-use-this override handleSpecificErrors(err: HttpError): void { const failureCodes = ['EAI_AGAIN']; // istanbul ignore if diff --git a/lib/logger/config-serializer.ts b/lib/logger/config-serializer.ts index 9f6a33dd180669..240cbd2f73c22d 100644 --- a/lib/logger/config-serializer.ts +++ b/lib/logger/config-serializer.ts @@ -13,19 +13,16 @@ export default function configSerializer( ]; const arrayFields = ['packageFiles', 'upgrades']; - return traverse(config).map( - // eslint-disable-next-line array-callback-return - function scrub(val: string) { - if (val && templateFields.includes(this.key)) { - this.update('[Template]'); - } - if (val && contentFields.includes(this.key)) { - this.update('[content]'); - } - // istanbul ignore if - if (val && arrayFields.includes(this.key)) { - this.update('[Array]'); - } + return traverse(config).map(function scrub(val: string) { + if (val && templateFields.includes(this.key)) { + this.update('[Template]'); } - ); + if (val && contentFields.includes(this.key)) { + this.update('[content]'); + } + // istanbul ignore if + if (val && arrayFields.includes(this.key)) { + this.update('[Array]'); + } + }); } diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index 0f9abe39c50d36..ed605e9193b73b 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -108,7 +108,6 @@ export function sanitizeValue(value: unknown, seen = new WeakMap()): any { } if (value instanceof Error) { - // eslint-disable-next-line no-param-reassign value = prepareError(value); } diff --git a/lib/manager/ansible-galaxy/collections.ts b/lib/manager/ansible-galaxy/collections.ts index adf6f4cd65697c..ed6877f4c45169 100644 --- a/lib/manager/ansible-galaxy/collections.ts +++ b/lib/manager/ansible-galaxy/collections.ts @@ -49,7 +49,6 @@ function handleGitDep( dep: PackageDependency, nameMatch: RegExpExecArray ): void { - /* eslint-disable no-param-reassign */ dep.datasource = GitTagsDatasource.id; if (nameMatch) { @@ -80,7 +79,6 @@ function handleGitDep( } function handleGalaxyDep(dep: PackageDependency): void { - /* eslint-disable no-param-reassign */ dep.datasource = GalaxyCollectionDatasource.id; dep.depName = dep.managerData.name; dep.registryUrls = dep.managerData.source ? [dep.managerData.source] : []; diff --git a/lib/manager/bundler/extract.ts b/lib/manager/bundler/extract.ts index 19b5fe5c5d0508..228be6f5f26c3f 100644 --- a/lib/manager/bundler/extract.ts +++ b/lib/manager/bundler/extract.ts @@ -141,7 +141,6 @@ export async function extractPackageFile( const platformsRes = await extractPackageFile(platformsContent); if (platformsRes) { res.deps = res.deps.concat( - // eslint-disable-next-line no-loop-func platformsRes.deps.map((dep) => ({ ...dep, managerData: { @@ -167,7 +166,6 @@ export async function extractPackageFile( const ifRes = await extractPackageFile(ifContent); if (ifRes) { res.deps = res.deps.concat( - // eslint-disable-next-line no-loop-func ifRes.deps.map((dep) => ({ ...dep, managerData: { diff --git a/lib/manager/circleci/extract.ts b/lib/manager/circleci/extract.ts index 5b76e9cd3e2087..800c1eafdbebbe 100644 --- a/lib/manager/circleci/extract.ts +++ b/lib/manager/circleci/extract.ts @@ -24,7 +24,7 @@ export function extractPackageFile(content: string): PackageFile | null { logger.debug('orbNoop'); foundOrbOrNoop = true; lineNumber += 1; - continue; // eslint-disable-line no-continue + continue; } const orbMatch = regEx(/^\s+([^:]+):\s(.+)$/).exec(orbLine); // TODO #12071 if (orbMatch) { diff --git a/lib/manager/composer/extract.ts b/lib/manager/composer/extract.ts index 754109701c918f..c6f85f9bbe630e 100644 --- a/lib/manager/composer/extract.ts +++ b/lib/manager/composer/extract.ts @@ -41,11 +41,10 @@ function parseRepositories( Object.entries(repoJson).forEach(([key, repo]) => { if (is.object(repo)) { const name = is.array(repoJson) ? repo.name : key; - // eslint-disable-next-line default-case + switch (repo.type) { case 'vcs': case 'git': - // eslint-disable-next-line no-param-reassign repositories[name] = repo; break; case 'composer': @@ -131,7 +130,6 @@ export async function extractPackageFile( // Check custom repositories by type if (repositories[depName]) { - // eslint-disable-next-line default-case switch (repositories[depName].type) { case 'vcs': case 'git': diff --git a/lib/manager/dockerfile/extract.spec.ts b/lib/manager/dockerfile/extract.spec.ts index 4caefc8777945b..6861578bd3842e 100644 --- a/lib/manager/dockerfile/extract.spec.ts +++ b/lib/manager/dockerfile/extract.spec.ts @@ -619,7 +619,6 @@ describe('manager/dockerfile/extract', () => { }); it('handles default environment variable values', () => { - // eslint-disable-next-line no-template-curly-in-string const res = getDep('${REDIS_IMAGE:-redis:5.0.0@sha256:abcd}'); expect(res).toMatchInlineSnapshot(` Object { @@ -632,7 +631,6 @@ Object { } `); - // eslint-disable-next-line no-template-curly-in-string const res2 = getDep('${REDIS_IMAGE:-redis:5.0.0}'); expect(res2).toMatchInlineSnapshot(` Object { @@ -644,7 +642,6 @@ Object { } `); - // eslint-disable-next-line no-template-curly-in-string const res3 = getDep('${REDIS_IMAGE:-redis@sha256:abcd}'); expect(res3).toMatchInlineSnapshot(` Object { @@ -658,7 +655,6 @@ Object { }); it('skips tag containing a variable', () => { - // eslint-disable-next-line no-template-curly-in-string const res = getDep('mcr.microsoft.com/dotnet/sdk:5.0${IMAGESUFFIX}'); expect(res).toMatchInlineSnapshot(` Object { diff --git a/lib/manager/github-actions/extract.ts b/lib/manager/github-actions/extract.ts index d5a7bbd234c638..42e8c4789ee216 100644 --- a/lib/manager/github-actions/extract.ts +++ b/lib/manager/github-actions/extract.ts @@ -19,7 +19,7 @@ export function extractPackageFile(content: string): PackageFile | null { const deps: PackageDependency[] = []; for (const line of content.split('\n')) { if (line.trim().startsWith('#')) { - continue; // eslint-disable-line no-continue + continue; } const dockerMatch = dockerRe.exec(line); @@ -29,7 +29,7 @@ export function extractPackageFile(content: string): PackageFile | null { dep.depType = 'docker'; dep.versioning = dockerVersioning.id; deps.push(dep); - continue; // eslint-disable-line no-continue + continue; } const tagMatch = actionRe.exec(line); diff --git a/lib/manager/gitlabci/extract.ts b/lib/manager/gitlabci/extract.ts index 2d0fee6ce64442..23d98d30ac7799 100644 --- a/lib/manager/gitlabci/extract.ts +++ b/lib/manager/gitlabci/extract.ts @@ -105,7 +105,7 @@ export async function extractAllPackageFiles( const content = await readLocalFile(file, 'utf8'); if (!content) { logger.debug({ file }, 'Empty or non existent gitlabci file'); - // eslint-disable-next-line no-continue + continue; } let doc: GitlabPipeline; diff --git a/lib/manager/gradle-wrapper/utils.ts b/lib/manager/gradle-wrapper/utils.ts index eb3f75966de5d3..5dd3ebce553e53 100644 --- a/lib/manager/gradle-wrapper/utils.ts +++ b/lib/manager/gradle-wrapper/utils.ts @@ -30,7 +30,6 @@ export async function prepareGradleCommand( gradlew: Stats | null, args: string | null ): Promise { - /* eslint-disable no-bitwise */ // istanbul ignore if if (gradlew?.isFile() === true) { // if the file is not executable by others diff --git a/lib/manager/gradle/deep/build-gradle.spec.ts b/lib/manager/gradle/deep/build-gradle.spec.ts index 639a906c5c3609..a0db8c000347a8 100644 --- a/lib/manager/gradle/deep/build-gradle.spec.ts +++ b/lib/manager/gradle/deep/build-gradle.spec.ts @@ -560,7 +560,7 @@ describe('manager/gradle/deep/build-gradle', () => { it('should replace a external groovy variable assigned to a specific dependency', () => { const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${mysqlVersion}" )'; // eslint-disable-line no-template-curly-in-string + 'runtime ( "mysql:mysql-connector-java:${mysqlVersion}" )'; const mysqlDependency = { group: 'mysql', depGroup: 'mysql', @@ -580,7 +580,7 @@ describe('manager/gradle/deep/build-gradle', () => { it('should replace a external groovy map variable assigned to a specific dependency', () => { const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${versions.mysqlVersion}" )'; // eslint-disable-line no-template-curly-in-string + 'runtime ( "mysql:mysql-connector-java:${versions.mysqlVersion}" )'; const mysqlDependency = { group: 'mysql', depGroup: 'mysql', @@ -600,7 +600,7 @@ describe('manager/gradle/deep/build-gradle', () => { it('should replace a external groovy map nested variable assigned to a specific dependency', () => { const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${versions.nested.mysqlVersion}" )'; // eslint-disable-line no-template-curly-in-string + 'runtime ( "mysql:mysql-connector-java:${versions.nested.mysqlVersion}" )'; const mysqlDependency = { group: 'mysql', depGroup: 'mysql', @@ -623,7 +623,7 @@ describe('manager/gradle/deep/build-gradle', () => { it('should replace a external property variable assigned to a specific dependency', () => { const gradleFile = - 'runtime ( "mysql:mysql-connector-java:${mysqlVersion}" )'; // eslint-disable-line no-template-curly-in-string + 'runtime ( "mysql:mysql-connector-java:${mysqlVersion}" )'; const mysqlDependency = { group: 'mysql', depGroup: 'mysql', @@ -643,7 +643,7 @@ describe('manager/gradle/deep/build-gradle', () => { it('should replace a external property variable assigned to a specific dependency parenthesis syntax', () => { const gradleFile = - "implementation platform(group: 'mysql', name: 'mysql-connector-java', version: mysqlVersion)"; // eslint-disable-line no-template-curly-in-string + "implementation platform(group: 'mysql', name: 'mysql-connector-java', version: mysqlVersion)"; const mysqlDependency = { group: 'mysql', depGroup: 'mysql', diff --git a/lib/manager/gradle/deep/build-gradle.ts b/lib/manager/gradle/deep/build-gradle.ts index ef68ad46b18cc9..5f27d4271d6531 100644 --- a/lib/manager/gradle/deep/build-gradle.ts +++ b/lib/manager/gradle/deep/build-gradle.ts @@ -157,7 +157,6 @@ function dependencyStringVariableExpressionFormatMatch( ): RegExp { return regEx( `\\s*dependency\\s+['"]${dependency.group}:${dependency.name}:` + - // eslint-disable-next-line no-template-curly-in-string '${([^}]*)}' + `['"](?:\\s|;|})` ); diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index 4c962d4600d664..dbeaefb3e2d232 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -48,7 +48,6 @@ describe('manager/gradle/shallow/parser', () => { expect(deps).toBeEmpty(); ({ deps } = parseGradle( - // eslint-disable-next-line no-template-curly-in-string ['versions.foobar = "1.2.3"', '"foo:bar:${versions.foobar}"'].join('\n') )); expect(deps).toMatchObject([ diff --git a/lib/manager/gradle/shallow/tokenizer.spec.ts b/lib/manager/gradle/shallow/tokenizer.spec.ts index 98af7fcb29b6a4..7e4d6bac87f266 100644 --- a/lib/manager/gradle/shallow/tokenizer.spec.ts +++ b/lib/manager/gradle/shallow/tokenizer.spec.ts @@ -112,19 +112,19 @@ describe('manager/gradle/shallow/tokenizer', () => { TokenType.Chars, TokenType.DoubleQuotedFinish, ], - // eslint-disable-next-line no-template-curly-in-string + '"${x}"': [ TokenType.DoubleQuotedStart, TokenType.Variable, TokenType.DoubleQuotedFinish, ], - // eslint-disable-next-line no-template-curly-in-string + '"${foo}"': [ TokenType.DoubleQuotedStart, TokenType.Variable, TokenType.DoubleQuotedFinish, ], - // eslint-disable-next-line no-template-curly-in-string + '"${x()}"': [ TokenType.DoubleQuotedStart, TokenType.IgnoredInterpolationStart, @@ -132,7 +132,7 @@ describe('manager/gradle/shallow/tokenizer', () => { TokenType.RightBrace, TokenType.DoubleQuotedFinish, ], - // eslint-disable-next-line no-template-curly-in-string + '"${x{}}"': [ TokenType.DoubleQuotedStart, TokenType.IgnoredInterpolationStart, @@ -162,7 +162,7 @@ describe('manager/gradle/shallow/tokenizer', () => { children: [{ type: TokenType.Variable }], }, ], - // eslint-disable-next-line no-template-curly-in-string + '" foo ${ bar } baz "': [ { type: TokenType.StringInterpolation, @@ -173,7 +173,7 @@ describe('manager/gradle/shallow/tokenizer', () => { ], }, ], - // eslint-disable-next-line no-template-curly-in-string + '"${ x + y }"': [{ type: TokenType.StringInterpolation, isValid: false }], }; for (const [str, result] of Object.entries(samples)) { diff --git a/lib/manager/helmfile/extract.ts b/lib/manager/helmfile/extract.ts index 39544b7456c5ef..c071b9d2e85534 100644 --- a/lib/manager/helmfile/extract.ts +++ b/lib/manager/helmfile/extract.ts @@ -26,7 +26,7 @@ export function extractPackageFile( } for (const doc of docs) { if (!(doc && is.array(doc.releases))) { - continue; // eslint-disable-line no-continue + continue; } if (doc.repositories) { diff --git a/lib/manager/maven/extract.spec.ts b/lib/manager/maven/extract.spec.ts index 84961fc53878a1..e850cd1808c6b2 100644 --- a/lib/manager/maven/extract.spec.ts +++ b/lib/manager/maven/extract.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-template-curly-in-string */ import { loadFixture } from '../../../test/util'; import { extractPackage } from './extract'; diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts index 28e72a80540a4e..82642719a39972 100644 --- a/lib/manager/maven/extract.ts +++ b/lib/manager/maven/extract.ts @@ -273,7 +273,7 @@ export function resolveParents(packages: PackageFile[]): PackageFile[] { const pkg = extractedPackages[name]; pkg.deps.forEach((rawDep) => { const urlsSet = new Set([...rawDep.registryUrls, ...registryUrls[name]]); - rawDep.registryUrls = [...urlsSet]; // eslint-disable-line no-param-reassign + rawDep.registryUrls = [...urlsSet]; }); }); @@ -297,9 +297,9 @@ function cleanResult( packageFiles: PackageFile>[] ): PackageFile>[] { packageFiles.forEach((packageFile) => { - delete packageFile.mavenProps; // eslint-disable-line no-param-reassign + delete packageFile.mavenProps; packageFile.deps.forEach((dep) => { - delete dep.propSource; // eslint-disable-line no-param-reassign + delete dep.propSource; }); }); return packageFiles; diff --git a/lib/manager/maven/index.spec.ts b/lib/manager/maven/index.spec.ts index fffedd425eb149..3202922bac9595 100644 --- a/lib/manager/maven/index.spec.ts +++ b/lib/manager/maven/index.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-template-curly-in-string */ import { fs, loadFixture } from '../../../test/util'; import type { PackageDependency, PackageFile } from '../types'; import { extractPackage, resolveParents } from './extract'; diff --git a/lib/manager/npm/extract/index.spec.ts b/lib/manager/npm/extract/index.spec.ts index 7226b7cc7687bc..c9c74ae51d4cf6 100644 --- a/lib/manager/npm/extract/index.spec.ts +++ b/lib/manager/npm/extract/index.spec.ts @@ -153,7 +153,6 @@ describe('manager/npm/extract/index', () => { it('finds and filters .npmrc with variables', async () => { fs.readLocalFile = jest.fn((fileName) => { if (fileName === '.npmrc') { - // eslint-disable-next-line return 'registry=https://registry.npmjs.org\n//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}\n'; } return null; diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index 1702c419c76809..6ec6352b38f0fb 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -49,7 +49,7 @@ export async function extractPackageFile( logger.debug({ fileName }, 'Invalid JSON'); return null; } - // eslint-disable-next-line no-underscore-dangle + if (packageJson._id && packageJson._args && packageJson._from) { logger.debug('Ignoring vendorised package.json'); return null; diff --git a/lib/manager/npm/extract/monorepo.ts b/lib/manager/npm/extract/monorepo.ts index f8128902e7fb63..a33a21f8bb5272 100644 --- a/lib/manager/npm/extract/monorepo.ts +++ b/lib/manager/npm/extract/monorepo.ts @@ -42,7 +42,7 @@ export async function detectMonorepos( if (!updateInternalDeps) { p.deps?.forEach((dep) => { if (internalPackageNames.includes(dep.depName)) { - dep.skipReason = SkipReason.InternalPackage; // eslint-disable-line no-param-reassign + dep.skipReason = SkipReason.InternalPackage; } }); } @@ -61,7 +61,7 @@ export async function detectMonorepos( if (!updateInternalDeps) { subPackage.deps?.forEach((dep) => { if (internalPackageNames.includes(dep.depName)) { - dep.skipReason = SkipReason.InternalPackage; // eslint-disable-line no-param-reassign + dep.skipReason = SkipReason.InternalPackage; } }); } diff --git a/lib/manager/npm/extract/pnpm.ts b/lib/manager/npm/extract/pnpm.ts index a394c6aafe09b1..64475e6eba31f2 100644 --- a/lib/manager/npm/extract/pnpm.ts +++ b/lib/manager/npm/extract/pnpm.ts @@ -85,13 +85,13 @@ export async function detectPnpmWorkspaces( { packageFile, pnpmShrinkwrap }, 'Found an existing pnpm shrinkwrap file; skipping pnpm monorepo check.' ); - continue; // eslint-disable-line no-continue + continue; } // search for corresponding pnpm workspace const pnpmWorkspace = await findPnpmWorkspace(packageFile); if (pnpmWorkspace === null) { - continue; // eslint-disable-line no-continue + continue; } const { workspaceYamlPath, lockFilePath } = pnpmWorkspace; diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts index 636ca8b5cb355a..4a827520894f5e 100644 --- a/lib/manager/npm/post-update/index.ts +++ b/lib/manager/npm/post-update/index.ts @@ -64,7 +64,7 @@ export function determineLockFileDirs( npmLockDirs.push(upgrade.npmLock); pnpmShrinkwrapDirs.push(upgrade.pnpmShrinkwrap); } - continue; // eslint-disable-line no-continue + continue; } if (upgrade.isLockfileUpdate) { yarnLockDirs.push(upgrade.yarnLock); @@ -244,10 +244,10 @@ export async function writeUpdatedPackageFiles( upath.join(localDir, packageFile.name), packageFile.contents ); - continue; // eslint-disable-line + continue; } if (!packageFile.name.endsWith('package.json')) { - continue; // eslint-disable-line + continue; } logger.debug(`Writing ${String(packageFile.name)}`); const massagedFile = JSON.parse(packageFile.contents.toString()); diff --git a/lib/manager/npm/update/dependency/index.ts b/lib/manager/npm/update/dependency/index.ts index 67d2a211ae17c2..838e461105f12a 100644 --- a/lib/manager/npm/update/dependency/index.ts +++ b/lib/manager/npm/update/dependency/index.ts @@ -14,10 +14,8 @@ function replaceAsString( ): string | null { // Update the file = this is what we want if (depType === 'packageManager') { - // eslint-disable-next-line no-param-reassign parsedContents[depType] = newValue; } else { - // eslint-disable-next-line no-param-reassign parsedContents[depType][depName] = newValue; } // Look for the old version number diff --git a/lib/manager/pip_requirements/extract.spec.ts b/lib/manager/pip_requirements/extract.spec.ts index 8f28c14fcb1c74..551aec84e366ac 100644 --- a/lib/manager/pip_requirements/extract.spec.ts +++ b/lib/manager/pip_requirements/extract.spec.ts @@ -115,10 +115,10 @@ describe('manager/pip_requirements/extract', () => { expect(res.registryUrls).toEqual([ 'https://pypi.org/pypi/', 'http://$PIP_TEST_TOKEN:example.com/private-pypi/', - // eslint-disable-next-line no-template-curly-in-string + 'http://${PIP_TEST_TOKEN}:example.com/private-pypi/', 'http://$PIP_TEST_TOKEN:example.com/private-pypi/', - // eslint-disable-next-line no-template-curly-in-string + 'http://${PIP_TEST_TOKEN}:example.com/private-pypi/', ]); }); diff --git a/lib/manager/swift/extract.ts b/lib/manager/swift/extract.ts index cff2eceb9cf2b9..14476c5f559d71 100644 --- a/lib/manager/swift/extract.ts +++ b/lib/manager/swift/extract.ts @@ -166,7 +166,7 @@ export function extractPackageFile( while (match) { const { idx, len, label, substr } = match; - // eslint-disable-next-line default-case + switch (state) { case null: if (deps.length) { diff --git a/lib/manager/terraform/extract.ts b/lib/manager/terraform/extract.ts index cdca8db112ef24..3034ab895884b1 100644 --- a/lib/manager/terraform/extract.ts +++ b/lib/manager/terraform/extract.ts @@ -145,7 +145,7 @@ export async function extractPackageFile( /* istanbul ignore next */ default: } - // eslint-disable-next-line no-param-reassign + delete dep.managerData; }); if (deps.some((dep) => dep.skipReason !== 'local')) { diff --git a/lib/manager/terraform/modules.ts b/lib/manager/terraform/modules.ts index ae24e68fda38ae..c734b38122610f 100644 --- a/lib/manager/terraform/modules.ts +++ b/lib/manager/terraform/modules.ts @@ -24,7 +24,6 @@ export function extractTerraformModule( ): ExtractionResult { const result = extractTerraformProvider(startingLine, lines, moduleName); result.dependencies.forEach((dep) => { - // eslint-disable-next-line no-param-reassign dep.managerData.terraformDependencyType = TerraformDependencyTypes.module; }); return result; @@ -33,7 +32,7 @@ export function extractTerraformModule( export function analyseTerraformModule(dep: PackageDependency): void { const githubRefMatch = githubRefMatchRegex.exec(dep.managerData.source); const gitTagsRefMatch = gitTagsRefMatchRegex.exec(dep.managerData.source); - /* eslint-disable no-param-reassign */ + if (githubRefMatch) { dep.lookupName = githubRefMatch.groups.project.replace(regEx(/\.git$/), ''); dep.depType = 'module'; diff --git a/lib/manager/terraform/providers.ts b/lib/manager/terraform/providers.ts index b0d0a37b7d5191..42bdd842367fe7 100644 --- a/lib/manager/terraform/providers.ts +++ b/lib/manager/terraform/providers.ts @@ -75,7 +75,6 @@ export function analyzeTerraformProvider( dep: PackageDependency, locks: ProviderLock[] ): void { - /* eslint-disable no-param-reassign */ dep.depType = 'provider'; dep.depName = dep.managerData.moduleName; dep.datasource = TerraformProviderDatasource.id; diff --git a/lib/manager/terraform/required-providers.ts b/lib/manager/terraform/required-providers.ts index 6ac73de5120b8c..555d2650e9cc9d 100644 --- a/lib/manager/terraform/required-providers.ts +++ b/lib/manager/terraform/required-providers.ts @@ -20,7 +20,6 @@ function extractBlock( line = lines[lineNumber]; const kvMatch = keyValueExtractionRegex.exec(line); if (kvMatch) { - /* eslint-disable no-param-reassign */ switch (kvMatch.groups.key) { case 'source': dep.managerData.source = kvMatch.groups.value; @@ -78,7 +77,6 @@ export function analyzeTerraformRequiredProvider( dep: PackageDependency, locks: ProviderLock[] ): void { - /* eslint-disable no-param-reassign */ analyzeTerraformProvider(dep, locks); dep.depType = `required_provider`; /* eslint-enable no-param-reassign */ diff --git a/lib/manager/terraform/required-version.ts b/lib/manager/terraform/required-version.ts index dc16f52211336c..23d3bc88f4a940 100644 --- a/lib/manager/terraform/required-version.ts +++ b/lib/manager/terraform/required-version.ts @@ -45,7 +45,6 @@ export function extractTerraformRequiredVersion( } export function analyseTerraformVersion(dep: PackageDependency): void { - /* eslint-disable no-param-reassign */ dep.depType = 'required_version'; dep.datasource = datasourceGithubTags.id; dep.depName = 'hashicorp/terraform'; diff --git a/lib/manager/terraform/resources.ts b/lib/manager/terraform/resources.ts index 075a1b63b34589..396fb4459db5d4 100644 --- a/lib/manager/terraform/resources.ts +++ b/lib/manager/terraform/resources.ts @@ -65,8 +65,6 @@ export function extractTerraformResource( export function analyseTerraformResource( dep: PackageDependency ): void { - /* eslint-disable no-param-reassign */ - switch (dep.managerData.resourceType) { case TerraformResourceTypes.docker_container: if (dep.managerData.image) { diff --git a/lib/manager/terraform/util.ts b/lib/manager/terraform/util.ts index 9793c547c15b22..e804c5d7cb7f57 100644 --- a/lib/manager/terraform/util.ts +++ b/lib/manager/terraform/util.ts @@ -50,7 +50,6 @@ export function checkIfStringIsPath(path: string): boolean { } export function massageProviderLookupName(dep: PackageDependency): void { - /* eslint-disable no-param-reassign */ if (!dep.lookupName) { dep.lookupName = dep.depName; } diff --git a/lib/manager/terragrunt/extract.ts b/lib/manager/terragrunt/extract.ts index 978359b6a83783..aefc1140683eac 100644 --- a/lib/manager/terragrunt/extract.ts +++ b/lib/manager/terragrunt/extract.ts @@ -61,7 +61,7 @@ export function extractPackageFile(content: string): PackageFile | null { /* istanbul ignore next */ default: } - // eslint-disable-next-line no-param-reassign + delete dep.managerData; }); return { deps }; diff --git a/lib/manager/terragrunt/modules.ts b/lib/manager/terragrunt/modules.ts index f10ba1486ed60b..3657acdb7ad53d 100644 --- a/lib/manager/terragrunt/modules.ts +++ b/lib/manager/terragrunt/modules.ts @@ -24,7 +24,6 @@ export function extractTerragruntModule( const moduleName = 'terragrunt'; const result = extractTerragruntProvider(startingLine, lines, moduleName); result.dependencies.forEach((dep) => { - // eslint-disable-next-line no-param-reassign dep.managerData.terragruntDependencyType = TerragruntDependencyTypes.terragrunt; }); @@ -34,7 +33,7 @@ export function extractTerragruntModule( export function analyseTerragruntModule(dep: PackageDependency): void { const githubRefMatch = githubRefMatchRegex.exec(dep.managerData.source); const gitTagsRefMatch = gitTagsRefMatchRegex.exec(dep.managerData.source); - /* eslint-disable no-param-reassign */ + if (githubRefMatch) { dep.depType = 'github'; dep.lookupName = githubRefMatch.groups.project.replace(regEx(/\.git$/), ''); diff --git a/lib/platform/azure/azure-helper.spec.ts b/lib/platform/azure/azure-helper.spec.ts index 1476ccfa8fc762..18d3d23e232dac 100644 --- a/lib/platform/azure/azure-helper.spec.ts +++ b/lib/platform/azure/azure-helper.spec.ts @@ -78,8 +78,7 @@ describe('platform/azure/azure-helper', () => { let eventCount = 0; const mockEventStream = new Readable({ objectMode: true, - /* eslint-disable func-names */ - /* eslint-disable object-shorthand */ + read: function () { if (eventCount < 1) { eventCount += 1; @@ -108,8 +107,7 @@ describe('platform/azure/azure-helper', () => { let eventCount = 0; const mockEventStream = new Readable({ objectMode: true, - /* eslint-disable func-names */ - /* eslint-disable object-shorthand */ + read: function () { if (eventCount < 1) { eventCount += 1; @@ -138,8 +136,7 @@ describe('platform/azure/azure-helper', () => { let eventCount = 0; const mockEventStream = new Readable({ objectMode: true, - /* eslint-disable func-names */ - /* eslint-disable object-shorthand */ + read: function () { if (eventCount < 1) { eventCount += 1; diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts index a2a2cf2f42aeab..7dedd447a17e5b 100644 --- a/lib/platform/azure/index.spec.ts +++ b/lib/platform/azure/index.spec.ts @@ -47,7 +47,7 @@ describe('platform/azure/index', () => { }); // do we need the args? - // eslint-disable-next-line @typescript-eslint/no-unused-vars + function getRepos(_token: string, _endpoint: string) { azureApi.gitApi.mockImplementationOnce( () => diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts index 079286f474d368..83124b4be09d4d 100644 --- a/lib/platform/azure/index.ts +++ b/lib/platform/azure/index.ts @@ -719,7 +719,6 @@ async function getUserIds(users: string[]): Promise { const members = await Promise.all( teams.map( async (t) => - /* eslint-disable no-return-await,@typescript-eslint/return-await */ await azureApiCore.getTeamMembersWithExtendedProperties( repo.project.id, t.id diff --git a/lib/platform/azure/util.ts b/lib/platform/azure/util.ts index 20820ccdd9d7bd..7f0c2498e975a6 100644 --- a/lib/platform/azure/util.ts +++ b/lib/platform/azure/util.ts @@ -123,7 +123,7 @@ export async function streamToString( stream: NodeJS.ReadableStream ): Promise { const chunks: Uint8Array[] = []; - /* eslint-disable promise/avoid-new */ + const p = await new Promise((resolve, reject) => { stream.on('data', (chunk) => chunks.push(Buffer.from(chunk))); stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8'))); diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts index f203d77e29c7f0..992b5a053084d7 100644 --- a/lib/platform/bitbucket/index.ts +++ b/lib/platform/bitbucket/index.ts @@ -582,7 +582,6 @@ export async function ensureIssueClosing(title: string): Promise { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars export function addAssignees( _prNr: number, _assignees: string[] diff --git a/lib/platform/index.ts b/lib/platform/index.ts index 8b6a7241dc44d1..8764d76ae37d0f 100644 --- a/lib/platform/index.ts +++ b/lib/platform/index.ts @@ -13,7 +13,6 @@ export * from './types'; export const getPlatformList = (): string[] => Array.from(platforms.keys()); export const getPlatforms = (): Map => platforms; -// eslint-disable-next-line @typescript-eslint/naming-convention let _platform: Platform; const handler: ProxyHandler = { diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts index 6480b8b54cd9ab..86a61a213ab687 100644 --- a/lib/util/exec/index.spec.ts +++ b/lib/util/exec/index.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/naming-convention */ import { ExecOptions as ChildProcessExecOptions, exec as _cpExec, diff --git a/lib/util/http/auth.ts b/lib/util/http/auth.ts index 59dba806f71564..cd182af48d111f 100644 --- a/lib/util/http/auth.ts +++ b/lib/util/http/auth.ts @@ -86,14 +86,13 @@ export function removeAuthorization(options: NormalizedOptions): void { const portInUrl = options.href.split('/')[2].split(':')[1]; // istanbul ignore next if (!portInUrl) { - // eslint-disable-next-line no-param-reassign delete options.port; // Redirect will instead use 80 or 443 for HTTP or HTTPS respectively } // registry is hosted on Amazon or Azure blob, redirect url includes // authentication which is not required and should be removed - delete options.headers.authorization; // eslint-disable-line no-param-reassign - delete options.username; // eslint-disable-line no-param-reassign - delete options.password; // eslint-disable-line no-param-reassign + delete options.headers.authorization; + delete options.username; + delete options.password; } } diff --git a/lib/util/http/index.ts b/lib/util/http/index.ts index 0dc25d94f38134..6baddc7fd377e5 100644 --- a/lib/util/http/index.ts +++ b/lib/util/http/index.ts @@ -72,11 +72,11 @@ function applyDefaultHeaders(options: Options): void { let renovateVersion = 'unknown'; try { // eslint-disable-next-line @typescript-eslint/no-var-requires - renovateVersion = require('../../../package.json').version; // eslint-disable-line global-require + renovateVersion = require('../../../package.json').version; } catch (err) /* istanbul ignore next */ { logger.debug({ err }, 'Error getting renovate version'); } - // eslint-disable-next-line no-param-reassign + options.headers = { ...options.headers, 'user-agent': @@ -295,7 +295,6 @@ export class Http { // istanbul ignore else: needs test if (options?.baseUrl) { - // eslint-disable-next-line no-param-reassign url = resolveBaseUrl(options.baseUrl, url); } diff --git a/lib/util/index.ts b/lib/util/index.ts index 0d7c8fbf0f079a..4dd875664b5f35 100644 --- a/lib/util/index.ts +++ b/lib/util/index.ts @@ -3,7 +3,7 @@ export function sampleSize(array: string[], n: number): string[] { if (!length || n < 1) { return []; } - // eslint-disable-next-line no-param-reassign + n = n > length ? length : n; let index = 0; const lastIndex = length - 1; diff --git a/lib/util/regex.spec.ts b/lib/util/regex.spec.ts index b0dad6a8b310e9..49951096c33cd9 100644 --- a/lib/util/regex.spec.ts +++ b/lib/util/regex.spec.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line import/no-extraneous-dependencies import RE2 from 're2'; import { CONFIG_VALIDATION } from '../constants/error-messages'; import { regEx } from './regex'; diff --git a/lib/util/regex.ts b/lib/util/regex.ts index 19b203ea512046..ac956bf18ce45b 100644 --- a/lib/util/regex.ts +++ b/lib/util/regex.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { CONFIG_VALIDATION } from '../constants/error-messages'; -// eslint-disable-next-line import/no-cycle + import { logger } from '../logger'; let RegEx: RegExpConstructor; diff --git a/lib/versioning/index.spec.ts b/lib/versioning/index.spec.ts index 87f63c9526bb52..da1137ccac1e0a 100644 --- a/lib/versioning/index.spec.ts +++ b/lib/versioning/index.spec.ts @@ -20,7 +20,6 @@ describe('versioning/index', () => { module: VersioningApi | VersioningApiConstructor, name: string ): boolean { - // eslint-disable-next-line new-cap const mod = isVersioningApiConstructor(module) ? new module() : module; // TODO: test required api (#9715) @@ -81,7 +80,6 @@ describe('versioning/index', () => { props.push(prop); } }); - // eslint-disable-next-line no-cond-assign } while ((o = Object.getPrototypeOf(o))); return props; @@ -112,12 +110,10 @@ describe('versioning/index', () => { it('dummy', () => { class DummyScheme extends GenericVersioningApi { - // eslint-disable-next-line class-methods-use-this protected override _compare(_version: string, _other: string): number { throw new Error('Method not implemented.'); } - // eslint-disable-next-line class-methods-use-this protected _parse(_version: string): GenericVersion { throw new Error('Method not implemented.'); } diff --git a/lib/versioning/index.ts b/lib/versioning/index.ts index a192f8353833cb..0bdc0e7d6c15a2 100644 --- a/lib/versioning/index.ts +++ b/lib/versioning/index.ts @@ -35,7 +35,6 @@ export function get(versioning: string): VersioningApi { return versionings.get('semver') as VersioningApi; } if (isVersioningApiConstructor(theVersioning)) { - // eslint-disable-next-line new-cap return new theVersioning(versioningConfig); } return theVersioning; diff --git a/lib/versioning/loose/generic.ts b/lib/versioning/loose/generic.ts index 55646f2b704d52..609adec8c14409 100644 --- a/lib/versioning/loose/generic.ts +++ b/lib/versioning/loose/generic.ts @@ -175,7 +175,7 @@ export abstract class GenericVersioningApi< /* * virtual */ - // eslint-disable-next-line class-methods-use-this + protected _compareOther(_left: T, _right: T): number { return 0; } @@ -235,7 +235,6 @@ export abstract class GenericVersioningApi< return versions.find((v) => this.equals(v, range)) || null; } - // eslint-disable-next-line class-methods-use-this getNewValue(newValueConfig: NewValueConfig): string { const { newVersion } = newValueConfig || {}; return newVersion; diff --git a/lib/versioning/loose/utils.spec.ts b/lib/versioning/loose/utils.spec.ts index 0a2e2652ab98b3..4b503762d0c998 100644 --- a/lib/versioning/loose/utils.spec.ts +++ b/lib/versioning/loose/utils.spec.ts @@ -23,7 +23,6 @@ describe('versioning/loose/utils', () => { props.push(prop); } }); - // eslint-disable-next-line no-cond-assign } while ((o = Object.getPrototypeOf(o))); return props; @@ -31,12 +30,10 @@ describe('versioning/loose/utils', () => { describe('GenericVersioningApi', () => { class DummyScheme extends GenericVersioningApi { - // eslint-disable-next-line class-methods-use-this protected override _compare(_version: string, _other: string): number { return _version ? _version.localeCompare(_other) : 0; } - // eslint-disable-next-line class-methods-use-this protected _parse(_version: string): GenericVersion { return _version === 'test' ? null : { release: [1, 0, 0] }; } diff --git a/lib/versioning/regex/index.ts b/lib/versioning/regex/index.ts index f597df18a8da16..7c3efde7053334 100644 --- a/lib/versioning/regex/index.ts +++ b/lib/versioning/regex/index.ts @@ -44,7 +44,6 @@ export class RegExpVersioningApi extends GenericVersioningApi { constructor(new_config: string) { super(); if (!new_config) { - // eslint-disable-next-line no-param-reassign new_config = '^(?\\d+)?$'; } diff --git a/lib/workers/branch/get-updated.ts b/lib/workers/branch/get-updated.ts index 49263f05d830fa..287c705488a3c9 100644 --- a/lib/workers/branch/get-updated.ts +++ b/lib/workers/branch/get-updated.ts @@ -120,7 +120,7 @@ export async function getUpdatedPackageFiles( logger.debug({ packageFile, depName }, 'Contents updated'); updatedFileContents[packageFile] = res; } - continue; // eslint-disable-line no-continue + continue; } else if (reuseExistingBranch) { return getUpdatedPackageFiles({ ...config, diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts index 00d27a9ac4fc83..e6fec35819a432 100644 --- a/lib/workers/branch/index.ts +++ b/lib/workers/branch/index.ts @@ -289,7 +289,7 @@ export async function processBranch( 'Update has not passed stability days' ); config.stabilityStatus = BranchStatus.yellow; - continue; // eslint-disable-line no-continue + continue; } } const { @@ -316,7 +316,7 @@ export async function processBranch( 'Update does not meet minimum confidence scores' ); config.confidenceStatus = BranchStatus.yellow; - continue; // eslint-disable-line no-continue + continue; } } } diff --git a/lib/workers/global/config/parse/cli.ts b/lib/workers/global/config/parse/cli.ts index a318e9944151c1..31a3912827d469 100644 --- a/lib/workers/global/config/parse/cli.ts +++ b/lib/workers/global/config/parse/cli.ts @@ -87,7 +87,6 @@ export function getConfig(input: string[]): AllConfig { /* istanbul ignore next */ function helpConsole(): void { - /* eslint-disable no-console */ console.log(' Examples:'); console.log(''); console.log(' $ renovate --token 123test singapore/lint-condo'); diff --git a/lib/workers/global/config/parse/env.ts b/lib/workers/global/config/parse/env.ts index f7268d74cb3cdc..ca969854314faf 100644 --- a/lib/workers/global/config/parse/env.ts +++ b/lib/workers/global/config/parse/env.ts @@ -129,7 +129,7 @@ export function getConfig(inputEnv: NodeJS.ProcessEnv): AllConfig { 'VSTS_ENDPOINT', 'VSTS_TOKEN', ]; - // eslint-disable-next-line no-param-reassign + unsupportedEnv.forEach((val) => delete env[val]); return config; diff --git a/lib/workers/global/config/parse/file.ts b/lib/workers/global/config/parse/file.ts index 0acf7b0aaebb50..5cab40ee0e5b6d 100644 --- a/lib/workers/global/config/parse/file.ts +++ b/lib/workers/global/config/parse/file.ts @@ -11,7 +11,6 @@ export function getConfig(env: NodeJS.ProcessEnv): AllConfig { } let config: AllConfig = {}; try { - // eslint-disable-next-line global-require,import/no-dynamic-require config = require(configFile); } catch (err) { // istanbul ignore if diff --git a/lib/workers/global/config/parse/host-rules-from-env.ts b/lib/workers/global/config/parse/host-rules-from-env.ts index 5f6a8189f61395..a25475c4b435b2 100644 --- a/lib/workers/global/config/parse/host-rules-from-env.ts +++ b/lib/workers/global/config/parse/host-rules-from-env.ts @@ -13,7 +13,7 @@ export function hostRulesFromEnv(env: NodeJS.ProcessEnv): HostRule[] { for (const envName of Object.keys(env).sort()) { if (npmEnvPrefixes.some((prefix) => envName.startsWith(prefix))) { logger.trace('Ignoring npm env: ' + envName); - continue; // eslint-disable-line no-continue + continue; } // Double underscore __ is used in place of hyphen - const splitEnv = envName.toLowerCase().replace(/__/g, '-').split('_'); @@ -28,7 +28,7 @@ export function hostRulesFromEnv(env: NodeJS.ProcessEnv): HostRule[] { // host-less rule } else if (splitEnv.length === 1) { logger.warn(`Cannot parse ${envName} env`); - continue; // eslint-disable-line no-continue + continue; } else { matchHost = splitEnv.join('.'); } diff --git a/lib/workers/pr/body/index.ts b/lib/workers/pr/body/index.ts index 6aa5a015af8b64..02944d193cdb4b 100644 --- a/lib/workers/pr/body/index.ts +++ b/lib/workers/pr/body/index.ts @@ -12,7 +12,6 @@ import { getPrUpdatesTable } from './updates-table'; function massageUpdateMetadata(config: BranchConfig): void { config.upgrades.forEach((upgrade) => { - /* eslint-disable no-param-reassign */ const { homepage, sourceUrl, diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts index 3825a54145a2d1..d7f17709a6ad6b 100644 --- a/lib/workers/pr/index.ts +++ b/lib/workers/pr/index.ts @@ -262,7 +262,7 @@ export async function ensurePr( upgrade.manager }-${upgrade.currentVersion || upgrade.currentValue}-${upgrade.newVersion}`; if (processedUpgrades.includes(upgradeKey)) { - continue; // eslint-disable-line no-continue + continue; } processedUpgrades.push(upgradeKey); diff --git a/lib/workers/repository/changelog/index.ts b/lib/workers/repository/changelog/index.ts index b0c0697b1a9ec0..feff7e56e5d9b8 100644 --- a/lib/workers/repository/changelog/index.ts +++ b/lib/workers/repository/changelog/index.ts @@ -4,7 +4,7 @@ import type { BranchUpgradeConfig } from '../../types'; // istanbul ignore next async function embedChangelog(upgrade: BranchUpgradeConfig): Promise { - upgrade.logJSON = await getChangeLogJSON(upgrade); // eslint-disable-line + upgrade.logJSON = await getChangeLogJSON(upgrade); } // istanbul ignore next diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts index ac1c353cbe2202..2b12e6518416df 100644 --- a/lib/workers/repository/dependency-dashboard.spec.ts +++ b/lib/workers/repository/dependency-dashboard.spec.ts @@ -26,7 +26,7 @@ beforeEach(() => { async function dryRun( branches: BranchConfig[], - // eslint-disable-next-line @typescript-eslint/no-shadow + platform: jest.Mocked, ensureIssueClosingCalls = 0, ensureIssueCalls = 0 diff --git a/lib/workers/repository/dependency-dashboard.ts b/lib/workers/repository/dependency-dashboard.ts index 6dc1dded4dcd2f..b85596b78d5df6 100644 --- a/lib/workers/repository/dependency-dashboard.ts +++ b/lib/workers/repository/dependency-dashboard.ts @@ -35,7 +35,6 @@ function parseDashboardIssue(issueBody: string): DependencyDashboard { } export async function readDashboardBody(config: RenovateConfig): Promise { - /* eslint-disable no-param-reassign */ config.dependencyDashboardChecks = {}; const stringifiedConfig = JSON.stringify(config); if ( diff --git a/lib/workers/repository/error.ts b/lib/workers/repository/error.ts index 65aa292b753023..381cb6ed10ca2b 100644 --- a/lib/workers/repository/error.ts +++ b/lib/workers/repository/error.ts @@ -41,12 +41,12 @@ export default async function handleError( ): Promise { if (err.message === REPOSITORY_UNINITIATED) { logger.info('Repository is uninitiated - skipping'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === REPOSITORY_EMPTY) { logger.info('Repository is empty - skipping'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } const disabledMessages = [ @@ -61,31 +61,31 @@ export default async function handleError( } if (err.message === REPOSITORY_ARCHIVED) { logger.info('Repository is archived - skipping'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === REPOSITORY_MIRRORED) { logger.info('Repository is a mirror - skipping'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === REPOSITORY_RENAMED) { logger.info('Repository has been renamed - skipping'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === REPOSITORY_BLOCKED) { - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; logger.info('Repository is blocked - skipping'); return err.message; } if (err.message === REPOSITORY_ACCESS_FORBIDDEN) { - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; logger.info('Repository is forbidden'); return err.message; } if (err.message === REPOSITORY_NOT_FOUND) { - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; logger.error('Repository is not found'); return err.message; } @@ -107,17 +107,17 @@ export default async function handleError( } if (err.message === REPOSITORY_CHANGED) { logger.info('Repository has changed during renovation - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === CONFIG_VALIDATION) { - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; logger.info({ error: err }, 'Repository has invalid config'); await raiseConfigWarningIssue(config, err); return err.message; } if (err.message === CONFIG_SECRETS_EXPOSED) { - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; logger.warn( { error: err }, 'Repository aborted due to potential secrets exposure' @@ -130,7 +130,7 @@ export default async function handleError( 'Host error' ); logger.info('External host error causing abort - skipping'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if ( @@ -138,48 +138,48 @@ export default async function handleError( err.message === SYSTEM_INSUFFICIENT_DISK_SPACE ) { logger.error('Disk space error - skipping'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) { logger.warn('Rate limit exceeded - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === SYSTEM_INSUFFICIENT_MEMORY) { logger.warn('Insufficient memory - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === PLATFORM_BAD_CREDENTIALS) { logger.warn('Bad credentials - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === PLATFORM_INTEGRATION_UNAUTHORIZED) { logger.warn('Integration unauthorized - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === PLATFORM_AUTHENTICATION_ERROR) { logger.warn('Authentication error - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === TEMPORARY_ERROR) { logger.info('Temporary error - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message === MANAGER_LOCKFILE_ERROR) { - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; logger.info('Lock file error - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return err.message; } if (err.message.includes('The requested URL returned error: 5')) { logger.warn({ err }, 'Git error - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; // rewrite this error return EXTERNAL_HOST_ERROR; } @@ -188,18 +188,18 @@ export default async function handleError( err.message.includes('access denied or repository not exported') ) { logger.warn({ err }, 'Git error - aborting'); - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; // rewrite this error return EXTERNAL_HOST_ERROR; } if (err.message.includes('fatal: not a git repository')) { - delete config.branchList; // eslint-disable-line no-param-reassign + delete config.branchList; return TEMPORARY_ERROR; } // Swallow this error so that other repositories can be processed logger.error({ err }, `Repository has unknown error`); // delete branchList to avoid cleaning up branches - delete config.branchList; // eslint-disable-line no-param-reassign - // eslint-disable-next-line no-undef + delete config.branchList; + return UNKNOWN_ERROR; } diff --git a/lib/workers/repository/index.ts b/lib/workers/repository/index.ts index 5005a9ee5e36bf..c658082f0f2d3d 100644 --- a/lib/workers/repository/index.ts +++ b/lib/workers/repository/index.ts @@ -19,7 +19,7 @@ import { printRequestStats } from './stats'; let renovateVersion = 'unknown'; try { // eslint-disable-next-line @typescript-eslint/no-var-requires - renovateVersion = require('../../../package.json').version; // eslint-disable-line global-require + renovateVersion = require('../../../package.json').version; } catch (err) /* istanbul ignore next */ { logger.debug({ err }, 'Error getting renovate version'); } diff --git a/lib/workers/repository/init/vulnerability.ts b/lib/workers/repository/init/vulnerability.ts index 85cbb3744d72ae..5503daaeead4fb 100644 --- a/lib/workers/repository/init/vulnerability.ts +++ b/lib/workers/repository/init/vulnerability.ts @@ -73,18 +73,18 @@ export async function detectVulnerabilityAlerts( (alert.vulnerableRequirements === '= 5.0.0-security.0' || alert.vulnerableRequirements === '= 5.0.1') ) { - continue; // eslint-disable-line no-continue + continue; } try { if (alert.dismissReason) { - continue; // eslint-disable-line no-continue + continue; } if (!alert.securityVulnerability.firstPatchedVersion) { logger.debug( { alert }, 'Vulnerability alert has no firstPatchedVersion - skipping' ); - continue; // eslint-disable-line no-continue + continue; } const datasourceMapping: Record = { MAVEN: datasourceMaven.id, @@ -174,7 +174,7 @@ export async function detectVulnerabilityAlerts( } content += heading; content += '\n\n'; - // eslint-disable-next-line no-loop-func + content += sanitizeMarkdown(advisory.description); return content; }) diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index e4d85cb67c071d..6cd7cd90943e06 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -59,7 +59,7 @@ async function fetchManagerPackagerFileUpdates( { manager, packageFile, queueLength: queue.length }, 'fetchManagerPackagerFileUpdates starting with concurrency' ); - // eslint-disable-next-line no-param-reassign + pFile.deps = await pAll(queue, { concurrency: 5 }); logger.trace({ packageFile }, 'fetchManagerPackagerFileUpdates finished'); } diff --git a/lib/workers/repository/process/lookup/filter-checks.ts b/lib/workers/repository/process/lookup/filter-checks.ts index 1208a7d716e0e9..73c0535fb5c189 100644 --- a/lib/workers/repository/process/lookup/filter-checks.ts +++ b/lib/workers/repository/process/lookup/filter-checks.ts @@ -66,7 +66,7 @@ export async function filterInternalChecks( `Release ${candidateRelease.version} is pending status checks` ); pendingReleases.unshift(candidateRelease); - continue; // eslint-disable-line no-continue + continue; } } if (isActiveConfidenceLevel(minimumConfidence)) { @@ -83,7 +83,7 @@ export async function filterInternalChecks( `Release ${candidateRelease.version} is pending status checks` ); pendingReleases.unshift(candidateRelease); - continue; // eslint-disable-line no-continue + continue; } } // If we get to here, then the release is OK and we can stop iterating diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index ad0d46dd9c9619..a921b1536c2789 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -258,7 +258,7 @@ export async function lookupUpdates( } if (!update.newValue || update.newValue === currentValue) { if (!lockedVersion) { - continue; // eslint-disable-line no-continue + continue; } // istanbul ignore if if (rangeStrategy === 'bump') { @@ -266,7 +266,7 @@ export async function lookupUpdates( { depName, currentValue, lockedVersion, newVersion }, 'Skipping bump because newValue is the same' ); - continue; // eslint-disable-line no-continue + continue; } res.isSingleVersion = true; } diff --git a/lib/workers/repository/updates/branch-name.ts b/lib/workers/repository/updates/branch-name.ts index 32211dca8760a6..15433fb94b2004 100644 --- a/lib/workers/repository/updates/branch-name.ts +++ b/lib/workers/repository/updates/branch-name.ts @@ -27,7 +27,6 @@ function cleanBranchName(branchName: string): string { .replace(RE_MULTIPLE_DASH, '-'); // chained dashes } -/* eslint-disable no-param-reassign */ export function generateBranchName(update: RenovateConfig): void { // Check whether to use a group name if (update.groupName) { diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts index 4ff74aff119382..ee8ea55354f9d7 100644 --- a/lib/workers/repository/updates/generate.ts +++ b/lib/workers/repository/updates/generate.ts @@ -92,7 +92,6 @@ export function generateBranchConfig( toVersions.length > 1 || (!toVersions[0] && newValue.length > 1); if (newValue.length > 1 && !groupEligible) { - // eslint-disable-next-line no-param-reassign branchUpgrades[0].commitMessageExtra = `to v${toVersions[0]}`; } const typesGroup = @@ -235,10 +234,10 @@ export function generateBranchConfig( const existingStamp = DateTime.fromISO(releaseTimestamp); const upgradeStamp = DateTime.fromISO(upgrade.releaseTimestamp); if (upgradeStamp > existingStamp) { - releaseTimestamp = upgrade.releaseTimestamp; // eslint-disable-line + releaseTimestamp = upgrade.releaseTimestamp; } } else { - releaseTimestamp = upgrade.releaseTimestamp; // eslint-disable-line + releaseTimestamp = upgrade.releaseTimestamp; } } } diff --git a/package.json b/package.json index 960b6ec5940201..cda3f5f196b7d8 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "create-json-schema": "node -r ts-node/register/transpile-only -- bin/create-json-schema.js && prettier --write \"renovate-schema.json\"", "debug": "node --inspect-brk -r ts-node/register/transpile-only -- lib/renovate.ts", "doc-fix": "run-s markdown-lint-fix prettier-fix", - "eslint": "eslint --ext .js,.mjs,.ts lib/ test/ tools/", - "eslint-fix": "eslint --ext .js,.mjs,.ts --fix lib/ test/ tools/", + "eslint": "eslint --ext .js,.mjs,.ts lib/ test/ tools/ --report-unused-disable-directives", + "eslint-fix": "eslint --ext .js,.mjs,.ts --fix lib/ test/ tools/ --report-unused-disable-directives", "generate": "run-s generate:*", "generate:imports": "node tools/generate-imports.mjs", "git-check": "node tools/check-git-version.mjs", diff --git a/test/exec-util.ts b/test/exec-util.ts index 7e4d4e14972a4f..0a0b5d8bdb6564 100644 --- a/test/exec-util.ts +++ b/test/exec-util.ts @@ -27,7 +27,6 @@ export function execSnapshot(cmd: string, options?: CallOptions): ExecSnapshot { const cwd = toUnix(process.cwd()); - // eslint-disable-next-line array-callback-return return traverse(snapshot).map(function fixup(v) { if (is.string(v)) { const val = v diff --git a/tools/check-re2.mjs b/tools/check-re2.mjs index 04a90c4c3a2a95..0d55da98a28bd4 100644 --- a/tools/check-re2.mjs +++ b/tools/check-re2.mjs @@ -4,7 +4,7 @@ import shell from 'shelljs'; (async () => { shell.echo('-n', 'Checking re2 ... '); try { - const { default: RE2 } = await import('re2'); // eslint-disable-line import/no-extraneous-dependencies + const { default: RE2 } = await import('re2'); new RE2('.*').exec('test'); shell.echo(`ok.`); } catch (e) { From acbf829234d28f290472b51b5c6b7a2cde6b1ea4 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 9 Nov 2021 00:03:56 +0300 Subject: [PATCH 019/248] refactor: Snapshots for some random manager tests (#12560) --- .../extract/__snapshots__/pnpm.spec.ts.snap | 36 ---- lib/manager/npm/extract/pnpm.spec.ts | 38 ++-- .../nuget/__fixtures__/dotnet-tools.json | 10 + .../__snapshots__/artifacts.spec.ts.snap | 11 -- .../nuget/__snapshots__/extract.spec.ts.snap | 163 ---------------- lib/manager/nuget/artifacts.spec.ts | 10 +- lib/manager/nuget/extract.spec.ts | 180 +++++++++++++----- .../__snapshots__/artifacts.spec.ts.snap | 11 -- lib/manager/pip-compile/artifacts.spec.ts | 7 +- .../__snapshots__/extract.spec.ts.snap | 4 +- lib/manager/pip_setup/extract.spec.ts | 3 +- lib/manager/pip_setup/index.spec.ts | 25 ++- .../__snapshots__/artifacts.spec.ts.snap | 11 -- lib/manager/pipenv/artifacts.spec.ts | 5 +- .../poetry/__snapshots__/extract.spec.ts.snap | 7 - lib/manager/poetry/artifacts.spec.ts | 3 +- lib/manager/poetry/extract.spec.ts | 51 ++++- lib/manager/swift/index.spec.ts | 19 +- 18 files changed, 260 insertions(+), 334 deletions(-) create mode 100644 lib/manager/nuget/__fixtures__/dotnet-tools.json diff --git a/lib/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap index 6c4a4b65286334..2ed1382724520a 100644 --- a/lib/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap +++ b/lib/manager/npm/extract/__snapshots__/pnpm.spec.ts.snap @@ -1,33 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/npm/extract/pnpm .detectPnpmWorkspaces() filters none matching packages 1`] = ` -Array [ - Object { - "packageFile": "package.json", - "pnpmShrinkwrap": "pnpm-lock.yaml", - }, - Object { - "packageFile": "nested-packages/group/a/package.json", - "packageJsonName": "@demo/nested-group-a", - "pnpmShrinkwrap": "pnpm-lock.yaml", - }, - Object { - "packageFile": "not-matching/b/package.json", - "packageJsonName": "@not-matching/b", - "pnpmShrinkwrap": undefined, - }, -] -`; - -exports[`manager/npm/extract/pnpm .detectPnpmWorkspaces() skips when pnpm shrinkwrap file has already been provided 1`] = ` -Array [ - Object { - "packageFile": "package.json", - "pnpmShrinkwrap": "pnpm-lock.yaml", - }, -] -`; - exports[`manager/npm/extract/pnpm .detectPnpmWorkspaces() uses pnpm workspaces 1`] = ` Array [ Object { @@ -66,11 +38,3 @@ Array [ }, ] `; - -exports[`manager/npm/extract/pnpm .extractPnpmFilters() detects errors in pnpm-workspace.yml file structure 1`] = `null`; - -exports[`manager/npm/extract/pnpm .extractPnpmFilters() detects errors when opening pnpm-workspace.yml file 1`] = `null`; - -exports[`manager/npm/extract/pnpm .findPnpmWorkspace() detects missing pnpm-lock.yaml when pnpm-workspace.yaml was already found 1`] = `null`; - -exports[`manager/npm/extract/pnpm .findPnpmWorkspace() detects missing pnpm-workspace.yaml 1`] = `null`; diff --git a/lib/manager/npm/extract/pnpm.spec.ts b/lib/manager/npm/extract/pnpm.spec.ts index fc69ee6aa86c17..99d9918198960f 100644 --- a/lib/manager/npm/extract/pnpm.spec.ts +++ b/lib/manager/npm/extract/pnpm.spec.ts @@ -24,8 +24,7 @@ describe('manager/npm/extract/pnpm', () => { '..' ); const res = await extractPnpmFilters(workSpaceFilePath); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toBeNull(); expect(logger.logger.trace).toHaveBeenCalledWith( { fileName: expect.any(String), @@ -40,8 +39,7 @@ describe('manager/npm/extract/pnpm', () => { }); const res = await extractPnpmFilters('pnpm-workspace.yml'); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toBeNull(); expect(logger.logger.trace).toHaveBeenCalledWith( expect.objectContaining({ fileName: expect.any(String), @@ -58,8 +56,7 @@ describe('manager/npm/extract/pnpm', () => { const packageFile = 'package.json'; const res = await findPnpmWorkspace(packageFile); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toBeNull(); expect(logger.logger.trace).toHaveBeenCalledWith( expect.objectContaining({ packageFile }), 'Failed to locate pnpm-workspace.yaml in a parent directory.' @@ -71,8 +68,7 @@ describe('manager/npm/extract/pnpm', () => { const packageFile = 'package.json'; const res = await findPnpmWorkspace(packageFile); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toBeNull(); expect(logger.logger.trace).toHaveBeenCalledWith( expect.objectContaining({ workspaceYamlPath: 'pnpm-workspace.yaml', @@ -138,8 +134,12 @@ describe('manager/npm/extract/pnpm', () => { ]; await detectPnpmWorkspaces(packageFiles); - // FIXME: explicit assert condition - expect(packageFiles).toMatchSnapshot(); + expect(packageFiles).toEqual([ + { + packageFile: 'package.json', + pnpmShrinkwrap: 'pnpm-lock.yaml', + }, + ]); }); it('filters none matching packages', async () => { @@ -161,8 +161,22 @@ describe('manager/npm/extract/pnpm', () => { ]; await detectPnpmWorkspaces(packageFiles); - // FIXME: explicit assert condition - expect(packageFiles).toMatchSnapshot(); + expect(packageFiles).toEqual([ + { + packageFile: 'package.json', + pnpmShrinkwrap: 'pnpm-lock.yaml', + }, + { + packageFile: 'nested-packages/group/a/package.json', + packageJsonName: '@demo/nested-group-a', + pnpmShrinkwrap: 'pnpm-lock.yaml', + }, + { + packageFile: 'not-matching/b/package.json', + packageJsonName: '@not-matching/b', + pnpmShrinkwrap: undefined, + }, + ]); expect( packageFiles.find( (packageFile) => diff --git a/lib/manager/nuget/__fixtures__/dotnet-tools.json b/lib/manager/nuget/__fixtures__/dotnet-tools.json new file mode 100644 index 00000000000000..7afd86c8f15236 --- /dev/null +++ b/lib/manager/nuget/__fixtures__/dotnet-tools.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "minver-cli": { + "version": "2.0.0", + "commands": ["minver"] + } + } +} diff --git a/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap b/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap index da697c5b33d149..380b45dbb18229 100644 --- a/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/nuget/__snapshots__/artifacts.spec.ts.snap @@ -66,17 +66,6 @@ Array [ ] `; -exports[`manager/nuget/artifacts catches errors 1`] = ` -Array [ - Object { - "artifactError": Object { - "lockFile": "packages.lock.json", - "stderr": "not found", - }, - }, -] -`; - exports[`manager/nuget/artifacts does not update lock file when no deps changed 1`] = `Array []`; exports[`manager/nuget/artifacts does not update lock file when non-proj file is changed 1`] = `Array []`; diff --git a/lib/manager/nuget/__snapshots__/extract.spec.ts.snap b/lib/manager/nuget/__snapshots__/extract.spec.ts.snap index f37a61bb873712..460af6dfa98c69 100644 --- a/lib/manager/nuget/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/nuget/__snapshots__/extract.spec.ts.snap @@ -1,86 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/nuget/extract extractPackageFile() .config/dotnet-tools.json with-config 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "2.0.0", - "datasource": "nuget", - "depName": "minver-cli", - "depType": "nuget", - "registryUrls": Array [ - "https://api.nuget.org/v3/index.json#protocolVersion=3", - "https://contoso.com/packages/", - ], - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() .config/dotnet-tools.json works 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "2.0.0", - "datasource": "nuget", - "depName": "minver-cli", - "depType": "nuget", - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() considers NuGet.config 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - "registryUrls": Array [ - "https://api.nuget.org/v3/index.json#protocolVersion=3", - "https://contoso.com/packages/", - ], - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() considers lower-case nuget.config 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - "registryUrls": Array [ - "https://api.nuget.org/v3/index.json#protocolVersion=3", - "https://contoso.com/packages/", - ], - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() considers pascal-case NuGet.Config 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - "registryUrls": Array [ - "https://api.nuget.org/v3/index.json#protocolVersion=3", - "https://contoso.com/packages/", - ], - }, - ], -} -`; - exports[`manager/nuget/extract extractPackageFile() extracts all dependencies 1`] = ` Array [ Object { @@ -305,85 +224,3 @@ Array [ }, ] `; - -exports[`manager/nuget/extract extractPackageFile() extracts registry URLs independently 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - "registryUrls": Array [ - "https://api.nuget.org/v3/index.json", - "https://example.org/one", - ], - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() extracts registry URLs independently 2`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - "registryUrls": Array [ - "https://api.nuget.org/v3/index.json", - "https://example.org/two", - ], - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() handles NuGet.config without package sources 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() handles malformed NuGet.config 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() ignores local feed in NuGet.config 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": "4.5.0", - "datasource": "nuget", - "depName": "Autofac", - "depType": "nuget", - "registryUrls": Array [ - "https://contoso.com/packages/", - ], - }, - ], -} -`; - -exports[`manager/nuget/extract extractPackageFile() returns empty for invalid csproj 1`] = ` -Object { - "deps": Array [], -} -`; diff --git a/lib/manager/nuget/artifacts.spec.ts b/lib/manager/nuget/artifacts.spec.ts index 0a692be8755f5f..64f0890d169efb 100644 --- a/lib/manager/nuget/artifacts.spec.ts +++ b/lib/manager/nuget/artifacts.spec.ts @@ -187,7 +187,6 @@ describe('manager/nuget/artifacts', () => { fs.writeLocalFile.mockImplementationOnce(() => { throw new Error('not found'); }); - // FIXME: explicit assert condition expect( await nuget.updateArtifacts({ packageFileName: 'project.csproj', @@ -195,7 +194,14 @@ describe('manager/nuget/artifacts', () => { newPackageFileContent: '{}', config, }) - ).toMatchSnapshot(); + ).toEqual([ + { + artifactError: { + lockFile: 'packages.lock.json', + stderr: 'not found', + }, + }, + ]); }); it('authenticates at registries', async () => { const execSnapshots = mockExecAll(exec); diff --git a/lib/manager/nuget/extract.spec.ts b/lib/manager/nuget/extract.spec.ts index 69fa7982637ca8..587d4c61f45232 100644 --- a/lib/manager/nuget/extract.spec.ts +++ b/lib/manager/nuget/extract.spec.ts @@ -20,10 +20,9 @@ describe('manager/nuget/extract', () => { setGlobalConfig(); }); it('returns empty for invalid csproj', async () => { - // FIXME: explicit assert condition - expect( - await extractPackageFile('nothing here', 'bogus', config) - ).toMatchSnapshot(); + expect(await extractPackageFile('nothing here', 'bogus', config)).toEqual( + { deps: [] } + ); }); it('extracts package version dependency', async () => { const packageFile = @@ -50,68 +49,140 @@ describe('manager/nuget/extract', () => { it('considers NuGet.config', async () => { const packageFile = 'with-config-file/with-config-file.csproj'; const contents = loadFixture(packageFile); - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + registryUrls: [ + 'https://api.nuget.org/v3/index.json#protocolVersion=3', + 'https://contoso.com/packages/', + ], + }, + ], + }); }); it('considers lower-case nuget.config', async () => { const packageFile = 'with-lower-case-config-file/with-lower-case-config-file.csproj'; const contents = loadFixture(packageFile); - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + registryUrls: [ + 'https://api.nuget.org/v3/index.json#protocolVersion=3', + 'https://contoso.com/packages/', + ], + }, + ], + }); }); it('considers pascal-case NuGet.Config', async () => { const packageFile = 'with-pascal-case-config-file/with-pascal-case-config-file.csproj'; const contents = loadFixture(packageFile); - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + registryUrls: [ + 'https://api.nuget.org/v3/index.json#protocolVersion=3', + 'https://contoso.com/packages/', + ], + }, + ], + }); }); it('handles malformed NuGet.config', async () => { const packageFile = 'with-malformed-config-file/with-malformed-config-file.csproj'; const contents = loadFixture(packageFile); - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + }, + ], + }); }); it('handles NuGet.config without package sources', async () => { const packageFile = 'without-package-sources/without-package-sources.csproj'; const contents = loadFixture(packageFile); - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + }, + ], + }); }); it('ignores local feed in NuGet.config', async () => { const packageFile = 'with-local-feed-in-config-file/with-local-feed-in-config-file.csproj'; const contents = loadFixture(packageFile); - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + registryUrls: ['https://contoso.com/packages/'], + }, + ], + }); }); it('extracts registry URLs independently', async () => { const packageFile = 'multiple-package-files/one/one.csproj'; const contents = loadFixture(packageFile); const otherPackageFile = 'multiple-package-files/two/two.csproj'; const otherContents = loadFixture(otherPackageFile); - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + registryUrls: [ + 'https://api.nuget.org/v3/index.json', + 'https://example.org/one', + ], + }, + ], + }); expect( await extractPackageFile(otherContents, otherPackageFile, config) - ).toMatchSnapshot(); + ).toEqual({ + deps: [ + { + currentValue: '4.5.0', + datasource: 'nuget', + depName: 'Autofac', + depType: 'nuget', + registryUrls: [ + 'https://api.nuget.org/v3/index.json', + 'https://example.org/two', + ], + }, + ], + }); }); it('extracts msbuild-sdks from global.json', async () => { @@ -172,33 +243,44 @@ describe('manager/nuget/extract', () => { describe('.config/dotnet-tools.json', () => { const packageFile = '.config/dotnet-tools.json'; - const contents = `{ - "version": 1, - "isRoot": true, - "tools": { - "minver-cli": { - "version": "2.0.0", - "commands": ["minver"] - } - } -}`; + const contents = loadFixture('dotnet-tools.json'); it('works', async () => { - // FIXME: explicit assert condition - expect( - await extractPackageFile(contents, packageFile, config) - ).toMatchSnapshot(); + expect(await extractPackageFile(contents, packageFile, config)).toEqual( + { + deps: [ + { + currentValue: '2.0.0', + datasource: 'nuget', + depName: 'minver-cli', + depType: 'nuget', + }, + ], + } + ); }); it('with-config', async () => { - // FIXME: explicit assert condition expect( await extractPackageFile( contents, `with-config-file/${packageFile}`, config ) - ).toMatchSnapshot(); + ).toEqual({ + deps: [ + { + currentValue: '2.0.0', + datasource: 'nuget', + depName: 'minver-cli', + depType: 'nuget', + registryUrls: [ + 'https://api.nuget.org/v3/index.json#protocolVersion=3', + 'https://contoso.com/packages/', + ], + }, + ], + }); }); it('wrong version', async () => { diff --git a/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap index 84fa937c6c6d0c..29b95f564dbac9 100644 --- a/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/pip-compile/__snapshots__/artifacts.spec.ts.snap @@ -1,16 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/pip-compile/artifacts catches errors 1`] = ` -Array [ - Object { - "artifactError": Object { - "lockFile": "requirements.txt", - "stderr": "not found", - }, - }, -] -`; - exports[`manager/pip-compile/artifacts returns null if unchanged 1`] = ` Array [ Object { diff --git a/lib/manager/pip-compile/artifacts.spec.ts b/lib/manager/pip-compile/artifacts.spec.ts index 3c64357c336085..4f62a4899d8dfc 100644 --- a/lib/manager/pip-compile/artifacts.spec.ts +++ b/lib/manager/pip-compile/artifacts.spec.ts @@ -111,7 +111,6 @@ describe('manager/pip-compile/artifacts', () => { fs.outputFile.mockImplementationOnce(() => { throw new Error('not found'); }); - // FIXME: explicit assert condition expect( await pipCompile.updateArtifacts({ packageFileName: 'requirements.in', @@ -119,7 +118,11 @@ describe('manager/pip-compile/artifacts', () => { newPackageFileContent: '{}', config, }) - ).toMatchSnapshot(); + ).toEqual([ + { + artifactError: { lockFile: 'requirements.txt', stderr: 'not found' }, + }, + ]); }); it('returns updated requirements.txt when doing lockfile maintenance', async () => { diff --git a/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap b/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap index cfeee48ee63fd5..7c538c6aa583f9 100644 --- a/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap @@ -1,8 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/pip_setup/extract getPythonAlias returns the python alias to use 1`] = `"python3.8"`; - -exports[`manager/pip_setup/extract getPythonAlias returns the python alias to use 2`] = ` +exports[`manager/pip_setup/extract getPythonAlias returns the python alias to use 1`] = ` Array [ Object { "cmd": "python --version", diff --git a/lib/manager/pip_setup/extract.spec.ts b/lib/manager/pip_setup/extract.spec.ts index 9af134d966c0c7..0fe882334b9205 100644 --- a/lib/manager/pip_setup/extract.spec.ts +++ b/lib/manager/pip_setup/extract.spec.ts @@ -35,8 +35,7 @@ describe('manager/pip_setup/extract', () => { ]); const result = await getPythonAlias(); expect(pythonVersions).toContain(result); - // FIXME: explicit assert condition - expect(result).toMatchSnapshot(); + expect(result).toBe('python3.8'); expect(await getPythonAlias()).toEqual(result); expect(execSnapshots).toMatchSnapshot(); expect(execSnapshots).toHaveLength(3); diff --git a/lib/manager/pip_setup/index.spec.ts b/lib/manager/pip_setup/index.spec.ts index de5380d6bb3ba3..10bdf73a552cf3 100644 --- a/lib/manager/pip_setup/index.spec.ts +++ b/lib/manager/pip_setup/index.spec.ts @@ -67,10 +67,31 @@ describe('manager/pip_setup/index', () => { }, ]); jest.spyOn(fs, 'readLocalFile').mockResolvedValueOnce(jsonContent); - // FIXME: explicit assert condition expect( await extractPackageFile(content, packageFile, config) - ).toMatchSnapshot(); + ).toMatchSnapshot({ + deps: [ + { depName: 'celery', currentValue: '>=3.1.13.0,<5.0' }, + { depName: 'logging_tree', currentValue: '>=1.7' }, + { depName: 'pygments', currentValue: '>=2.2' }, + { depName: 'psutil', currentValue: '>=5.0' }, + { depName: 'objgraph', currentValue: '>=3.0' }, + { depName: 'django', currentValue: '>=1.11.23,<2.0' }, + { depName: 'flask', currentValue: '>=0.11,<2.0' }, + { depName: 'blinker', currentValue: '>=1.4,<2.0' }, + { depName: 'gunicorn', currentValue: '>=19.7.0,<20.0' }, + { depName: 'statsd', currentValue: '>=3.2.1,<4.0' }, + { depName: 'Werkzeug', currentValue: '>=0.15.3,<0.16' }, + { + depName: 'requests', + currentValue: '>=2.10.0,<3.0', + skipReason: 'ignored', + }, + { depName: 'raven', currentValue: '>=5.27.1,<7.0' }, + { depName: 'future', currentValue: '>=0.15.2,<0.17' }, + { depName: 'ipaddress', currentValue: '>=1.0.16,<2.0' }, + ], + }); expect(exec).toHaveBeenCalledTimes(3); expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); }); diff --git a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap index ba04fe5ad957c7..d8693802137fa8 100644 --- a/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/pipenv/__snapshots__/artifacts.spec.ts.snap @@ -1,16 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/pipenv/artifacts catches errors 1`] = ` -Array [ - Object { - "artifactError": Object { - "lockFile": "Pipfile.lock", - "stderr": "not found", - }, - }, -] -`; - exports[`manager/pipenv/artifacts handles no constraint 1`] = ` Array [ Object { diff --git a/lib/manager/pipenv/artifacts.spec.ts b/lib/manager/pipenv/artifacts.spec.ts index c4733af3b8c744..fbacc6945ae058 100644 --- a/lib/manager/pipenv/artifacts.spec.ts +++ b/lib/manager/pipenv/artifacts.spec.ts @@ -131,7 +131,6 @@ describe('manager/pipenv/artifacts', () => { fs.outputFile.mockImplementationOnce(() => { throw new Error('not found'); }); - // FIXME: explicit assert condition expect( await pipenv.updateArtifacts({ packageFileName: 'Pipfile', @@ -139,7 +138,9 @@ describe('manager/pipenv/artifacts', () => { newPackageFileContent: '{}', config, }) - ).toMatchSnapshot(); + ).toEqual([ + { artifactError: { lockFile: 'Pipfile.lock', stderr: 'not found' } }, + ]); }); it('returns updated Pipenv.lock when doing lockfile maintenance', async () => { fs.readFile.mockResolvedValueOnce('Current Pipfile.lock' as any); diff --git a/lib/manager/poetry/__snapshots__/extract.spec.ts.snap b/lib/manager/poetry/__snapshots__/extract.spec.ts.snap index 5b08fdd3019b50..0cef52a3009249 100644 --- a/lib/manager/poetry/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/poetry/__snapshots__/extract.spec.ts.snap @@ -1,12 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/poetry/extract extractPackageFile() dedupes registries 1`] = ` -Array [ - "https://pypi.org/pypi/", - "https://bar.baz/+simple/", -] -`; - exports[`manager/poetry/extract extractPackageFile() extracts mixed versioning types 1`] = ` Object { "constraints": Object {}, diff --git a/lib/manager/poetry/artifacts.spec.ts b/lib/manager/poetry/artifacts.spec.ts index 357878b605be62..69f3922fafc613 100644 --- a/lib/manager/poetry/artifacts.spec.ts +++ b/lib/manager/poetry/artifacts.spec.ts @@ -184,7 +184,6 @@ describe('manager/poetry/artifacts', () => { throw new Error('not found'); }); const updatedDeps = [{ depName: 'dep1' }]; - // FIXME: explicit assert condition expect( await updateArtifacts({ packageFileName: 'pyproject.toml', @@ -192,7 +191,7 @@ describe('manager/poetry/artifacts', () => { newPackageFileContent: '{}', config, }) - ).toMatchSnapshot(); + ).toMatchSnapshot([{ artifactError: { lockFile: 'poetry.lock' } }]); }); it('returns updated poetry.lock when doing lockfile maintenance', async () => { fs.readFile.mockResolvedValueOnce('Old poetry.lock' as any); diff --git a/lib/manager/poetry/extract.spec.ts b/lib/manager/poetry/extract.spec.ts index 2b8981d29b91ce..066f1c10e22884 100644 --- a/lib/manager/poetry/extract.spec.ts +++ b/lib/manager/poetry/extract.spec.ts @@ -73,19 +73,58 @@ describe('manager/poetry/extract', () => { }); it('dedupes registries', async () => { const res = await extractPackageFile(pyproject8toml, filename); - // FIXME: explicit assert condition - expect(res.registryUrls).toMatchSnapshot(); + expect(res).toMatchObject({ + registryUrls: ['https://pypi.org/pypi/', 'https://bar.baz/+simple/'], + }); }); it('extracts mixed versioning types', async () => { const res = await extractPackageFile(pyproject9toml, filename); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + deps: [ + { depName: 'dep1', currentValue: '0.2' }, + { depName: 'dep2', currentValue: '1.1.0' }, + { depName: 'dep3', currentValue: '1.0a1' }, + { depName: 'dep4', currentValue: '1.0b2' }, + { depName: 'dep5', currentValue: '1.0rc1' }, + { depName: 'dep6', currentValue: '1.0.dev4' }, + { depName: 'dep7', currentValue: '1.0c1' }, + { depName: 'dep8', currentValue: '2012.2' }, + { depName: 'dep9', currentValue: '1.0.dev456' }, + { depName: 'dep10', currentValue: '1.0a1' }, + { depName: 'dep11', currentValue: '1.0a2.dev456' }, + { depName: 'dep12', currentValue: '1.0a12.dev456' }, + { depName: 'dep13', currentValue: '1.0a12' }, + { depName: 'dep14', currentValue: '1.0b1.dev456' }, + { depName: 'dep15', currentValue: '1.0b2' }, + { depName: 'dep16', currentValue: '1.0b2.post345.dev456' }, + { depName: 'dep17', currentValue: '1.0b2.post345' }, + { depName: 'dep18', currentValue: '1.0rc1.dev456' }, + { depName: 'dep19', currentValue: '1.0rc1' }, + { depName: 'dep20', currentValue: '1.0' }, + { depName: 'dep21', currentValue: '1.0+abc.5' }, + { depName: 'dep22', currentValue: '1.0+abc.7' }, + { depName: 'dep23', currentValue: '1.0+5' }, + { depName: 'dep24', currentValue: '1.0.post456.dev34' }, + { depName: 'dep25', currentValue: '1.0.post456' }, + { depName: 'dep26', currentValue: '1.1.dev1' }, + { depName: 'dep27', currentValue: '~=3.1' }, + { depName: 'dep28', currentValue: '~=3.1.2' }, + { depName: 'dep29', currentValue: '~=3.1a1' }, + { depName: 'dep30', currentValue: '==3.1' }, + { depName: 'dep31', currentValue: '==3.1.*' }, + { depName: 'dep32', currentValue: '~=3.1.0, !=3.1.3' }, + { depName: 'dep33', currentValue: '<=2.0' }, + { depName: 'dep34', currentValue: '<2.0' }, + ], + }); }); it('resolves lockedVersions from the lockfile', async () => { fs.readLocalFile.mockResolvedValue(pyproject11tomlLock); const res = await extractPackageFile(pyproject11toml, filename); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + constraints: { python: '^3.9' }, + deps: [{ lockedVersion: '1.17.5' }], + }); }); it('skips git dependencies', async () => { const content = diff --git a/lib/manager/swift/index.spec.ts b/lib/manager/swift/index.spec.ts index c5dba98d7f9ed2..ca395bceb01727 100644 --- a/lib/manager/swift/index.spec.ts +++ b/lib/manager/swift/index.spec.ts @@ -97,45 +97,38 @@ describe('manager/swift/index', () => { ).not.toBeNull(); }); it('parses package descriptions', () => { - // FIXME: explicit assert condition expect( extractPackageFile( `dependencies:[.package(url:"https://github.com/vapor/vapor.git",from:"1.2.3")]` ) - ).toMatchSnapshot(); - // FIXME: explicit assert condition + ).toMatchSnapshot({ deps: [{ currentValue: 'from:"1.2.3"' }] }); expect( extractPackageFile( `dependencies:[.package(url:"https://github.com/vapor/vapor.git","1.2.3"...)]` ) - ).toMatchSnapshot(); - // FIXME: explicit assert condition + ).toMatchSnapshot({ deps: [{ currentValue: '"1.2.3"...' }] }); expect( extractPackageFile( `dependencies:[.package(url:"https://github.com/vapor/vapor.git","1.2.3"..."1.2.4")]` ) - ).toMatchSnapshot(); - // FIXME: explicit assert condition + ).toMatchSnapshot({ deps: [{ currentValue: '"1.2.3"..."1.2.4"' }] }); expect( extractPackageFile( `dependencies:[.package(url:"https://github.com/vapor/vapor.git","1.2.3"..<"1.2.4")]` ) - ).toMatchSnapshot(); - // FIXME: explicit assert condition + ).toMatchSnapshot({ deps: [{ currentValue: '"1.2.3"..<"1.2.4"' }] }); expect( extractPackageFile( `dependencies:[.package(url:"https://github.com/vapor/vapor.git",..."1.2.3")]` ) - ).toMatchSnapshot(); - // FIXME: explicit assert condition + ).toMatchSnapshot({ deps: [{ currentValue: '..."1.2.3"' }] }); expect( extractPackageFile( `dependencies:[.package(url:"https://github.com/vapor/vapor.git",..<"1.2.3")]` ) - ).toMatchSnapshot(); + ).toMatchSnapshot({ deps: [{ currentValue: '..<"1.2.3"' }] }); }); it('parses multiple packages', () => { - // FIXME: explicit assert condition expect(extractPackageFile(pkgContent)).toMatchSnapshot(); }); }); From 7ce4c00c9ec85ca53b5ef2c28cd0bb01051a7d57 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Nov 2021 23:59:16 +0000 Subject: [PATCH 020/248] chore(deps): update linters to v5.3.0 (#12564) Co-authored-by: Renovate Bot --- package.json | 4 +-- yarn.lock | 74 ++++++++++------------------------------------------ 2 files changed, 16 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index cda3f5f196b7d8..6bd9c6aad9be25 100644 --- a/package.json +++ b/package.json @@ -240,8 +240,8 @@ "@types/traverse": "0.6.32", "@types/url-join": "4.0.1", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "5.2.0", - "@typescript-eslint/parser": "5.2.0", + "@typescript-eslint/eslint-plugin": "5.3.0", + "@typescript-eslint/parser": "5.3.0", "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", "emojibase-data": "6.2.0", diff --git a/yarn.lock b/yarn.lock index 90cd9787b2e569..0cce080a3cdf72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2042,13 +2042,13 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.2.0.tgz#2bdb247cc2e2afce7efbce09afb9a6f0a8a08434" - integrity sha512-qQwg7sqYkBF4CIQSyRQyqsYvP+g/J0To9ZPVNJpfxfekl5RmdvQnFFTVVwpRtaUDFNvjfe/34TgY/dpc3MgNTw== +"@typescript-eslint/eslint-plugin@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz#a55ae72d28ffeb6badd817fe4566c9cced1f5e29" + integrity sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g== dependencies: - "@typescript-eslint/experimental-utils" "5.2.0" - "@typescript-eslint/scope-manager" "5.2.0" + "@typescript-eslint/experimental-utils" "5.3.0" + "@typescript-eslint/scope-manager" "5.3.0" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -2056,19 +2056,7 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.2.0.tgz#e3b2cb9cd0aff9b50f68d9a414c299fd26b067e6" - integrity sha512-fWyT3Agf7n7HuZZRpvUYdFYbPk3iDCq6fgu3ulia4c7yxmPnwVBovdSOX7RL+k8u6hLbrXcdAehlWUVpGh6IEw== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.2.0" - "@typescript-eslint/types" "5.2.0" - "@typescript-eslint/typescript-estree" "5.2.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/experimental-utils@^5.0.0": +"@typescript-eslint/experimental-utils@5.3.0", "@typescript-eslint/experimental-utils@^5.0.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz#ee56b4957547ed2b0fc7451205e41502e664f546" integrity sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w== @@ -2080,24 +2068,16 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.2.0.tgz#dc081aa89de16b5676b10215519af3aa7b58fb72" - integrity sha512-Uyy4TjJBlh3NuA8/4yIQptyJb95Qz5PX//6p8n7zG0QnN4o3NF9Je3JHbVU7fxf5ncSXTmnvMtd/LDQWDk0YqA== +"@typescript-eslint/parser@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.3.0.tgz#7879f15e26d370ed3f653fb7dd06479531ed3ab9" + integrity sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw== dependencies: - "@typescript-eslint/scope-manager" "5.2.0" - "@typescript-eslint/types" "5.2.0" - "@typescript-eslint/typescript-estree" "5.2.0" + "@typescript-eslint/scope-manager" "5.3.0" + "@typescript-eslint/types" "5.3.0" + "@typescript-eslint/typescript-estree" "5.3.0" debug "^4.3.2" -"@typescript-eslint/scope-manager@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.2.0.tgz#7ce8e4ab2baaa0ad5282913ea8e13ce03ec6a12a" - integrity sha512-RW+wowZqPzQw8MUFltfKYZfKXqA2qgyi6oi/31J1zfXJRpOn6tCaZtd9b5u9ubnDG2n/EMvQLeZrsLNPpaUiFQ== - dependencies: - "@typescript-eslint/types" "5.2.0" - "@typescript-eslint/visitor-keys" "5.2.0" - "@typescript-eslint/scope-manager@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz#97d0ccc7c9158e89e202d5e24ce6ba49052d432e" @@ -2106,29 +2086,11 @@ "@typescript-eslint/types" "5.3.0" "@typescript-eslint/visitor-keys" "5.3.0" -"@typescript-eslint/types@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.2.0.tgz#7ad32d15abddb0ee968a330f0ea182ea544ef7cf" - integrity sha512-cTk6x08qqosps6sPyP2j7NxyFPlCNsJwSDasqPNjEQ8JMD5xxj2NHxcLin5AJQ8pAVwpQ8BMI3bTxR0zxmK9qQ== - "@typescript-eslint/types@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.0.tgz#af29fd53867c2df0028c57c36a655bd7e9e05416" integrity sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg== -"@typescript-eslint/typescript-estree@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.2.0.tgz#c22e0ff6f8a4a3f78504a80ebd686fe2870a68ae" - integrity sha512-RsdXq2XmVgKbm9nLsE3mjNUM7BTr/K4DYR9WfFVMUuozHWtH5gMpiNZmtrMG8GR385EOSQ3kC9HiEMJWimxd/g== - dependencies: - "@typescript-eslint/types" "5.2.0" - "@typescript-eslint/visitor-keys" "5.2.0" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz#4f68ddd46dc2983182402d2ab21fb44ad94988cf" @@ -2142,14 +2104,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.2.0.tgz#03522d35df98474f08e0357171a7d1b259a88f55" - integrity sha512-Nk7HizaXWWCUBfLA/rPNKMzXzWS8Wg9qHMuGtT+v2/YpPij4nVXrVJc24N/r5WrrmqK31jCrZxeHqIgqRzs0Xg== - dependencies: - "@typescript-eslint/types" "5.2.0" - eslint-visitor-keys "^3.0.0" - "@typescript-eslint/visitor-keys@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz#a6258790f3b7b2547f70ed8d4a1e0c3499994523" From d6dd27f625a3f6f7e5defbeff8804a7820896de4 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 05:15:10 +0100 Subject: [PATCH 021/248] fix: check dependency.tags defined --- lib/workers/repository/process/lookup/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index a921b1536c2789..4c770309ab5b4b 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -112,7 +112,7 @@ export async function lookupUpdates( // Reapply package rules in case we missed something from sourceUrl config = applyPackageRules({ ...config, sourceUrl: res.sourceUrl }); if (followTag) { - const taggedVersion = dependency.tags[followTag]; + const taggedVersion = dependency.tags?.[followTag]; if (!taggedVersion) { res.warnings.push({ topic: depName, From 301678bd913538857185600b8c13d7e46bb5260e Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 05:15:42 +0100 Subject: [PATCH 022/248] fix(cache): handle 401 --- lib/workers/repository/cache.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/workers/repository/cache.ts b/lib/workers/repository/cache.ts index e8f9c4bcd51113..47b9f83928018e 100644 --- a/lib/workers/repository/cache.ts +++ b/lib/workers/repository/cache.ts @@ -76,12 +76,10 @@ async function generateBranchCache(branch: BranchConfig): Promise { upgrades, }; } catch (err) { + const errCodes = [401, 404]; // istanbul ignore if - if (err.response?.statusCode === 404) { - logger.warn( - { err, branchName }, - '404 error when generating branch cache' - ); + if (errCodes.includes(err.response?.statusCode)) { + logger.warn({ err, branchName }, 'HTTP error generating branch cache'); return null; } logger.error({ err, branchName }, 'Error generating branch cache'); From 7e8239dd65f413baba643a6efce0fa56df3380f1 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 05:16:06 +0100 Subject: [PATCH 023/248] fix(github): better request error handling --- lib/util/http/github.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/util/http/github.ts b/lib/util/http/github.ts index bdfd2f6f72507e..7674405713878c 100644 --- a/lib/util/http/github.ts +++ b/lib/util/http/github.ts @@ -55,11 +55,10 @@ function handleGotError( message = String(err.response.body.message); } if ( - err.name === 'RequestError' && - (err.code === 'ENOTFOUND' || - err.code === 'ETIMEDOUT' || - err.code === 'EAI_AGAIN' || - err.code === 'ECONNRESET') + err.code === 'ENOTFOUND' || + err.code === 'ETIMEDOUT' || + err.code === 'EAI_AGAIN' || + err.code === 'ECONNRESET' ) { logger.debug({ err }, 'GitHub failure: RequestError'); throw new ExternalHostError(err, PlatformId.Github); From edab0842f405f53fe428ae015603a6190690de12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Horv=C3=A1th?= Date: Tue, 9 Nov 2021 05:25:52 +0100 Subject: [PATCH 024/248] docs: fix a small mistake in docs (#12569) `packageUrls` is supposed to be `packageRules` here --- docs/usage/configuration-options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index d5acec9a848113..895550b151e1d1 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2218,7 +2218,7 @@ image: my.new.registry/aRepository/andImage:1.21-alpine ## registryUrls Usually Renovate is able to either (a) use the default registries for a datasource, or (b) automatically detect during the manager extract phase which custom registries are in use. -In case there is a need to configure them manually, it can be done using this `registryUrls` field, typically using `packageUrls` like so: +In case there is a need to configure them manually, it can be done using this `registryUrls` field, typically using `packageRules` like so: ```json { From c3ad246a998709852b1c8fdd91e5eadd2c70aea3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 07:04:34 +0100 Subject: [PATCH 025/248] fix: no-param-reassign (#12571) --- .eslintrc.js | 1 + lib/config/presets/index.ts | 4 +++- lib/config/presets/util.ts | 4 ++-- lib/logger/utils.ts | 3 ++- lib/manager/ansible-galaxy/collections.ts | 2 -- lib/manager/terraform/modules.ts | 1 - lib/manager/terraform/providers.ts | 1 - lib/manager/terraform/required-providers.ts | 2 -- lib/manager/terraform/required-version.ts | 1 - lib/manager/terraform/resources.ts | 1 - lib/manager/terraform/util.ts | 1 - lib/manager/terragrunt/modules.ts | 1 - lib/util/http/index.ts | 5 +++-- lib/util/index.ts | 6 +++--- lib/versioning/regex/index.ts | 6 ++---- lib/workers/pr/body/index.ts | 1 - lib/workers/repository/dependency-dashboard.ts | 2 -- 17 files changed, 16 insertions(+), 26 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 6c9228c3ebef8e..e57f1d1c0a9a4c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -36,6 +36,7 @@ module.exports = { // other rules 'import/prefer-default-export': 0, // no benefit + 'no-param-reassign': 'error', 'no-restricted-syntax': 0, 'no-await-in-loop': 0, 'prefer-destructuring': 0, diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 8ad679445e81bd..29e57868156ea8 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -5,6 +5,7 @@ import { } from '../../constants/error-messages'; import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; +import { clone } from '../../util/clone'; import { regEx } from '../../util/regex'; import * as massage from '../massage'; import * as migration from '../migration'; @@ -251,9 +252,10 @@ export async function getPreset( export async function resolveConfigPresets( inputConfig: AllConfig, baseConfig?: RenovateConfig, - ignorePresets?: string[], + _ignorePresets?: string[], existingPresets: string[] = [] ): Promise { + let ignorePresets = clone(_ignorePresets); if (!ignorePresets || ignorePresets.length === 0) { ignorePresets = inputConfig.ignorePresets || []; } diff --git a/lib/config/presets/util.ts b/lib/config/presets/util.ts index 4f701cb4ed7e94..f0a014409600a6 100644 --- a/lib/config/presets/util.ts +++ b/lib/config/presets/util.ts @@ -14,11 +14,11 @@ export async function fetchPreset({ pkgName, filePreset, presetPath, - endpoint, + endpoint: _endpoint, packageTag = null, fetch, }: FetchPresetConfig): Promise { - endpoint = ensureTrailingSlash(endpoint); + const endpoint = ensureTrailingSlash(_endpoint); const [fileName, presetName, subPresetName] = filePreset.split('/'); const pathPrefix = presetPath ? `${presetPath}/` : ''; const buildFilePath = (name: string): string => `${pathPrefix}${name}`; diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index ed605e9193b73b..03604ac2a03f48 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -89,7 +89,8 @@ export default function prepareError(err: Error): Record { return response; } -export function sanitizeValue(value: unknown, seen = new WeakMap()): any { +export function sanitizeValue(_value: unknown, seen = new WeakMap()): any { + let value = _value; if (Array.isArray(value)) { const length = value.length; const arrayResult = Array(length); diff --git a/lib/manager/ansible-galaxy/collections.ts b/lib/manager/ansible-galaxy/collections.ts index ed6877f4c45169..8bf6f2bdebc63f 100644 --- a/lib/manager/ansible-galaxy/collections.ts +++ b/lib/manager/ansible-galaxy/collections.ts @@ -75,7 +75,6 @@ function handleGitDep( dep.currentValue = dep.managerData.version; } } - /* eslint-enable no-param-reassign */ } function handleGalaxyDep(dep: PackageDependency): void { @@ -83,7 +82,6 @@ function handleGalaxyDep(dep: PackageDependency): void { dep.depName = dep.managerData.name; dep.registryUrls = dep.managerData.source ? [dep.managerData.source] : []; dep.currentValue = dep.managerData.version; - /* eslint-enable no-param-reassign */ } function finalize(dependency: PackageDependency): boolean { diff --git a/lib/manager/terraform/modules.ts b/lib/manager/terraform/modules.ts index c734b38122610f..810c614c0ed0f9 100644 --- a/lib/manager/terraform/modules.ts +++ b/lib/manager/terraform/modules.ts @@ -69,5 +69,4 @@ export function analyseTerraformModule(dep: PackageDependency): void { logger.debug({ dep }, 'terraform dep has no source'); dep.skipReason = SkipReason.NoSource; } - /* eslint-enable no-param-reassign */ } diff --git a/lib/manager/terraform/providers.ts b/lib/manager/terraform/providers.ts index 42bdd842367fe7..229395dc1d3bd3 100644 --- a/lib/manager/terraform/providers.ts +++ b/lib/manager/terraform/providers.ts @@ -99,5 +99,4 @@ export function analyzeTerraformProvider( massageProviderLookupName(dep); dep.lockedVersion = getLockedVersion(dep, locks); - /* eslint-enable no-param-reassign */ } diff --git a/lib/manager/terraform/required-providers.ts b/lib/manager/terraform/required-providers.ts index 555d2650e9cc9d..b59956d46b66d0 100644 --- a/lib/manager/terraform/required-providers.ts +++ b/lib/manager/terraform/required-providers.ts @@ -33,7 +33,6 @@ function extractBlock( default: break; } - /* eslint-enable no-param-reassign */ } } while (line.trim() !== '}'); return lineNumber; @@ -79,5 +78,4 @@ export function analyzeTerraformRequiredProvider( ): void { analyzeTerraformProvider(dep, locks); dep.depType = `required_provider`; - /* eslint-enable no-param-reassign */ } diff --git a/lib/manager/terraform/required-version.ts b/lib/manager/terraform/required-version.ts index 23d3bc88f4a940..1de63c941f06fa 100644 --- a/lib/manager/terraform/required-version.ts +++ b/lib/manager/terraform/required-version.ts @@ -49,5 +49,4 @@ export function analyseTerraformVersion(dep: PackageDependency): void { dep.datasource = datasourceGithubTags.id; dep.depName = 'hashicorp/terraform'; dep.extractVersion = 'v(?.*)$'; - /* eslint-enable no-param-reassign */ } diff --git a/lib/manager/terraform/resources.ts b/lib/manager/terraform/resources.ts index 396fb4459db5d4..7b441b5911eeda 100644 --- a/lib/manager/terraform/resources.ts +++ b/lib/manager/terraform/resources.ts @@ -109,5 +109,4 @@ export function analyseTerraformResource( dep.skipReason = SkipReason.InvalidValue; break; } - /* eslint-enable no-param-reassign */ } diff --git a/lib/manager/terraform/util.ts b/lib/manager/terraform/util.ts index e804c5d7cb7f57..e0f2f08ad1f9e7 100644 --- a/lib/manager/terraform/util.ts +++ b/lib/manager/terraform/util.ts @@ -59,7 +59,6 @@ export function massageProviderLookupName(dep: PackageDependency): void { // handle cases like `Telmate/proxmox` dep.lookupName = dep.lookupName.toLowerCase(); - /* eslint-enable no-param-reassign */ } export function getLockedVersion( diff --git a/lib/manager/terragrunt/modules.ts b/lib/manager/terragrunt/modules.ts index 3657acdb7ad53d..f7a8f3367e64dc 100644 --- a/lib/manager/terragrunt/modules.ts +++ b/lib/manager/terragrunt/modules.ts @@ -70,5 +70,4 @@ export function analyseTerragruntModule(dep: PackageDependency): void { logger.debug({ dep }, 'terragrunt dep has no source'); dep.skipReason = SkipReason.NoSource; } - /* eslint-enable no-param-reassign */ } diff --git a/lib/util/http/index.ts b/lib/util/http/index.ts index 6baddc7fd377e5..74f85816778772 100644 --- a/lib/util/http/index.ts +++ b/lib/util/http/index.ts @@ -293,12 +293,13 @@ export class Http { ...options, }; + let resolvedUrl = url; // istanbul ignore else: needs test if (options?.baseUrl) { - url = resolveBaseUrl(options.baseUrl, url); + resolvedUrl = resolveBaseUrl(options.baseUrl, url); } applyDefaultHeaders(combinedOptions); - return got.stream(url, combinedOptions); + return got.stream(resolvedUrl, combinedOptions); } } diff --git a/lib/util/index.ts b/lib/util/index.ts index 4dd875664b5f35..a8a142dbebef80 100644 --- a/lib/util/index.ts +++ b/lib/util/index.ts @@ -4,14 +4,14 @@ export function sampleSize(array: string[], n: number): string[] { return []; } - n = n > length ? length : n; + const sampleNumber = n > length ? length : n; let index = 0; const lastIndex = length - 1; const result = [...array]; - while (index < n) { + while (index < sampleNumber) { const rand = index + Math.floor(Math.random() * (lastIndex - index + 1)); [result[rand], result[index]] = [result[index], result[rand]]; index += 1; } - return result.slice(0, n); + return result.slice(0, sampleNumber); } diff --git a/lib/versioning/regex/index.ts b/lib/versioning/regex/index.ts index 7c3efde7053334..b5db3258097814 100644 --- a/lib/versioning/regex/index.ts +++ b/lib/versioning/regex/index.ts @@ -41,11 +41,9 @@ export class RegExpVersioningApi extends GenericVersioningApi { // RegExp('^(?\\d+)\\.(?\\d+)\\.(?\\d+)(:?-(?.*-r)(?\\d+))?$'); private _config: RegExp = null; - constructor(new_config: string) { + constructor(_new_config: string) { super(); - if (!new_config) { - new_config = '^(?\\d+)?$'; - } + const new_config = _new_config || '^(?\\d+)?$'; // without at least one of {major, minor, patch} specified in the regex, // this versioner will not work properly diff --git a/lib/workers/pr/body/index.ts b/lib/workers/pr/body/index.ts index 02944d193cdb4b..0a3f509fc92711 100644 --- a/lib/workers/pr/body/index.ts +++ b/lib/workers/pr/body/index.ts @@ -53,7 +53,6 @@ function massageUpdateMetadata(config: BranchConfig): void { references.push(`[changelog](${changelogUrl})`); } upgrade.references = references.join(', '); - /* eslint-enable no-param-reassign */ }); } diff --git a/lib/workers/repository/dependency-dashboard.ts b/lib/workers/repository/dependency-dashboard.ts index b85596b78d5df6..6d1e9404e5c618 100644 --- a/lib/workers/repository/dependency-dashboard.ts +++ b/lib/workers/repository/dependency-dashboard.ts @@ -29,7 +29,6 @@ function parseDashboardIssue(issueBody: string): DependencyDashboard { let dependencyDashboardRebaseAllOpen = false; if (checkedRebaseAll) { dependencyDashboardRebaseAllOpen = true; - /* eslint-enable no-param-reassign */ } return { dependencyDashboardChecks, dependencyDashboardRebaseAllOpen }; } @@ -50,7 +49,6 @@ export async function readDashboardBody(config: RenovateConfig): Promise { Object.assign(config, parseDashboardIssue(issue.body)); } } - /* eslint-enable no-param-reassign */ } function getListItem(branch: BranchConfig, type: string): string { From 0193af32f70422464c80bd75829ba126ce0db9a1 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 9 Nov 2021 09:14:00 +0300 Subject: [PATCH 026/248] fix(maven): Trim values from multiline XML tags (#12573) Co-authored-by: Michael Kriese --- lib/manager/maven/__fixtures__/simple.pom.xml | 12 +++++++--- .../maven/__snapshots__/extract.spec.ts.snap | 24 +++++++++---------- .../maven/__snapshots__/index.spec.ts.snap | 20 ++++++++-------- lib/manager/maven/extract.ts | 12 +++++----- 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/lib/manager/maven/__fixtures__/simple.pom.xml b/lib/manager/maven/__fixtures__/simple.pom.xml index 138cc1e7b3e61f..0ec10b5eebdeb7 100644 --- a/lib/manager/maven/__fixtures__/simple.pom.xml +++ b/lib/manager/maven/__fixtures__/simple.pom.xml @@ -42,9 +42,15 @@ 0.0.1 - org.example - bar - 1.0.0 + + org.example + + + bar + + + 1.0.0 + diff --git a/lib/manager/maven/__snapshots__/extract.spec.ts.snap b/lib/manager/maven/__snapshots__/extract.spec.ts.snap index 424b9319f1528b..133e526a063892 100644 --- a/lib/manager/maven/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/maven/__snapshots__/extract.spec.ts.snap @@ -28,7 +28,7 @@ Object { "currentValue": "1.0.0", "datasource": "maven", "depName": "org.example:bar", - "fileReplacePosition": 1053, + "fileReplacePosition": 1093, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -38,7 +38,7 @@ Object { "currentValue": "2.4.2", "datasource": "maven", "depName": "org.apache.maven.plugins:maven-release-plugin", - "fileReplacePosition": 1287, + "fileReplacePosition": 1347, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -48,7 +48,7 @@ Object { "currentValue": "1.8.1", "datasource": "maven", "depName": "org.apache.maven.scm:maven-scm-provider-gitexe", - "fileReplacePosition": 1485, + "fileReplacePosition": 1545, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -58,7 +58,7 @@ Object { "currentValue": "0.0.1", "datasource": "maven", "depName": "org.example:\${artifact-id-placeholder}", - "fileReplacePosition": 2230, + "fileReplacePosition": 2290, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -68,7 +68,7 @@ Object { "currentValue": "0.0.1", "datasource": "maven", "depName": "\${group-id-placeholder}:baz", - "fileReplacePosition": 2380, + "fileReplacePosition": 2440, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -78,7 +78,7 @@ Object { "currentValue": "\${quuxVersion}", "datasource": "maven", "depName": "\${quuxGroup}:\${quuxId}", - "fileReplacePosition": 2525, + "fileReplacePosition": 2585, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -88,7 +88,7 @@ Object { "currentValue": "\${quuxVersion}", "datasource": "maven", "depName": "\${quuxGroup}:\${quuxId}-test", - "fileReplacePosition": 2684, + "fileReplacePosition": 2744, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -99,7 +99,7 @@ Object { "datasource": "maven", "depName": "org.example:quuz", "depType": "test", - "fileReplacePosition": 2832, + "fileReplacePosition": 2892, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -109,7 +109,7 @@ Object { "currentValue": "it's not a version", "datasource": "maven", "depName": "org.example:quuuz", - "fileReplacePosition": 2998, + "fileReplacePosition": 3058, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -119,7 +119,7 @@ Object { "currentValue": "[1.0.0]", "datasource": "maven", "depName": "org.example:hard-range", - "fileReplacePosition": 3156, + "fileReplacePosition": 3216, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -129,7 +129,7 @@ Object { "currentValue": "\${profile-placeholder}", "datasource": "maven", "depName": "org.example:profile-artifact", - "fileReplacePosition": 3418, + "fileReplacePosition": 3478, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -139,7 +139,7 @@ Object { "currentValue": "2.17", "datasource": "maven", "depName": "org.apache.maven.plugins:maven-checkstyle-plugin", - "fileReplacePosition": 3694, + "fileReplacePosition": 3754, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", diff --git a/lib/manager/maven/__snapshots__/index.spec.ts.snap b/lib/manager/maven/__snapshots__/index.spec.ts.snap index a547c337869389..91cb4a394abbaa 100644 --- a/lib/manager/maven/__snapshots__/index.spec.ts.snap +++ b/lib/manager/maven/__snapshots__/index.spec.ts.snap @@ -29,7 +29,7 @@ Array [ "currentValue": "1.0.0", "datasource": "maven", "depName": "org.example:bar", - "fileReplacePosition": 1053, + "fileReplacePosition": 1093, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -39,7 +39,7 @@ Array [ "currentValue": "2.4.2", "datasource": "maven", "depName": "org.apache.maven.plugins:maven-release-plugin", - "fileReplacePosition": 1287, + "fileReplacePosition": 1347, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -49,7 +49,7 @@ Array [ "currentValue": "1.8.1", "datasource": "maven", "depName": "org.apache.maven.scm:maven-scm-provider-gitexe", - "fileReplacePosition": 1485, + "fileReplacePosition": 1545, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -59,7 +59,7 @@ Array [ "currentValue": "0.0.1", "datasource": "maven", "depName": "org.example:\${artifact-id-placeholder}", - "fileReplacePosition": 2230, + "fileReplacePosition": 2290, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -70,7 +70,7 @@ Array [ "currentValue": "0.0.1", "datasource": "maven", "depName": "\${group-id-placeholder}:baz", - "fileReplacePosition": 2380, + "fileReplacePosition": 2440, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -104,7 +104,7 @@ Array [ "datasource": "maven", "depName": "org.example:quuz", "depType": "test", - "fileReplacePosition": 2832, + "fileReplacePosition": 2892, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -114,7 +114,7 @@ Array [ "currentValue": "it's not a version", "datasource": "maven", "depName": "org.example:quuuz", - "fileReplacePosition": 2998, + "fileReplacePosition": 3058, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -124,7 +124,7 @@ Array [ "currentValue": "[1.0.0]", "datasource": "maven", "depName": "org.example:hard-range", - "fileReplacePosition": 3156, + "fileReplacePosition": 3216, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -134,7 +134,7 @@ Array [ "currentValue": "\${profile-placeholder}", "datasource": "maven", "depName": "org.example:profile-artifact", - "fileReplacePosition": 3418, + "fileReplacePosition": 3478, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", @@ -145,7 +145,7 @@ Array [ "currentValue": "2.17", "datasource": "maven", "depName": "org.apache.maven.plugins:maven-checkstyle-plugin", - "fileReplacePosition": 3694, + "fileReplacePosition": 3754, "registryUrls": Array [ "https://repo.maven.apache.org/maven2", "https://maven.atlassian.com/content/repositories/atlassian-public/", diff --git a/lib/manager/maven/extract.ts b/lib/manager/maven/extract.ts index 82642719a39972..e08aebc8f7b1a6 100644 --- a/lib/manager/maven/extract.ts +++ b/lib/manager/maven/extract.ts @@ -41,9 +41,9 @@ function depFromNode(node: XmlElement): PackageDependency | null { if (!('valueWithPath' in node)) { return null; } - let groupId = node.valueWithPath('groupId'); - const artifactId = node.valueWithPath('artifactId'); - const currentValue = node.valueWithPath('version'); + let groupId = node.valueWithPath('groupId')?.trim(); + const artifactId = node.valueWithPath('artifactId')?.trim(); + const currentValue = node.valueWithPath('version')?.trim(); if (!groupId && node.name === 'plugin') { groupId = 'org.apache.maven.plugins'; @@ -63,7 +63,7 @@ function depFromNode(node: XmlElement): PackageDependency | null { registryUrls, }; - const depType = node.valueWithPath('scope'); + const depType = node.valueWithPath('scope')?.trim(); if (depType) { result.depType = depType; } @@ -202,7 +202,7 @@ export function extractPackage( if (repositories?.children) { const repoUrls = []; for (const repo of repositories.childrenNamed('repository')) { - const repoUrl = repo.valueWithPath('url'); + const repoUrl = repo.valueWithPath('url')?.trim(); if (repoUrl) { repoUrls.push(repoUrl); } @@ -216,7 +216,7 @@ export function extractPackage( if (packageFile && project.childNamed('parent')) { const parentPath = - project.valueWithPath('parent.relativePath') || '../pom.xml'; + project.valueWithPath('parent.relativePath')?.trim() || '../pom.xml'; result.parent = resolveParentFile(packageFile, parentPath); } From 1fe93e7505fedd401bac758fd516d08de7e77802 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 07:30:22 +0100 Subject: [PATCH 027/248] chore: remove unused eslint --- .eslintrc.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index e57f1d1c0a9a4c..658660bd8a15fd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -33,16 +33,11 @@ module.exports = { 'import/named': 0, 'import/namespace': 0, 'import/no-named-as-default-member': 0, + 'import/prefer-default-export': 0, // no benefit // other rules - 'import/prefer-default-export': 0, // no benefit - 'no-param-reassign': 'error', - 'no-restricted-syntax': 0, - 'no-await-in-loop': 0, - 'prefer-destructuring': 0, - 'prefer-template': 0, - 'no-underscore-dangle': 0, 'no-negated-condition': 'error', + 'no-param-reassign': 'error', 'sort-imports': [ 'error', { From 043f877f29a83b8845f372379f9e1dc8aff101a3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 07:37:22 +0100 Subject: [PATCH 028/248] chore: eslint consistent-return --- .eslintrc.js | 1 + lib/datasource/cdnjs/index.ts | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 658660bd8a15fd..7162401f80cee5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -36,6 +36,7 @@ module.exports = { 'import/prefer-default-export': 0, // no benefit // other rules + 'consistent-return': 'error', 'no-negated-condition': 'error', 'no-param-reassign': 'error', 'sort-imports': [ diff --git a/lib/datasource/cdnjs/index.ts b/lib/datasource/cdnjs/index.ts index 7fbce6cb9fcfa5..8f3aa41dd2b51e 100644 --- a/lib/datasource/cdnjs/index.ts +++ b/lib/datasource/cdnjs/index.ts @@ -25,6 +25,7 @@ export class CdnJsDatasource extends Datasource { // Each library contains multiple assets, so we cache at the library level instead of per-asset const library = lookupName.split('/')[0]; const url = `${registryUrl}libraries/${library}?fields=homepage,repository,assets`; + let result: ReleaseResult; try { const { assets, homepage, repository } = ( await this.http.getJson(url) @@ -37,7 +38,7 @@ export class CdnJsDatasource extends Datasource { .filter(({ files }) => files.includes(assetName)) .map(({ version, sri }) => ({ version, newDigest: sri[assetName] })); - const result: ReleaseResult = { releases }; + result = { releases }; if (homepage) { result.homepage = homepage; @@ -45,12 +46,12 @@ export class CdnJsDatasource extends Datasource { if (repository?.url) { result.sourceUrl = repository.url; } - return result; } catch (err) { if (err.statusCode !== 404) { throw new ExternalHostError(err); } this.handleGenericErrors(err); } + return result || null; } } From 982e36963d3fe281faed54ff488d7359d4bdcafa Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 07:48:31 +0100 Subject: [PATCH 029/248] chore: re-enable eslint no-console --- .eslintrc.js | 1 + lib/config-validator.ts | 2 ++ lib/workers/global/config/parse/cli.ts | 1 + 3 files changed, 4 insertions(+) diff --git a/.eslintrc.js b/.eslintrc.js index 7162401f80cee5..544743d0cadac9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -37,6 +37,7 @@ module.exports = { // other rules 'consistent-return': 'error', + 'no-console': 'error', 'no-negated-condition': 'error', 'no-param-reassign': 'error', 'sort-imports': [ diff --git a/lib/config-validator.ts b/lib/config-validator.ts index 2c6ddc237f04e1..fadf2c9b4b2021 100644 --- a/lib/config-validator.ts +++ b/lib/config-validator.ts @@ -13,6 +13,8 @@ import { getConfig as getFileConfig } from './workers/global/config/parse/file'; let returnVal = 0; +/* eslint-disable no-console */ + async function validate( desc: string, config: RenovateConfig, diff --git a/lib/workers/global/config/parse/cli.ts b/lib/workers/global/config/parse/cli.ts index 31a3912827d469..4bc1d6c977f292 100644 --- a/lib/workers/global/config/parse/cli.ts +++ b/lib/workers/global/config/parse/cli.ts @@ -85,6 +85,7 @@ export function getConfig(input: string[]): AllConfig { } }); + /* eslint-disable no-console */ /* istanbul ignore next */ function helpConsole(): void { console.log(' Examples:'); From b7dec718f3f48d826e3742a719544af1ce6f4ca7 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 07:50:25 +0100 Subject: [PATCH 030/248] chore: re-enable eslint no-template-curly-in-string --- .eslintrc.js | 2 ++ lib/config/decrypt.ts | 1 + lib/manager/gradle/deep/build-gradle.ts | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index 544743d0cadac9..486da69d3cc672 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -40,6 +40,7 @@ module.exports = { 'no-console': 'error', 'no-negated-condition': 'error', 'no-param-reassign': 'error', + 'no-template-curly-in-string': 'error', 'sort-imports': [ 'error', { @@ -124,6 +125,7 @@ module.exports = { jest: true, }, rules: { + 'no-template-curly-in-string': 0, 'prefer-destructuring': 0, 'prefer-promise-reject-errors': 0, 'import/no-dynamic-require': 0, diff --git a/lib/config/decrypt.ts b/lib/config/decrypt.ts index e17c1b9b1e9c75..86a51a435b78c7 100644 --- a/lib/config/decrypt.ts +++ b/lib/config/decrypt.ts @@ -179,6 +179,7 @@ export async function decryptConfig( 'Migrating npmToken to npmrc' ); if (is.string(decryptedConfig.npmrc)) { + /* eslint-disable no-template-curly-in-string */ if (decryptedConfig.npmrc.includes('${NPM_TOKEN}')) { logger.debug('Replacing ${NPM_TOKEN} with decrypted token'); decryptedConfig.npmrc = decryptedConfig.npmrc.replace( diff --git a/lib/manager/gradle/deep/build-gradle.ts b/lib/manager/gradle/deep/build-gradle.ts index 5f27d4271d6531..26c40980cee049 100644 --- a/lib/manager/gradle/deep/build-gradle.ts +++ b/lib/manager/gradle/deep/build-gradle.ts @@ -157,7 +157,7 @@ function dependencyStringVariableExpressionFormatMatch( ): RegExp { return regEx( `\\s*dependency\\s+['"]${dependency.group}:${dependency.name}:` + - '${([^}]*)}' + + '${([^}]*)}' + // eslint-disable-line no-template-curly-in-string `['"](?:\\s|;|})` ); } From bf093370763892f51bddb59fcb84e39d877564ca Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 9 Nov 2021 08:02:59 +0100 Subject: [PATCH 031/248] fix: enable eslint eqeqeq (#12574) Co-authored-by: Michael Kriese --- .eslintrc.js | 1 + lib/config/migration.ts | 6 +++--- lib/config/validation.ts | 2 +- lib/datasource/galaxy-collection/index.ts | 2 +- lib/logger/utils.ts | 2 +- lib/manager/ansible-galaxy/collections.ts | 2 +- lib/manager/ansible-galaxy/extract.spec.ts | 4 +--- lib/manager/ansible-galaxy/roles.ts | 2 +- lib/manager/argocd/extract.ts | 2 +- lib/manager/gradle-wrapper/artifacts.ts | 2 +- lib/manager/gradle/deep/__testutil__/gradle.ts | 2 +- lib/manager/regex/index.ts | 2 +- lib/manager/terraform/lockfile/index.ts | 5 +---- lib/manager/terraform/resources.ts | 2 +- lib/util/index.ts | 2 +- lib/workers/repository/onboarding/branch/check.ts | 3 +-- 16 files changed, 18 insertions(+), 23 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 486da69d3cc672..190ad0dec7ba8c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -37,6 +37,7 @@ module.exports = { // other rules 'consistent-return': 'error', + eqeqeq: 'error', 'no-console': 'error', 'no-negated-condition': 'error', 'no-param-reassign': 'error', diff --git a/lib/config/migration.ts b/lib/config/migration.ts index 6b548e4f665b53..ddad631b66a507 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -316,11 +316,11 @@ export function migrateConfig( migratedConfig.automergeType = 'branch'; } else if (key === 'automergeMinor') { migratedConfig.minor = migratedConfig.minor || {}; - migratedConfig.minor.automerge = val == true; + migratedConfig.minor.automerge = !!val; delete migratedConfig[key]; } else if (key === 'automergeMajor') { migratedConfig.major = migratedConfig.major || {}; - migratedConfig.major.automerge = val == true; + migratedConfig.major.automerge = !!val; delete migratedConfig[key]; } else if (key === 'multipleMajorPrs') { delete migratedConfig.multipleMajorPrs; @@ -336,7 +336,7 @@ export function migrateConfig( migratedConfig.separateMinorPatch = val; } else if (key === 'automergePatch') { migratedConfig.patch = migratedConfig.patch || {}; - migratedConfig.patch.automerge = val == true; + migratedConfig.patch.automerge = !!val; delete migratedConfig[key]; } else if (key === 'ignoreNodeModules') { delete migratedConfig.ignoreNodeModules; diff --git a/lib/config/validation.ts b/lib/config/validation.ts index 7ca765b547fed4..fb99cc6f3d02fb 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -228,7 +228,7 @@ export async function validateConfig( message: `${currentPath}: ${errorMessage}`, }); } - } else if (val != null) { + } else if (val !== null) { const type = optionTypes[key]; if (type === 'boolean') { if (val !== true && val !== false) { diff --git a/lib/datasource/galaxy-collection/index.ts b/lib/datasource/galaxy-collection/index.ts index 8b57b2063eec68..74c333c9519146 100644 --- a/lib/datasource/galaxy-collection/index.ts +++ b/lib/datasource/galaxy-collection/index.ts @@ -109,7 +109,7 @@ export class GalaxyCollectionDatasource extends Datasource { { concurrency: 5 } // allow 5 requests at maximum in parallel ); // filter failed versions - const filteredReleases = enrichedReleases.filter((value) => value != null); + const filteredReleases = enrichedReleases.filter(Boolean); // extract base information which are only provided on the release from the newest release const result: ReleaseResult = { releases: filteredReleases, diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index 03604ac2a03f48..a06363e7d17e9d 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -114,7 +114,7 @@ export function sanitizeValue(_value: unknown, seen = new WeakMap()): any { const valueType = typeof value; - if (value != null && valueType !== 'function' && valueType === 'object') { + if (value && valueType !== 'function' && valueType === 'object') { if (value instanceof Date) { return value; } diff --git a/lib/manager/ansible-galaxy/collections.ts b/lib/manager/ansible-galaxy/collections.ts index 8bf6f2bdebc63f..43888baf49a9b4 100644 --- a/lib/manager/ansible-galaxy/collections.ts +++ b/lib/manager/ansible-galaxy/collections.ts @@ -120,7 +120,7 @@ function finalize(dependency: PackageDependency): boolean { return true; } - if (dependency.currentValue == null && dep.skipReason == null) { + if (!dependency.currentValue && !dep.skipReason) { dep.skipReason = SkipReason.NoVersion; } return true; diff --git a/lib/manager/ansible-galaxy/extract.spec.ts b/lib/manager/ansible-galaxy/extract.spec.ts index 960e6f8ea3cb25..1e2b80d0a62666 100644 --- a/lib/manager/ansible-galaxy/extract.spec.ts +++ b/lib/manager/ansible-galaxy/extract.spec.ts @@ -35,9 +35,7 @@ describe('manager/ansible-galaxy/extract', () => { const res = extractPackageFile(collections1, 'requirements.yml'); expect(res.deps).toMatchSnapshot(); expect(res.deps).toHaveLength(13); - expect(res.deps.filter((value) => value.skipReason != null)).toHaveLength( - 6 - ); + expect(res.deps.filter((value) => value.skipReason)).toHaveLength(6); }); it('check collection style requirements file in reverse order and missing empty line', () => { const res = extractPackageFile(collections2, 'requirements.yml'); diff --git a/lib/manager/ansible-galaxy/roles.ts b/lib/manager/ansible-galaxy/roles.ts index f47da5a9059998..23aa4398147351 100644 --- a/lib/manager/ansible-galaxy/roles.ts +++ b/lib/manager/ansible-galaxy/roles.ts @@ -94,7 +94,7 @@ export function extractRoles(lines: string[]): PackageDependency[] { }; do { const localdep = interpretLine(lineMatch, lineNumber, dep); - if (localdep == null) { + if (!localdep) { break; } const line = lines[lineNumber + 1]; diff --git a/lib/manager/argocd/extract.ts b/lib/manager/argocd/extract.ts index ae5d1dd730d36b..9561f7c5061b5a 100644 --- a/lib/manager/argocd/extract.ts +++ b/lib/manager/argocd/extract.ts @@ -12,7 +12,7 @@ function createDependency( const source = definition.spec?.source; if ( - source == null || + !source || !is.nonEmptyString(source.repoURL) || !is.nonEmptyString(source.targetRevision) ) { diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts index 3dda4a837c9f89..ca14ee8325a28f 100644 --- a/lib/manager/gradle-wrapper/artifacts.ts +++ b/lib/manager/gradle-wrapper/artifacts.ts @@ -126,7 +126,7 @@ export async function updateArtifacts({ addIfUpdated(status, fileProjectPath) ) ) - ).filter((e) => e != null); + ).filter(Boolean); logger.debug( { files: updateArtifactsResult.map((r) => r.file.name) }, `Returning updated gradle-wrapper files` diff --git a/lib/manager/gradle/deep/__testutil__/gradle.ts b/lib/manager/gradle/deep/__testutil__/gradle.ts index 444accb9a872d1..41568651fb2635 100644 --- a/lib/manager/gradle/deep/__testutil__/gradle.ts +++ b/lib/manager/gradle/deep/__testutil__/gradle.ts @@ -28,7 +28,7 @@ ${javaVersionOutput}`); let cachedJavaVersion: number | null = null; function determineJavaVersion(): number { - if (cachedJavaVersion == null) { + if (!cachedJavaVersion) { let javaVersionCommand: SpawnSyncReturns; let error: Error; try { diff --git a/lib/manager/regex/index.ts b/lib/manager/regex/index.ts index beb11affa4ce36..a5a327051ae109 100644 --- a/lib/manager/regex/index.ts +++ b/lib/manager/regex/index.ts @@ -150,7 +150,7 @@ function handleRecursive( regEx(matchString, 'g') ); // abort if we have no matchString anymore - if (regexes[index] == null) { + if (!regexes[index]) { return []; } return regexMatchAll(regexes[index], content).flatMap((match) => { diff --git a/lib/manager/terraform/lockfile/index.ts b/lib/manager/terraform/lockfile/index.ts index 4fe381265a7f11..c1a34a6d4ad5fe 100644 --- a/lib/manager/terraform/lockfile/index.ts +++ b/lib/manager/terraform/lockfile/index.ts @@ -110,10 +110,7 @@ export async function updateArtifacts({ } } // if no updates have been found or there are failed hashes abort - if ( - updates.length === 0 || - updates.some((value) => value.newHashes == null) - ) { + if (updates.length === 0 || updates.some((value) => !value.newHashes)) { return null; } diff --git a/lib/manager/terraform/resources.ts b/lib/manager/terraform/resources.ts index 7b441b5911eeda..46bdf1abc3d0cb 100644 --- a/lib/manager/terraform/resources.ts +++ b/lib/manager/terraform/resources.ts @@ -94,7 +94,7 @@ export function analyseTerraformResource( break; case TerraformResourceTypes.helm_release: - if (dep.managerData.chart == null) { + if (!dep.managerData.chart) { dep.skipReason = SkipReason.InvalidName; } else if (checkIfStringIsPath(dep.managerData.chart)) { dep.skipReason = SkipReason.LocalChart; diff --git a/lib/util/index.ts b/lib/util/index.ts index a8a142dbebef80..dcd33b5ceda2d7 100644 --- a/lib/util/index.ts +++ b/lib/util/index.ts @@ -1,5 +1,5 @@ export function sampleSize(array: string[], n: number): string[] { - const length = array == null ? 0 : array.length; + const length = array ? array.length : 0; if (!length || n < 1) { return []; } diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts index c48f445c349291..c609e41b4d7c3a 100644 --- a/lib/workers/repository/onboarding/branch/check.ts +++ b/lib/workers/repository/onboarding/branch/check.ts @@ -121,5 +121,4 @@ export const isOnboarded = async (config: RenovateConfig): Promise => { export const onboardingPrExists = async ( config: RenovateConfig -): Promise => - (await platform.getBranchPr(config.onboardingBranch)) != null; +): Promise => !!(await platform.getBranchPr(config.onboardingBranch)); From d1e8528305150b34ee109c586a985caf7afa7443 Mon Sep 17 00:00:00 2001 From: Tony Brix Date: Tue, 9 Nov 2021 21:13:29 -0600 Subject: [PATCH 032/248] fix: add xterm to repo groups (#12580) --- lib/config/presets/internal/monorepo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index 4bf38f6d1e2bb0..ef0c3460eba727 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -182,6 +182,7 @@ const repoGroups = { webdriverio: 'https://github.com/webdriverio/webdriverio', workbox: 'https://github.com/googlechrome/workbox', vstest: 'https://github.com/microsoft/vstest', + xterm: 'https://github.com/xtermjs/xterm.js', }; const patternGroups = { From 53e3cb17fef44032c11ac2ae33e94ccd1131fb3b Mon Sep 17 00:00:00 2001 From: Jamie Magee Date: Tue, 9 Nov 2021 22:35:05 -0800 Subject: [PATCH 033/248] refactor(rubygems): convert to class-based (#11229) --- lib/datasource/api.ts | 4 +- lib/datasource/rubygems/common.ts | 40 --- lib/datasource/rubygems/get-rubygems-org.ts | 134 +++++----- lib/datasource/rubygems/get.ts | 244 +++++++++++-------- lib/datasource/rubygems/index.spec.ts | 4 +- lib/datasource/rubygems/index.ts | 53 +++- lib/datasource/rubygems/releases.ts | 18 -- lib/manager/bundler/extract.ts | 4 +- lib/workers/repository/init/vulnerability.ts | 4 +- 9 files changed, 276 insertions(+), 229 deletions(-) delete mode 100644 lib/datasource/rubygems/common.ts delete mode 100644 lib/datasource/rubygems/releases.ts diff --git a/lib/datasource/api.ts b/lib/datasource/api.ts index 6469279f8c6cdf..d7619f3ac6c2ec 100644 --- a/lib/datasource/api.ts +++ b/lib/datasource/api.ts @@ -30,7 +30,7 @@ import * as pod from './pod'; import { PypiDatasource } from './pypi'; import * as repology from './repology'; import { RubyVersionDatasource } from './ruby-version'; -import * as rubygems from './rubygems'; +import { RubyGemsDatasource } from './rubygems'; import * as sbtPackage from './sbt-package'; import * as sbtPlugin from './sbt-plugin'; import { TerraformModuleDatasource } from './terraform-module'; @@ -72,7 +72,7 @@ api.set('pod', pod); api.set('pypi', new PypiDatasource()); api.set('repology', repology); api.set('ruby-version', new RubyVersionDatasource()); -api.set('rubygems', rubygems); +api.set(RubyGemsDatasource.id, new RubyGemsDatasource()); api.set('sbt-package', sbtPackage); api.set('sbt-plugin', sbtPlugin); api.set('terraform-module', new TerraformModuleDatasource()); diff --git a/lib/datasource/rubygems/common.ts b/lib/datasource/rubygems/common.ts deleted file mode 100644 index ce52a088a1e9c6..00000000000000 --- a/lib/datasource/rubygems/common.ts +++ /dev/null @@ -1,40 +0,0 @@ -import Marshal from 'marshal'; -import urlJoin from 'url-join'; -import { logger } from '../../logger'; -import { Http } from '../../util/http'; -import { getQueryString } from '../../util/url'; - -export const id = 'rubygems'; -export const http = new Http(id); - -export const knownFallbackHosts = ['rubygems.pkg.github.com', 'gitlab.com']; - -export async function fetchJson( - dependency: string, - registry: string, - path: string -): Promise { - const url = urlJoin(registry, path, `${dependency}.json`); - - logger.trace({ registry, dependency, url }, `RubyGems lookup request`); - const response = (await http.getJson(url)) || { - body: undefined, - }; - - return response.body; -} - -export async function fetchBuffer( - dependency: string, - registry: string, - path: string -): Promise { - const url = `${urlJoin(registry, path)}?${getQueryString({ - gems: dependency, - })}`; - - logger.trace({ registry, dependency, url }, `RubyGems lookup request`); - const response = await http.getBuffer(url); - - return new Marshal(response.body).parsed as T; -} diff --git a/lib/datasource/rubygems/get-rubygems-org.ts b/lib/datasource/rubygems/get-rubygems-org.ts index 7ca2bdcda8daf3..3be067768bda5c 100644 --- a/lib/datasource/rubygems/get-rubygems-org.ts +++ b/lib/datasource/rubygems/get-rubygems-org.ts @@ -1,8 +1,8 @@ import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; import { getElapsedMinutes } from '../../util/date'; -import type { ReleaseResult } from '../types'; -import { http } from './common'; +import { Datasource } from '../datasource'; +import type { GetReleasesConfig, ReleaseResult } from '../types'; let lastSync = new Date('2000-01-01'); let packageReleases: Record = Object.create(null); // Because we might need a "constructor" key @@ -15,38 +15,69 @@ export function resetCache(): void { contentLength = 0; } -/* https://bugs.chromium.org/p/v8/issues/detail?id=2869 */ -const copystr = (x: string): string => (' ' + x).slice(1); +export class RubyGemsOrgDatasource extends Datasource { + constructor(override readonly id: string) { + super(id); + } -async function updateRubyGemsVersions(): Promise { - const url = 'https://rubygems.org/versions'; - const options = { - headers: { - 'accept-encoding': 'identity', - range: `bytes=${contentLength}-`, - }, - }; - let newLines: string; - try { - logger.debug('Rubygems: Fetching rubygems.org versions'); - const startTime = Date.now(); - newLines = (await http.get(url, options)).body; - const durationMs = Math.round(Date.now() - startTime); - logger.debug({ durationMs }, 'Rubygems: Fetched rubygems.org versions'); - } catch (err) /* istanbul ignore next */ { - if (err.statusCode !== 416) { - contentLength = 0; - packageReleases = Object.create(null); // Because we might need a "constructor" key - throw new ExternalHostError( - new Error('Rubygems fetch error - need to reset cache') - ); + async getReleases({ + lookupName, + }: GetReleasesConfig): Promise { + logger.debug(`getRubygemsOrgDependency(${lookupName})`); + await this.syncVersions(); + if (!packageReleases[lookupName]) { + return null; + } + const dep: ReleaseResult = { + releases: packageReleases[lookupName].map((version) => ({ + version, + })), + }; + return dep; + } + + /** + * https://bugs.chromium.org/p/v8/issues/detail?id=2869 + */ + private static copystr(x: string): string { + return (' ' + x).slice(1); + } + + async updateRubyGemsVersions(): Promise { + const url = 'https://rubygems.org/versions'; + const options = { + headers: { + 'accept-encoding': 'identity', + range: `bytes=${contentLength}-`, + }, + }; + let newLines: string; + try { + logger.debug('Rubygems: Fetching rubygems.org versions'); + const startTime = Date.now(); + newLines = (await this.http.get(url, options)).body; + const durationMs = Math.round(Date.now() - startTime); + logger.debug({ durationMs }, 'Rubygems: Fetched rubygems.org versions'); + } catch (err) /* istanbul ignore next */ { + if (err.statusCode !== 416) { + contentLength = 0; + packageReleases = Object.create(null); // Because we might need a "constructor" key + throw new ExternalHostError( + new Error('Rubygems fetch error - need to reset cache') + ); + } + logger.debug('Rubygems: No update'); + lastSync = new Date(); + return; + } + + for (const line of newLines.split('\n')) { + RubyGemsOrgDatasource.processLine(line); } - logger.debug('Rubygems: No update'); lastSync = new Date(); - return; } - function processLine(line: string): void { + private static processLine(line: string): void { let split: string[]; let pkg: string; let versions: string; @@ -57,7 +88,7 @@ async function updateRubyGemsVersions(): Promise { } split = l.split(' '); [pkg, versions] = split; - pkg = copystr(pkg); + pkg = RubyGemsOrgDatasource.copystr(pkg); packageReleases[pkg] = packageReleases[pkg] || []; const lineVersions = versions.split(',').map((version) => version.trim()); for (const lineVersion of lineVersions) { @@ -68,7 +99,7 @@ async function updateRubyGemsVersions(): Promise { (version) => version !== deletedVersion ); } else { - packageReleases[pkg].push(copystr(lineVersion)); + packageReleases[pkg].push(RubyGemsOrgDatasource.copystr(lineVersion)); } } } catch (err) /* istanbul ignore next */ { @@ -79,38 +110,19 @@ async function updateRubyGemsVersions(): Promise { } } - for (const line of newLines.split('\n')) { - processLine(line); + private static isDataStale(): boolean { + return getElapsedMinutes(lastSync) >= 5; } - lastSync = new Date(); -} - -function isDataStale(): boolean { - return getElapsedMinutes(lastSync) >= 5; -} -let updateRubyGemsVersionsPromise: Promise | undefined; + updateRubyGemsVersionsPromise: Promise | undefined; -async function syncVersions(): Promise { - if (isDataStale()) { - updateRubyGemsVersionsPromise = - // eslint-disable-next-line @typescript-eslint/no-misused-promises - updateRubyGemsVersionsPromise || updateRubyGemsVersions(); - await updateRubyGemsVersionsPromise; - updateRubyGemsVersionsPromise = null; - } -} - -export async function getRubygemsOrgDependency( - lookupName: string -): Promise { - logger.debug(`getRubygemsOrgDependency(${lookupName})`); - await syncVersions(); - if (!packageReleases[lookupName]) { - return null; + async syncVersions(): Promise { + if (RubyGemsOrgDatasource.isDataStale()) { + this.updateRubyGemsVersionsPromise = + // eslint-disable-next-line @typescript-eslint/no-misused-promises + this.updateRubyGemsVersionsPromise || this.updateRubyGemsVersions(); + await this.updateRubyGemsVersionsPromise; + this.updateRubyGemsVersionsPromise = null; + } } - const dep: ReleaseResult = { - releases: packageReleases[lookupName].map((version) => ({ version })), - }; - return dep; } diff --git a/lib/datasource/rubygems/get.ts b/lib/datasource/rubygems/get.ts index 6d1d491b198c2a..a6b45f197ef8a9 100644 --- a/lib/datasource/rubygems/get.ts +++ b/lib/datasource/rubygems/get.ts @@ -1,7 +1,9 @@ +import Marshal from 'marshal'; import { logger } from '../../logger'; import { HttpError } from '../../util/http/types'; -import type { Release, ReleaseResult } from '../types'; -import { fetchBuffer, fetchJson } from './common'; +import { getQueryString, joinUrlParts, parseUrl } from '../../util/url'; +import { Datasource } from '../datasource'; +import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; import type { JsonGemVersions, JsonGemsInfo, @@ -12,114 +14,164 @@ const INFO_PATH = '/api/v1/gems'; const VERSIONS_PATH = '/api/v1/versions'; const DEPENDENCIES_PATH = '/api/v1/dependencies'; -export async function getDependencyFallback( - dependency: string, - registry: string -): Promise { - logger.debug( - { dependency, api: DEPENDENCIES_PATH }, - 'RubyGems lookup for dependency' - ); - const info = await fetchBuffer( - dependency, - registry, - DEPENDENCIES_PATH - ); - if (!info || info.length === 0) { - return null; +export class InternalRubyGemsDatasource extends Datasource { + constructor(override readonly id: string) { + super(id); } - const releases = info.map(({ number: version, platform: rubyPlatform }) => ({ - version, - rubyPlatform, - })); - return { - releases, - homepage: null, - sourceUrl: null, - changelogUrl: null, - }; -} -export async function getDependency( - dependency: string, - registry: string -): Promise { - logger.debug( - { dependency, api: INFO_PATH }, - 'RubyGems lookup for dependency' - ); - let info: JsonGemsInfo; - - try { - info = await fetchJson(dependency, registry, INFO_PATH); - } catch (error) { - // fallback to deps api on 404 - if (error instanceof HttpError && error.response?.statusCode === 404) { - return await getDependencyFallback(dependency, registry); + private knownFallbackHosts = ['rubygems.pkg.github.com', 'gitlab.com']; + + override getReleases({ + lookupName, + registryUrl, + }: GetReleasesConfig): Promise { + if (this.knownFallbackHosts.includes(parseUrl(registryUrl)?.hostname)) { + return this.getDependencyFallback(lookupName, registryUrl); } - throw error; + return this.getDependency(lookupName, registryUrl); } - if (!info) { - logger.debug({ dependency }, 'RubyGems package not found.'); - return null; + async getDependencyFallback( + dependency: string, + registry: string + ): Promise { + logger.debug( + { dependency, api: DEPENDENCIES_PATH }, + 'RubyGems lookup for dependency' + ); + const info = await this.fetchBuffer( + dependency, + registry, + DEPENDENCIES_PATH + ); + if (!info || info.length === 0) { + return null; + } + const releases = info.map( + ({ number: version, platform: rubyPlatform }) => ({ + version, + rubyPlatform, + }) + ); + return { + releases, + homepage: null, + sourceUrl: null, + changelogUrl: null, + }; } - if (dependency.toLowerCase() !== info.name.toLowerCase()) { - logger.warn( - { lookup: dependency, returned: info.name }, - 'Lookup name does not match with returned.' + async getDependency( + dependency: string, + registry: string + ): Promise { + logger.debug( + { dependency, api: INFO_PATH }, + 'RubyGems lookup for dependency' ); - return null; - } + let info: JsonGemsInfo; + + try { + info = await this.fetchJson(dependency, registry, INFO_PATH); + } catch (error) { + // fallback to deps api on 404 + if (error instanceof HttpError && error.response?.statusCode === 404) { + return await this.getDependencyFallback(dependency, registry); + } + throw error; + } - let versions: JsonGemVersions[] = []; - let releases: Release[] = []; - try { - versions = await fetchJson(dependency, registry, VERSIONS_PATH); - } catch (err) { - if (err.statusCode === 400 || err.statusCode === 404) { - logger.debug( - { registry }, - 'versions endpoint returns error - falling back to info endpoint' + if (!info) { + logger.debug({ dependency }, 'RubyGems package not found.'); + return null; + } + + if (dependency.toLowerCase() !== info.name.toLowerCase()) { + logger.warn( + { lookup: dependency, returned: info.name }, + 'Lookup name does not match with returned.' ); + return null; + } + + let versions: JsonGemVersions[] = []; + let releases: Release[] = []; + try { + versions = await this.fetchJson(dependency, registry, VERSIONS_PATH); + } catch (err) { + if (err.statusCode === 400 || err.statusCode === 404) { + logger.debug( + { registry }, + 'versions endpoint returns error - falling back to info endpoint' + ); + } else { + throw err; + } + } + + // TODO: invalid properties for `Release` see #11312 + + if (versions.length === 0 && info.version) { + logger.warn('falling back to the version from the info endpoint'); + releases = [ + { + version: info.version, + rubyPlatform: info.platform, + } as Release, + ]; } else { - throw err; + releases = versions.map( + ({ + number: version, + platform: rubyPlatform, + created_at: releaseTimestamp, + rubygems_version: rubygemsVersion, + ruby_version: rubyVersion, + }) => ({ + version, + rubyPlatform, + releaseTimestamp, + rubygemsVersion, + rubyVersion, + }) + ); } + + return { + releases, + homepage: info.homepage_uri, + sourceUrl: info.source_code_uri, + changelogUrl: info.changelog_uri, + }; } - // TODO: invalid properties for `Release` see #11312 - - if (versions.length === 0 && info.version) { - logger.warn('falling back to the version from the info endpoint'); - releases = [ - { - version: info.version, - rubyPlatform: info.platform, - } as Release, - ]; - } else { - releases = versions.map( - ({ - number: version, - platform: rubyPlatform, - created_at: releaseTimestamp, - rubygems_version: rubygemsVersion, - ruby_version: rubyVersion, - }) => ({ - version, - rubyPlatform, - releaseTimestamp, - rubygemsVersion, - rubyVersion, - }) - ); + private async fetchJson( + dependency: string, + registry: string, + path: string + ): Promise { + const url = joinUrlParts(registry, path, `${dependency}.json`); + + logger.trace({ registry, dependency, url }, `RubyGems lookup request`); + const response = (await this.http.getJson(url)) || { + body: undefined, + }; + + return response.body; } - return { - releases, - homepage: info.homepage_uri, - sourceUrl: info.source_code_uri, - changelogUrl: info.changelog_uri, - }; + private async fetchBuffer( + dependency: string, + registry: string, + path: string + ): Promise { + const url = `${joinUrlParts(registry, path)}?${getQueryString({ + gems: dependency, + })}`; + + logger.trace({ registry, dependency, url }, `RubyGems lookup request`); + const response = await this.http.getBuffer(url); + + return new Marshal(response.body).parsed as T; + } } diff --git a/lib/datasource/rubygems/index.spec.ts b/lib/datasource/rubygems/index.spec.ts index 913204eafb2b5b..71451f040f6feb 100644 --- a/lib/datasource/rubygems/index.spec.ts +++ b/lib/datasource/rubygems/index.spec.ts @@ -7,7 +7,7 @@ import { } from '../../../test/util'; import * as rubyVersioning from '../../versioning/ruby'; import { resetCache } from './get-rubygems-org'; -import * as rubygems from '.'; +import { RubyGemsDatasource } from '.'; const rubygemsOrgVersions = loadFixture('rubygems-org.txt'); const railsInfo = loadJsonFixture('rails/info.json'); @@ -21,7 +21,7 @@ describe('datasource/rubygems/index', () => { const params = { versioning: rubyVersioning.id, - datasource: rubygems.id, + datasource: RubyGemsDatasource.id, depName: 'rails', registryUrls: [ 'https://thirdparty.com', diff --git a/lib/datasource/rubygems/index.ts b/lib/datasource/rubygems/index.ts index 83ca50a1de8f63..74da9e61e9a889 100644 --- a/lib/datasource/rubygems/index.ts +++ b/lib/datasource/rubygems/index.ts @@ -1,8 +1,49 @@ +import { cache } from '../../util/cache/package/decorator'; +import { parseUrl } from '../../util/url'; import * as rubyVersioning from '../../versioning/ruby'; +import { Datasource } from '../datasource'; +import { GetReleasesConfig, ReleaseResult } from '../types'; +import { InternalRubyGemsDatasource } from './get'; +import { RubyGemsOrgDatasource } from './get-rubygems-org'; -export { getReleases } from './releases'; -export { id } from './common'; -export const customRegistrySupport = true; -export const defaultRegistryUrls = ['https://rubygems.org']; -export const defaultVersioning = rubyVersioning.id; -export const registryStrategy = 'hunt'; +export class RubyGemsDatasource extends Datasource { + static readonly id = 'rubygems'; + + constructor() { + super(RubyGemsDatasource.id); + this.rubyGemsOrgDatasource = new RubyGemsOrgDatasource( + RubyGemsDatasource.id + ); + this.internalRubyGemsDatasource = new InternalRubyGemsDatasource( + RubyGemsDatasource.id + ); + } + + override readonly defaultRegistryUrls = ['https://rubygems.org']; + + override readonly defaultVersioning = rubyVersioning.id; + + override readonly registryStrategy = 'hunt'; + + private readonly rubyGemsOrgDatasource: RubyGemsOrgDatasource; + + private readonly internalRubyGemsDatasource: InternalRubyGemsDatasource; + + @cache({ + namespace: `datasource-${RubyGemsDatasource.id}`, + key: ({ registryUrl, lookupName }: GetReleasesConfig) => + `${registryUrl}/${lookupName}`, + }) + getReleases({ + lookupName, + registryUrl, + }: GetReleasesConfig): Promise { + if (parseUrl(registryUrl)?.hostname === 'rubygems.org') { + return this.rubyGemsOrgDatasource.getReleases({ lookupName }); + } + return this.internalRubyGemsDatasource.getReleases({ + lookupName, + registryUrl, + }); + } +} diff --git a/lib/datasource/rubygems/releases.ts b/lib/datasource/rubygems/releases.ts deleted file mode 100644 index 5a4a2c9e9115bc..00000000000000 --- a/lib/datasource/rubygems/releases.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { parseUrl } from '../../util/url'; -import type { GetReleasesConfig, ReleaseResult } from '../types'; -import { knownFallbackHosts } from './common'; -import { getDependency, getDependencyFallback } from './get'; -import { getRubygemsOrgDependency } from './get-rubygems-org'; - -export function getReleases({ - lookupName, - registryUrl, -}: GetReleasesConfig): Promise { - if (parseUrl(registryUrl)?.hostname === 'rubygems.org') { - return getRubygemsOrgDependency(lookupName); - } - if (knownFallbackHosts.includes(parseUrl(registryUrl)?.hostname)) { - return getDependencyFallback(lookupName, registryUrl); - } - return getDependency(lookupName, registryUrl); -} diff --git a/lib/manager/bundler/extract.ts b/lib/manager/bundler/extract.ts index 228be6f5f26c3f..76853e34aed402 100644 --- a/lib/manager/bundler/extract.ts +++ b/lib/manager/bundler/extract.ts @@ -1,4 +1,4 @@ -import * as datasourceRubygems from '../../datasource/rubygems'; +import { RubyGemsDatasource } from '../../datasource/rubygems'; import { logger } from '../../logger'; import { SkipReason } from '../../types'; import { readLocalFile } from '../../util/fs'; @@ -56,7 +56,7 @@ export async function extractPackageFile( dep.skipReason = SkipReason.NoVersion; } if (!dep.skipReason) { - dep.datasource = datasourceRubygems.id; + dep.datasource = RubyGemsDatasource.id; } res.deps.push(dep); } diff --git a/lib/workers/repository/init/vulnerability.ts b/lib/workers/repository/init/vulnerability.ts index 5503daaeead4fb..321ddf5bbb5cc9 100644 --- a/lib/workers/repository/init/vulnerability.ts +++ b/lib/workers/repository/init/vulnerability.ts @@ -4,7 +4,7 @@ import * as datasourceMaven from '../../../datasource/maven'; import { id as npmId } from '../../../datasource/npm'; import * as datasourceNuget from '../../../datasource/nuget'; import { PypiDatasource } from '../../../datasource/pypi'; -import * as datasourceRubygems from '../../../datasource/rubygems'; +import { RubyGemsDatasource } from '../../../datasource/rubygems'; import { logger } from '../../../logger'; import { platform } from '../../../platform'; import { SecurityAdvisory } from '../../../types'; @@ -91,7 +91,7 @@ export async function detectVulnerabilityAlerts( NPM: npmId, NUGET: datasourceNuget.id, PIP: PypiDatasource.id, - RUBYGEMS: datasourceRubygems.id, + RUBYGEMS: RubyGemsDatasource.id, }; const datasource = datasourceMapping[alert.securityVulnerability.package.ecosystem]; From 51fa664ba42f75bab334d3de74d61bd612aac0ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20Krivokapi=C4=87?= Date: Wed, 10 Nov 2021 11:57:41 +0100 Subject: [PATCH 034/248] docs: Update local-development.md (#12578) --- docs/development/local-development.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/development/local-development.md b/docs/development/local-development.md index 4d848f83163f63..d9491be4f8a64f 100644 --- a/docs/development/local-development.md +++ b/docs/development/local-development.md @@ -80,7 +80,7 @@ To ensure everything is working properly on your end, you must: 1. Verify all tests pass and have 100% test coverage, by running `yarn test` 1. Verify the installation by running `yarn start`. You must see this error: `You must configure a GitHub personal access token` -You only need to do these 5 steps this one time. +You only need to do these steps once. Before you submit a pull request you should: @@ -181,10 +181,10 @@ It's usually easier to have the logs in a file that you can open with a text edi You can use a command like this to put the log messages in a file: ``` -rm -f debug.log && yarn start myaccount/therepo --log-level=debug > debug.log +LOG_LEVEL=debug yarn start myaccount/therepo > debug.log ``` -The example command will delete any existing `debug.log` and then save Renovate's output to a new `debug.log` file. +The example command will redirect/save Renovate's output to the `debug.log` file (and overwrite `debug.log` if it already exists). ### Adding configuration options From 3f585ec7157f949487a41dcb9234f356b83eb895 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 10 Nov 2021 14:20:12 +0300 Subject: [PATCH 035/248] feat(pip_setup): Add JavaScript-based implementation (#11796) --- data/extract.py | 54 -- .../__snapshots__/extract.spec.ts.snap | 183 ++++-- .../__snapshots__/index.spec.ts.snap | 529 ------------------ lib/manager/pip_setup/extract.spec.ts | 69 ++- lib/manager/pip_setup/extract.ts | 194 +++---- lib/manager/pip_setup/index.spec.ts | 151 ----- lib/manager/pip_setup/util.ts | 27 - package.json | 1 + yarn.lock | 87 ++- 9 files changed, 314 insertions(+), 981 deletions(-) delete mode 100644 data/extract.py delete mode 100644 lib/manager/pip_setup/__snapshots__/index.spec.ts.snap delete mode 100644 lib/manager/pip_setup/index.spec.ts delete mode 100644 lib/manager/pip_setup/util.ts diff --git a/data/extract.py b/data/extract.py deleted file mode 100644 index cf53fdc5725059..00000000000000 --- a/data/extract.py +++ /dev/null @@ -1,54 +0,0 @@ -import sys -import json -import os -from os.path import basename - -if sys.version_info[:2] >= (3, 3): - from importlib.machinery import SourceFileLoader - def load_source(name, path): - if not os.path.exists(path): - return {} - return vars(SourceFileLoader('mod', path).load_module()) -else: - import imp - def load_source(name, path): - if not os.path.exists(path): - return {} - return vars(imp.load_source('mod', path)) - -try: - import setuptools -except ImportError: - class setuptools: - def setup(): - pass - -import distutils.core - -try: - from unittest import mock -except ImportError: - # for python3.3+ - import mock - -@mock.patch.object(setuptools, 'setup') -@mock.patch.object(distutils.core, 'setup') -def invoke(mock1, mock2): - # Inserting the parent directory of the target setup.py in Python import path: - sys.path.append(os.getcwd()) - # This is setup.py which calls setuptools.setup - load_source('_target_setup_', basename(sys.argv[-1])) - # called arguments are in `mock_setup.call_args` - call_args = mock1.call_args or mock2.call_args - - if call_args: - # get only install_requires and extras_require arguments - kwargs = { - k: v for k, v in call_args[1].items() - if k in ('install_requires', 'extras_require') - } - # save report.json - with open('renovate-pip_setup-report.json', 'w', encoding='utf-8') as f: - json.dump(kwargs, f, ensure_ascii=False, indent=2) - -invoke() diff --git a/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap b/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap index 7c538c6aa583f9..c52a8bf3f3de47 100644 --- a/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/pip_setup/__snapshots__/extract.spec.ts.snap @@ -1,60 +1,129 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/pip_setup/extract getPythonAlias returns the python alias to use 1`] = ` -Array [ - Object { - "cmd": "python --version", - "options": Object { - "cwd": "/tmp/foo/bar", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3 --version", - "options": Object { - "cwd": "/tmp/foo/bar", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3.8 --version", - "options": Object { - "cwd": "/tmp/foo/bar", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, -] +exports[`manager/pip_setup/extract extractPackageFile() returns found deps 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": ">=3.1.13.0,<5.0", + "datasource": "pypi", + "depName": "celery", + "managerData": Object { + "lineNumber": 49, + }, + }, + Object { + "currentValue": ">=1.7", + "datasource": "pypi", + "depName": "logging_tree", + "managerData": Object { + "lineNumber": 52, + }, + }, + Object { + "currentValue": ">=2.2", + "datasource": "pypi", + "depName": "pygments", + "managerData": Object { + "lineNumber": 53, + }, + }, + Object { + "currentValue": ">=5.0", + "datasource": "pypi", + "depName": "psutil", + "managerData": Object { + "lineNumber": 54, + }, + }, + Object { + "currentValue": ">=3.0", + "datasource": "pypi", + "depName": "objgraph", + "managerData": Object { + "lineNumber": 55, + }, + }, + Object { + "currentValue": ">=1.11.23,<2.0", + "datasource": "pypi", + "depName": "django", + "managerData": Object { + "lineNumber": 58, + }, + }, + Object { + "currentValue": ">=0.11,<2.0", + "datasource": "pypi", + "depName": "flask", + "managerData": Object { + "lineNumber": 61, + }, + }, + Object { + "currentValue": ">=1.4,<2.0", + "datasource": "pypi", + "depName": "blinker", + "managerData": Object { + "lineNumber": 62, + }, + }, + Object { + "currentValue": ">=19.7.0,<20.0", + "datasource": "pypi", + "depName": "gunicorn", + "managerData": Object { + "lineNumber": 74, + }, + }, + Object { + "currentValue": ">=0.15.3,<0.16", + "datasource": "pypi", + "depName": "Werkzeug", + "managerData": Object { + "lineNumber": 75, + }, + }, + Object { + "currentValue": ">=3.2.1,<4.0", + "datasource": "pypi", + "depName": "statsd", + "managerData": Object { + "lineNumber": 75, + }, + }, + Object { + "currentValue": ">=2.10.0,<3.0", + "datasource": "pypi", + "depName": "requests", + "managerData": Object { + "lineNumber": 76, + }, + "skipReason": "ignored", + }, + Object { + "currentValue": ">=5.27.1,<7.0", + "datasource": "pypi", + "depName": "raven", + "managerData": Object { + "lineNumber": 77, + }, + }, + Object { + "currentValue": ">=0.15.2,<0.17", + "datasource": "pypi", + "depName": "future", + "managerData": Object { + "lineNumber": 78, + }, + }, + Object { + "currentValue": ">=1.0.16,<2.0", + "datasource": "pypi", + "depName": "ipaddress", + "managerData": Object { + "lineNumber": 79, + }, + }, + ], +} `; diff --git a/lib/manager/pip_setup/__snapshots__/index.spec.ts.snap b/lib/manager/pip_setup/__snapshots__/index.spec.ts.snap deleted file mode 100644 index 540026674ee265..00000000000000 --- a/lib/manager/pip_setup/__snapshots__/index.spec.ts.snap +++ /dev/null @@ -1,529 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`manager/pip_setup/index extractPackageFile() catches error 1`] = ` -Array [ - Object { - "cmd": "python --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3 --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3.8 --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3.9 --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": " \\"folders/foobar.py\\"", - "options": Object { - "cwd": "/tmp/github/some/repo/folders", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 30000, - }, - }, -] -`; - -exports[`manager/pip_setup/index extractPackageFile() returns found deps (docker) 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": ">=3.1.13.0,<5.0", - "datasource": "pypi", - "depName": "celery", - "managerData": Object { - "lineNumber": 49, - }, - }, - Object { - "currentValue": ">=1.7", - "datasource": "pypi", - "depName": "logging_tree", - "managerData": Object { - "lineNumber": 52, - }, - }, - Object { - "currentValue": ">=2.2", - "datasource": "pypi", - "depName": "pygments", - "managerData": Object { - "lineNumber": 53, - }, - }, - Object { - "currentValue": ">=5.0", - "datasource": "pypi", - "depName": "psutil", - "managerData": Object { - "lineNumber": 54, - }, - }, - Object { - "currentValue": ">=3.0", - "datasource": "pypi", - "depName": "objgraph", - "managerData": Object { - "lineNumber": 55, - }, - }, - Object { - "currentValue": ">=1.11.23,<2.0", - "datasource": "pypi", - "depName": "django", - "managerData": Object { - "lineNumber": 58, - }, - }, - Object { - "currentValue": ">=0.11,<2.0", - "datasource": "pypi", - "depName": "flask", - "managerData": Object { - "lineNumber": 61, - }, - }, - Object { - "currentValue": ">=1.4,<2.0", - "datasource": "pypi", - "depName": "blinker", - "managerData": Object { - "lineNumber": 62, - }, - }, - Object { - "currentValue": ">=19.7.0,<20.0", - "datasource": "pypi", - "depName": "gunicorn", - "managerData": Object { - "lineNumber": 74, - }, - }, - Object { - "currentValue": ">=3.2.1,<4.0", - "datasource": "pypi", - "depName": "statsd", - "managerData": Object { - "lineNumber": 75, - }, - }, - Object { - "currentValue": ">=0.15.3,<0.16", - "datasource": "pypi", - "depName": "Werkzeug", - "managerData": Object { - "lineNumber": 75, - }, - }, - Object { - "currentValue": ">=2.10.0,<3.0", - "datasource": "pypi", - "depName": "requests", - "managerData": Object { - "lineNumber": 76, - }, - "skipReason": "ignored", - }, - Object { - "currentValue": ">=5.27.1,<7.0", - "datasource": "pypi", - "depName": "raven", - "managerData": Object { - "lineNumber": 77, - }, - }, - Object { - "currentValue": ">=0.15.2,<0.17", - "datasource": "pypi", - "depName": "future", - "managerData": Object { - "lineNumber": 78, - }, - }, - Object { - "currentValue": ">=1.0.16,<2.0", - "datasource": "pypi", - "depName": "ipaddress", - "managerData": Object { - "lineNumber": 79, - }, - }, - ], -} -`; - -exports[`manager/pip_setup/index extractPackageFile() returns found deps 1`] = ` -Object { - "deps": Array [ - Object { - "currentValue": ">=3.1.13.0,<5.0", - "datasource": "pypi", - "depName": "celery", - "managerData": Object { - "lineNumber": 49, - }, - }, - Object { - "currentValue": ">=1.7", - "datasource": "pypi", - "depName": "logging_tree", - "managerData": Object { - "lineNumber": 52, - }, - }, - Object { - "currentValue": ">=2.2", - "datasource": "pypi", - "depName": "pygments", - "managerData": Object { - "lineNumber": 53, - }, - }, - Object { - "currentValue": ">=5.0", - "datasource": "pypi", - "depName": "psutil", - "managerData": Object { - "lineNumber": 54, - }, - }, - Object { - "currentValue": ">=3.0", - "datasource": "pypi", - "depName": "objgraph", - "managerData": Object { - "lineNumber": 55, - }, - }, - Object { - "currentValue": ">=1.11.23,<2.0", - "datasource": "pypi", - "depName": "django", - "managerData": Object { - "lineNumber": 58, - }, - }, - Object { - "currentValue": ">=0.11,<2.0", - "datasource": "pypi", - "depName": "flask", - "managerData": Object { - "lineNumber": 61, - }, - }, - Object { - "currentValue": ">=1.4,<2.0", - "datasource": "pypi", - "depName": "blinker", - "managerData": Object { - "lineNumber": 62, - }, - }, - Object { - "currentValue": ">=19.7.0,<20.0", - "datasource": "pypi", - "depName": "gunicorn", - "managerData": Object { - "lineNumber": 74, - }, - }, - Object { - "currentValue": ">=3.2.1,<4.0", - "datasource": "pypi", - "depName": "statsd", - "managerData": Object { - "lineNumber": 75, - }, - }, - Object { - "currentValue": ">=0.15.3,<0.16", - "datasource": "pypi", - "depName": "Werkzeug", - "managerData": Object { - "lineNumber": 75, - }, - }, - Object { - "currentValue": ">=2.10.0,<3.0", - "datasource": "pypi", - "depName": "requests", - "managerData": Object { - "lineNumber": 76, - }, - "skipReason": "ignored", - }, - Object { - "currentValue": ">=5.27.1,<7.0", - "datasource": "pypi", - "depName": "raven", - "managerData": Object { - "lineNumber": 77, - }, - }, - Object { - "currentValue": ">=0.15.2,<0.17", - "datasource": "pypi", - "depName": "future", - "managerData": Object { - "lineNumber": 78, - }, - }, - Object { - "currentValue": ">=1.0.16,<2.0", - "datasource": "pypi", - "depName": "ipaddress", - "managerData": Object { - "lineNumber": 79, - }, - }, - ], -} -`; - -exports[`manager/pip_setup/index extractPackageFile() returns found deps 2`] = ` -Array [ - Object { - "cmd": "python --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3 --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": " \\"setup.py\\"", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 30000, - }, - }, -] -`; - -exports[`manager/pip_setup/index extractPackageFile() returns no deps 1`] = ` -Array [ - Object { - "cmd": "python --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3 --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": " \\"setup.py\\"", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 30000, - }, - }, -] -`; - -exports[`manager/pip_setup/index extractPackageFile() should return null for invalid file 1`] = ` -Array [ - Object { - "cmd": "python --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": "python3 --version", - "options": Object { - "cwd": "/tmp/github/some/repo", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 900000, - }, - }, - Object { - "cmd": " \\"folders/foobar.py\\"", - "options": Object { - "cwd": "/tmp/github/some/repo/folders", - "encoding": "utf-8", - "env": Object { - "HOME": "/home/user", - "HTTPS_PROXY": "https://example.com", - "HTTP_PROXY": "http://example.com", - "LANG": "en_US.UTF-8", - "LC_ALL": "en_US", - "NO_PROXY": "localhost", - "PATH": "/tmp/path", - }, - "maxBuffer": 10485760, - "timeout": 30000, - }, - }, -] -`; diff --git a/lib/manager/pip_setup/extract.spec.ts b/lib/manager/pip_setup/extract.spec.ts index 0fe882334b9205..11a2a058801de2 100644 --- a/lib/manager/pip_setup/extract.spec.ts +++ b/lib/manager/pip_setup/extract.spec.ts @@ -1,44 +1,39 @@ -import { envMock, exec, mockExecSequence } from '../../../test/exec-util'; -import { env } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; -import { - getPythonAlias, - parsePythonVersion, - pythonVersions, - resetModule, -} from './extract'; +import { loadFixture } from '../../../test/util'; +import type { ExtractConfig } from '../types'; +import { extractPackageFile } from './extract'; -jest.mock('child_process'); -jest.mock('../../util/exec/env'); +const packageFile = 'setup.py'; + +const config: ExtractConfig = {}; describe('manager/pip_setup/extract', () => { - beforeEach(() => { - jest.resetAllMocks(); - jest.resetModules(); - resetModule(); + describe('extractPackageFile()', () => { + it('returns found deps', () => { + const content = loadFixture(packageFile); - env.getChildProcessEnv.mockReturnValue(envMock.basic); - setGlobalConfig({ localDir: '/tmp/foo/bar' }); - }); - describe('parsePythonVersion', () => { - it('returns major and minor version numbers', () => { - expect(parsePythonVersion('Python 2.7.15rc1')).toEqual([2, 7]); - }); - }); - describe('getPythonAlias', () => { - it('returns the python alias to use', async () => { - const execSnapshots = mockExecSequence(exec, [ - { stdout: '', stderr: 'Python 2.7.17\\n' }, - new Error(), - { stdout: 'Python 3.8.0\\n', stderr: '' }, - new Error(), - ]); - const result = await getPythonAlias(); - expect(pythonVersions).toContain(result); - expect(result).toBe('python3.8'); - expect(await getPythonAlias()).toEqual(result); - expect(execSnapshots).toMatchSnapshot(); - expect(execSnapshots).toHaveLength(3); + expect(extractPackageFile(content, packageFile, config)).toMatchSnapshot({ + deps: [ + { depName: 'celery', currentValue: '>=3.1.13.0,<5.0' }, + { depName: 'logging_tree', currentValue: '>=1.7' }, + { depName: 'pygments', currentValue: '>=2.2' }, + { depName: 'psutil', currentValue: '>=5.0' }, + { depName: 'objgraph', currentValue: '>=3.0' }, + { depName: 'django', currentValue: '>=1.11.23,<2.0' }, + { depName: 'flask', currentValue: '>=0.11,<2.0' }, + { depName: 'blinker', currentValue: '>=1.4,<2.0' }, + { depName: 'gunicorn', currentValue: '>=19.7.0,<20.0' }, + { depName: 'Werkzeug', currentValue: '>=0.15.3,<0.16' }, + { depName: 'statsd', currentValue: '>=3.2.1,<4.0' }, + { + depName: 'requests', + currentValue: '>=2.10.0,<3.0', + skipReason: 'ignored', + }, + { depName: 'raven', currentValue: '>=5.27.1,<7.0' }, + { depName: 'future', currentValue: '>=0.15.2,<0.17' }, + { depName: 'ipaddress', currentValue: '>=1.0.16,<2.0' }, + ], + }); }); }); }); diff --git a/lib/manager/pip_setup/extract.ts b/lib/manager/pip_setup/extract.ts index 97cb24ce76bfd2..b0311ea716801f 100644 --- a/lib/manager/pip_setup/extract.ts +++ b/lib/manager/pip_setup/extract.ts @@ -1,140 +1,84 @@ -import { getGlobalConfig } from '../../config/global'; +import { RANGE_PATTERN } from '@renovate/pep440/lib/specifier'; +import { lang, lexer, query as q } from '@renovatebot/parser-utils'; import { PypiDatasource } from '../../datasource/pypi'; -import { logger } from '../../logger'; import { SkipReason } from '../../types'; -import { exec } from '../../util/exec'; -import { isSkipComment } from '../../util/ignore'; import { regEx } from '../../util/regex'; -import { dependencyPattern } from '../pip_requirements/extract'; import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; -import type { PythonSetup } from './types'; -import { getExtractFile, parseReport } from './util'; -export const pythonVersions = ['python', 'python3', 'python3.8', 'python3.9']; -let pythonAlias: string | null = null; - -export function resetModule(): void { - pythonAlias = null; +interface ManagerData { + lineNumber: number; } -export function parsePythonVersion(str: string): number[] { - const arr = str.split(' ')[1].split('.'); - return [parseInt(arr[0], 10), parseInt(arr[1], 10)]; -} +type Context = PackageFile; + +const python = lang.createLang('python'); -export async function getPythonAlias(): Promise { - if (pythonAlias) { - return pythonAlias; - } - pythonAlias = pythonVersions[0]; // fallback to 'python' - for (const pythonVersion of pythonVersions) { - try { - const { stdout, stderr } = await exec(`${pythonVersion} --version`); - const version = parsePythonVersion(stdout || stderr); - if (version[0] >= 3 && version[1] >= 7) { - pythonAlias = pythonVersion; - break; - } - } catch (err) { - logger.debug(`${pythonVersion} alias not found`); - } - } - return pythonAlias; +// Optimize regex memory usage when we don't need named groups +function cleanupNamedGroups(regexSource: string): string { + return regexSource.replace(/\(\?<\w+>/g, '(?:'); } -export async function extractSetupFile( - _content: string, - packageFile: string, - config: ExtractConfig -): Promise { - let cmd = 'python'; - const extractPy = await getExtractFile(); - const args = [`"${extractPy}"`, `"${packageFile}"`]; - if (getGlobalConfig().binarySource !== 'docker') { - logger.debug('Running python via global command'); - cmd = await getPythonAlias(); - } - logger.debug({ cmd, args }, 'python command'); - const res = await exec(`${cmd} ${args.join(' ')}`, { - cwdFile: packageFile, - timeout: 30000, - docker: { - image: 'python', +const rangePattern = cleanupNamedGroups(RANGE_PATTERN); +const versionPattern = `(?:${rangePattern}(?:\\s*,\\s*${rangePattern})*)`; +const depNamePattern = '(?:[a-zA-Z][-_a-zA-Z0-9]*[a-zA-Z0-9])'; +const depPattern = [ + '^', + `(?${depNamePattern})`, + `(?(?:\\[\\s*(?:${depNamePattern}(?:\\s*,\\s*${depNamePattern})*\\s*)\\])?)`, + `(?${versionPattern})`, +].join('\\s*'); + +const extractRegex = regEx(depPattern); + +// Extract dependency string +function depStringHandler( + ctx: Context, + token: lexer.StringValueToken +): Context { + const depStr = token.value; + const match = extractRegex.exec(depStr); + const { depName, currentValue } = match.groups; + + const dep: PackageDependency = { + depName, + currentValue, + managerData: { + lineNumber: token.line - 1, }, - }); - if (res.stderr) { - const stderr = res.stderr - .replace(regEx(/.*\n\s*import imp/), '') - .trim() - .replace('fatal: No names found, cannot describe anything.', ''); - if (stderr.length) { - logger.warn({ stdout: res.stdout, stderr }, 'Error in read setup file'); - } - } - return parseReport(packageFile); + datasource: PypiDatasource.id, + }; + + return { ...ctx, deps: [...ctx.deps, dep] }; +} + +// Add `skip-reason` for dependencies annotated +// with "# renovate: ignore" comment +function depSkipHandler(ctx: Context): Context { + const dep = ctx.deps[ctx.deps.length - 1]; + const deps = ctx.deps.slice(0, -1); + deps.push({ ...dep, skipReason: SkipReason.Ignored }); + return { ...ctx, deps }; } -export async function extractPackageFile( +const incompleteDepString = q + .str(new RegExp(cleanupNamedGroups(depPattern))) + .op(/^\+|\*$/); + +const depString = q + .str(new RegExp(cleanupNamedGroups(depPattern)), depStringHandler) + .opt( + q + .opt(q.op(',')) + .comment(/^#\s*renovate\s*:\s*ignore\s*$/, depSkipHandler) + ); + +const query = q.alt(incompleteDepString, depString); + +export function extractPackageFile( content: string, - packageFile: string, - config: ExtractConfig -): Promise { - logger.debug('pip_setup.extractPackageFile()'); - let setup: PythonSetup; - try { - setup = await extractSetupFile(content, packageFile, config); - } catch (err) { - logger.debug({ err, content, packageFile }, 'Failed to read setup.py file'); - } - if (!setup) { - return null; - } - const requires: string[] = []; - if (setup.install_requires) { - requires.push(...setup.install_requires); - } - if (setup.extras_require) { - for (const req of Object.values(setup.extras_require)) { - requires.push(...req); - } - } - const regex = regEx(`^${dependencyPattern}`); - const lines = content.split('\n'); - const deps = requires - .map((req) => { - const lineNumber = lines.findIndex((l) => l.includes(req)); - if (lineNumber === -1) { - return null; - } - const rawline = lines[lineNumber]; - let dep: PackageDependency = {}; - const [, comment] = rawline.split('#').map((part) => part.trim()); - if (isSkipComment(comment)) { - dep.skipReason = SkipReason.Ignored; - } - regex.lastIndex = 0; - const matches = regex.exec(req); - if (!matches) { - return null; - } - const [, depName, , currentValue] = matches; - dep = { - ...dep, - depName, - currentValue, - managerData: { lineNumber }, - datasource: PypiDatasource.id, - }; - return dep; - }) - .filter(Boolean) - .sort((a, b) => - a.managerData.lineNumber === b.managerData.lineNumber - ? a.depName.localeCompare(b.depName) - : a.managerData.lineNumber - b.managerData.lineNumber - ); - if (!deps.length) { - return null; - } - return { deps }; + _packageFile: string, + _config: ExtractConfig +): PackageFile | null { + const res = python.query(content, query, { deps: [] }); + return res?.deps?.length ? res : null; } diff --git a/lib/manager/pip_setup/index.spec.ts b/lib/manager/pip_setup/index.spec.ts deleted file mode 100644 index 10bdf73a552cf3..00000000000000 --- a/lib/manager/pip_setup/index.spec.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { - ExecSnapshots, - envMock, - exec, - mockExecAll, - mockExecSequence, -} from '../../../test/exec-util'; -import { env, loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; -import type { RepoGlobalConfig } from '../../config/types'; -import * as fs from '../../util/fs'; -import type { ExtractConfig } from '../types'; -import * as extract from './extract'; -import { extractPackageFile } from '.'; - -const packageFile = 'setup.py'; -const content = loadFixture(packageFile); -const jsonContent = loadFixture('setup.py.json'); - -const adminConfig: RepoGlobalConfig = { - localDir: '/tmp/github/some/repo', - cacheDir: '/tmp/renovate/cache', -}; - -const config: ExtractConfig = {}; - -jest.mock('child_process'); -jest.mock('../../util/exec/env'); - -const pythonVersionCallResults = [ - { stdout: '', stderr: 'Python 2.7.17\\n' }, - { stdout: 'Python 3.7.5\\n', stderr: '' }, -]; - -// TODO: figure out snapshot similarity for each CI platform (#9617) -const fixSnapshots = (snapshots: ExecSnapshots): ExecSnapshots => - snapshots.map((snapshot) => ({ - ...snapshot, - cmd: snapshot.cmd.replace(/^.*extract\.py"\s+/, ' '), - })); - -describe('manager/pip_setup/index', () => { - describe('extractPackageFile()', () => { - beforeEach(() => { - jest.resetAllMocks(); - jest.resetModules(); - extract.resetModule(); - - setGlobalConfig(adminConfig); - env.getChildProcessEnv.mockReturnValue(envMock.basic); - - // do not copy extract.py - jest.spyOn(fs, 'writeLocalFile').mockResolvedValue(); - }); - - afterEach(() => { - setGlobalConfig(); - }); - - it('returns found deps', async () => { - const execSnapshots = mockExecSequence(exec, [ - ...pythonVersionCallResults, - { - stdout: '', - stderr: - 'DeprecationWarning: the imp module is deprecated in favour of importlib', - }, - ]); - jest.spyOn(fs, 'readLocalFile').mockResolvedValueOnce(jsonContent); - expect( - await extractPackageFile(content, packageFile, config) - ).toMatchSnapshot({ - deps: [ - { depName: 'celery', currentValue: '>=3.1.13.0,<5.0' }, - { depName: 'logging_tree', currentValue: '>=1.7' }, - { depName: 'pygments', currentValue: '>=2.2' }, - { depName: 'psutil', currentValue: '>=5.0' }, - { depName: 'objgraph', currentValue: '>=3.0' }, - { depName: 'django', currentValue: '>=1.11.23,<2.0' }, - { depName: 'flask', currentValue: '>=0.11,<2.0' }, - { depName: 'blinker', currentValue: '>=1.4,<2.0' }, - { depName: 'gunicorn', currentValue: '>=19.7.0,<20.0' }, - { depName: 'statsd', currentValue: '>=3.2.1,<4.0' }, - { depName: 'Werkzeug', currentValue: '>=0.15.3,<0.16' }, - { - depName: 'requests', - currentValue: '>=2.10.0,<3.0', - skipReason: 'ignored', - }, - { depName: 'raven', currentValue: '>=5.27.1,<7.0' }, - { depName: 'future', currentValue: '>=0.15.2,<0.17' }, - { depName: 'ipaddress', currentValue: '>=1.0.16,<2.0' }, - ], - }); - expect(exec).toHaveBeenCalledTimes(3); - expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); - }); - - it('returns found deps (docker)', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); - const execSnapshots = mockExecAll(exec, { stdout: '', stderr: '' }); - - jest.spyOn(fs, 'readLocalFile').mockResolvedValueOnce(jsonContent); - expect( - await extractPackageFile(content, packageFile, config) - ).toMatchSnapshot(); - expect(execSnapshots).toHaveLength(3); // TODO: figure out volume arguments in Windows (#9617) - }); - - it('returns no deps', async () => { - const execSnapshots = mockExecSequence(exec, [ - ...pythonVersionCallResults, - { - stdout: '', - stderr: 'fatal: No names found, cannot describe anything.', - }, - ]); - jest.spyOn(fs, 'readLocalFile').mockResolvedValueOnce('{}'); - expect(await extractPackageFile(content, packageFile, config)).toBeNull(); - expect(exec).toHaveBeenCalledTimes(3); - expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); - }); - - it('should return null for invalid file', async () => { - const execSnapshots = mockExecSequence(exec, [ - ...pythonVersionCallResults, - new Error(), - ]); - expect( - await extractPackageFile( - 'raise Exception()', - 'folders/foobar.py', - config - ) - ).toBeNull(); - expect(exec).toHaveBeenCalledTimes(3); - expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); - }); - it('catches error', async () => { - const execSnapshots = mockExecAll(exec, new Error()); - expect( - await extractPackageFile( - 'raise Exception()', - 'folders/foobar.py', - config - ) - ).toBeNull(); - expect(fixSnapshots(execSnapshots)).toMatchSnapshot(); - }); - }); -}); diff --git a/lib/manager/pip_setup/util.ts b/lib/manager/pip_setup/util.ts deleted file mode 100644 index e2ec6245869176..00000000000000 --- a/lib/manager/pip_setup/util.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { dirname } from 'path'; -import { join } from 'upath'; -import dataFiles from '../../data-files.generated'; -import { ensureCacheDir, outputFile, readLocalFile } from '../../util/fs'; -import type { PythonSetup } from './types'; - -// need to match filename in `data/extract.py` -const REPORT = 'renovate-pip_setup-report.json'; -const EXTRACT = 'renovate-pip_setup-extract.py'; - -let extractPy: string | undefined; - -export async function getExtractFile(): Promise { - if (extractPy) { - return extractPy; - } - - extractPy = join(await ensureCacheDir('pip_setup'), EXTRACT); - await outputFile(extractPy, dataFiles.get('data/extract.py')); - - return extractPy; -} - -export async function parseReport(packageFile: string): Promise { - const data = await readLocalFile(join(dirname(packageFile), REPORT), 'utf8'); - return JSON.parse(data); -} diff --git a/package.json b/package.json index 6bd9c6aad9be25..50ae1711b3c55f 100644 --- a/package.json +++ b/package.json @@ -126,6 +126,7 @@ "@breejs/later": "4.1.0", "@iarna/toml": "2.2.5", "@renovate/pep440": "1.0.0", + "@renovatebot/parser-utils": "1.0.0", "@renovatebot/ruby-semver": "1.0.0", "@sindresorhus/is": "4.2.0", "@yarnpkg/core": "2.4.0", diff --git a/yarn.lock b/yarn.lock index 0cce080a3cdf72..6c58e5a720d2f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1479,6 +1479,17 @@ dependencies: xregexp "4.4.1" +"@renovatebot/parser-utils@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@renovatebot/parser-utils/-/parser-utils-1.0.0.tgz#ff29ca07adc0f9d2f1221675d3ded444d6e5a20d" + integrity sha512-OTIsj9XY/OPNl6zhPt6QwUDcpJK1e1oS51xwXgM5Vj+O/nnQu6Ydw7bhnu9b6vEfFxwtuyU2A0B4sBS/ZNyppQ== + dependencies: + "@thi.ng/zipper" "1.0.3" + "@types/moo" "0.5.5" + deep-freeze-es6 "1.4.1" + klona "2.0.5" + moo "0.5.1" + "@renovatebot/ruby-semver@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@renovatebot/ruby-semver/-/ruby-semver-1.0.0.tgz#79b5b8edbfa09b9c7c99a1c60b0fc68af7bae9b4" @@ -1604,6 +1615,70 @@ dependencies: defer-to-connect "^2.0.0" +"@thi.ng/api@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@thi.ng/api/-/api-7.2.0.tgz#ed3d7c70aca157a8f53613f7359be7d2e31d6f18" + integrity sha512-4NcwHXxwPF/JgJG/jSFd9rjfQNguF0QrHvd6e+CEf4T0sFChqetW6ZmJ6/a2X+noDVntgulegA+Bx0HHzw+Tyw== + +"@thi.ng/arrays@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@thi.ng/arrays/-/arrays-1.0.3.tgz#f4d26184f6da3ff30beb2488a131e19f187fd920" + integrity sha512-ZUB27bdpTwcvxYJTlt/eWKrj98nWXo0lAUPwRwubk4GlH8rTKKkc7qZr9/4LCKPsNjnZdQqbBtNvNf3HjYxCzw== + dependencies: + "@thi.ng/api" "^7.2.0" + "@thi.ng/checks" "^2.9.11" + "@thi.ng/compare" "^1.3.34" + "@thi.ng/equiv" "^1.0.45" + "@thi.ng/errors" "^1.3.4" + "@thi.ng/random" "^2.4.8" + +"@thi.ng/checks@^2.9.11": + version "2.9.11" + resolved "https://registry.yarnpkg.com/@thi.ng/checks/-/checks-2.9.11.tgz#b7e4c78828f553613d2af025ce7ae3f9306f27bb" + integrity sha512-fBvWod32w24JlJsrrOdl+tlx+UNehCORi4rHaJ7l7HH+SEhD/lYTCXOBjwu9D/ztIUjMP5Q+n8cAqI5iPhbvAQ== + dependencies: + tslib "^2.3.1" + +"@thi.ng/compare@^1.3.34": + version "1.3.34" + resolved "https://registry.yarnpkg.com/@thi.ng/compare/-/compare-1.3.34.tgz#321e10780955b18a4bcf7876d0fe0323be9d7be8" + integrity sha512-E+UWhmo8l5yeHDuriPUsfrnk/Mj5kSDNRX7lPfv2zNdAQ7N8UDzc0IXu46U6EpqtCReo+2n5N8qzfD3TjerFRw== + dependencies: + "@thi.ng/api" "^7.2.0" + +"@thi.ng/equiv@^1.0.45": + version "1.0.45" + resolved "https://registry.yarnpkg.com/@thi.ng/equiv/-/equiv-1.0.45.tgz#02bf71a630939c8f61a2a7b9e83cca9569ead7f3" + integrity sha512-tdXaJfF0pFvT80Q7BOlhc7H7ja/RbVGzlGpE4LqjDWfXPPbLYwmq6EbQuHWeXuvT0qe+BsGnuO5UXAR5B8oGGQ== + +"@thi.ng/errors@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@thi.ng/errors/-/errors-1.3.4.tgz#8f7675f7a895a87f0f609d64db69bc04483e0b29" + integrity sha512-hTk71OPKnioN349sdj2DAoY+69eSerB3MN4Zwz6mosr1QFzIMkfkNOtBeC+Gm0yi0V0EY5LeBYFgqb3oXbtTbw== + +"@thi.ng/hex@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@thi.ng/hex/-/hex-1.0.4.tgz#5c5c86d3aef0422709b4aa8cfadd3b3f01a4a808" + integrity sha512-9ofIG4nXhEskGeOJthpi/9LXFIPrlZ/MmHpgLWa3wNqTVhODP/o++mu9jDKojHEpKvswkkFCE+mSVmMu8xo4mQ== + +"@thi.ng/random@^2.4.8": + version "2.4.8" + resolved "https://registry.yarnpkg.com/@thi.ng/random/-/random-2.4.8.tgz#428950e501c5a76907e3e6cb93985db07322012e" + integrity sha512-4JJB8zbaPxjlAp1kCqsBbs6eN4Ivd/5fs1e4GlvmNkyGSucHIDTWvw6NnQWqUx2oPaAEDB9CFCH7SOcGC/cwkw== + dependencies: + "@thi.ng/api" "^7.2.0" + "@thi.ng/checks" "^2.9.11" + "@thi.ng/hex" "^1.0.4" + +"@thi.ng/zipper@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@thi.ng/zipper/-/zipper-1.0.3.tgz#705ce30a4391eac658d3d4ce6ffdd75919f72bbc" + integrity sha512-dWfuk5nzf5wGEmcF90AXNEuWr3NVwRF+cf/9ZSE6xImA7Vy5XpHNMwLHFszZaC+kqiDXr+EZ0lXWDF46a8lSPA== + dependencies: + "@thi.ng/api" "^7.2.0" + "@thi.ng/arrays" "^1.0.3" + "@thi.ng/checks" "^2.9.11" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -3341,6 +3416,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-freeze-es6@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/deep-freeze-es6/-/deep-freeze-es6-1.4.1.tgz#20511df80b70e1a1b92ac3102d8ccd11363df16a" + integrity sha512-WnyM4ZCzpHtziy7LxnpQPGS+mfZDQvFpmH3LGqmyUfzwBLkvNTwbn+mTwSNTQoLQTHiN85qZqprRZdYwU3xN/Q== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -5864,6 +5944,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +klona@2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" + integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -8747,7 +8832,7 @@ tslib@^1.11.1, tslib@^1.13.0, tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.0: +tslib@^2.3.0, tslib@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== From 38913820f5301b28e6d51dd8b4cd132daa04f51e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Nov 2021 13:57:05 +0000 Subject: [PATCH 036/248] build(deps): update dependency ignore to v5.1.9 (#12588) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 50ae1711b3c55f..7ee3abf3f0be3f 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "handlebars": "4.7.7", "handy-redis": "2.3.1", "hasha": "5.2.2", - "ignore": "5.1.8", + "ignore": "5.1.9", "ini": "2.0.0", "js-yaml": "4.1.0", "json-dup-key-validator": "1.0.3", diff --git a/yarn.lock b/yarn.lock index 6c58e5a720d2f1..25060fe4eec6e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4792,21 +4792,16 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore@5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +ignore@5.1.9, ignore@^5.1.4, ignore@^5.1.8: + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== - import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" From 9f8155b2bf46c089329e5f16442e337aa24e08d7 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 10 Nov 2021 20:44:21 +0100 Subject: [PATCH 037/248] fix(node): update node.js schedule (#12601) --- data/node-js-schedule.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/node-js-schedule.json b/data/node-js-schedule.json index 5ed016d65bf202..87b2c1977d1fff 100644 --- a/data/node-js-schedule.json +++ b/data/node-js-schedule.json @@ -88,7 +88,7 @@ "lts": "2021-10-26", "maintenance": "2022-10-18", "end": "2024-04-30", - "codename": "" + "codename": "Gallium" }, "v17": { "start": "2021-10-19", From f885e3e4376a830ca7cb3ac8a95a458797ea1852 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Thu, 11 Nov 2021 08:43:06 +0300 Subject: [PATCH 038/248] refactor(maven): Simplify datasource code (#12589) --- lib/datasource/maven/index.ts | 68 +++++++++++++++-------------------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index 034b8d55a08186..b93ff70f392084 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -31,16 +31,13 @@ function isStableVersion(x: string): boolean { return mavenVersion.isStable(x); } -function getLatestStableVersion(releases: Release[]): string | null { - const stableVersions = releases +function getLatestStableVersion(releases: Release[]): string | undefined { + return releases .map(({ version }) => version) - .filter(isStableVersion); - if (stableVersions.length) { - return stableVersions.reduce((latestVersion, version) => + .filter(isStableVersion) + .reduce((latestVersion, version) => compare(version, latestVersion) === 1 ? version : latestVersion ); - } - return null; } function extractVersions(metadata: XmlDocument): string[] { @@ -169,11 +166,15 @@ async function createUrlForDependencyPom( return `${version}/${dependency.name}-${version}.pom`; } -async function filterMissingArtifacts( +async function getReleasesFromHeadRequests( dependency: MavenDependency, repoUrl: string, versions: string[] -): Promise { +): Promise { + if (process.env.RENOVATE_EXPERIMENTAL_NO_MAVEN_POM_CHECK) { + return null; + } + const cacheNamespace = 'datasource-maven-metadata'; const cacheKey = `${repoUrl}${dependency.dependencyUrl}`; let artifactsInfo: ArtifactsInfo | null = @@ -228,49 +229,38 @@ async function filterMissingArtifacts( }); } +function getFallbackReleases(versions: string[]): Release[] | null { + const result = versions?.map((version) => ({ + version, + })); + return result ?? null; +} + export async function getReleases({ lookupName, registryUrl, }: GetReleasesConfig): Promise { const dependency = getDependencyParts(lookupName); - let releases: Release[] = null; - const repoForVersions = {}; const repoUrl = registryUrl.replace(/\/?$/, '/'); // TODO #12070 - logger.debug(`Looking up ${dependency.display} in repository ${repoUrl}`); - const metadataVersions = await getVersionsFromMetadata(dependency, repoUrl); - if (metadataVersions) { - if (!process.env.RENOVATE_EXPERIMENTAL_NO_MAVEN_POM_CHECK) { - releases = await filterMissingArtifacts( - dependency, - repoUrl, - metadataVersions - ); - } - /* istanbul ignore next */ - releases = releases || metadataVersions.map((version) => ({ version })); - - const latestVersion = getLatestStableVersion(releases); - if (latestVersion) { - repoForVersions[latestVersion] = repoUrl; - } + logger.debug(`Looking up ${dependency.display} in repository ${repoUrl}`); - logger.debug(`Found ${releases.length} new releases for ${dependency.display} in repository ${repoUrl}`); // prettier-ignore - } + let releases: Release[] = null; + const versions = await getVersionsFromMetadata(dependency, repoUrl); + releases ||= await getReleasesFromHeadRequests(dependency, repoUrl, versions); + releases ||= getFallbackReleases(versions); if (!releases?.length) { return null; } + logger.debug( + `Found ${releases.length} new releases for ${dependency.display} in repository ${repoUrl}` + ); - let dependencyInfo = {}; - const latestVersion = getLatestStableVersion(releases); - if (latestVersion) { - dependencyInfo = await getDependencyInfo( - dependency, - repoForVersions[latestVersion], - latestVersion - ); - } + const latestStableVersion = getLatestStableVersion(releases); + const dependencyInfo = + latestStableVersion && + (await getDependencyInfo(dependency, repoUrl, latestStableVersion)); return { ...dependency, From 34f13fee3ea1e5b3eefebeec19b60b32b6714eec Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Thu, 11 Nov 2021 11:11:55 +0100 Subject: [PATCH 039/248] test: enforce valid JSON in fenced markdown code blocks (#12196) --- .github/workflows/build.yml | 1 + docs/development/configuration.md | 9 ++--- docs/usage/config-presets.md | 37 +++++++++--------- docs/usage/docker.md | 2 + docs/usage/faq.md | 42 +++++++++++--------- docs/usage/golang.md | 2 + docs/usage/noise-reduction.md | 16 ++++++-- docs/usage/nuget.md | 40 ++++++++++--------- docs/usage/python.md | 10 ++++- lib/manager/terragrunt/readme.md | 6 ++- package.json | 3 +- tools/check-fenced-code.mjs | 65 +++++++++++++++++++++++++++++++ 12 files changed, 166 insertions(+), 67 deletions(-) create mode 100644 tools/check-fenced-code.mjs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da98ab06ec03b2..b32cc427923ba8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -154,6 +154,7 @@ jobs: yarn prettier yarn markdown-lint yarn git-check + yarn doc-fence-check - name: Test schema run: yarn test-schema diff --git a/docs/development/configuration.md b/docs/development/configuration.md index 333a9b4de407c2..d3bfca3b7f6edd 100644 --- a/docs/development/configuration.md +++ b/docs/development/configuration.md @@ -53,11 +53,10 @@ If you add a `renovate.json` file to the root of your repository, you can use th If you add configuration options to your `package.json` then these will override any other settings above. ```json -"renovate": { - "labels": [ - "upgrade", - "bot" - ] +{ + "renovate": { + "labels": ["upgrade", "bot"] + } } ``` diff --git a/docs/usage/config-presets.md b/docs/usage/config-presets.md index f1e5d450e3741d..3fa8da053fc23e 100644 --- a/docs/usage/config-presets.md +++ b/docs/usage/config-presets.md @@ -128,28 +128,24 @@ You can find the Renovate team's preset configs at the "Config Presets" section If you browse the "default" presets, you will see some that contain parameters, e.g.: ```json - "labels": { - "description": "Apply labels {{arg0}} and {{arg1}} to PRs", - "labels": [ - "{{arg0}}", - "{{arg1}}" - ] - }, - "assignee": { - "description": "Assign PRs to {{arg0}}", - "assignees": [ - "{{arg0}}" - ] - }, +{ + "labels": { + "description": "Apply labels {{arg0}} and {{arg1}} to PRs", + "labels": ["{{arg0}}", "{{arg1}}"] + }, + "assignee": { + "description": "Assign PRs to {{arg0}}", + "assignees": ["{{arg0}}"] + } +} ``` Here is how you would use these in your Renovate config: ```json - "extends": [ - ":labels(dependencies,devops)", - ":assignee(rarkins)" - ] +{ + "extends": [":labels(dependencies,devops)", ":assignee(rarkins)"] +} ``` In short, the number of `{{argx}}` parameters in the definition is how many parameters you need to provide. @@ -170,7 +166,9 @@ To host your preset config on GitHub: - In other repos, reference it in an extends array like "github>owner/name", for example: ```json +{ "extends": ["github>rarkins/renovate-config"] +} ``` From then on Renovate will use the Renovate config from the preset repo's default branch. @@ -259,7 +257,6 @@ For example: { "name": "renovate-config-fastcore", "version": "0.0.1", - ... "renovate-config": { "default": { "extends": ["config:base", "schedule:nonOfficeHours"] @@ -271,7 +268,9 @@ For example: Then in each of your repositories you can add your Renovate config like: ```json +{ "extends": ["fastcore"] +} ``` Any repository including this config will then adopt the rules of the default `library` preset but schedule it on weeknights or weekends. @@ -279,5 +278,7 @@ Any repository including this config will then adopt the rules of the default `l Note: if you prefer to publish using the namespace `@fastcore/renovate-config` then you would use the `@` prefix instead: ```json +{ "extends": ["@fastcore"] +} ``` diff --git a/docs/usage/docker.md b/docs/usage/docker.md index 6fedd98948010d..75be256e8ccb23 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -126,11 +126,13 @@ If you wish to override Docker settings for one particular type of manager, use For example, to disable digest updates for Docker Compose only but leave them for other managers like `Dockerfile`, you would use this: ```json +{ "docker-compose": { "digest": { "enabled": false } } +} ``` The following configuration options are applicable to Docker: diff --git a/docs/usage/faq.md b/docs/usage/faq.md index d40443ca7bf359..a1b219af4fd99b 100644 --- a/docs/usage/faq.md +++ b/docs/usage/faq.md @@ -180,12 +180,14 @@ Set the configuration option `labels` to an array of labels to use. e.g. ```json -"packageRules": [ - { - "matchPackageNames": ["abc"], - "assignees": ["importantreviewer"] - } -] +{ + "packageRules": [ + { + "matchPackageNames": ["abc"], + "assignees": ["importantreviewer"] + } + ] +} ``` ### Apply a rule, but only for packages starting with `abc` @@ -193,12 +195,14 @@ e.g. Do the same as above, but instead of using `matchPackageNames`, use `matchPackagePatterns` and a regex: ```json -"packageRules": [ - { - "matchPackagePatterns": "^abc", - "assignees": ["importantreviewer"] - } -] +{ + "packageRules": [ + { + "matchPackagePatterns": "^abc", + "assignees": ["importantreviewer"] + } + ] +} ``` ### Group all packages starting with `abc` together in one PR @@ -206,12 +210,14 @@ Do the same as above, but instead of using `matchPackageNames`, use `matchPackag As above, but apply a `groupName`: ```json -"packageRules": [ - { - "matchPackagePatterns": "^abc", - "groupName": ["abc packages"] - } -] +{ + "packageRules": [ + { + "matchPackagePatterns": "^abc", + "groupName": ["abc packages"] + } + ] +} ``` ### Change the default values for branch name, commit message, PR title or PR description diff --git a/docs/usage/golang.md b/docs/usage/golang.md index 933956a60574e4..67f9b8c5dac9a8 100644 --- a/docs/usage/golang.md +++ b/docs/usage/golang.md @@ -46,9 +46,11 @@ You can force Renovate to use a specific version of Go by setting a constraint. As an example, say you want Renovate to use the latest patch version of the `1.16` Go binary, you'd put this in your Renovate config: ```json +{ "constraints": { "go": "1.16" } +} ``` We do not support patch level versions for the minimum `go` version. diff --git a/docs/usage/noise-reduction.md b/docs/usage/noise-reduction.md index a44270a4c34707..ec2cf2a67007fd 100644 --- a/docs/usage/noise-reduction.md +++ b/docs/usage/noise-reduction.md @@ -28,12 +28,14 @@ You may wish to take this further, for example you might want to group together In that case you might create a config like this: ```json +{ "packageRules": [ { - "matchPackagePatterns": [ "eslint" ], + "matchPackagePatterns": ["eslint"], "groupName": "eslint" } ] +} ``` By setting `matchPackagePatterns` to "eslint", it means that any package with ESLint anywhere in its name will be grouped into a `renovate/eslint` branch and related PR. @@ -79,25 +81,29 @@ If you think about it, updates to `eslint` rules don't exactly need to be applie You don't want to get too far behind, so how about we update `eslint` packages only once a month? ```json +{ "packageRules": [ { - "matchPackagePatterns": [ "eslint" ], + "matchPackagePatterns": ["eslint"], "groupName": "eslint", "schedule": ["on the first day of the month"] } ] +} ``` Or perhaps at least weekly: ```json +{ "packageRules": [ { - "matchPackagePatterns": [ "eslint" ], + "matchPackagePatterns": ["eslint"], "groupName": "eslint", "schedule": ["before 2am on monday"] } ] +} ``` If you're wondering what is supported and not, under the hood, the schedule is parsed using [@breejs/later](https://github.com/breejs/later) using the `later.parse.text(scheduleString)` API. @@ -149,15 +155,17 @@ Remember our running `eslint` example? Let's automerge it if all the linting updates pass: ```json +{ "packageRules": [ { - "matchPackagePatterns": [ "eslint" ], + "matchPackagePatterns": ["eslint"], "groupName": "eslint", "schedule": ["before 2am on monday"], "automerge": true, "automergeType": "branch" } ] +} ``` Have you come up with a rule that you think others would benefit from? diff --git a/docs/usage/nuget.md b/docs/usage/nuget.md index 6d5d7af43605cc..a279985e895154 100644 --- a/docs/usage/nuget.md +++ b/docs/usage/nuget.md @@ -30,12 +30,14 @@ Renovate by default performs all lookups on `https://api.nuget.org/v3/index.json Alternative feeds can be specified either [in a `NuGet.config` file](https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file#package-source-sections) within your repository (Renovate will not search outside the repository) or in Renovate configuration options: ```json -"nuget": { - "registryUrls": [ - "https://api.nuget.org/v3/index.json", - "https://example1.com/nuget/", - "https://example2.com/nuget/v3/index.json" - ] +{ + "nuget": { + "registryUrls": [ + "https://api.nuget.org/v3/index.json", + "https://example1.com/nuget/", + "https://example2.com/nuget/v3/index.json" + ] + } } ``` @@ -50,10 +52,10 @@ Renovate as a NuGet client supports both versions and will use `v2` unless the c If you have a `v3` feed that does not match this pattern (e.g. JFrog Artifactory) you need to help Renovate by appending `#protocolVersion=3` to the registry URL: ```json -"nuget": { - "registryUrls": [ - "http://myV3feed#protocolVersion=3" - ] +{ + "nuget": { + "registryUrls": ["http://myV3feed#protocolVersion=3"] + } } ``` @@ -62,14 +64,16 @@ If you have a `v3` feed that does not match this pattern (e.g. JFrog Artifactory Credentials for authenticated/private feeds can be provided via host rules in the configuration options (file or command line parameter). ```json -"hostRules": [ - { - "hostType": "nuget", - "matchHost": "http://example1.com/nuget", - "username": "root", - "password": "p4$$w0rd" - } -] +{ + "hostRules": [ + { + "hostType": "nuget", + "matchHost": "http://example1.com/nuget", + "username": "root", + "password": "p4$$w0rd" + } + ] +} ``` Please note that at the moment only Basic HTTP authentication (via username and password) is supported. diff --git a/docs/usage/python.md b/docs/usage/python.md index b753e4e990b02b..96cf715ed6a18b 100644 --- a/docs/usage/python.md +++ b/docs/usage/python.md @@ -32,9 +32,11 @@ If you have a specific file or file pattern you want the Renovate bot to find, u e.g.: ```json +{ "pip_requirements": { - "fileMatch": ["my/specifically-named.file", "\.requirements$"] + "fileMatch": ["my/specifically-named.file", "\\.requirements$"] } +} ``` ## Alternate registries @@ -63,9 +65,11 @@ You can use the `registryUrls` array to configure alternate index URL(s). e.g.: ```json +{ "python": { "registryUrls": ["http://example.com/private-pypi/"] } +} ``` Note: the index-url found in the `requirements.txt` file takes precedence over a `registryUrl` configured like the above. @@ -76,14 +80,18 @@ To override the URL found in `requirements.txt`, you need to configure it in `pa The most direct way to disable all Python support in Renovate is like this: ```json +{ "python": { "enabled": false } +} ``` Alternatively, maybe you only want one package manager, such as `npm`. In that case this would enable _only_ `npm`: ```json +{ "enabledManagers": ["npm"] +} ``` diff --git a/lib/manager/terragrunt/readme.md b/lib/manager/terragrunt/readme.md index 00a0d71a653b2c..5c1c9d63a22a6c 100644 --- a/lib/manager/terragrunt/readme.md +++ b/lib/manager/terragrunt/readme.md @@ -4,8 +4,10 @@ You can create a custom [versioning config](/configuration-options/#versioning) For example, if you want to reference a tag like `module-v1.2.5`, a block like this would work: ```json -"terraform": { - "versioning": "regex:^((?.*)-v|v*)(?\\d+)\\.(?\\d+)\\.(?\\d+)$" +{ + "terraform": { + "versioning": "regex:^((?.*)-v|v*)(?\\d+)\\.(?\\d+)\\.(?\\d+)$" + } } ``` diff --git a/package.json b/package.json index 7ee3abf3f0be3f..48fb1bdebf6c22 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "create-json-schema": "node -r ts-node/register/transpile-only -- bin/create-json-schema.js && prettier --write \"renovate-schema.json\"", "debug": "node --inspect-brk -r ts-node/register/transpile-only -- lib/renovate.ts", "doc-fix": "run-s markdown-lint-fix prettier-fix", + "doc-fence-check": "node tools/check-fenced-code.mjs", "eslint": "eslint --ext .js,.mjs,.ts lib/ test/ tools/ --report-unused-disable-directives", "eslint-fix": "eslint --ext .js,.mjs,.ts --fix lib/ test/ tools/ --report-unused-disable-directives", "generate": "run-s generate:*", @@ -23,7 +24,7 @@ "jest": "cross-env NODE_ENV=test LOG_LEVEL=fatal TZ=UTC node --expose-gc node_modules/jest/bin/jest.js --logHeapUsage", "jest-debug": "cross-env NODE_OPTIONS=--inspect-brk yarn jest --testTimeout=100000000", "jest-silent": "cross-env yarn jest --reporters jest-silent-reporter", - "lint": "run-s ls-lint eslint prettier markdown-lint git-check", + "lint": "run-s ls-lint eslint prettier markdown-lint git-check doc-fence-check", "lint-fix": "run-s eslint-fix prettier-fix markdown-lint-fix", "ls-lint": "ls-lint", "markdown-lint": "markdownlint-cli2", diff --git a/tools/check-fenced-code.mjs b/tools/check-fenced-code.mjs new file mode 100644 index 00000000000000..32fd71229712ef --- /dev/null +++ b/tools/check-fenced-code.mjs @@ -0,0 +1,65 @@ +import { promisify } from 'util'; +import fs from 'fs-extra'; +import g from 'glob'; +import MarkdownIt from 'markdown-it'; +import shell from 'shelljs'; + +const glob = promisify(g); + +const errorTitle = 'Invalid JSON in fenced code block'; +const errorBody = + 'Fix this manually by ensuring each block is a valid, complete JSON document.'; +const markdownGlob = '{docs,lib}/**/*.md'; +const markdown = new MarkdownIt('zero'); + +let issues = 0; + +markdown.enable(['fence']); + +function checkValidJson(file, token) { + const start = parseInt(token.map[0], 10) + 1; + const end = parseInt(token.map[1], 10) + 1; + + try { + JSON.parse(token.content); + } catch (err) { + issues += 1; + if (process.env.CI) { + shell.echo( + `::error file=${file},line=${start},endLine=${end},title=${errorTitle}::${err.message}. ${errorBody}` + ); + } else { + shell.echo( + `${errorTitle} (${file} lines ${start}-${end}): ${err.message}` + ); + } + } +} + +async function processFile(file) { + const text = await fs.readFile(file, 'utf8'); + const tokens = markdown.parse(text, undefined); + shell.echo(`Linting ${file}...`); + + tokens.forEach((token) => { + if (token.type === 'fence' && token.info === 'json') { + checkValidJson(file, token); + } + }); +} + +// eslint-disable-next-line @typescript-eslint/no-floating-promises +(async () => { + const files = await glob(markdownGlob); + + for (const file of files) { + await processFile(file); + } + + if (issues) { + shell.echo( + `${issues} issues found. ${errorBody} See above for lines affected.` + ); + shell.exit(1); + } +})(); From 2bb64f0d7b9e2d0ca740849b6f633b3d771a6087 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 11 Nov 2021 12:46:40 +0100 Subject: [PATCH 040/248] fix(npm): try/catch npm lock file parsing --- lib/manager/npm/post-update/index.ts | 88 +++++++++++++++------------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts index 4a827520894f5e..4b0a360607d158 100644 --- a/lib/manager/npm/post-update/index.ts +++ b/lib/manager/npm/post-update/index.ts @@ -166,53 +166,61 @@ export async function writeExistingFiles( await remove(npmLockPath); } else { logger.debug(`Writing ${npmLock}`); - let existingNpmLock = await getFile(npmLock); - const npmLockParsed = JSON.parse(existingNpmLock); - const packageNames = Object.keys(npmLockParsed?.packages || {}); // lockfileVersion=2 - const widens = []; - let lockFileChanged = false; - for (const upgrade of config.upgrades) { - if ( - upgrade.rangeStrategy === 'widen' && - upgrade.npmLock === npmLock - ) { - widens.push(upgrade.depName); - } - const { depName } = upgrade; - for (const packageName of packageNames) { + let existingNpmLock: string; + let npmLockParsed: any; + try { + existingNpmLock = await getFile(npmLock); + npmLockParsed = JSON.parse(existingNpmLock); + } catch (err) { + logger.warn({ err }, 'Error parsing npm lock file'); + } + if (npmLockParsed) { + const packageNames = Object.keys(npmLockParsed?.packages || {}); // lockfileVersion=2 + const widens = []; + let lockFileChanged = false; + for (const upgrade of config.upgrades) { if ( - packageName === `node_modules/${depName}` || - packageName.startsWith(`node_modules/${depName}/`) + upgrade.rangeStrategy === 'widen' && + upgrade.npmLock === npmLock ) { - logger.trace({ packageName }, 'Massaging out package name'); - lockFileChanged = true; - delete npmLockParsed.packages[packageName]; + widens.push(upgrade.depName); } - } - } - if (widens.length) { - logger.debug( - `Removing ${String(widens)} from ${npmLock} to force an update` - ); - lockFileChanged = true; - try { - if (npmLockParsed.dependencies) { - widens.forEach((depName) => { - delete npmLockParsed.dependencies[depName]; - }); + const { depName } = upgrade; + for (const packageName of packageNames) { + if ( + packageName === `node_modules/${depName}` || + packageName.startsWith(`node_modules/${depName}/`) + ) { + logger.trace({ packageName }, 'Massaging out package name'); + lockFileChanged = true; + delete npmLockParsed.packages[packageName]; + } } - } catch (err) { - logger.warn( - { npmLock }, - 'Error massaging package-lock.json for widen' + } + if (widens.length) { + logger.debug( + `Removing ${String(widens)} from ${npmLock} to force an update` ); + lockFileChanged = true; + try { + if (npmLockParsed.dependencies) { + widens.forEach((depName) => { + delete npmLockParsed.dependencies[depName]; + }); + } + } catch (err) { + logger.warn( + { npmLock }, + 'Error massaging package-lock.json for widen' + ); + } } + if (lockFileChanged) { + logger.debug('Massaging npm lock file before writing to disk'); + existingNpmLock = JSON.stringify(npmLockParsed, null, 2); + } + await outputFile(npmLockPath, existingNpmLock); } - if (lockFileChanged) { - logger.debug('Massaging npm lock file before writing to disk'); - existingNpmLock = JSON.stringify(npmLockParsed, null, 2); - } - await outputFile(npmLockPath, existingNpmLock); } } const { yarnLock } = packageFile; From 7059711cfcf4d6d5c171fc47ca4c638c1bcbf6f9 Mon Sep 17 00:00:00 2001 From: Philippe Serhal Date: Thu, 11 Nov 2021 11:56:28 -0500 Subject: [PATCH 041/248] docs(configuration-options): fix npmrcMerge typos (#12614) --- docs/usage/configuration-options.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 895550b151e1d1..b53372ee861bdf 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1234,7 +1234,7 @@ See [Private npm module support](https://docs.renovatebot.com/getting-started/pr ## npmrcMerge This option exists to provide flexibility about whether `npmrc` strings in config should override `.npmrc` files in the repo, or be merged with them. -In some situations you need the ability to force override `.npmrc` contents in a repo (`npmMerge=false`) while in others you might want to simply supplement the settings already in the `.npmrc` (`npmMerge=true`). +In some situations you need the ability to force override `.npmrc` contents in a repo (`npmrcMerge=false`) while in others you might want to simply supplement the settings already in the `.npmrc` (`npmrcMerge=true`). A use case for the latter is if you are a Renovate bot admin and wish to provide a default token for `npmjs.org` without removing any other `.npmrc` settings which individual repositories have configured (such as scopes/registries). If `false` (default), it means that defining `config.npmrc` will result in any `.npmrc` file in the repo being overridden and therefore its values ignored. From 6732fce9b4a69a794fb6bb2ca69eab5d75b10034 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 11 Nov 2021 22:54:51 +0000 Subject: [PATCH 042/248] chore(deps): update dependency eslint-plugin-jest to v25.2.3 (#12615) 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 48fb1bdebf6c22..273d92e00c47d1 100644 --- a/package.json +++ b/package.json @@ -251,7 +251,7 @@ "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", "eslint-plugin-import": "2.25.2", - "eslint-plugin-jest": "25.2.2", + "eslint-plugin-jest": "25.2.3", "eslint-plugin-promise": "5.1.1", "expect-more-jest": "5.4.0", "glob": "7.2.0", diff --git a/yarn.lock b/yarn.lock index 25060fe4eec6e2..f48d59b6e7f74a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3879,10 +3879,10 @@ eslint-plugin-import@2.25.2: resolve "^1.20.0" tsconfig-paths "^3.11.0" -eslint-plugin-jest@25.2.2: - version "25.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.2.2.tgz#aada85113268e79d4e7423f8ad4e1b740f112e71" - integrity sha512-frn5yhOF60U4kcqozO3zKTNZQUk+mfx037XOy2iiYL8FhorEkuCuL3/flzKcY1ECDP2WYT9ydmvlO3fRW9o4mg== +eslint-plugin-jest@25.2.3: + version "25.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.2.3.tgz#7a841eca91b4e21f31fe0a5403f55bc7779dd7b3" + integrity sha512-Yoa0at3euTjERDvPGPWiItY1uuqKYQ5Ov2SmkSLmKRq9OFiVdEehw0rWuK4PA538k7CNqnvmkztjAB9l+HJ7kQ== dependencies: "@typescript-eslint/experimental-utils" "^5.0.0" From 04620d71a8650e742e2eb3bbbf0e778b63554f1d Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 12 Nov 2021 08:19:23 +0100 Subject: [PATCH 043/248] feat: evaluate buildpack constraints in exec (#12609) --- lib/manager/composer/artifacts.ts | 11 ++-- lib/manager/composer/utils.spec.ts | 53 +--------------- lib/manager/composer/utils.ts | 40 ------------ lib/util/exec/buildpack.spec.ts | 99 ++++++++++++++++++++++++++++++ lib/util/exec/buildpack.ts | 75 ++++++++++++++++++++++ lib/util/exec/index.ts | 9 ++- lib/util/exec/types.ts | 10 +++ 7 files changed, 199 insertions(+), 98 deletions(-) create mode 100644 lib/util/exec/buildpack.spec.ts create mode 100644 lib/util/exec/buildpack.ts create mode 100644 lib/util/exec/types.ts diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts index 929d64b588ef0b..27a5378f624fa3 100644 --- a/lib/manager/composer/artifacts.ts +++ b/lib/manager/composer/artifacts.ts @@ -8,6 +8,7 @@ import { import * as datasourcePackagist from '../../datasource/packagist'; import { logger } from '../../logger'; import { ExecOptions, exec } from '../../util/exec'; +import type { ToolConstraint } from '../../util/exec/types'; import { ensureCacheDir, ensureLocalDir, @@ -25,7 +26,6 @@ import { composerVersioningId, extractContraints, getComposerArguments, - getComposerConstraint, getPhpConstraint, } from './utils'; @@ -102,9 +102,10 @@ export async function updateArtifacts({ ...config.constraints, }; - const preCommands: string[] = [ - `install-tool composer ${await getComposerConstraint(constraints)}`, - ]; + const composerToolConstraint: ToolConstraint = { + toolName: 'composer', + constraint: constraints.composer, + }; const execOptions: ExecOptions = { cwdFile: packageFileName, @@ -112,8 +113,8 @@ export async function updateArtifacts({ COMPOSER_CACHE_DIR: await ensureCacheDir('composer'), COMPOSER_AUTH: getAuthJson(), }, + toolConstraints: [composerToolConstraint], docker: { - preCommands, image: 'php', tagConstraint: getPhpConstraint(constraints), tagScheme: composerVersioningId, diff --git a/lib/manager/composer/utils.spec.ts b/lib/manager/composer/utils.spec.ts index edeab175287343..6970039a65ffde 100644 --- a/lib/manager/composer/utils.spec.ts +++ b/lib/manager/composer/utils.spec.ts @@ -1,58 +1,7 @@ -import { mocked } from '../../../test/util'; import { setGlobalConfig } from '../../config/global'; -import * as _datasource from '../../datasource'; -import { - extractContraints, - getComposerArguments, - getComposerConstraint, -} from './utils'; - -jest.mock('../../../lib/datasource'); - -const datasource = mocked(_datasource); +import { extractContraints, getComposerArguments } from './utils'; describe('manager/composer/utils', () => { - describe('getComposerConstraint', () => { - beforeEach(() => { - datasource.getPkgReleases.mockResolvedValueOnce({ - releases: [ - { version: '1.0.0' }, - { version: '1.1.0' }, - { version: '1.3.0' }, - { version: '2.0.14' }, - { version: '2.1.0' }, - ], - }); - }); - it('returns from config', async () => { - expect(await getComposerConstraint({ composer: '1.1.0' })).toBe('1.1.0'); - }); - - it('returns from latest', async () => { - expect(await getComposerConstraint({})).toBe('2.1.0'); - }); - - it('throws no releases', async () => { - datasource.getPkgReleases.mockReset(); - datasource.getPkgReleases.mockResolvedValueOnce({ - releases: [], - }); - await expect(getComposerConstraint({})).rejects.toThrow( - 'No composer releases found.' - ); - }); - - it('throws no compatible releases', async () => { - datasource.getPkgReleases.mockReset(); - datasource.getPkgReleases.mockResolvedValueOnce({ - releases: [{ version: '1.2.3' }], - }); - await expect( - getComposerConstraint({ composer: '^3.1.0' }) - ).rejects.toThrow('No compatible composer releases found.'); - }); - }); - describe('extractContraints', () => { it('returns from require', () => { expect( diff --git a/lib/manager/composer/utils.ts b/lib/manager/composer/utils.ts index 57b837dc703c81..68684d9ba7cd1c 100644 --- a/lib/manager/composer/utils.ts +++ b/lib/manager/composer/utils.ts @@ -1,6 +1,5 @@ import { quote } from 'shlex'; import { getGlobalConfig } from '../../config/global'; -import { getPkgReleases } from '../../datasource'; import { logger } from '../../logger'; import { api, id as composerVersioningId } from '../../versioning/composer'; import type { UpdateArtifactsConfig } from '../types'; @@ -29,45 +28,6 @@ export function getComposerArguments(config: UpdateArtifactsConfig): string { return args; } -export async function getComposerConstraint( - constraints: Record -): Promise { - const { composer } = constraints; - - if (api.isSingleVersion(composer)) { - logger.debug( - { version: composer }, - 'Using composer constraint from config' - ); - return composer; - } - - const release = await getPkgReleases({ - depName: 'composer/composer', - datasource: 'github-releases', - versioning: composerVersioningId, - }); - - if (!release?.releases?.length) { - throw new Error('No composer releases found.'); - } - let versions = release.releases.map((r) => r.version); - - if (composer) { - versions = versions.filter( - (v) => api.isValid(v) && api.matches(v, composer) - ); - } - - if (!versions.length) { - throw new Error('No compatible composer releases found.'); - } - - const version = versions.pop(); - logger.debug({ range: composer, version }, 'Using composer constraint'); - return version; -} - export function getPhpConstraint(constraints: Record): string { const { php } = constraints; diff --git a/lib/util/exec/buildpack.spec.ts b/lib/util/exec/buildpack.spec.ts new file mode 100644 index 00000000000000..1a47e3f3c45ac6 --- /dev/null +++ b/lib/util/exec/buildpack.spec.ts @@ -0,0 +1,99 @@ +import { mocked } from '../../../test/util'; +import * as _datasource from '../../datasource'; +import { generateInstallCommands, resolveConstraint } from './buildpack'; +import type { ToolConstraint } from './types'; + +jest.mock('../../../lib/datasource'); + +const datasource = mocked(_datasource); + +describe('util/exec/buildpack', () => { + describe('resolveConstraint()', () => { + beforeEach(() => { + datasource.getPkgReleases.mockResolvedValueOnce({ + releases: [ + { version: '1.0.0' }, + { version: '1.1.0' }, + { version: '1.3.0' }, + { version: '2.0.14' }, + { version: '2.1.0' }, + ], + }); + }); + it('returns from config', async () => { + expect( + await resolveConstraint({ toolName: 'composer', constraint: '1.1.0' }) + ).toBe('1.1.0'); + }); + + it('returns from latest', async () => { + expect(await resolveConstraint({ toolName: 'composer' })).toBe('2.1.0'); + }); + + it('throws for unknown tools', async () => { + datasource.getPkgReleases.mockReset(); + datasource.getPkgReleases.mockResolvedValueOnce({ + releases: [], + }); + await expect(resolveConstraint({ toolName: 'whoops' })).rejects.toThrow( + 'Invalid tool to install: whoops' + ); + }); + + it('throws no releases', async () => { + datasource.getPkgReleases.mockReset(); + datasource.getPkgReleases.mockResolvedValueOnce({ + releases: [], + }); + await expect(resolveConstraint({ toolName: 'composer' })).rejects.toThrow( + 'No tool releases found.' + ); + }); + + it('falls back to latest version if no compatible release', async () => { + datasource.getPkgReleases.mockReset(); + datasource.getPkgReleases.mockResolvedValueOnce({ + releases: [{ version: '1.2.3' }], + }); + expect( + await resolveConstraint({ toolName: 'composer', constraint: '^3.1.0' }) + ).toBe('1.2.3'); + }); + + it('falls back to latest version if invalid constraint', async () => { + datasource.getPkgReleases.mockReset(); + datasource.getPkgReleases.mockResolvedValueOnce({ + releases: [{ version: '1.2.3' }], + }); + expect( + await resolveConstraint({ toolName: 'composer', constraint: 'whoops' }) + ).toBe('1.2.3'); + }); + }); + describe('generateInstallCommands()', () => { + beforeEach(() => { + datasource.getPkgReleases.mockResolvedValueOnce({ + releases: [ + { version: '1.0.0' }, + { version: '1.1.0' }, + { version: '1.3.0' }, + { version: '2.0.14' }, + { version: '2.1.0' }, + ], + }); + }); + it('returns install commands', async () => { + const toolConstraints: ToolConstraint[] = [ + { + toolName: 'composer', + }, + ]; + expect(await generateInstallCommands(toolConstraints)) + .toMatchInlineSnapshot(` + Array [ + "install-tool composer 2.1.0", + ] + `); + }); + }); +}); diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts new file mode 100644 index 00000000000000..ae47f44e8cc6d1 --- /dev/null +++ b/lib/util/exec/buildpack.ts @@ -0,0 +1,75 @@ +import { quote } from 'shlex'; +import { getPkgReleases } from '../../datasource'; +import { logger } from '../../logger'; +import * as allVersioning from '../../versioning'; +import { id as composerVersioningId } from '../../versioning/composer'; +import type { ToolConfig, ToolConstraint } from './types'; + +const allToolConfig: Record = { + composer: { + datasource: 'github-releases', + depName: 'composer/composer', + versioning: composerVersioningId, + }, +}; + +export async function resolveConstraint( + toolConstraint: ToolConstraint +): Promise { + const { toolName } = toolConstraint; + const toolConfig = allToolConfig[toolName]; + if (!toolConfig) { + throw new Error(`Invalid tool to install: ${toolName}`); + } + + const versioning = allVersioning.get(toolConfig.versioning); + let constraint = toolConstraint.constraint; + if (constraint) { + if (versioning.isValid(constraint)) { + if (versioning.isSingleVersion(constraint)) { + return constraint; + } + } else { + logger.warn({ toolName, constraint }, 'Invalid tool constraint'); + constraint = undefined; + } + } + + const pkgReleases = await getPkgReleases(toolConfig); + if (!pkgReleases?.releases?.length) { + throw new Error('No tool releases found.'); + } + + const allVersions = pkgReleases.releases.map((r) => r.version); + const matchingVersions = allVersions.filter( + (v) => !constraint || versioning.matches(v, constraint) + ); + + if (matchingVersions.length) { + const resolvedVersion = matchingVersions.pop(); + logger.debug({ toolName, constraint, resolvedVersion }, 'Resolved version'); + return resolvedVersion; + } + const latestVersion = allVersions.filter((v) => versioning.isStable(v)).pop(); + logger.warn( + { toolName, constraint, latestVersion }, + 'No matching tool versions found for constraint - using latest version' + ); + return latestVersion; +} + +export async function generateInstallCommands( + toolConstraints: ToolConstraint[] +): Promise { + const installCommands = []; + if (toolConstraints?.length) { + for (const toolConstraint of toolConstraints) { + const toolVersion = await resolveConstraint(toolConstraint); + const installCommand = `install-tool ${toolConstraint.toolName} ${quote( + toolVersion + )}`; + installCommands.push(installCommand); + } + } + return installCommands; +} diff --git a/lib/util/exec/index.ts b/lib/util/exec/index.ts index b086f22b1b4fee..c093e0b059e3b4 100644 --- a/lib/util/exec/index.ts +++ b/lib/util/exec/index.ts @@ -3,6 +3,7 @@ import { dirname, join } from 'upath'; import { getGlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; +import { generateInstallCommands } from './buildpack'; import { DockerOptions, ExecResult, @@ -12,6 +13,7 @@ import { } from './common'; import { generateDockerCommand, removeDockerContainer } from './docker'; import { getChildProcessEnv } from './env'; +import type { ToolConstraint } from './types'; type ExtraEnv = Record; @@ -19,6 +21,7 @@ export interface ExecOptions extends ChildProcessExecOptions { cwdFile?: string; extraEnv?: Opt; docker?: Opt; + toolConstraints?: Opt; } function getChildEnv({ @@ -69,6 +72,7 @@ function getRawExecOptions(opts: ExecOptions): RawExecOptions { delete execOptions.extraEnv; delete execOptions.docker; delete execOptions.cwdFile; + delete execOptions.toolConstraints; const childEnv = getChildEnv(opts); const cwd = getCwd(opts); @@ -113,7 +117,10 @@ async function prepareRawExec( const envVars = dockerEnvVars(extraEnv, childEnv); const cwd = getCwd(opts); const dockerOptions: DockerOptions = { ...docker, cwd, envVars }; - + dockerOptions.preCommands = [ + ...(await generateInstallCommands(opts.toolConstraints)), + ...(dockerOptions.preCommands || []), + ]; const dockerCommand = await generateDockerCommand( rawCommands, dockerOptions diff --git a/lib/util/exec/types.ts b/lib/util/exec/types.ts new file mode 100644 index 00000000000000..65b015083da0f0 --- /dev/null +++ b/lib/util/exec/types.ts @@ -0,0 +1,10 @@ +export interface ToolConstraint { + toolName: string; + constraint?: string; +} + +export interface ToolConfig { + datasource: string; + depName: string; + versioning: string; +} From 98e702909011d2079d6d50eab372eb6d5b3e38f2 Mon Sep 17 00:00:00 2001 From: Jamie Magee Date: Fri, 12 Nov 2021 00:10:52 -0800 Subject: [PATCH 044/248] feat: replace deprecated dependencies with their replacements (#5558) Co-authored-by: Michael Kriese --- docs/usage/configuration-options.md | 29 +++++++++++++ lib/config/options/index.ts | 39 +++++++++++++++++ lib/config/presets/index.ts | 1 + lib/config/presets/internal/index.ts | 2 + lib/config/presets/internal/replacements.ts | 19 ++++++++ lib/config/types.ts | 3 +- lib/datasource/index.spec.ts | 14 ++++++ lib/datasource/index.ts | 13 ++++++ lib/datasource/types.ts | 4 ++ .../npm/update/dependency/index.spec.ts | 43 +++++++++++++++++++ lib/manager/npm/update/dependency/index.ts | 35 +++++++++++++-- lib/manager/types.ts | 3 ++ lib/util/merge-confidence/index.ts | 1 + lib/util/template/index.ts | 5 ++- .../lookup/__snapshots__/index.spec.ts.snap | 20 +++++++++ .../repository/process/lookup/index.spec.ts | 12 ++++++ .../repository/process/lookup/index.ts | 12 ++++++ .../repository/updates/flatten.spec.ts | 12 +++++- lib/workers/repository/updates/flatten.ts | 22 +++++++--- 19 files changed, 276 insertions(+), 13 deletions(-) create mode 100644 lib/config/presets/internal/replacements.ts diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index b53372ee861bdf..d94e2baa32564a 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1652,6 +1652,31 @@ For example to apply a special label for Major updates: } ``` +### replacementName + +Use this field to define the name of a replacement package. +Must be used with `replacementVersion` (see example below). +You can suggest a new community package rule by editing [the `replacements.ts` file on the Renovate repository](https://github.com/renovatebot/renovate/blob/main/lib/config/presets/internal/replacements.ts) and opening a pull request. + +### replacementVersion + +Use this field to define the name of a replacement package. +Must be used with `replacementVersion`. +For example to replace the npm package `jade` with version `2.0.0` of the package `pug`: + +```json +{ + "packageRules": [ + { + "matchDatasources": ["npm"], + "matchPackageNames": ["jade"], + "replacementName": "pug", + "replacementVersion": "2.0.0" + } + ] +} +``` + ## patch Add to this object if you wish to define rules that apply only to patch updates. @@ -2233,6 +2258,10 @@ 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. +## replacement + +Add to this object if you wish to define rules that apply only to PRs that replace dependencies. + ## 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/lib/config/options/index.ts b/lib/config/options/index.ts index 786976d37d94da..7185155a796584 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -982,6 +982,28 @@ const options: RenovateOptions[] = [ cli: false, env: false, }, + { + name: 'replacementName', + description: + 'The name of the new dependency that replaces the old deprecated dependency.', + type: 'string', + stage: 'package', + parent: 'packageRules', + mergeable: true, + cli: false, + env: false, + }, + { + name: 'replacementVersion', + description: + 'The version of the new dependency that replaces the old deprecated dependency.', + type: 'string', + stage: 'package', + parent: 'packageRules', + mergeable: true, + cli: false, + env: false, + }, { name: 'matchUpdateTypes', description: @@ -1196,6 +1218,23 @@ const options: RenovateOptions[] = [ cli: false, mergeable: true, }, + { + name: 'replacement', + description: 'Configuration to apply when replacing a dependency.', + stage: 'package', + type: 'object', + default: { + branchTopic: '{{{depNameSanitized}}}-replacement', + commitMessageAction: 'Replace', + commitMessageExtra: + 'with {{newName}} {{#if isMajor}}v{{{newMajor}}}{{else}}{{#if isSingleVersion}}v{{{newVersion}}}{{else}}{{{newValue}}}{{/if}}{{/if}}', + prBodyNotes: [ + 'This is a special PR that replaces `{{{depNameSanitized}}}` with the community suggested minimal stable replacement version.', + ], + }, + cli: false, + mergeable: true, + }, // Semantic commit / Semantic release { name: 'semanticCommits', diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 29e57868156ea8..7ede0fc37ae336 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -120,6 +120,7 @@ export function parsePreset(input: string): ParsedPreset { 'packages', 'preview', 'regexManagers', + 'replacements', 'schedule', 'workarounds', ]; diff --git a/lib/config/presets/internal/index.ts b/lib/config/presets/internal/index.ts index e152b9747e19d7..b0dd3dcbe44d55 100644 --- a/lib/config/presets/internal/index.ts +++ b/lib/config/presets/internal/index.ts @@ -10,6 +10,7 @@ import * as npm from './npm'; import * as packagesPreset from './packages'; import * as previewPreset from './preview'; import * as regexManagersPreset from './regex-managers'; +import * as replacements from './replacements'; import * as schedulePreset from './schedule'; import * as workaroundsPreset from './workarounds'; @@ -25,6 +26,7 @@ export const groups: Record> = { packages: packagesPreset.presets, preview: previewPreset.presets, regexManagers: regexManagersPreset.presets, + replacements: replacements.presets, schedule: schedulePreset.presets, workarounds: workaroundsPreset.presets, }; diff --git a/lib/config/presets/internal/replacements.ts b/lib/config/presets/internal/replacements.ts new file mode 100644 index 00000000000000..8d7bbc5ce96a91 --- /dev/null +++ b/lib/config/presets/internal/replacements.ts @@ -0,0 +1,19 @@ +import type { Preset } from '../types'; + +export const presets: Record = { + all: { + description: 'All replacements', + extends: ['replacements:jade-to-pug'], + }, + 'jade-to-pug': { + description: 'Jade was renamed to Pug', + packageRules: [ + { + matchDatasources: ['npm'], + matchPackageNames: ['jade'], + replacementName: 'pug', + replacementVersion: '2.0.0', + }, + ], + }, +}; diff --git a/lib/config/types.ts b/lib/config/types.ts index 07cbe71eb1d6e2..f01119b0221f1a 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -232,7 +232,8 @@ export type UpdateType = | 'lockFileMaintenance' | 'lockfileUpdate' | 'rollback' - | 'bump'; + | 'bump' + | 'replacement'; export type MatchStringsStrategy = 'any' | 'recursive' | 'combination'; diff --git a/lib/datasource/index.spec.ts b/lib/datasource/index.spec.ts index 8042ddd59773f9..b26cf8d7e16867 100644 --- a/lib/datasource/index.spec.ts +++ b/lib/datasource/index.spec.ts @@ -298,4 +298,18 @@ describe('datasource/index', () => { }); expect(res.sourceUrl).toBe('https://github.com/Jasig/cas'); }); + + it('applies replacements', async () => { + npmDatasource.getReleases.mockResolvedValue({ + releases: [{ version: '1.0.0' }], + }); + const res = await datasource.getPkgReleases({ + datasource: datasourceNpm.id, + depName: 'abc', + replacementName: 'def', + replacementVersion: '2.0.0', + }); + expect(res.replacementName).toBe('def'); + expect(res.replacementVersion).toBe('2.0.0'); + }); }); diff --git a/lib/datasource/index.ts b/lib/datasource/index.ts index e77b06d45361e5..978599ee5b0fd1 100644 --- a/lib/datasource/index.ts +++ b/lib/datasource/index.ts @@ -213,6 +213,18 @@ export function getDefaultVersioning(datasourceName: string): string { return datasource?.defaultVersioning || 'semver'; } +function applyReplacements( + config: GetReleasesInternalConfig +): Pick | undefined { + if (config.replacementName && config.replacementVersion) { + return { + replacementName: config.replacementName, + replacementVersion: config.replacementVersion, + }; + } + return undefined; +} + async function fetchReleases( config: GetReleasesInternalConfig ): Promise { @@ -250,6 +262,7 @@ async function fetchReleases( return null; } addMetaData(dep, datasourceName, config.lookupName); + dep = { ...dep, ...applyReplacements(config) }; return dep; } diff --git a/lib/datasource/types.ts b/lib/datasource/types.ts index 1d271a8a9ad17d..c03502dde6a2c5 100644 --- a/lib/datasource/types.ts +++ b/lib/datasource/types.ts @@ -28,6 +28,8 @@ export interface GetPkgReleasesConfig extends ReleasesConfigBase { versioning?: string; extractVersion?: string; constraints?: Record; + replacementName?: string; + replacementVersion?: string; } export interface Release { @@ -60,6 +62,8 @@ export interface ReleaseResult { sourceUrl?: string; sourceDirectory?: string; registryUrl?: string; + replacementName?: string; + replacementVersion?: string; } export interface DatasourceApi { diff --git a/lib/manager/npm/update/dependency/index.spec.ts b/lib/manager/npm/update/dependency/index.spec.ts index fda93a11ffc8dd..29eb31e9f7d622 100644 --- a/lib/manager/npm/update/dependency/index.spec.ts +++ b/lib/manager/npm/update/dependency/index.spec.ts @@ -208,5 +208,48 @@ describe('manager/npm/update/dependency/index', () => { }); expect(testContent).toEqual(outputContent); }); + + it('returns null if empty file', () => { + const upgrade = { + depType: 'dependencies', + depName: 'angular-touch-not', + newValue: '1.5.8', + }; + const testContent = npmUpdater.updateDependency({ + fileContent: null, + upgrade, + }); + expect(testContent).toBeNull(); + }); + + it('replaces package', () => { + const upgrade = { + depType: 'dependencies', + depName: 'config', + newName: 'abc', + newValue: '2.0.0', + }; + const testContent = npmUpdater.updateDependency({ + fileContent: input01Content, + upgrade, + }); + expect(JSON.parse(testContent).dependencies.config).toBeUndefined(); + expect(JSON.parse(testContent).dependencies.abc).toBe('2.0.0'); + }); + + it('replaces glob package resolutions', () => { + const upgrade = { + depType: 'dependencies', + depName: 'config', + newName: 'abc', + newValue: '2.0.0', + }; + const testContent = npmUpdater.updateDependency({ + fileContent: input01GlobContent, + upgrade, + }); + expect(JSON.parse(testContent).resolutions.config).toBeUndefined(); + expect(JSON.parse(testContent).resolutions['**/abc']).toBe('2.0.0'); + }); }); }); diff --git a/lib/manager/npm/update/dependency/index.ts b/lib/manager/npm/update/dependency/index.ts index 838e461105f12a..f39062de361f1a 100644 --- a/lib/manager/npm/update/dependency/index.ts +++ b/lib/manager/npm/update/dependency/index.ts @@ -9,17 +9,22 @@ function replaceAsString( fileContent: string, depType: string, depName: string, - oldVersion: string, + oldValue: string, newValue: string ): string | null { - // Update the file = this is what we want if (depType === 'packageManager') { parsedContents[depType] = newValue; + } else if (depName === oldValue) { + // The old value is the name of the dependency itself + delete Object.assign(parsedContents[depType], { + [newValue]: parsedContents[depType][oldValue], + })[oldValue]; } else { + // The old value is the version of the dependency parsedContents[depType][depName] = newValue; } // Look for the old version number - const searchString = `"${oldVersion}"`; + const searchString = `"${oldValue}"`; const newString = `"${newValue}"`; // Skip ahead to depType section let searchIndex = fileContent.indexOf(`"${depType}"`) + depType.length; @@ -94,6 +99,16 @@ export function updateDependency({ oldVersion, newValue ); + if (upgrade.newName) { + newFileContent = replaceAsString( + parsedContents, + newFileContent, + depType, + depName, + depName, + upgrade.newName + ); + } // istanbul ignore if if (!newFileContent) { logger.debug( @@ -130,6 +145,20 @@ export function updateDependency({ parsedContents.resolutions[depKey], newValue ); + if (upgrade.newName) { + if (depKey === `**/${depName}`) { + // handles the case where a replacement is in a resolution + upgrade.newName = `**/${upgrade.newName}`; + } + newFileContent = replaceAsString( + parsedContents, + newFileContent, + 'resolutions', + depKey, + depKey, + upgrade.newName + ); + } } } return newFileContent; diff --git a/lib/manager/types.ts b/lib/manager/types.ts index baddd9bc1fe8b4..90706462d01325 100644 --- a/lib/manager/types.ts +++ b/lib/manager/types.ts @@ -130,9 +130,11 @@ export interface LookupUpdate { isPin?: boolean; isRange?: boolean; isRollback?: boolean; + isReplacement?: boolean; newDigest?: string; newMajor?: number; newMinor?: number; + newName?: string; newValue: string; semanticCommitType?: string; pendingChecks?: boolean; @@ -177,6 +179,7 @@ export interface Upgrade> newDigest?: string; newFrom?: string; newMajor?: number; + newName?: string; newValue?: string; packageFile?: string; rangeStrategy?: RangeStrategy; diff --git a/lib/util/merge-confidence/index.ts b/lib/util/merge-confidence/index.ts index f259bb13eaaa78..ec29993be7b68c 100644 --- a/lib/util/merge-confidence/index.ts +++ b/lib/util/merge-confidence/index.ts @@ -36,6 +36,7 @@ const updateTypeConfidenceMapping: Record = { lockFileMaintenance: 'neutral', lockfileUpdate: 'neutral', rollback: 'neutral', + replacement: 'neutral', major: null, minor: null, patch: null, diff --git a/lib/util/template/index.ts b/lib/util/template/index.ts index cb61a66b105587..d5415734a1b114 100644 --- a/lib/util/template/index.ts +++ b/lib/util/template/index.ts @@ -60,6 +60,7 @@ export const allowedFields = { isPatch: 'true if the upgrade is a patch upgrade', isPin: 'true if the upgrade is pinning dependencies', isRollback: 'true if the upgrade is a rollback PR', + isReplacement: 'true if the upgrade is a replacement', isRange: 'true if the new value is a range', isSingleVersion: 'true if the upgrade is to a single version rather than a range', @@ -72,6 +73,8 @@ export const allowedFields = { 'The major version of the new version. e.g. "3" if the new version if "3.1.0"', newMinor: 'The minor version of the new version. e.g. "1" if the new version if "3.1.0"', + newName: + 'The name of the new dependency that replaces the current deprecated dependency', newValue: 'The new value in the upgrade. Can be a range or version e.g. "^3.0.0" or "3.1.0"', newVersion: 'The new version in the upgrade, e.g. "3.1.0"', @@ -91,7 +94,7 @@ export const allowedFields = { semanticPrefix: 'The fully generated semantic prefix for commit messages', sourceRepoSlug: 'The slugified pathname of the sourceUrl, if present', sourceUrl: 'The source URL for the package', - updateType: 'One of digest, pin, rollback, patch, minor, major', + updateType: 'One of digest, pin, rollback, patch, minor, major, replacement', upgrades: 'An array of upgrade objects in the branch', url: 'The url of the release notes', version: 'The version number of the changelog', diff --git a/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap b/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap index 85185e81575f8c..dd710b7fc1f273 100644 --- a/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap +++ b/lib/workers/repository/process/lookup/__snapshots__/index.spec.ts.snap @@ -195,6 +195,26 @@ exports[`workers/repository/process/lookup/index .lookupUpdates() handles packag exports[`workers/repository/process/lookup/index .lookupUpdates() handles pypi 404 1`] = `Array []`; +exports[`workers/repository/process/lookup/index .lookupUpdates() handles replacements 1`] = ` +Object { + "changelogUrl": undefined, + "currentVersion": "1.4.1", + "dependencyUrl": undefined, + "fixedVersion": "1.4.1", + "homepage": undefined, + "sourceUrl": "https://github.com/kriskowal/q", + "updates": Array [ + Object { + "newName": "r", + "newValue": "2.0.0", + "updateType": "replacement", + }, + ], + "versioning": "npm", + "warnings": Array [], +} +`; + exports[`workers/repository/process/lookup/index .lookupUpdates() handles sourceUrl packageRules with version restrictions 1`] = ` Object { "changelogUrl": undefined, diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index ff172c99ff6134..81c4acbfaee5db 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -1399,5 +1399,17 @@ describe('workers/repository/process/lookup/index', () => { // FIXME: explicit assert condition expect(res).toMatchSnapshot(); }); + + it('handles replacements', async () => { + config.currentValue = '1.4.1'; + config.depName = 'q'; + // This config is normally set when packageRules are applied + config.replacementName = 'r'; + config.replacementVersion = '2.0.0'; + config.datasource = datasourceNpmId; + httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); + const res = await lookup.lookupUpdates(config); + expect(res).toMatchSnapshot(); + }); }); }); diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index 4c770309ab5b4b..a946363ce64bfb 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -88,6 +88,7 @@ export async function lookupUpdates( logger.debug({ dependency: depName }, 'Found deprecationMessage'); res.deprecationMessage = dependency.deprecationMessage; } + res.sourceUrl = dependency?.sourceUrl; if (dependency.sourceDirectory) { res.sourceDirectory = dependency.sourceDirectory; @@ -144,6 +145,17 @@ export async function lookupUpdates( res.updates.push(rollback); } let rangeStrategy = getRangeStrategy(config); + if (dependency.replacementName && dependency.replacementVersion) { + res.updates.push({ + updateType: 'replacement', + newName: dependency.replacementName, + newValue: versioning.getNewValue({ + currentValue, + newVersion: dependency.replacementVersion, + rangeStrategy, + }), + }); + } // istanbul ignore next if ( isVulnerabilityAlert && diff --git a/lib/workers/repository/updates/flatten.spec.ts b/lib/workers/repository/updates/flatten.spec.ts index 9d56625643e473..84c3a997eb74ca 100644 --- a/lib/workers/repository/updates/flatten.spec.ts +++ b/lib/workers/repository/updates/flatten.spec.ts @@ -66,6 +66,16 @@ describe('workers/repository/updates/flatten', () => { updateTypes: ['pin'], updates: [{ newValue: '2.0.0' }], }, + { + depName: 'abc', + updates: [ + { + newName: 'def', + newValue: '2.0.0', + updateType: 'replacement', + }, + ], + }, ], }, { @@ -131,7 +141,7 @@ describe('workers/repository/updates/flatten', () => { ], }; const res = await flattenUpdates(config, packageFiles); - expect(res).toHaveLength(13); + expect(res).toHaveLength(14); expect(res.filter((update) => update.sourceRepoSlug)).toHaveLength(3); expect( res.filter((r) => r.updateType === 'lockFileMaintenance') diff --git a/lib/workers/repository/updates/flatten.ts b/lib/workers/repository/updates/flatten.ts index 22f3070e48c637..5f3bf1e64df39d 100644 --- a/lib/workers/repository/updates/flatten.ts +++ b/lib/workers/repository/updates/flatten.ts @@ -15,18 +15,25 @@ import { generateBranchName } from './branch-name'; const upper = (str: string): string => str.charAt(0).toUpperCase() + str.substr(1); +function sanitizeDepName(depName: string): string { + return depName + .replace('@types/', '') + .replace('@', '') + .replace(regEx(/\//g), '-') // TODO #12071 + .replace(regEx(/\s+/g), '-') // TODO #12071 + .replace(regEx(/-+/), '-') + .toLowerCase(); +} + export function applyUpdateConfig(input: BranchUpgradeConfig): any { const updateConfig = { ...input }; delete updateConfig.packageRules; // TODO: Remove next line once #8075 is complete updateConfig.depNameSanitized = updateConfig.depName - ? updateConfig.depName - .replace('@types/', '') - .replace('@', '') - .replace(regEx(/\//g), '-') // TODO #12071 - .replace(regEx(/\s+/g), '-') // TODO #12071 - .replace(regEx(/-+/), '-') - .toLowerCase() + ? sanitizeDepName(updateConfig.depName) + : undefined; + updateConfig.newNameSanitized = updateConfig.newName + ? sanitizeDepName(updateConfig.newName) : undefined; if (updateConfig.sourceUrl) { const parsedSourceUrl = parseUrl(updateConfig.sourceUrl); @@ -53,6 +60,7 @@ export async function flattenUpdates( 'pin', 'digest', 'lockFileMaintenance', + 'replacement', ]; for (const [manager, files] of Object.entries(packageFiles)) { const managerConfig = getManagerConfig(config, manager); From d85aa9ba567ce422dde3121079cf64a19bbbe223 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 12 Nov 2021 11:15:24 +0100 Subject: [PATCH 045/248] logs: debug mix lock failure --- lib/manager/mix/artifacts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/manager/mix/artifacts.ts b/lib/manager/mix/artifacts.ts index 48dc61553f44e4..b8160d722e9499 100644 --- a/lib/manager/mix/artifacts.ts +++ b/lib/manager/mix/artifacts.ts @@ -92,7 +92,7 @@ export async function updateArtifacts({ throw err; } - logger.warn( + logger.debug( { err, message: err.message, command }, 'Failed to update Mix lock file' ); From 1863c02e117a3534bd599e870f76ae9308ed5383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20CROCQUESEL?= <88554524+scrocquesel@users.noreply.github.com> Date: Fri, 12 Nov 2021 12:44:27 +0100 Subject: [PATCH 046/248] docs(configuration-options): fix replacementVersion (#12620) --- docs/usage/configuration-options.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index d94e2baa32564a..40c840d934a5b4 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1660,8 +1660,8 @@ You can suggest a new community package rule by editing [the `replacements.ts` f ### replacementVersion -Use this field to define the name of a replacement package. -Must be used with `replacementVersion`. +Use this field to define the version of a replacement package. +Must be used with `replacementName`. For example to replace the npm package `jade` with version `2.0.0` of the package `pug`: ```json From a2c39b91fd95693a6bb5970c7d192382ca8fb1f2 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 12 Nov 2021 16:36:54 +0100 Subject: [PATCH 047/248] fix: branchName massage hyphens (#12622) --- lib/workers/repository/updates/branch-name.spec.ts | 6 +++++- lib/workers/repository/updates/branch-name.ts | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/workers/repository/updates/branch-name.spec.ts b/lib/workers/repository/updates/branch-name.spec.ts index 3475b7328795b2..a1436ee7c3b4b2 100644 --- a/lib/workers/repository/updates/branch-name.spec.ts +++ b/lib/workers/repository/updates/branch-name.spec.ts @@ -220,7 +220,7 @@ describe('workers/repository/updates/branch-name', () => { }, { upgrade: { branchName: 'renovate/~bad-branch-name2' }, - expectedBranchName: 'renovate/-bad-branch-name2', + expectedBranchName: 'renovate/bad-branch-name2', }, { upgrade: { branchName: 'renovate/bad-branch-^-name3' }, @@ -258,6 +258,10 @@ describe('workers/repository/updates/branch-name', () => { upgrade: { branchName: 'renovate/bad--branch---name11' }, expectedBranchName: 'renovate/bad-branch-name11', }, + { + upgrade: { branchName: 'renovate-/[start]-something-[end]' }, + expectedBranchName: 'renovate/start-something-end', + }, ]; fixtures.forEach((fixture) => { generateBranchName(fixture.upgrade); diff --git a/lib/workers/repository/updates/branch-name.ts b/lib/workers/repository/updates/branch-name.ts index 15433fb94b2004..7e45f0802df0ef 100644 --- a/lib/workers/repository/updates/branch-name.ts +++ b/lib/workers/repository/updates/branch-name.ts @@ -24,6 +24,8 @@ function cleanBranchName(branchName: string): string { .replace(regEx(/\/\./g), '/') // leading dot after slash .replace(regEx(/\s/g), '') // whitespace .replace(regEx(/[[\]?:\\^~]/g), '-') // massage out all these characters: : ? [ \ ^ ~ + .replace(regEx(/(^|\/)-+/g), '$1') // leading dashes + .replace(regEx(/-+(\/|$)/g), '$1') // trailing dashes .replace(RE_MULTIPLE_DASH, '-'); // chained dashes } From dc2da1aafb849c6500265f3a60c38b48a1a1f19c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 13 Nov 2021 03:01:25 +0000 Subject: [PATCH 048/248] chore(deps): update dependency eslint to v8.2.0 (#12629) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 273d92e00c47d1..4454a39c96a43b 100644 --- a/package.json +++ b/package.json @@ -247,7 +247,7 @@ "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", "emojibase-data": "6.2.0", - "eslint": "8.1.0", + "eslint": "8.2.0", "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", "eslint-plugin-import": "2.25.2", diff --git a/yarn.lock b/yarn.lock index f48d59b6e7f74a..79abc17c473767 100644 --- a/yarn.lock +++ b/yarn.lock @@ -937,7 +937,7 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" -"@eslint/eslintrc@^1.0.3": +"@eslint/eslintrc@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== @@ -3924,12 +3924,12 @@ eslint-visitor-keys@^3.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== -eslint@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664" - integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw== +eslint@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.2.0.tgz#44d3fb506d0f866a506d97a0fc0e90ee6d06a815" + integrity sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw== dependencies: - "@eslint/eslintrc" "^1.0.3" + "@eslint/eslintrc" "^1.0.4" "@humanwhocodes/config-array" "^0.6.0" ajv "^6.10.0" chalk "^4.0.0" @@ -3963,7 +3963,7 @@ eslint@8.1.0: progress "^2.0.0" regexpp "^3.2.0" semver "^7.2.1" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" v8-compile-cache "^2.0.3" From 216b11f07f6156c8f5884cb7006e917b4178898f Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 13 Nov 2021 16:28:08 +0300 Subject: [PATCH 049/248] refactor(maven): Prepare for hybrid fetching approach (#12617) --- lib/datasource/maven/index.ts | 178 +++++++++++++++++----------------- lib/datasource/maven/types.ts | 5 +- 2 files changed, 90 insertions(+), 93 deletions(-) diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index b93ff70f392084..5d6666377c7559 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -1,4 +1,5 @@ -import pMap from 'p-map'; +import is from '@sindresorhus/is'; +import pAll from 'p-all'; import { XmlDocument } from 'xmldoc'; import { logger } from '../../logger'; import * as packageCache from '../../util/cache/package'; @@ -7,11 +8,7 @@ import * as mavenVersioning from '../../versioning/maven'; import { compare } from '../../versioning/maven/compare'; import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; import { MAVEN_REPO } from './common'; -import type { - ArtifactInfoResult, - ArtifactsInfo, - MavenDependency, -} from './types'; +import type { MavenDependency, ReleaseMap } from './types'; import { downloadMavenXml, getDependencyInfo, @@ -49,15 +46,15 @@ function extractVersions(metadata: XmlDocument): string[] { return elements.map((el) => el.val); } -async function getVersionsFromMetadata( +async function fetchReleasesFromMetadata( dependency: MavenDependency, repoUrl: string -): Promise { +): Promise { const metadataUrl = getMavenUrl(dependency, repoUrl, 'maven-metadata.xml'); - const cacheNamespace = 'datasource-maven-metadata'; + const cacheNamespace = 'datasource-maven:metadata-xml'; const cacheKey = metadataUrl.toString(); - const cachedVersions = await packageCache.get( + const cachedVersions = await packageCache.get( cacheNamespace, cacheKey ); @@ -70,25 +67,18 @@ async function getVersionsFromMetadata( metadataUrl ); if (!mavenMetadata) { - return null; + return {}; } const versions = extractVersions(mavenMetadata); + const releaseMap = versions.reduce( + (acc, version) => ({ ...acc, [version]: null }), + {} + ); if (!authorization) { - await packageCache.set(cacheNamespace, cacheKey, versions, 30); - } - return versions; -} - -// istanbul ignore next -function isValidArtifactsInfo( - info: ArtifactsInfo | null, - versions: string[] -): boolean { - if (!info) { - return false; + await packageCache.set(cacheNamespace, cacheKey, releaseMap, 30); } - return versions.every((v) => info[v] !== undefined); + return releaseMap; } function isSnapshotVersion(version: string): boolean { @@ -166,74 +156,83 @@ async function createUrlForDependencyPom( return `${version}/${dependency.name}-${version}.pom`; } -async function getReleasesFromHeadRequests( +async function addReleasesUsingHeadRequests( + inputReleaseMap: ReleaseMap, dependency: MavenDependency, - repoUrl: string, - versions: string[] -): Promise { + repoUrl: string +): Promise { + const releaseMap = { ...inputReleaseMap }; + if (process.env.RENOVATE_EXPERIMENTAL_NO_MAVEN_POM_CHECK) { - return null; + return releaseMap; } - const cacheNamespace = 'datasource-maven-metadata'; + const cacheNs = 'datasource-maven:head-requests'; const cacheKey = `${repoUrl}${dependency.dependencyUrl}`; - let artifactsInfo: ArtifactsInfo | null = - await packageCache.get(cacheNamespace, cacheKey); - - // If the cache contains any artifacts that we were previously unable to determine if they exist, - // retry the existence checks on them. - if (!isValidArtifactsInfo(artifactsInfo, versions)) { - // For each version, determine if there is a POM file available for it - const results: ArtifactInfoResult[] = await pMap( - versions, - async (version): Promise => { - // Create the URL that the POM file should be available at - const artifactUrl = getMavenUrl( - dependency, - repoUrl, - await createUrlForDependencyPom(version, dependency, repoUrl) - ); - - // Return an ArtifactInfoResult that maps the version to the result of the check if the POM file exists in the repo - return [version, await isHttpResourceExists(artifactUrl)]; - }, - { concurrency: 5 } - ); + let workingReleaseMap: ReleaseMap = await packageCache.get( + cacheNs, + cacheKey + ); - artifactsInfo = results.reduce( - (acc, [key, value]) => ({ - ...acc, - [key]: value, - }), - {} - ); + if (!workingReleaseMap) { + workingReleaseMap = {}; - // Retry earlier for status other than 404 - const cacheTTL = Object.values(artifactsInfo).some((x) => x === null) - ? 60 - : 24 * 60; + const unknownVersions = Object.entries(releaseMap) + .filter(([version, release]) => { + const isDiscoveredOutside = !!release; + const isDiscoveredInsideAndCached = !is.undefined( + workingReleaseMap[version] + ); + const isDiscovered = isDiscoveredOutside || isDiscoveredInsideAndCached; + return !isDiscovered; + }) + .map(([k]) => k); + + if (unknownVersions.length) { + let retryEarlier = false; + const queue = unknownVersions.map( + (version) => async (): Promise => { + const pomUrl = await createUrlForDependencyPom( + version, + dependency, + repoUrl + ); + const artifactUrl = getMavenUrl(dependency, repoUrl, pomUrl); + const res = await isHttpResourceExists(artifactUrl); + const release: Release = { version }; + + if (is.string(res)) { + release.releaseTimestamp = res; + } + + // Retry earlier for error status other than 404 + if (res === null) { + retryEarlier = true; + } + + workingReleaseMap[version] = res ? release : null; + } + ); + + await pAll(queue, { concurrency: 5 }); + const cacheTTL = retryEarlier ? 60 : 24 * 60; + await packageCache.set(cacheNs, cacheKey, workingReleaseMap, cacheTTL); + } + } - await packageCache.set(cacheNamespace, cacheKey, artifactsInfo, cacheTTL); + for (const version of Object.keys(releaseMap)) { + releaseMap[version] ||= workingReleaseMap[version] ?? null; } - // Create releases for every version that exists in the repository - return versions - .filter((v) => artifactsInfo[v]) - .map((version) => { - const release: Release = { version }; - const releaseTimestamp = artifactsInfo[version]; - if (releaseTimestamp && typeof releaseTimestamp === 'string') { - release.releaseTimestamp = releaseTimestamp; - } - return release; - }); + return releaseMap; } -function getFallbackReleases(versions: string[]): Release[] | null { - const result = versions?.map((version) => ({ - version, - })); - return result ?? null; +function getReleasesFromMap(releaseMap: ReleaseMap): Release[] { + const releases = Object.values(releaseMap).filter(Boolean); + if (releases.length) { + return releases; + } + return Object.keys(releaseMap).map((version) => ({ version })); } export async function getReleases({ @@ -245,14 +244,17 @@ export async function getReleases({ logger.debug(`Looking up ${dependency.display} in repository ${repoUrl}`); - let releases: Release[] = null; - const versions = await getVersionsFromMetadata(dependency, repoUrl); - releases ||= await getReleasesFromHeadRequests(dependency, repoUrl, versions); - releases ||= getFallbackReleases(versions); - + let releaseMap = await fetchReleasesFromMetadata(dependency, repoUrl); + releaseMap = await addReleasesUsingHeadRequests( + releaseMap, + dependency, + repoUrl + ); + const releases = getReleasesFromMap(releaseMap); if (!releases?.length) { return null; } + logger.debug( `Found ${releases.length} new releases for ${dependency.display} in repository ${repoUrl}` ); @@ -262,9 +264,5 @@ export async function getReleases({ latestStableVersion && (await getDependencyInfo(dependency, repoUrl, latestStableVersion)); - return { - ...dependency, - ...dependencyInfo, - releases, - }; + return { ...dependency, ...dependencyInfo, releases }; } diff --git a/lib/datasource/maven/types.ts b/lib/datasource/maven/types.ts index 2d314a407874b6..780360f247bc0c 100644 --- a/lib/datasource/maven/types.ts +++ b/lib/datasource/maven/types.ts @@ -1,4 +1,5 @@ import type { XmlDocument } from 'xmldoc'; +import type { Release } from '../types'; export interface MavenDependency { display: string; @@ -12,6 +13,4 @@ export interface MavenXml { xml?: XmlDocument; } -export type ArtifactsInfo = Record; - -export type ArtifactInfoResult = [string, boolean | string | null]; +export type ReleaseMap = Record; From bd3f7cb6be436a258e750397f68505d703c2ab2e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 14 Nov 2021 06:39:53 +0100 Subject: [PATCH 050/248] docs(development): update status label query (#12637) --- docs/development/issue-labeling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/development/issue-labeling.md b/docs/development/issue-labeling.md index ddf729ba23a1a4..83b17fc3de2b98 100644 --- a/docs/development/issue-labeling.md +++ b/docs/development/issue-labeling.md @@ -43,7 +43,7 @@ Most issues should have a label relating to either a platform, manager, datasour Use these to label the status of an issue. For example, use `status:requirements` to mean that an issue is not yet ready for development to begin. If we need the original poster or somebody else to respond to a query of ours, apply the `status:waiting-on-response` label. -All open issues should have some `status:*` label applied, and [this search](https://github.com/renovatebot/renovate/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+-label%3Astatus%3Arequirements+-label%3Astatus%3Aready+-label%3Astatus%3Ain-progress+-label%3Astatus%3Ablocked) can identify any which are missing a status label. +All open issues should have some `status:*` label applied, and [this search](https://github.com/renovatebot/renovate/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+-label%3Astatus%3Arequirements+-label%3Astatus%3Aready+-label%3Astatus%3Ain-progress+-label%3Astatus%3Ablocked+-label%3Astatus%3Awaiting-on-response+) can identify any which are missing a status label. ### Type of issue From 4e07ddf52652445024a78a04dd70bc34d6be4d19 Mon Sep 17 00:00:00 2001 From: Bob van de Vijver Date: Sun, 14 Nov 2021 07:02:53 +0100 Subject: [PATCH 051/248] feat(composer): Support install before update and configure plugin behaviour (#11990) --- docs/usage/configuration-options.md | 5 + docs/usage/self-hosted-configuration.md | 2 + lib/config/global.ts | 1 + lib/config/options/index.ts | 15 ++ lib/config/types.ts | 1 + .../__snapshots__/artifacts.spec.ts.snap | 134 ++++++++++++++++++ lib/manager/composer/artifacts.spec.ts | 104 ++++++++++++-- lib/manager/composer/artifacts.ts | 24 +++- lib/manager/composer/utils.spec.ts | 62 +++++++- lib/manager/composer/utils.ts | 17 ++- lib/manager/types.ts | 1 + 11 files changed, 346 insertions(+), 20 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 40c840d934a5b4..fcb954b4df86c3 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1090,6 +1090,11 @@ For instance if you have a project with an `"examples/"` directory you wish to i Useful to know: Renovate's default ignore is `node_modules` and `bower_components` only, however if you are extending the popular `config:base` preset then it adds ignore patterns for `vendor`, `examples`, `test(s)` and `fixtures` directories too. +## ignorePlugins + +Set this to `true` if running plugins causes problems. +Applicable for Composer only for now. + ## ignorePrAuthor This is usually needed if someone needs to migrate bot accounts, including from hosted app to self-hosted. diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index 8a90bff42655e6..362f3af83f65fd 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -11,6 +11,8 @@ Please also see [Self-Hosted Experimental Options](./self-hosted-experimental.md ## allowCustomCrateRegistries +## allowPlugins + ## allowPostUpgradeCommandTemplating Set to true to allow templating of dependency level post-upgrade commands. diff --git a/lib/config/global.ts b/lib/config/global.ts index 38f557c52fdb9c..0aefa514bdf309 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -5,6 +5,7 @@ let repoGlobalConfig: RepoGlobalConfig = {}; // TODO: once global config work is complete, add a test to make sure this list includes all options with globalOnly=true (#9603) const repoGlobalOptions = [ 'allowCustomCrateRegistries', + 'allowPlugins', 'allowPostUpgradeCommandTemplating', 'allowScripts', 'allowedPostUpgradeCommands', diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 7185155a796584..2321dbbc47af8a 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -548,6 +548,14 @@ const options: RenovateOptions[] = [ type: 'boolean', default: false, }, + { + name: 'allowPlugins', + description: + 'Configure this to true if repositories are allowed to run install plugins.', + globalOnly: true, + type: 'boolean', + default: false, + }, { name: 'allowScripts', description: @@ -564,6 +572,13 @@ const options: RenovateOptions[] = [ type: 'boolean', default: false, }, + { + name: 'ignorePlugins', + description: + 'Configure this to true if allowPlugins=true but you wish to skip running plugins when updating lock files.', + type: 'boolean', + default: false, + }, { name: 'ignoreScripts', description: diff --git a/lib/config/types.ts b/lib/config/types.ts index f01119b0221f1a..470709ae7e8b68 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -91,6 +91,7 @@ export interface GlobalOnlyConfig { // The below should contain config options where globalOnly=true export interface RepoGlobalConfig { allowCustomCrateRegistries?: boolean; + allowPlugins?: boolean; allowPostUpgradeCommandTemplating?: boolean; allowScripts?: boolean; allowedPostUpgradeCommands?: string[]; diff --git a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap index 51f7538dda1a63..7025b13c106048 100644 --- a/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap +++ b/lib/manager/composer/__snapshots__/artifacts.spec.ts.snap @@ -46,6 +46,30 @@ Array [ ] `; +exports[`manager/composer/artifacts disable plugins when configured locally 1`] = ` +Array [ + Object { + "cmd": "composer update foo bar --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "COMPOSER_CACHE_DIR": "/tmp/renovate/cache/others/composer", + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, +] +`; + exports[`manager/composer/artifacts disables ignorePlatformReqs 1`] = ` Array [ Object { @@ -70,6 +94,116 @@ Array [ ] `; +exports[`manager/composer/artifacts does not disable plugins when configured globally 1`] = ` +Array [ + Object { + "cmd": "composer update foo bar --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "COMPOSER_CACHE_DIR": "/tmp/renovate/cache/others/composer", + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, +] +`; + +exports[`manager/composer/artifacts installs before running the update when symfony flex is installed 1`] = ` +Array [ + Object { + "cmd": "composer install --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "COMPOSER_CACHE_DIR": "/tmp/renovate/cache/others/composer", + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, + Object { + "cmd": "composer update --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "COMPOSER_CACHE_DIR": "/tmp/renovate/cache/others/composer", + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, +] +`; + +exports[`manager/composer/artifacts installs before running the update when symfony flex is installed as dev 1`] = ` +Array [ + Object { + "cmd": "composer install --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "COMPOSER_CACHE_DIR": "/tmp/renovate/cache/others/composer", + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, + Object { + "cmd": "composer update --with-dependencies --ignore-platform-reqs --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "COMPOSER_CACHE_DIR": "/tmp/renovate/cache/others/composer", + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, +] +`; + exports[`manager/composer/artifacts performs lockFileMaintenance 1`] = ` Array [ Object { diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts index 42cfe6ea50ad2f..a0cdc01deb3215 100644 --- a/lib/manager/composer/artifacts.spec.ts +++ b/lib/manager/composer/artifacts.spec.ts @@ -26,6 +26,7 @@ const config: UpdateArtifactsConfig = { }; const adminConfig: RepoGlobalConfig = { + allowPlugins: false, allowScripts: false, // `join` fixes Windows CI localDir: join('/tmp/github/some/repo'), @@ -79,8 +80,8 @@ describe('manager/composer/artifacts', () => { fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{}'); - git.getRepoStatus.mockResolvedValue(repoStatus); - setGlobalConfig({ ...adminConfig, allowScripts: true }); + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + setGlobalConfig({ ...adminConfig, allowScripts: true, allowPlugins: true }); expect( await composer.updateArtifacts({ packageFileName: 'composer.json', @@ -132,7 +133,7 @@ describe('manager/composer/artifacts', () => { ...config, registryUrls: ['https://packagist.renovatebot.com'], }; - git.getRepoStatus.mockResolvedValue(repoStatus); + git.getRepoStatus.mockResolvedValueOnce(repoStatus); expect( await composer.updateArtifacts({ packageFileName: 'composer.json', @@ -148,7 +149,7 @@ describe('manager/composer/artifacts', () => { fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{}'); - git.getRepoStatus.mockResolvedValue({ + git.getRepoStatus.mockResolvedValueOnce({ ...repoStatus, modified: ['composer.lock'], }); @@ -200,7 +201,7 @@ describe('manager/composer/artifacts', () => { fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{ }'); - git.getRepoStatus.mockResolvedValue({ + git.getRepoStatus.mockResolvedValueOnce({ ...repoStatus, modified: ['composer.lock'], }); @@ -236,7 +237,7 @@ describe('manager/composer/artifacts', () => { ], }); - git.getRepoStatus.mockResolvedValue({ + git.getRepoStatus.mockResolvedValueOnce({ ...repoStatus, modified: ['composer.lock'], }); @@ -258,7 +259,7 @@ describe('manager/composer/artifacts', () => { fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{ }'); - git.getRepoStatus.mockResolvedValue({ + git.getRepoStatus.mockResolvedValueOnce({ ...repoStatus, modified: ['composer.lock'], }); @@ -328,7 +329,7 @@ describe('manager/composer/artifacts', () => { fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{ }'); - git.getRepoStatus.mockResolvedValue({ + git.getRepoStatus.mockResolvedValueOnce({ ...repoStatus, modified: ['composer.lock'], }); @@ -350,7 +351,7 @@ describe('manager/composer/artifacts', () => { fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{ }'); - git.getRepoStatus.mockResolvedValue({ + git.getRepoStatus.mockResolvedValueOnce({ ...repoStatus, modified: ['composer.lock'], }); @@ -367,4 +368,89 @@ describe('manager/composer/artifacts', () => { ).not.toBeNull(); expect(execSnapshots).toMatchSnapshot(); }); + + it('installs before running the update when symfony flex is installed', async () => { + fs.readLocalFile.mockResolvedValueOnce( + '{"packages":[{"name":"symfony/flex","version":"1.17.1"}]}' + ); + const execSnapshots = mockExecAll(exec); + fs.readLocalFile.mockResolvedValueOnce('{ }'); + git.getRepoStatus.mockResolvedValueOnce({ + ...repoStatus, + modified: ['composer.lock'], + }); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: { + ...config, + }, + }) + ).not.toBeNull(); + expect(execSnapshots).toMatchSnapshot(); + expect(execSnapshots).toHaveLength(2); + }); + + it('installs before running the update when symfony flex is installed as dev', async () => { + fs.readLocalFile.mockResolvedValueOnce( + '{"packages-dev":[{"name":"symfony/flex","version":"1.17.1"}]}' + ); + const execSnapshots = mockExecAll(exec); + fs.readLocalFile.mockResolvedValueOnce('{ }'); + git.getRepoStatus.mockResolvedValueOnce({ + ...repoStatus, + modified: ['composer.lock'], + }); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [], + newPackageFileContent: '{}', + config: { + ...config, + }, + }) + ).not.toBeNull(); + expect(execSnapshots).toMatchSnapshot(); + expect(execSnapshots).toHaveLength(2); + }); + + it('does not disable plugins when configured globally', async () => { + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(exec); + fs.readLocalFile.mockResolvedValueOnce('{}'); + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + setGlobalConfig({ ...adminConfig, allowPlugins: true }); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [{ depName: 'foo' }, { depName: 'bar' }], + newPackageFileContent: '{}', + config, + }) + ).toBeNull(); + expect(execSnapshots).toMatchSnapshot(); + }); + + it('disable plugins when configured locally', async () => { + fs.readLocalFile.mockResolvedValueOnce('{}'); + const execSnapshots = mockExecAll(exec); + fs.readLocalFile.mockResolvedValueOnce('{}'); + git.getRepoStatus.mockResolvedValueOnce(repoStatus); + setGlobalConfig({ ...adminConfig, allowPlugins: true }); + expect( + await composer.updateArtifacts({ + packageFileName: 'composer.json', + updatedDeps: [{ depName: 'foo' }, { depName: 'bar' }], + newPackageFileContent: '{}', + config: { + ...config, + ignorePlugins: true, + }, + }) + ).toBeNull(); + expect(execSnapshots).toMatchSnapshot(); + }); }); diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts index 27a5378f624fa3..9c9d210f5f3cb0 100644 --- a/lib/manager/composer/artifacts.ts +++ b/lib/manager/composer/artifacts.ts @@ -21,12 +21,13 @@ import { getRepoStatus } from '../../util/git'; import * as hostRules from '../../util/host-rules'; import { regEx } from '../../util/regex'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; -import type { AuthJson } from './types'; +import type { AuthJson, ComposerLock } from './types'; import { composerVersioningId, extractContraints, getComposerArguments, getPhpConstraint, + requireComposerDependencyInstallation, } from './utils'; function getAuthJson(): string | null { @@ -94,11 +95,9 @@ export async function updateArtifacts({ try { await writeLocalFile(packageFileName, newPackageFileContent); + const existingLockFile: ComposerLock = JSON.parse(existingLockFileContent); const constraints = { - ...extractContraints( - JSON.parse(newPackageFileContent), - JSON.parse(existingLockFileContent) - ), + ...extractContraints(JSON.parse(newPackageFileContent), existingLockFile), ...config.constraints, }; @@ -120,6 +119,17 @@ export async function updateArtifacts({ tagScheme: composerVersioningId, }, }; + + const commands: string[] = []; + + // Determine whether install is required before update + if (requireComposerDependencyInstallation(existingLockFile)) { + const preCmd = 'composer'; + const preArgs = 'install' + getComposerArguments(config); + logger.debug({ preCmd, preArgs }, 'composer pre-update command'); + commands.push(`${preCmd} ${preArgs}`); + } + const cmd = 'composer'; let args: string; if (config.isLockFileMaintenance) { @@ -132,7 +142,9 @@ export async function updateArtifacts({ } args += getComposerArguments(config); logger.debug({ cmd, args }, 'composer command'); - await exec(`${cmd} ${args}`, execOptions); + commands.push(`${cmd} ${args}`); + + await exec(commands, execOptions); const status = await getRepoStatus(); if (!status.modified.includes(lockFileName)) { return null; diff --git a/lib/manager/composer/utils.spec.ts b/lib/manager/composer/utils.spec.ts index 6970039a65ffde..7213bf1333bd5f 100644 --- a/lib/manager/composer/utils.spec.ts +++ b/lib/manager/composer/utils.spec.ts @@ -1,5 +1,11 @@ import { setGlobalConfig } from '../../config/global'; -import { extractContraints, getComposerArguments } from './utils'; +import { + extractContraints, + getComposerArguments, + requireComposerDependencyInstallation, +} from './utils'; + +jest.mock('../../../lib/datasource'); describe('manager/composer/utils', () => { describe('extractContraints', () => { @@ -75,13 +81,15 @@ describe('manager/composer/utils', () => { ' --ignore-platform-req ext-intl --ignore-platform-req ext-icu --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' ); }); - it('allows scripts/plugins when configured', () => { + it('allows scripts when configured', () => { setGlobalConfig({ allowScripts: true, }); - expect(getComposerArguments({})).toBe(' --no-ansi --no-interaction'); + expect(getComposerArguments({})).toBe( + ' --no-ansi --no-interaction --no-plugins' + ); }); - it('disables scripts/plugins when configured locally', () => { + it('disables scripts when configured locally', () => { setGlobalConfig({ allowScripts: true, }); @@ -93,5 +101,51 @@ describe('manager/composer/utils', () => { ' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' ); }); + it('allows plugins when configured', () => { + setGlobalConfig({ + allowPlugins: true, + }); + expect(getComposerArguments({})).toBe( + ' --no-ansi --no-interaction --no-scripts --no-autoloader' + ); + }); + it('disables plugins when configured locally', () => { + setGlobalConfig({ + allowPlugins: true, + }); + expect( + getComposerArguments({ + ignorePlugins: true, + }) + ).toBe( + ' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins' + ); + }); + }); + + describe('requireComposerDependencyInstallation', () => { + it('returns true when symfony/flex has been installed', () => { + expect( + requireComposerDependencyInstallation({ + packages: [{ name: 'symfony/flex', version: '1.17.1' }], + }) + ).toBeTrue(); + }); + + it('returns true when symfony/flex has been installed as dev dependency', () => { + expect( + requireComposerDependencyInstallation({ + 'packages-dev': [{ name: 'symfony/flex', version: '1.17.1' }], + }) + ).toBeTrue(); + }); + + it('returns false when symfony/flex has not been installed', () => { + expect( + requireComposerDependencyInstallation({ + packages: [{ name: 'symfony/console', version: '5.4.0' }], + }) + ).toBeFalse(); + }); }); }); diff --git a/lib/manager/composer/utils.ts b/lib/manager/composer/utils.ts index 68684d9ba7cd1c..d88609f129b046 100644 --- a/lib/manager/composer/utils.ts +++ b/lib/manager/composer/utils.ts @@ -7,6 +7,8 @@ import type { ComposerConfig, ComposerLock } from './types'; export { composerVersioningId }; +const depRequireInstall = new Set(['symfony/flex']); + export function getComposerArguments(config: UpdateArtifactsConfig): string { let args = ''; @@ -22,7 +24,11 @@ export function getComposerArguments(config: UpdateArtifactsConfig): string { args += ' --no-ansi --no-interaction'; if (!getGlobalConfig().allowScripts || config.ignoreScripts) { - args += ' --no-scripts --no-autoloader --no-plugins'; + args += ' --no-scripts --no-autoloader'; + } + + if (!getGlobalConfig().allowPlugins || config.ignorePlugins) { + args += ' --no-plugins'; } return args; @@ -39,6 +45,15 @@ export function getPhpConstraint(constraints: Record): string { return null; } +export function requireComposerDependencyInstallation( + lock: ComposerLock +): boolean { + return ( + lock.packages?.some((p) => depRequireInstall.has(p.name)) === true || + lock['packages-dev']?.some((p) => depRequireInstall.has(p.name)) === true + ); +} + export function extractContraints( composerJson: ComposerConfig, lockParsed: ComposerLock diff --git a/lib/manager/types.ts b/lib/manager/types.ts index 90706462d01325..326c07093bd377 100644 --- a/lib/manager/types.ts +++ b/lib/manager/types.ts @@ -44,6 +44,7 @@ export interface UpdateArtifactsConfig { composerIgnorePlatformReqs?: string[]; currentValue?: string; postUpdateOptions?: string[]; + ignorePlugins?: boolean; ignoreScripts?: boolean; updateType?: UpdateType; newValue?: string; From 7f4b119450122ea81617c0f8cc8e864c9460b1cd Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 14 Nov 2021 09:31:07 +0300 Subject: [PATCH 052/248] tests(gradle): Refactor (#12585) --- .../__snapshots__/extract.spec.ts.snap | 31 ++++++++++ lib/manager/gradle/shallow/extract.spec.ts | 61 +------------------ lib/manager/gradle/shallow/parser.spec.ts | 15 +++++ 3 files changed, 49 insertions(+), 58 deletions(-) create mode 100644 lib/manager/gradle/shallow/__snapshots__/extract.spec.ts.snap diff --git a/lib/manager/gradle/shallow/__snapshots__/extract.spec.ts.snap b/lib/manager/gradle/shallow/__snapshots__/extract.spec.ts.snap new file mode 100644 index 00000000000000..45b6e6f532bbee --- /dev/null +++ b/lib/manager/gradle/shallow/__snapshots__/extract.spec.ts.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/gradle/shallow/extract extracts from cross-referenced files 1`] = ` +Array [ + Object { + "datasource": "maven", + "deps": Array [ + Object { + "currentValue": "1.2.3", + "depName": "foo:bar", + "fileReplacePosition": 4, + "groupName": "baz", + "managerData": Object { + "fileReplacePosition": 4, + "packageFile": "gradle.properties", + }, + "registryUrls": Array [ + "https://repo.maven.apache.org/maven2", + "https://example.com", + ], + }, + ], + "packageFile": "gradle.properties", + }, + Object { + "datasource": "maven", + "deps": Array [], + "packageFile": "build.gradle", + }, +] +`; diff --git a/lib/manager/gradle/shallow/extract.spec.ts b/lib/manager/gradle/shallow/extract.spec.ts index b013534067ded7..2b4f4751eaeb54 100644 --- a/lib/manager/gradle/shallow/extract.spec.ts +++ b/lib/manager/gradle/shallow/extract.spec.ts @@ -33,81 +33,26 @@ describe('manager/gradle/shallow/extract', () => { expect(res).toBeNull(); }); - it('works', async () => { + it('extracts from cross-referenced files', async () => { mockFs({ 'gradle.properties': 'baz=1.2.3', 'build.gradle': 'url "https://example.com"; "foo:bar:$baz"', - 'settings.gradle': null, }); const res = await extractAllPackageFiles({} as ExtractConfig, [ 'build.gradle', 'gradle.properties', - 'settings.gradle', ]); - expect(res).toMatchObject([ + expect(res).toMatchSnapshot([ { packageFile: 'gradle.properties', - deps: [ - { - depName: 'foo:bar', - currentValue: '1.2.3', - registryUrls: [ - 'https://repo.maven.apache.org/maven2', - 'https://example.com', - ], - }, - ], - }, - { - datasource: 'maven', - deps: [], - packageFile: 'settings.gradle', + deps: [{ depName: 'foo:bar', currentValue: '1.2.3' }], }, { packageFile: 'build.gradle', deps: [] }, ]); }); - it('works with file-ext', async () => { - mockFs({ - 'gradle.properties': '', - 'build.gradle': 'url "https://example.com"; "foo:bar:1.2.3@zip"', - 'settings.gradle': null, - }); - - const res = await extractAllPackageFiles({} as ExtractConfig, [ - 'build.gradle', - 'gradle.properties', - 'settings.gradle', - ]); - - expect(res).toMatchObject([ - { - packageFile: 'gradle.properties', - deps: [], - }, - { - datasource: 'maven', - deps: [], - packageFile: 'settings.gradle', - }, - { - packageFile: 'build.gradle', - deps: [ - { - depName: 'foo:bar', - currentValue: '1.2.3', - registryUrls: [ - 'https://repo.maven.apache.org/maven2', - 'https://example.com', - ], - }, - ], - }, - ]); - }); - it('skips versions composed from multiple variables', async () => { mockFs({ 'build.gradle': diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index dbeaefb3e2d232..3518da4690ed80 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -205,6 +205,21 @@ describe('manager/gradle/shallow/parser', () => { skipReason: SkipReason.Ignored, }, ]); + + ({ deps } = parseGradle('url "https://example.com"; "foo:bar:1.2.3@zip"')); + expect(deps).toMatchInlineSnapshot(` + Array [ + Object { + "currentValue": "1.2.3", + "dataType": "zip", + "depName": "foo:bar", + "managerData": Object { + "fileReplacePosition": 36, + "packageFile": undefined, + }, + }, + ] + `); }); it('parses plugin', () => { let deps; From 811f81d3a29894ade3e9d699cef13d68ca42cb7b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 14 Nov 2021 11:09:54 +0300 Subject: [PATCH 053/248] test(maven): Cover the case of void "last-modified" jar header (#12641) --- .../clojure/__snapshots__/index.spec.ts.snap | 151 +++++++++++---- lib/datasource/clojure/index.spec.ts | 7 +- .../maven/__fixtures__/metadata.xml | 1 + .../maven/__snapshots__/index.spec.ts.snap | 175 ++++++++++++++---- lib/datasource/maven/index.spec.ts | 7 +- 5 files changed, 271 insertions(+), 70 deletions(-) diff --git a/lib/datasource/clojure/__snapshots__/index.spec.ts.snap b/lib/datasource/clojure/__snapshots__/index.spec.ts.snap index aed87d93324495..8be1ab42749a8d 100644 --- a/lib/datasource/clojure/__snapshots__/index.spec.ts.snap +++ b/lib/datasource/clojure/__snapshots__/index.spec.ts.snap @@ -26,8 +26,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -71,8 +71,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -92,6 +92,15 @@ Array [ "method": "HEAD", "url": "https://clojars.org/repo/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "clojars.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -148,6 +157,9 @@ Object { "name": "package", "registryUrl": "https://clojars.org/repo", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -226,8 +238,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -271,8 +283,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -292,6 +304,15 @@ Array [ "method": "HEAD", "url": "https://clojars.org/repo/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "clojars.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -339,8 +360,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -384,8 +405,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -405,6 +426,15 @@ Array [ "method": "HEAD", "url": "https://clojars.org/repo/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "clojars.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -447,8 +477,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -492,8 +522,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -513,6 +543,15 @@ Array [ "method": "HEAD", "url": "https://clojars.org/repo/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "clojars.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -536,6 +575,9 @@ Array [ exports[`datasource/clojure/index ignores unsupported protocols 1`] = ` Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -577,8 +619,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "http://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "http://clojars.org/repo/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -622,8 +664,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "http://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "http://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -643,6 +685,15 @@ Array [ "method": "HEAD", "url": "http://clojars.org/repo/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "clojars.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "http://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -672,6 +723,9 @@ Object { "name": "package", "registryUrl": "https://custom.registry.renovatebot.com", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -714,8 +768,8 @@ Array [ "host": "custom.registry.renovatebot.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://custom.registry.renovatebot.com/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -759,8 +813,8 @@ Array [ "host": "custom.registry.renovatebot.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -780,6 +834,15 @@ Array [ "method": "HEAD", "url": "https://custom.registry.renovatebot.com/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "custom.registry.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -809,6 +872,9 @@ Object { "name": "package", "registryUrl": "https://clojars.org/repo", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -860,8 +926,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -905,8 +971,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -926,6 +992,15 @@ Array [ "method": "HEAD", "url": "https://clojars.org/repo/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "clojars.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -955,6 +1030,9 @@ Object { "name": "package", "registryUrl": "https://clojars.org/repo", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -1006,8 +1084,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -1051,8 +1129,8 @@ Array [ "host": "clojars.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -1072,6 +1150,15 @@ Array [ "method": "HEAD", "url": "https://clojars.org/repo/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "clojars.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://clojars.org/repo/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", diff --git a/lib/datasource/clojure/index.spec.ts b/lib/datasource/clojure/index.spec.ts index d6b4d312aa7e53..5cd42ec50797fa 100644 --- a/lib/datasource/clojure/index.spec.ts +++ b/lib/datasource/clojure/index.spec.ts @@ -42,6 +42,7 @@ function mockGenericPackage(opts: MockOpts = {}) { const jars = opts.jars === undefined ? { + '0.0.1': 200, '1.0.0': 200, '1.0.1': 404, '1.0.2': 500, @@ -94,9 +95,12 @@ function mockGenericPackage(opts: MockOpts = {}) { .map((x) => parseInt(x, 10)) .map((x) => (x < 10 ? `0${x}` : `${x}`)); const timestamp = `2020-01-01T${major}:${minor}:${patch}.000Z`; + const headers = version.startsWith('0.') + ? {} + : { 'Last-Modified': timestamp }; scope .head(`/${packagePath}/${version}/${artifact}-${version}.pom`) - .reply(status, '', { 'Last-Modified': timestamp }); + .reply(status, '', headers); }); } @@ -188,6 +192,7 @@ describe('datasource/clojure/index', () => { ); expect(releases).toMatchObject([ + { version: '0.0.1' }, { version: '1.0.0' }, { version: '1.0.3-SNAPSHOT' }, { version: '2.0.0' }, diff --git a/lib/datasource/maven/__fixtures__/metadata.xml b/lib/datasource/maven/__fixtures__/metadata.xml index aa8588fb848e35..c10f6f2fd822d4 100644 --- a/lib/datasource/maven/__fixtures__/metadata.xml +++ b/lib/datasource/maven/__fixtures__/metadata.xml @@ -6,6 +6,7 @@ 2.0.0 2.0.0 + 0.0.1 1.0.0 1.0.1 1.0.2 diff --git a/lib/datasource/maven/__snapshots__/index.spec.ts.snap b/lib/datasource/maven/__snapshots__/index.spec.ts.snap index 799a466c033d0c..a040d010a5060a 100644 --- a/lib/datasource/maven/__snapshots__/index.spec.ts.snap +++ b/lib/datasource/maven/__snapshots__/index.spec.ts.snap @@ -26,8 +26,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -71,8 +71,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -92,6 +92,15 @@ Array [ "method": "HEAD", "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -151,6 +160,9 @@ Object { "name": "package", "registryUrl": "https://repo.maven.apache.org/maven2", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -229,8 +241,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -274,8 +286,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -295,6 +307,15 @@ Array [ "method": "HEAD", "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -702,8 +723,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -747,8 +768,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -768,6 +789,15 @@ Array [ "method": "HEAD", "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -810,8 +840,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -855,8 +885,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -876,6 +906,15 @@ Array [ "method": "HEAD", "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -899,6 +938,9 @@ Array [ exports[`datasource/maven/index ignores unsupported protocols 1`] = ` Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -940,8 +982,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "http://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "http://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -985,8 +1027,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "http://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "http://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -1006,6 +1048,15 @@ Array [ "method": "HEAD", "url": "http://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "http://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -1035,6 +1086,9 @@ Object { "name": "package", "registryUrl": "https://frontend_for_private_s3_repository/maven2", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "version": "1.0.0", }, @@ -1125,6 +1179,9 @@ Object { "name": "package", "registryUrl": "https://repo.maven.apache.org/maven2", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -1167,8 +1224,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -1212,8 +1269,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -1233,6 +1290,15 @@ Array [ "method": "HEAD", "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -1262,6 +1328,9 @@ Object { "name": "package", "registryUrl": "https://custom.registry.renovatebot.com", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -1307,8 +1376,8 @@ Array [ "host": "custom.registry.renovatebot.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://custom.registry.renovatebot.com/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -1357,8 +1426,8 @@ Array [ "host": "custom.registry.renovatebot.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -1380,6 +1449,16 @@ Array [ "method": "HEAD", "url": "https://custom.registry.renovatebot.com/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "custom.registry.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://custom.registry.renovatebot.com/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -1411,6 +1490,9 @@ Object { "name": "package", "registryUrl": "https://repo.maven.apache.org/maven2", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -1462,8 +1544,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -1507,8 +1589,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -1528,6 +1610,15 @@ Array [ "method": "HEAD", "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -1557,6 +1648,9 @@ Object { "name": "package", "registryUrl": "https://repo.maven.apache.org/maven2", "releases": Array [ + Object { + "version": "0.0.1", + }, Object { "releaseTimestamp": "2020-01-01T01:00:00.000Z", "version": "1.0.0", @@ -1608,8 +1702,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "GET", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", }, Object { "headers": Object { @@ -1653,8 +1747,8 @@ Array [ "host": "repo.maven.apache.org", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, - "method": "HEAD", - "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", }, Object { "headers": Object { @@ -1674,6 +1768,15 @@ Array [ "method": "HEAD", "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", diff --git a/lib/datasource/maven/index.spec.ts b/lib/datasource/maven/index.spec.ts index 523ddc153ffe2c..55e573330ffd56 100644 --- a/lib/datasource/maven/index.spec.ts +++ b/lib/datasource/maven/index.spec.ts @@ -37,6 +37,7 @@ function mockGenericPackage(opts: MockOpts = {}) { const jars = opts.jars === undefined ? { + '0.0.1': 200, '1.0.0': 200, '1.0.1': 404, '1.0.2': 500, @@ -85,9 +86,12 @@ function mockGenericPackage(opts: MockOpts = {}) { .map((x) => parseInt(x, 10)) .map((x) => (x < 10 ? `0${x}` : `${x}`)); const timestamp = `2020-01-01T${major}:${minor}:${patch}.000Z`; + const headers = version.startsWith('0.') + ? {} + : { 'Last-Modified': timestamp }; scope .head(`/${packagePath}/${version}/${artifact}-${version}.pom`) - .reply(status, '', { 'Last-Modified': timestamp }); + .reply(status, '', headers); }); } @@ -201,6 +205,7 @@ describe('datasource/maven/index', () => { ); expect(releases).toMatchObject([ + { version: '0.0.1' }, { version: '1.0.0' }, { version: '1.0.3-SNAPSHOT' }, { version: '2.0.0' }, From 60d03add71de49a04dfbf202156600b34be841d3 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 14 Nov 2021 14:16:54 +0300 Subject: [PATCH 054/248] refactor(maven): Clarify HTTP resource check function (#12640) --- lib/datasource/maven/index.ts | 18 ++++++++++-------- lib/datasource/maven/types.ts | 2 ++ lib/datasource/maven/util.ts | 27 +++++++++++++++++++++------ lib/datasource/metadata.ts | 2 +- 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index 5d6666377c7559..acbc41ab7141f6 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -10,11 +10,11 @@ import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; import { MAVEN_REPO } from './common'; import type { MavenDependency, ReleaseMap } from './types'; import { + checkHttpResource, downloadMavenXml, getDependencyInfo, getDependencyParts, getMavenUrl, - isHttpResourceExists, } from './util'; export { id } from './common'; @@ -198,19 +198,21 @@ async function addReleasesUsingHeadRequests( repoUrl ); const artifactUrl = getMavenUrl(dependency, repoUrl, pomUrl); - const res = await isHttpResourceExists(artifactUrl); const release: Release = { version }; - if (is.string(res)) { - release.releaseTimestamp = res; - } + const res = await checkHttpResource(artifactUrl); - // Retry earlier for error status other than 404 - if (res === null) { + if (res === 'error') { retryEarlier = true; } - workingReleaseMap[version] = res ? release : null; + if (is.date(res)) { + release.releaseTimestamp = res.toISOString(); + } + + if (res !== 'not-found' && res !== 'error') { + workingReleaseMap[version] = release; + } } ); diff --git a/lib/datasource/maven/types.ts b/lib/datasource/maven/types.ts index 780360f247bc0c..c66c311f1604b8 100644 --- a/lib/datasource/maven/types.ts +++ b/lib/datasource/maven/types.ts @@ -14,3 +14,5 @@ export interface MavenXml { } export type ReleaseMap = Record; + +export type HttpResourceCheckResult = 'found' | 'not-found' | 'error' | Date; diff --git a/lib/datasource/maven/util.ts b/lib/datasource/maven/util.ts index 1a637553523eb0..a0e60610143242 100644 --- a/lib/datasource/maven/util.ts +++ b/lib/datasource/maven/util.ts @@ -1,14 +1,20 @@ import url from 'url'; +import { DateTime } from 'luxon'; import { XmlDocument } from 'xmldoc'; import { HOST_DISABLED } from '../../constants/error-messages'; import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; import { Http, HttpResponse } from '../../util/http'; import { regEx } from '../../util/regex'; +import { normalizeDate } from '../metadata'; import type { ReleaseResult } from '../types'; import { MAVEN_REPO, id } from './common'; -import type { MavenDependency, MavenXml } from './types'; +import type { + HttpResourceCheckResult, + MavenDependency, + MavenXml, +} from './types'; const http: Record = {}; @@ -100,18 +106,27 @@ export async function downloadHttpProtocol( } } -export async function isHttpResourceExists( +export async function checkHttpResource( pkgUrl: url.URL | string, hostType = id -): Promise { +): Promise { try { const httpClient = httpByHostType(hostType); const res = await httpClient.head(pkgUrl.toString()); const timestamp = res?.headers?.['last-modified'] as string; - return timestamp || true; + if (timestamp) { + const isoTimestamp = normalizeDate(timestamp); + if (isoTimestamp) { + const releaseDate = DateTime.fromISO(isoTimestamp, { + zone: 'UTC', + }).toJSDate(); + return releaseDate; + } + } + return 'found'; } catch (err) { if (isNotFoundError(err)) { - return false; + return 'not-found'; } const failedUrl = pkgUrl.toString(); @@ -119,7 +134,7 @@ export async function isHttpResourceExists( { failedUrl, statusCode: err.statusCode }, `Can't check HTTP resource existence` ); - return null; + return 'error'; } } diff --git a/lib/datasource/metadata.ts b/lib/datasource/metadata.ts index 25103f1927058a..95b611da71d0c8 100644 --- a/lib/datasource/metadata.ts +++ b/lib/datasource/metadata.ts @@ -126,7 +126,7 @@ function massageGitlabUrl(url: string): string { .replace('.git', ''); } -function normalizeDate(input: any): string | null { +export function normalizeDate(input: any): string | null { if ( typeof input === 'number' && !Number.isNaN(input) && From 9c56a167cdb3de1f3981dd1e988bb3069a2f37c5 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 14 Nov 2021 17:35:27 +0300 Subject: [PATCH 055/248] fix(maven): Fetch latest when all releases are unstable (#12647) --- lib/datasource/maven/index.ts | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index acbc41ab7141f6..1a7e6d97acc4fe 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -28,13 +28,17 @@ function isStableVersion(x: string): boolean { return mavenVersion.isStable(x); } -function getLatestStableVersion(releases: Release[]): string | undefined { - return releases - .map(({ version }) => version) - .filter(isStableVersion) - .reduce((latestVersion, version) => - compare(version, latestVersion) === 1 ? version : latestVersion - ); +function getLatestSuitableVersion(releases: Release[]): string | null { + // istanbul ignore if + if (!releases?.length) { + return null; + } + const allVersions = releases.map(({ version }) => version); + const stableVersions = allVersions.filter(isStableVersion); + const versions = stableVersions.length ? stableVersions : allVersions; + return versions.reduce((latestVersion, version) => + compare(version, latestVersion) === 1 ? version : latestVersion + ); } function extractVersions(metadata: XmlDocument): string[] { @@ -261,10 +265,10 @@ export async function getReleases({ `Found ${releases.length} new releases for ${dependency.display} in repository ${repoUrl}` ); - const latestStableVersion = getLatestStableVersion(releases); + const latestSuitableVersion = getLatestSuitableVersion(releases); const dependencyInfo = - latestStableVersion && - (await getDependencyInfo(dependency, repoUrl, latestStableVersion)); + latestSuitableVersion && + (await getDependencyInfo(dependency, repoUrl, latestSuitableVersion)); return { ...dependency, ...dependencyInfo, releases }; } From ab5abd7553d4e228513342ea3cae4ab1b13b3577 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 14 Nov 2021 20:23:17 +0100 Subject: [PATCH 056/248] fix: replace word check with click (#12650) --- lib/workers/branch/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts index e6fec35819a432..56f107a55a4a24 100644 --- a/lib/workers/branch/index.ts +++ b/lib/workers/branch/index.ts @@ -647,7 +647,7 @@ export async function processBranch( ' - any of the package files in this branch needs updating, or \n'; content += ' - the branch becomes conflicted, or\n'; content += - ' - you check the rebase/retry checkbox if found above, or\n'; + ' - you click the rebase/retry checkbox if found above, or\n'; content += ' - you rename this PR\'s title to start with "rebase!" to trigger it manually'; content += '\n\nThe artifact failure details are included below:\n\n'; From c80c7f3d0cfd4118ee30648eebfe75d9fcc3a593 Mon Sep 17 00:00:00 2001 From: markussiebert Date: Sun, 14 Nov 2021 20:49:05 +0100 Subject: [PATCH 057/248] feat: add stringToPrettyJSON handlebars function (#12643) --- docs/usage/templates.md | 10 ++++++++++ lib/util/template/__snapshots__/index.spec.ts.snap | 8 ++++++++ lib/util/template/index.spec.ts | 6 ++++++ lib/util/template/index.ts | 4 ++++ 4 files changed, 28 insertions(+) diff --git a/docs/usage/templates.md b/docs/usage/templates.md index 6bdf0688c235b4..470c1d0efda945 100644 --- a/docs/usage/templates.md +++ b/docs/usage/templates.md @@ -20,3 +20,13 @@ Some are configuration options passed through, while others are generated as par ## Other available fields + +## Additional Handlebars helpers + +### stringToPrettyJSON + +If you want to print pretty JSON with Handlebars you can use the built-in function `stringToPrettyJSON` like this: + +`{{{stringToPrettyJSON myvar}}}` + +In the example above `myvar` is a variable/field, that contains valid JSON. diff --git a/lib/util/template/__snapshots__/index.spec.ts.snap b/lib/util/template/__snapshots__/index.spec.ts.snap index e9fc7048944be9..d900a0a7515238 100644 --- a/lib/util/template/__snapshots__/index.spec.ts.snap +++ b/lib/util/template/__snapshots__/index.spec.ts.snap @@ -1,3 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`util/template/index filters out disallowed fields 1`] = `"github token = \\"\\""`; + +exports[`util/template/index string to pretty JSON 1`] = ` +"{ + \\"some\\": { + \\"fancy\\": \\"json\\" + } +}" +`; diff --git a/lib/util/template/index.spec.ts b/lib/util/template/index.spec.ts index 652d0f5e352757..55ab3c7b27362c 100644 --- a/lib/util/template/index.spec.ts +++ b/lib/util/template/index.spec.ts @@ -18,4 +18,10 @@ describe('util/template/index', () => { expect(output).toContain('github'); expect(output).not.toContain('123test'); }); + it('string to pretty JSON ', () => { + const userTemplate = + '{{{ stringToPrettyJSON \'{"some":{"fancy":"json"}}\'}}}'; + const output = template.compile(userTemplate, undefined); + expect(output).toMatchSnapshot(); + }); }); diff --git a/lib/util/template/index.ts b/lib/util/template/index.ts index d5415734a1b114..4a4ad1ee33af62 100644 --- a/lib/util/template/index.ts +++ b/lib/util/template/index.ts @@ -6,6 +6,10 @@ import { clone } from '../clone'; handlebars.registerHelper('encodeURIComponent', encodeURIComponent); +handlebars.registerHelper('stringToPrettyJSON', (input: string): string => + JSON.stringify(JSON.parse(input), null, 2) +); + // istanbul ignore next handlebars.registerHelper( 'replace', From 0f9b2384547e91ec3dff4b2191506a4bc82a1cd5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 14 Nov 2021 23:50:06 +0000 Subject: [PATCH 058/248] build(deps): update dependency slugify to v1.6.2 (#12648) 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 4454a39c96a43b..0bbed71e410c94 100644 --- a/package.json +++ b/package.json @@ -191,7 +191,7 @@ "shlex": "2.1.0", "shortid": "2.2.16", "simple-git": "2.47.0", - "slugify": "1.6.1", + "slugify": "1.6.2", "traverse": "0.6.6", "upath": "2.0.1", "url-join": "4.0.1", diff --git a/yarn.lock b/yarn.lock index 79abc17c473767..0ff5fd2eea185a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8237,10 +8237,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slugify@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.1.tgz#a5fcaef29f4e57c6e932ce7044b6ffd9cf81b641" - integrity sha512-5ofqMTbetNhxlzjYYLBaZFQd6oiTuSkQlyfPEFIMwgUABlZQ0hbk5xIV9Ydd5jghWeRoO7GkiJliUvTpLOjNRA== +slugify@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.2.tgz#4cb97220a2278e1b86fb017c6da668e6a865354c" + integrity sha512-XMtI8qD84LwCpthLMBHlIhcrj10cgA+U/Ot8G6FD6uFuWZtMfKK75JO7l81nzpFJsPlsW6LT+VKqWQJW3+6New== smart-buffer@^4.1.0: version "4.2.0" From 550954799f08408ca9b30cb3b5edc14f66ea82a0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 02:03:37 +0000 Subject: [PATCH 059/248] build(deps): update dependency luxon to v2.1.0 (#12651) 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 0bbed71e410c94..fd0830d59331f6 100644 --- a/package.json +++ b/package.json @@ -168,7 +168,7 @@ "json-dup-key-validator": "1.0.3", "json-stringify-pretty-compact": "3.0.0", "json5": "2.2.0", - "luxon": "2.0.2", + "luxon": "2.1.0", "markdown-it": "12.2.0", "markdown-table": "2.0.0", "marshal": "0.5.2", diff --git a/yarn.lock b/yarn.lock index 0ff5fd2eea185a..63794a11e1afe1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6194,10 +6194,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -luxon@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.0.2.tgz#11f2cd4a11655fdf92e076b5782d7ede5bcdd133" - integrity sha512-ZRioYLCgRHrtTORaZX1mx+jtxKtKuI5ZDvHNAmqpUzGqSrR+tL4FVLn/CUGMA3h0+AKD1MAxGI5GnCqR5txNqg== +luxon@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.1.0.tgz#3e50a1d2fa92b2e250e2a5d9ee9208a6c0263141" + integrity sha512-R0VSFyNh3+3SxM+eLyGSc1IYg+QHD/G1k0RvpXncYccO7SA4luC7QqdXyHospyu3t36pMHeCvd7Jlaab8fsF+w== make-dir@^3.0.0: version "3.1.0" From 84bf70ac10d279ae015b0f62ba8a0095df2b9299 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 03:49:10 +0000 Subject: [PATCH 060/248] chore(deps): update dependency nock to v13.2.0 (#12653) 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 fd0830d59331f6..d8cc55dd64249a 100644 --- a/package.json +++ b/package.json @@ -266,7 +266,7 @@ "markdownlint-cli2": "0.3.2", "mock-fs": "5.1.1", "mockdate": "3.0.5", - "nock": "13.1.4", + "nock": "13.2.0", "npm-run-all": "4.1.5", "prettier": "2.4.1", "pretty-quick": "3.1.1", diff --git a/yarn.lock b/yarn.lock index 63794a11e1afe1..5045d4559b6801 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6697,10 +6697,10 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nock@13.1.4: - version "13.1.4" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.1.4.tgz#367c917d4c532a889404b85ade92762c29e80262" - integrity sha512-hr5+mknLpIbTOXifB13lx9mAKF1zQPUCMh53Galx79ic5opvNOd55jiB0iGCp2xqh+hwnFbNE/ddBKHsJNQrbw== +nock@13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.2.0.tgz#1da976e809cb082e3acb65de9ea7839cdd115d3e" + integrity sha512-j7xjoMU9ZnvkTeoLnD2gIXNlwmLb+GNCPbnqtx7IwlNvdBBqU5aaQPK4Nw6lNmqIJkBubyka6rvrZuDNz1L7Ew== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" From bc7c0c530349dcc68c1b173e07a437c86b97108b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 15 Nov 2021 09:16:39 +0300 Subject: [PATCH 061/248] fix(gomod): Fix gomod digest updates (#12655) --- lib/datasource/go/digest.spec.ts | 2 +- lib/datasource/go/index.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/datasource/go/digest.spec.ts b/lib/datasource/go/digest.spec.ts index 0da89888e90f36..1439970baa663f 100644 --- a/lib/datasource/go/digest.spec.ts +++ b/lib/datasource/go/digest.spec.ts @@ -1,7 +1,7 @@ import * as httpMock from '../../../test/http-mock'; import { mocked } from '../../../test/util'; import * as _hostRules from '../../util/host-rules'; -import { getDigest } from './digest'; +import { getDigest } from '.'; jest.mock('../../util/host-rules'); diff --git a/lib/datasource/go/index.ts b/lib/datasource/go/index.ts index dcc924c25ff9ca..2e805c7197cd5f 100644 --- a/lib/datasource/go/index.ts +++ b/lib/datasource/go/index.ts @@ -4,6 +4,8 @@ import * as goproxy from './releases-goproxy'; export { id } from './common'; +export { getDigest } from './digest'; + export const customRegistrySupport = false; export function getReleases( From 665b3d359cf5db486550afb32d593de2096386b9 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 15 Nov 2021 11:33:45 +0300 Subject: [PATCH 062/248] test(gradle): Refactor tests for parser (#12657) --- .../shallow/__snapshots__/parser.spec.ts.snap | 2 +- lib/manager/gradle/shallow/parser.spec.ts | 412 ++++++------------ 2 files changed, 129 insertions(+), 285 deletions(-) diff --git a/lib/manager/gradle/shallow/__snapshots__/parser.spec.ts.snap b/lib/manager/gradle/shallow/__snapshots__/parser.spec.ts.snap index 4eabcf1f148f9f..16b36d3b357f8b 100644 --- a/lib/manager/gradle/shallow/__snapshots__/parser.spec.ts.snap +++ b/lib/manager/gradle/shallow/__snapshots__/parser.spec.ts.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`manager/gradle/shallow/parser parses fixture from "gradle" manager 1`] = ` +exports[`manager/gradle/shallow/parser calculations parses fixture from "gradle" manager 1`] = ` Array [ Object { "currentValue": "1.5.2.RELEASE", diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index 3518da4690ed80..04c0f1bcf36bce 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -13,307 +13,151 @@ describe('manager/gradle/shallow/parser', () => { expect(parseGradle('version = ').deps).toBeEmpty(); expect(parseGradle('id "foo.bar" version').deps).toBeEmpty(); }); - it('parses variables', () => { - let deps; - ({ deps } = parseGradle( - [ - 'version = "1.2.3"', - '"foo:bar_$version:$version"', - 'version = "3.2.1"', - ].join('\n') - )); - expect(deps).toMatchObject([ - { - depName: 'foo:bar_1.2.3', - currentValue: '1.2.3', - }, - ]); - - ({ deps } = parseGradle( - [ - 'set("version", "1.2.3")', - '"foo:bar:$version"', - 'set("version", "3.2.1")', - ].join('\n') - )); - expect(deps).toMatchObject([ - { - depName: 'foo:bar', - currentValue: '1.2.3', - }, - ]); - - ({ deps } = parseGradle('version = "1.2.3"\n"foo:bar:$version@@@"')); - expect(deps).toBeEmpty(); - - ({ deps } = parseGradle( - ['versions.foobar = "1.2.3"', '"foo:bar:${versions.foobar}"'].join('\n') - )); - expect(deps).toMatchObject([ - { - depName: 'foo:bar', - currentValue: '1.2.3', - groupName: 'versions.foobar', - }, - ]); - - ({ deps } = parseGradle( - ['versions.foobar = "1.2.3"', '"foo:bar:$versions.foobar"'].join('\n') - )); - expect(deps).toMatchObject([ - { - depName: 'foo:bar', - currentValue: '1.2.3', - groupName: 'versions.foobar', - }, - ]); - - expect( - parseGradle('foo.bar = "foo:bar:1.2.3"', {}, 'versions.gradle') - ).toMatchObject({ - vars: { - 'foo.bar': { - fileReplacePosition: 11, - key: 'foo.bar', - packageFile: 'versions.gradle', - value: 'foo:bar:1.2.3', - }, - }, - deps: [ - { - depName: 'foo:bar', - currentValue: '1.2.3', - groupName: 'foo.bar', - managerData: { - fileReplacePosition: 19, - }, - }, - ], + describe('variable assignments', () => { + test.each` + input | name | value + ${'version = "1.2.3"'} | ${'version'} | ${'1.2.3'} + ${'set("version", "1.2.3")'} | ${'version'} | ${'1.2.3'} + ${'versions.foobar = "1.2.3"'} | ${'versions.foobar'} | ${'1.2.3'} + `('$input', ({ input, name, value }) => { + const { vars } = parseGradle(input); + expect(vars).toContainKey(name); + expect(vars[name]).toMatchObject({ key: name, value }); }); }); - it('parses registryUrls', () => { - let urls; - - ({ urls } = parseGradle('url ""')); - expect(urls).toBeEmpty(); - - ({ urls } = parseGradle('url "#!@"')); - expect(urls).toBeEmpty(); - - ({ urls } = parseGradle('url "https://example.com"')); - expect(urls).toStrictEqual(['https://example.com']); - ({ urls } = parseGradle('url("https://example.com")')); - expect(urls).toStrictEqual(['https://example.com']); - - ({ urls } = parseGradle('uri "https://example.com"')); - expect(urls).toStrictEqual(['https://example.com']); - - ({ urls } = parseGradle( - 'mavenCentral(); uri("https://example.com"); jcenter(); google(); gradlePluginPortal();' - )); - expect(urls).toStrictEqual([ - MAVEN_REPO, - 'https://example.com', - JCENTER_REPO, - GOOGLE_REPO, - GRADLE_PLUGIN_PORTAL_REPO, - ]); - - ({ urls } = parseGradle( - 'maven("https://repository.mycompany.com/m2/repository")' - )); - expect(urls).toStrictEqual([ - 'https://repository.mycompany.com/m2/repository', - ]); + describe('dependencies', () => { + describe('simple cases', () => { + test.each` + input | output + ${'group: "foo", name: "bar", version: "1.2.3"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${"implementation platform(group: 'foo', name: 'bar', version: '1.2.3')"} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${'group: "foo", name: "bar", version: depVersion'} | ${null} + ${'("foo", "bar", "1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${'(group = "foo", name = "bar", version = "1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${'createXmlValueRemover("defaults", "integer", "integer")'} | ${{ depName: 'defaults:integer', currentValue: 'integer', skipReason: SkipReason.Ignored }} + ${'"foo:bar:1.2.3@zip"'} | ${{ currentValue: '1.2.3', dataType: 'zip', depName: 'foo:bar' }} + `('$input', ({ input, output }) => { + const { deps } = parseGradle(input); + expect(deps).toMatchObject([output].filter(Boolean)); + }); + }); - ({ urls } = parseGradle( - 'maven { url = uri("https://maven.springframework.org/release") }' - )); - expect(urls).toStrictEqual(['https://maven.springframework.org/release']); + describe('variable substitutions', () => { + test.each` + def | str | output + ${'foo = "1.2.3"'} | ${'"foo:bar:$foo@@@"'} | ${null} + ${'baz = "1.2.3"'} | ${'"foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }} + ${'foo.bar = "1.2.3"'} | ${'"foo:bar:$foo.bar"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'foo.bar' }} + ${''} | ${'foo.bar = "foo:bar:1.2.3"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${'baz = "1.2.3"'} | ${'foobar = "foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }} + ${'baz = "1.2.3"'} | ${'group: "foo", name: "bar", version: baz'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + `('$def | $str', ({ def, str, output }) => { + const input = [def, str].join('\n'); + const { deps } = parseGradle(input); + expect(deps).toMatchObject([output].filter(Boolean)); + }); + }); - ({ urls } = parseGradle( - "maven { url 'https://repository.mycompany.com/m2/repository' }" - )); - expect(urls).toStrictEqual([ - 'https://repository.mycompany.com/m2/repository', - ]); + describe('plugins', () => { + test.each` + input | output + ${'id "foo.bar" version "1.2.3"'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} + ${'id("foo.bar") version "1.2.3"'} | ${{ depName: 'foo.bar', lookupName: 'foo.bar:foo.bar.gradle.plugin', currentValue: '1.2.3' }} + ${'kotlin("jvm") version "1.3.71"'} | ${{ depName: 'org.jetbrains.kotlin.jvm', lookupName: 'org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin', currentValue: '1.3.71' }} + `('$input', ({ input, output }) => { + const { deps } = parseGradle(input); + expect(deps).toMatchObject([output].filter(Boolean)); + }); + }); }); - it('parses long form deps', () => { - let deps; - ({ deps } = parseGradle( - 'group: "com.example", name: "my.dependency", version: "1.2.3"' - )); - expect(deps).toMatchObject([ - { - depName: 'com.example:my.dependency', - currentValue: '1.2.3', - }, - ]); - - ({ deps } = parseGradle( - "implementation platform(group: 'foo', name: 'bar', version: '1.2.3')" - )); - expect(deps).toMatchObject([ - { - depName: 'foo:bar', - currentValue: '1.2.3', - }, - ]); - - ({ deps } = parseGradle( - 'group: "com.example", name: "my.dependency", version: depVersion' - )); - expect(deps).toBeEmpty(); - - ({ deps } = parseGradle( - 'depVersion = "1.2.3"\ngroup: "com.example", name: "my.dependency", version: depVersion' - )); - expect(deps).toMatchObject([ - { - depName: 'com.example:my.dependency', - currentValue: '1.2.3', - }, - ]); - - ({ deps } = parseGradle('("com.example", "my.dependency", "1.2.3")')); - expect(deps).toMatchObject([ - { - depName: 'com.example:my.dependency', - currentValue: '1.2.3', - }, - ]); - ({ deps } = parseGradle( - '(group = "com.example", name = "my.dependency", version = "1.2.3")' - )); - expect(deps).toMatchObject([ - { - depName: 'com.example:my.dependency', - currentValue: '1.2.3', - }, - ]); - - ({ deps } = parseGradle( - 'createXmlValueRemover("defaults", "integer", "integer")' - )); - expect(deps).toMatchObject([ - { - depName: 'defaults:integer', - currentValue: 'integer', - skipReason: SkipReason.Ignored, - }, - ]); - - ({ deps } = parseGradle('url "https://example.com"; "foo:bar:1.2.3@zip"')); - expect(deps).toMatchInlineSnapshot(` - Array [ - Object { - "currentValue": "1.2.3", - "dataType": "zip", - "depName": "foo:bar", - "managerData": Object { - "fileReplacePosition": 36, - "packageFile": undefined, - }, - }, - ] - `); + describe('registryUrls', () => { + test.each` + input | url + ${'url ""'} | ${null} + ${'url "#!@"'} | ${null} + ${'url "https://example.com"'} | ${'https://example.com'} + ${'url("https://example.com")'} | ${'https://example.com'} + ${'mavenCentral()'} | ${MAVEN_REPO} + ${'jcenter()'} | ${JCENTER_REPO} + ${'google()'} | ${GOOGLE_REPO} + ${'gradlePluginPortal()'} | ${GRADLE_PLUGIN_PORTAL_REPO} + ${'maven("https://foo.bar/baz/qux")'} | ${'https://foo.bar/baz/qux'} + ${'maven { url = uri("https://foo.bar/baz") }'} | ${'https://foo.bar/baz'} + ${"maven { url 'https://foo.bar/baz' }"} | ${'https://foo.bar/baz'} + `('$input', ({ input, url }) => { + const expected = [url].filter(Boolean); + const { urls } = parseGradle(input); + expect(urls).toStrictEqual(expected); + }); }); - it('parses plugin', () => { - let deps; - ({ deps } = parseGradle('id "foo.bar" version "1.2.3"')); - expect(deps).toMatchObject([ - { - depName: 'foo.bar', - lookupName: 'foo.bar:foo.bar.gradle.plugin', - currentValue: '1.2.3', - }, - ]); - - ({ deps } = parseGradle('id("foo.bar") version "1.2.3"')); - expect(deps).toMatchObject([ - { - depName: 'foo.bar', - lookupName: 'foo.bar:foo.bar.gradle.plugin', - currentValue: '1.2.3', - }, - ]); + describe('calculations', () => { + it('calculates offset', () => { + const content = "'foo:bar:1.2.3'"; + const { deps } = parseGradle(content); + const [res] = deps; + const idx = content + .slice(res.managerData.fileReplacePosition) + .indexOf('1.2.3'); + expect(idx).toBe(0); + }); - ({ deps } = parseGradle('kotlin("jvm") version "1.3.71"')); - expect(deps).toMatchObject([ - { - depName: 'org.jetbrains.kotlin.jvm', - lookupName: - 'org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin', - currentValue: '1.3.71', - }, - ]); - }); - it('parses fixture from "gradle" manager', () => { - const content = loadFixture('build.gradle.example1', '../deep/'); - const { deps } = parseGradle(content, {}, 'build.gradle'); - deps.forEach((dep) => { - expect( - content - .slice(dep.managerData.fileReplacePosition) - .indexOf(dep.currentValue) - ).toBe(0); + it('parses fixture from "gradle" manager', () => { + const content = loadFixture('build.gradle.example1', '../deep/'); + const { deps } = parseGradle(content, {}, 'build.gradle'); + const replacementIndices = deps.map(({ managerData, currentValue }) => + content.slice(managerData.fileReplacePosition).indexOf(currentValue) + ); + expect(replacementIndices.every((idx) => idx === 0)).toBeTrue(); + expect(deps).toMatchSnapshot(); }); - expect(deps).toMatchSnapshot(); - }); - it('calculates offset', () => { - const content = "'foo:bar:1.2.3'"; - const { deps } = parseGradle(content); - const res = deps[0]; - expect( - content.slice(res.managerData.fileReplacePosition).indexOf('1.2.3') - ).toBe(0); }); - it('gradle.properties', () => { - expect(parseProps('foo=bar')).toMatchObject({ - vars: { - foo: { - fileReplacePosition: 4, - key: 'foo', - value: 'bar', - }, - }, - deps: [], - }); - expect(parseProps(' foo = bar ')).toMatchObject({ - vars: { - foo: { key: 'foo', value: 'bar', fileReplacePosition: 7 }, - }, - deps: [], + + describe('gradle.properties', () => { + test.each` + input | key | value | fileReplacePosition + ${'foo=bar'} | ${'foo'} | ${'bar'} | ${4} + ${' foo = bar '} | ${'foo'} | ${'bar'} | ${7} + ${'foo.bar=baz'} | ${'foo.bar'} | ${'baz'} | ${8} + `('$input', ({ input, key, value, fileReplacePosition }) => { + expect(parseProps(input)).toMatchObject({ + vars: { [key]: { key, value, fileReplacePosition } }, + }); }); - expect(parseProps('foo.bar=baz')).toMatchObject({ - vars: { - 'foo.bar': { key: 'foo.bar', value: 'baz', fileReplacePosition: 8 }, - }, - deps: [], + + it('handles multi-line file', () => { + expect(parseProps('foo=foo\nbar=bar')).toMatchObject({ + vars: { + foo: { key: 'foo', value: 'foo', fileReplacePosition: 4 }, + bar: { key: 'bar', value: 'bar', fileReplacePosition: 12 }, + }, + deps: [], + }); }); - expect(parseProps('foo=foo\nbar=bar')).toMatchObject({ - vars: { - foo: { key: 'foo', value: 'foo', fileReplacePosition: 4 }, - bar: { key: 'bar', value: 'bar', fileReplacePosition: 12 }, - }, - deps: [], + + it('attaches packageFile', () => { + expect( + parseProps('foo = bar', 'foo/bar/gradle.properties') + ).toMatchObject({ + vars: { foo: { packageFile: 'foo/bar/gradle.properties' } }, + }); }); - expect(parseProps('x=foo:bar:baz', 'x/gradle.properties')).toMatchObject({ - vars: {}, - deps: [ - { - currentValue: 'baz', - depName: 'foo:bar', - managerData: { - fileReplacePosition: 10, - packageFile: 'x/gradle.properties', + + it('parses dependencies', () => { + const res = parseProps('dep = foo:bar:1.2.3'); + + expect(res).toMatchObject({ + deps: [ + { + currentValue: '1.2.3', + depName: 'foo:bar', + managerData: { fileReplacePosition: 14 }, }, - }, - ], + ], + }); }); }); }); From 8e8315dedc996afff5d66a8bb1a5f979689aba17 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 15 Nov 2021 10:02:57 +0100 Subject: [PATCH 063/248] docs: expand abbreviation js to javascript (#12661) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ff935b4e21ddd6..da0c383773edf5 100644 --- a/readme.md +++ b/readme.md @@ -63,7 +63,7 @@ If you are not on github.com or gitlab.com, or you prefer to run your own instan - Install the `renovate` CLI tool from npmjs, run it on a schedule (e.g. using cron) - Run the `renovate/renovate` Docker Hub image (same content/versions as the CLI tool), run it on a schedule -- Run the `renovate/renovate:slim` Docker Hub image if you only use package managers that don't need third party binaries (e.g. JS, Docker, NuGet, pip) +- Run the `renovate/renovate:slim` Docker Hub image if you only use package managers that don't need third party binaries (e.g. JavaScript, Docker, NuGet, pip) [More details on the self-hosting development](https://github.com/renovatebot/renovate/blob/main/docs/usage/getting-started/running.md). From 920d27a625128feccb2b8cf8d624490e78fb682e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 15 Nov 2021 11:44:25 +0100 Subject: [PATCH 064/248] docs: bump npm version used in example (#12660) --- docs/usage/node.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/usage/node.md b/docs/usage/node.md index 338b37a485a508..b7539087b6e154 100644 --- a/docs/usage/node.md +++ b/docs/usage/node.md @@ -24,12 +24,12 @@ When `binarySource=docker`, such as in the hosted WhiteSource Renovate App, Reno To control which version or constraint is installed, you should use the `engines.npm` property in your `package.json` file. Renovate bot will then use that version constraint for npm when it creates a pull request. -For example, if you want to use at least npm `6.14.11` and also allow newer versions of npm in the `6.x` range, you would put this in your `package.json` file: +For example, if you want to use at least npm `8.1.0` and also allow newer versions of npm in the `8.x` range, you would put this in your `package.json` file: ```json { "engines": { - "npm": "^6.14.11" + "npm": "^8.1.0" } } ``` From 8620a8fb030149183c964a21aa511f78331a1272 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 15 Nov 2021 11:55:20 +0100 Subject: [PATCH 065/248] docs: add link to correct page (#12665) --- docs/usage/getting-started/running.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/getting-started/running.md b/docs/usage/getting-started/running.md index eb7da8a38a7c1a..7d125cefaa2530 100644 --- a/docs/usage/getting-started/running.md +++ b/docs/usage/getting-started/running.md @@ -5,7 +5,7 @@ As a Renovate end user, there are two main categories of use: - You self-host Renovate, e.g. by running the pre-built Docker image, or - Someone else is hosting Renovate, and you install/configure it for the repositories you choose -If someone else is hosting Renovate for you, or you are using the WhiteSource Renovate App on GitHub, then you can skip ahead to the Installing Renovate into Repositories section. +If someone else is hosting Renovate for you, or you are using the WhiteSource Renovate App on GitHub, then you can skip ahead to the [installing & onboarding](./installing-onboarding.md) page. ## Self-Hosting Renovate From 534cf577d51738f18b21284e4258615d161eabc7 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 15 Nov 2021 11:57:09 +0100 Subject: [PATCH 066/248] docs(known limitations): improve example (#12663) --- docs/usage/known-limitations.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/usage/known-limitations.md b/docs/usage/known-limitations.md index 85186da221a865..d5cbd273481ce2 100644 --- a/docs/usage/known-limitations.md +++ b/docs/usage/known-limitations.md @@ -36,8 +36,8 @@ It also means that Renovate's knowledge about dependencies in the base branch is The limitation to only automerge branches which are up-to-date is a decision due to this example: -- Two dependencies are in use: `a@1.0.0` and `b@1.0.0` -- PRs exist for `a@2.0.0` and `b@2.0.0` and both pass tests -- The PR for `a@2.0.0` is automerged -- The PR for `b@2.0.0` remains open, does not have conflicts, and has all tests passing -- However, `a@2.0.0` and `b@2.0.0` are incompatible so merging the PR without rebasing and retesting it first would result in a broken base branch +- Two dependencies are in use: `alice@1.0.0` and `bob@1.0.0` +- PRs exist for `alice@2.0.0` and `bob@2.0.0` and both pass tests +- The PR for `alice@2.0.0` is automerged +- The PR for `bob@2.0.0` remains open, does not have conflicts, and has all tests passing +- However, `alice@2.0.0` and `bob@2.0.0` are incompatible so merging the PR without rebasing and retesting it first would result in a broken base branch From d666caad011e47329123923937ebd4a101101652 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 15 Nov 2021 12:01:26 +0100 Subject: [PATCH 067/248] docs(terraform): capitalize proper nouns, use monospaced text, fix grammar (#12662) --- lib/manager/terraform/readme.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/manager/terraform/readme.md b/lib/manager/terraform/readme.md index 9d3138c89cb327..50c204b2300a3a 100644 --- a/lib/manager/terraform/readme.md +++ b/lib/manager/terraform/readme.md @@ -22,17 +22,17 @@ Terraform range constraints are supported: - `~> 1.2`: any non-beta version >= 1.2.0 and < 2.0.0, e.g. 1.X.Y - `>= 1.0.0, <= 2.0.0`: any version between 1.0.0 and 2.0.0 inclusive -For fine-grained control, e.g. to turn off only parts of this manager, there are following `depTypes` provided: +For fine-grained control, e.g. to turn off only parts of this manager, you can use the following `depTypes`: -| resource | depType | -| --------------------------- | :---------------: | -| terraform provider | provider | -| required terraform provider | required_provider | -| required terraform version | required_version | -| terraform module | module | -| helm release | helm_release | -| docker container | docker_container | -| docker image | docker_image | -| docker service | docker_service | +| resource | depType | +| --------------------------- | :-----------------: | +| Terraform provider | `provider` | +| required Terraform provider | `required_provider` | +| required Terraform version | `required_version` | +| Terraform module | `module` | +| Helm release | `helm_release` | +| Docker container | `docker_container` | +| Docker image | `docker_image` | +| Docker service | `docker_service` | If you need to change the versioning format, read the [versioning](https://docs.renovatebot.com/modules/versioning/) documentation to learn more. From fba47734a55fc11d49fe184ebf466c10054a117e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 15 Nov 2021 12:04:40 +0100 Subject: [PATCH 068/248] docs(faq): reorder sections (#12666) --- docs/usage/faq.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/usage/faq.md b/docs/usage/faq.md index a1b219af4fd99b..ce87bef8e1c2c8 100644 --- a/docs/usage/faq.md +++ b/docs/usage/faq.md @@ -18,19 +18,6 @@ Renovate will: - Update `yarn.lock` and/or `package-lock.json` files if found - Create Pull Requests immediately after branch creation -## What is this `main` branch I see in the documentation? - -When you create a new repository with Git, Git creates a base branch for you. -The default branch name that Git uses is `master` (this will be changed to `main` later). - -The Git-hosting ecosystem has settled on using `main` to replace `master`. -When you create a new repository on say GitHub or GitLab, you'll get a `main` branch as your base branch. - -It therefore makes sense for Renovate to replace `master` with `main` where possible as well. - -A branch name has no special meaning within the Git program, it's just a name. -The base branch could be called `trunk` or `mainline` or `prod`, and Git would work just as well. - ## Which Renovate versions are officially supported? The Renovate maintainers only support the latest version of Renovate. @@ -56,6 +43,19 @@ Some major platform features are not supported at all by Renovate. | Merge trains | GitLab | [#5573](https://github.com/renovatebot/renovate/issues/5573) | | Configurable merge strategy and message | Only BitBucket for now | [#10867](https://github.com/renovatebot/renovate/issues/10867) [#10868](https://github.com/renovatebot/renovate/issues/10868) [#10869](https://github.com/renovatebot/renovate/issues/10869) [#10870](https://github.com/renovatebot/renovate/issues/10870) | +## What is this `main` branch I see in the documentation? + +When you create a new repository with Git, Git creates a base branch for you. +The default branch name that Git uses is `master` (this will be changed to `main` later). + +The Git-hosting ecosystem has settled on using `main` to replace `master`. +When you create a new repository on say GitHub or GitLab, you'll get a `main` branch as your base branch. + +It therefore makes sense for Renovate to replace `master` with `main` where possible as well. + +A branch name has no special meaning within the Git program, it's just a name. +The base branch could be called `trunk` or `mainline` or `prod`, and Git would work just as well. + ## What if I need to .. ? ### Troubleshoot Renovate From da7c2cc7f5b96cb1f48b34d0ff4a48d63afd5423 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 12:08:12 +0100 Subject: [PATCH 069/248] docs: update references to renovate/renovate to v29.8.2 (#12654) --- 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 75be256e8ccb23..1705f3c70c1305 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -229,7 +229,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:29.2.6 +FROM renovate/renovate:29.8.2 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From ffa08bb8fd5b5c22fedbd909f116d3a4b1f0cd62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 11:16:53 +0000 Subject: [PATCH 070/248] chore(deps): update dependency eslint-plugin-jest to v25.2.4 (#12668) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index d8cc55dd64249a..42eb1f6ac6269b 100644 --- a/package.json +++ b/package.json @@ -251,7 +251,7 @@ "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", "eslint-plugin-import": "2.25.2", - "eslint-plugin-jest": "25.2.3", + "eslint-plugin-jest": "25.2.4", "eslint-plugin-promise": "5.1.1", "expect-more-jest": "5.4.0", "glob": "7.2.0", diff --git a/yarn.lock b/yarn.lock index 5045d4559b6801..73f8376f49a55f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3879,10 +3879,10 @@ eslint-plugin-import@2.25.2: resolve "^1.20.0" tsconfig-paths "^3.11.0" -eslint-plugin-jest@25.2.3: - version "25.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.2.3.tgz#7a841eca91b4e21f31fe0a5403f55bc7779dd7b3" - integrity sha512-Yoa0at3euTjERDvPGPWiItY1uuqKYQ5Ov2SmkSLmKRq9OFiVdEehw0rWuK4PA538k7CNqnvmkztjAB9l+HJ7kQ== +eslint-plugin-jest@25.2.4: + version "25.2.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.2.4.tgz#bb9f6a0bd1fd524ffb0b8b7a159cd70a58a1a793" + integrity sha512-HRyinpgmEdkVr7pNPaYPHCoGqEzpgk79X8pg/xCeoAdurbyQjntJQ4pTzHl7BiVEBlam/F1Qsn+Dk0HtJO7Aaw== dependencies: "@typescript-eslint/experimental-utils" "^5.0.0" From 49c39f989cb69c2ba33801a136df2fa14202687f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 13:35:17 +0100 Subject: [PATCH 071/248] chore(deps): update dependency @types/luxon to v2.0.6 (#12667) Co-authored-by: Renovate Bot Co-authored-by: Rhys Arkins --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 42eb1f6ac6269b..37cdc23a428e91 100644 --- a/package.json +++ b/package.json @@ -225,7 +225,7 @@ "@types/js-yaml": "4.0.4", "@types/json-dup-key-validator": "1.0.0", "@types/linkify-markdown": "1.0.1", - "@types/luxon": "2.0.5", + "@types/luxon": "2.0.6", "@types/markdown-it": "12.2.3", "@types/markdown-table": "2.0.0", "@types/marshal": "0.5.1", diff --git a/yarn.lock b/yarn.lock index 73f8376f49a55f..2c87677b83c9cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1915,10 +1915,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.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.0.5.tgz#29d3b095d55ee50df8f4cf109b16009334d9828e" - integrity sha512-GKrG5v16BOs9XGpouu33hOkAFaiSDi3ZaDXG9F2yAoyzHRBtksZnI60VWY5aM/yAENCccBejrxw8jDY+9OVlxw== +"@types/luxon@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.0.6.tgz#14d022a107c300ef436f84763ba9f1a4f760ee1f" + integrity sha512-cjZwmN7ai2MG4xIKyrI1YP9QYU81huqYUHR7M6n1nm1+izqNWrdxihGDkuc7359ILROxpCnTt2A1sbKg7vXk/A== "@types/markdown-it@12.2.3": version "12.2.3" From 773eb7ce7ee06721a2449b60f4c3dd8c39f16cc8 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 15 Nov 2021 16:45:28 +0300 Subject: [PATCH 072/248] fix(gradle): Group long-form dependencies by varname (#12659) --- lib/manager/gradle/shallow/parser.spec.ts | 2 +- lib/manager/gradle/shallow/parser.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index 04c0f1bcf36bce..e828da74021093 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -52,7 +52,7 @@ describe('manager/gradle/shallow/parser', () => { ${'foo.bar = "1.2.3"'} | ${'"foo:bar:$foo.bar"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'foo.bar' }} ${''} | ${'foo.bar = "foo:bar:1.2.3"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} ${'baz = "1.2.3"'} | ${'foobar = "foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }} - ${'baz = "1.2.3"'} | ${'group: "foo", name: "bar", version: baz'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} + ${'baz = "1.2.3"'} | ${'group: "foo", name: "bar", version: baz'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }} `('$def | $str', ({ def, str, output }) => { const input = [def, str].join('\n'); const { deps } = parseGradle(input); diff --git a/lib/manager/gradle/shallow/parser.ts b/lib/manager/gradle/shallow/parser.ts index 33c49dec9f376e..c906e834b8a2ca 100644 --- a/lib/manager/gradle/shallow/parser.ts +++ b/lib/manager/gradle/shallow/parser.ts @@ -263,6 +263,7 @@ function processLongFormDep({ const versionToken: Token = tokenMap.version; if (versionToken.type === TokenType.Word) { const variable = variables[versionToken.value]; + dep.groupName = variable.key; dep.managerData = { fileReplacePosition: variable.fileReplacePosition, packageFile: variable.packageFile, From 7f2f0c26622e6de18f0b736333b25494117aadda Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 15 Nov 2021 17:56:18 +0300 Subject: [PATCH 073/248] test(workers): Refactor test snapshots for lookupUpdates (#12669) --- .../repository/process/lookup/index.spec.ts | 479 ++++++++++++------ 1 file changed, 325 insertions(+), 154 deletions(-) diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index 81c4acbfaee5db..6956c3d469072d 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -71,8 +71,10 @@ describe('workers/repository/process/lookup/index', () => { config.datasource = datasourceNpmId; config.rollbackPrs = true; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '0.9.7', updateType: 'rollback' }, + { newValue: '1.4.1', updateType: 'major' }, + ]); }); it('returns rollback for ranged version', async () => { config.currentValue = '^0.9.99'; @@ -80,8 +82,9 @@ describe('workers/repository/process/lookup/index', () => { config.datasource = datasourceNpmId; config.rollbackPrs = true; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '^0.9.7', updateType: 'rollback' }, + ]); }); it('supports minor and major upgrades for tilde ranges', async () => { config.currentValue = '^0.4.0'; @@ -89,8 +92,11 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '0.4.4', updateType: 'pin' }, + { newValue: '0.9.7', updateType: 'minor' }, + { newValue: '1.4.1', updateType: 'major' }, + ]); }); it('supports lock file updates mixed with regular updates', async () => { config.currentValue = '^0.4.0'; @@ -100,8 +106,11 @@ describe('workers/repository/process/lookup/index', () => { config.separateMinorPatch = true; config.lockedVersion = '0.4.0'; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { isLockfileUpdate: true, newValue: '^0.4.0', updateType: 'patch' }, + { newValue: '^0.9.0', updateType: 'minor' }, + { newValue: '^1.0.0', updateType: 'major' }, + ]); }); it('returns multiple updates if grouping but separateMajorMinor=true', async () => { config.groupName = 'somegroup'; @@ -145,8 +154,11 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '0.4.4', updateType: 'pin' }, + { newValue: '0.9.7', updateType: 'minor' }, + { newValue: '1.4.1', updateType: 'major' }, + ]); }); it('enforces allowedVersions', async () => { config.currentValue = '0.4.0'; @@ -235,8 +247,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '0.9.7', updateType: 'patch' }, + { newValue: '1.4.1', updateType: 'major' }, + ]); }); it('returns patch minor and major', async () => { config.separateMinorPatch = true; @@ -256,8 +270,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '0.4.4', updateType: 'pin' }, + { newValue: '1.4.1', updateType: 'major' }, + ]); }); it('disables major release separation (minor)', async () => { config.separateMajorMinor = false; @@ -266,8 +282,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.4.1', updateType: 'minor' }, + ]); }); it('uses minimum version for vulnerabilityAlerts', async () => { config.currentValue = '1.0.0'; @@ -285,8 +302,11 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '0.4.4', updateType: 'pin' }, + { newValue: '0.9.7', updateType: 'minor' }, + { newValue: '1.4.1', updateType: 'major' }, + ]); }); it('ignores pinning for ranges when other upgrade exists', async () => { config.currentValue = '~0.9.0'; @@ -294,8 +314,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '0.9.7', updateType: 'pin' }, + { newValue: '1.4.1', updateType: 'major' }, + ]); }); it('upgrades minor ranged versions', async () => { config.currentValue = '~1.0.0'; @@ -303,8 +325,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.0.1', updateType: 'pin' }, + { newValue: '1.4.1', updateType: 'minor' }, + ]); }); it('handles update-lockfile', async () => { config.currentValue = '^1.2.1'; @@ -323,8 +347,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '~1.3.0 || ~1.4.0', updateType: 'minor' }, + ]); }); it('replaces minor complex ranged versions if configured', async () => { config.currentValue = '~1.2.0 || ~1.3.0'; @@ -332,8 +357,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '~1.4.0', updateType: 'minor' }, + ]); }); it('widens major ranged versions if configured', async () => { config.currentValue = '^2.0.0'; @@ -344,8 +370,9 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://registry.npmjs.org') .get('/webpack') .reply(200, webpackJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '^2.0.0 || ^3.0.0', updateType: 'major' }, + ]); }); it('replaces major complex ranged versions if configured', async () => { config.currentValue = '^1.0.0 || ^2.0.0'; @@ -356,8 +383,9 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://registry.npmjs.org') .get('/webpack') .reply(200, webpackJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '^3.0.0', updateType: 'major' }, + ]); }); it('pins minor ranged versions', async () => { config.currentValue = '^1.0.0'; @@ -365,8 +393,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.4.1', updateType: 'pin' }, + ]); }); it('uses the locked version for pinning', async () => { config.currentValue = '^1.0.0'; @@ -375,8 +404,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.0.0', updateType: 'pin' }, + { newValue: '1.4.1', updateType: 'minor' }, + ]); }); it('ignores minor ranged versions when not pinning', async () => { config.rangeStrategy = 'replace'; @@ -401,8 +432,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.3.0', updateType: 'pin' }, + { newValue: '1.4.1', updateType: 'minor' }, + ]); }); it('upgrades .x minor ranges', async () => { config.currentValue = '1.3.x'; @@ -410,8 +443,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.3.0', updateType: 'pin' }, + { newValue: '1.4.1', updateType: 'minor' }, + ]); }); it('upgrades tilde ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -419,8 +454,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '~1.4.0', updateType: 'minor' }, + ]); }); it('upgrades .x major ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -428,8 +464,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.x', updateType: 'major' }, + ]); }); it('upgrades .x minor ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -437,8 +474,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.4.x', updateType: 'minor' }, + ]); }); it('upgrades .x complex minor ranges without pinning', async () => { config.rangeStrategy = 'widen'; @@ -446,8 +484,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.2.x - 1.4.x', updateType: 'minor' }, + ]); }); it('upgrades shorthand major ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -455,8 +494,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1', updateType: 'major' }, + ]); }); it('upgrades shorthand minor ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -464,8 +504,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.4', updateType: 'minor' }, + ]); }); it('upgrades multiple tilde ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -473,8 +514,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '~0.9.0', updateType: 'minor' }, + { newValue: '~1.4.0', updateType: 'major' }, + ]); }); it('upgrades multiple caret ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -482,8 +525,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '^0.9.0', updateType: 'minor' }, + { newValue: '^1.0.0', updateType: 'major' }, + ]); }); it('supports complex ranges', async () => { config.rangeStrategy = 'widen'; @@ -493,8 +538,10 @@ describe('workers/repository/process/lookup/index', () => { httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); expect(res.updates).toHaveLength(2); - // FIXME: explicit assert condition - expect(res.updates[0]).toMatchSnapshot(); + expect(res.updates[0]).toMatchSnapshot({ + newValue: '^0.7.0 || ^0.8.0 || ^0.9.0', + updateType: 'minor', + }); }); it('supports complex major ranges', async () => { config.rangeStrategy = 'widen'; @@ -505,8 +552,12 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://registry.npmjs.org') .get('/webpack') .reply(200, webpackJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { + newValue: '^1.0.0 || ^2.0.0 || ^3.0.0', + updateType: 'major', + }, + ]); }); it('supports complex major hyphen ranges', async () => { config.rangeStrategy = 'widen'; @@ -517,8 +568,9 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://registry.npmjs.org') .get('/webpack') .reply(200, webpackJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.x - 3.x', updateType: 'major' }, + ]); }); it('widens .x OR ranges', async () => { config.rangeStrategy = 'widen'; @@ -529,8 +581,9 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://registry.npmjs.org') .get('/webpack') .reply(200, webpackJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.x || 2.x || 3.x', updateType: 'major' }, + ]); }); it('widens stanndalone major OR ranges', async () => { config.rangeStrategy = 'widen'; @@ -541,8 +594,9 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://registry.npmjs.org') .get('/webpack') .reply(200, webpackJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1 || 2 || 3', updateType: 'major' }, + ]); }); it('supports complex tilde ranges', async () => { config.rangeStrategy = 'widen'; @@ -550,8 +604,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '~1.2.0 || ~1.3.0 || ~1.4.0', updateType: 'minor' }, + ]); }); it('returns nothing for greater than ranges', async () => { config.rangeStrategy = 'replace'; @@ -567,8 +622,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '<= 0.9.7', updateType: 'minor' }, + { newValue: '<= 1.4.1', updateType: 'major' }, + ]); }); it('upgrades less than ranges without pinning', async () => { config.rangeStrategy = 'replace'; @@ -576,8 +633,10 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '< 0.9.8', updateType: 'minor' }, + { newValue: '< 1.4.2', updateType: 'major' }, + ]); }); it('upgrades less than major ranges', async () => { config.rangeStrategy = 'replace'; @@ -585,8 +644,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '< 2', updateType: 'major' }, + ]); }); it('upgrades less than equal minor ranges', async () => { config.rangeStrategy = 'replace'; @@ -594,8 +654,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '<= 1.4', updateType: 'minor' }, + ]); }); it('upgrades equal minor ranges', async () => { config.rangeStrategy = 'replace'; @@ -603,8 +664,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '=1.4.1', updateType: 'minor' }, + ]); }); it('upgrades less than equal major ranges', async () => { config.rangeStrategy = 'replace'; @@ -613,8 +675,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '<= 2', updateType: 'major' }, + ]); }); it('upgrades major less than equal ranges', async () => { config.rangeStrategy = 'replace'; @@ -675,8 +738,7 @@ describe('workers/repository/process/lookup/index', () => { config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res.updates).toMatchSnapshot(); + expect(res.updates).toMatchSnapshot([]); }); it('supports > latest versions if configured', async () => { config.respectLatest = false; @@ -684,8 +746,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '2.0.3', updateType: 'major' }, + ]); }); it('should ignore unstable versions if the current version is stable', async () => { config.currentValue = '2.5.16'; @@ -715,8 +778,9 @@ describe('workers/repository/process/lookup/index', () => { }, ], }); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '2.0.0', updateType: 'major' }, + ]); }); it('should return pendingChecks', async () => { @@ -943,8 +1007,9 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://registry.npmjs.org') .get('/@types%2Fhelmet') .reply(200, helmetJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '^0.0.35', updateType: 'patch' }, + ]); }); it('should downgrade from missing versions', async () => { config.currentValue = '1.16.1'; @@ -1000,8 +1065,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '^1.4.1', updateType: 'minor' }, + ]); }); it('supports in-range tilde updates', async () => { config.rangeStrategy = 'bump'; @@ -1010,8 +1076,10 @@ describe('workers/repository/process/lookup/index', () => { config.separateMinorPatch = true; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '~1.0.1', updateType: 'patch' }, + { newValue: '~1.4.1', updateType: 'minor' }, + ]); }); it('supports in-range tilde patch updates', async () => { config.rangeStrategy = 'bump'; @@ -1020,8 +1088,10 @@ describe('workers/repository/process/lookup/index', () => { config.separateMinorPatch = true; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '~1.0.1', updateType: 'patch' }, + { newValue: '~1.4.1', updateType: 'minor' }, + ]); }); it('supports in-range gte updates', async () => { config.rangeStrategy = 'bump'; @@ -1029,8 +1099,9 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '>=1.4.1', updateType: 'minor' }, + ]); }); it('supports majorgte updates', async () => { config.rangeStrategy = 'bump'; @@ -1039,8 +1110,9 @@ describe('workers/repository/process/lookup/index', () => { config.datasource = datasourceNpmId; config.separateMajorMinor = false; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '>=1.4.1', updateType: 'major' }, + ]); }); it('rejects in-range unsupported operator', async () => { config.rangeStrategy = 'bump'; @@ -1048,8 +1120,7 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([]); }); it('rejects non-fully specified in-range updates', async () => { config.rangeStrategy = 'bump'; @@ -1057,8 +1128,7 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([]); }); it('rejects complex range in-range updates', async () => { config.rangeStrategy = 'bump'; @@ -1066,8 +1136,7 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'q'; config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([]); }); it('replaces non-range in-range updates', async () => { config.depName = 'q'; @@ -1076,8 +1145,9 @@ describe('workers/repository/process/lookup/index', () => { config.rangeStrategy = 'bump'; config.currentValue = '1.0.0'; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([ + { newValue: '1.4.1', updateType: 'minor' }, + ]); }); it('handles github 404', async () => { config.depName = 'foo'; @@ -1085,8 +1155,7 @@ describe('workers/repository/process/lookup/index', () => { config.packageFile = 'package.json'; config.currentValue = '1.0.0'; httpMock.scope('https://pypi.org').get('/pypi/foo/json').reply(404); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([]); }); it('handles pypi 404', async () => { config.depName = 'foo'; @@ -1097,8 +1166,7 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://api.github.com') .get('/repos/some/repo/git/refs/tags?per_page=100') .reply(404); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([]); }); it('handles packagist', async () => { config.depName = 'foo/bar'; @@ -1110,16 +1178,14 @@ describe('workers/repository/process/lookup/index', () => { .scope('https://packagist.org') .get('/packages/foo/bar.json') .reply(404); - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([]); }); it('handles unknown datasource', async () => { config.depName = 'foo'; config.datasource = 'typo'; config.packageFile = 'package.json'; config.currentValue = '1.0.0'; - // FIXME: explicit assert condition - expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot(); + expect((await lookup.lookupUpdates(config)).updates).toMatchSnapshot([]); }); it('handles PEP440', async () => { config.manager = 'pip_requirements'; @@ -1134,8 +1200,11 @@ describe('workers/repository/process/lookup/index', () => { config.datasource = datasourceNpmId; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res.updates).toMatchSnapshot(); + expect(res.updates).toMatchSnapshot([ + { newValue: '==0.9.4', updateType: 'pin' }, + { newValue: '==0.9.7', updateType: 'patch' }, + { newValue: '==1.4.1', updateType: 'major' }, + ]); }); it('returns complex object', async () => { config.currentValue = '1.3.0'; @@ -1185,15 +1254,13 @@ describe('workers/repository/process/lookup/index', () => { config.depName = 'node'; config.datasource = datasourceDockerId; const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ skipReason: 'invalid-value' }); }); it('skips undefined values', async () => { config.depName = 'node'; config.datasource = datasourceDockerId; const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ skipReason: 'invalid-value' }); }); it('handles digest pin', async () => { config.currentValue = '8.0.0'; @@ -1213,31 +1280,93 @@ describe('workers/repository/process/lookup/index', () => { docker.getDigest.mockResolvedValueOnce('sha256:abcdef1234567890'); docker.getDigest.mockResolvedValueOnce('sha256:0123456789abcdef'); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + currentVersion: '8.0.0', + isSingleVersion: true, + updates: [ + { + newDigest: 'sha256:abcdef1234567890', + newValue: '8.1.0', + updateType: 'minor', + }, + { + newDigest: 'sha256:0123456789abcdef', + newValue: '8.0.0', + updateType: 'pin', + }, + ], + }); + }); + it('skips uncompatible versions for 8.1.0', async () => { + config.currentValue = '8.1.0'; + config.depName = 'node'; + config.versioning = dockerVersioningId; + config.datasource = datasourceDockerId; + docker.getReleases.mockResolvedValueOnce({ + releases: [ + { version: '8.1.0' }, + { version: '8.1.5' }, + { version: '8.1' }, + { version: '8.2.0' }, + { version: '8.2.5' }, + { version: '8.2' }, + { version: '8' }, + { version: '9.0' }, + { version: '9' }, + ], + }); + const res = await lookup.lookupUpdates(config); + expect(res).toMatchSnapshot({ + updates: [{ newValue: '8.2.5', updateType: 'minor' }], + }); + }); + it('skips uncompatible versions for 8.1', async () => { + config.currentValue = '8.1'; + config.depName = 'node'; + config.versioning = dockerVersioningId; + config.datasource = datasourceDockerId; + docker.getReleases.mockResolvedValueOnce({ + releases: [ + { version: '8.1.0' }, + { version: '8.1.5' }, + { version: '8.1' }, + { version: '8.2.0' }, + { version: '8.2.5' }, + { version: '8.2' }, + { version: '8' }, + { version: '9.0' }, + { version: '9' }, + ], + }); + const res = await lookup.lookupUpdates(config); + expect(res).toMatchSnapshot({ + updates: [ + { newValue: '8.2', updateType: 'minor' }, + { newValue: '9.0', updateType: 'major' }, + ], + }); }); - ['8.1.0', '8.1', '8'].forEach((currentValue) => { - it('skips uncompatible versions for ' + currentValue, async () => { - config.currentValue = currentValue; - config.depName = 'node'; - config.versioning = dockerVersioningId; - config.datasource = datasourceDockerId; - docker.getReleases.mockResolvedValueOnce({ - releases: [ - { version: '8.1.0' }, - { version: '8.1.5' }, - { version: '8.1' }, - { version: '8.2.0' }, - { version: '8.2.5' }, - { version: '8.2' }, - { version: '8' }, - { version: '9.0' }, - { version: '9' }, - ], - }); - const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + it('skips uncompatible versions for 8', async () => { + config.currentValue = '8'; + config.depName = 'node'; + config.versioning = dockerVersioningId; + config.datasource = datasourceDockerId; + docker.getReleases.mockResolvedValueOnce({ + releases: [ + { version: '8.1.0' }, + { version: '8.1.5' }, + { version: '8.1' }, + { version: '8.2.0' }, + { version: '8.2.5' }, + { version: '8.2' }, + { version: '8' }, + { version: '9.0' }, + { version: '9' }, + ], + }); + const res = await lookup.lookupUpdates(config); + expect(res).toMatchSnapshot({ + updates: [{ newValue: '9', updateType: 'major' }], }); }); it('handles digest pin for up to date version', async () => { @@ -1257,8 +1386,15 @@ describe('workers/repository/process/lookup/index', () => { }); docker.getDigest.mockResolvedValueOnce('sha256:abcdef1234567890'); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + updates: [ + { + newDigest: 'sha256:abcdef1234567890', + newValue: '8.1.0', + updateType: 'pin', + }, + ], + }); }); it('handles digest pin for non-version', async () => { config.currentValue = 'alpine'; @@ -1280,8 +1416,15 @@ describe('workers/repository/process/lookup/index', () => { }); docker.getDigest.mockResolvedValueOnce('sha256:abcdef1234567890'); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + updates: [ + { + newDigest: 'sha256:abcdef1234567890', + newValue: 'alpine', + updateType: 'pin', + }, + ], + }); }); it('handles digest lookup failure', async () => { config.currentValue = 'alpine'; @@ -1324,8 +1467,20 @@ describe('workers/repository/process/lookup/index', () => { docker.getDigest.mockResolvedValueOnce('sha256:abcdef1234567890'); docker.getDigest.mockResolvedValueOnce('sha256:0123456789abcdef'); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + updates: [ + { + newDigest: 'sha256:abcdef1234567890', + newValue: '8.1.0', + updateType: 'minor', + }, + { + newDigest: 'sha256:0123456789abcdef', + newValue: '8.0.0', + updateType: 'digest', + }, + ], + }); }); it('handles digest update for non-version', async () => { config.currentValue = 'alpine'; @@ -1348,8 +1503,15 @@ describe('workers/repository/process/lookup/index', () => { }); docker.getDigest.mockResolvedValueOnce('sha256:abcdef1234567890'); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + updates: [ + { + newDigest: 'sha256:abcdef1234567890', + newValue: 'alpine', + updateType: 'digest', + }, + ], + }); }); it('handles git submodule update', async () => { jest.mock('../../../../datasource/git-refs', () => ({ @@ -1381,8 +1543,15 @@ describe('workers/repository/process/lookup/index', () => { config.currentDigest = 'some-digest'; const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + updates: [ + { + newDigest: '4b825dc642cb6eb9a060e54bf8d69288fbee4904', + updateType: 'digest', + }, + ], + versioning: 'git', + }); }); it('handles sourceUrl packageRules with version restrictions', async () => { config.currentValue = '0.9.99'; @@ -1396,8 +1565,10 @@ describe('workers/repository/process/lookup/index', () => { ]; httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); const res = await lookup.lookupUpdates(config); - // FIXME: explicit assert condition - expect(res).toMatchSnapshot(); + expect(res).toMatchSnapshot({ + sourceUrl: 'https://github.com/kriskowal/q', + updates: [{ newValue: '1.3.0', updateType: 'major' }], + }); }); it('handles replacements', async () => { From 3838a523da73a9a822b81215404681284c112d17 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 22:03:59 +0000 Subject: [PATCH 074/248] chore(deps): update linters to v5.3.1 (#12673) Co-authored-by: Renovate Bot --- package.json | 4 +-- yarn.lock | 74 ++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 37cdc23a428e91..7a174b6cd91de0 100644 --- a/package.json +++ b/package.json @@ -242,8 +242,8 @@ "@types/traverse": "0.6.32", "@types/url-join": "4.0.1", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "5.3.0", - "@typescript-eslint/parser": "5.3.0", + "@typescript-eslint/eslint-plugin": "5.3.1", + "@typescript-eslint/parser": "5.3.1", "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", "emojibase-data": "6.2.0", diff --git a/yarn.lock b/yarn.lock index 2c87677b83c9cb..fe5c5c3a088a36 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2117,13 +2117,13 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.0.tgz#a55ae72d28ffeb6badd817fe4566c9cced1f5e29" - integrity sha512-ARUEJHJrq85aaiCqez7SANeahDsJTD3AEua34EoQN9pHS6S5Bq9emcIaGGySt/4X2zSi+vF5hAH52sEen7IO7g== +"@typescript-eslint/eslint-plugin@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz#d8ff412f10f54f6364e7fd7c1e70eb6767f434c3" + integrity sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw== dependencies: - "@typescript-eslint/experimental-utils" "5.3.0" - "@typescript-eslint/scope-manager" "5.3.0" + "@typescript-eslint/experimental-utils" "5.3.1" + "@typescript-eslint/scope-manager" "5.3.1" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -2131,7 +2131,19 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.3.0", "@typescript-eslint/experimental-utils@^5.0.0": +"@typescript-eslint/experimental-utils@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz#bbd8f9b67b4d5fdcb9d2f90297d8fcda22561e05" + integrity sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.3.1" + "@typescript-eslint/types" "5.3.1" + "@typescript-eslint/typescript-estree" "5.3.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/experimental-utils@^5.0.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz#ee56b4957547ed2b0fc7451205e41502e664f546" integrity sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w== @@ -2143,14 +2155,14 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.3.0.tgz#7879f15e26d370ed3f653fb7dd06479531ed3ab9" - integrity sha512-rKu/yAReip7ovx8UwOAszJVO5MgBquo8WjIQcp1gx4pYQCwYzag+I5nVNHO4MqyMkAo0gWt2gWUi+36gWAVKcw== +"@typescript-eslint/parser@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.3.1.tgz#8ff1977c3d3200c217b3e4628d43ef92f89e5261" + integrity sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw== dependencies: - "@typescript-eslint/scope-manager" "5.3.0" - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/typescript-estree" "5.3.0" + "@typescript-eslint/scope-manager" "5.3.1" + "@typescript-eslint/types" "5.3.1" + "@typescript-eslint/typescript-estree" "5.3.1" debug "^4.3.2" "@typescript-eslint/scope-manager@5.3.0": @@ -2161,11 +2173,24 @@ "@typescript-eslint/types" "5.3.0" "@typescript-eslint/visitor-keys" "5.3.0" +"@typescript-eslint/scope-manager@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz#3cfbfbcf5488fb2a9a6fbbe97963ee1e8d419269" + integrity sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg== + dependencies: + "@typescript-eslint/types" "5.3.1" + "@typescript-eslint/visitor-keys" "5.3.1" + "@typescript-eslint/types@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.0.tgz#af29fd53867c2df0028c57c36a655bd7e9e05416" integrity sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg== +"@typescript-eslint/types@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.1.tgz#afaa715b69ebfcfde3af8b0403bf27527912f9b7" + integrity sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ== + "@typescript-eslint/typescript-estree@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz#4f68ddd46dc2983182402d2ab21fb44ad94988cf" @@ -2179,6 +2204,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz#50cc4bfb93dc31bc75e08ae52e29fcb786d606ec" + integrity sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ== + dependencies: + "@typescript-eslint/types" "5.3.1" + "@typescript-eslint/visitor-keys" "5.3.1" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@5.3.0": version "5.3.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz#a6258790f3b7b2547f70ed8d4a1e0c3499994523" @@ -2187,6 +2225,14 @@ "@typescript-eslint/types" "5.3.0" eslint-visitor-keys "^3.0.0" +"@typescript-eslint/visitor-keys@5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz#c2860ff22939352db4f3806f34b21d8ad00588ba" + integrity sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ== + dependencies: + "@typescript-eslint/types" "5.3.1" + eslint-visitor-keys "^3.0.0" + "@yarnpkg/core@2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-2.4.0.tgz#b5d8cc7ee2ddb022816c7afa3f83c3ee3d317c80" From 15e7f8af243badd449f3de9de64a5149081c2954 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Nov 2021 23:48:03 +0000 Subject: [PATCH 075/248] build(deps): update dependency luxon to v2.1.1 (#12677) 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 7a174b6cd91de0..775982a9a93e73 100644 --- a/package.json +++ b/package.json @@ -168,7 +168,7 @@ "json-dup-key-validator": "1.0.3", "json-stringify-pretty-compact": "3.0.0", "json5": "2.2.0", - "luxon": "2.1.0", + "luxon": "2.1.1", "markdown-it": "12.2.0", "markdown-table": "2.0.0", "marshal": "0.5.2", diff --git a/yarn.lock b/yarn.lock index fe5c5c3a088a36..5e957142aad477 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6240,10 +6240,10 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -luxon@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.1.0.tgz#3e50a1d2fa92b2e250e2a5d9ee9208a6c0263141" - integrity sha512-R0VSFyNh3+3SxM+eLyGSc1IYg+QHD/G1k0RvpXncYccO7SA4luC7QqdXyHospyu3t36pMHeCvd7Jlaab8fsF+w== +luxon@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-2.1.1.tgz#34052f7a33a7989767637be7cf80b47db264ff88" + integrity sha512-6VQVNw7+kQu3hL1ZH5GyOhnk8uZm21xS7XJ/6vDZaFNcb62dpFDKcH8TI5NkoZOdMRxr7af7aYGrJlE/Wv0i1w== make-dir@^3.0.0: version "3.1.0" From 293412d7ba5d55cc5061b352bb2f96c4cd977838 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Nov 2021 01:59:25 +0000 Subject: [PATCH 076/248] chore(deps): update dependency @types/node to v14.17.33 (#12678) 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 775982a9a93e73..f39c02eea483ab 100644 --- a/package.json +++ b/package.json @@ -231,7 +231,7 @@ "@types/marshal": "0.5.1", "@types/moo": "0.5.5", "@types/nock": "10.0.3", - "@types/node": "14.17.32", + "@types/node": "14.17.33", "@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 5e957142aad477..4ca6eed105c805 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1984,10 +1984,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== -"@types/node@14.17.32": - version "14.17.32" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.32.tgz#2ca61c9ef8c77f6fa1733be9e623ceb0d372ad96" - integrity sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ== +"@types/node@14.17.33": + version "14.17.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.33.tgz#011ee28e38dc7aee1be032ceadf6332a0ab15b12" + integrity sha512-noEeJ06zbn3lOh4gqe2v7NMGS33jrulfNqYFDjjEbhpDEHR5VTxgYNQSBqBlJIsBJW3uEYDgD6kvMnrrhGzq8g== "@types/node@^13.7.0": version "13.13.52" From aa56d49a1607cb4adf2cbad98180c140e80c6a12 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Nov 2021 03:57:06 +0000 Subject: [PATCH 077/248] chore(deps): update dependency mock-fs to v5.1.2 (#12680) 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 f39c02eea483ab..96745e3216b6c3 100644 --- a/package.json +++ b/package.json @@ -264,7 +264,7 @@ "jest-mock-extended": "2.0.4", "jest-silent-reporter": "0.5.0", "markdownlint-cli2": "0.3.2", - "mock-fs": "5.1.1", + "mock-fs": "5.1.2", "mockdate": "3.0.5", "nock": "13.2.0", "npm-run-all": "4.1.5", diff --git a/yarn.lock b/yarn.lock index 4ca6eed105c805..61cf868cd47e05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6633,10 +6633,10 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mock-fs@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.1.tgz#d4c95e916abf400664197079d7e399d133bb6048" - integrity sha512-p/8oZ3qvfKGPw+4wdVCyjDxa6wn2tP0TCf3WXC1UyUBAevezPn1TtOoxtMYVbZu/S/iExg+Ghed1busItj2CEw== +mock-fs@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.2.tgz#6fa486e06d00f8793a8d2228de980eff93ce6db7" + integrity sha512-YkjQkdLulFrz0vD4BfNQdQRVmgycXTV7ykuHMlyv+C8WCHazpkiQRDthwa02kSyo8wKnY9wRptHfQLgmf0eR+A== mockdate@3.0.5: version "3.0.5" From c98b79b11a40d3997f658cd92d432c2da3c2d440 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 16 Nov 2021 10:45:17 +0300 Subject: [PATCH 078/248] test(typescript): Gradual migration to strict "null" and "any" checks (#12681) --- lib/util/clone.ts | 2 +- package.json | 3 +- tsconfig.strict.json | 121 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 tsconfig.strict.json diff --git a/lib/util/clone.ts b/lib/util/clone.ts index d1c9530e7e597a..cb0b5ba7be134b 100644 --- a/lib/util/clone.ts +++ b/lib/util/clone.ts @@ -1,5 +1,5 @@ import safeStringify from 'fast-safe-stringify'; -export function clone(input: T = null): T { +export function clone(input: T | null = null): T { return JSON.parse(safeStringify(input)); } diff --git a/package.json b/package.json index 96745e3216b6c3..a2bd8da0ba9487 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "ls-lint": "ls-lint", "markdown-lint": "markdownlint-cli2", "markdown-lint-fix": "markdownlint-cli2-fix", + "null-check": "run-s generate:* \"tsc --noEmit -p tsconfig.strict.json {@}\"", "prepare": "run-s prepare:*", "prepare:husky": "husky install", "prepare:generate": "run-s generate:*", @@ -39,7 +40,7 @@ "prettier-fix": "prettier --write \"**/*.{ts,js,mjs,json,md,yml}\"", "release": "node tools/release.mjs", "start": "node -r ts-node/register/transpile-only -- lib/renovate.ts", - "test": "run-s lint test-schema type-check jest", + "test": "run-s lint test-schema type-check null-check jest", "test-dirty": "git diff --exit-code", "test-e2e": "npm pack && cd test/e2e && yarn install --no-lockfile --ignore-optional --prod && yarn test", "test-schema": "node -r ts-node/register/transpile-only -- test/json-schema.ts", diff --git a/tsconfig.strict.json b/tsconfig.strict.json new file mode 100644 index 00000000000000..e256ff01fc6eb5 --- /dev/null +++ b/tsconfig.strict.json @@ -0,0 +1,121 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "strictNullChecks": true, + "noImplicitAny": true + }, + "files": [ + "./lib/constants/error-messages.ts", + "./lib/util/clone.ts", + "./lib/util/sanitize.ts", + "./lib/config/app-strings.ts", + "./lib/config/presets/common.ts", + "./lib/constants/platforms.ts", + "./lib/constants/programming-language.ts", + "./lib/data-files.generated.ts", + "./lib/datasource/adoptium-java/common.ts", + "./lib/datasource/adoptium-java/types.ts", + "./lib/datasource/artifactory/common.ts", + "./lib/datasource/bitbucket-tags/types.ts", + "./lib/datasource/cdnjs/types.ts", + "./lib/datasource/crate/types.ts", + "./lib/datasource/dart/types.ts", + "./lib/datasource/docker/types.ts", + "./lib/datasource/galaxy-collection/types.ts", + "./lib/datasource/galaxy/types.ts", + "./lib/datasource/git-refs/types.ts", + "./lib/datasource/github-releases/types.ts", + "./lib/datasource/github-tags/types.ts", + "./lib/datasource/gitlab-packages/common.ts", + "./lib/datasource/gitlab-packages/types.ts", + "./lib/datasource/gitlab-releases/types.ts", + "./lib/datasource/gitlab-tags/types.ts", + "./lib/datasource/gradle-version/types.ts", + "./lib/datasource/hex/types.ts", + "./lib/datasource/jenkins-plugins/common.ts", + "./lib/datasource/maven/common.ts", + "./lib/datasource/node/common.ts", + "./lib/datasource/node/types.ts", + "./lib/datasource/npm/common.ts", + "./lib/datasource/nuget/types.ts", + "./lib/datasource/orb/types.ts", + "./lib/datasource/pypi/types.ts", + "./lib/datasource/repology/types.ts", + "./lib/datasource/rubygems/types.ts", + "./lib/datasource/terraform-module/types.ts", + "./lib/datasource/terraform-provider/types.ts", + "./lib/datasource/types.ts", + "./lib/globals.d.ts", + "./lib/logger/__mocks__/index.ts", + "./lib/logger/cmd-serializer.ts", + "./lib/manager/argocd/types.ts", + "./lib/manager/azure-pipelines/types.ts", + "./lib/manager/bazel/types.ts", + "./lib/manager/cargo/types.ts", + "./lib/manager/cocoapods/types.ts", + "./lib/manager/composer/types.ts", + "./lib/manager/docker-compose/types.ts", + "./lib/manager/git-submodules/types.ts", + "./lib/manager/gitlabci/types.ts", + "./lib/manager/gitlabci/utils.ts", + "./lib/manager/gradle-wrapper/types.ts", + "./lib/manager/gradle/deep/types.ts", + "./lib/manager/gradle/types.ts", + "./lib/manager/helm-values/types.ts", + "./lib/manager/helmfile/types.ts", + "./lib/manager/helmsman/types.ts", + "./lib/manager/homebrew/types.ts", + "./lib/manager/jenkins/types.ts", + "./lib/manager/kustomize/types.ts", + "./lib/manager/leiningen/types.ts", + "./lib/manager/maven/types.ts", + "./lib/manager/npm/extract/types.ts", + "./lib/manager/npm/update/locked-dependency/types.ts", + "./lib/manager/nuget/types.ts", + "./lib/manager/pip_setup/types.ts", + "./lib/manager/pipenv/types.ts", + "./lib/manager/poetry/types.ts", + "./lib/manager/pre-commit/types.ts", + "./lib/manager/regex/types.ts", + "./lib/manager/sbt/types.ts", + "./lib/manager/swift/types.ts", + "./lib/manager/terraform/common.ts", + "./lib/manager/terraform/lockfile/types.ts", + "./lib/manager/terragrunt/common.ts", + "./lib/platform/bitbucket/types.ts", + "./lib/platform/gitea/types.ts", + "./lib/platform/github/graphql.ts", + "./lib/platform/gitlab/types.ts", + "./lib/platform/utils/pr-body.ts", + "./lib/proxy.ts", + "./lib/types/branch-status.ts", + "./lib/types/git.ts", + "./lib/types/host-rules.ts", + "./lib/types/later.d.ts", + "./lib/types/platform/bitbucket-server/index.ts", + "./lib/types/pr-state.ts", + "./lib/types/skip-reason.ts", + "./lib/types/versioning.ts", + "./lib/types/vulnerability-alert.ts", + "./lib/util/cache/memory/index.ts", + "./lib/util/cache/package/types.ts", + "./lib/util/date.ts", + "./lib/util/exec/common.ts", + "./lib/util/exec/types.ts", + "./lib/util/git/config.ts", + "./lib/util/html.ts", + "./lib/util/http/hooks.ts", + "./lib/util/http/types.ts", + "./lib/util/index.ts", + "./lib/util/json-writer/indentation-type.ts", + "./lib/util/object.ts", + "./lib/util/split.ts", + "./lib/workers/pr/changelog/hbs-template.ts", + "./lib/workers/pr/changelog/types.ts", + "./lib/workers/repository/init/types.ts", + "./test/json-schema.ts", + "./test/newline-snapshot-serializer.ts", + "./test/static-files.spec.ts", + "./tools/utils/index.ts" + ] +} From 51961d94e183fecd0ade8292b16a3c8926ab730b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 16 Nov 2021 12:49:15 +0300 Subject: [PATCH 079/248] feat(maven): Leverage index HTML for Maven Central (#12607) Co-authored-by: Rhys Arkins --- lib/datasource/maven/__fixtures__/index.html | 40 +++ .../maven/__snapshots__/index.spec.ts.snap | 248 ++++++++++++++++++ lib/datasource/maven/index.spec.ts | 65 ++++- lib/datasource/maven/index.ts | 61 +++++ 4 files changed, 406 insertions(+), 8 deletions(-) create mode 100644 lib/datasource/maven/__fixtures__/index.html diff --git a/lib/datasource/maven/__fixtures__/index.html b/lib/datasource/maven/__fixtures__/index.html new file mode 100644 index 00000000000000..203b42c782996a --- /dev/null +++ b/lib/datasource/maven/__fixtures__/index.html @@ -0,0 +1,40 @@ + + + + + + Central Repository: org/example/package + + + + +
+

org/example/package

+
+
+
+
+../
+0.0.1/                                                           -         -
+1.0.0/                                            2021-02-22 14:43         -
+1.0.1/                                            2021-04-12 15:51         -
+1.0.2/                                            2021-06-16 12:47         -
+2.0.0/                                            2021-06-18 16:24         -
+maven-metadata-local.xml                          2021-10-18 11:04       304
+maven-metadata-local.xml.md5                      2021-10-18 11:04        33
+maven-metadata-local.xml.sha1                     2021-10-18 11:04        41
+maven-metadata.xml                                2021-10-18 11:04      3982
+maven-metadata.xml.md5                            2021-10-18 11:04        32
+maven-metadata.xml.sha1                           2021-10-18 11:04        40
+maven-metadata.xml.sha256                         2021-10-18 11:04        64
+maven-metadata.xml.sha512                         2021-10-18 11:04       128
+		
+
+
+ + + diff --git a/lib/datasource/maven/__snapshots__/index.spec.ts.snap b/lib/datasource/maven/__snapshots__/index.spec.ts.snap index a040d010a5060a..75cef939154a95 100644 --- a/lib/datasource/maven/__snapshots__/index.spec.ts.snap +++ b/lib/datasource/maven/__snapshots__/index.spec.ts.snap @@ -11,6 +11,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -226,6 +235,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -348,6 +366,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -380,6 +407,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -412,6 +448,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -444,6 +489,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/child/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/child/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -521,6 +575,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -553,6 +616,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -585,6 +657,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -626,6 +707,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -667,6 +757,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -708,6 +807,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -825,6 +933,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -1157,6 +1274,101 @@ Array [ ] `; +exports[`datasource/maven/index returns html-based releases 1`] = ` +Array [ + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.3-SNAPSHOT/maven-metadata.xml", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/maven-metadata.xml", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.5-SNAPSHOT/maven-metadata.xml", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/0.0.1/package-0.0.1.pom", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.3-SNAPSHOT/package-1.0.3-20200101.010003-3.pom", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.4-SNAPSHOT/package-1.0.4-SNAPSHOT.pom", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "HEAD", + "url": "https://repo.maven.apache.org/maven2/org/example/package/1.0.5-SNAPSHOT/package-1.0.5-SNAPSHOT.pom", + }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/2.0.0/package-2.0.0.pom", + }, +] +`; + exports[`datasource/maven/index returns null when metadata is not found 1`] = ` Array [ Object { @@ -1168,6 +1380,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, ] `; @@ -1209,6 +1430,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -1529,6 +1759,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", @@ -1687,6 +1926,15 @@ Array [ "method": "GET", "url": "https://repo.maven.apache.org/maven2/org/example/package/maven-metadata.xml", }, + Object { + "headers": Object { + "accept-encoding": "gzip, deflate, br", + "host": "repo.maven.apache.org", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://repo.maven.apache.org/maven2/org/example/package/index.html", + }, Object { "headers": Object { "accept-encoding": "gzip, deflate, br", diff --git a/lib/datasource/maven/index.spec.ts b/lib/datasource/maven/index.spec.ts index 55e573330ffd56..f57fbd52a6b246 100644 --- a/lib/datasource/maven/index.spec.ts +++ b/lib/datasource/maven/index.spec.ts @@ -23,6 +23,7 @@ interface MockOpts { latest?: string; jars?: Record | null; snapshots?: SnapshotOpts[] | null; + html?: string; } function mockGenericPackage(opts: MockOpts = {}) { @@ -30,6 +31,7 @@ function mockGenericPackage(opts: MockOpts = {}) { dep = 'org.example:package', base = baseUrl, latest = '2.0.0', + html, } = opts; const meta = opts.meta === undefined ? loadFixture('metadata.xml') : opts.meta; @@ -72,6 +74,12 @@ function mockGenericPackage(opts: MockOpts = {}) { scope.get(`/${packagePath}/maven-metadata.xml`).reply(200, meta); } + if (html) { + scope.get(`/${packagePath}/index.html`).reply(200, html); + } else if (html === null) { + scope.get(`/${packagePath}/index.html`).reply(404); + } + if (pom) { scope .get(`/${packagePath}/${latest}/${artifact}-${latest}.pom`) @@ -161,6 +169,8 @@ describe('datasource/maven/index', () => { it('returns null when metadata is not found', async () => { httpMock .scope(baseUrl) + .get('/org/example/package/index.html') + .reply(404) .get('/org/example/package/maven-metadata.xml') .reply(404); @@ -171,7 +181,7 @@ describe('datasource/maven/index', () => { }); it('returns releases', async () => { - mockGenericPackage(); + mockGenericPackage({ html: null }); const res = await get(); @@ -179,6 +189,36 @@ describe('datasource/maven/index', () => { expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('returns html-based releases', async () => { + mockGenericPackage({ + latest: '2.0.0', + jars: { '0.0.1': 200 }, // Would be the only POM we check via HEAD request + html: loadFixture('index.html'), + }); + + const res = await get(); + + expect(res).toEqual({ + display: 'org.example:package', + group: 'org.example', + homepage: 'https://package.example.org/about', + name: 'package', + registryUrl: 'https://repo.maven.apache.org/maven2', + releases: [ + { version: '0.0.1' }, + { version: '1.0.0', releaseTimestamp: '2021-02-22T14:43:00.000Z' }, + { version: '1.0.1', releaseTimestamp: '2021-04-12T15:51:00.000Z' }, + { version: '1.0.2', releaseTimestamp: '2021-06-16T12:47:00.000Z' }, + { + version: '1.0.3-SNAPSHOT', + releaseTimestamp: '2020-01-01T01:00:03.000Z', + }, + { version: '2.0.0', releaseTimestamp: '2021-06-18T16:24:00.000Z' }, + ], + }); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + it('returns releases from custom repository', async () => { mockGenericPackage({ base: baseUrlCustom }); @@ -189,7 +229,7 @@ describe('datasource/maven/index', () => { }); it('collects releases from all registry urls', async () => { - mockGenericPackage(); + mockGenericPackage({ html: null }); mockGenericPackage({ base: baseUrlCustom, meta: loadFixture('metadata-extra.xml'), @@ -215,7 +255,7 @@ describe('datasource/maven/index', () => { }); it('falls back to next registry url', async () => { - mockGenericPackage(); + mockGenericPackage({ html: null }); httpMock .scope('https://failed_repo') .get('/org/example/package/maven-metadata.xml') @@ -273,7 +313,7 @@ describe('datasource/maven/index', () => { }); it('skips registry with invalid metadata structure', async () => { - mockGenericPackage(); + mockGenericPackage({ html: null }); httpMock .scope('https://invalid_metadata_repo') .get('/org/example/package/maven-metadata.xml') @@ -290,7 +330,7 @@ describe('datasource/maven/index', () => { }); it('skips registry with invalid XML', async () => { - mockGenericPackage(); + mockGenericPackage({ html: null }); httpMock .scope('https://invalid_metadata_repo') .get('/org/example/package/maven-metadata.xml') @@ -307,9 +347,9 @@ describe('datasource/maven/index', () => { }); it('handles optional slash at the end of registry url', async () => { - mockGenericPackage(); + mockGenericPackage({ html: null }); const resA = await get('org.example:package', baseUrl.replace(/\/+$/, '')); - mockGenericPackage(); + mockGenericPackage({ html: null }); const resB = await get('org.example:package', baseUrl.replace(/\/*$/, '/')); expect(resA).not.toBeNull(); expect(resB).not.toBeNull(); @@ -328,7 +368,7 @@ describe('datasource/maven/index', () => { it('supports scm.url values prefixed with "scm:"', async () => { const pom = loadFixture('pom.scm-prefix.xml'); - mockGenericPackage({ pom }); + mockGenericPackage({ pom, html: null }); const { sourceUrl } = await get(); @@ -395,6 +435,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); mockGenericPackage(parentPackage); @@ -414,6 +455,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); const res = await get(); @@ -455,6 +497,7 @@ describe('datasource/maven/index', () => { meta: childMeta, jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); mockGenericPackage(parentPomMock); mockGenericPackage(childPomMock); @@ -477,6 +520,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); mockGenericPackage(parentPackage); @@ -496,6 +540,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); mockGenericPackage(parentPackage); @@ -515,6 +560,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); const res = await get(); @@ -533,6 +579,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); const res = await get(); @@ -550,6 +597,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); const res = await get(); @@ -566,6 +614,7 @@ describe('datasource/maven/index', () => { latest: '2.0.0', jars: { '2.0.0': 200 }, snapshots: [], + html: null, }); const res = await get(); diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index 1a7e6d97acc4fe..00f6d7198d7c80 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -1,8 +1,10 @@ import is from '@sindresorhus/is'; +import { DateTime } from 'luxon'; import pAll from 'p-all'; import { XmlDocument } from 'xmldoc'; import { logger } from '../../logger'; import * as packageCache from '../../util/cache/package'; +import { regEx } from '../../util/regex'; import mavenVersion from '../../versioning/maven'; import * as mavenVersioning from '../../versioning/maven'; import { compare } from '../../versioning/maven/compare'; @@ -11,6 +13,7 @@ import { MAVEN_REPO } from './common'; import type { MavenDependency, ReleaseMap } from './types'; import { checkHttpResource, + downloadHttpProtocol, downloadMavenXml, getDependencyInfo, getDependencyParts, @@ -85,6 +88,63 @@ async function fetchReleasesFromMetadata( return releaseMap; } +const mavenCentralHtmlVersionRegex = regEx( + '^(?:[^"]+)\\/<\\/a>\\s+(?\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d)\\s+-$', + 'i' +); + +async function addReleasesFromIndexPage( + inputReleaseMap: ReleaseMap, + dependency: MavenDependency, + repoUrl: string +): Promise { + const cacheNs = 'datasource-maven:index-html-releases'; + const cacheKey = `${repoUrl}${dependency.dependencyUrl}`; + let workingReleaseMap = await packageCache.get(cacheNs, cacheKey); + if (!workingReleaseMap) { + workingReleaseMap = {}; + let retryEarlier = false; + try { + if (repoUrl.startsWith(MAVEN_REPO)) { + const indexUrl = getMavenUrl(dependency, repoUrl, 'index.html'); + const res = await downloadHttpProtocol(indexUrl); + const { body = '' } = res; + for (const line of body.split('\n')) { + const match = line.trim().match(mavenCentralHtmlVersionRegex); + if (match) { + const { version, releaseTimestamp: timestamp } = + match?.groups || {}; + if (version && timestamp) { + const date = DateTime.fromFormat(timestamp, 'yyyy-MM-dd HH:mm', { + zone: 'UTC', + }); + if (date.isValid) { + const releaseTimestamp = date.toISO(); + workingReleaseMap[version] = { version, releaseTimestamp }; + } + } + } + } + } + } catch (err) /* istanbul ignore next */ { + retryEarlier = true; + logger.debug( + { dependency, err }, + 'Failed to get releases from index.html' + ); + } + const cacheTTL = retryEarlier ? 60 : 24 * 60; + await packageCache.set(cacheNs, cacheKey, workingReleaseMap, cacheTTL); + } + + const releaseMap = { ...inputReleaseMap }; + for (const version of Object.keys(releaseMap)) { + releaseMap[version] ||= workingReleaseMap[version] ?? null; + } + + return releaseMap; +} + function isSnapshotVersion(version: string): boolean { if (version.endsWith('-SNAPSHOT')) { return true; @@ -251,6 +311,7 @@ export async function getReleases({ logger.debug(`Looking up ${dependency.display} in repository ${repoUrl}`); let releaseMap = await fetchReleasesFromMetadata(dependency, repoUrl); + releaseMap = await addReleasesFromIndexPage(releaseMap, dependency, repoUrl); releaseMap = await addReleasesUsingHeadRequests( releaseMap, dependency, From 536be0ff6961a591a5e832cdfeadc9ad5cffc3a7 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 16 Nov 2021 14:01:39 +0300 Subject: [PATCH 080/248] refactor(typescript): Enable gradual null-checks on CI (#12688) --- .github/workflows/build.yml | 3 +++ tsconfig.strict.json | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b32cc427923ba8..d0b250c126d006 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -162,6 +162,9 @@ jobs: - name: Type check run: yarn type-check + - name: Null check + run: yarn null-check + release: needs: [lint, test] if: github.event_name != 'pull_request' diff --git a/tsconfig.strict.json b/tsconfig.strict.json index e256ff01fc6eb5..efec9fbfe0faba 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -2,14 +2,13 @@ "extends": "./tsconfig.json", "compilerOptions": { "strictNullChecks": true, - "noImplicitAny": true + "noImplicitAny": true, + "lib": ["es2019"] }, "files": [ - "./lib/constants/error-messages.ts", - "./lib/util/clone.ts", - "./lib/util/sanitize.ts", "./lib/config/app-strings.ts", "./lib/config/presets/common.ts", + "./lib/constants/error-messages.ts", "./lib/constants/platforms.ts", "./lib/constants/programming-language.ts", "./lib/data-files.generated.ts", @@ -99,6 +98,7 @@ "./lib/types/vulnerability-alert.ts", "./lib/util/cache/memory/index.ts", "./lib/util/cache/package/types.ts", + "./lib/util/clone.ts", "./lib/util/date.ts", "./lib/util/exec/common.ts", "./lib/util/exec/types.ts", @@ -109,6 +109,7 @@ "./lib/util/index.ts", "./lib/util/json-writer/indentation-type.ts", "./lib/util/object.ts", + "./lib/util/sanitize.ts", "./lib/util/split.ts", "./lib/workers/pr/changelog/hbs-template.ts", "./lib/workers/pr/changelog/types.ts", From 138db3844f714a34b418e16f78b14b378bc5ae4a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Nov 2021 14:57:03 +0000 Subject: [PATCH 081/248] chore(deps): update dependency type-fest to v2.5.3 (#12694) 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 a2bd8da0ba9487..eed9fda7cd928d 100644 --- a/package.json +++ b/package.json @@ -278,7 +278,7 @@ "tmp-promise": "3.0.3", "ts-jest": "27.0.7", "ts-node": "10.4.0", - "type-fest": "2.5.2", + "type-fest": "2.5.3", "typescript": "4.4.4", "unified": "9.2.2" }, diff --git a/yarn.lock b/yarn.lock index 61cf868cd47e05..ef1c33afcac0eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8921,10 +8921,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.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.5.2.tgz#d6a5247b8019716b300d9023fa7b1b02016dd864" - integrity sha512-WMbytmAs5PUTqwGJRE+WoRrD2S0bYFtHX8k4Y/1l18CG5kqA3keJud9pPQ/r30FE9n8XRFCXF9BbccHIZzRYJw== +type-fest@2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.5.3.tgz#2538287381b24d0c1d4911279934f28aaa10d620" + integrity sha512-7VNmE7FlsrdcWjKbtuRuynZz96Gmf35p5DvoR2tbceNP0vd58ISx87PvUUInlhtRC49vSX6qlxEKc7AoiHRirg== type-fest@^0.13.1: version "0.13.1" From 49d3c18e31bed6a1716419beb17918834065117c Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 16 Nov 2021 18:16:31 +0300 Subject: [PATCH 082/248] fix(github): Shrink GraphQL page size and retry for any ExternalHostError (#12689) --- lib/util/http/github.ts | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/lib/util/http/github.ts b/lib/util/http/github.ts index 7674405713878c..c181dcb6f10f06 100644 --- a/lib/util/http/github.ts +++ b/lib/util/http/github.ts @@ -284,19 +284,9 @@ export class GithubHttp extends Http { result = res?.body; } catch (err) { logger.debug({ err, query, options }, 'Unexpected GraphQL Error'); - if (err instanceof ExternalHostError) { - const gotError = err.err as GotLegacyError; - const statusCode = gotError?.statusCode; - if ( - count && - count > 10 && - statusCode && - statusCode >= 500 && - statusCode < 600 - ) { - logger.info('Reducing pagination count to workaround graphql 5xx'); - return null; - } + if (err instanceof ExternalHostError && count && count > 10) { + logger.info('Reducing pagination count to workaround graphql errors'); + return null; } handleGotError(err, path, opts); } From 2269909c5bf116a2afbf4ba70f5905587178c6fc Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 16 Nov 2021 18:00:04 +0100 Subject: [PATCH 083/248] feat: import tslib to reduce code (#12691) --- package.json | 1 + tsconfig.app.json | 1 + yarn.lock | 10 +++++----- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index eed9fda7cd928d..3af18b1115f323 100644 --- a/package.json +++ b/package.json @@ -194,6 +194,7 @@ "simple-git": "2.47.0", "slugify": "1.6.2", "traverse": "0.6.6", + "tslib": "2.3.1", "upath": "2.0.1", "url-join": "4.0.1", "validate-npm-package-name": "3.0.0", diff --git a/tsconfig.app.json b/tsconfig.app.json index c486d2866203ed..4442a4f91da7ef 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -6,6 +6,7 @@ "noImplicitAny": false, "sourceMap": true, "inlineSources": true, + "importHelpers": true, "allowJs": false, "checkJs": false, "types": ["node"] diff --git a/yarn.lock b/yarn.lock index ef1c33afcac0eb..e517b6ce096f79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8868,16 +8868,16 @@ tslib@2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@2.3.1, tslib@^2.3.0, tslib@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tslib@^1.11.1, tslib@^1.13.0, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.0, tslib@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" From d78458bf8b9ba87fa51bcb9b1308aceed124a740 Mon Sep 17 00:00:00 2001 From: Martino di Filippo Date: Tue, 16 Nov 2021 18:11:50 +0100 Subject: [PATCH 084/248] feat(gradle): treat the preview qualifier as unstable (#12450) (#12698) Co-authored-by: Rhys Arkins --- lib/versioning/gradle/index.spec.ts | 4 ++++ lib/versioning/gradle/index.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/lib/versioning/gradle/index.spec.ts b/lib/versioning/gradle/index.spec.ts index d67f436dacd951..903db8b72c4ffa 100644 --- a/lib/versioning/gradle/index.spec.ts +++ b/lib/versioning/gradle/index.spec.ts @@ -19,6 +19,7 @@ describe('versioning/gradle/index', () => { ${'1.a-1'} | ${'1a1'} | ${0} ${'dev'} | ${'dev'} | ${0} ${'rc'} | ${'rc'} | ${0} + ${'preview'} | ${'preview'} | ${0} ${'release'} | ${'release'} | ${0} ${'final'} | ${'final'} | ${0} ${'snapshot'} | ${'SNAPSHOT'} | ${0} @@ -43,6 +44,7 @@ describe('versioning/gradle/index', () => { ${'1.0-zeta'} | ${'1.0-SNAPSHOT'} | ${-1} ${'1.0-zeta'} | ${'1.0-rc'} | ${-1} ${'1.0-rc'} | ${'1.0'} | ${-1} + ${'1.0-preview'} | ${'1.0'} | ${-1} ${'1.0'} | ${'1.0-20150201.121010-123'} | ${-1} ${'1.0-20150201.121010-123'} | ${'1.1'} | ${-1} ${'Hoxton.RELEASE'} | ${'Hoxton.SR1'} | ${-1} @@ -68,6 +70,7 @@ describe('versioning/gradle/index', () => { ${'1.0-SNAPSHOT'} | ${'1.0-zeta'} | ${1} ${'1.0-rc'} | ${'1.0-zeta'} | ${1} ${'1.0'} | ${'1.0-rc'} | ${1} + ${'1.0'} | ${'1.0-preview'} | ${1} ${'1.0-20150201.121010-123'} | ${'1.0'} | ${1} ${'1.1'} | ${'1.0-20150201.121010-123'} | ${1} ${'Hoxton.SR1'} | ${'Hoxton.RELEASE'} | ${1} @@ -170,6 +173,7 @@ describe('versioning/gradle/index', () => { ${'1-ga-1'} | ${true} ${'1.3-groovy-2.5'} | ${true} ${'1.3-RC1-groovy-2.5'} | ${false} + ${'1-preview'} | ${false} ${'Hoxton.RELEASE'} | ${true} ${'Hoxton.SR'} | ${true} ${'Hoxton.SR1'} | ${true} diff --git a/lib/versioning/gradle/index.ts b/lib/versioning/gradle/index.ts index 990f3d7ff7314f..71bd6682f5be08 100644 --- a/lib/versioning/gradle/index.ts +++ b/lib/versioning/gradle/index.ts @@ -83,6 +83,7 @@ const unstable = new Set([ 'milestone', 'rc', 'cr', + 'preview', 'snapshot', ]); From 3aaf2761c6a41fcd25c8460dd13d7b3f59d4d415 Mon Sep 17 00:00:00 2001 From: Andrei Nistor Date: Tue, 16 Nov 2021 19:34:59 +0200 Subject: [PATCH 085/248] refactor(manager/kustomize): refactor Kustomize interface (#12686) Co-authored-by: Michael Kriese --- lib/manager/kustomize/extract.spec.ts | 20 ++++++++------ lib/manager/kustomize/extract.ts | 40 +++++++++++++++++++-------- lib/manager/kustomize/types.ts | 6 ++-- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/lib/manager/kustomize/extract.spec.ts b/lib/manager/kustomize/extract.spec.ts index 9abae0efc101ff..77437cd77884db 100644 --- a/lib/manager/kustomize/extract.spec.ts +++ b/lib/manager/kustomize/extract.spec.ts @@ -4,9 +4,9 @@ import { GitTagsDatasource } from '../../datasource/git-tags'; import * as datasourceGitHubTags from '../../datasource/github-tags'; import { SkipReason } from '../../types'; import { - extractBase, extractImage, extractPackageFile, + extractResource, parseKustomize, } from './extract'; @@ -34,7 +34,7 @@ describe('manager/kustomize/extract', () => { }); describe('extractBase', () => { it('should return null for a local base', () => { - const res = extractBase('./service-1'); + const res = extractResource('./service-1'); expect(res).toBeNull(); }); it('should extract out the version of an http base', () => { @@ -46,11 +46,11 @@ describe('manager/kustomize/extract', () => { depName: 'user/test-repo', }; - const pkg = extractBase(`${base}?ref=${version}`); + const pkg = extractResource(`${base}?ref=${version}`); expect(pkg).toEqual(sample); }); it('should extract the version of a non http base', () => { - const pkg = extractBase( + const pkg = extractResource( 'ssh://git@bitbucket.com/user/test-repo?ref=v1.2.3' ); expect(pkg).toEqual({ @@ -61,7 +61,7 @@ describe('manager/kustomize/extract', () => { }); }); it('should extract the depName if the URL includes a port number', () => { - const pkg = extractBase( + const pkg = extractResource( 'ssh://git@bitbucket.com:7999/user/test-repo?ref=v1.2.3' ); expect(pkg).toEqual({ @@ -72,7 +72,7 @@ describe('manager/kustomize/extract', () => { }); }); it('should extract the version of a non http base with subdir', () => { - const pkg = extractBase( + const pkg = extractResource( 'ssh://git@bitbucket.com/user/test-repo/subdir?ref=v1.2.3' ); expect(pkg).toEqual({ @@ -91,7 +91,7 @@ describe('manager/kustomize/extract', () => { depName: 'fluxcd/flux', }; - const pkg = extractBase(`${base}?ref=${version}`); + const pkg = extractResource(`${base}?ref=${version}`); expect(pkg).toEqual(sample); }); it('should extract out the version of a git base', () => { @@ -103,7 +103,7 @@ describe('manager/kustomize/extract', () => { depName: 'user/repo', }; - const pkg = extractBase(`${base}?ref=${version}`); + const pkg = extractResource(`${base}?ref=${version}`); expect(pkg).toEqual(sample); }); it('should extract out the version of a git base with subdir', () => { @@ -115,7 +115,7 @@ describe('manager/kustomize/extract', () => { depName: 'user/repo', }; - const pkg = extractBase(`${base}?ref=${version}`); + const pkg = extractResource(`${base}?ref=${version}`); expect(pkg).toEqual(sample); }); }); @@ -247,6 +247,7 @@ describe('manager/kustomize/extract', () => { expect(res.deps[0].currentValue).toBe('v0.0.1'); expect(res.deps[1].currentValue).toBe('1.19.0'); expect(res.deps[2].currentValue).toBe('1.18.0'); + expect(res.deps[0].depName).toBe('moredhel/remote-kustomize'); expect(res.deps[1].depName).toBe('fluxcd/flux'); expect(res.deps[2].depName).toBe('fluxcd/flux'); expect(res.deps[0].depType).toBe('Kustomization'); @@ -261,6 +262,7 @@ describe('manager/kustomize/extract', () => { expect(res.deps[0].currentValue).toBe('1.19.0'); expect(res.deps[1].currentValue).toBe('1.18.0'); expect(res.deps[2].currentValue).toBe('v0.1.0'); + expect(res.deps[0].depName).toBe('fluxcd/flux'); expect(res.deps[1].depName).toBe('fluxcd/flux'); expect(res.deps[2].depName).toBe('node'); expect(res.deps[0].depType).toBe('Component'); diff --git a/lib/manager/kustomize/extract.ts b/lib/manager/kustomize/extract.ts index f2c223d8e98706..f012353296558c 100644 --- a/lib/manager/kustomize/extract.ts +++ b/lib/manager/kustomize/extract.ts @@ -16,7 +16,7 @@ const gitUrl = regEx( /^(?:git::)?(?(?:(?:(?:http|https|ssh):\/\/)?(?:.*@)?)?(?(?:[^:/\s]+(?::[0-9]+)?[:/])?(?[^/\s]+\/[^/\s]+)))(?[^?\s]*)\?ref=(?.+)$/ ); -export function extractBase(base: string): PackageDependency | null { +export function extractResource(base: string): PackageDependency | null { const match = gitUrl.exec(base); if (!match) { @@ -107,9 +107,9 @@ export function extractImage(image: Image): PackageDependency | null { } export function parseKustomize(content: string): Kustomize | null { - let pkg = null; + let pkg: Kustomize | null = null; try { - pkg = load(content, { json: true }); + pkg = load(content, { json: true }) as Kustomize; } catch (e) /* istanbul ignore next */ { return null; } @@ -122,12 +122,6 @@ export function parseKustomize(content: string): Kustomize | null { return null; } - pkg.bases = (pkg.bases || []).concat( - pkg.resources || [], - pkg.components || [] - ); - pkg.images = pkg.images || []; - return pkg; } @@ -141,8 +135,30 @@ export function extractPackageFile(content: string): PackageFile | null { } // grab the remote bases - for (const base of pkg.bases) { - const dep = extractBase(base); + for (const base of pkg.bases ?? []) { + const dep = extractResource(base); + if (dep) { + deps.push({ + ...dep, + depType: pkg.kind, + }); + } + } + + // grab the remote resources + for (const resource of pkg.resources ?? []) { + const dep = extractResource(resource); + if (dep) { + deps.push({ + ...dep, + depType: pkg.kind, + }); + } + } + + // grab the remote components + for (const component of pkg.components ?? []) { + const dep = extractResource(component); if (dep) { deps.push({ ...dep, @@ -152,7 +168,7 @@ export function extractPackageFile(content: string): PackageFile | null { } // grab the image tags - for (const image of pkg.images) { + for (const image of pkg.images ?? []) { const dep = extractImage(image); if (dep) { deps.push({ diff --git a/lib/manager/kustomize/types.ts b/lib/manager/kustomize/types.ts index 8693cd568ebcb2..d7a7c096e97b28 100644 --- a/lib/manager/kustomize/types.ts +++ b/lib/manager/kustomize/types.ts @@ -6,6 +6,8 @@ export interface Image { } export interface Kustomize { kind: string; - bases: string[]; - images: Image[]; + bases?: string[]; // deprecated since kustomize v2.1.0 + resources?: string[]; + components?: string[]; + images?: Image[]; } From cdd40ae9fb498a8a90079c420a1d3f36e520c9d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Nov 2021 19:12:09 +0000 Subject: [PATCH 086/248] chore(deps): update dependency @types/luxon to v2.0.7 (#12697) 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 3af18b1115f323..0553457bea20e9 100644 --- a/package.json +++ b/package.json @@ -227,7 +227,7 @@ "@types/js-yaml": "4.0.4", "@types/json-dup-key-validator": "1.0.0", "@types/linkify-markdown": "1.0.1", - "@types/luxon": "2.0.6", + "@types/luxon": "2.0.7", "@types/markdown-it": "12.2.3", "@types/markdown-table": "2.0.0", "@types/marshal": "0.5.1", diff --git a/yarn.lock b/yarn.lock index e517b6ce096f79..805f6d3cd28972 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1915,10 +1915,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.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.0.6.tgz#14d022a107c300ef436f84763ba9f1a4f760ee1f" - integrity sha512-cjZwmN7ai2MG4xIKyrI1YP9QYU81huqYUHR7M6n1nm1+izqNWrdxihGDkuc7359ILROxpCnTt2A1sbKg7vXk/A== +"@types/luxon@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-2.0.7.tgz#6189930542400e2c48b4d5ed06c4f136ee38bb1a" + integrity sha512-AxiYycfO+/M4VIH0ribSr2iPFC+APewpJIaQSydwVnzorK3mjSFXkA3HmhQidGx44MpwaatFyEkbW/WD4zdDaQ== "@types/markdown-it@12.2.3": version "12.2.3" From e042b917dc54e964d02d419d23b4a944e23a9b13 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Nov 2021 23:16:01 +0000 Subject: [PATCH 087/248] chore(deps): update github/codeql-action action to v1.0.23 (#12700) Co-authored-by: Renovate Bot --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a78d12949ccbed..94457b1f7e332b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -26,7 +26,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@5581e08a65fc3811c3ac78939dd59e7a8adbf003 # renovate: tag=v1.0.22 + uses: github/codeql-action/init@a627e9fa504113bfa8e90a9b429b157a38b1cdbd # renovate: tag=v1.0.23 with: config-file: ./.github/codeql/codeql-config.yml @@ -36,7 +36,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@5581e08a65fc3811c3ac78939dd59e7a8adbf003 # renovate: tag=v1.0.22 + uses: github/codeql-action/autobuild@a627e9fa504113bfa8e90a9b429b157a38b1cdbd # renovate: tag=v1.0.23 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -50,4 +50,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@5581e08a65fc3811c3ac78939dd59e7a8adbf003 # renovate: tag=v1.0.22 + uses: github/codeql-action/analyze@a627e9fa504113bfa8e90a9b429b157a38b1cdbd # renovate: tag=v1.0.23 From 0f1256317c0ab0f7091d081451e4056110d4593e Mon Sep 17 00:00:00 2001 From: Nejc Habjan Date: Wed, 17 Nov 2021 07:49:53 +0100 Subject: [PATCH 088/248] refactor(config): use async readFile and dynamic import to load config file (#12649) Co-authored-by: Michael Kriese --- lib/config-validator.ts | 8 +++---- lib/workers/global/config/parse/file.spec.ts | 24 ++++++++++---------- lib/workers/global/config/parse/file.ts | 5 ++-- lib/workers/global/config/parse/index.ts | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/lib/config-validator.ts b/lib/config-validator.ts index fadf2c9b4b2021..aac81196482a76 100644 --- a/lib/config-validator.ts +++ b/lib/config-validator.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node // istanbul ignore file import { dequal } from 'dequal'; -import { readFileSync } from 'fs-extra'; +import { readFile } from 'fs-extra'; import JSON5 from 'json5'; import { configFileNames } from './config/app-strings'; import { massageConfig } from './config/massage'; @@ -52,7 +52,7 @@ type PackageJson = { (name) => name !== 'package.json' )) { try { - const rawContent = readFileSync(file, 'utf8'); + const rawContent = await readFile(file, 'utf8'); logger.info(`Validating ${file}`); try { let jsonContent: RenovateConfig; @@ -72,7 +72,7 @@ type PackageJson = { } try { const pkgJson = JSON.parse( - readFileSync('package.json', 'utf8') + await readFile('package.json', 'utf8') ) as PackageJson; if (pkgJson.renovate) { logger.info(`Validating package.json > renovate`); @@ -88,7 +88,7 @@ type PackageJson = { // ignore } try { - const fileConfig = getFileConfig(process.env); + const fileConfig = await getFileConfig(process.env); if (!dequal(fileConfig, {})) { const file = process.env.RENOVATE_CONFIG_FILE ?? 'config.js'; logger.info(`Validating ${file}`); diff --git a/lib/workers/global/config/parse/file.spec.ts b/lib/workers/global/config/parse/file.spec.ts index f2a78c48d07e8c..6e629aa2448248 100644 --- a/lib/workers/global/config/parse/file.spec.ts +++ b/lib/workers/global/config/parse/file.spec.ts @@ -16,24 +16,24 @@ describe('workers/global/config/parse/file', () => { }); describe('.getConfig()', () => { - it('parses custom config file', () => { + it('parses custom config file', async () => { const configFile = upath.resolve(__dirname, './__fixtures__/file.js'); - expect(file.getConfig({ RENOVATE_CONFIG_FILE: configFile })).toEqual( - customConfig - ); + expect( + await file.getConfig({ RENOVATE_CONFIG_FILE: configFile }) + ).toEqual(customConfig); }); - it('migrates', () => { + it('migrates', async () => { const configFile = upath.resolve(__dirname, './__fixtures__/file2.js'); - const res = file.getConfig({ RENOVATE_CONFIG_FILE: configFile }); + const res = await file.getConfig({ RENOVATE_CONFIG_FILE: configFile }); expect(res).toMatchSnapshot(); expect(res.rangeStrategy).toBe('bump'); }); - it('parse and returns empty config if there is no RENOVATE_CONFIG_FILE in env', () => { - expect(file.getConfig({})).toBeDefined(); + it('parse and returns empty config if there is no RENOVATE_CONFIG_FILE in env', async () => { + expect(await file.getConfig({})).toBeDefined(); }); - it('fatal error and exit if error in parsing config.js', () => { + it('fatal error and exit if error in parsing config.js', async () => { const mockProcessExit = jest .spyOn(process, 'exit') .mockImplementation(() => undefined as never); @@ -50,19 +50,19 @@ describe('workers/global/config/parse/file', () => { "repositories": [ "test/test" ], };`; fs.writeFileSync(configFile, fileContent, { encoding: 'utf8' }); - file.getConfig({ RENOVATE_CONFIG_FILE: configFile }); + await file.getConfig({ RENOVATE_CONFIG_FILE: configFile }); expect(mockProcessExit).toHaveBeenCalledWith(1); fs.unlinkSync(configFile); }); - it('fatal error and exit if custom config file does not exist', () => { + it('fatal error and exit if custom config file does not exist', async () => { const mockProcessExit = jest .spyOn(process, 'exit') .mockImplementation(() => undefined as never); const configFile = upath.resolve(tmp.path, './file4.js'); - file.getConfig({ RENOVATE_CONFIG_FILE: configFile }); + await file.getConfig({ RENOVATE_CONFIG_FILE: configFile }); expect(mockProcessExit).toHaveBeenCalledWith(1); }); diff --git a/lib/workers/global/config/parse/file.ts b/lib/workers/global/config/parse/file.ts index 5cab40ee0e5b6d..efdefb62b313c0 100644 --- a/lib/workers/global/config/parse/file.ts +++ b/lib/workers/global/config/parse/file.ts @@ -3,7 +3,7 @@ import { migrateConfig } from '../../../../config/migration'; import type { AllConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; -export function getConfig(env: NodeJS.ProcessEnv): AllConfig { +export async function getConfig(env: NodeJS.ProcessEnv): Promise { let configFile = env.RENOVATE_CONFIG_FILE || 'config'; if (!upath.isAbsolute(configFile)) { configFile = `${process.cwd()}/${configFile}`; @@ -11,7 +11,8 @@ export function getConfig(env: NodeJS.ProcessEnv): AllConfig { } let config: AllConfig = {}; try { - config = require(configFile); + const tmpConfig = await import(configFile); + config = tmpConfig.default ? tmpConfig.default : tmpConfig; } catch (err) { // istanbul ignore if if (err instanceof SyntaxError || err instanceof TypeError) { diff --git a/lib/workers/global/config/parse/index.ts b/lib/workers/global/config/parse/index.ts index 35306b784dbd08..a0ec060d149a31 100644 --- a/lib/workers/global/config/parse/index.ts +++ b/lib/workers/global/config/parse/index.ts @@ -18,7 +18,7 @@ export async function parseConfigs( // Get configs const defaultConfig = defaultsParser.getConfig(); - const fileConfig = fileParser.getConfig(env); + const fileConfig = await fileParser.getConfig(env); const cliConfig = cliParser.getConfig(argv); const envConfig = envParser.getConfig(env); From e95fcb17d8388b09ca6a77c23788c9c1674253b8 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 17 Nov 2021 09:55:57 +0100 Subject: [PATCH 089/248] fix(logger): skip response body for timeouts (#12704) --- lib/logger/utils.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index a06363e7d17e9d..b8d6ebef2c3391 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -79,7 +79,8 @@ export default function prepareError(err: Error): Record { response.response = { statusCode: err.response?.statusCode, statusMessage: err.response?.statusMessage, - body: clone(err.response.body), + body: + err.name === 'TimeoutError' ? undefined : clone(err.response.body), headers: clone(err.response.headers), httpVersion: err.response.httpVersion, }; From a7792bc5b4a32eb0b842cf4ff328aef09bb590de Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 17 Nov 2021 12:32:33 +0300 Subject: [PATCH 090/248] refactor(typescript): Refactor more files (#12696) Co-authored-by: Rhys Arkins --- lib/types/errors/external-host-error.ts | 2 +- lib/util/mask.spec.ts | 3 ++- lib/util/mask.ts | 2 +- test/graphql-snapshot.ts | 6 ++++-- tsconfig.strict.json | 4 ++++ 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/types/errors/external-host-error.ts b/lib/types/errors/external-host-error.ts index 88f4fdb936f19f..5fd5922966a704 100644 --- a/lib/types/errors/external-host-error.ts +++ b/lib/types/errors/external-host-error.ts @@ -1,7 +1,7 @@ import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages'; export class ExternalHostError extends Error { - hostType: string; + hostType: string | undefined; err: Error; diff --git a/lib/util/mask.spec.ts b/lib/util/mask.spec.ts index a3150839d138d9..e7cdb0816c5464 100644 --- a/lib/util/mask.spec.ts +++ b/lib/util/mask.spec.ts @@ -2,7 +2,8 @@ import { maskToken } from './mask'; describe('util/mask', () => { describe('.maskToken', () => { - it('returns value if passed value is falsy', () => { + it('returns empty string if passed value is falsy', () => { + expect(maskToken()).toBe(''); expect(maskToken('')).toBe(''); }); diff --git a/lib/util/mask.ts b/lib/util/mask.ts index dd50d4336628d4..83fa009a351b00 100644 --- a/lib/util/mask.ts +++ b/lib/util/mask.ts @@ -5,5 +5,5 @@ export function maskToken(str?: string): string { new Array(str.length - 3).join('*'), str.slice(-2), ].join('') - : str; + : ''; } diff --git a/test/graphql-snapshot.ts b/test/graphql-snapshot.ts index 66e7f9f3eb378d..75478315b40f92 100644 --- a/test/graphql-snapshot.ts +++ b/test/graphql-snapshot.ts @@ -37,11 +37,13 @@ type Variables = Record; interface SelectionSet { __vars?: Variables; __args?: Arguments; - [key: string]: null | SelectionSet | Arguments; + [key: string]: undefined | null | SelectionSet | Arguments; } interface GraphqlSnapshot { query?: SelectionSet; + mutation?: SelectionSet; + subscription?: SelectionSet; variables?: Record; } @@ -81,7 +83,7 @@ function getArguments(key: string, val: ValueNode): Arguments { } function simplifyArguments( - argNodes: ReadonlyArray + argNodes?: ReadonlyArray ): Arguments | null { if (argNodes) { let result: Arguments = {}; diff --git a/tsconfig.strict.json b/tsconfig.strict.json index efec9fbfe0faba..50bda127480777 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -88,6 +88,7 @@ "./lib/platform/utils/pr-body.ts", "./lib/proxy.ts", "./lib/types/branch-status.ts", + "./lib/types/errors/external-host-error.ts", "./lib/types/git.ts", "./lib/types/host-rules.ts", "./lib/types/later.d.ts", @@ -108,12 +109,15 @@ "./lib/util/http/types.ts", "./lib/util/index.ts", "./lib/util/json-writer/indentation-type.ts", + "./lib/util/mask.spec.ts", + "./lib/util/mask.ts", "./lib/util/object.ts", "./lib/util/sanitize.ts", "./lib/util/split.ts", "./lib/workers/pr/changelog/hbs-template.ts", "./lib/workers/pr/changelog/types.ts", "./lib/workers/repository/init/types.ts", + "./test/graphql-snapshot.ts", "./test/json-schema.ts", "./test/newline-snapshot-serializer.ts", "./test/static-files.spec.ts", From 99a68e4449cee68ed89de6d0f74d06a2a2e2863f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Nov 2021 11:45:00 +0000 Subject: [PATCH 091/248] chore(deps): update dependency eslint-plugin-import to v2.25.3 (#12709) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 0553457bea20e9..34c229474140cb 100644 --- a/package.json +++ b/package.json @@ -252,7 +252,7 @@ "eslint": "8.2.0", "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", - "eslint-plugin-import": "2.25.2", + "eslint-plugin-import": "2.25.3", "eslint-plugin-jest": "25.2.4", "eslint-plugin-promise": "5.1.1", "expect-more-jest": "5.4.0", diff --git a/yarn.lock b/yarn.lock index 805f6d3cd28972..9c0cfce7253d48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3897,7 +3897,7 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" -eslint-module-utils@^2.7.0: +eslint-module-utils@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c" integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ== @@ -3906,19 +3906,19 @@ eslint-module-utils@^2.7.0: find-up "^2.1.0" pkg-dir "^2.0.0" -eslint-plugin-import@2.25.2: - version "2.25.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz#b3b9160efddb702fc1636659e71ba1d10adbe9e9" - integrity sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g== +eslint-plugin-import@2.25.3: + version "2.25.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766" + integrity sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg== dependencies: array-includes "^3.1.4" array.prototype.flat "^1.2.5" debug "^2.6.9" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.0" + eslint-module-utils "^2.7.1" has "^1.0.3" - is-core-module "^2.7.0" + is-core-module "^2.8.0" is-glob "^4.0.3" minimatch "^3.0.4" object.values "^1.1.5" @@ -5014,7 +5014,7 @@ is-cidr@^4.0.2: dependencies: cidr-regex "^3.1.1" -is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.7.0: +is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== From cf95251dee3f26c64f003e3caf31ea85dc931ba6 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 17 Nov 2021 17:17:29 +0300 Subject: [PATCH 092/248] ci(build): Remove Python from Renovate dependencies (#12685) Co-authored-by: Rhys Arkins --- .github/workflows/build.yml | 10 ---------- docs/development/local-development.md | 7 ++----- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d0b250c126d006..cdd54fd2a4207b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,26 +37,22 @@ jobs: matrix: os: [ubuntu-latest] node-version: [14] - python-version: [3.9] java-version: [11] # skip macOS and Windows test on pull requests without 'ci:fulltest' label include: >- ${{ fromJSON((github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'ci:fulltest')) && '[{ "os": "macos-latest", "node-version": 14, - "python-version": 3.9, "java-version": 11 }, { "os": "windows-latest", "node-version": 14, - "python-version": 3.9, "java-version": 11 }]' || '[]') }} env: coverage: ${{ matrix.os == 'ubuntu-latest' && matrix.node-version == 14 }} NODE_VERSION: ${{ matrix.node-version }} - PYTHON_VERSION: ${{ matrix.python-version }} JAVA_VERSION: ${{ matrix.java-version }} # skip Java tests on pull requests without 'ci:fulltest' label SKIP_JAVA_TESTS: ${{ matrix.node-version != 14 || (github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'ci:fulltest')) }} @@ -72,11 +68,6 @@ jobs: node-version: ${{ env.NODE_VERSION }} cache: yarn - - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@dc73133d4da04e56a135ae2246682783cc7c7cb6 # renovate: tag=v2.2.2 - with: - python-version: ${{ env.PYTHON_VERSION }} - - name: Set up Java ${{ env.JAVA_VERSION }} if: env.SKIP_JAVA_TESTS == 'false' uses: actions/setup-java@8db439b6b47e5e12312bf036760bbaa6893481ac # renovate: tag=v2.3.1 @@ -96,7 +87,6 @@ jobs: npm config set scripts-prepend-node-path true git --version echo "Node $(node --version)" - python --version echo "Yarn $(yarn --version)" - name: Installing dependencies diff --git a/docs/development/local-development.md b/docs/development/local-development.md index d9491be4f8a64f..8f1dbc209c0b4f 100644 --- a/docs/development/local-development.md +++ b/docs/development/local-development.md @@ -14,7 +14,6 @@ You need the following dependencies for local development: - Node.js `>=14.15.4` - Yarn `^1.22.5` - C++ compiler -- Python `^3.9` - Java between `8` and `12` We support Node.js versions according to the [Node.js release schedule](https://github.com/nodejs/Release#release-schedule). @@ -31,7 +30,7 @@ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update -sudo apt-get install -y git python-minimal build-essential nodejs yarn default-jre-headless +sudo apt-get install -y git build-essential nodejs yarn default-jre-headless ``` You can also use [SDKMAN](https://sdkman.io/) to manage Java versions. @@ -43,7 +42,7 @@ If you already installed a component, skip the corresponding step. - Install [Git](https://git-scm.com/downloads). Make sure you've [configured your username and email](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) - Install [Node.js LTS](https://nodejs.org/en/download/) -- In an Administrator PowerShell prompt, run `npm install -global npm` and then `npm --add-python-to-path='true' --debug install --global windows-build-tools` +- In an Administrator PowerShell prompt, run `npm install -global npm` and then `npm --debug install --global windows-build-tools` - Install [Yarn](https://yarnpkg.com/lang/en/docs/install/#windows-stable) - Install Java, e.g. from [AdoptOpenJDK](https://adoptopenjdk.net/?variant=openjdk11) or any other distribution @@ -53,8 +52,6 @@ If you already installed a component, skip the corresponding step. PS C:\Windows\system32> git --version PS C:\Windows\system32> node --version PS C:\Windows\system32> yarn --version - PS C:\Windows\system32> python --version - PS C:\Windows\system32> python -c "from unittest import mock; print(mock.__version__)" PS C:\Windows\system32> java -version ``` From 8184bda9b672f1f22a5444983b336d8c44575b39 Mon Sep 17 00:00:00 2001 From: Andrei Nistor Date: Wed, 17 Nov 2021 17:04:26 +0200 Subject: [PATCH 093/248] feat(manager/kustomize): support HelmChartInflationGenerator (#12628) Co-authored-by: Michael Kriese --- .../__fixtures__/kustomizeHelmChart.yaml | 15 +++++++ .../__snapshots__/extract.spec.ts.snap | 16 +++++++ lib/manager/kustomize/extract.spec.ts | 42 +++++++++++++++++++ lib/manager/kustomize/extract.ts | 29 ++++++++++++- lib/manager/kustomize/readme.md | 11 +++-- lib/manager/kustomize/types.ts | 8 ++++ 6 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 lib/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml diff --git a/lib/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml b/lib/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml new file mode 100644 index 00000000000000..56f4887e4ac969 --- /dev/null +++ b/lib/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml @@ -0,0 +1,15 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +helmCharts: +- name: minecraft + includeCRDs: false + valuesInline: + minecraftServer: + eula: true + difficulty: hard + rcon: + enabled: true + releaseName: moria + version: 3.1.3 + repo: https://itzg.github.io/minecraft-server-charts diff --git a/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap b/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap index 4d78020fb53a6b..945e568313cb06 100644 --- a/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/kustomize/__snapshots__/extract.spec.ts.snap @@ -160,6 +160,22 @@ Array [ ] `; +exports[`manager/kustomize/extract extractPackageFile() parses helmChart field 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": "3.1.3", + "datasource": "helm", + "depName": "minecraft", + "depType": "HelmChart", + "registryUrls": Array [ + "https://itzg.github.io/minecraft-server-charts", + ], + }, + ], +} +`; + exports[`manager/kustomize/extract extractPackageFile() should extract bases resources and components from their respective blocks 1`] = ` Array [ Object { diff --git a/lib/manager/kustomize/extract.spec.ts b/lib/manager/kustomize/extract.spec.ts index 77437cd77884db..56c99b733d37d0 100644 --- a/lib/manager/kustomize/extract.spec.ts +++ b/lib/manager/kustomize/extract.spec.ts @@ -2,8 +2,10 @@ import { loadFixture } from '../../../test/util'; import * as datasourceDocker from '../../datasource/docker'; import { GitTagsDatasource } from '../../datasource/git-tags'; import * as datasourceGitHubTags from '../../datasource/github-tags'; +import { HelmDatasource } from '../../datasource/helm'; import { SkipReason } from '../../types'; import { + extractHelmChart, extractImage, extractPackageFile, extractResource, @@ -22,6 +24,7 @@ const kustomizeComponent = loadFixture('component.yaml'); const newTag = loadFixture('newTag.yaml'); const newName = loadFixture('newName.yaml'); const digest = loadFixture('digest.yaml'); +const kustomizeHelmChart = loadFixture('kustomizeHelmChart.yaml'); describe('manager/kustomize/extract', () => { it('should successfully parse a valid kustomize file', () => { @@ -119,6 +122,31 @@ describe('manager/kustomize/extract', () => { expect(pkg).toEqual(sample); }); }); + describe('extractHelmChart', () => { + it('should return null on a null input', () => { + const pkg = extractHelmChart({ + name: null, + repo: null, + version: null, + }); + expect(pkg).toBeNull(); + }); + it('should correctly extract a chart', () => { + const registryUrl = 'https://docs.renovatebot.com/helm-charts'; + const sample = { + depName: 'renovate', + currentValue: '29.6.0', + registryUrls: [registryUrl], + datasource: HelmDatasource.id, + }; + const pkg = extractHelmChart({ + name: sample.depName, + version: sample.currentValue, + repo: registryUrl, + }); + expect(pkg).toEqual(sample); + }); + }); describe('image extraction', () => { it('should return null on a null input', () => { const pkg = extractImage({ @@ -346,5 +374,19 @@ describe('manager/kustomize/extract', () => { ], }); }); + + it('parses helmChart field', () => { + const res = extractPackageFile(kustomizeHelmChart); + expect(res).toMatchSnapshot({ + deps: [ + { + depType: 'HelmChart', + depName: 'minecraft', + currentValue: '3.1.3', + registryUrls: ['https://itzg.github.io/minecraft-server-charts'], + }, + ], + }); + }); }); }); diff --git a/lib/manager/kustomize/extract.ts b/lib/manager/kustomize/extract.ts index f012353296558c..df09e194ee8bcd 100644 --- a/lib/manager/kustomize/extract.ts +++ b/lib/manager/kustomize/extract.ts @@ -3,12 +3,13 @@ import { load } from 'js-yaml'; import * as datasourceDocker from '../../datasource/docker'; import { GitTagsDatasource } from '../../datasource/git-tags'; import * as datasourceGitHubTags from '../../datasource/github-tags'; +import { HelmDatasource } from '../../datasource/helm'; import { logger } from '../../logger'; import { SkipReason } from '../../types'; import { regEx } from '../../util/regex'; import { splitImageParts } from '../dockerfile/extract'; import type { PackageDependency, PackageFile } from '../types'; -import type { Image, Kustomize } from './types'; +import type { HelmChart, Image, Kustomize } from './types'; // URL specifications should follow the hashicorp URL format // https://github.com/hashicorp/go-getter#url-format @@ -106,6 +107,21 @@ export function extractImage(image: Image): PackageDependency | null { return null; } +export function extractHelmChart( + helmChart: HelmChart +): PackageDependency | null { + if (!helmChart.name) { + return null; + } + + return { + depName: helmChart.name, + currentValue: helmChart.version, + registryUrls: [helmChart.repo], + datasource: HelmDatasource.id, + }; +} + export function parseKustomize(content: string): Kustomize | null { let pkg: Kustomize | null = null; try { @@ -178,6 +194,17 @@ export function extractPackageFile(content: string): PackageFile | null { } } + // grab the helm charts + for (const helmChart of pkg.helmCharts ?? []) { + const dep = extractHelmChart(helmChart); + if (dep) { + deps.push({ + ...dep, + depType: 'HelmChart', + }); + } + } + if (!deps.length) { return null; } diff --git a/lib/manager/kustomize/readme.md b/lib/manager/kustomize/readme.md index 7defd474b62ab9..ae135b4628f38b 100644 --- a/lib/manager/kustomize/readme.md +++ b/lib/manager/kustomize/readme.md @@ -1,20 +1,23 @@ -This package will manage two parts of the `kustomization.yaml` file: +This package will manage the following parts of the `kustomization.yaml` file: -1. [remote bases](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md) +1. [remote resources](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md) 2. [image tags](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/image.md) 3. [components](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/components.md) +4. [helm charts](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/chart.md) +5. [remote bases](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/remoteBuild.md) (deprecated since kustomize v2.1.0) **How It Works** 1. Renovate will search each repository for any `kustomization.yaml` files. -2. Existing dependencies will be extracted from remote bases & image tags +2. Existing dependencies will be extracted from remote bases, image tags & helm charts 3. Renovate will resolve the dependency's source repository and check for SemVer tags if found. 4. If an update was found, Renovate will update `kustomization.yaml` -This manager uses two `depType`s to allow a fine-grained control of which dependencies are upgraded: +This manager uses three `depType`s to allow a fine-grained control of which dependencies are upgraded: - Component - Kustomization +- HelmChart **Limitations** diff --git a/lib/manager/kustomize/types.ts b/lib/manager/kustomize/types.ts index d7a7c096e97b28..22e0ef573850e4 100644 --- a/lib/manager/kustomize/types.ts +++ b/lib/manager/kustomize/types.ts @@ -4,10 +4,18 @@ export interface Image { newName?: string; digest?: string; } + +export interface HelmChart { + name: string; + repo: string; + version: string; +} + export interface Kustomize { kind: string; bases?: string[]; // deprecated since kustomize v2.1.0 resources?: string[]; components?: string[]; images?: Image[]; + helmCharts?: HelmChart[]; } From e307f18a68c858f0ff7966d6a962f1a5717475af Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 17 Nov 2021 16:21:36 +0100 Subject: [PATCH 094/248] fix(npm): retain package-lock indentation when massaging (#12715) Co-authored-by: Michael Kriese --- lib/manager/npm/post-update/index.ts | 13 +++++++++++-- lib/manager/npm/update/locked-dependency/index.ts | 8 +++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts index 4b0a360607d158..b957e78e03d6fd 100644 --- a/lib/manager/npm/post-update/index.ts +++ b/lib/manager/npm/post-update/index.ts @@ -1,5 +1,6 @@ import is from '@sindresorhus/is'; import deepmerge from 'deepmerge'; +import detectIndent from 'detect-indent'; import { dump, load } from 'js-yaml'; import upath from 'upath'; import { getGlobalConfig } from '../../../config/global'; @@ -167,9 +168,11 @@ export async function writeExistingFiles( } else { logger.debug(`Writing ${npmLock}`); let existingNpmLock: string; + let detectedIndent: string; let npmLockParsed: any; try { existingNpmLock = await getFile(npmLock); + detectedIndent = detectIndent(existingNpmLock).indent || ' '; npmLockParsed = JSON.parse(existingNpmLock); } catch (err) { logger.warn({ err }, 'Error parsing npm lock file'); @@ -217,7 +220,11 @@ export async function writeExistingFiles( } if (lockFileChanged) { logger.debug('Massaging npm lock file before writing to disk'); - existingNpmLock = JSON.stringify(npmLockParsed, null, 2); + existingNpmLock = JSON.stringify( + npmLockParsed, + null, + detectedIndent + ); } await outputFile(npmLockPath, existingNpmLock); } @@ -258,6 +265,8 @@ export async function writeUpdatedPackageFiles( continue; } logger.debug(`Writing ${String(packageFile.name)}`); + const detectedIndent = + detectIndent(packageFile.contents.toString()).indent || ' '; const massagedFile = JSON.parse(packageFile.contents.toString()); try { const { token } = hostRules.find({ @@ -279,7 +288,7 @@ export async function writeUpdatedPackageFiles( } await outputFile( upath.join(localDir, packageFile.name), - JSON.stringify(massagedFile) + JSON.stringify(massagedFile, null, detectedIndent) ); } } diff --git a/lib/manager/npm/update/locked-dependency/index.ts b/lib/manager/npm/update/locked-dependency/index.ts index f968303915510c..e9dd8f6d29d8ee 100644 --- a/lib/manager/npm/update/locked-dependency/index.ts +++ b/lib/manager/npm/update/locked-dependency/index.ts @@ -1,3 +1,4 @@ +import detectIndent from 'detect-indent'; import type { PackageJson } from 'type-fest'; import { logger } from '../../../../logger'; import { api as semver } from '../../../../versioning/npm'; @@ -46,6 +47,7 @@ export async function updateLockedDependency( } let packageJson: PackageJson; let packageLockJson: PackageLockOrEntry; + const detectedIndent = detectIndent(lockFileContent).indent || ' '; let newPackageJsonContent: string; try { packageJson = JSON.parse(packageFileContent); @@ -161,7 +163,11 @@ export async function updateLockedDependency( delete dependency.resolved; delete dependency.integrity; } - let newLockFileContent = JSON.stringify(packageLockJson, null, 2); + let newLockFileContent = JSON.stringify( + packageLockJson, + null, + detectedIndent + ); // iterate through the parent updates first for (const parentUpdate of parentUpdates) { const parentUpdateConfig = { From 5377b1f1aaf46abcfbb8ca324856f6bb16ab30b5 Mon Sep 17 00:00:00 2001 From: Maksim Date: Wed, 17 Nov 2021 16:43:55 +0100 Subject: [PATCH 095/248] feat(config): migrate inline with the same sort (#12091) Co-authored-by: Michael Kriese Co-authored-by: Rhys Arkins --- lib/config/migration.ts | 61 +----------- .../migrations/base/abstract-migration.ts | 26 +++++ .../base/remove-property-migration.ts | 7 ++ .../base/rename-property-migration.ts | 23 +++++ .../custom/binary-source-migration.spec.ts | 11 +++ .../custom/binary-source-migration.ts | 14 +++ .../custom/go-mod-tidy-migration.spec.ts | 31 ++++++ .../custom/go-mod-tidy-migration.ts | 19 ++++ .../ignore-node-modules-migration.spec.ts | 11 +++ .../custom/ignore-node-modules-migration.ts | 16 ++++ .../required-status-checks-migration.spec.ts | 12 +++ .../required-status-checks-migration.ts | 16 ++++ .../custom/trust-level-migration.spec.ts | 26 +++++ .../custom/trust-level-migration.ts | 21 ++++ lib/config/migrations/index.ts | 19 +--- lib/config/migrations/migration.ts | 18 ---- .../migrations/migrations-service.spec.ts | 45 +++++++++ lib/config/migrations/migrations-service.ts | 95 +++++++++++++++++++ .../required-status-checks-migration.spec.ts | 21 ---- .../required-status-checks-migration.ts | 11 --- lib/config/migrations/types.ts | 4 + 21 files changed, 382 insertions(+), 125 deletions(-) create mode 100644 lib/config/migrations/base/abstract-migration.ts create mode 100644 lib/config/migrations/base/remove-property-migration.ts create mode 100644 lib/config/migrations/base/rename-property-migration.ts create mode 100644 lib/config/migrations/custom/binary-source-migration.spec.ts create mode 100644 lib/config/migrations/custom/binary-source-migration.ts create mode 100644 lib/config/migrations/custom/go-mod-tidy-migration.spec.ts create mode 100644 lib/config/migrations/custom/go-mod-tidy-migration.ts create mode 100644 lib/config/migrations/custom/ignore-node-modules-migration.spec.ts create mode 100644 lib/config/migrations/custom/ignore-node-modules-migration.ts create mode 100644 lib/config/migrations/custom/required-status-checks-migration.spec.ts create mode 100644 lib/config/migrations/custom/required-status-checks-migration.ts create mode 100644 lib/config/migrations/custom/trust-level-migration.spec.ts create mode 100644 lib/config/migrations/custom/trust-level-migration.ts delete mode 100644 lib/config/migrations/migration.ts create mode 100644 lib/config/migrations/migrations-service.spec.ts create mode 100644 lib/config/migrations/migrations-service.ts delete mode 100644 lib/config/migrations/required-status-checks-migration.spec.ts delete mode 100644 lib/config/migrations/required-status-checks-migration.ts create mode 100644 lib/config/migrations/types.ts diff --git a/lib/config/migration.ts b/lib/config/migration.ts index ddad631b66a507..2d7fd47f075007 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -5,7 +5,7 @@ import { logger } from '../logger'; import { clone } from '../util/clone'; import { regEx } from '../util/regex'; import { getGlobalConfig } from './global'; -import { applyMigrations } from './migrations'; +import { MigrationsService } from './migrations'; import { getOptions } from './options'; import { removedPresets } from './presets/common'; import type { @@ -20,23 +20,6 @@ const options = getOptions(); let optionTypes: Record; -const removedOptions = [ - 'maintainYarnLock', - 'yarnCacheFolder', - 'yarnMaintenanceBranchName', - 'yarnMaintenanceCommitMessage', - 'yarnMaintenancePrTitle', - 'yarnMaintenancePrBody', - 'groupBranchName', - 'groupBranchName', - 'groupCommitMessage', - 'groupPrTitle', - 'groupPrBody', - 'statusCheckVerify', - 'lazyGrouping', - 'supportPolicy', -]; - // Returns a migrated config export function migrateConfig( config: RenovateConfig, @@ -50,7 +33,8 @@ export function migrateConfig( optionTypes[option.name] = option.type; }); } - const migratedConfig = clone(config) as MigratedRenovateConfig; + const newConfig = MigrationsService.run(config); + const migratedConfig = clone(newConfig) as MigratedRenovateConfig; const depTypes = [ 'dependencies', 'devDependencies', @@ -59,11 +43,8 @@ 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]; - } else if (key === 'pathRules') { + if (key === 'pathRules') { if (is.array(val)) { migratedConfig.packageRules = is.array(migratedConfig.packageRules) ? migratedConfig.packageRules @@ -85,13 +66,6 @@ export function migrateConfig( migratedConfig[newKey] = true; } delete migratedConfig[key]; - } else if (key === 'gomodTidy') { - if (val) { - migratedConfig.postUpdateOptions = - migratedConfig.postUpdateOptions || []; - migratedConfig.postUpdateOptions.push('gomodTidy'); - } - delete migratedConfig.gomodTidy; } else if (key === 'semanticCommits') { if (val === true) { migratedConfig.semanticCommits = 'enabled'; @@ -211,16 +185,6 @@ export function migrateConfig( if (val === false) { migratedConfig.rebaseWhen = 'never'; } - } else if (key === 'exposeEnv') { - migratedConfig.exposeAllEnv = val; - delete migratedConfig.exposeEnv; - } else if (key === 'trustLevel') { - delete migratedConfig.trustLevel; - if (val === 'high') { - migratedConfig.allowCustomCrateRegistries ??= true; - migratedConfig.allowScripts ??= true; - migratedConfig.exposeAllEnv ??= true; - } } else if (key === 'ignoreNpmrcFile') { delete migratedConfig.ignoreNpmrcFile; if (!is.string(migratedConfig.npmrc)) { @@ -305,9 +269,6 @@ export function migrateConfig( } } delete migratedConfig.unpublishSafe; - } else if (key === 'versionScheme') { - migratedConfig.versioning = val; - delete migratedConfig.versionScheme; } else if ( key === 'automergeType' && is.string(val) && @@ -322,25 +283,16 @@ export function migrateConfig( migratedConfig.major = migratedConfig.major || {}; migratedConfig.major.automerge = !!val; delete migratedConfig[key]; - } else if (key === 'multipleMajorPrs') { - delete migratedConfig.multipleMajorPrs; - migratedConfig.separateMultipleMajor = val; } else if (key === 'renovateFork' && is.boolean(val)) { delete migratedConfig.renovateFork; migratedConfig.includeForks = val; } else if (key === 'separateMajorReleases') { delete migratedConfig.separateMultipleMajor; migratedConfig.separateMajorMinor = val; - } else if (key === 'separatePatchReleases') { - delete migratedConfig.separatePatchReleases; - migratedConfig.separateMinorPatch = val; } else if (key === 'automergePatch') { migratedConfig.patch = migratedConfig.patch || {}; migratedConfig.patch.automerge = !!val; delete migratedConfig[key]; - } else if (key === 'ignoreNodeModules') { - delete migratedConfig.ignoreNodeModules; - migratedConfig.ignorePaths = val ? ['node_modules/'] : []; } else if ( key === 'automerge' && is.string(val) && @@ -374,9 +326,6 @@ export function migrateConfig( migratedConfig.packages ); delete migratedConfig.packages; - } else if (key === 'excludedPackageNames') { - migratedConfig.excludePackageNames = val; - delete migratedConfig.excludedPackageNames; } else if (key === 'packageName') { migratedConfig.packageNames = [val]; delete migratedConfig.packageName; @@ -541,8 +490,6 @@ export function migrateConfig( migratedConfig.suppressNotifications || []; migratedConfig.suppressNotifications.push('deprecationWarningIssues'); } - } else if (key === 'binarySource' && val === 'auto') { - migratedConfig.binarySource = 'global'; } else if (key === 'composerIgnorePlatformReqs') { if (val === true) { migratedConfig.composerIgnorePlatformReqs = []; diff --git a/lib/config/migrations/base/abstract-migration.ts b/lib/config/migrations/base/abstract-migration.ts new file mode 100644 index 00000000000000..56d6fb7548bf22 --- /dev/null +++ b/lib/config/migrations/base/abstract-migration.ts @@ -0,0 +1,26 @@ +import type { RenovateConfig } from '../../types'; +import type { Migration } from '../types'; + +export abstract class AbstractMigration implements Migration { + readonly propertyName: string; + + protected readonly originalConfig: RenovateConfig; + + protected readonly migratedConfig: RenovateConfig; + + constructor( + propertyName: string, + originalConfig: RenovateConfig, + migratedConfig: RenovateConfig + ) { + this.propertyName = propertyName; + this.originalConfig = originalConfig; + this.migratedConfig = migratedConfig; + } + + abstract run(): void; + + protected delete(property: string): void { + delete this.migratedConfig[property]; + } +} diff --git a/lib/config/migrations/base/remove-property-migration.ts b/lib/config/migrations/base/remove-property-migration.ts new file mode 100644 index 00000000000000..0b2ad2496963b2 --- /dev/null +++ b/lib/config/migrations/base/remove-property-migration.ts @@ -0,0 +1,7 @@ +import { AbstractMigration } from './abstract-migration'; + +export class RemovePropertyMigration extends AbstractMigration { + override run(): void { + this.delete(this.propertyName); + } +} diff --git a/lib/config/migrations/base/rename-property-migration.ts b/lib/config/migrations/base/rename-property-migration.ts new file mode 100644 index 00000000000000..c317634be40ea4 --- /dev/null +++ b/lib/config/migrations/base/rename-property-migration.ts @@ -0,0 +1,23 @@ +import type { RenovateConfig } from '../../types'; +import { AbstractMigration } from './abstract-migration'; + +export class RenamePropertyMigration extends AbstractMigration { + protected readonly newPropertyName: string; + + constructor( + deprecatedPropertyName: string, + newPropertyName: string, + originalConfig: RenovateConfig, + migratedConfig: RenovateConfig + ) { + super(deprecatedPropertyName, originalConfig, migratedConfig); + this.newPropertyName = newPropertyName; + } + + override run(): void { + this.delete(this.propertyName); + + this.migratedConfig[this.newPropertyName] = + this.originalConfig[this.propertyName]; + } +} diff --git a/lib/config/migrations/custom/binary-source-migration.spec.ts b/lib/config/migrations/custom/binary-source-migration.spec.ts new file mode 100644 index 00000000000000..22ef956ba40e2b --- /dev/null +++ b/lib/config/migrations/custom/binary-source-migration.spec.ts @@ -0,0 +1,11 @@ +import { MigrationsService } from '../migrations-service'; + +describe('config/migrations/custom/binary-source-migration', () => { + it('should migrate "auto" to "global"', () => { + const migratedConfig = MigrationsService.run({ + binarySource: 'auto', + }); + + expect(migratedConfig.binarySource).toBe('global'); + }); +}); diff --git a/lib/config/migrations/custom/binary-source-migration.ts b/lib/config/migrations/custom/binary-source-migration.ts new file mode 100644 index 00000000000000..1452897133193b --- /dev/null +++ b/lib/config/migrations/custom/binary-source-migration.ts @@ -0,0 +1,14 @@ +import type { RenovateConfig } from '../../types'; +import { AbstractMigration } from '../base/abstract-migration'; + +export class BinarySourceMigration extends AbstractMigration { + constructor(originalConfig: RenovateConfig, migratedConfig: RenovateConfig) { + super('binarySource', originalConfig, migratedConfig); + } + + override run(): void { + if (this.originalConfig.binarySource === 'auto') { + this.migratedConfig.binarySource = 'global'; + } + } +} diff --git a/lib/config/migrations/custom/go-mod-tidy-migration.spec.ts b/lib/config/migrations/custom/go-mod-tidy-migration.spec.ts new file mode 100644 index 00000000000000..f0c7be274fe469 --- /dev/null +++ b/lib/config/migrations/custom/go-mod-tidy-migration.spec.ts @@ -0,0 +1,31 @@ +import { MigrationsService } from '../migrations-service'; + +describe('config/migrations/custom/go-mod-tidy-migration', () => { + it('should add postUpdateOptions option when true', () => { + const migratedConfig = MigrationsService.run({ + gomodTidy: true, + postUpdateOptions: ['test'], + }); + + expect(migratedConfig).not.toHaveProperty('gomodTidy'); + expect(migratedConfig.postUpdateOptions).toEqual(['test', 'gomodTidy']); + }); + + it('should handle case when postUpdateOptions is not defined ', () => { + const migratedConfig = MigrationsService.run({ + gomodTidy: true, + }); + + expect(migratedConfig).not.toHaveProperty('gomodTidy'); + expect(migratedConfig.postUpdateOptions).toEqual(['gomodTidy']); + }); + + it('should only remove when false', () => { + const migratedConfig = MigrationsService.run({ + gomodTidy: false, + }); + + expect(migratedConfig).not.toHaveProperty('gomodTidy'); + expect(migratedConfig).not.toHaveProperty('postUpdateOptions'); + }); +}); diff --git a/lib/config/migrations/custom/go-mod-tidy-migration.ts b/lib/config/migrations/custom/go-mod-tidy-migration.ts new file mode 100644 index 00000000000000..b655489da2116a --- /dev/null +++ b/lib/config/migrations/custom/go-mod-tidy-migration.ts @@ -0,0 +1,19 @@ +import type { RenovateConfig } from '../../types'; +import { AbstractMigration } from '../base/abstract-migration'; + +export class GoModTidyMigration extends AbstractMigration { + constructor(originalConfig: RenovateConfig, migratedConfig: RenovateConfig) { + super('gomodTidy', originalConfig, migratedConfig); + } + + override run(): void { + const { gomodTidy, postUpdateOptions } = this.originalConfig; + + this.delete(this.propertyName); + + if (gomodTidy) { + this.migratedConfig.postUpdateOptions ??= postUpdateOptions ?? []; + this.migratedConfig.postUpdateOptions.push('gomodTidy'); + } + } +} diff --git a/lib/config/migrations/custom/ignore-node-modules-migration.spec.ts b/lib/config/migrations/custom/ignore-node-modules-migration.spec.ts new file mode 100644 index 00000000000000..4f2d4d000a8129 --- /dev/null +++ b/lib/config/migrations/custom/ignore-node-modules-migration.spec.ts @@ -0,0 +1,11 @@ +import { MigrationsService } from '../migrations-service'; + +describe('config/migrations/custom/ignore-node-modules-migration', () => { + it('should migrate to ignorePaths', () => { + const migratedConfig = MigrationsService.run({ + ignoreNodeModules: true, + }); + + expect(migratedConfig.ignorePaths).toEqual(['node_modules/']); + }); +}); diff --git a/lib/config/migrations/custom/ignore-node-modules-migration.ts b/lib/config/migrations/custom/ignore-node-modules-migration.ts new file mode 100644 index 00000000000000..976b53df3cd0e0 --- /dev/null +++ b/lib/config/migrations/custom/ignore-node-modules-migration.ts @@ -0,0 +1,16 @@ +import type { RenovateConfig } from '../../types'; +import { AbstractMigration } from '../base/abstract-migration'; + +export class IgnoreNodeModulesMigration extends AbstractMigration { + constructor(originalConfig: RenovateConfig, migratedConfig: RenovateConfig) { + super('ignoreNodeModules', originalConfig, migratedConfig); + } + + override run(): void { + this.delete(this.propertyName); + + this.migratedConfig.ignorePaths = this.originalConfig.ignoreNodeModules + ? ['node_modules/'] + : []; + } +} diff --git a/lib/config/migrations/custom/required-status-checks-migration.spec.ts b/lib/config/migrations/custom/required-status-checks-migration.spec.ts new file mode 100644 index 00000000000000..2fdd67820869e0 --- /dev/null +++ b/lib/config/migrations/custom/required-status-checks-migration.spec.ts @@ -0,0 +1,12 @@ +import { MigrationsService } from '../migrations-service'; + +describe('config/migrations/custom/required-status-checks-migration', () => { + it('should migrate requiredStatusChecks=null to ignoreTests=true', () => { + const migratedConfig = MigrationsService.run({ + requiredStatusChecks: null, + }); + + expect(migratedConfig).not.toHaveProperty('requiredStatusChecks'); + expect(migratedConfig.ignoreTests).toBeTrue(); + }); +}); diff --git a/lib/config/migrations/custom/required-status-checks-migration.ts b/lib/config/migrations/custom/required-status-checks-migration.ts new file mode 100644 index 00000000000000..cd06869c20e18c --- /dev/null +++ b/lib/config/migrations/custom/required-status-checks-migration.ts @@ -0,0 +1,16 @@ +import type { RenovateConfig } from '../../types'; +import { AbstractMigration } from '../base/abstract-migration'; + +export class RequiredStatusChecksMigration extends AbstractMigration { + constructor(originalConfig: RenovateConfig, migratedConfig: RenovateConfig) { + super('requiredStatusChecks', originalConfig, migratedConfig); + } + + override run(): void { + this.delete(this.propertyName); + + if (this.originalConfig.requiredStatusChecks === null) { + this.migratedConfig.ignoreTests = true; + } + } +} diff --git a/lib/config/migrations/custom/trust-level-migration.spec.ts b/lib/config/migrations/custom/trust-level-migration.spec.ts new file mode 100644 index 00000000000000..5fac9753ea1fba --- /dev/null +++ b/lib/config/migrations/custom/trust-level-migration.spec.ts @@ -0,0 +1,26 @@ +import { MigrationsService } from '../migrations-service'; + +describe('config/migrations/custom/trust-level-migration', () => { + it('should handle hight level', () => { + const migratedConfig = MigrationsService.run({ + trustLevel: 'high', + }); + + expect(migratedConfig.allowCustomCrateRegistries).toBeTrue(); + expect(migratedConfig.allowScripts).toBeTrue(); + expect(migratedConfig.exposeAllEnv).toBeTrue(); + }); + + it('should not rewrite provided properties', () => { + const migratedConfig = MigrationsService.run({ + allowCustomCrateRegistries: false, + allowScripts: false, + exposeAllEnv: false, + trustLevel: 'high', + }); + + expect(migratedConfig.allowCustomCrateRegistries).toBeFalse(); + expect(migratedConfig.allowScripts).toBeFalse(); + expect(migratedConfig.exposeAllEnv).toBeFalse(); + }); +}); diff --git a/lib/config/migrations/custom/trust-level-migration.ts b/lib/config/migrations/custom/trust-level-migration.ts new file mode 100644 index 00000000000000..b9e09077f45739 --- /dev/null +++ b/lib/config/migrations/custom/trust-level-migration.ts @@ -0,0 +1,21 @@ +import type { RenovateConfig } from '../../types'; +import { AbstractMigration } from '../base/abstract-migration'; + +export class TrustLevelMigration extends AbstractMigration { + constructor(originalConfig: RenovateConfig, migratedConfig: RenovateConfig) { + super('trustLevel', originalConfig, migratedConfig); + } + + override run(): void { + this.delete(this.propertyName); + + if (this.originalConfig.trustLevel === 'high') { + this.migratedConfig.allowCustomCrateRegistries = + this.originalConfig.allowCustomCrateRegistries ?? true; + this.migratedConfig.allowScripts = + this.originalConfig.allowScripts ?? true; + this.migratedConfig.exposeAllEnv = + this.originalConfig.exposeAllEnv ?? true; + } + } +} diff --git a/lib/config/migrations/index.ts b/lib/config/migrations/index.ts index 1f6c961c293031..2831c79f22e53b 100644 --- a/lib/config/migrations/index.ts +++ b/lib/config/migrations/index.ts @@ -1,18 +1 @@ -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; -} +export { MigrationsService } from './migrations-service'; diff --git a/lib/config/migrations/migration.ts b/lib/config/migrations/migration.ts deleted file mode 100644 index 616b96caeaeb17..00000000000000 --- a/lib/config/migrations/migration.ts +++ /dev/null @@ -1,18 +0,0 @@ -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/migrations-service.spec.ts b/lib/config/migrations/migrations-service.spec.ts new file mode 100644 index 00000000000000..222da9a9ca05ae --- /dev/null +++ b/lib/config/migrations/migrations-service.spec.ts @@ -0,0 +1,45 @@ +import type { RenovateConfig } from '../types'; +import { MigrationsService } from './migrations-service'; + +describe('config/migrations/migrations-service', () => { + it('should remove deprecated properties', () => { + for (const property of MigrationsService.removedProperties) { + const originalConfig: RenovateConfig = { + [property]: 'test', + }; + + const migratedConfig = MigrationsService.run(originalConfig); + expect(migratedConfig).not.toHaveProperty(property); + } + }); + + it('should rename renamed properties', () => { + for (const [ + oldPropertyName, + newPropertyName, + ] of MigrationsService.renamedProperties.entries()) { + const originalConfig: RenovateConfig = { + [oldPropertyName]: 'test', + }; + + const migratedConfig = MigrationsService.run(originalConfig); + expect(migratedConfig).not.toHaveProperty(oldPropertyName); + expect(migratedConfig[newPropertyName]).toBe('test'); + } + }); + + it('should save original order of properties', () => { + const originalConfig: RenovateConfig = { + exposeEnv: true, + versionScheme: 'test', + excludedPackageNames: ['test'], + }; + const migratedConfig = MigrationsService.run(originalConfig); + + const mappedProperties = Object.keys(originalConfig).map((property) => + MigrationsService.renamedProperties.get(property) + ); + + expect(mappedProperties).toEqual(Object.keys(migratedConfig)); + }); +}); diff --git a/lib/config/migrations/migrations-service.ts b/lib/config/migrations/migrations-service.ts new file mode 100644 index 00000000000000..d1cee89acb423a --- /dev/null +++ b/lib/config/migrations/migrations-service.ts @@ -0,0 +1,95 @@ +import type { RenovateConfig } from '../types'; +import { RemovePropertyMigration } from './base/remove-property-migration'; +import { RenamePropertyMigration } from './base/rename-property-migration'; +import { BinarySourceMigration } from './custom/binary-source-migration'; +import { GoModTidyMigration } from './custom/go-mod-tidy-migration'; +import { IgnoreNodeModulesMigration } from './custom/ignore-node-modules-migration'; +import { RequiredStatusChecksMigration } from './custom/required-status-checks-migration'; +import { TrustLevelMigration } from './custom/trust-level-migration'; +import type { Migration } from './types'; + +export class MigrationsService { + static readonly removedProperties: ReadonlySet = new Set([ + 'gitFs', + 'groupBranchName', + 'groupCommitMessage', + 'groupPrBody', + 'groupPrTitle', + 'lazyGrouping', + 'maintainYarnLock', + 'statusCheckVerify', + 'supportPolicy', + 'yarnCacheFolder', + 'yarnMaintenanceBranchName', + 'yarnMaintenanceCommitMessage', + 'yarnMaintenancePrBody', + 'yarnMaintenancePrTitle', + ]); + + static readonly renamedProperties: ReadonlyMap = new Map([ + ['exposeEnv', 'exposeAllEnv'], + ['separatePatchReleases', 'separateMinorPatch'], + ['multipleMajorPrs', 'separateMultipleMajor'], + ['excludedPackageNames', 'excludePackageNames'], + ['versionScheme', 'versioning'], + ]); + + static run(originalConfig: RenovateConfig): RenovateConfig { + const migratedConfig: RenovateConfig = {}; + const migrations = MigrationsService.getMigrations( + originalConfig, + migratedConfig + ); + + for (const [key, value] of Object.entries(originalConfig)) { + migratedConfig[key] ??= value; + const migration = migrations.find((item) => item.propertyName === key); + migration?.run(); + } + + return migratedConfig; + } + + private static getMigrations( + originalConfig: RenovateConfig, + migratedConfig: RenovateConfig + ): Migration[] { + const migrations: Migration[] = []; + + for (const propertyName of MigrationsService.removedProperties) { + migrations.push( + new RemovePropertyMigration( + propertyName, + originalConfig, + migratedConfig + ) + ); + } + + for (const [ + oldPropertyName, + newPropertyName, + ] of MigrationsService.renamedProperties.entries()) { + migrations.push( + new RenamePropertyMigration( + oldPropertyName, + newPropertyName, + originalConfig, + migratedConfig + ) + ); + } + + migrations.push(new BinarySourceMigration(originalConfig, migratedConfig)); + migrations.push( + new IgnoreNodeModulesMigration(originalConfig, migratedConfig) + ); + migrations.push( + new RequiredStatusChecksMigration(originalConfig, migratedConfig) + ); + migrations.push(new TrustLevelMigration(originalConfig, migratedConfig)); + migrations.push(new GoModTidyMigration(originalConfig, migratedConfig)); + + return migrations; + } +} diff --git a/lib/config/migrations/required-status-checks-migration.spec.ts b/lib/config/migrations/required-status-checks-migration.spec.ts deleted file mode 100644 index afe9019ee573f3..00000000000000 --- a/lib/config/migrations/required-status-checks-migration.spec.ts +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index 3f6d64e28fe7cf..00000000000000 --- a/lib/config/migrations/required-status-checks-migration.ts +++ /dev/null @@ -1,11 +0,0 @@ -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/migrations/types.ts b/lib/config/migrations/types.ts new file mode 100644 index 00000000000000..93f2035ed60a60 --- /dev/null +++ b/lib/config/migrations/types.ts @@ -0,0 +1,4 @@ +export interface Migration { + readonly propertyName: string; + run(): void; +} From 2d1c9dfb709c96a2d55a687c31053838a6081740 Mon Sep 17 00:00:00 2001 From: tgroemer <80391116+tgroemer@users.noreply.github.com> Date: Wed, 17 Nov 2021 17:02:39 +0100 Subject: [PATCH 096/248] fix(pypi): normalize simple package lookup (#12544) Co-authored-by: Rhys Arkins --- .../__fixtures__/versions-html-hyphens.html | 12 +++ .../versions-html-mixed-case.html | 12 +++ .../versions-html-with-periods.html | 12 +++ lib/datasource/pypi/index.spec.ts | 79 +++++++++++++++++++ lib/datasource/pypi/index.ts | 38 +++++---- 5 files changed, 138 insertions(+), 15 deletions(-) create mode 100644 lib/datasource/pypi/__fixtures__/versions-html-hyphens.html create mode 100644 lib/datasource/pypi/__fixtures__/versions-html-mixed-case.html create mode 100644 lib/datasource/pypi/__fixtures__/versions-html-with-periods.html diff --git a/lib/datasource/pypi/__fixtures__/versions-html-hyphens.html b/lib/datasource/pypi/__fixtures__/versions-html-hyphens.html new file mode 100644 index 00000000000000..64a958fd346454 --- /dev/null +++ b/lib/datasource/pypi/__fixtures__/versions-html-hyphens.html @@ -0,0 +1,12 @@ + + + + Links for package--with-hyphens + + +

Links for package--with-hyphens

+
package--with-hyphens-2.0.0.tar.gz
+ package_with_hyphens-2.0.1-py3-none-any.whl
+ package_with_hyphens-2.0.2-py3-none-any.whl
+ package--with-hyphens-2.0.2.tar.gz
+ \ No newline at end of file diff --git a/lib/datasource/pypi/__fixtures__/versions-html-mixed-case.html b/lib/datasource/pypi/__fixtures__/versions-html-mixed-case.html new file mode 100644 index 00000000000000..a295006601c998 --- /dev/null +++ b/lib/datasource/pypi/__fixtures__/versions-html-mixed-case.html @@ -0,0 +1,12 @@ + + + + Links for PackageWithMixedCase + + +

Links for PackageWithMixedCase

+ PackageWithMixedCase-2.0.0.tar.gz
+ PackageWithMixedCase-2.0.1-py3-none-any.whl
+ PackageWithMixedCase-2.0.2-py3-none-any.whl
+ PackageWithMixedCase-2.0.2.tar.gz
+ \ No newline at end of file diff --git a/lib/datasource/pypi/__fixtures__/versions-html-with-periods.html b/lib/datasource/pypi/__fixtures__/versions-html-with-periods.html new file mode 100644 index 00000000000000..846d72d71b430b --- /dev/null +++ b/lib/datasource/pypi/__fixtures__/versions-html-with-periods.html @@ -0,0 +1,12 @@ + + + + Links for package.with.periods + + +

Links for package.with.periods

+ package.with.periods-2.0.0.tar.gz
+ package.with.periods-2.0.1-py3-none-any.whl
+ package.with.periods-2.0.2-py3-none-any.whl
+ package.with.periods-2.0.2.tar.gz
+ \ No newline at end of file diff --git a/lib/datasource/pypi/index.spec.ts b/lib/datasource/pypi/index.spec.ts index 8f919d9122aecc..1e95cb19834403 100644 --- a/lib/datasource/pypi/index.spec.ts +++ b/lib/datasource/pypi/index.spec.ts @@ -12,6 +12,9 @@ const dataRequiresPythonResponse = loadFixture( 'versions-html-data-requires-python.html' ); const mixedHyphensResponse = loadFixture('versions-html-mixed-hyphens.html'); +const mixedCaseResponse = loadFixture('versions-html-mixed-case.html'); +const withPeriodsResponse = loadFixture('versions-html-with-periods.html'); +const hyphensResponse = loadFixture('versions-html-hyphens.html'); const baseUrl = 'https://pypi.org/pypi'; const datasource = PypiDatasource.id; @@ -304,6 +307,25 @@ describe('datasource/pypi/index', () => { }); expect(res.isPrivate).toBeTrue(); }); + it('process data from simple endpoint with hyphens', async () => { + httpMock + .scope('https://pypi.org/simple/') + .get('/package-with-hyphens/') + .reply(200, hyphensResponse); + const config = { + registryUrls: ['https://pypi.org/simple/'], + }; + const res = await getPkgReleases({ + datasource, + ...config, + depName: 'package--with-hyphens', + }); + expect(res.releases).toMatchObject([ + { version: '2.0.0' }, + { version: '2.0.1' }, + { version: '2.0.2' }, + ]); + }); it('process data from simple endpoint with hyphens replaced with underscores', async () => { httpMock .scope('https://pypi.org/simple/') @@ -322,6 +344,63 @@ describe('datasource/pypi/index', () => { ).toMatchSnapshot(); expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('process data from simple endpoint with mixed-case characters', async () => { + httpMock + .scope('https://pypi.org/simple/') + .get('/packagewithmixedcase/') + .reply(200, mixedCaseResponse); + const config = { + registryUrls: ['https://pypi.org/simple/'], + }; + const res = await getPkgReleases({ + datasource, + ...config, + depName: 'PackageWithMixedCase', + }); + expect(res.releases).toMatchObject([ + { version: '2.0.0' }, + { version: '2.0.1' }, + { version: '2.0.2' }, + ]); + }); + it('process data from simple endpoint with mixed-case characters when using lower case dependency name', async () => { + httpMock + .scope('https://pypi.org/simple/') + .get('/packagewithmixedcase/') + .reply(200, mixedCaseResponse); + const config = { + registryUrls: ['https://pypi.org/simple/'], + }; + const res = await getPkgReleases({ + datasource, + ...config, + depName: 'packagewithmixedcase', + }); + expect(res.releases).toMatchObject([ + { version: '2.0.0' }, + { version: '2.0.1' }, + { version: '2.0.2' }, + ]); + }); + it('process data from simple endpoint with periods', async () => { + httpMock + .scope('https://pypi.org/simple/') + .get('/package-with-periods/') + .reply(200, withPeriodsResponse); + const config = { + registryUrls: ['https://pypi.org/simple/'], + }; + const res = await getPkgReleases({ + datasource, + ...config, + depName: 'package.with.periods', + }); + expect(res.releases).toMatchObject([ + { version: '2.0.0' }, + { version: '2.0.1' }, + { version: '2.0.2' }, + ]); + }); it('returns null for empty response', async () => { httpMock .scope('https://pypi.org/simple/') diff --git a/lib/datasource/pypi/index.ts b/lib/datasource/pypi/index.ts index bd143aec398289..e2705686601c94 100644 --- a/lib/datasource/pypi/index.ts +++ b/lib/datasource/pypi/index.ts @@ -73,6 +73,10 @@ export class PypiDatasource extends Datasource { } private static normalizeName(input: string): string { + return input.toLowerCase().replace(regEx(/_/g), '-'); + } + + private static normalizeNameForUrlLookup(input: string): string { return input.toLowerCase().replace(regEx(/(_|\.|-)+/g), '-'); } @@ -80,7 +84,10 @@ export class PypiDatasource extends Datasource { packageName: string, hostUrl: string ): Promise { - const lookupUrl = url.resolve(hostUrl, `${packageName}/json`); + const lookupUrl = url.resolve( + hostUrl, + `${PypiDatasource.normalizeNameForUrlLookup(packageName)}/json` + ); const dependency: ReleaseResult = { releases: null }; logger.trace({ lookupUrl }, 'Pypi api got lookup'); const rep = await this.http.getJson(lookupUrl); @@ -164,27 +171,25 @@ export class PypiDatasource extends Datasource { text: string, packageName: string ): string | null { - const srcPrefixes = [ - `${packageName}-`, - `${packageName.replace(regEx(/-/g), '_')}-`, - ]; - for (const prefix of srcPrefixes) { - const suffix = '.tar.gz'; - if (text.startsWith(prefix) && text.endsWith(suffix)) { - return text.replace(prefix, '').replace(regEx(/\.tar\.gz$/), ''); // TODO #12071 - } + // source packages + const srcText = PypiDatasource.normalizeName(text); + const srcPrefix = `${packageName}-`; + const srcSuffix = '.tar.gz'; + if (srcText.startsWith(srcPrefix) && srcText.endsWith(srcSuffix)) { + return srcText.replace(srcPrefix, '').replace(regEx(/\.tar\.gz$/), ''); // TODO #12071 } // pep-0427 wheel packages // {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl. + const wheelText = text.toLowerCase(); const wheelPrefix = packageName.replace(regEx(/[^\w\d.]+/g), '_') + '-'; const wheelSuffix = '.whl'; if ( - text.startsWith(wheelPrefix) && - text.endsWith(wheelSuffix) && - text.split('-').length > 2 + wheelText.startsWith(wheelPrefix) && + wheelText.endsWith(wheelSuffix) && + wheelText.split('-').length > 2 ) { - return text.split('-')[1]; + return wheelText.split('-')[1]; } return null; @@ -210,7 +215,10 @@ export class PypiDatasource extends Datasource { packageName: string, hostUrl: string ): Promise { - const lookupUrl = url.resolve(hostUrl, ensureTrailingSlash(packageName)); + const lookupUrl = url.resolve( + hostUrl, + ensureTrailingSlash(PypiDatasource.normalizeNameForUrlLookup(packageName)) + ); const dependency: ReleaseResult = { releases: null }; const response = await this.http.get(lookupUrl); const dep = response?.body; From da122b442aebe5045d8dec7d35e3e8ab5c1e51d3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 17 Nov 2021 18:00:35 +0100 Subject: [PATCH 097/248] fix(automerge): assign failing PRs (#12705) --- lib/workers/pr/index.ts | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts index d7f17709a6ad6b..1b50dcbd790130 100644 --- a/lib/workers/pr/index.ts +++ b/lib/workers/pr/index.ts @@ -149,6 +149,16 @@ export type EnsurePrResult = ResultWithPr | ResultWithoutPr; export async function ensurePr( prConfig: BranchConfig ): Promise { + let branchStatus: BranchStatus; + async function getBranchStatus(): Promise { + if (branchStatus) { + return branchStatus; + } + branchStatus = await resolveBranchStatus(branchName, ignoreTests); + logger.debug(`Branch status is: ${branchStatus}`); + return branchStatus; + } + const config: BranchConfig = { ...prConfig }; logger.trace({ config }, 'ensurePr'); @@ -168,7 +178,6 @@ export async function ensurePr( logger.debug('Forcing PR because of artifact errors'); config.forcePr = true; } - let branchStatus: BranchStatus; // Only create a PR if a branch automerge has failed if ( @@ -176,13 +185,10 @@ export async function ensurePr( config.automergeType.startsWith('branch') && !config.forcePr ) { - branchStatus ||= await resolveBranchStatus(branchName, ignoreTests); - logger.debug( - `Branch is configured for branch automerge, branch status) is: ${branchStatus}` - ); + logger.debug(`Branch automerge is enabled`); if ( config.stabilityStatus !== BranchStatus.yellow && - branchStatus === BranchStatus.yellow + (await getBranchStatus()) === BranchStatus.yellow ) { logger.debug('Checking how long this branch has been pending'); const lastCommitTime = await getBranchLastCommitTime(branchName); @@ -196,7 +202,7 @@ export async function ensurePr( config.forcePr = true; } } - if (config.forcePr || branchStatus === BranchStatus.red) { + if (config.forcePr || (await getBranchStatus()) === 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 @@ -205,9 +211,8 @@ export async function ensurePr( } if (config.prCreation === 'status-success') { logger.debug('Checking branch combined status'); - branchStatus ||= await resolveBranchStatus(branchName, ignoreTests); - if (branchStatus !== BranchStatus.green) { - logger.debug(`Branch status is "${branchStatus}" - not creating PR`); + if ((await getBranchStatus()) !== BranchStatus.green) { + logger.debug(`Branch status isn't green - not creating PR`); return { prBlockedBy: 'AwaitingTests' }; } logger.debug('Branch status success'); @@ -223,9 +228,8 @@ export async function ensurePr( !config.forcePr ) { logger.debug('Checking branch combined status'); - branchStatus ||= await resolveBranchStatus(branchName, ignoreTests); - if (branchStatus === BranchStatus.yellow) { - logger.debug(`Branch status is "${branchStatus}" - checking timeout`); + if ((await getBranchStatus()) === BranchStatus.yellow) { + logger.debug(`Branch status is yellow - checking timeout`); const lastCommitTime = await getBranchLastCommitTime(branchName); const currentTime = new Date(); const millisecondsPerHour = 1000 * 60 * 60; @@ -330,7 +334,7 @@ export async function ensurePr( !existingPr.hasAssignees && !existingPr.hasReviewers && config.automerge && - branchStatus === BranchStatus.red + (await getBranchStatus()) === BranchStatus.red ) { logger.debug(`Setting assignees and reviewers as status checks failed`); await addAssigneesReviewers(config, existingPr); @@ -475,7 +479,7 @@ export async function ensurePr( if ( config.automerge && !config.assignAutomerge && - branchStatus !== BranchStatus.red + (await getBranchStatus()) !== BranchStatus.red ) { logger.debug( `Skipping assignees and reviewers as automerge=${config.automerge}` From 1e251ca47130741059717b3d5da8033dbd14acca Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 17 Nov 2021 20:16:52 +0300 Subject: [PATCH 098/248] ci(eslint): Bump Renovate eslint plugin (#12721) --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 34c229474140cb..55524431e36b8b 100644 --- a/package.json +++ b/package.json @@ -209,7 +209,7 @@ "@jest/reporters": "27.3.1", "@jest/test-result": "27.3.1", "@ls-lint/ls-lint": "1.10.0", - "@renovate/eslint-plugin": "https://github.com/renovatebot/eslint-plugin#v0.0.3", + "@renovate/eslint-plugin": "https://github.com/renovatebot/eslint-plugin#v0.0.4", "@semantic-release/exec": "6.0.2", "@types/auth-header": "1.0.2", "@types/bunyan": "1.8.7", diff --git a/yarn.lock b/yarn.lock index 9c0cfce7253d48..179bd0e852201d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1468,9 +1468,9 @@ dependencies: "@octokit/openapi-types" "^11.2.0" -"@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.3": - version "0.0.1" - resolved "https://github.com/renovatebot/eslint-plugin#c88253170ce9e9248bc0653197ed2ff1ecf41ac1" +"@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.4": + version "0.0.4" + resolved "https://github.com/renovatebot/eslint-plugin#0c444386e79d6145901212507521b8a0a48af000" "@renovate/pep440@1.0.0": version "1.0.0" From 4f2b3c812eb55cadf07a008eaec9bf9234b3169c Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 17 Nov 2021 19:45:24 +0100 Subject: [PATCH 099/248] fix(yarn): use @yarnpkg/cli for yarn 2+ (#12570) Co-authored-by: Michael Kriese --- lib/manager/npm/extract/__snapshots__/index.spec.ts.snap | 1 + lib/manager/npm/extract/index.ts | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap index eeeb8bede77128..1c419ebf2e122c 100644 --- a/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap +++ b/lib/manager/npm/extract/__snapshots__/index.spec.ts.snap @@ -389,6 +389,7 @@ Object { "datasource": "npm", "depName": "yarn", "depType": "packageManager", + "lookupName": "@yarnpkg/cli", "prettyDepType": "packageManager", }, ], diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index 6ec6352b38f0fb..a1589c6bf21fb7 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -191,6 +191,12 @@ export async function extractPackageFile( dep.datasource = npmId; dep.commitMessageTopic = 'Yarn'; constraints.yarn = dep.currentValue; + if ( + dep.currentValue.startsWith('2') || + dep.currentValue.startsWith('3') + ) { + dep.lookupName = '@yarnpkg/cli'; + } } else if (depName === 'npm') { dep.datasource = npmId; dep.commitMessageTopic = 'npm'; From 55d3c0468dc6ef76267e5bc9eaab548f0c5e7283 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 17 Nov 2021 22:27:12 +0100 Subject: [PATCH 100/248] fix(presets): allow spaces in repo names (#12726) --- lib/config/presets/index.spec.ts | 9 +++++++++ lib/config/presets/index.ts | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index 49e052eb0f7a59..71563487ef8a29 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -407,6 +407,15 @@ describe('config/presets/index', () => { presetSource: 'local', }); }); + it('parses local with spaces', () => { + expect(presets.parsePreset('local>A2B CD/A2B_Renovate')).toEqual({ + packageName: 'A2B CD/A2B_Renovate', + params: undefined, + presetName: 'default', + presetPath: undefined, + presetSource: 'local', + }); + }); it('parses local with subdirectory', () => { expect( presets.parsePreset('local>some-group/some-repo//some-dir/some-file') diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 7ede0fc37ae336..16a39c1ac17941 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -40,7 +40,7 @@ const nonScopedPresetWithSubdirRegex = regEx( /^(?~?[\w\-./]+?)\/\/(?:(?[\w\-./]+)\/)?(?[\w\-.]+)(?:#(?[\w\-.]+?))?$/ ); const gitPresetRegex = regEx( - /^(?[\w\-./]+)(?::(?[\w-./]+\/))?(?::?(?[\w\-.+]+))?(?:#(?[\w\-.]+?))?$/ + /^(?[\w\-. /]+)(?::(?[\w-./]+\/))?(?::?(?[\w\-.+]+))?(?:#(?[\w\-.]+?))?$/ ); export function replaceArgs( From 4d1e7b1596da20674f36a151122476b8ef20d2e9 Mon Sep 17 00:00:00 2001 From: Michael Francis Date: Wed, 17 Nov 2021 16:39:06 -0500 Subject: [PATCH 101/248] fix(crate): Reduce git concurrency to 1 for crates (#12718) Co-authored-by: Rhys Arkins --- lib/datasource/crate/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/datasource/crate/index.ts b/lib/datasource/crate/index.ts index 9eed05c056f34d..ef92d12700b253 100644 --- a/lib/datasource/crate/index.ts +++ b/lib/datasource/crate/index.ts @@ -216,7 +216,7 @@ export class CrateDatasource extends Datasource { `Cloning private cargo registry` ); - const git = Git(simpleGitConfig()); + const git = Git({ ...simpleGitConfig(), maxConcurrentProcesses: 1 }); const clonePromise = git.clone(registryUrl, clonePath, { '--depth': 1, }); From d3eb6fedd7b0e7d60d22d5631ba2d1d81a452c8a Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 08:14:49 +0100 Subject: [PATCH 102/248] fix: cache handle nested err (#12730) --- lib/workers/repository/cache.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/workers/repository/cache.ts b/lib/workers/repository/cache.ts index 47b9f83928018e..5ef775c4a1ace9 100644 --- a/lib/workers/repository/cache.ts +++ b/lib/workers/repository/cache.ts @@ -75,7 +75,8 @@ async function generateBranchCache(branch: BranchConfig): Promise { isModified, upgrades, }; - } catch (err) { + } catch (error) { + const err = error.err || error; // external host error nests err const errCodes = [401, 404]; // istanbul ignore if if (errCodes.includes(err.response?.statusCode)) { From baaea717289c7de5e84e94dea6d2b0fa9f6dd33d Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Thu, 18 Nov 2021 10:45:17 +0100 Subject: [PATCH 103/248] fix(config/preset): readd subpreset support (#12733) --- docs/development/shareable-configs.md | 60 ++++++++++++++------------- docs/usage/config-presets.md | 18 ++++---- lib/config/presets/index.spec.ts | 36 ++++++++++++++-- lib/config/presets/index.ts | 12 ++---- 4 files changed, 79 insertions(+), 47 deletions(-) diff --git a/docs/development/shareable-configs.md b/docs/development/shareable-configs.md index 1add3fc2f1f00a..3f665feac1a548 100644 --- a/docs/development/shareable-configs.md +++ b/docs/development/shareable-configs.md @@ -54,40 +54,44 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c #### GitHub -| name | example use | preset | resolves as | filename | Git tag | -| ------------------------------------------- | ------------------------------- | --------- | ---------------------------- | --------------- | -------------- | -| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch | -| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch | -| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` | -| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` | -| GitHub with preset name and path with a tag | `github>abc/foo:path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| name | example use | preset | resolves as | filename | Git tag | +| ------------------------------------------- | -------------------------------- | --------- | ---------------------------- | --------------- | -------------- | +| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch | +| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch | +| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` | +| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` | +| GitHub with preset name and path with a tag | `github>abc/foo//path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| GitHub with subpreset name and tag | `github>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` | #### GitLab -| name | example use | preset | resolves as | filename | Git tag | -| ------------------------------------------- | ------------------------------- | --------- | ---------------------------- | --------------- | -------------- | -| GitLab default | `gitlab>abc/foo` | `default` | `https://gitlab.com/abc/foo` | `default.json` | Default branch | -| GitLab with preset name | `gitlab>abc/foo:xyz` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | Default branch | -| GitLab default with a tag | `gitlab>abc/foo#1.5.4` | `default` | `https://gitlab.com/abc/foo` | `default.json` | `1.5.4` | -| GitLab with preset name with a tag | `gitlab>abc/foo:xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` | -| GitLab with preset name and path with a tag | `gitlab>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| name | example use | preset | resolves as | filename | Git tag | +| ------------------------------------------- | -------------------------------- | --------- | ---------------------------- | --------------- | -------------- | +| GitLab default | `gitlab>abc/foo` | `default` | `https://gitlab.com/abc/foo` | `default.json` | Default branch | +| GitLab with preset name | `gitlab>abc/foo:xyz` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | Default branch | +| GitLab default with a tag | `gitlab>abc/foo#1.5.4` | `default` | `https://gitlab.com/abc/foo` | `default.json` | `1.5.4` | +| GitLab with preset name with a tag | `gitlab>abc/foo:xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` | +| GitLab with preset name and path with a tag | `gitlab>abc/foo//path/xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| GitLab with subpreset name and tag | `gitlab>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` | #### Gitea -| name | example use | preset | resolves as | filename | Git tag | -| ------------------------------------------ | ------------------------------ | --------- | --------------------------- | --------------- | -------------- | -| Gitea default | `gitea>abc/foo` | `default` | `https://gitea.com/abc/foo` | `default.json` | Default branch | -| Gitea with preset name | `gitea>abc/foo:xyz` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | Default branch | -| Gitea default with a tag | `gitea>abc/foo#1.5.4` | `default` | `https://gitea.com/abc/foo` | `default.json` | `1.5.4` | -| Gitea with preset name with a tag | `gitea>abc/foo:xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` | -| Gitea with preset name and path with a tag | `gitea>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| name | example use | preset | resolves as | filename | Git tag | +| ------------------------------------------ | ------------------------------- | --------- | --------------------------- | --------------- | -------------- | +| Gitea default | `gitea>abc/foo` | `default` | `https://gitea.com/abc/foo` | `default.json` | Default branch | +| Gitea with preset name | `gitea>abc/foo:xyz` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | Default branch | +| Gitea default with a tag | `gitea>abc/foo#1.5.4` | `default` | `https://gitea.com/abc/foo` | `default.json` | `1.5.4` | +| Gitea with preset name with a tag | `gitea>abc/foo:xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` | +| Gitea with preset name and path with a tag | `gitea>abc/foo//path/xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| Gitea with subpreset name and tag | `gitea>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` | #### Self-hosted Git -| name | example use | preset | resolves as | filename | Git tag | -| ------------------------------------------ | ------------------------------ | --------- | ------------------------------------ | --------------- | -------------- | -| Local default | `local>abc/foo` | `default` | `https://github.company.com/abc/foo` | `default.json` | Default branch | -| Local with preset path | `local>abc/foo:path/xyz` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | Default branch | -| Local default with a tag | `local>abc/foo#1.5.4` | `default` | `https://github.company.com/abc/foo` | `default.json` | `1.5.4` | -| Local with preset name with a tag | `local>abc/foo:xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` | -| Local with preset name and path with a tag | `local>abc/foo:path/xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| name | example use | preset | resolves as | filename | Git tag | +| ------------------------------------------ | ------------------------------- | --------- | ------------------------------------ | --------------- | -------------- | +| Local default | `local>abc/foo` | `default` | `https://github.company.com/abc/foo` | `default.json` | Default branch | +| Local with preset path | `local>abc/foo:path/xyz` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | Default branch | +| Local default with a tag | `local>abc/foo#1.5.4` | `default` | `https://github.company.com/abc/foo` | `default.json` | `1.5.4` | +| Local with preset name with a tag | `local>abc/foo:xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` | +| Local with preset name and path with a tag | `local>abc/foo//path/xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| Local with subpreset name and tag | `local>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` | diff --git a/docs/usage/config-presets.md b/docs/usage/config-presets.md index 3fa8da053fc23e..2d304497d7bbf7 100644 --- a/docs/usage/config-presets.md +++ b/docs/usage/config-presets.md @@ -45,13 +45,14 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c ### GitHub -| name | example use | preset | resolves as | filename | Git tag | -| ------------------------------------------- | ------------------------------- | --------- | ---------------------------- | --------------- | -------------- | -| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch | -| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch | -| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` | -| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` | -| GitHub with preset name and path with a tag | `github>abc/foo:path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| name | example use | preset | resolves as | filename | Git tag | +| ------------------------------------------- | -------------------------------- | --------- | ---------------------------- | --------------- | -------------- | +| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch | +| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch | +| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` | +| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` | +| GitHub with preset name and path with a tag | `github>abc/foo//path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| GitHub with subpreset name and tag | `github>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` | ### GitLab @@ -62,6 +63,7 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c | GitLab default with a tag | `gitlab>abc/foo#1.5.4` | `default` | `https://gitlab.com/abc/foo` | `default.json` | `1.5.4` | | GitLab with preset name with a tag | `gitlab>abc/foo:xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` | | GitLab with preset name and path with a tag | `gitlab>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| GitLab with subpreset name and tag | `gitlab>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` | ### Gitea @@ -72,6 +74,7 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c | Gitea default with a tag | `gitea>abc/foo#1.5.4` | `default` | `https://gitea.com/abc/foo` | `default.json` | `1.5.4` | | Gitea with preset name with a tag | `gitea>abc/foo:xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` | | Gitea with preset name and path with a tag | `gitea>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| Gitea with subpreset name and tag | `gitea>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` | ### Self-hosted Git @@ -82,6 +85,7 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c | Local default with a tag | `local>abc/foo#1.5.4` | `default` | `https://github.company.com/abc/foo` | `default.json` | `1.5.4` | | Local with preset name with a tag | `local>abc/foo:xyz#1.5.4` | `xyz` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` | | Local with preset name and path with a tag | `local>abc/foo:path/xyz#1.5.4` | `xyz` | `https://github.company.com/abc/foo` | `path/xyz.json` | `1.5.4` | +| Local with subpreset name and tag | `local>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` | Note that you can't combine the path and sub-preset syntaxes. This means that anything in the form `provider>owner/repo//path/to/file:subsubpreset` is not supported. diff --git a/lib/config/presets/index.spec.ts b/lib/config/presets/index.spec.ts index 71563487ef8a29..523484bdfc839e 100644 --- a/lib/config/presets/index.spec.ts +++ b/lib/config/presets/index.spec.ts @@ -342,8 +342,8 @@ describe('config/presets/index', () => { ).toEqual({ packageName: 'some/repo', params: undefined, - presetName: 'somepreset', - presetPath: 'somefile', + presetName: 'somefile/somepreset', + presetPath: undefined, presetSource: 'github', }); }); @@ -355,8 +355,8 @@ describe('config/presets/index', () => { ).toEqual({ packageName: 'some/repo', params: undefined, - presetName: 'somesubpreset', - presetPath: 'somefile/somepreset', + presetName: 'somefile/somepreset/somesubpreset', + presetPath: undefined, presetSource: 'github', }); }); @@ -427,6 +427,34 @@ describe('config/presets/index', () => { presetSource: 'local', }); }); + it('parses local with sub preset and tag', () => { + expect( + presets.parsePreset( + 'local>some-group/some-repo:some-file/subpreset#1.2.3' + ) + ).toEqual({ + packageName: 'some-group/some-repo', + params: undefined, + presetName: 'some-file/subpreset', + presetPath: undefined, + presetSource: 'local', + packageTag: '1.2.3', + }); + }); + it('parses local with subdirectory and tag', () => { + expect( + presets.parsePreset( + 'local>some-group/some-repo//some-dir/some-file#1.2.3' + ) + ).toEqual({ + packageName: 'some-group/some-repo', + params: undefined, + presetName: 'some-file', + presetPath: 'some-dir', + presetSource: 'local', + packageTag: '1.2.3', + }); + }); it('parses no prefix as local', () => { expect(presets.parsePreset('some/repo')).toEqual({ packageName: 'some/repo', diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 16a39c1ac17941..4dc90acb3a3acd 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -40,7 +40,7 @@ const nonScopedPresetWithSubdirRegex = regEx( /^(?~?[\w\-./]+?)\/\/(?:(?[\w\-./]+)\/)?(?[\w\-.]+)(?:#(?[\w\-.]+?))?$/ ); const gitPresetRegex = regEx( - /^(?[\w\-. /]+)(?::(?[\w-./]+\/))?(?::?(?[\w\-.+]+))?(?:#(?[\w\-.]+?))?$/ + /^(?[\w\-. /]+)(?::(?[\w\-.+/]+))?(?:#(?[\w\-.]+?))?$/ ); export function replaceArgs( @@ -75,10 +75,10 @@ export function replaceArgs( export function parsePreset(input: string): ParsedPreset { let str = input; let presetSource: string; - let presetPath: string; + let presetPath: string | undefined; let packageName: string; let presetName: string; - let packageTag: string; + let packageTag: string | undefined; let params: string[]; if (str.startsWith('github>')) { presetSource = 'github'; @@ -159,13 +159,9 @@ export function parsePreset(input: string): ParsedPreset { ({ packageName, presetPath, presetName, packageTag } = nonScopedPresetWithSubdirRegex.exec(str)?.groups || {}); } else { - ({ packageName, presetPath, presetName, packageTag } = + ({ packageName, presetName, packageTag } = gitPresetRegex.exec(str)?.groups || {}); - if (is.nonEmptyString(presetPath) && presetPath.endsWith('/')) { - presetPath = presetPath.slice(0, -1); - } - if (presetSource === 'npm' && !packageName.startsWith('renovate-config-')) { packageName = `renovate-config-${packageName}`; } From e0c1d31bc9ca82a80350ab6d4480cdb762b15af3 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 12:41:31 +0100 Subject: [PATCH 104/248] fix(git): catch matches more than one Fixes #12734 --- lib/util/git/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index 938bf1f31b26bc..a79522eb5d74cc 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -109,6 +109,11 @@ function checkForPlatformFailure(err: Error): void { message: 'You need the Git `GenericContribute` permission to perform this action', }, + { + error: 'matches more than one', + message: + "Renovate cannot push branches if there are tags with names the same as Renovate's branches. Please remove conflicting tag names or change Renovate's branchPrefix to avoid conflicts.", + }, ]; for (const { error, message } of configErrorStrings) { if (err.message.includes(error)) { From 4c36af9d6ccf4c02ddbe6eec632805abccbcfebc Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 13:14:43 +0100 Subject: [PATCH 105/248] logs: downgrade helm lock file warn --- lib/manager/helmv3/artifacts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/manager/helmv3/artifacts.ts b/lib/manager/helmv3/artifacts.ts index 08194441f6ee4d..62506e4d14d71e 100644 --- a/lib/manager/helmv3/artifacts.ts +++ b/lib/manager/helmv3/artifacts.ts @@ -81,7 +81,7 @@ export async function updateArtifacts({ if (err.message === TEMPORARY_ERROR) { throw err; } - logger.warn({ err }, 'Failed to update Helm lock file'); + logger.debug({ err }, 'Failed to update Helm lock file'); return [ { artifactError: { From e095d5a9b3ea80bde71cfc6ca8b52f23ce529396 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 14:36:41 +0100 Subject: [PATCH 106/248] fix(git-refs): ignore refs/for (#12735) --- .../git-refs/__fixtures__/ls-remote-1.txt | 1 + lib/datasource/git-refs/index.spec.ts | 12 ++++++++++++ lib/datasource/git-refs/index.ts | 13 +++++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/datasource/git-refs/__fixtures__/ls-remote-1.txt b/lib/datasource/git-refs/__fixtures__/ls-remote-1.txt index 75a2d317e8ad4d..25b48574669fa0 100644 --- a/lib/datasource/git-refs/__fixtures__/ls-remote-1.txt +++ b/lib/datasource/git-refs/__fixtures__/ls-remote-1.txt @@ -1,4 +1,5 @@ a9920c014aebc28dc1b23e7efcc006d0455cc710 HEAD +46fd703d4738905cd55e1c5c36a70e5d43432b9c refs/for/master 2e24e927538bbc03cc3cd946834c8f5fe333f32c refs/heads/feat/slim-image a9920c014aebc28dc1b23e7efcc006d0455cc710 refs/heads/master a9920c014aebc28dc1b23e7efcc006d045512345 refs/heads/v1.0.0 diff --git a/lib/datasource/git-refs/index.spec.ts b/lib/datasource/git-refs/index.spec.ts index 56adb9d9a1c7e5..dd626c71835eba 100644 --- a/lib/datasource/git-refs/index.spec.ts +++ b/lib/datasource/git-refs/index.spec.ts @@ -91,6 +91,18 @@ describe('datasource/git-refs/index', () => { ); expect(digest).toMatchSnapshot(); }); + it('ignores refs/for/', async () => { + simpleGit.mockReturnValue({ + listRemote() { + return Promise.resolve(lsRemote1); + }, + }); + const digest = await new GitRefsDatasource().getDigest( + { lookupName: 'a tag to look up' }, + 'master' + ); + expect(digest).toBe('a9920c014aebc28dc1b23e7efcc006d0455cc710'); + }); it('returns digest for HEAD', async () => { simpleGit.mockReturnValue({ listRemote() { diff --git a/lib/datasource/git-refs/index.ts b/lib/datasource/git-refs/index.ts index 6567ece8ff47f6..81e14e933b74ef 100644 --- a/lib/datasource/git-refs/index.ts +++ b/lib/datasource/git-refs/index.ts @@ -61,8 +61,17 @@ export class GitRefsDatasource extends Datasource { { lookupName }, this.id ); - const findValue = newValue || 'HEAD'; - const ref = rawRefs.find((rawRef) => rawRef.value === findValue); + let ref: RawRefs; + if (newValue) { + ref = rawRefs.find( + (rawRef) => + ['heads', 'tags'].includes(rawRef.type) && rawRef.value === newValue + ); + } else { + ref = rawRefs.find( + (rawRef) => rawRef.type === '' && rawRef.value === 'HEAD' + ); + } if (ref) { return ref.hash; } From e7b841a138667a72b368d03d827a41c88174854d Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 15:36:05 +0100 Subject: [PATCH 107/248] feat: regex cache (#12738) Co-authored-by: Michael Kriese --- lib/util/regex.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/util/regex.ts b/lib/util/regex.ts index ac956bf18ce45b..fe3479c444b21a 100644 --- a/lib/util/regex.ts +++ b/lib/util/regex.ts @@ -5,6 +5,8 @@ import { logger } from '../logger'; let RegEx: RegExpConstructor; +const cache = new Map(); + try { // eslint-disable-next-line const RE2 = require('re2'); @@ -18,8 +20,16 @@ try { } export function regEx(pattern: string | RegExp, flags?: string): RegExp { + const key = `${pattern.toString()}:${flags}`; + + if (cache.has(key)) { + return cache.get(key); + } + try { - return new RegEx(pattern, flags); + const instance = new RegEx(pattern, flags); + cache.set(key, instance); + return instance; } catch (err) { const error = new Error(CONFIG_VALIDATION); error.validationSource = pattern.toString(); From 01acebd82d589f1d4e4e3d00557b102eb2d015de Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 15:50:53 +0100 Subject: [PATCH 108/248] fix(datasource): better massage github sourceUrl (#12737) --- .../__snapshots__/metadata.spec.ts.snap | 24 +++++++++++++++++++ lib/datasource/metadata.spec.ts | 22 +++++++++++++++++ lib/datasource/metadata.ts | 8 ++++++- 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/lib/datasource/__snapshots__/metadata.spec.ts.snap b/lib/datasource/__snapshots__/metadata.spec.ts.snap index d114fca01e395d..8c58352c4efc18 100644 --- a/lib/datasource/__snapshots__/metadata.spec.ts.snap +++ b/lib/datasource/__snapshots__/metadata.spec.ts.snap @@ -135,3 +135,27 @@ Object { "sourceUrl": "https://gitlab.com/meno/dropzone", } `; + +exports[`datasource/metadata Should massage github sourceUrls 1`] = ` +Object { + "releases": Array [ + Object { + "releaseTimestamp": "2018-07-13T10:14:17.000Z", + "version": "2.0.0", + }, + Object { + "releaseTimestamp": "2017-10-24T10:09:16.000Z", + "version": "2.0.0.dev1", + }, + Object { + "releaseTimestamp": "2019-01-20T19:59:28.000Z", + "version": "2.1.0", + }, + Object { + "releaseTimestamp": "2019-07-16T18:29:00.000Z", + "version": "2.2.0", + }, + ], + "sourceUrl": "https://github.com/some/repo", +} +`; diff --git a/lib/datasource/metadata.spec.ts b/lib/datasource/metadata.spec.ts index 71ff2932c4c2e4..81fceb357fe951 100644 --- a/lib/datasource/metadata.spec.ts +++ b/lib/datasource/metadata.spec.ts @@ -76,6 +76,28 @@ describe('datasource/metadata', () => { }); }); + it('Should massage github sourceUrls', () => { + const dep: ReleaseResult = { + sourceUrl: 'https://some.github.com/repo', + releases: [ + { version: '2.0.0', releaseTimestamp: '2018-07-13T10:14:17.000Z' }, + { + version: '2.0.0.dev1', + releaseTimestamp: '2017-10-24T10:09:16.000Z', + }, + { version: '2.1.0', releaseTimestamp: '2019-01-20T19:59:28.000Z' }, + { version: '2.2.0', releaseTimestamp: '2019-07-16T18:29:00.000Z' }, + ], + }; + const datasource = PypiDatasource.id; + const lookupName = 'django-filter'; + + addMetaData(dep, datasource, lookupName); + expect(dep).toMatchSnapshot({ + sourceUrl: 'https://github.com/some/repo', + }); + }); + it('Should handle parsing of sourceUrls correctly for GitLab also', () => { const dep: ReleaseResult = { sourceUrl: 'https://gitlab.com/meno/dropzone/tree/master', diff --git a/lib/datasource/metadata.ts b/lib/datasource/metadata.ts index 95b611da71d0c8..d9685047d49807 100644 --- a/lib/datasource/metadata.ts +++ b/lib/datasource/metadata.ts @@ -107,10 +107,16 @@ const manualSourceUrls = { }, }; +const githubPages = regEx('^https://([^.]+).github.com/([^/]+)$'); +const gitPrefix = regEx('^git:/?/?'); + function massageGithubUrl(url: string): string { return url .replace('http:', 'https:') - .replace(regEx(/^git:\/?\/?/), 'https://') + .replace('http+git:', 'https:') + .replace('https+git:', 'https:') + .replace(gitPrefix, 'https://') + .replace(githubPages, 'https://github.com/$1/$2') .replace('www.github.com', 'github.com') .split('/') .slice(0, 5) From 693963d9e14bb8a30b4cd6cc2580c982913e0ac1 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 16:23:13 +0100 Subject: [PATCH 109/248] fix: catch prune branch error --- lib/workers/repository/finalise/prune.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/workers/repository/finalise/prune.ts b/lib/workers/repository/finalise/prune.ts index 8d2577a6c7f209..94cc51609d690d 100644 --- a/lib/workers/repository/finalise/prune.ts +++ b/lib/workers/repository/finalise/prune.ts @@ -69,7 +69,11 @@ async function cleanUpBranches( await deleteBranch(branchName); } } catch (err) /* istanbul ignore next */ { - if (err.message?.includes("bad revision 'origin/")) { + if (err.message === 'config-validation') { + logger.debug( + 'Cannot prune branch due to collision between tags and branch names' + ); + } else if (err.message?.includes("bad revision 'origin/")) { logger.debug( { branchName }, 'Branch not found on origin when attempting to prune' From cfc4c48a4799b03a72bb29c18c43c2999676c1f0 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 16:47:17 +0100 Subject: [PATCH 110/248] fix(github): handle secondary rate limit (#12741) --- lib/util/http/github.spec.ts | 8 ++++++++ lib/util/http/github.ts | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/lib/util/http/github.spec.ts b/lib/util/http/github.spec.ts index 67fc7e5a2c60bf..9f9340264c4614 100644 --- a/lib/util/http/github.spec.ts +++ b/lib/util/http/github.spec.ts @@ -192,6 +192,14 @@ describe('util/http/github', () => { }) ).rejects.toThrow(PLATFORM_RATE_LIMIT_EXCEEDED); }); + it('should throw secondary rate limit exceeded', async () => { + await expect( + fail(403, { + message: + 'You have exceeded a secondary rate limit and have been temporarily blocked from content creation. Please retry your request again later.', + }) + ).rejects.toThrow(PLATFORM_RATE_LIMIT_EXCEEDED); + }); it('should throw Bad credentials', async () => { await expect( fail(401, { message: 'Bad credentials. (401)' }) diff --git a/lib/util/http/github.ts b/lib/util/http/github.ts index c181dcb6f10f06..a96fad6973222c 100644 --- a/lib/util/http/github.ts +++ b/lib/util/http/github.ts @@ -78,6 +78,13 @@ function handleGotError( logger.debug({ err }, 'GitHub failure: abuse detection'); throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED); } + if ( + err.statusCode === 403 && + message.startsWith('You have exceeded a secondary rate limit') + ) { + logger.debug({ err }, 'GitHub failure: secondary rate limit'); + throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED); + } if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) { logger.debug({ path }, 'Endpoint needs paid GitHub plan'); throw err; From 36e8a3ec9bbbc54c2e2948777c0ce53ccd766651 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 18 Nov 2021 18:32:44 +0100 Subject: [PATCH 111/248] fix(config): compare scopes lowercase (#12740) --- lib/config/decrypt.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/config/decrypt.ts b/lib/config/decrypt.ts index 86a51a435b78c7..547f7b47e7b400 100644 --- a/lib/config/decrypt.ts +++ b/lib/config/decrypt.ts @@ -99,7 +99,7 @@ export async function tryDecrypt( const orgName = org.replace(regEx(/\/$/), ''); // Strip trailing slash if (is.nonEmptyString(repo)) { const scopedRepository = `${orgName}/${repo}`; - if (scopedRepository === repository) { + if (scopedRepository.toLowerCase() === repository.toLowerCase()) { decryptedStr = value; } else { logger.debug( @@ -107,12 +107,14 @@ export async function tryDecrypt( 'Secret is scoped to a different repository' ); const error = new Error('config-validation'); - error.validationError = `Encrypted secret is scoped to a different repository: ${scopedRepository}.`; + error.validationError = `Encrypted secret is scoped to a different repository: "${scopedRepository}".`; throw error; } } else { const scopedOrg = `${orgName}/`; - if (repository.startsWith(scopedOrg)) { + if ( + repository.toLowerCase().startsWith(scopedOrg.toLowerCase()) + ) { decryptedStr = value; } else { logger.debug( @@ -120,7 +122,7 @@ export async function tryDecrypt( 'Secret is scoped to a different org' ); const error = new Error('config-validation'); - error.validationError = `Encrypted secret is scoped to a different org" ${scopedOrg}.`; + error.validationError = `Encrypted secret is scoped to a different org: "${scopedOrg}".`; throw error; } } From 789caadbb49e232ef74f59f5c41c1a6fbffee5c0 Mon Sep 17 00:00:00 2001 From: Jamie Magee Date: Thu, 18 Nov 2021 11:55:21 -0800 Subject: [PATCH 112/248] refactor(jenkins-plugins): convert to class-based datasource (#12702) --- lib/datasource/api.ts | 4 +- lib/datasource/jenkins-plugins/common.ts | 1 - lib/datasource/jenkins-plugins/get.ts | 176 ------------------- lib/datasource/jenkins-plugins/index.spec.ts | 30 +--- lib/datasource/jenkins-plugins/index.ts | 107 ++++++++++- lib/datasource/jenkins-plugins/types.ts | 13 -- lib/manager/jenkins/extract.ts | 4 +- tsconfig.strict.json | 1 - 8 files changed, 109 insertions(+), 227 deletions(-) delete mode 100644 lib/datasource/jenkins-plugins/common.ts delete mode 100644 lib/datasource/jenkins-plugins/get.ts diff --git a/lib/datasource/api.ts b/lib/datasource/api.ts index d7619f3ac6c2ec..89b88645fc0249 100644 --- a/lib/datasource/api.ts +++ b/lib/datasource/api.ts @@ -19,7 +19,7 @@ import * as go from './go'; import { GradleVersionDatasource } from './gradle-version'; import { HelmDatasource } from './helm'; import { HexDatasource } from './hex'; -import * as jenkinsPlugins from './jenkins-plugins'; +import { JenkinsPluginsDatasource } from './jenkins-plugins'; import * as maven from './maven'; import { NodeDatasource } from './node'; import * as npm from './npm'; @@ -61,7 +61,7 @@ api.set('go', go); api.set('gradle-version', new GradleVersionDatasource()); api.set('helm', new HelmDatasource()); api.set('hex', new HexDatasource()); -api.set('jenkins-plugins', jenkinsPlugins); +api.set('jenkins-plugins', new JenkinsPluginsDatasource()); api.set('maven', maven); api.set('npm', npm); api.set(NodeDatasource.id, new NodeDatasource()); diff --git a/lib/datasource/jenkins-plugins/common.ts b/lib/datasource/jenkins-plugins/common.ts deleted file mode 100644 index 22acbbb5ab896d..00000000000000 --- a/lib/datasource/jenkins-plugins/common.ts +++ /dev/null @@ -1 +0,0 @@ -export const id = 'jenkins-plugins'; diff --git a/lib/datasource/jenkins-plugins/get.ts b/lib/datasource/jenkins-plugins/get.ts deleted file mode 100644 index a80c96ef2c32a7..00000000000000 --- a/lib/datasource/jenkins-plugins/get.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { logger } from '../../logger'; -import { ExternalHostError } from '../../types/errors/external-host-error'; -import { clone } from '../../util/clone'; -import { getElapsedMinutes } from '../../util/date'; -import { Http } from '../../util/http'; -import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; -import { id } from './common'; -import type { - JenkinsCache, - JenkinsCacheTypes, - JenkinsPluginsInfoResponse, - JenkinsPluginsVersionsResponse, -} from './types'; - -const http = new Http(id); - -const packageInfoUrl = - 'https://updates.jenkins.io/current/update-center.actual.json'; -const packageVersionsUrl = - 'https://updates.jenkins.io/current/plugin-versions.json'; - -function hasCacheExpired(cache: JenkinsCache): boolean { - return getElapsedMinutes(cache.lastSync) >= cache.cacheTimeMin; -} - -async function updateJenkinsCache( - cache: JenkinsCache, - updateHandler: () => Promise -): Promise { - if (hasCacheExpired(cache)) { - cache.updatePromise = - // eslint-disable-next-line @typescript-eslint/no-misused-promises - cache.updatePromise || updateHandler(); - await cache.updatePromise; - - cache.updatePromise = null; - } -} - -function updateJenkinsPluginInfoCacheCallback( - response: JenkinsPluginsInfoResponse, - cache: JenkinsCache -): void { - for (const name of Object.keys(response.plugins || [])) { - cache.cache[name] = { - releases: [], // releases are stored in another cache - sourceUrl: response.plugins[name]?.scm, - }; - } -} - -function updateJenkinsPluginVersionsCacheCallback( - response: JenkinsPluginsVersionsResponse, - cache: JenkinsCache -): void { - const plugins = response.plugins; - for (const name of Object.keys(plugins || [])) { - cache.cache[name] = Object.keys(plugins[name]).map((version) => ({ - version, - downloadUrl: plugins[name][version]?.url, - releaseTimestamp: plugins[name][version]?.buildDate - ? new Date(plugins[name][version].buildDate + ' UTC') - : null, - })); - } -} - -async function getJenkinsUpdateCenterResponse( - cache: JenkinsCache -): Promise { - let response: T; - - const options = { - headers: { - 'Accept-Encoding': 'gzip, deflate, br', - }, - }; - - try { - logger.debug(`jenkins-plugins: Fetching Jenkins plugins ${cache.name}`); - const startTime = Date.now(); - response = (await http.getJson(cache.dataUrl, options)).body; - const durationMs = Math.round(Date.now() - startTime); - logger.debug( - { durationMs }, - `jenkins-plugins: Fetched Jenkins plugins ${cache.name}` - ); - } catch (err) /* istanbul ignore next */ { - cache.cache = Object.create(null); - throw new ExternalHostError( - new Error(`jenkins-plugins: Fetch plugins ${cache.name} error`) - ); - } - - return response; -} - -async function updateJenkinsPluginCache( - cache: JenkinsCache, - - callback: (resp: T, cache: JenkinsCache) => void -): Promise { - const response = await getJenkinsUpdateCenterResponse(cache); - if (response) { - callback(response, cache); - } - cache.lastSync = new Date(); -} - -const pluginInfoCache: JenkinsCache = { - name: 'info', - dataUrl: packageInfoUrl, - lastSync: new Date('2000-01-01'), - cacheTimeMin: 1440, - cache: Object.create(null), -}; - -const pluginVersionsCache: JenkinsCache = { - name: 'versions', - dataUrl: packageVersionsUrl, - lastSync: new Date('2000-01-01'), - cacheTimeMin: 60, - cache: Object.create(null), -}; - -async function updateJenkinsPluginInfoCache(): Promise { - await updateJenkinsPluginCache( - pluginInfoCache, - updateJenkinsPluginInfoCacheCallback - ); -} - -async function updateJenkinsPluginVersionsCache(): Promise { - await updateJenkinsPluginCache( - pluginVersionsCache, - updateJenkinsPluginVersionsCacheCallback - ); -} - -export async function getJenkinsPluginDependency( - lookupName: string -): Promise { - logger.debug(`getJenkinsDependency(${lookupName})`); - await updateJenkinsCache(pluginInfoCache, updateJenkinsPluginInfoCache); - await updateJenkinsCache( - pluginVersionsCache, - updateJenkinsPluginVersionsCache - ); - - const plugin = pluginInfoCache.cache[lookupName]; - if (!plugin) { - return null; - } - - const result = clone(plugin); - const releases = pluginVersionsCache.cache[lookupName]; - result.releases = releases ? clone(releases) : []; - return result; -} - -export function getReleases({ - lookupName, -}: GetReleasesConfig): Promise { - return getJenkinsPluginDependency(lookupName); -} - -function resetJenkinsCache(cache: JenkinsCache): void { - cache.lastSync = new Date('2000-01-01'); - cache.cache = Object.create(null); -} - -// Note: use only for tests -export function resetCache(): void { - resetJenkinsCache(pluginInfoCache); - resetJenkinsCache(pluginVersionsCache); -} diff --git a/lib/datasource/jenkins-plugins/index.spec.ts b/lib/datasource/jenkins-plugins/index.spec.ts index 9057c644389015..429bc6d4402282 100644 --- a/lib/datasource/jenkins-plugins/index.spec.ts +++ b/lib/datasource/jenkins-plugins/index.spec.ts @@ -2,34 +2,24 @@ import { getPkgReleases } from '..'; import * as httpMock from '../../../test/http-mock'; import { loadJsonFixture } from '../../../test/util'; import * as versioning from '../../versioning/docker'; -import { resetCache } from './get'; -import * as jenkins from '.'; +import { JenkinsPluginsDatasource } from '.'; const jenkinsPluginsVersions = loadJsonFixture('plugin-versions.json'); const jenkinsPluginsInfo = loadJsonFixture('update-center.actual.json'); describe('datasource/jenkins-plugins/index', () => { describe('getReleases', () => { - const SKIP_CACHE = process.env.RENOVATE_SKIP_CACHE; - const params = { versioning: versioning.id, - datasource: jenkins.id, + datasource: JenkinsPluginsDatasource.id, depName: 'email-ext', registryUrls: ['https://updates.jenkins.io/'], }; - beforeEach(() => { - resetCache(); - process.env.RENOVATE_SKIP_CACHE = 'true'; - jest.resetAllMocks(); - }); - afterEach(() => { if (!httpMock.allUsed()) { throw new Error('Not all http mocks have been used!'); } - process.env.RENOVATE_SKIP_CACHE = SKIP_CACHE; }); it('returns null for a package miss', async () => { @@ -41,11 +31,6 @@ describe('datasource/jenkins-plugins/index', () => { .get('/current/update-center.actual.json') .reply(200, jenkinsPluginsInfo); - httpMock - .scope('https://updates.jenkins.io') - .get('/current/plugin-versions.json') - .reply(200, jenkinsPluginsVersions); - expect(await getPkgReleases(newparams)).toBeNull(); }); @@ -60,7 +45,7 @@ describe('datasource/jenkins-plugins/index', () => { .get('/current/plugin-versions.json') .reply(200, jenkinsPluginsVersions); - let res = await getPkgReleases(params); + const res = await getPkgReleases(params); expect(res.releases).toHaveLength(75); expect(res).toMatchSnapshot(); @@ -74,10 +59,6 @@ describe('datasource/jenkins-plugins/index', () => { expect( res.releases.find((release) => release.version === '12.98') ).toBeUndefined(); - - // check that caching is working and no http requests are done after the first call to getPkgReleases - res = await getPkgReleases(params); - expect(res.releases).toHaveLength(75); }); it('returns package releases for a hit for info and miss for releases', async () => { @@ -106,11 +87,6 @@ describe('datasource/jenkins-plugins/index', () => { .get('/current/update-center.actual.json') .reply(200, '{}'); - httpMock - .scope('https://updates.jenkins.io') - .get('/current/plugin-versions.json') - .reply(200, '{}'); - expect(await getPkgReleases(params)).toBeNull(); }); }); diff --git a/lib/datasource/jenkins-plugins/index.ts b/lib/datasource/jenkins-plugins/index.ts index 5790e0e57ca2b4..dfafe85cb833b8 100644 --- a/lib/datasource/jenkins-plugins/index.ts +++ b/lib/datasource/jenkins-plugins/index.ts @@ -1,5 +1,102 @@ -export { id } from './common'; -export { getReleases } from './get'; -export const customRegistrySupport = true; -export const defaultRegistryUrls = ['https://updates.jenkins.io']; -export const registryStrategy = 'hunt'; +import { logger } from '../../logger'; +import { cache } from '../../util/cache/package/decorator'; +import { clone } from '../../util/clone'; +import { Datasource } from '../datasource'; +import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; +import type { + JenkinsPluginsInfoResponse, + JenkinsPluginsVersionsResponse, +} from './types'; + +export class JenkinsPluginsDatasource extends Datasource { + static readonly id = 'jenkins-plugins'; + + constructor() { + super(JenkinsPluginsDatasource.id); + } + + override readonly defaultRegistryUrls = ['https://updates.jenkins.io']; + + override readonly registryStrategy = 'hunt'; + + private static readonly packageInfoUrl = + 'https://updates.jenkins.io/current/update-center.actual.json'; + private static readonly packageVersionsUrl = + 'https://updates.jenkins.io/current/plugin-versions.json'; + + async getReleases({ + lookupName, + }: GetReleasesConfig): Promise { + const plugins = await this.getJenkinsPluginInfo(); + const plugin = plugins[lookupName]; + if (!plugin) { + return null; + } + + const result = clone(plugin); + const versions = await this.getJenkinsPluginVersions(); + const releases = versions[lookupName]; + result.releases = releases ? clone(releases) : []; + return result; + } + + @cache({ + namespace: JenkinsPluginsDatasource.id, + key: 'info', + ttlMinutes: 1440, + }) + async getJenkinsPluginInfo(): Promise> { + const { plugins } = + await this.getJenkinsUpdateCenterResponse( + JenkinsPluginsDatasource.packageInfoUrl + ); + + const info: Record = {}; + for (const name of Object.keys(plugins ?? [])) { + info[name] = { + releases: [], // releases + sourceUrl: plugins[name]?.scm, + }; + } + return info; + } + + @cache({ namespace: JenkinsPluginsDatasource.id, key: 'versions' }) + async getJenkinsPluginVersions(): Promise> { + const { plugins } = + await this.getJenkinsUpdateCenterResponse( + JenkinsPluginsDatasource.packageVersionsUrl + ); + + const versions: Record = {}; + for (const name of Object.keys(plugins ?? [])) { + versions[name] = Object.keys(plugins[name]).map((version) => ({ + version, + downloadUrl: plugins[name][version]?.url, + releaseTimestamp: plugins[name][version]?.buildDate + ? new Date(`${plugins[name][version].buildDate} UTC`) + : null, + })); + } + return versions; + } + + private async getJenkinsUpdateCenterResponse(url: string): Promise { + let response: T; + + try { + logger.debug(`jenkins-plugins: Fetching Jenkins plugins from ${url}`); + const startTime = Date.now(); + response = (await this.http.getJson(url)).body; + const durationMs = Math.round(Date.now() - startTime); + logger.debug( + { durationMs }, + `jenkins-plugins: Fetched Jenkins plugins from ${url}` + ); + } catch (err) /* istanbul ignore next */ { + this.handleGenericErrors(err); + } + + return response; + } +} diff --git a/lib/datasource/jenkins-plugins/types.ts b/lib/datasource/jenkins-plugins/types.ts index 6c67a9bca14b95..16e730a3094689 100644 --- a/lib/datasource/jenkins-plugins/types.ts +++ b/lib/datasource/jenkins-plugins/types.ts @@ -1,16 +1,3 @@ -import type { Release, ReleaseResult } from '../types'; - -export type JenkinsCacheTypes = ReleaseResult | Release[]; - -export interface JenkinsCache { - name: string; - dataUrl: string; - lastSync: Date; - cacheTimeMin: number; - cache: Record; - updatePromise?: Promise | undefined; -} - export interface JenkinsPluginInfo { name: string; scm?: string; diff --git a/lib/manager/jenkins/extract.ts b/lib/manager/jenkins/extract.ts index c5e9d013eb21cc..3dcc58b0ce5a33 100644 --- a/lib/manager/jenkins/extract.ts +++ b/lib/manager/jenkins/extract.ts @@ -1,5 +1,5 @@ import { load } from 'js-yaml'; -import * as datasourceJenkins from '../../datasource/jenkins-plugins'; +import { JenkinsPluginsDatasource } from '../../datasource/jenkins-plugins'; import { logger } from '../../logger'; import { SkipReason } from '../../types'; import { isSkipComment } from '../../util/ignore'; @@ -12,7 +12,7 @@ const YamlExtension = regEx(/\.ya?ml$/); function getDependency(plugin: JenkinsPlugin): PackageDependency { const dep: PackageDependency = { - datasource: datasourceJenkins.id, + datasource: JenkinsPluginsDatasource.id, versioning: dockerVersioning.id, depName: plugin.artifactId, }; diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 50bda127480777..dbadb581e39e05 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -31,7 +31,6 @@ "./lib/datasource/gitlab-tags/types.ts", "./lib/datasource/gradle-version/types.ts", "./lib/datasource/hex/types.ts", - "./lib/datasource/jenkins-plugins/common.ts", "./lib/datasource/maven/common.ts", "./lib/datasource/node/common.ts", "./lib/datasource/node/types.ts", From be6da35e850efc8238e7f491fc1a7710cdf82934 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Nov 2021 09:15:24 +0000 Subject: [PATCH 113/248] chore(deps): update dependency nock to v13.2.1 (#12751) 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 55524431e36b8b..bf3ffe2d22e496 100644 --- a/package.json +++ b/package.json @@ -268,7 +268,7 @@ "markdownlint-cli2": "0.3.2", "mock-fs": "5.1.2", "mockdate": "3.0.5", - "nock": "13.2.0", + "nock": "13.2.1", "npm-run-all": "4.1.5", "prettier": "2.4.1", "pretty-quick": "3.1.1", diff --git a/yarn.lock b/yarn.lock index 179bd0e852201d..5afa63b00e4f07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6743,10 +6743,10 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nock@13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/nock/-/nock-13.2.0.tgz#1da976e809cb082e3acb65de9ea7839cdd115d3e" - integrity sha512-j7xjoMU9ZnvkTeoLnD2gIXNlwmLb+GNCPbnqtx7IwlNvdBBqU5aaQPK4Nw6lNmqIJkBubyka6rvrZuDNz1L7Ew== +nock@13.2.1: + version "13.2.1" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.2.1.tgz#fcf5bdb9bb9f0554a84c25d3333166c0ffd80858" + integrity sha512-CoHAabbqq/xZEknubuyQMjq6Lfi5b7RtK6SoNK6m40lebGp3yiMagWtIoYaw2s9sISD7wPuCfwFpivVHX/35RA== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" From 2ae52b3bd9bb2ab76a418c70199777258a8de1b0 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 19 Nov 2021 10:40:29 +0100 Subject: [PATCH 114/248] logs: remove warn interpolation --- lib/util/exec/docker/index.ts | 5 ++++- lib/versioning/pep440/range.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index 50ca989205ca8e..25646de2394015 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -76,7 +76,10 @@ export async function getDockerTag( const ver = versioning.get(scheme); if (!ver.isValid(constraint)) { - logger.warn({ constraint }, `Invalid ${scheme} version constraint`); + logger.warn( + { scheme, constraint }, + `Invalid Docker image version constraint` + ); return 'latest'; } diff --git a/lib/versioning/pep440/range.ts b/lib/versioning/pep440/range.ts index 9e7785a9e09c85..53e00980fbc833 100644 --- a/lib/versioning/pep440/range.ts +++ b/lib/versioning/pep440/range.ts @@ -80,7 +80,10 @@ export function getNewValue({ } if (ranges.some((range) => range.operator === '===')) { // the operator "===" is used for legacy non PEP440 versions - logger.warn('Arbitrary equality not supported: ' + currentValue); + logger.warn( + { currentValue }, + 'PEP440 arbitrary equality (===) not supported' + ); return null; } let result = ranges From df14edd27a1de0749e2365677a5fb42893bd5ab4 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 19 Nov 2021 10:44:27 +0100 Subject: [PATCH 115/248] fix(automerge): catch branch automerge behind message --- lib/workers/branch/automerge.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/workers/branch/automerge.ts b/lib/workers/branch/automerge.ts index 8ae312e8ffd7b4..fd4f82b3508db8 100644 --- a/lib/workers/branch/automerge.ts +++ b/lib/workers/branch/automerge.ts @@ -47,9 +47,13 @@ export async function tryBranchAutomerge( } if ( err.message.includes('refusing to merge unrelated histories') || - err.message.includes('Not possible to fast-forward') + err.message.includes('Not possible to fast-forward') || + err.message.includes( + 'Updates were rejected because the tip of your current branch is behind' + ) ) { - logger.warn({ err }, 'Branch is not up to date - cannot automerge'); + logger.debug({ err }, 'Branch automerge error'); + logger.info('Branch is not up to date - cannot automerge'); return 'stale'; } if (err.message.includes('Protected branch')) { From af4b426f7300746e3c6bd2811770fe9ee34169d8 Mon Sep 17 00:00:00 2001 From: markussiebert Date: Fri, 19 Nov 2021 10:59:06 +0100 Subject: [PATCH 116/248] feat: aws-machine-image datasource (#11869) --- lib/datasource/api.ts | 2 + .../__snapshots__/index.spec.ts.snap | 628 +++++ .../aws-machine-image/index.spec.ts | 296 +++ lib/datasource/aws-machine-image/index.ts | 114 + lib/datasource/aws-machine-image/readme.md | 113 + lib/versioning/api.ts | 2 + .../aws-machine-image/index.spec.ts | 50 + lib/versioning/aws-machine-image/index.ts | 44 + lib/versioning/aws-machine-image/readme.md | 3 + package.json | 6 +- yarn.lock | 2076 ++++++++++++++--- 11 files changed, 3002 insertions(+), 332 deletions(-) create mode 100644 lib/datasource/aws-machine-image/__snapshots__/index.spec.ts.snap create mode 100644 lib/datasource/aws-machine-image/index.spec.ts create mode 100644 lib/datasource/aws-machine-image/index.ts create mode 100644 lib/datasource/aws-machine-image/readme.md create mode 100644 lib/versioning/aws-machine-image/index.spec.ts create mode 100644 lib/versioning/aws-machine-image/index.ts create mode 100644 lib/versioning/aws-machine-image/readme.md diff --git a/lib/datasource/api.ts b/lib/datasource/api.ts index 89b88645fc0249..8b2f7004dbaa94 100644 --- a/lib/datasource/api.ts +++ b/lib/datasource/api.ts @@ -1,5 +1,6 @@ import { AdoptiumJavaDatasource } from './adoptium-java'; import { ArtifactoryDatasource } from './artifactory'; +import { AwsMachineImageDataSource } from './aws-machine-image'; import { BitBucketTagsDatasource } from './bitbucket-tags'; import { CdnJsDatasource } from './cdnjs'; import { ClojureDatasource } from './clojure'; @@ -42,6 +43,7 @@ export default api; api.set(AdoptiumJavaDatasource.id, new AdoptiumJavaDatasource()); api.set(ArtifactoryDatasource.id, new ArtifactoryDatasource()); +api.set(AwsMachineImageDataSource.id, new AwsMachineImageDataSource()); api.set('bitbucket-tags', new BitBucketTagsDatasource()); api.set('cdnjs', new CdnJsDatasource()); api.set('clojure', new ClojureDatasource()); diff --git a/lib/datasource/aws-machine-image/__snapshots__/index.spec.ts.snap b/lib/datasource/aws-machine-image/__snapshots__/index.spec.ts.snap new file mode 100644 index 00000000000000..72338b167d0f2b --- /dev/null +++ b/lib/datasource/aws-machine-image/__snapshots__/index.spec.ts.snap @@ -0,0 +1,628 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`datasource/aws-machine-image/index getSortedAwsMachineImages() with 1 returned image 1`] = ` +Array [ + Object { + "args": Array [ + DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "1image", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + ], + "callId": 1, + "callback": undefined, + "errorWithCallStack": [Error], + "exception": undefined, + "firstArg": DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "1image", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + "lastArg": DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "1image", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + "proxy": [Function], + "returnValue": Promise {}, + "thisValue": EC2Client { + "config": Object { + "apiVersion": "2016-11-15", + "base64Decoder": [Function], + "base64Encoder": [Function], + "bodyLengthChecker": [Function], + "credentialDefaultProvider": [Function], + "credentials": [Function], + "customUserAgent": undefined, + "defaultUserAgentProvider": [Function], + "disableHostPrefix": false, + "endpoint": [Function], + "isCustomEndpoint": false, + "logger": Object {}, + "maxAttempts": [Function], + "region": [Function], + "regionInfoProvider": [Function], + "requestHandler": NodeHttpHandler { + "connectionTimeout": undefined, + "httpAgent": Agent { + "_events": Object { + "free": [Function], + "newListener": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + "defaultPort": 80, + "freeSockets": Object {}, + "keepAlive": true, + "keepAliveMsecs": 1000, + "maxFreeSockets": 256, + "maxSockets": 50, + "maxTotalSockets": Infinity, + "options": Object { + "keepAlive": true, + "maxSockets": 50, + "path": null, + }, + "protocol": "http:", + "requests": Object {}, + "scheduling": "lifo", + "sockets": Object {}, + "totalSocketCount": 0, + Symbol(kCapture): false, + }, + "httpsAgent": Agent { + "_events": Object { + "free": [Function], + "newListener": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + "_sessionCache": Object { + "list": Array [], + "map": Object {}, + }, + "defaultPort": 443, + "freeSockets": Object {}, + "keepAlive": true, + "keepAliveMsecs": 1000, + "maxCachedSessions": 100, + "maxFreeSockets": 256, + "maxSockets": 50, + "maxTotalSockets": Infinity, + "options": Object { + "keepAlive": true, + "maxSockets": 50, + "path": null, + }, + "protocol": "https:", + "requests": Object {}, + "scheduling": "lifo", + "sockets": Object {}, + "totalSocketCount": 0, + Symbol(kCapture): false, + }, + "metadata": Object { + "handlerProtocol": "http/1.1", + }, + "socketTimeout": undefined, + }, + "retryMode": [Function], + "retryStrategy": [Function], + "runtime": "node", + "serviceId": "EC2", + "sha256": [Function], + "signer": [Function], + "signingEscapePath": true, + "streamCollector": [Function], + "systemClockOffset": 0, + "tls": true, + "urlParser": [Function], + "utf8Decoder": [Function], + "utf8Encoder": [Function], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + }, +] +`; + +exports[`datasource/aws-machine-image/index getSortedAwsMachineImages() with 3 returned images 1`] = ` +Array [ + Object { + "args": Array [ + DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "3images", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + ], + "callId": 0, + "callback": undefined, + "errorWithCallStack": [Error], + "exception": undefined, + "firstArg": DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "3images", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + "lastArg": DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "3images", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + "proxy": [Function], + "returnValue": Promise {}, + "thisValue": EC2Client { + "config": Object { + "apiVersion": "2016-11-15", + "base64Decoder": [Function], + "base64Encoder": [Function], + "bodyLengthChecker": [Function], + "credentialDefaultProvider": [Function], + "credentials": [Function], + "customUserAgent": undefined, + "defaultUserAgentProvider": [Function], + "disableHostPrefix": false, + "endpoint": [Function], + "isCustomEndpoint": false, + "logger": Object {}, + "maxAttempts": [Function], + "region": [Function], + "regionInfoProvider": [Function], + "requestHandler": NodeHttpHandler { + "connectionTimeout": undefined, + "httpAgent": Agent { + "_events": Object { + "free": [Function], + "newListener": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + "defaultPort": 80, + "freeSockets": Object {}, + "keepAlive": true, + "keepAliveMsecs": 1000, + "maxFreeSockets": 256, + "maxSockets": 50, + "maxTotalSockets": Infinity, + "options": Object { + "keepAlive": true, + "maxSockets": 50, + "path": null, + }, + "protocol": "http:", + "requests": Object {}, + "scheduling": "lifo", + "sockets": Object {}, + "totalSocketCount": 0, + Symbol(kCapture): false, + }, + "httpsAgent": Agent { + "_events": Object { + "free": [Function], + "newListener": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + "_sessionCache": Object { + "list": Array [], + "map": Object {}, + }, + "defaultPort": 443, + "freeSockets": Object {}, + "keepAlive": true, + "keepAliveMsecs": 1000, + "maxCachedSessions": 100, + "maxFreeSockets": 256, + "maxSockets": 50, + "maxTotalSockets": Infinity, + "options": Object { + "keepAlive": true, + "maxSockets": 50, + "path": null, + }, + "protocol": "https:", + "requests": Object {}, + "scheduling": "lifo", + "sockets": Object {}, + "totalSocketCount": 0, + Symbol(kCapture): false, + }, + "metadata": Object { + "handlerProtocol": "http/1.1", + }, + "socketTimeout": undefined, + }, + "retryMode": [Function], + "retryStrategy": [Function], + "runtime": "node", + "serviceId": "EC2", + "sha256": [Function], + "signer": [Function], + "signingEscapePath": true, + "streamCollector": [Function], + "systemClockOffset": 0, + "tls": true, + "urlParser": [Function], + "utf8Decoder": [Function], + "utf8Encoder": [Function], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + }, +] +`; + +exports[`datasource/aws-machine-image/index getSortedAwsMachineImages() without returned images 1`] = ` +Array [ + Object { + "args": Array [ + DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "noiamge", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + ], + "callId": 2, + "callback": undefined, + "errorWithCallStack": [Error], + "exception": undefined, + "firstArg": DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "noiamge", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + "lastArg": DescribeImagesCommand { + "input": Object { + "Filters": Array [ + Object { + "Name": "owner-id", + "Values": Array [ + "602401143452", + ], + }, + Object { + "Name": "name", + "Values": Array [ + "noiamge", + ], + }, + ], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + "proxy": [Function], + "returnValue": Promise {}, + "thisValue": EC2Client { + "config": Object { + "apiVersion": "2016-11-15", + "base64Decoder": [Function], + "base64Encoder": [Function], + "bodyLengthChecker": [Function], + "credentialDefaultProvider": [Function], + "credentials": [Function], + "customUserAgent": undefined, + "defaultUserAgentProvider": [Function], + "disableHostPrefix": false, + "endpoint": [Function], + "isCustomEndpoint": false, + "logger": Object {}, + "maxAttempts": [Function], + "region": [Function], + "regionInfoProvider": [Function], + "requestHandler": NodeHttpHandler { + "connectionTimeout": undefined, + "httpAgent": Agent { + "_events": Object { + "free": [Function], + "newListener": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + "defaultPort": 80, + "freeSockets": Object {}, + "keepAlive": true, + "keepAliveMsecs": 1000, + "maxFreeSockets": 256, + "maxSockets": 50, + "maxTotalSockets": Infinity, + "options": Object { + "keepAlive": true, + "maxSockets": 50, + "path": null, + }, + "protocol": "http:", + "requests": Object {}, + "scheduling": "lifo", + "sockets": Object {}, + "totalSocketCount": 0, + Symbol(kCapture): false, + }, + "httpsAgent": Agent { + "_events": Object { + "free": [Function], + "newListener": [Function], + }, + "_eventsCount": 2, + "_maxListeners": undefined, + "_sessionCache": Object { + "list": Array [], + "map": Object {}, + }, + "defaultPort": 443, + "freeSockets": Object {}, + "keepAlive": true, + "keepAliveMsecs": 1000, + "maxCachedSessions": 100, + "maxFreeSockets": 256, + "maxSockets": 50, + "maxTotalSockets": Infinity, + "options": Object { + "keepAlive": true, + "maxSockets": 50, + "path": null, + }, + "protocol": "https:", + "requests": Object {}, + "scheduling": "lifo", + "sockets": Object {}, + "totalSocketCount": 0, + Symbol(kCapture): false, + }, + "metadata": Object { + "handlerProtocol": "http/1.1", + }, + "socketTimeout": undefined, + }, + "retryMode": [Function], + "retryStrategy": [Function], + "runtime": "node", + "serviceId": "EC2", + "sha256": [Function], + "signer": [Function], + "signingEscapePath": true, + "streamCollector": [Function], + "systemClockOffset": 0, + "tls": true, + "urlParser": [Function], + "utf8Decoder": [Function], + "utf8Encoder": [Function], + }, + "middlewareStack": Object { + "add": [Function], + "addRelativeTo": [Function], + "applyToStack": [Function], + "clone": [Function], + "concat": [Function], + "remove": [Function], + "removeByTag": [Function], + "resolve": [Function], + "use": [Function], + }, + }, + }, +] +`; diff --git a/lib/datasource/aws-machine-image/index.spec.ts b/lib/datasource/aws-machine-image/index.spec.ts new file mode 100644 index 00000000000000..419f4b318a1376 --- /dev/null +++ b/lib/datasource/aws-machine-image/index.spec.ts @@ -0,0 +1,296 @@ +import { + DescribeImagesCommand, + DescribeImagesResult, + EC2Client, + Image, +} from '@aws-sdk/client-ec2'; +import { mockClient } from 'aws-sdk-client-mock'; +import { getDigest, getPkgReleases } from '..'; +import { AwsMachineImageDataSource } from '.'; + +const datasource = AwsMachineImageDataSource.id; +const ec2Mock = mockClient(EC2Client); + +/** + * Testdata for mock implementation of EC2Client + * image1 to image3 from oldest to newest image + */ +const image1: Image = { + Architecture: 'x86_64', + CreationDate: '2021-08-13T17:47:12.000Z', + ImageId: 'ami-02ce3d9008cab69cb', + ImageLocation: 'amazon/amazon-eks-node-1.21-v20210813', + ImageType: 'machine', + Public: true, + OwnerId: '602401143452', + PlatformDetails: 'Linux/UNIX', + UsageOperation: 'RunInstances', + State: 'available', + BlockDeviceMappings: [ + { + DeviceName: '/dev/xvda', + Ebs: { + DeleteOnTermination: true, + SnapshotId: 'snap-0546beb61976e8017', + VolumeSize: 20, + VolumeType: 'gp2', + Encrypted: false, + }, + }, + ], + Description: + 'EKS Kubernetes Worker AMI with AmazonLinux2 image, (k8s: 1.21.2, docker: 19.03.13ce-1.amzn2, containerd: 1.4.6-2.amzn2)', + EnaSupport: true, + Hypervisor: 'xen', + ImageOwnerAlias: 'amazon', + Name: 'amazon-eks-node-1.21-v20210813', + RootDeviceName: '/dev/xvda', + RootDeviceType: 'ebs', + SriovNetSupport: 'simple', + VirtualizationType: 'hvm', +}; + +const image2: Image = { + Architecture: 'x86_64', + CreationDate: '2021-08-26T19:31:41.000Z', + DeprecationTime: '2021-08-14T17:47:12.000Z', + ImageId: 'ami-020d418c09883b165', + ImageLocation: 'amazon/amazon-eks-node-1.21-v20210826', + ImageType: 'machine', + Public: true, + OwnerId: '602401143452', + PlatformDetails: 'Linux/UNIX', + UsageOperation: 'RunInstances', + State: 'available', + BlockDeviceMappings: [ + { + DeviceName: '/dev/xvda', + Ebs: { + DeleteOnTermination: true, + SnapshotId: 'snap-01ba16a8ec8087603', + VolumeSize: 20, + VolumeType: 'gp2', + Encrypted: false, + }, + }, + ], + Description: + 'EKS Kubernetes Worker AMI with AmazonLinux2 image, (k8s: 1.21.2, docker: 19.03.13ce-1.amzn2, containerd: 1.4.6-2.amzn2)', + EnaSupport: true, + Hypervisor: 'xen', + ImageOwnerAlias: 'amazon', + Name: 'amazon-eks-node-1.21-v20210826', + RootDeviceName: '/dev/xvda', + RootDeviceType: 'ebs', + SriovNetSupport: 'simple', + VirtualizationType: 'hvm', +}; + +const image3: Image = { + Architecture: 'x86_64', + CreationDate: '2021-09-14T22:00:24.000Z', + ImageId: 'ami-05f83986b0fe58ada', + ImageLocation: 'amazon/amazon-eks-node-1.21-v20210914', + ImageType: 'machine', + Public: true, + OwnerId: '602401143452', + PlatformDetails: 'Linux/UNIX', + UsageOperation: 'RunInstances', + State: 'available', + BlockDeviceMappings: [ + { + DeviceName: '/dev/xvda', + Ebs: { + DeleteOnTermination: true, + SnapshotId: 'snap-0c6f79c3983fd8e1a', + VolumeSize: 20, + VolumeType: 'gp2', + Encrypted: false, + }, + }, + ], + Description: + 'EKS Kubernetes Worker AMI with AmazonLinux2 image, (k8s: 1.21.2, docker: 19.03.13ce-1.amzn2, containerd: 1.4.6-2.amzn2)', + EnaSupport: true, + Hypervisor: 'xen', + ImageOwnerAlias: 'amazon', + Name: 'amazon-eks-node-1.21-v20210914', + RootDeviceName: '/dev/xvda', + RootDeviceType: 'ebs', + SriovNetSupport: 'simple', + VirtualizationType: 'hvm', +}; + +const mock3Images: DescribeImagesResult = { + Images: [image3, image1, image2], +}; + +const mock1Image: DescribeImagesResult = { + Images: [image3], +}; + +const mockEmpty: DescribeImagesResult = {}; + +describe('datasource/aws-machine-image/index', () => { + describe('getSortedAwsMachineImages()', () => { + it('with 3 returned images', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock3Images); + const ec2DataSource = new AwsMachineImageDataSource(); + const res = await ec2DataSource.getSortedAwsMachineImages( + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["3images"]}]' + ); + expect(res).toStrictEqual([image1, image2, image3]); + expect(ec2Mock.calls()).toMatchSnapshot(); + }); + it('with 1 returned image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock1Image); + const ec2DataSource = new AwsMachineImageDataSource(); + const res = await ec2DataSource.getSortedAwsMachineImages( + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["1image"]}]' + ); + expect(res).toStrictEqual([image3]); + expect(ec2Mock.calls()).toMatchSnapshot(); + }); + it('without returned images', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mockEmpty); + const ec2DataSource = new AwsMachineImageDataSource(); + const res = await ec2DataSource.getSortedAwsMachineImages( + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["noiamge"]}]' + ); + expect(res).toStrictEqual([]); + expect(ec2Mock.calls()).toMatchSnapshot(); + }); + }); + + describe('getDigest()', () => { + it('without newValue, without returned images to be null', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mockEmpty); + const res = await getDigest({ + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["without newValue, without returned images to be null"]}]', + }); + expect(res).toBeNull(); + }); + it('without newValue, with one matching image to return that image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock1Image); + const res = await getDigest({ + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["without newValue, with one matching image to return that image"]}]', + }); + expect(res).toStrictEqual(image3.Name); + }); + it('without newValue, with 3 matching image to return the newest image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock3Images); + const res = await getDigest({ + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["without newValue, with 3 matching image to return the newest image"]}]', + }); + expect(res).toStrictEqual(image3.Name); + }); + it('with matching newValue, with 3 matching image to return the matching image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock3Images); + const res = await getDigest( + { + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with matching newValue, with 3 matching image to return the matching image"]}]', + }, + image1.ImageId + ); + expect(res).toStrictEqual(image1.Name); + }); + it('with not matching newValue, with 3 matching images to return the matching image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock3Images); + const res = await getDigest( + { + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with not matching newValue, with 3 matching images to return the matching image"]}]', + }, + 'will never match' + ); + expect(res).toBeNull(); + }); + }); + + describe('getPkgReleases()', () => { + it('without returned images to be null', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mockEmpty); + const res = await getPkgReleases({ + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["without returned images to be null"]}]', + }); + expect(res).toBeNull(); + }); + it('with one matching image to return that image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock1Image); + const res = await getPkgReleases({ + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with one matching image to return that image"]}]', + }); + expect(res).toStrictEqual({ + releases: [ + { + isDeprecated: false, + newDigest: image3.Name, + releaseTimestamp: image3.CreationDate, + version: image3.ImageId, + }, + ], + }); + }); + it('with one deprecated matching image to return that image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves({ Images: [image2] }); + const res = await getPkgReleases({ + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with one deprecated matching image to return that image"]}]', + }); + expect(res).toStrictEqual({ + releases: [ + { + isDeprecated: true, + newDigest: image2.Name, + releaseTimestamp: image2.CreationDate, + version: image2.ImageId, + }, + ], + }); + }); + it('with 3 matching image to return the newest image', async () => { + ec2Mock.reset(); + ec2Mock.on(DescribeImagesCommand).resolves(mock3Images); + const res = await getPkgReleases({ + datasource, + depName: + '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with 3 matching image to return the newest image"]}]', + }); + expect(res).toStrictEqual({ + releases: [ + { + isDeprecated: false, + newDigest: image3.Name, + releaseTimestamp: image3.CreationDate, + version: image3.ImageId, + }, + ], + }); + }); + }); +}); diff --git a/lib/datasource/aws-machine-image/index.ts b/lib/datasource/aws-machine-image/index.ts new file mode 100644 index 00000000000000..4307b6154c27f4 --- /dev/null +++ b/lib/datasource/aws-machine-image/index.ts @@ -0,0 +1,114 @@ +import { DescribeImagesCommand, EC2Client, Image } from '@aws-sdk/client-ec2'; +import { cache } from '../../util/cache/package/decorator'; +import * as amazonMachineImageVersioning from '../../versioning/aws-machine-image'; +import { Datasource } from '../datasource'; +import type { GetReleasesConfig, ReleaseResult } from '../types'; + +export class AwsMachineImageDataSource extends Datasource { + static readonly id = 'aws-machine-image'; + + override readonly defaultVersioning = amazonMachineImageVersioning.id; + + override readonly caching = true; + + override readonly defaultConfig = { + // Because AMIs don't follow any versioning scheme, we override commitMessageExtra to remove the 'v' + commitMessageExtra: 'to {{{newVersion}}}', + prBodyColumns: ['Change', 'Image'], + prBodyDefinitions: { + Image: '```{{{newDigest}}}```', + }, + digest: { + // Because newDigestShort will allways be 'amazon-' we override to print the name of the AMI + commitMessageExtra: 'to {{{newDigest}}}', + prBodyColumns: ['Image'], + prBodyDefinitions: { + Image: '```{{{newDigest}}}```', + }, + }, + }; + + private readonly ec2: EC2Client; + + private readonly now: number; + + constructor() { + super(AwsMachineImageDataSource.id); + this.ec2 = new EC2Client({}); + this.now = Date.now(); + } + + @cache({ + namespace: `datasource-${AwsMachineImageDataSource.id}`, + key: (serializedAmiFilter: string) => + `getSortedAwsMachineImages:${serializedAmiFilter}`, + }) + async getSortedAwsMachineImages( + serializedAmiFilter: string + ): Promise { + const cmd = new DescribeImagesCommand({ + Filters: JSON.parse(serializedAmiFilter), + }); + const matchingImages = await this.ec2.send(cmd); + matchingImages.Images = matchingImages.Images ?? []; + return matchingImages.Images.sort( + (image1, image2) => + Date.parse(image1.CreationDate) - Date.parse(image2.CreationDate) + ); + } + + @cache({ + namespace: `datasource-${AwsMachineImageDataSource.id}`, + key: ({ registryUrl, lookupName }: GetReleasesConfig, newValue: string) => + `getDigest:${registryUrl}:${lookupName}:${newValue ?? ''}`, + }) + override async getDigest( + { lookupName: serializedAmiFilter }: GetReleasesConfig, + newValue?: string + ): Promise { + const images = await this.getSortedAwsMachineImages(serializedAmiFilter); + if (images.length < 1) { + return null; + } + + if (newValue) { + const newValueMatchingImages = images.filter( + (image) => image.ImageId === newValue + ); + if (newValueMatchingImages.length === 1) { + return newValueMatchingImages[0].Name; + } + return null; + } + + return (await this.getReleases({ lookupName: serializedAmiFilter })) + .releases[0].newDigest; + } + + @cache({ + namespace: `datasource-${AwsMachineImageDataSource.id}`, + key: ({ registryUrl, lookupName }: GetReleasesConfig) => + `getReleases:${registryUrl}:${lookupName}`, + }) + async getReleases({ + lookupName: serializedAmiFilter, + }: GetReleasesConfig): Promise { + const images = await this.getSortedAwsMachineImages(serializedAmiFilter); + if (images.length === 0) { + return null; + } + const latestImage = images[images.length - 1]; + return { + releases: [ + { + version: latestImage.ImageId, + releaseTimestamp: latestImage.CreationDate, + isDeprecated: + Date.parse(latestImage.DeprecationTime ?? this.now.toString()) < + this.now, + newDigest: latestImage.Name, + }, + ], + }; + } +} diff --git a/lib/datasource/aws-machine-image/readme.md b/lib/datasource/aws-machine-image/readme.md new file mode 100644 index 00000000000000..e877248bb256e6 --- /dev/null +++ b/lib/datasource/aws-machine-image/readme.md @@ -0,0 +1,113 @@ +> :warning: **This datasource is _experimental_**: Be aware that its syntax and behavior may change at any time! + +This datasource returns the latest [Amazon Machine Image](https://docs.aws.amazon.com/en_en/AWSEC2/latest/UserGuide/AMIs.html) via the AWS API (valid credentials required). + +Because there is no general `lookupName`, you have to use the [describe images filter](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-ec2/interfaces/describeimagescommandinput.html#filters) as minified JSON as a `lookupName`. + +Example: + +```yaml +# Getting the latest official EKS image from AWS (account '602401143452' for eu-central-1) for EKS 1.21 (name matches 'amazon-eks-node-1.21-*') would look as a describe images filter like: + +[ + { + "Name": "owner-id", + "Values": [ "602401143452" ] + }, + { + "Name": "name", + "Values": [ "amazon-eks-node-1.21-*" ] + } +] + +# In order to use it with this datasource, you have to minify it: + +[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.21-*"]}] +``` + +At the moment, this datasource has no "manager". +You have to use the regex manager for this. + +**Usage Example** + +Here's an example of using the regex manager: + +```javascript +module.exports = { + regexManagers: [ + { + fileMatch: ['.*'], + matchStrings: [ + '.*amiFilter=(?.*?)\\n(.*currentImageName=(?.*?)\\n)?(.*\\n)?.*?(?[a-zA-Z0-9-_:]*)[ ]*?[:|=][ ]*?["|\']?(?ami-[a-z0-9]{17})["|\']?.*', + ], + datasourceTemplate: 'aws-machine-image', + versioningTemplate: 'aws-machine-image', + }, + ], +}; +``` + +Or as JSON: + +```yaml +{ + 'regexManagers': + [ + { + 'fileMatch': ['.*'], + 'matchStrings': + [ + ".*amiFilter=(?.*?)\\n(.*currentImageName=(?.*?)\\n)?(.*\\n)?.*?(?[a-zA-Z0-9-_:]*)[ ]*?[:|=][ ]*?[\"|']?(?ami-[a-z0-9]{17})[\"|']?.*", + ], + 'datasourceTemplate': 'aws-machine-image', + 'versioningTemplate': 'aws-machine-image', + }, + ], +} +``` + +This would match every file, and would recognize the following lines: + +```yaml +# With AMI name mentioned in the comments +# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.21-*"]}] +# currentImageName=unknown +my_ami1: ami-02ce3d9008cab69cb +# Only AMI, no name mentioned +# amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.20-*"]}] +# currentImageName=unknown +my_ami2: ami-0083e9407e275acf2 +``` + +```typescript +const myConfigObject = { + // With AMI name mentioned in the comments + // amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.21-*"]}] + // currentImageName=unknown + my_ami1: 'ami-02ce3d9008cab69cb', +}; + +/** + * Only AMI, no AMI name mentioned + * amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.20-*"]}] + * currentImageName=unknown + */ +const my_ami2 = 'ami-0083e9407e275acf2'; +``` + +```hcl +resource "aws_instance" "web" { + + # Only AMI, no name mentioned + # amiFilter=[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["amazon-eks-node-1.20-*"]}] + # currentImageName=unknown + ami = "ami-0083e9407e275acf2" + + count = 2 + source_dest_check = false + + connection { + user = "root" + } +} +``` diff --git a/lib/versioning/api.ts b/lib/versioning/api.ts index a6770f7794ab94..932441370655fa 100644 --- a/lib/versioning/api.ts +++ b/lib/versioning/api.ts @@ -1,3 +1,4 @@ +import * as amazonMachineImage from './aws-machine-image'; import * as cargo from './cargo'; import * as composer from './composer'; import * as docker from './docker'; @@ -26,6 +27,7 @@ import * as ubuntu from './ubuntu'; const api = new Map(); export default api; +api.set(amazonMachineImage.id, amazonMachineImage.api); api.set('cargo', cargo.api); api.set('composer', composer.api); api.set('docker', docker.api); diff --git a/lib/versioning/aws-machine-image/index.spec.ts b/lib/versioning/aws-machine-image/index.spec.ts new file mode 100644 index 00000000000000..e4aff0a818fdc7 --- /dev/null +++ b/lib/versioning/aws-machine-image/index.spec.ts @@ -0,0 +1,50 @@ +import aws from '.'; + +describe('versioning/aws-machine-image/index', () => { + describe('parse(version)', () => { + it('should return 1.0.0', () => { + expect(aws.getMajor('ami-00e1b2c30011d4e5f')).toBe(1); + expect(aws.getMinor('ami-00e1b2c30011d4e5f')).toBe(0); + expect(aws.getPatch('ami-00e1b2c30011d4e5f')).toBe(0); + }); + }); + describe('isValid(version)', () => { + it('should return true', () => { + expect(aws.isValid('ami-00e1b2c30011d4e5f')).toBeTruthy(); + }); + it('should return false', () => { + expect(aws.isValid('ami-1')).toBeFalsy(); + }); + }); + describe('isVersion(version)', () => { + it('should return true', () => { + expect(aws.isVersion('ami-00e1b2c30011d4e5f')).toBeTruthy(); + }); + it('should return false', () => { + expect(aws.isVersion('ami-1')).toBeFalsy(); + }); + }); + describe('isCompatible(version)', () => { + it('should return true', () => { + expect(aws.isCompatible('ami-00e1b2c30011d4e5f')).toBeTruthy(); + }); + it('should return false', () => { + expect(aws.isCompatible('ami-1')).toBeFalsy(); + }); + }); + describe('isCompatible(version,range)', () => { + it('should return true', () => { + expect( + aws.isCompatible('ami-00e1b2c30011d4e5f', 'anything') + ).toBeTruthy(); + }); + it('should return false', () => { + expect(aws.isCompatible('ami-1', 'anything')).toBeFalsy(); + }); + }); + describe('isGreaterThan(version1, version2)', () => { + it('should return false', () => { + expect(aws.isGreaterThan('', '')).toBeTruthy(); + }); + }); +}); diff --git a/lib/versioning/aws-machine-image/index.ts b/lib/versioning/aws-machine-image/index.ts new file mode 100644 index 00000000000000..0f7b6fed1b8ec2 --- /dev/null +++ b/lib/versioning/aws-machine-image/index.ts @@ -0,0 +1,44 @@ +import * as generic from '../loose/generic'; +import type { VersioningApi } from '../types'; + +export const id = 'aws-machine-image'; +export const displayName = 'aws-machine-image'; + +export const urls = []; + +export const supportsRanges = false; + +function parse(version: string): any { + return { release: [1, 0, 0] }; +} + +function compare(version1: string, version2: string): number { + return 1; +} + +function isValid(input: string): string | boolean | null { + return typeof input === 'string' && /^ami-[a-z0-9]{17}$/.test(input); +} + +function isVersion(input: string): string | boolean | null { + return isValid(input); +} + +function isCompatible( + version: string, + _range?: string +): string | boolean | null { + return isValid(version); +} + +export const api: VersioningApi = { + ...generic.create({ + parse, + compare, + }), + isValid, + isVersion, + isCompatible, +}; + +export default api; diff --git a/lib/versioning/aws-machine-image/readme.md b/lib/versioning/aws-machine-image/readme.md new file mode 100644 index 00000000000000..5c12ed0f305451 --- /dev/null +++ b/lib/versioning/aws-machine-image/readme.md @@ -0,0 +1,3 @@ +Renovate's AWS Machine Image versioning is a kind of hack to support Amazon Machine Images (AMI) updates. + +At the moment every AMI that matches the regex `^ami-[a-z0-9]{17}$` is considered a valid "release". diff --git a/package.json b/package.json index bf3ffe2d22e496..b3731fa07c9642 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,8 @@ "Mikhail Yakushin ", "Sebastian Poxhofer ", "Henry Sachs ", - "Arkadiusz Kosmala " + "Arkadiusz Kosmala ", + "Markus Siebert " ], "license": "AGPL-3.0", "bugs": { @@ -124,6 +125,7 @@ "node": ">=14.15.0" }, "dependencies": { + "@aws-sdk/client-ec2": "3.35.0", "@aws-sdk/client-ecr": "3.38.0", "@breejs/later": "4.1.0", "@iarna/toml": "2.2.5", @@ -205,6 +207,7 @@ }, "devDependencies": { "@actions/core": "1.6.0", + "@aws-sdk/client-s3": "3.41.0", "@jest/globals": "27.3.1", "@jest/reporters": "27.3.1", "@jest/test-result": "27.3.1", @@ -246,6 +249,7 @@ "@types/xmldoc": "1.1.6", "@typescript-eslint/eslint-plugin": "5.3.1", "@typescript-eslint/parser": "5.3.1", + "aws-sdk-client-mock": "0.5.5", "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", "emojibase-data": "6.2.0", diff --git a/yarn.lock b/yarn.lock index 5afa63b00e4f07..b1c218004cd340 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,6 +23,15 @@ dependencies: grapheme-splitter "^1.0.4" +"@aws-crypto/crc32@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-2.0.0.tgz#4ad432a3c03ec3087c5540ff6e41e6565d2dc153" + integrity sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA== + dependencies: + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + "@aws-crypto/ie11-detection@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz#d3a6af29ba7f15458f79c41d1cd8cac3925e726a" @@ -30,25 +39,55 @@ dependencies: tslib "^1.11.1" +"@aws-crypto/ie11-detection@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz#bb6c2facf8f03457e949dcf0921477397ffa4c6e" + integrity sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz#741c9024df55ec59b51e5b1f5d806a4852699fb5" + integrity sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A== + dependencies: + "@aws-crypto/ie11-detection" "^2.0.0" + "@aws-crypto/sha256-js" "^2.0.0" + "@aws-crypto/supports-web-crypto" "^2.0.0" + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + "@aws-crypto/sha256-browser@^1.0.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-1.2.2.tgz#004d806e3bbae130046c259ec3279a02d4a0b576" - integrity sha512-0tNR4kBtJp+9S0kis4+JLab3eg6QWuIeuPhzaYoYwNUXGBgsWIkktA2mnilet+EGWzf3n1zknJXC4X4DVyyXbg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-1.2.1.tgz#b75b89a63039f97667e61ac92c9c4ee04f35fec0" + integrity sha512-WX/Wp6sXPhcBWx/w1aSJv3bDJL0ut5Ik6hl7yfqA1pn3cfsahl4rgHzRRXqYfJ+hnhnCqdgadS17wyBbVPsK+w== dependencies: "@aws-crypto/ie11-detection" "^1.0.0" - "@aws-crypto/sha256-js" "^1.2.2" + "@aws-crypto/sha256-js" "^1.2.1" "@aws-crypto/supports-web-crypto" "^1.0.0" - "@aws-crypto/util" "^1.2.2" + "@aws-crypto/util" "^1.2.1" "@aws-sdk/types" "^3.1.0" "@aws-sdk/util-locate-window" "^3.0.0" tslib "^1.11.1" -"@aws-crypto/sha256-js@^1.0.0", "@aws-crypto/sha256-js@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" - integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== +"@aws-crypto/sha256-js@2.0.0", "@aws-crypto/sha256-js@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz#f1f936039bdebd0b9e2dd834d65afdc2aac4efcb" + integrity sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig== dependencies: - "@aws-crypto/util" "^1.2.2" + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@^1.0.0", "@aws-crypto/sha256-js@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.1.tgz#88c6c0cfff7f269b21740c71157987837da502df" + integrity sha512-KtZ4qFDWZy6pKcky6RvwSytR/I8vPX9Z47pXh9sOuTcxjjtcegzS2uupg9vo0vbFcAWkSHVOEmNPh6ygiC3VFQ== + dependencies: + "@aws-crypto/util" "^1.2.1" "@aws-sdk/types" "^3.1.0" tslib "^1.11.1" @@ -59,15 +98,39 @@ dependencies: tslib "^1.11.1" -"@aws-crypto/util@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" - integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== +"@aws-crypto/supports-web-crypto@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz#fd6cde30b88f77d5a4f57b2c37c560d918014f9e" + integrity sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.1.tgz#9bd31a37843aca63829a8fcae6b897283bf6ff12" + integrity sha512-H6Qrl28lzGGXZgLkdP7DQpJ3D3jJagQJugziThcqZCJVUT0HABHJt9EQMiiuf93KcUV/MMoisl56UfCxCFfmWQ== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/util@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-2.0.0.tgz#17ba6f83c7e447b70fc24b84c5f6714d1e329f4a" + integrity sha512-YDooyH83m2P5A3h6lNH7hm6mIP93sU/dtzRmXIgtO4BCB7SvtX8ysVKQAE8tVky2DQ3HHxPCjNTuUe7YoAMrNQ== dependencies: "@aws-sdk/types" "^3.1.0" "@aws-sdk/util-utf8-browser" "^3.0.0" tslib "^1.11.1" +"@aws-sdk/abort-controller@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.35.0.tgz#66665a2bc80ea9db9901bf4c6ca4cac06812713a" + integrity sha512-88DAWQNT3IMGvCQkTCaOngJ7F6czoDDVbEmJ3vRvWa4B1Gve3U/pKIw26eJJsiR5BlihDRksjPJ6oqKlBj/QYQ== + dependencies: + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/abort-controller@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.38.0.tgz#c59d6c1317e96951e1304e7fb15e6b01ed2f9fc8" @@ -76,6 +139,71 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/abort-controller@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.40.0.tgz#e17299776782483835439d9b1b5300add24adc3f" + integrity sha512-S7LzLvNuwuf0q7r4q7zqGzxd/W2xYsn8cpZ90MMb3ObolhbkLySrikUJujmXae8k+2/KFCOr+FVC0YLrATSUgQ== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/chunked-blob-reader-native@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.37.0.tgz#4dcb3624246377079f8626de698b8f05552b9dca" + integrity sha512-h9OYq6EvDrpb7SKod+Kow+d3aRNFVBYR1a8G8ahEDDQe3AtmA2Smyvni4kt/ABTiKvYdof2//Pq3BL/IUV9n9Q== + dependencies: + "@aws-sdk/util-base64-browser" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/chunked-blob-reader@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.37.0.tgz#8549adddb89dfecfedab53571c0b92a9951bbbcf" + integrity sha512-uDacnFaczeO962RnVttwAQddS4rgDfI7nfeY8NV6iZkDv5uxGzHTfH4jT7WvPDM1pSMcOMDx8RJ+Tmtsd1VTsA== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/client-ec2@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-ec2/-/client-ec2-3.35.0.tgz#2468830c63d5d2b451a7c6f63e7d0cb92f28ec0c" + integrity sha512-jY6Fv/sT0AfCN5PjDasEoxGf/+jdFoK06AtY0dL3YdHRuqn/1Y4xfCHtCC9KKmS7wiCno2vqCQp/QMHHATdctA== + dependencies: + "@aws-crypto/sha256-browser" "^1.0.0" + "@aws-crypto/sha256-js" "^1.0.0" + "@aws-sdk/client-sts" "3.35.0" + "@aws-sdk/config-resolver" "3.35.0" + "@aws-sdk/credential-provider-node" "3.35.0" + "@aws-sdk/fetch-http-handler" "3.35.0" + "@aws-sdk/hash-node" "3.35.0" + "@aws-sdk/invalid-dependency" "3.35.0" + "@aws-sdk/middleware-content-length" "3.35.0" + "@aws-sdk/middleware-host-header" "3.35.0" + "@aws-sdk/middleware-logger" "3.35.0" + "@aws-sdk/middleware-retry" "3.35.0" + "@aws-sdk/middleware-sdk-ec2" "3.35.0" + "@aws-sdk/middleware-serde" "3.35.0" + "@aws-sdk/middleware-signing" "3.35.0" + "@aws-sdk/middleware-stack" "3.35.0" + "@aws-sdk/middleware-user-agent" "3.35.0" + "@aws-sdk/node-config-provider" "3.35.0" + "@aws-sdk/node-http-handler" "3.35.0" + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/smithy-client" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/url-parser" "3.35.0" + "@aws-sdk/util-base64-browser" "3.35.0" + "@aws-sdk/util-base64-node" "3.35.0" + "@aws-sdk/util-body-length-browser" "3.35.0" + "@aws-sdk/util-body-length-node" "3.35.0" + "@aws-sdk/util-user-agent-browser" "3.35.0" + "@aws-sdk/util-user-agent-node" "3.35.0" + "@aws-sdk/util-utf8-browser" "3.35.0" + "@aws-sdk/util-utf8-node" "3.35.0" + "@aws-sdk/util-waiter" "3.35.0" + entities "2.2.0" + fast-xml-parser "3.19.0" + tslib "^2.3.0" + uuid "^8.3.2" + "@aws-sdk/client-ecr@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-ecr/-/client-ecr-3.38.0.tgz#30006eb61a6487138f09ab8ab758d64248d93aa6" @@ -114,6 +242,93 @@ "@aws-sdk/util-waiter" "3.38.0" tslib "^2.3.0" +"@aws-sdk/client-s3@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.41.0.tgz#6453162aee5ecc8534baa6045f3a368f5a6c06da" + integrity sha512-PGPy7MbyjkpQECPR02NOxucqJWJEah9IcQcUMyRB1vZBg6irBI1d4GTuWafegr3xKQ+7ZTraupDtUSJ9oRqKOg== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/client-sts" "3.41.0" + "@aws-sdk/config-resolver" "3.40.0" + "@aws-sdk/credential-provider-node" "3.41.0" + "@aws-sdk/eventstream-serde-browser" "3.40.0" + "@aws-sdk/eventstream-serde-config-resolver" "3.40.0" + "@aws-sdk/eventstream-serde-node" "3.40.0" + "@aws-sdk/fetch-http-handler" "3.40.0" + "@aws-sdk/hash-blob-browser" "3.40.0" + "@aws-sdk/hash-node" "3.40.0" + "@aws-sdk/hash-stream-node" "3.40.0" + "@aws-sdk/invalid-dependency" "3.40.0" + "@aws-sdk/md5-js" "3.40.0" + "@aws-sdk/middleware-apply-body-checksum" "3.40.0" + "@aws-sdk/middleware-bucket-endpoint" "3.41.0" + "@aws-sdk/middleware-content-length" "3.40.0" + "@aws-sdk/middleware-expect-continue" "3.40.0" + "@aws-sdk/middleware-host-header" "3.40.0" + "@aws-sdk/middleware-location-constraint" "3.40.0" + "@aws-sdk/middleware-logger" "3.40.0" + "@aws-sdk/middleware-retry" "3.40.0" + "@aws-sdk/middleware-sdk-s3" "3.41.0" + "@aws-sdk/middleware-serde" "3.40.0" + "@aws-sdk/middleware-signing" "3.40.0" + "@aws-sdk/middleware-ssec" "3.40.0" + "@aws-sdk/middleware-stack" "3.40.0" + "@aws-sdk/middleware-user-agent" "3.40.0" + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/node-http-handler" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/smithy-client" "3.41.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/url-parser" "3.40.0" + "@aws-sdk/util-base64-browser" "3.37.0" + "@aws-sdk/util-base64-node" "3.37.0" + "@aws-sdk/util-body-length-browser" "3.37.0" + "@aws-sdk/util-body-length-node" "3.37.0" + "@aws-sdk/util-user-agent-browser" "3.40.0" + "@aws-sdk/util-user-agent-node" "3.40.0" + "@aws-sdk/util-utf8-browser" "3.37.0" + "@aws-sdk/util-utf8-node" "3.37.0" + "@aws-sdk/util-waiter" "3.40.0" + "@aws-sdk/xml-builder" "3.37.0" + entities "2.2.0" + fast-xml-parser "3.19.0" + tslib "^2.3.0" + +"@aws-sdk/client-sso@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.35.0.tgz#619afaec5130dcaf76d2ce0f67897f19858d6cff" + integrity sha512-hAIgl/lgvUWgCZauAPH/tNbk+nhFLPaemwhjmk5rjRjzeF3Vw4e1FCEoJdZTg7lyV7mcUkJtim5gRf2k0Vy4rw== + dependencies: + "@aws-crypto/sha256-browser" "^1.0.0" + "@aws-crypto/sha256-js" "^1.0.0" + "@aws-sdk/config-resolver" "3.35.0" + "@aws-sdk/fetch-http-handler" "3.35.0" + "@aws-sdk/hash-node" "3.35.0" + "@aws-sdk/invalid-dependency" "3.35.0" + "@aws-sdk/middleware-content-length" "3.35.0" + "@aws-sdk/middleware-host-header" "3.35.0" + "@aws-sdk/middleware-logger" "3.35.0" + "@aws-sdk/middleware-retry" "3.35.0" + "@aws-sdk/middleware-serde" "3.35.0" + "@aws-sdk/middleware-stack" "3.35.0" + "@aws-sdk/middleware-user-agent" "3.35.0" + "@aws-sdk/node-config-provider" "3.35.0" + "@aws-sdk/node-http-handler" "3.35.0" + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/smithy-client" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/url-parser" "3.35.0" + "@aws-sdk/util-base64-browser" "3.35.0" + "@aws-sdk/util-base64-node" "3.35.0" + "@aws-sdk/util-body-length-browser" "3.35.0" + "@aws-sdk/util-body-length-node" "3.35.0" + "@aws-sdk/util-user-agent-browser" "3.35.0" + "@aws-sdk/util-user-agent-node" "3.35.0" + "@aws-sdk/util-utf8-browser" "3.35.0" + "@aws-sdk/util-utf8-node" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/client-sso@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.38.0.tgz#9613b614485f296fb6be1da29f16c74e1ba3904b" @@ -148,6 +363,79 @@ "@aws-sdk/util-utf8-node" "3.37.0" tslib "^2.3.0" +"@aws-sdk/client-sso@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.41.0.tgz#33d49e926ef6fff08278b256454241f1f982d8de" + integrity sha512-xDvcy7wv3KdHhOpl5fZN+Ydw+dHBmsCZwMFI1ZdJVCSGO+ZKgl5KVWi1LCif6vjZP1pUuGl44oDOZz1ACqOzTg== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.40.0" + "@aws-sdk/fetch-http-handler" "3.40.0" + "@aws-sdk/hash-node" "3.40.0" + "@aws-sdk/invalid-dependency" "3.40.0" + "@aws-sdk/middleware-content-length" "3.40.0" + "@aws-sdk/middleware-host-header" "3.40.0" + "@aws-sdk/middleware-logger" "3.40.0" + "@aws-sdk/middleware-retry" "3.40.0" + "@aws-sdk/middleware-serde" "3.40.0" + "@aws-sdk/middleware-stack" "3.40.0" + "@aws-sdk/middleware-user-agent" "3.40.0" + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/node-http-handler" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/smithy-client" "3.41.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/url-parser" "3.40.0" + "@aws-sdk/util-base64-browser" "3.37.0" + "@aws-sdk/util-base64-node" "3.37.0" + "@aws-sdk/util-body-length-browser" "3.37.0" + "@aws-sdk/util-body-length-node" "3.37.0" + "@aws-sdk/util-user-agent-browser" "3.40.0" + "@aws-sdk/util-user-agent-node" "3.40.0" + "@aws-sdk/util-utf8-browser" "3.37.0" + "@aws-sdk/util-utf8-node" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/client-sts@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.35.0.tgz#2a758b02c5d7f6d716b382fa169a16bb38ffd7a9" + integrity sha512-ciMy34LS50UO3U8eim8u8DqBj3bQeR3ULbq6YvoWeGZzPCIvshnvyNesk7QF7yvwxRn2+TDY7EZdy2wq+xQnQA== + dependencies: + "@aws-crypto/sha256-browser" "^1.0.0" + "@aws-crypto/sha256-js" "^1.0.0" + "@aws-sdk/config-resolver" "3.35.0" + "@aws-sdk/credential-provider-node" "3.35.0" + "@aws-sdk/fetch-http-handler" "3.35.0" + "@aws-sdk/hash-node" "3.35.0" + "@aws-sdk/invalid-dependency" "3.35.0" + "@aws-sdk/middleware-content-length" "3.35.0" + "@aws-sdk/middleware-host-header" "3.35.0" + "@aws-sdk/middleware-logger" "3.35.0" + "@aws-sdk/middleware-retry" "3.35.0" + "@aws-sdk/middleware-sdk-sts" "3.35.0" + "@aws-sdk/middleware-serde" "3.35.0" + "@aws-sdk/middleware-signing" "3.35.0" + "@aws-sdk/middleware-stack" "3.35.0" + "@aws-sdk/middleware-user-agent" "3.35.0" + "@aws-sdk/node-config-provider" "3.35.0" + "@aws-sdk/node-http-handler" "3.35.0" + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/smithy-client" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/url-parser" "3.35.0" + "@aws-sdk/util-base64-browser" "3.35.0" + "@aws-sdk/util-base64-node" "3.35.0" + "@aws-sdk/util-body-length-browser" "3.35.0" + "@aws-sdk/util-body-length-node" "3.35.0" + "@aws-sdk/util-user-agent-browser" "3.35.0" + "@aws-sdk/util-user-agent-node" "3.35.0" + "@aws-sdk/util-utf8-browser" "3.35.0" + "@aws-sdk/util-utf8-node" "3.35.0" + entities "2.2.0" + fast-xml-parser "3.19.0" + tslib "^2.3.0" + "@aws-sdk/client-sts@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.38.0.tgz#f09b324d40bff9af8bc80e1c486eb3747473a1be" @@ -187,6 +475,54 @@ fast-xml-parser "3.19.0" tslib "^2.3.0" +"@aws-sdk/client-sts@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.41.0.tgz#38bde53d0cd1254894d0b27b4cc3f056f5d2692e" + integrity sha512-XTjmr53kMbXuVhH3B+g2jEYuhNralptsMSd4RcSHCB7BX1NmAMnMFKKTmVlmc5NizWi4x1CzExu86Q0YSqp0og== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.40.0" + "@aws-sdk/credential-provider-node" "3.41.0" + "@aws-sdk/fetch-http-handler" "3.40.0" + "@aws-sdk/hash-node" "3.40.0" + "@aws-sdk/invalid-dependency" "3.40.0" + "@aws-sdk/middleware-content-length" "3.40.0" + "@aws-sdk/middleware-host-header" "3.40.0" + "@aws-sdk/middleware-logger" "3.40.0" + "@aws-sdk/middleware-retry" "3.40.0" + "@aws-sdk/middleware-sdk-sts" "3.40.0" + "@aws-sdk/middleware-serde" "3.40.0" + "@aws-sdk/middleware-signing" "3.40.0" + "@aws-sdk/middleware-stack" "3.40.0" + "@aws-sdk/middleware-user-agent" "3.40.0" + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/node-http-handler" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/smithy-client" "3.41.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/url-parser" "3.40.0" + "@aws-sdk/util-base64-browser" "3.37.0" + "@aws-sdk/util-base64-node" "3.37.0" + "@aws-sdk/util-body-length-browser" "3.37.0" + "@aws-sdk/util-body-length-node" "3.37.0" + "@aws-sdk/util-user-agent-browser" "3.40.0" + "@aws-sdk/util-user-agent-node" "3.40.0" + "@aws-sdk/util-utf8-browser" "3.37.0" + "@aws-sdk/util-utf8-node" "3.37.0" + entities "2.2.0" + fast-xml-parser "3.19.0" + tslib "^2.3.0" + +"@aws-sdk/config-resolver@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.35.0.tgz#e8c746d04dc14099df6a05a6e23ec662480c0e87" + integrity sha512-r3s2VDSAJcveQuICdNSzRzsNrAPGGISUDb+0rqYIZVY7FWWWDGghlBqIrAyY6BFvjCn+LTpqF225+6eUxi1AWg== + dependencies: + "@aws-sdk/signature-v4" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/config-resolver@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.38.0.tgz#c630e0efaee480ceac1cd3a3fba50b26ccc7fd31" @@ -196,6 +532,25 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/config-resolver@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.40.0.tgz#d7bd3180aebced797800661a2ed778a5db8ac7e5" + integrity sha512-QYy6J2k31QL6J74hPBfptnLW1kQYdN+xjwH4UQ1mv7EUhRoJN9ZY2soStJowFy4at6IIOOVWbyG5dyqvrbEovg== + dependencies: + "@aws-sdk/signature-v4" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-config-provider" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-env@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.35.0.tgz#3dc3b06d99cee082ad62558a8635c3b5389777b9" + integrity sha512-NC87G4fh5AintHrKe2Bjw/5l4VB6EOVV0vrX3fWYDybHJQnxLDDrw98z5cH6khIGp0PpaFoWGMWgEunWADo5Rg== + dependencies: + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/credential-provider-env@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.38.0.tgz#994ed65fdc66ea2c9a5d640c402d158b9ffa0158" @@ -205,6 +560,26 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/credential-provider-env@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.40.0.tgz#0ca7611f13520dd6654e8eac7fa3e767d027ede6" + integrity sha512-qHZdf2vxhzZkSygjw2I4SEYFL2dMZxxYvO4QlkqQouKY81OVxs/j69oiNCjPasQzGz5jaZZKI8xEAIfkSyr1lg== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-imds@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.35.0.tgz#8cba5a8dc1006bf92cd8904b17d4caad4718908c" + integrity sha512-AcgTpeyE0Br0F1YRZaJMGTXjQi+7pEosKMXLknCyIDtGGLp+NI/CFKEPnS9arEkK2bWeGWuXhbTbPFz0iMXq7A== + dependencies: + "@aws-sdk/node-config-provider" "3.35.0" + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/url-parser" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/credential-provider-imds@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.38.0.tgz#b32d343b4fb252d682fe9f7b591dc28c6c01ec04" @@ -216,6 +591,32 @@ "@aws-sdk/url-parser" "3.38.0" tslib "^2.3.0" +"@aws-sdk/credential-provider-imds@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.40.0.tgz#7c324eff731f85d4d40763c484e78673aa5dedfb" + integrity sha512-Ty/wVa+BQrCFrP06AGl5S1CeLifDt68YrlYXUnkRn603SX4DvxBgVO7XFeDH58G8ziDCiqxfmVl4yjbncPPeSw== + dependencies: + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/url-parser" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-ini@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.35.0.tgz#9ef6f9ccc022724dc21e6523c11854554bb773a8" + integrity sha512-gOzAeC711wx9bNzJMuaEMxvG38STFXB2kxjQpEdIOQO+2ywhhL2IITCQhe5+Ij3BYTi5mOtUq+LYMNBeX0yxmw== + dependencies: + "@aws-sdk/credential-provider-env" "3.35.0" + "@aws-sdk/credential-provider-imds" "3.35.0" + "@aws-sdk/credential-provider-sso" "3.35.0" + "@aws-sdk/credential-provider-web-identity" "3.35.0" + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/shared-ini-file-loader" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-credentials" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/credential-provider-ini@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.38.0.tgz#4e8a9c6e90ff9746203470b76ede9961242789b7" @@ -231,6 +632,38 @@ "@aws-sdk/util-credentials" "3.37.0" tslib "^2.3.0" +"@aws-sdk/credential-provider-ini@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.41.0.tgz#a212444f6e4d03c0683ed1b6479bca72eab782dd" + integrity sha512-98CGEHg7Tb6HxK5ZIdbAcijvD3IpLe0ddse1xMe/Ilhjz770FS/L2UNprOP6PZTqrSfBffiMrvfThUSuUaTlIQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.40.0" + "@aws-sdk/credential-provider-imds" "3.40.0" + "@aws-sdk/credential-provider-sso" "3.41.0" + "@aws-sdk/credential-provider-web-identity" "3.41.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-node@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.35.0.tgz#2caec3047e8d2c7c2d81331b18f9d93df5f10d34" + integrity sha512-WnR6IdBeVlrHu8GPGjQii3O9JA50rTci3AyJ+bybpKT7joNDRKXSTO2itVkHaHiS3v66nuo/Hdcz4LwHAz3egg== + dependencies: + "@aws-sdk/credential-provider-env" "3.35.0" + "@aws-sdk/credential-provider-imds" "3.35.0" + "@aws-sdk/credential-provider-ini" "3.35.0" + "@aws-sdk/credential-provider-process" "3.35.0" + "@aws-sdk/credential-provider-sso" "3.35.0" + "@aws-sdk/credential-provider-web-identity" "3.35.0" + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/shared-ini-file-loader" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-credentials" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/credential-provider-node@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.38.0.tgz#14a3618014b7177c0697f507994dc9c6182f91dd" @@ -248,6 +681,34 @@ "@aws-sdk/util-credentials" "3.37.0" tslib "^2.3.0" +"@aws-sdk/credential-provider-node@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.41.0.tgz#ab4fc10ea6c7a2b42c903f4bdb68fea8ada5f5dd" + integrity sha512-5FW6+wNJgyDCsbAd+mLm/1DBTDkyIYOMVzcxbr6Vi3pM4UrMFdeLdAP62edYW8usg78Xg+c6vaAoEv/M3zkS0Q== + dependencies: + "@aws-sdk/credential-provider-env" "3.40.0" + "@aws-sdk/credential-provider-imds" "3.40.0" + "@aws-sdk/credential-provider-ini" "3.41.0" + "@aws-sdk/credential-provider-process" "3.40.0" + "@aws-sdk/credential-provider-sso" "3.41.0" + "@aws-sdk/credential-provider-web-identity" "3.41.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-process@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.35.0.tgz#56eca98cb399c2ac2dd6dfd77123ae7425c5362f" + integrity sha512-oMxd7ONlI2a2l5wlgk2GzvoGybA8LKWhhrqiAUgQk2oN7rlq+elvUF95RWS4tiFCoZyGC9cXu9fFD/TN4ppETA== + dependencies: + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/shared-ini-file-loader" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-credentials" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/credential-provider-process@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.38.0.tgz#432eac9814d3de3090764f933aebb498f4608727" @@ -259,6 +720,29 @@ "@aws-sdk/util-credentials" "3.37.0" tslib "^2.3.0" +"@aws-sdk/credential-provider-process@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.40.0.tgz#b4f16e43ca9c855002e833ac9dc8e409b3c7ca23" + integrity sha512-qsaNCDesW2GasDbzpeOA371gxugi05JWxt3EKonLbUfkGKBK7kmmL6EgLIxZuNm2/Ve4RS07PKp8yBGm4xIx9w== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-sso@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.35.0.tgz#9da1831818a57abae5579364d608e88ca434d921" + integrity sha512-3FYZcQMHfEtYlwZSEzAlnMrMnQby4FRgsIXxM/EP1Q6vxaVturZbT5vd1eytgPLGgKUHlxnHP5fpnsybAqTijQ== + dependencies: + "@aws-sdk/client-sso" "3.35.0" + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/shared-ini-file-loader" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-credentials" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/credential-provider-sso@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.38.0.tgz#cabc3f761a1141935d7fe1b67e2ef5975b60cbc2" @@ -271,6 +755,27 @@ "@aws-sdk/util-credentials" "3.37.0" tslib "^2.3.0" +"@aws-sdk/credential-provider-sso@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.41.0.tgz#66c83a776ec42f08b4ea6d619351f0240d57f76a" + integrity sha512-9s7SWu3RVIQ/MTcBCt35EMzxNQm3avivrbpSOKfJwxR5L+oNKPsV+gSqMlkNZGwOVJyUicIsZGcq/4ON6CjrOg== + dependencies: + "@aws-sdk/client-sso" "3.41.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-web-identity@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.35.0.tgz#d3248e850badd9d97a47fe873735ce64365b1871" + integrity sha512-2I+pcIW76eqgRot8jELyZEG0wTDMHna3NwQ/QgiNTkGVTjhrbtVxzrDSEwZZ0vN0p2aOjW3IOCPPkDSm9kK7fw== + dependencies: + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/credential-provider-web-identity@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.38.0.tgz#1906b514fe361f7c36debc34cffaeb5d2c8712ec" @@ -280,6 +785,73 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/credential-provider-web-identity@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.41.0.tgz#7f0e9cc5650eaf6ac32ef359fb0e0dea2ca0ce78" + integrity sha512-VqvVoEh9C8xTXl4stKyJC5IKQhS8g1Gi5k6B9HPHLIxFRRfKxkE73DT4pMN6npnus7o0yi0MTFGQFQGYSrFO2g== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/eventstream-marshaller@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-marshaller/-/eventstream-marshaller-3.40.0.tgz#c98fee85a751d2a914d1c4b66217d16d4ee4db03" + integrity sha512-zHGchfkG3B9M8OOKRpByeS5g1/15YQ0+QQHwxQRtm/CPtKBAIAsCZRQaCNBLu9uQMtBBKj5JsDUcjirhGeSvIg== + dependencies: + "@aws-crypto/crc32" "2.0.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-hex-encoding" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/eventstream-serde-browser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.40.0.tgz#2b0f8c5ed1908a4fdab07d7b590bdd724b5a13a2" + integrity sha512-V0AXAfSkhY0hgxDJ0cNA+r42kL8295U7UTCp2Q2fvCaob3wKWh+54KZ2L4IOYTlK3yNzXJ5V6PP1zUuRlsUTew== + dependencies: + "@aws-sdk/eventstream-marshaller" "3.40.0" + "@aws-sdk/eventstream-serde-universal" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/eventstream-serde-config-resolver@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.40.0.tgz#4a6cced34cbdc376c95e174943b99cd352ed34b0" + integrity sha512-GgGiJBsQ1/SBTpRM/wCdFBCMo1Nybvy46bNVkH1ujCdp8UTLc5PozzNpH+15V2IQbc9sPDYffMab6HSFjDp5vw== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/eventstream-serde-node@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.40.0.tgz#715c943c9648a5d2b86341ae27eaae5c3bab9c0c" + integrity sha512-CnzX/JZGvhWlg+ooIPVZ78T+5wIm5Ld1BD7jwhlptJa8IjTMvkc8Nh4pAhc7T0ZScy4zZa/oTkqeVYCOVCyd1Q== + dependencies: + "@aws-sdk/eventstream-marshaller" "3.40.0" + "@aws-sdk/eventstream-serde-universal" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/eventstream-serde-universal@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.40.0.tgz#6d00ecd75d4910113e0f8f379b4cb6c30799dafe" + integrity sha512-rkHwVMyZJMhp9iBixkuaAGQNer/DPxZ9kxDDtE+LuAMhepTYQ8c4lUW0QQhYbNMWf48QKD1G4FV3JXIj9JfP9A== + dependencies: + "@aws-sdk/eventstream-marshaller" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/fetch-http-handler@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.35.0.tgz#e008fa1be8c8208bd6c24cd82da2e7da971d2ab2" + integrity sha512-tXbRtqC5kCxis65AIXsCZW9eWScC/gxm3+KyocNHzGgVgr8eyq/6hPmxCH8g3eHLixmVBR6xSKCnRT1q7frq2Q== + dependencies: + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/querystring-builder" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-base64-browser" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/fetch-http-handler@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.38.0.tgz#078ba2fcbacc5863ef5cb0ba4e7130e00c6ce5c5" @@ -291,6 +863,36 @@ "@aws-sdk/util-base64-browser" "3.37.0" tslib "^2.3.0" +"@aws-sdk/fetch-http-handler@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.40.0.tgz#5e6ecfb7fe1f32a5709e4e9c13b0536073477737" + integrity sha512-w1HiZromoU+/bbEo89uO81l6UO/M+c2uOMnXntZqe6t3ZHUUUo3AbvhKh0QGVFqRQa+Oi0+95KqWmTHa72/9Iw== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/querystring-builder" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-base64-browser" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/hash-blob-browser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.40.0.tgz#7bf071b84c59246736044499fd42255c6c8e3d46" + integrity sha512-l8xyprVVKKH+720VrQ677X6VkvHttDXB4MxkMuxhSvwYBQwsRzP2Wppo7xIAtWGoS+oqlLmD4LCbHdhFRcN5yA== + dependencies: + "@aws-sdk/chunked-blob-reader" "3.37.0" + "@aws-sdk/chunked-blob-reader-native" "3.37.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/hash-node@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.35.0.tgz#d0a160436b5bfb9d73f75f4c83cbd957169b98d1" + integrity sha512-Rx8V4d4XumcrmFNk/9eSti+z8xz94FklvddcfF4QMdKom4htdm7uU214VOnaqRW+WpxQAmiHmmuzAr3L1r7IGQ== + dependencies: + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-buffer-from" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/hash-node@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.38.0.tgz#8fe9d677d1d8df5b1b96a5e708370382e115920c" @@ -300,6 +902,31 @@ "@aws-sdk/util-buffer-from" "3.37.0" tslib "^2.3.0" +"@aws-sdk/hash-node@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.40.0.tgz#bf4d31a41652cbc3c937055087c80096cfab67ae" + integrity sha512-yOXXK85DdGDktdnQtXgMdaVKii4wtMjEhJ1mrvx2A9nMFNaPhxvERkVVIUKSWlJRa9ZujOw5jWOx8d2R51/Kjg== + dependencies: + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-buffer-from" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/hash-stream-node@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-3.40.0.tgz#0a6fda20faa0abebf946c6dae63a80c1e707c011" + integrity sha512-4yvRwODMGYtj6qrt+fyydV5MwVwPPoyoeqDoXdLo9x75vRY71DT1pMRt8PDOoY/ZwWbIdEt4+V7x0sLt2uy9WA== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/invalid-dependency@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.35.0.tgz#7d8fae8f12795a48f908710d17526bf209b37482" + integrity sha512-utzICeE5ggu0UnUQFGyAoZL+x1Mowb74a4FJcQV+9Zjqb5Mx7hpJ/u1i4F2qj1KbZqj70qMYW3YdhSvZcMZiVw== + dependencies: + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/invalid-dependency@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.38.0.tgz#04d25d195edb25837f722a67489e67275c0f2a9e" @@ -308,6 +935,21 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/invalid-dependency@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.40.0.tgz#023e37abfb2882676c3cef02da630342634aa429" + integrity sha512-axIWtDwCBDDqEgAJipX1FB1ZNpWYXquVwKDMo+7G+ftPBZ4FEq4M1ELhXJL3hhNJ9ZmCQzv+4F6Wnt8dwuzUaQ== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/is-array-buffer@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.35.0.tgz#6edec4806231fd2dc9643a094507e15e079452c8" + integrity sha512-dsJU/U+oJuXWRyFmt/a+0s7AH8nUFrfhfGh+J8LkToIBQLTgmYdjxhemOYAZUKh7zGWwTlCTsQoUWf6eKOyrFw== + dependencies: + tslib "^2.3.0" + "@aws-sdk/is-array-buffer@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.37.0.tgz#aa87619f8172b1a2a7ac8d573032025d98ae6c50" @@ -315,6 +957,46 @@ dependencies: tslib "^2.3.0" +"@aws-sdk/md5-js@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-3.40.0.tgz#027ff231c795a6069ae854ccf7c8b57dbfd441fe" + integrity sha512-P1tzEljMD/MkjSc00TkVBYvfaVv/7S+04YEwE7tpu/jtxWxMHnk3CMKqq/F2iMhY83DRoqoYy+YqnaF4Bzr1uA== + dependencies: + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-utf8-browser" "3.37.0" + "@aws-sdk/util-utf8-node" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-apply-body-checksum@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-apply-body-checksum/-/middleware-apply-body-checksum-3.40.0.tgz#ebf6cf2f5c4078a4ca717d67dc72b292abe36f33" + integrity sha512-gNSFlFu/O8cxAM0X64OwiLLN/NPXvK3FsAIJRsfhIW+dX0bEq4lsGPsdU8Tx+9eenaj/Z01uqgWZ6Izar8zVvQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.37.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-bucket-endpoint@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.41.0.tgz#d1bb0fb59be1bb4176725c243561dd7897e710cb" + integrity sha512-4A0kWHH2qemd4P7CZKS7XB6qtSUP2xMJ7Dn/llxYgvadR0mKEfGPeYPhAss/k7T1JGv+kSTIV30RwUXwdXgE/A== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-arn-parser" "3.37.0" + "@aws-sdk/util-config-provider" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-content-length@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.35.0.tgz#2dadfcff5c21eac7876e373d48e91f7b91b03ea5" + integrity sha512-hkv8k/wM6XtX2fp13f45Vtzf1xOul4X7y8ksAylDystKJQ+Ks9krGlgaYgV8naP2MTgFxlB8wR44cGBK1pHuYw== + dependencies: + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/middleware-content-length@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.38.0.tgz#c5c80ce7c4bd9f7b8d2056f67b004c85ec4e9e90" @@ -324,6 +1006,43 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/middleware-content-length@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.40.0.tgz#affe235fc0eb43c7b8e21189f85a238fdd0b4c3f" + integrity sha512-sybAJb8v7I/vvL08R3+TI/XDAg9gybQTZ2treC24Ap4+jAOz4QBTHJPMKaUlEeFlMUcq4rj6/u2897ebYH6opw== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-expect-continue@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.40.0.tgz#380bb30c7c9d0b52bf044207b964d803e4cb5e3d" + integrity sha512-FY6vT0u1ptDZ2bBj1yG/Iyk6HZB7U9fbrpeZNPYzgq8HJxBcTgfLwtB3VLobyhThQm9X2a7R2YZrwtArW8yQfQ== + dependencies: + "@aws-sdk/middleware-header-default" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-header-default@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-header-default/-/middleware-header-default-3.40.0.tgz#7e30d4e65404a7f914951b69703d54a425a0b3b0" + integrity sha512-eXQ13x/AivPZKoG8/akp9g5xdNHuKftl83GMuk9K6tt4+eAa22TdxiFu4R0UVlKAvo2feqxFrNs5DhhhBeAQWA== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-host-header@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.35.0.tgz#8e153c70da3677051101b794748674c13cc7efdd" + integrity sha512-lJTCq7tlDJpXcGDAmRl7Cs4iPbdYAub5FuOw017PpIFYaXolQP241FPX8NgJRlPqQH3qOjQ6uk2ylGk5mJP5xA== + dependencies: + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/middleware-host-header@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.38.0.tgz#c4ad8bc24ac4d48e88ec524b167c5e132daaa211" @@ -333,6 +1052,31 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/middleware-host-header@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.40.0.tgz#a6a1d52ab0da7f8e65a199c27d71750f8329eccc" + integrity sha512-/wocR7JFOLM7/+BQM1DgAd6KCFYcdxYu1P7AhI451GlVNuYa5f89zh7p0gt3SRC6monI5lXgpL7RudhDm8fTrA== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-location-constraint@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.40.0.tgz#f689b2860b9932beb143b6d83281ec2d4527d175" + integrity sha512-9XaVPYsDQVJbWJH96sNdv4HHY3j1raman+lYxMu4528Awp0OdWUeSsGRYRN+CnRPlkHnfNw4m6SKdWYHxdjshw== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-logger@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.35.0.tgz#d2be023d557d9cb77fe71ee6a6c125c7691605b2" + integrity sha512-d1QoKX38s8q1eCm15pgkp9SxdvgjaZpPaCfRLuXWN8hhlPA7/RhE6fa7mwaNG/ZAqSA7CB5FzFx+wkvmdgVFhw== + dependencies: + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/middleware-logger@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.38.0.tgz#3df66285b12c8fe3ab327c07afe6e1beb873c315" @@ -341,6 +1085,25 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/middleware-logger@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.40.0.tgz#29d9616bd39dafa1493cef333a32363e4df2c607" + integrity sha512-19kx0Xg5ymVRKoupmhdmfTBkROcv3DZj508agpyG2YAo0abOObMlIP4Jltg0VD4PhNjGzNh0jFGJnvhjdwv4/A== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-retry@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.35.0.tgz#35b80a1984b4b1bd0d113c1a05942c46888990db" + integrity sha512-tDSvXp6CDnuvYzKqryzxgm+z5BQ9RrrPrY1qj/K0CkenJTrBF+YU/DzhADpKFkUVE8VY5XdRFEcydnLw82oEtQ== + dependencies: + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/service-error-classification" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + uuid "^8.3.2" + "@aws-sdk/middleware-retry@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.38.0.tgz#525d6a9bcb5456759b1e7956c98d24039f59841b" @@ -352,6 +1115,52 @@ tslib "^2.3.0" uuid "^8.3.2" +"@aws-sdk/middleware-retry@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.40.0.tgz#5cffe046b1fd208a62a09495de6659be48ef86f3" + integrity sha512-SMUJrukugLL7YJE5X8B2ToukxMWMPwnf7jAFr84ptycCe8bdWv8x8klQ3EtVWpyqochtNlbTi6J/tTQBniUX7A== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/service-error-classification" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + uuid "^8.3.2" + +"@aws-sdk/middleware-sdk-ec2@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.35.0.tgz#b28bef13b8a807c5baafff6b1a6cdf5bd4e06cf5" + integrity sha512-2N0zMie4zok2CgUglqA8ezCXyeA4eyRAjSVCqjRrSaxykqVwxZ0OCWdcRIt2j6Wl8rLp4hjp/UAu+i8Z6C/4oQ== + dependencies: + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/signature-v4" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-format-url" "3.35.0" + "@aws-sdk/util-uri-escape" "3.35.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-sdk-s3@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.41.0.tgz#cd97433335af8436d6224194e9735bdecae28889" + integrity sha512-B7JOpmIpm1zxERQEMwZCWj3FisTvwfUgpfQglYdqrB6VpIoCM8fk2pmi5KzU/JDeNBlhTouj6mwnhJL/z5jopA== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/signature-v4" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-arn-parser" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-sdk-sts@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.35.0.tgz#5bbaf654e24727df738f37558e872a11e6b1a3b2" + integrity sha512-lFScLmQ5yr9vKLb1+MPbRB/weQiHS2CgozKbFNeHTzSEKKHFwSmt35y7lLE1mkaO4l/No/Vl4e5A4ctyLFJn5w== + dependencies: + "@aws-sdk/middleware-signing" "3.35.0" + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/signature-v4" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/middleware-sdk-sts@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.38.0.tgz#6445e08bd2b645f86caa116b19da77e48f79762f" @@ -364,6 +1173,26 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/middleware-sdk-sts@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.40.0.tgz#3efefc29176d5078915b61d17105f8bbee86ff5e" + integrity sha512-TcrbCvj1PkabFZiNczT3yePZtuEm2fAIw1OVnQyLcF2KW+p62Hv5YkK4MPOfx3LA/0lzjOUO1RNl2x7gzV443Q== + dependencies: + "@aws-sdk/middleware-signing" "3.40.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/signature-v4" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-serde@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.35.0.tgz#40b353519f86c912bad48af2bc840ba2f2e7406a" + integrity sha512-qvPw0GvoWjWYTDyNZTEkzIL//VDs1gSL9VKFo72xPqW9sLBu4yQu+Z1SUMzdfFbnmX64RqT6rpn4NLCIUOQqUg== + dependencies: + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/middleware-serde@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.38.0.tgz#fb081ab2a889569ffda960af89c725b4b8036dd1" @@ -372,6 +1201,25 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/middleware-serde@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.40.0.tgz#90124ff60a7f23963bbcd00a5cc95862b29dddd9" + integrity sha512-uOWfZjlAoBy6xPqp0d4ka83WNNbEVCWn9WwfqBUXThyoTdTooYSpXe5y2YzN0BJa8b+tEZTyWpgamnBpFLp47g== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-signing@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.35.0.tgz#feea3686aa84adf13a5e148ac9445d4e8e5ba3aa" + integrity sha512-U2JRfL9mo7e5XeSYp1VuiwTUDT5rgs2/2TCzOr+AI+Jy6TcLSSYXuW2l2yCrHzZJ27XSVhxF9/buNIAfYKwmaA== + dependencies: + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/signature-v4" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/middleware-signing@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.38.0.tgz#3fb6120eb1b58dda835680e5c26d864b9044d982" @@ -383,6 +1231,32 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/middleware-signing@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.40.0.tgz#bcbf5558a91db85a87918d5861ce98f306e40a88" + integrity sha512-RqK5nPbfma0qInMvjtpVkDYY/KkFS6EKlOv3DWTdxbXJ4YuOxgKiuUromhmBUoyjFag0JO7LUWod07H+/DawoA== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/signature-v4" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-ssec@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.40.0.tgz#e6877cbabc9532ca85e017f6521924c591d01520" + integrity sha512-ZoRpaZeAIQa1Q+NyEh74ATwOR3nFGfcP6Nu0jFzgqoVijCReMnhtlCRx23ccBu1ZLZNUsNk6MhKjY+ZTfNsjEg== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-stack@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.35.0.tgz#c5851d8d489f1524f7720fb256a7b6b37d3180a3" + integrity sha512-K0xR73JSpFwpF4GIeCFC+TmD3YevceE+V8IYniDIxgCnBLhaIC1gXfTk7rDwxFnEqEpJt1To4MQBFYcsfIEQVw== + dependencies: + tslib "^2.3.0" + "@aws-sdk/middleware-stack@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.38.0.tgz#9b4f297e91adc390be2ea5c1c059ee956693cf05" @@ -390,6 +1264,22 @@ dependencies: tslib "^2.3.0" +"@aws-sdk/middleware-stack@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.40.0.tgz#5aa614e49a4fc76cc63986fb45302f7afab6db87" + integrity sha512-hby9HvESUYJxpdALX+6Dn2LPmS5jtMVurGB/+j3MWOvIcDYB4bcSXgVRvXzYnTKwbSupIdbX9zOE2ZAx2SJpUQ== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/middleware-user-agent@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.35.0.tgz#072b645cc836a07c36aef99fd78bc0906f3fb8e6" + integrity sha512-tKjQdnsKSKDTgjXAQxUyyz7CUX3IWtdqKSZoinfaljETeTANFUHoL60LERVMXP2RKayEQwV6T6BVYbJkonBxSQ== + dependencies: + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/middleware-user-agent@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.38.0.tgz#9d175404d20b2d46190a28b0a2c46a7338f3512a" @@ -399,6 +1289,25 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/middleware-user-agent@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.40.0.tgz#bf03d2deddc00689c85e7eadd9b4e02f24b61c08" + integrity sha512-dzC2fxWnanetFJ1oYgil8df3N36bR1yc/OCOpbdfQNiUk1FrXiCXqH5rHNO8zCvnwJAj8GHFwpFGd9a2Qube2w== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/node-config-provider@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.35.0.tgz#f8e5cc3daf165919cb0a3b75cd34fd0dd83d5cab" + integrity sha512-lLzTK00QVy40bUR06Msl37gsLKQgVqiqEithgsSCfKr7XKyE39dy25xUDM+NhYN47HnVAnKnqGcaUb/Cscad0g== + dependencies: + "@aws-sdk/property-provider" "3.35.0" + "@aws-sdk/shared-ini-file-loader" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/node-config-provider@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.38.0.tgz#7fbc95138e8c5a2875a719aa73f1f83227ac6ca7" @@ -409,6 +1318,27 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/node-config-provider@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.40.0.tgz#54a8abc4f6d78503093b270e6dff3d6174c59f95" + integrity sha512-AmokjgUDECG8osoMfdRsPNweqI+L1pn4bYGk5iTLmzbBi0o4ot0U1FdX8Rf0qJZZwS4t1TXc3s8/PDVknmPxKg== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/node-http-handler@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.35.0.tgz#338920c743ce2c1a45d3cbd290598da31c1d179a" + integrity sha512-v/7YSNv/+KgWt+2OEKKbjpBhOZrwvah8rwO48XVQkGzgwuyjpjUKdSWIDKnrB6vWeoST66GGlZUmZ2IXQE4nSQ== + dependencies: + "@aws-sdk/abort-controller" "3.35.0" + "@aws-sdk/protocol-http" "3.35.0" + "@aws-sdk/querystring-builder" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/node-http-handler@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.38.0.tgz#00695d7ef8485819cab635e6e1838d8522d96343" @@ -420,6 +1350,25 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/node-http-handler@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.40.0.tgz#26491f11dabbd673c6318376d06af154adc123df" + integrity sha512-qjda6IbxDhbYr8NHmrMurKkbjgLUkfTMVgagDErDK24Nm3Dn5VaO6J4n6c0Q4OLHlmFaRcUfZSTrOo5DAubqCw== + dependencies: + "@aws-sdk/abort-controller" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/querystring-builder" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/property-provider@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.35.0.tgz#70955da41585ba3e920b6d905a02f9cb0b90db62" + integrity sha512-RiYsNFRmJ+OEeigYQowIedsQlk96uWm4TpZVVfkF7Z3wFpIPcc1e/0yKiNw1dj8iGqrFBmHdXwm2yXdRZPi6iA== + dependencies: + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/property-provider@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.38.0.tgz#e7e6625d7f08b7a042ecbe1e6d591553d0bc9957" @@ -428,6 +1377,22 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/property-provider@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.40.0.tgz#243cb1e87e36b1123ddc66d40d344e7580f80470" + integrity sha512-Mx4lkShjsYRwW9ujHA1pcnuubrWQ4kF5/DXWNfUiXuSIO/0Lojp1qTLheyBm4vzkJIlx5umyP6NvRAUkEHSN4Q== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/protocol-http@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.35.0.tgz#adfb62fb3ad1d02554bd3fae8d1e66b8849e7dff" + integrity sha512-rRj5bGX5K5qD5qufc0/kXoh6PWB3YLLeaC/oO5j90vadeztJJc2o9ZxOdJAYQ6YezwpqjD2/IEMLBO1Ab21bcg== + dependencies: + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/protocol-http@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.38.0.tgz#d297701c0e1235c5fbec6f014d5d8cbda2d2b409" @@ -436,13 +1401,47 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/protocol-http@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.40.0.tgz#ce6c7170a59e0a0eb63df5cd7cec87fe05bae680" + integrity sha512-f4ea7/HZkjpvGBrnRIuzc/bhrExWrgDv7eulj4htPukZGHdTqSJD3Jk8lEXWvFuX2vUKQDGhEhCDsqup7YWJQQ== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/querystring-builder@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.35.0.tgz#5d896237974c92cd171e1d47416f491fb67481e4" + integrity sha512-OdNTZDL0+NKUfnQj2vIju3MU9mbo6A/OIOmH+6CsKfN5psyChBmF7ue3Hn0tEnt3KoJLr38+n3MmDS2LPyoM0g== + dependencies: + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-uri-escape" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/querystring-builder@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.38.0.tgz#160b8ba5257d4fc28e9355b29e2992de950a1b1c" integrity sha512-kvIYvkmPZDqHPNpEbSZPprqhtW25fq1fFgnHV9sGfKqkqnL+4LKMf2MmlKgKD+e7DaXAN3zkIaI9ibSjL/5UQQ== dependencies: - "@aws-sdk/types" "3.38.0" - "@aws-sdk/util-uri-escape" "3.37.0" + "@aws-sdk/types" "3.38.0" + "@aws-sdk/util-uri-escape" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/querystring-builder@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.40.0.tgz#f57212e60519d2d79ce6173cbe00fbe17a69bc0d" + integrity sha512-gO24oipnNaxJRBXB7lhLfa96vIMOd8gtMBqJTjelTjS2e1ZP1YY12CNKKTWwafSk8Ge021erZAG/YTOaXGpv+g== + dependencies: + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-uri-escape" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/querystring-parser@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.35.0.tgz#b019fe65265c52365cf2285f7799e04cb87a2b81" + integrity sha512-JjsBq+0b5MaX+jABFbmYIYo+mv+LOyAnh6G/QUMWbmBVhLL5E7U7FGa+HLXXs8YstbverBkoT7NuNpjtE8euIg== + dependencies: + "@aws-sdk/types" "3.35.0" tslib "^2.3.0" "@aws-sdk/querystring-parser@3.38.0": @@ -453,11 +1452,36 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/querystring-parser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.40.0.tgz#5a5ba9c095ad3125a0daf37c33ed1cc8a600d53e" + integrity sha512-XZIyaKQIiZAM6zelCBcsLHhVDOLafi7XIOd3jy6SymGN8ajj3HqUJ/vdQ5G6ISTk18OrqgqcCOI9oNzv+nrBcA== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/service-error-classification@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.35.0.tgz#f6269486c8117f4c8c9220ba9b0eea37747b8ed2" + integrity sha512-UvTx++RxkzJWGI5pcC8UN6X0CILYK+oVEHOtFghH93NEWNYww0ax+T86zeGxe47xqLZ8DX450jktqDN9I6/ntQ== + "@aws-sdk/service-error-classification@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.38.0.tgz#76aa14380809676e1d30ea21f9b7d85031a09a06" integrity sha512-/lWkibTVZz2+/CwembYJ+ETMVlwFWF7UBKdwa6xRIbE+sp74c1li1L6d/PU83PolAt86bLTXaKpdpMsj+d1WAg== +"@aws-sdk/service-error-classification@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.40.0.tgz#c98cbb781bd50e5d90649742ff954d754201c44d" + integrity sha512-c8btKmkvjXczWudXubGdbO3JgmjySBUVC/gCrZDNfwNGsG8RYJJQYYcnmt1gWjelUZsgMDl/2PIzxTlxVF91rA== + +"@aws-sdk/shared-ini-file-loader@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.35.0.tgz#12ea2a55d27b3531f56729fdcd8df708e50beb55" + integrity sha512-hP6E0MY6Yxc+ClplKF37w5xgNQ80Jc1m8/stTDc9+PBVv3kHKL4qJmpeAg3lIqWjeQ7Kj3Pw6McNGqTyNTnZOg== + dependencies: + tslib "^2.3.0" + "@aws-sdk/shared-ini-file-loader@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.37.0.tgz#ca595d9745150f46805f68be6a6c1607d618ad94" @@ -465,6 +1489,17 @@ dependencies: tslib "^2.3.0" +"@aws-sdk/signature-v4@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.35.0.tgz#b3734b02d6b4a8fcdd09160a38785a2efe782517" + integrity sha512-BU7PR0b0ecMSmP5Vd29ZzGdiJhaX56orQ2eb73b5CzR+v08Pb9xLLce0qaN+4opULxIbP2M+8OfUZN9l3Gat9g== + dependencies: + "@aws-sdk/is-array-buffer" "3.35.0" + "@aws-sdk/types" "3.35.0" + "@aws-sdk/util-hex-encoding" "3.35.0" + "@aws-sdk/util-uri-escape" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/signature-v4@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.38.0.tgz#02bf4eb839fa7e49a04e65de12b224a870c9b789" @@ -476,6 +1511,26 @@ "@aws-sdk/util-uri-escape" "3.37.0" tslib "^2.3.0" +"@aws-sdk/signature-v4@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.40.0.tgz#9de1b4e1130f68394df3232882805896c2d20e45" + integrity sha512-Q1GNZJRCS3W2qsRtDsX/b6EOSfMXfr6TW46N3LnLTGYZ3KAN2SOSJ1DsW59AuGpEZyRmOhJ9L/Q5U403+bZMXQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-hex-encoding" "3.37.0" + "@aws-sdk/util-uri-escape" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/smithy-client@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.35.0.tgz#ad1eedb1408775f9062f6aad6a6a7e4e1c60472d" + integrity sha512-HZLrSLb4tMt0VUzeAMaQPMXOfAXzRAV30+KBhD11bbb4agrOcamfA3Fzwl5xNrVyJRpcJ9tbvUN8moHaavNTVg== + dependencies: + "@aws-sdk/middleware-stack" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/smithy-client@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.38.0.tgz#a756b8bd8608e9ff9b69ba27f83d5deb51fd9f1b" @@ -485,16 +1540,44 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/smithy-client@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.41.0.tgz#61154b4813a01dc079e7083805a20e1bc05d3199" + integrity sha512-ldhS0Pf3v6yHCd//kk5DvKcdyeUkKEwxNDRanAp+ekTW68J3XcYgKaPC9sNDhVTDH1zrywTvtEz5zWHEvXjQow== + dependencies: + "@aws-sdk/middleware-stack" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/types@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.35.0.tgz#15515921490a2adcc039071f0b724b13551563c3" + integrity sha512-6HGiPfw2hgs9q+rSFUqIs7g7V1BmQAwJYiZJ1XexVX1BgqvVe9zcRvyLqrv5zeWM/zj4pJ7q6JBoXjlQWb1ybw== + "@aws-sdk/types@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.38.0.tgz#16b3c2d78512d7f193edb519de46c5ef00fffd2b" integrity sha512-Opux3HLwMlWb7GIJxERsOnmbHrT2A1gsd8aF5zHapWPPH5Z0rYsgTIq64qgim896XlKlOw6/YzhD5CdyNjlQWg== -"@aws-sdk/types@^3.1.0": +"@aws-sdk/types@3.40.0": version "3.40.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.40.0.tgz#a9d7926fcb9b699bc46be975033559d2293e60d1" integrity sha512-KpILcfvRaL88TLvo3SY4OuCCg90SvcNLPyjDwUuBqiOyWODjrKShHtAPJzej4CLp92lofh+ul0UnBfV9Jb/5PA== +"@aws-sdk/types@^3.1.0": + version "3.36.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.36.0.tgz#6d561df1070f039f29b2259affdd1201f3d06472" + integrity sha512-OeaTDZqo4OfGahgsZF2viOWxSSNColEUf8RbKAWNlke3nkMu3JW8kkft1Qte6jvoQxZ3jOQWi33Z4LUxix/V7A== + +"@aws-sdk/url-parser@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.35.0.tgz#1830f1fc6487c56671167c175dada52de8e36fce" + integrity sha512-FquGiP8qRohixhonE8til6e6V8IRZEyXIFdrItN48YMfQPynYiP+k9T9uSpXrhZUpnd0vbMdkjnYOpGVUKNtNA== + dependencies: + "@aws-sdk/querystring-parser" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/url-parser@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.38.0.tgz#32bea12a3f4a1e3b4f83987ffb5543347b1b9d14" @@ -504,6 +1587,29 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" +"@aws-sdk/url-parser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.40.0.tgz#9ccd00a2026605d5eaef630e94b6632cc9598ec3" + integrity sha512-HwNV+HX7bHgLk5FzTOgdXANsC0SeVz5PMC4Nh+TLz2IoeQnrw4H8dsA4YNonncjern5oC5veKRjQeOoCL5SlSQ== + dependencies: + "@aws-sdk/querystring-parser" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/util-arn-parser@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.37.0.tgz#807691690c4c52c1e8e0a362bf5767291b626f1f" + integrity sha512-njIYn8gzm7Ms17A2oEu0vN/0GJpgq7cNFFtzBrM1cPtrc1jhMRJx5hzS7uX5h6ll8BM92bA3y00evRZFHxQPVQ== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-base64-browser@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-3.35.0.tgz#a0ea985eb5377f30b1ad1797707f1b2e1c66d06a" + integrity sha512-MwptHeiZcYFEJddxeH9xq06T1jmdCLDOerdAa7aSlWstONzarm/YjYlJKxZLrv6IkWmPUCzMpMoc3T1LppPHOg== + dependencies: + tslib "^2.3.0" + "@aws-sdk/util-base64-browser@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-3.37.0.tgz#4bf105de91e5e17ded644557dac6851c30e992d2" @@ -511,6 +1617,14 @@ dependencies: tslib "^2.3.0" +"@aws-sdk/util-base64-node@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-3.35.0.tgz#5bad910a73a4b56fd6fc7b8554f74a95881eda72" + integrity sha512-NgKGFj+6yjdOqVl9A7mbsN2mh5G1YAE7F3Ct92pFFhCYsDKMCtxVVIDT5zA7Cq9c/b2OGBi2SUcr/xiljeuHLw== + dependencies: + "@aws-sdk/util-buffer-from" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/util-base64-node@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-3.37.0.tgz#81ff164d227db8faeb910af33ff5f861269d6d67" @@ -519,6 +1633,13 @@ "@aws-sdk/util-buffer-from" "3.37.0" tslib "^2.3.0" +"@aws-sdk/util-body-length-browser@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.35.0.tgz#752df024c6d23b8e89e91fa8f350689aaedfd491" + integrity sha512-mZMLMxPYDBkeavQGTpXkA9aoGyhOOw8upZcmuXbKBTsOYozeKctbjtrfNbjDI5hHl2+s8e29mDijx5zmokvnww== + dependencies: + tslib "^2.3.0" + "@aws-sdk/util-body-length-browser@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.37.0.tgz#2e3a375ac191a9bacd40a6b3479ee402dcb5769d" @@ -526,6 +1647,13 @@ dependencies: tslib "^2.3.0" +"@aws-sdk/util-body-length-node@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.35.0.tgz#0d696626dde1656db910a19847b324a88cf30cef" + integrity sha512-FNsk1ckQhi0fLpWdH4IYj1Ds6vvkvu/dk21kzZNAc4DflC+vhMtILJij2C23JBc2tKstHavgxiKUlmULWxKecA== + dependencies: + tslib "^2.3.0" + "@aws-sdk/util-body-length-node@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.37.0.tgz#d6170dafd351799687d583f818a4a3924b61cbec" @@ -533,6 +1661,14 @@ dependencies: tslib "^2.3.0" +"@aws-sdk/util-buffer-from@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.35.0.tgz#a37d27a3486304752b60d47f74589266c63148c8" + integrity sha512-wS74/p3lwNS9eLDRKjNCyaEux01b6R0yEg5+kXxvLqK1wcAHYhuVC+Hk4Plg5kP96WwGvfiRp5duU2P4RkxicQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/util-buffer-from@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.37.0.tgz#298d4a925b9f0ca23f99617648cd9fb3896b573c" @@ -541,6 +1677,21 @@ "@aws-sdk/is-array-buffer" "3.37.0" tslib "^2.3.0" +"@aws-sdk/util-config-provider@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.40.0.tgz#acefff264d6650450a1f8b056a63830a454b756d" + integrity sha512-NjZGrA4mqhpr6gkVCAUweurP0Z9d3vFyXJCtulC0BFbpKAnKCf/crSK56NwUaNhAEMCkSuBvjRFzkbfT+HO8bA== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-credentials@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-credentials/-/util-credentials-3.35.0.tgz#186d12e59228257eccbf316046ef0dab5ecf5ffb" + integrity sha512-n8HN0oHfVvwT2OMLd9x5cyWofalAfP66zXdFJr9UlrApqvKqozLIdAgU1YaQFvzQETLjq+626INJjdWWgdsEjA== + dependencies: + "@aws-sdk/shared-ini-file-loader" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/util-credentials@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-credentials/-/util-credentials-3.37.0.tgz#76261c3d7c20bee5d28e5c17741adf19558b3b67" @@ -549,6 +1700,22 @@ "@aws-sdk/shared-ini-file-loader" "3.37.0" tslib "^2.3.0" +"@aws-sdk/util-format-url@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-format-url/-/util-format-url-3.35.0.tgz#2b2b6516df4427e8b8ce449b9abe923ed4656006" + integrity sha512-57hHbSWw95DchH2LgZfDZ1luUeZt3ZcTCDtwMviUStCEcDgPsHmSLLkND1+ac+mRuXIHtWCGsHc0J5xWFUBMvw== + dependencies: + "@aws-sdk/querystring-builder" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + +"@aws-sdk/util-hex-encoding@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.35.0.tgz#07f1d6facb828c1faebc88b819536b41992e872a" + integrity sha512-umoRRRL/elzwsMz81qCRNzFZzEfMD+Lk1bawJDmJQ/gmc3vBV9KK4CzjqKPEUbQmDhqm7X2IGBDY32oKJ8CTQg== + dependencies: + tslib "^2.3.0" + "@aws-sdk/util-hex-encoding@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.37.0.tgz#40ce21b5ff682e811e98ac7476692ee55ae61493" @@ -557,9 +1724,16 @@ tslib "^2.3.0" "@aws-sdk/util-locate-window@^3.0.0": - version "3.37.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.37.0.tgz#e041f411e5e6a235e5bcffacc4b7fa90f25d8d01" - integrity sha512-NvDCfOhLLVHp27oGUUs8EVirhz91aX5gdxGS7J/sh5PF0cNN8rwaR1vSLR7BxPmJHMO7NH7i9EwiELfLfYcq6g== + version "3.36.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.36.0.tgz#8cf066f2bea665ba5352ce293844e9f6276e29d8" + integrity sha512-w5k3siBOGy7bAfZG/p0WIHpedHNb4OQ0wUSDNvd6Kzn4dkqHPTWoA1NrCEuFk9Gwkrr1yNKxgVlo0SCtgznxPw== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-uri-escape@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.35.0.tgz#8904bea6f3c281bff87353437c01f8ddfbe87aa1" + integrity sha512-5+4Pb4+SqQTyd/E1P2NG1TwOeRGDOdBzS4m880i96GVNgGUjWWzCqKY+JC/AUtpv2IG6VppRUVWGnp7Pz8y3qg== dependencies: tslib "^2.3.0" @@ -570,6 +1744,15 @@ dependencies: tslib "^2.3.0" +"@aws-sdk/util-user-agent-browser@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.35.0.tgz#157345d84245491b72461a726b1662e1ea2668a4" + integrity sha512-TdH2V+kVxKWT1YIxS094oeOegvRDOXPB4kfbJr43oWdrVi9F5a5Ub/ZWeofkczRUr7hEq6gK8pwzDEPgp1lp0Q== + dependencies: + "@aws-sdk/types" "3.35.0" + bowser "^2.11.0" + tslib "^2.3.0" + "@aws-sdk/util-user-agent-browser@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.38.0.tgz#bdc689e57c2d144fa76d997075d01398bb51e790" @@ -579,6 +1762,24 @@ bowser "^2.11.0" tslib "^2.3.0" +"@aws-sdk/util-user-agent-browser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.40.0.tgz#d9f4f49af35895df260598a333a8b792b56e9f76" + integrity sha512-C69sTI26bV2EprTv3DTXu9XP7kD9Wu4YVPBzqztOYArd2GDYw3w+jS8SEg3XRbjAKY/mOPZ2Thw4StjpZlWZiA== + dependencies: + "@aws-sdk/types" "3.40.0" + bowser "^2.11.0" + tslib "^2.3.0" + +"@aws-sdk/util-user-agent-node@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.35.0.tgz#1aadf61587aa70706c947a494cd9a281b2fd7586" + integrity sha512-6xR7elRJtADzhKIJINqmHve39PM8KlwdoxyX1X4T+NVa+iscj5V7iLMyv82o2EpkpBg0nYosuw0HPOBMlHQ1/w== + dependencies: + "@aws-sdk/node-config-provider" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/util-user-agent-node@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.38.0.tgz#4f98a5287b9c3d25e3badaa29a1fbee517f72ea4" @@ -588,13 +1789,44 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" -"@aws-sdk/util-utf8-browser@3.37.0", "@aws-sdk/util-utf8-browser@^3.0.0": +"@aws-sdk/util-user-agent-node@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.40.0.tgz#76240a4ee05e409ad1267854761c53e746e9bcdf" + integrity sha512-cjIzd0hRZFTTh7iLJD6Bciu++Em1iaM1clyG02xRl0JD5DEtDSR1zO02uu+AeM7GSLGOxIvwOkK2j8ySPAOmBA== + dependencies: + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/util-utf8-browser@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.35.0.tgz#7a38a11badd5f8e50f1c1f49eb8684693359b314" + integrity sha512-STSEn8uyh6FbMDnHAdhYS7R25i0mDtryZXJDEeEfKJkNJmqK5bsWIdcYxsr0y4Gj3yy15snJNYL8S3lJxv2mcQ== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-utf8-browser@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.37.0.tgz#d896899f4c475ceeaf8b77c5d7cdc453e5fe6b83" integrity sha512-tuiOxzfqet1kKGYzlgpMGfhr64AHJnYsFx2jZiH/O6Yq8XQg43ryjQlbJlim/K/XHGNzY0R+nabeJg34q3Ua1g== dependencies: tslib "^2.3.0" +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.36.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.36.0.tgz#f80218f44d90bb39bf1bf9a902599ad1b7c4e6a8" + integrity sha512-xVUtGIemnh2gD+1s6DZzdGNlgVxHXKlR/sT4G1afysifKrbyXMbh2Z3Ez+BgunWXQRbVXFmNQXHKHYuebMDe5w== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-utf8-node@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.35.0.tgz#81e3ba82e367278ad88dcc619a82ac5178a5b927" + integrity sha512-mc8TVu1TzbN4YSf8UsoNGF8LSfnt1HONpOgfc664x5OqtU6874qlyJg2FEFMwVQMcYnzZH64FlMWk5ZDbz3UFQ== + dependencies: + "@aws-sdk/util-buffer-from" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/util-utf8-node@3.37.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.37.0.tgz#300912cce55d72c18213190237d6ab943e17b5bf" @@ -603,6 +1835,15 @@ "@aws-sdk/util-buffer-from" "3.37.0" tslib "^2.3.0" +"@aws-sdk/util-waiter@3.35.0": + version "3.35.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.35.0.tgz#8c6dc9e95feb848f51d091b043096e7f3db5f2f5" + integrity sha512-hnOkWorTjr0BnpoCiGJNiHU9D6iKUJrVp+TOMH4AqRcdfBpPNJpeFUlFmAsT03og7IiyjXRcxHiVC5Gx5pGDDw== + dependencies: + "@aws-sdk/abort-controller" "3.35.0" + "@aws-sdk/types" "3.35.0" + tslib "^2.3.0" + "@aws-sdk/util-waiter@3.38.0": version "3.38.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.38.0.tgz#e7406ceb556e439a8c9918b8c90aefb58f882b5b" @@ -612,32 +1853,48 @@ "@aws-sdk/types" "3.38.0" tslib "^2.3.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== - dependencies: - "@babel/highlight" "^7.16.0" - -"@babel/compat-data@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.0.tgz#ea269d7f78deb3a7826c39a4048eecda541ebdaa" - integrity sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" - integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helpers" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" +"@aws-sdk/util-waiter@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.40.0.tgz#91c537efc9d0129fb24d9bdab86acbfd797ddf1f" + integrity sha512-jdxwNEZdID49ZvyAnxaeNm5w2moIfMLOwj/q6TxKlxYoXMs16FQWkhyfGue0vEASzchS49ewbyt+KBqpT31Ebg== + dependencies: + "@aws-sdk/abort-controller" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/xml-builder@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.37.0.tgz#17aceb34188a58b5c25b49344f66135b0fe95f79" + integrity sha512-Vf0f4ZQ+IBo/l9wUaTOXLqqQO9b/Ll5yPbg+EhHx8zlHbTHIm89ettkVCGyT/taGagC1X+ZeTK9maX6ymEOBow== + dependencies: + tslib "^2.3.0" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + +"@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10" + integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og== + dependencies: + "@babel/code-frame" "^7.15.8" + "@babel/generator" "^7.15.8" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.8" + "@babel/helpers" "^7.15.4" + "@babel/parser" "^7.15.8" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.6" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -645,113 +1902,113 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.16.0", "@babel/generator@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" - integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== +"@babel/generator@^7.15.4", "@babel/generator@^7.15.8", "@babel/generator@^7.7.2": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" + integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.6" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-compilation-targets@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz#01d615762e796c17952c29e3ede9d6de07d235a8" - integrity sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg== +"@babel/helper-compilation-targets@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== dependencies: - "@babel/compat-data" "^7.16.0" + "@babel/compat-data" "^7.15.0" "@babel/helper-validator-option" "^7.14.5" browserslist "^4.16.6" semver "^6.3.0" -"@babel/helper-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== +"@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== dependencies: - "@babel/helper-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.4" -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== +"@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.4" -"@babel/helper-member-expression-to-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" - integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== +"@babel/helper-member-expression-to-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.4" -"@babel/helper-module-imports@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" - integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== +"@babel/helper-module-imports@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.4" -"@babel/helper-module-transforms@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" - integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== +"@babel/helper-module-transforms@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2" + integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-simple-access" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.6" -"@babel/helper-optimise-call-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" - integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== +"@babel/helper-optimise-call-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.4" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-replace-supers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" - integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== +"@babel/helper-replace-supers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" -"@babel/helper-simple-access@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" - integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== +"@babel/helper-simple-access@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.4" -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.15.4" -"@babel/helper-validator-identifier@^7.15.7": +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== @@ -761,28 +2018,28 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helpers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.0.tgz#875519c979c232f41adfbd43a3b0398c2e388183" - integrity sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ== +"@babel/helpers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" + integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== dependencies: - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" -"@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.14.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.7.2": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" - integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== +"@babel/parser@^7.1.0", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8", "@babel/parser@^7.7.2": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" + integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -869,50 +2126,50 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" - integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" + integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/runtime-corejs3@^7.12.1": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz#58a7fb00e6948508f12f53a303993e8b6e2f6c70" - integrity sha512-Oi2qwQ21X7/d9gn3WiwkDTJmq3TQtYNz89lRnoFy8VeZpWlsyXvzSwiRrRZ8cXluvSwqKxqHJ6dBd9Rv+p0ZGQ== + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz#403139af262b9a6e8f9ba04a6fdcebf8de692bf1" + integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg== dependencies: - core-js-pure "^3.19.0" + core-js-pure "^3.16.0" regenerator-runtime "^0.13.4" -"@babel/template@^7.16.0", "@babel/template@^7.3.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.0.tgz#965df6c6bfc0a958c1e739284d3c9fa4a6e3c45b" - integrity sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" +"@babel/template@^7.15.4", "@babel/template@^7.3.3": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.7.2": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== +"@babel/types@^7.0.0", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + 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.15.7" + "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -967,9 +2224,9 @@ minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== "@iarna/toml@2.2.5": version "2.2.5" @@ -1253,15 +2510,20 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": +"@npmcli/ci-detect@^1.2.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== +"@npmcli/ci-detect@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" + integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== + "@npmcli/config@^2.3.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.1.tgz#41d80ce272831461b5cb158afa110525d4be0fed" - integrity sha512-F/8R/Zqun8682TgaCILUNoaVfd1LVaYZ/jcVt9KWzfKpzcPus1zEApAl54PqVqVJbNq6f01QTDQHD6L/n56BXw== + version "2.3.0" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.0.tgz#364fbe942037e562a832a113206e14ccb651f7bc" + integrity sha512-yjiC1xv7KTmUTqfRwN2ZL7BHV160ctGF0fLXmKkkMXj40UOvBe45Apwvt5JsFRtXSoHkUYy1ouzscziuWNzklg== dependencies: ini "^2.0.0" mkdirp-infer-owner "^2.0.0" @@ -1533,9 +2795,9 @@ parse-json "^5.0.0" "@semantic-release/github@^8.0.0": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.2.tgz#80114a41f6ec8ab6c0d38a436b48ff3f2223ab16" - integrity sha512-wIbfhOeuxlYzMTjtSAa2xgr54n7ZuPAS2gadyTWBpUt2PNAPgla7A6XxCXJnaKPgfVF0iFfSk3B+KlVKk6ByVg== + version "8.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.1.tgz#58d6bc5cdb4b4beaa0a106a9a9ad420318144e4f" + integrity sha512-T01lfh4yBZodAeo8t0U+W5hmPYR9BdnfwLDerXnGaYeLXm8+KMx4mQEBAf/UbRVlzmIKTqMx+/s9fY/mSQNV0A== dependencies: "@octokit/rest" "^18.0.0" "@semantic-release/error" "^2.2.0" @@ -1549,17 +2811,17 @@ https-proxy-agent "^5.0.0" issue-parser "^6.0.0" lodash "^4.17.4" - mime "^3.0.0" + mime "^2.4.3" p-filter "^2.0.0" p-retry "^4.0.0" url-join "^4.0.0" "@semantic-release/npm@^8.0.0": - version "8.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-8.0.3.tgz#69378ce529bbd263aa8fc899b2d0f874114e0302" - integrity sha512-Qbg7x/O1t3sJqsv2+U0AL4Utgi/ymlCiUdt67Ftz9HL9N8aDML4t2tE0T9MBaYdqwD976hz57DqHHXKVppUBoA== + version "8.0.0" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-8.0.0.tgz#ed1ff7fe59498e909ee3fe567134ae2e51ceb7e1" + integrity sha512-MAlynjIaN5XwBEzsq3xbZ8I+riD9zhLvpPqGCPaZ0j/ySbR0Sg3YG1MYv03fC1aygPFFC5RwefMxKids9llvDg== dependencies: - "@semantic-release/error" "^3.0.0" + "@semantic-release/error" "^2.2.0" aggregate-error "^3.0.0" execa "^5.0.0" fs-extra "^10.0.0" @@ -1594,20 +2856,41 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw== -"@sinonjs/commons@^1.7.0": +"@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.3": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== dependencies: type-detect "4.0.8" +"@sinonjs/fake-timers@^7.0.4", "@sinonjs/fake-timers@^7.1.0", "@sinonjs/fake-timers@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== + version "8.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz#1c1c9a91419f804e59ae8df316a07dd1c3a76b94" + integrity sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew== dependencies: "@sinonjs/commons" "^1.7.0" +"@sinonjs/samsam@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-6.0.2.tgz#a0117d823260f282c04bff5f8704bdc2ac6910bb" + integrity sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ== + dependencies: + "@sinonjs/commons" "^1.6.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" + +"@sinonjs/text-encoding@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" + integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -1822,9 +3105,9 @@ integrity sha512-B/SvVZMrLRUI9mOoguNNz58gV8A5PDtcGIaUe5PYmzAUTsIJ+ZAn/ujwBIuGIU3mRHY5SfV9dyWfnhOWtOVh6A== "@types/glob@*": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + version "7.1.4" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" + integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -1980,9 +3263,9 @@ integrity sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA== "@types/node@*": - version "16.11.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" - integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== + version "16.10.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" + integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== "@types/node@14.17.33": version "14.17.33" @@ -2048,11 +3331,16 @@ resolved "https://registry.yarnpkg.com/@types/semver-utils/-/semver-utils-1.1.1.tgz#4260b9ce13344725069a1ff86bd2f4d6c70a443e" integrity sha512-WLZZQdwo5P+H6R+bDDCFqFSlP5Jtk6gyXpE0R0KAVQbcMGmxpVsNX8dah640hY4+PpRG2+Ph3dcwDHzrOAOZ7A== -"@types/semver@7.3.9", "@types/semver@^7.1.0": +"@types/semver@7.3.9": version "7.3.9" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== +"@types/semver@^7.1.0": + version "7.3.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.8.tgz#508a27995498d7586dcecd77c25e289bfaf90c59" + integrity sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now== + "@types/shelljs@0.8.9": version "0.8.9" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.9.tgz#45dd8501aa9882976ca3610517dac3831c2fbbf4" @@ -2061,6 +3349,13 @@ "@types/glob" "*" "@types/node" "*" +"@types/sinon@10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.2.tgz#f360d2f189c0fd433d14aeb97b9d705d7e4cc0e4" + integrity sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw== + dependencies: + "@sinonjs/fake-timers" "^7.1.0" + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -2271,9 +3566,9 @@ tunnel "^0.0.6" "@yarnpkg/fslib@^2.4.0", "@yarnpkg/fslib@^2.5.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.6.0.tgz#d51b7c389c8f42a79babfc5d11ccbd65769a9620" - integrity sha512-NgK7aYYNrFOFJGcWWEDXHHYNt93L3A0Ojv90Xl9+f72T+CaFkOAXyK2XBwEYreot7lT1NeopcnkmFRjHgKRKgQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.5.2.tgz#6dcfbe12fe2d1bce14cb6e4518054abb1dd7c48d" + integrity sha512-Tonb3jXsxsGB+uTlzG6r2zcAUekIG0FfCZV/kM14fPvTE3Z1wC0cMtiD4IUzxSqyhC/zR+T1pLaTPT3xDzSvqg== dependencies: "@yarnpkg/libzip" "^2.2.2" tslib "^1.13.0" @@ -2294,7 +3589,7 @@ "@types/emscripten" "^1.38.0" tslib "^1.13.0" -"@yarnpkg/parsers@2.4.1", "@yarnpkg/parsers@^2.3.0": +"@yarnpkg/parsers@2.4.1": version "2.4.1" resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-2.4.1.tgz#3e9d834b22783245064599835ffbb17eb806497e" integrity sha512-QqJ5asvS5Fol9MjTy8vS8512T2djEA0Uglu23Ap6G4AqbUWykC83bCnY4AjSyGxFV1rOlkWBn7RKsAqei/9cLw== @@ -2302,6 +3597,14 @@ js-yaml "^3.10.0" tslib "^1.13.0" +"@yarnpkg/parsers@^2.3.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-2.4.0.tgz#5d092939022c96b256eaea461816ef2b7d77fa1b" + integrity sha512-XWgiNGh4MkhdBTJVEbXEqzk66JKjvxTtKGeLPqo3rnJ7JiJnRaK2n9MLTKQB0uoRMWYzPlISdIlok6H9OdlOVQ== + dependencies: + js-yaml "^3.10.0" + tslib "^1.13.0" + "@yarnpkg/pnp@^2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@yarnpkg/pnp/-/pnp-2.3.2.tgz#9a052a06bf09c9f0b7c31e0867a7e725cb6401ed" @@ -2593,9 +3896,9 @@ asn1.js@^5.0.0: safer-buffer "^2.1.0" asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" @@ -2614,6 +3917,15 @@ auth-header@1.0.0: resolved "https://registry.yarnpkg.com/auth-header/-/auth-header-1.0.0.tgz#ea24fdc5588e1eb8b750df8655a396aa48fc9076" integrity sha512-CPPazq09YVDUNNVWo4oSPTQmtwIzHusZhQmahCKvIsk0/xH6U3QsMAv3sM+7+Q0B1K2KJ/Q38OND317uXs4NHA== +aws-sdk-client-mock@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/aws-sdk-client-mock/-/aws-sdk-client-mock-0.5.5.tgz#c94278d1b67e5a6f8c7ecbc538113933eba42102" + integrity sha512-djwyYj4vRAXGGH0nycd04/qxj4lK4UscK12dgRgYLigFzQ8EdM0+eZoFobbjXnXoPBG+YeN57UqrEbE1YW1qag== + dependencies: + "@types/sinon" "10.0.2" + sinon "^11.1.1" + tslib "^2.1.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -2647,14 +3959,14 @@ babel-jest@^27.3.1: slash "^3.0.0" babel-plugin-istanbul@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + version "6.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" + istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" babel-plugin-jest-hoist@^27.2.0: @@ -2726,12 +4038,12 @@ before-after-hook@^2.2.0: integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== bin-links@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" - integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== + version "2.2.1" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.2.1.tgz#347d9dbb48f7d60e6c11fe68b77a424bee14d61b" + integrity sha512-wFzVTqavpgCCYAh8SVBdnZdiQMxTkGR+T3b14CNpBXIBe2neJWaMGAZ55XWWHELJJ89dscuq0VCBqcVaIOgCMg== dependencies: cmd-shim "^4.0.1" - mkdirp-infer-owner "^2.0.0" + mkdirp "^1.0.3" npm-normalize-package-bin "^1.0.0" read-cmd-shim "^2.0.0" rimraf "^3.0.0" @@ -2802,15 +4114,15 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.16.6: - version "4.17.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.6.tgz#c76be33e7786b497f66cad25a73756c8b938985d" - integrity sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw== + version "4.17.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624" + integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ== dependencies: - caniuse-lite "^1.0.30001274" - electron-to-chromium "^1.3.886" + caniuse-lite "^1.0.30001264" + electron-to-chromium "^1.3.857" escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" + node-releases "^1.1.77" + picocolors "^0.2.1" bs-logger@0.x: version "0.2.6" @@ -2933,10 +4245,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -caniuse-lite@^1.0.30001274: - version "1.0.30001278" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz#51cafc858df77d966b17f59b5839250b24417fff" - integrity sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg== +caniuse-lite@^1.0.30001264: + version "1.0.30001265" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3" + integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw== cardinal@^2.1.1: version "2.1.1" @@ -3011,7 +4323,7 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.2.0: +ci-info@^3.1.1, ci-info@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== @@ -3237,9 +4549,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.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" - integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== + 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" @@ -3255,15 +4567,15 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -core-js-pure@^3.19.0: - version "3.19.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.1.tgz#edffc1fc7634000a55ba05e95b3f0fe9587a5aa4" - integrity sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ== +core-js-pure@^3.16.0: + version "3.18.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.2.tgz#d8cc11d4885ea919f3de776d45e720e4c769d406" + integrity sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA== core-js@^3.6.5: - version "3.19.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" - integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== + version "3.18.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.2.tgz#63a551e8a29f305cd4123754846e65896619ba5b" + integrity sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ== core-util-is@1.0.2: version "1.0.2" @@ -3685,10 +4997,10 @@ editorconfig@0.15.3: semver "^5.6.0" sigmund "^1.0.1" -electron-to-chromium@^1.3.886: - version "1.3.890" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.890.tgz#e7143b659f73dc4d0512d1ae4baeb0fb9e7bc835" - integrity sha512-VWlVXSkv0cA/OOehrEyqjUTHwV8YXCPTfPvbtoeU2aHR21vI4Ejh5aC4AxUwOmbLbBgb6Gd3URZahoCxtBqCYQ== +electron-to-chromium@^1.3.857: + version "1.3.864" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.864.tgz#6a993bcc196a2b8b3df84d28d5d4dd912393885f" + integrity sha512-v4rbad8GO6/yVI92WOeU9Wgxc4NA0n4f6P1FvZTY+jyY7JHEhw3bduYu60v3Q1h81Cg6eo4ApZrFPuycwd5hGw== email-addresses@5.0.0: version "5.0.0" @@ -3764,12 +5076,11 @@ entities@~2.1.0: integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== env-ci@^5.0.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.4.1.tgz#814387ddd6857b37472ef612361f34d720c29a18" - integrity sha512-xyuCtyFZLpnW5aH0JstETKTSMwHHQX4m42juzEZzvbUCJX7RiPVlhASKM0f/cJ4vvI/+txMkZ7F5To6dCdPYhg== + version "5.0.2" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.0.2.tgz#48b6687f8af8cdf5e31b8fcf2987553d085249d9" + integrity sha512-Xc41mKvjouTXD3Oy9AqySz1IeyvJvHZ20Twf5ZLYbNpPPIuCnL/qHCmNlD01LoNy0JTunw9HPYVptD19Ac7Mbw== dependencies: - execa "^5.0.0" - fromentries "^1.3.2" + execa "^4.0.0" java-properties "^1.0.0" env-paths@^2.2.0: @@ -4048,9 +5359,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== esutils@^2.0.2: version "2.0.3" @@ -4169,9 +5480,9 @@ extsprintf@1.3.0: integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -4342,11 +5653,6 @@ from2@^2.3.0: inherits "^2.0.1" readable-stream "^2.0.0" -fromentries@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -4567,9 +5873,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + version "13.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" + integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== dependencies: type-fest "^0.20.2" @@ -5007,6 +6313,13 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" +is-ci@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" + integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== + dependencies: + ci-info "^3.1.1" + is-cidr@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" @@ -5192,6 +6505,11 @@ is@^3.2.1: resolved "https://registry.yarnpkg.com/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" integrity sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg== +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -5218,12 +6536,12 @@ issue-parser@^6.0.0: lodash.isstring "^4.0.1" lodash.uniqby "^4.7.0" -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^4.0.3: +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -5233,17 +6551,6 @@ istanbul-lib-instrument@^4.0.3: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" -istanbul-lib-instrument@^5.0.4: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -5254,18 +6561,18 @@ istanbul-lib-report@^3.0.0: supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" - integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.3.tgz#974d682037f6d12b15dc55f9a2a5f8f1ea923831" + integrity sha512-0i77ZFLsb9U3DHi22WzmIngVzfoyxxbQcZRqlF3KoKmCJGq9nhFHoGi8FqBztN2rE8w6hURnZghetn0xpkVb6A== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -5364,7 +6671,17 @@ jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.0.0, jest-diff@^27.0.6, jest-diff@^27.2.5, jest-diff@^27.3.1: +jest-diff@^27.0.0: + version "27.2.5" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.5.tgz#908f7a6aca5653824516ad30e0a9fd9767e53623" + integrity sha512-7gfwwyYkeslOOVQY4tVq5TaQa92mWfC9COsVYMNVYyJTOYAqbIkoD3twi5A+h+tAPtAelRxkqY6/xu+jwTr0dA== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.0.6" + jest-get-type "^27.0.6" + pretty-format "^27.2.5" + +jest-diff@^27.0.6, jest-diff@^27.2.5, jest-diff@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.3.1.tgz#d2775fea15411f5f5aeda2a5e02c2f36440f6d55" integrity sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ== @@ -5432,7 +6749,12 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-get-type@^27.0.6, jest-get-type@^27.3.1: +jest-get-type@^27.0.6: + version "27.0.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" + integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== + +jest-get-type@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg== @@ -5739,7 +7061,19 @@ jest-util@^26.0.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.0.0, jest-util@^27.3.1: +jest-util@^27.0.0: + version "27.2.5" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.2.5.tgz#88740c4024d223634a82ce7c2263e8bc6df3b3ba" + integrity sha512-QRhDC6XxISntMzFRd/OQ6TGsjbzA5ONO0tlAj2ElHs155x1aEr0rkYJBEysG6H/gZVH3oGFzCdAB/GA8leh8NQ== + dependencies: + "@jest/types" "^27.2.5" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^3.0.0" + picomatch "^2.2.3" + +jest-util@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.3.1.tgz#a58cdc7b6c8a560caac9ed6bdfc4e4ff23f80429" integrity sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw== @@ -5959,19 +7293,24 @@ jsprim@^1.2.2: verror "1.10.0" just-diff-apply@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-3.1.2.tgz#710d8cda00c65dc4e692df50dbe9bac5581c2193" - integrity sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ== + version "3.0.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-3.0.0.tgz#a77348d24f0694e378b57293dceb65bdf5a91c4f" + integrity sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w== just-diff@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-3.1.1.tgz#d50c597c6fd4776495308c63bdee1b6839082647" integrity sha512-sdMWKjRq8qWZEjDcVA6llnUT8RDEBIfOiGpYFPYa9u+2c39JCsejktSP7mj5eRid5EIvTzIpQ2kDOCw1Nq9BjQ== +just-extend@^4.0.2: + version "4.2.1" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" + integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== + keyv@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376" - integrity sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" + integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== dependencies: json-buffer "3.0.1" @@ -6175,6 +7514,11 @@ lodash.escaperegexp@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" @@ -6257,6 +7601,27 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^8.0.14: + version "8.0.14" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" + integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.0.5" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + promise-retry "^2.0.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" + make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" @@ -6279,12 +7644,12 @@ make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: socks-proxy-agent "^6.0.0" ssri "^8.0.0" -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: - tmpl "1.0.5" + tmpl "1.0.x" map-obj@^1.0.0: version "1.0.1" @@ -6499,10 +7864,10 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.50.0" -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== +mime@^2.4.3: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^2.1.0: version "2.1.0" @@ -6743,6 +8108,17 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nise@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/nise/-/nise-5.1.0.tgz#713ef3ed138252daef20ec035ab62b7a28be645c" + integrity sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@sinonjs/fake-timers" "^7.0.4" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + path-to-regexp "^1.7.0" + nock@13.2.1: version "13.2.1" resolved "https://registry.yarnpkg.com/nock/-/nock-13.2.1.tgz#fcf5bdb9bb9f0554a84c25d3333166c0ffd80858" @@ -6761,9 +8137,9 @@ node-emoji@^1.10.0: lodash "^4.17.21" node-fetch@^2.6.1: - version "2.6.6" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" - integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== + version "2.6.5" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" + integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== dependencies: whatwg-url "^5.0.0" @@ -6784,14 +8160,14 @@ node-gyp@^7.1.0, node-gyp@^7.1.2: which "^2.0.2" node-gyp@^8.0.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.0.tgz#6e1112b10617f0f8559c64b3f737e8109e5a8338" - integrity sha512-Bi/oCm5bH6F+FmzfUxJpPaxMEyIhszULGR3TprmTeku8/dMFcdTcypk120NeZqEt54r1BrgEKtm2jJiuIKE28Q== + version "8.2.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.2.0.tgz#ef509ccdf5cef3b4d93df0690b90aa55ff8c7977" + integrity sha512-KG8SdcoAnw2d6augGwl1kOayALUrXW/P2uOAm2J2+nmW/HjZo7y+8TDg7LejxbekOOSv3kzhq+NSUYkIDAX8eA== dependencies: env-paths "^2.2.0" glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" + make-fetch-happen "^8.0.14" nopt "^5.0.0" npmlog "^4.1.2" rimraf "^3.0.2" @@ -6817,10 +8193,10 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^1.1.77: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== node.extend@^2.0.0: version "2.0.2" @@ -7441,6 +8817,13 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -7463,10 +8846,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== picomatch@^2.0.4, picomatch@^2.2.3: version "2.3.0" @@ -7547,7 +8930,17 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.0, pretty-format@^27.0.6, pretty-format@^27.3.1: +pretty-format@^27.0.0, pretty-format@^27.2.5: + version "27.2.5" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.5.tgz#7cfe2a8e8f01a5b5b29296a0b70f4140df0830c5" + integrity sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g== + dependencies: + "@jest/types" "^27.2.5" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +pretty-format@^27.0.6, pretty-format@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.3.1.tgz#7e9486365ccdd4a502061fa761d3ab9ca1b78df5" integrity sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA== @@ -8211,9 +9604,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== shelljs@0.8.4: version "0.8.4" @@ -8273,6 +9666,18 @@ simple-git@2.47.0: "@kwsites/promise-deferred" "^1.1.1" debug "^4.3.2" +sinon@^11.1.1: + version "11.1.2" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-11.1.2.tgz#9e78850c747241d5c59d1614d8f9cbe8840e8674" + integrity sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw== + dependencies: + "@sinonjs/commons" "^1.8.3" + "@sinonjs/fake-timers" "^7.1.2" + "@sinonjs/samsam" "^6.0.2" + diff "^5.0.0" + nise "^5.1.0" + supports-color "^7.2.0" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -8293,6 +9698,15 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +socks-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" + integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== + dependencies: + agent-base "^6.0.2" + debug "4" + socks "^2.3.3" + socks-proxy-agent@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3" @@ -8302,7 +9716,7 @@ socks-proxy-agent@^6.0.0: debug "^4.3.1" socks "^2.6.1" -socks@^2.6.1: +socks@^2.3.3, socks@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== @@ -8480,7 +9894,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.1 || ^2.0.0", string-width@^2.0.0: +"string-width@^1.0.1 || ^2.0.0", "string-width@^1.0.2 || 2", string-width@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -8488,7 +9902,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8601,7 +10015,7 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0, supports-color@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== @@ -8745,7 +10159,7 @@ tmp@^0.2.0: dependencies: rimraf "^3.0.0" -tmpl@1.0.5: +tmpl@1.0.x: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -8868,7 +10282,7 @@ tslib@2.1.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== -tslib@2.3.1, tslib@^2.3.0, tslib@^2.3.1: +tslib@2.3.1, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== @@ -8916,7 +10330,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "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== @@ -8988,9 +10402,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.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" - integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== + 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" @@ -9192,11 +10606,11 @@ walk-up-path@^1.0.0: integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== walker@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: - makeerror "1.0.12" + makeerror "1.0.x" wcwidth@^1.0.0: version "1.0.1" @@ -9275,11 +10689,11 @@ which@^2.0.1, which@^2.0.2: isexe "^2.0.0" wide-align@^1.1.0, wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: - string-width "^1.0.2 || 2 || 3 || 4" + string-width "^1.0.2 || 2" word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" From c03c5db105265548032573dadc7c5ccc17d38d0b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 19 Nov 2021 11:27:19 +0000 Subject: [PATCH 117/248] chore(deps): update dependency aws-sdk-client-mock to v0.5.6 (#12752) 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 b3731fa07c9642..422bdcc6324a1b 100644 --- a/package.json +++ b/package.json @@ -249,7 +249,7 @@ "@types/xmldoc": "1.1.6", "@typescript-eslint/eslint-plugin": "5.3.1", "@typescript-eslint/parser": "5.3.1", - "aws-sdk-client-mock": "0.5.5", + "aws-sdk-client-mock": "0.5.6", "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", "emojibase-data": "6.2.0", diff --git a/yarn.lock b/yarn.lock index b1c218004cd340..8b784fb00e76cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3917,10 +3917,10 @@ auth-header@1.0.0: resolved "https://registry.yarnpkg.com/auth-header/-/auth-header-1.0.0.tgz#ea24fdc5588e1eb8b750df8655a396aa48fc9076" integrity sha512-CPPazq09YVDUNNVWo4oSPTQmtwIzHusZhQmahCKvIsk0/xH6U3QsMAv3sM+7+Q0B1K2KJ/Q38OND317uXs4NHA== -aws-sdk-client-mock@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/aws-sdk-client-mock/-/aws-sdk-client-mock-0.5.5.tgz#c94278d1b67e5a6f8c7ecbc538113933eba42102" - integrity sha512-djwyYj4vRAXGGH0nycd04/qxj4lK4UscK12dgRgYLigFzQ8EdM0+eZoFobbjXnXoPBG+YeN57UqrEbE1YW1qag== +aws-sdk-client-mock@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/aws-sdk-client-mock/-/aws-sdk-client-mock-0.5.6.tgz#73c44356aa49f24467e52dfeef4b6b33c164d91d" + integrity sha512-67C+6vlSMPhVGaDlUak3XVR/qvah4ENMMJMl+aWVnK42pBznQQuNvYzlg+OBeW+aBa6kOVDSAYstIqNfInIB/A== dependencies: "@types/sinon" "10.0.2" sinon "^11.1.1" From ea28c6a4a894fce8b9a6e9668c438c85f2a224f0 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 19 Nov 2021 14:22:35 +0100 Subject: [PATCH 118/248] logs: trace cached datasource response --- lib/datasource/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/datasource/index.ts b/lib/datasource/index.ts index 978599ee5b0fd1..d7ec46c4a142f9 100644 --- a/lib/datasource/index.ts +++ b/lib/datasource/index.ts @@ -63,7 +63,7 @@ async function getRegistryReleases( ); // istanbul ignore if if (cachedResult) { - logger.debug({ cacheKey }, 'Returning cached datasource response'); + logger.trace({ cacheKey }, 'Returning cached datasource response'); return cachedResult; } } From ff7822176fa0bec3402d1b858cced9e1a9ef46fe Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Fri, 19 Nov 2021 20:39:13 +0700 Subject: [PATCH 119/248] refactor(platform): make repoName arg consistent in getJsonFile (#12753) Co-authored-by: Michael Kriese --- lib/platform/bitbucket-server/index.ts | 8 ++++---- lib/platform/bitbucket/index.ts | 8 ++++---- lib/platform/gitea/index.ts | 8 ++++---- lib/platform/github/index.ts | 8 ++++---- lib/platform/gitlab/index.ts | 8 ++++---- lib/platform/types.ts | 4 ++-- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts index 04b8b1450fe06b..5b06c01dbc45b9 100644 --- a/lib/platform/bitbucket-server/index.ts +++ b/lib/platform/bitbucket-server/index.ts @@ -123,9 +123,9 @@ export async function getRepos(): Promise { export async function getRawFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const [project, slug] = repo.split('/'); + const [project, slug] = repoName.split('/'); const fileUrl = `./rest/api/1.0/projects/${project}/repos/${slug}/browse/${fileName}?limit=20000`; const res = await bitbucketServerHttp.getJson(fileUrl); const { isLastPage, lines, size } = res.body; @@ -139,9 +139,9 @@ export async function getRawFile( export async function getJsonFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const raw = await getRawFile(fileName, repo); + const raw = await getRawFile(fileName, repoName); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts index 992b5a053084d7..4ec06444c1b78a 100644 --- a/lib/platform/bitbucket/index.ts +++ b/lib/platform/bitbucket/index.ts @@ -110,20 +110,20 @@ export async function getRepos(): Promise { export async function getRawFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { // See: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/src/%7Bcommit%7D/%7Bpath%7D const path = fileName; - const url = `/2.0/repositories/${repo}/src/HEAD/${path}`; + const url = `/2.0/repositories/${repoName}/src/HEAD/${path}`; const res = await bitbucketHttp.get(url); return res.body; } export async function getJsonFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const raw = await getRawFile(fileName, repo); + const raw = await getRawFile(fileName, repoName); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/gitea/index.ts b/lib/platform/gitea/index.ts index 22b23eab39f69c..e006e8883d5300 100644 --- a/lib/platform/gitea/index.ts +++ b/lib/platform/gitea/index.ts @@ -211,17 +211,17 @@ const platform: Platform = { async getRawFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const contents = await helper.getRepoContents(repo, fileName); + const contents = await helper.getRepoContents(repoName, fileName); return contents.contentString; }, async getJsonFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const raw = await platform.getRawFile(fileName, repo); + const raw = await platform.getRawFile(fileName, repoName); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts index d22e223870645b..e6b50f7f872ca0 100644 --- a/lib/platform/github/index.ts +++ b/lib/platform/github/index.ts @@ -173,9 +173,9 @@ async function getBranchProtection( export async function getRawFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const url = `repos/${repo}/contents/${fileName}`; + const url = `repos/${repoName}/contents/${fileName}`; const res = await githubApi.getJson<{ content: string }>(url); const buf = res.body.content; const str = Buffer.from(buf, 'base64').toString(); @@ -184,9 +184,9 @@ export async function getRawFile( export async function getJsonFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const raw = await getRawFile(fileName, repo); + const raw = await getRawFile(fileName, repoName); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index f9aabbdfe3a5df..43e82367b2cb51 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -157,10 +157,10 @@ function urlEscape(str: string): string { export async function getRawFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { const escapedFileName = urlEscape(fileName); - const url = `projects/${repo}/repository/files/${escapedFileName}?ref=HEAD`; + const url = `projects/${repoName}/repository/files/${escapedFileName}?ref=HEAD`; const res = await gitlabApi.getJson<{ content: string }>(url); const buf = res.body.content; const str = Buffer.from(buf, 'base64').toString(); @@ -169,9 +169,9 @@ export async function getRawFile( export async function getJsonFile( fileName: string, - repo: string = config.repository + repoName: string = config.repository ): Promise { - const raw = await getRawFile(fileName, repo); + const raw = await getRawFile(fileName, repoName); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/types.ts b/lib/platform/types.ts index 3d0e7aaaaac66e..549d2368de8b54 100644 --- a/lib/platform/types.ts +++ b/lib/platform/types.ts @@ -152,8 +152,8 @@ export interface Platform { getIssueList(): Promise; getIssue?(number: number, useCache?: boolean): Promise; getVulnerabilityAlerts(): Promise; - getRawFile(fileName: string, repo?: string): Promise; - getJsonFile(fileName: string, repo?: string): Promise; + getRawFile(fileName: string, repoName?: string): Promise; + getJsonFile(fileName: string, repoName?: string): Promise; initRepo(config: RepoParams): Promise; getPrList(): Promise; ensureIssueClosing(title: string): Promise; From 42231b6b75238389501fa69b2ff17c6eadfb351a Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 19 Nov 2021 14:46:44 +0100 Subject: [PATCH 120/248] logs: more details on secrets exposure --- lib/workers/branch/commit.ts | 4 ++++ lib/workers/repository/updates/generate.ts | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/workers/branch/commit.ts b/lib/workers/branch/commit.ts index 4a20b3c9b9cc56..917578f569d2a8 100644 --- a/lib/workers/branch/commit.ts +++ b/lib/workers/branch/commit.ts @@ -41,6 +41,10 @@ export function commitFilesToBranch( config.branchName !== sanitize(config.branchName) || config.commitMessage !== sanitize(config.commitMessage) ) { + logger.debug( + { branchName: config.branchName }, + 'Secrets exposed in branchName or commitMessage' + ); throw new Error(CONFIG_SECRETS_EXPOSED); } // API will know whether to create new branch or not diff --git a/lib/workers/repository/updates/generate.ts b/lib/workers/repository/updates/generate.ts index ee8ea55354f9d7..49c9570f2577f3 100644 --- a/lib/workers/repository/updates/generate.ts +++ b/lib/workers/repository/updates/generate.ts @@ -172,6 +172,10 @@ export function generateBranchConfig( upgrade.commitMessage = template.compile(upgrade.commitMessage, upgrade); // istanbul ignore if if (upgrade.commitMessage !== sanitize(upgrade.commitMessage)) { + logger.debug( + { branchName: config.branchName }, + 'Secrets exposed in commit message' + ); throw new Error(CONFIG_SECRETS_EXPOSED); } upgrade.commitMessage = upgrade.commitMessage.trim(); // Trim exterior whitespace @@ -202,6 +206,10 @@ export function generateBranchConfig( .replace(regEx(/\s+/g), ' '); // TODO #12071 // istanbul ignore if if (upgrade.prTitle !== sanitize(upgrade.prTitle)) { + logger.debug( + { branchName: config.branchName }, + 'Secrets were exposed in PR title' + ); throw new Error(CONFIG_SECRETS_EXPOSED); } if (upgrade.toLowerCase) { From 2754c58f0d2042111ae905776e80c43254b2aada Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 19 Nov 2021 14:58:19 +0100 Subject: [PATCH 121/248] logs: better updateLockedVersion log --- lib/manager/npm/update/locked-dependency/index.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/manager/npm/update/locked-dependency/index.ts b/lib/manager/npm/update/locked-dependency/index.ts index e9dd8f6d29d8ee..e915cdcfec6e65 100644 --- a/lib/manager/npm/update/locked-dependency/index.ts +++ b/lib/manager/npm/update/locked-dependency/index.ts @@ -16,10 +16,7 @@ export function validateInputs(config: UpdateLockedConfig): boolean { return false; } if (!(semver.isVersion(currentVersion) && semver.isVersion(newVersion))) { - logger.warn( - { currentVersion, newVersion }, - 'Update versions are not valid' - ); + logger.warn({ config }, 'Update versions are not valid'); return false; } return true; From 988d32413708859c85e093b387b6623f477df5d5 Mon Sep 17 00:00:00 2001 From: Sander Holvoet Date: Sun, 21 Nov 2021 13:43:08 +0100 Subject: [PATCH 122/248] docs: clarify packages.config usage (#12779) --- docs/usage/nuget.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/usage/nuget.md b/docs/usage/nuget.md index a279985e895154..13c8999e500891 100644 --- a/docs/usage/nuget.md +++ b/docs/usage/nuget.md @@ -9,7 +9,7 @@ Renovate supports upgrading dependencies in `.csproj`, `.fsproj`, and `.vbproj` ## Version Support -Only SDK-style `.csproj`/`.fsproj`/`.vbproj`files are currently supported. By default, this includes: +Only SDK-style `.csproj`/`.fsproj`/`.vbproj` files are currently supported. By default, this includes: - .NET Core 1.0 and above - .NET Standard class libraries @@ -24,6 +24,8 @@ To convert your .NET Framework `.csproj`/`.fsproj`/`.vbproj` into an SDK-style p 1. Renovate looks up the latest version on [nuget.org](https://nuget.org) (or on [alternate feeds](#Alternate%20feeds)) to determine if any upgrades are available 1. If the source package includes a GitHub URL as its source, and has either a "changelog" file or uses GitHub releases, then Release Notes for each version are embedded in the generated PR +If your project file references `packages.config` file, no dependencies will be extracted. Find out here how to [migrate from packages.config to PackageReference](https://docs.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference). + ## Alternate feeds Renovate by default performs all lookups on `https://api.nuget.org/v3/index.json`, but it also supports alternative NuGet feeds. From 27ee7efcc3e2a3fd00da98dfc2c43fa0ecd673d9 Mon Sep 17 00:00:00 2001 From: dsimon-onventis <68286501+dsimon-onventis@users.noreply.github.com> Date: Sun, 21 Nov 2021 13:52:28 +0100 Subject: [PATCH 123/248] fix(azure): correctly map autoApprove response (#12761) --- lib/platform/azure/__snapshots__/index.spec.ts.snap | 8 -------- lib/platform/azure/index.spec.ts | 13 ++++--------- lib/platform/azure/index.ts | 2 +- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/lib/platform/azure/__snapshots__/index.spec.ts.snap b/lib/platform/azure/__snapshots__/index.spec.ts.snap index 8188db55f14855..1a4ccf8fe17198 100644 --- a/lib/platform/azure/__snapshots__/index.spec.ts.snap +++ b/lib/platform/azure/__snapshots__/index.spec.ts.snap @@ -65,14 +65,6 @@ Object { "displayNumber": "Pull Request #456", "number": 456, "pullRequestId": 456, - "reviewers": Array [ - Object { - "isFlagged": false, - "isRequired": false, - "reviewerUrl": "user-url", - "vote": 10, - }, - ], "sourceBranch": undefined, "sourceRefName": undefined, "state": "open", diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts index 7dedd447a17e5b..4a4d8bcc555d82 100644 --- a/lib/platform/azure/index.spec.ts +++ b/lib/platform/azure/index.spec.ts @@ -668,15 +668,10 @@ describe('platform/azure/index', () => { }, }; const prUpdateResult = { - ...prResult, - reviewers: [ - { - reviewerUrl: prResult.createdBy.url, - vote: AzurePrVote.Approved, - isFlagged: false, - isRequired: false, - }, - ], + reviewerUrl: prResult.createdBy.url, + vote: AzurePrVote.Approved, + isFlagged: false, + isRequired: false, }; const updateFn = jest .fn(() => prUpdateResult) diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts index 83124b4be09d4d..adacb465fef94d 100644 --- a/lib/platform/azure/index.ts +++ b/lib/platform/azure/index.ts @@ -410,7 +410,7 @@ export async function createPr({ ); } if (platformOptions?.azureAutoApprove) { - pr = await azureApiGit.createPullRequestReviewer( + await azureApiGit.createPullRequestReviewer( { reviewerUrl: pr.createdBy.url, vote: AzurePrVote.Approved, From 34d0d9e6dc7749e1561f2ece316f8dc20859b037 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Sun, 21 Nov 2021 16:38:45 +0100 Subject: [PATCH 124/248] docs(nuget): small style and content improvements (#12781) --- docs/usage/nuget.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/usage/nuget.md b/docs/usage/nuget.md index 13c8999e500891..a1f718290937ef 100644 --- a/docs/usage/nuget.md +++ b/docs/usage/nuget.md @@ -9,26 +9,28 @@ Renovate supports upgrading dependencies in `.csproj`, `.fsproj`, and `.vbproj` ## Version Support -Only SDK-style `.csproj`/`.fsproj`/`.vbproj` files are currently supported. By default, this includes: +Only SDK-style `.csproj`/`.fsproj`/`.vbproj` files are currently supported. +By default, this includes: - .NET Core 1.0 and above - .NET Standard class libraries - Any `.csproj`/`.fsproj`/`.vbproj` in the SDK-style syntax -To convert your .NET Framework `.csproj`/`.fsproj`/`.vbproj` into an SDK-style project, one can follow the [following guide](https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/). +To convert your .NET Framework `.csproj`/`.fsproj`/`.vbproj` into an SDK-style project, follow the steps in this [guide](https://natemcmaster.com/blog/2017/03/09/vs2015-to-vs2017-upgrade/). -## How It Works +## How it works 1. Renovate searches in each repository for any files with a `.csproj`, `.fsproj`, or `.vbproj` extension 1. Existing dependencies are extracted from `` and `` tags 1. Renovate looks up the latest version on [nuget.org](https://nuget.org) (or on [alternate feeds](#Alternate%20feeds)) to determine if any upgrades are available -1. If the source package includes a GitHub URL as its source, and has either a "changelog" file or uses GitHub releases, then Release Notes for each version are embedded in the generated PR +1. If the source package includes a GitHub URL as its source, and has either a "changelog" file or uses GitHub releases, then release notes for each version are embedded in the generated PR -If your project file references `packages.config` file, no dependencies will be extracted. Find out here how to [migrate from packages.config to PackageReference](https://docs.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference). +If your project file references a `packages.config` file, no dependencies will be extracted. +Find out here how to [migrate from `packages.config` to `PackageReference`](https://docs.microsoft.com/en-us/nuget/consume-packages/migrate-packages-config-to-package-reference). ## Alternate feeds -Renovate by default performs all lookups on `https://api.nuget.org/v3/index.json`, but it also supports alternative NuGet feeds. +By default Renovate performs all lookups on `https://api.nuget.org/v3/index.json`, but you can configure alternative NuGet feeds. Alternative feeds can be specified either [in a `NuGet.config` file](https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file#package-source-sections) within your repository (Renovate will not search outside the repository) or in Renovate configuration options: ```json @@ -78,7 +80,7 @@ Credentials for authenticated/private feeds can be provided via host rules in th } ``` -Please note that at the moment only Basic HTTP authentication (via username and password) is supported. +At the moment only Basic HTTP authentication (via username and password) is supported. ## Future work From 09c37ed691706c629b29f6d420adec95b22a7b83 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Nov 2021 05:03:27 +0000 Subject: [PATCH 125/248] docs: update references to renovate/renovate to v29.14.1 (#12782) 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 1705f3c70c1305..842b1a45dce0b8 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -229,7 +229,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:29.8.2 +FROM renovate/renovate:29.14.1 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From ff439b1d2952b09d70ca37c22e96eb9b73e9c5e2 Mon Sep 17 00:00:00 2001 From: Matt Travi Date: Mon, 22 Nov 2021 01:05:35 -0600 Subject: [PATCH 126/248] feat(cucumber-replacement): added the switch to scoped to the replacements list (#12785) --- lib/config/presets/internal/replacements.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/config/presets/internal/replacements.ts b/lib/config/presets/internal/replacements.ts index 8d7bbc5ce96a91..023c59f75cb897 100644 --- a/lib/config/presets/internal/replacements.ts +++ b/lib/config/presets/internal/replacements.ts @@ -3,7 +3,7 @@ import type { Preset } from '../types'; export const presets: Record = { all: { description: 'All replacements', - extends: ['replacements:jade-to-pug'], + extends: ['replacements:jade-to-pug', 'replacements:cucumber-to-scoped'], }, 'jade-to-pug': { description: 'Jade was renamed to Pug', @@ -16,4 +16,15 @@ export const presets: Record = { }, ], }, + 'cucumber-to-scoped': { + description: 'cucumber became scoped', + packageRules: [ + { + matchDatasources: ['npm'], + matchPackageNames: ['cucumber'], + replacementName: '@cucumber/cucumber', + replacementVersion: '7.0.0', + }, + ], + }, }; From e01ccfdcd2ae24a688885eb5a0dc00b58533feae Mon Sep 17 00:00:00 2001 From: Mathias Brodala Date: Mon, 22 Nov 2021 08:45:32 +0100 Subject: [PATCH 127/248] docs: Explain separateMajorMinor for package groups (#12787) --- docs/usage/configuration-options.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index fcb954b4df86c3..7e9baa89cdbf52 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2391,7 +2391,7 @@ For example, if you were using Webpack 2.0.0 and versions 2.1.0 and 3.0.0 were b If you were to apply the minor update then Renovate would keep updating the 3.x branch for you as well, e.g. if Webpack 3.0.1 or 3.1.0 were released. If instead you applied the 3.0.0 update then Renovate would clean up the unneeded 2.x branch for you on the next run. -It is recommended that you leave this setting to `true`, because of the polite way that Renovate handles this. +It is recommended that you leave this option to `true`, because of the polite way that Renovate handles this. For example, let's say in the above example that you decided you wouldn't update to Webpack 3 for a long time and don't want to build/test every time a new 3.x version arrives. In that case, simply close the "Update Webpack to version 3.x" PR and it _won't_ be recreated again even if subsequent Webpack 3.x versions are released. You can continue with Webpack 2.x for as long as you want and receive any updates/patches that are made for it. @@ -2399,6 +2399,8 @@ Then eventually when you do want to update to Webpack 3.x you can make that upda After that, Renovate will resume providing you updates to 3.x again! i.e. if you close a major upgrade PR then it won't come back again, but once you make the major upgrade yourself then Renovate will resume providing you with minor or patch updates. +This option also has priority over package groups configured by `packageRule`. So Renovate will propose separate PRs for major and minor updates of packages even if they are grouped. If you want to enforce grouped package updates, you need to set this option `false` within the `packageRule`. + ## separateMinorPatch By default, Renovate won't distinguish between "patch" (e.g. 1.0.x) and "minor" (e.g. 1.x.0) releases - it groups them together. From 32d397348996ebe580a9eda4a0506f56728a680a Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Mon, 22 Nov 2021 15:03:38 +0700 Subject: [PATCH 128/248] feat(manager/travis): support matrix node.js syntax in Travis configs (#12656) Co-authored-by: Michael Kriese --- .../travis/__fixtures__/matrix_alias.yml | 5 ++ .../travis/__fixtures__/matrix_invalid.yml | 4 + .../travis/__fixtures__/matrix_jobs.yml | 5 ++ .../travis/__fixtures__/matrix_jobs_array.yml | 5 ++ .../__fixtures__/matrix_jobs_array2.yml | 7 ++ lib/manager/travis/extract.spec.ts | 82 ++++++++++++++++++- lib/manager/travis/extract.ts | 43 +++++++++- lib/manager/travis/readme.md | 8 +- lib/manager/travis/types.ts | 19 +++++ 9 files changed, 169 insertions(+), 9 deletions(-) create mode 100644 lib/manager/travis/__fixtures__/matrix_alias.yml create mode 100644 lib/manager/travis/__fixtures__/matrix_invalid.yml create mode 100644 lib/manager/travis/__fixtures__/matrix_jobs.yml create mode 100644 lib/manager/travis/__fixtures__/matrix_jobs_array.yml create mode 100644 lib/manager/travis/__fixtures__/matrix_jobs_array2.yml create mode 100644 lib/manager/travis/types.ts diff --git a/lib/manager/travis/__fixtures__/matrix_alias.yml b/lib/manager/travis/__fixtures__/matrix_alias.yml new file mode 100644 index 00000000000000..0ec43788f5c796 --- /dev/null +++ b/lib/manager/travis/__fixtures__/matrix_alias.yml @@ -0,0 +1,5 @@ +matrix: + include: + - env: js-tests + language: node_js + node_js: '11.10.1' diff --git a/lib/manager/travis/__fixtures__/matrix_invalid.yml b/lib/manager/travis/__fixtures__/matrix_invalid.yml new file mode 100644 index 00000000000000..a13a252e2731aa --- /dev/null +++ b/lib/manager/travis/__fixtures__/matrix_invalid.yml @@ -0,0 +1,4 @@ +jobs: + include: + - invalid: '1.0' + diff --git a/lib/manager/travis/__fixtures__/matrix_jobs.yml b/lib/manager/travis/__fixtures__/matrix_jobs.yml new file mode 100644 index 00000000000000..62139533e2b837 --- /dev/null +++ b/lib/manager/travis/__fixtures__/matrix_jobs.yml @@ -0,0 +1,5 @@ +jobs: + include: + - env: js-tests + language: node_js + node_js: '11.10.1' diff --git a/lib/manager/travis/__fixtures__/matrix_jobs_array.yml b/lib/manager/travis/__fixtures__/matrix_jobs_array.yml new file mode 100644 index 00000000000000..c379d5a128d2af --- /dev/null +++ b/lib/manager/travis/__fixtures__/matrix_jobs_array.yml @@ -0,0 +1,5 @@ +jobs: + include: + - env: js-tests + language: node_js + node_js: ['11.10.1', '11.10.2'] diff --git a/lib/manager/travis/__fixtures__/matrix_jobs_array2.yml b/lib/manager/travis/__fixtures__/matrix_jobs_array2.yml new file mode 100644 index 00000000000000..58b70eff6dbc1a --- /dev/null +++ b/lib/manager/travis/__fixtures__/matrix_jobs_array2.yml @@ -0,0 +1,7 @@ +jobs: + include: + - env: js-tests + language: node_js + node_js: + - '11.10.1' + - '11.10.2' diff --git a/lib/manager/travis/extract.spec.ts b/lib/manager/travis/extract.spec.ts index abeb3a98e46a47..1488759e584341 100644 --- a/lib/manager/travis/extract.spec.ts +++ b/lib/manager/travis/extract.spec.ts @@ -1,7 +1,12 @@ import { loadFixture } from '../../../test/util'; -import { extractPackageFile } from './extract'; +import { extractPackageFile } from '.'; const invalidYAML = loadFixture('invalid.yml'); +const matrixYAMLwithNodeSyntaxString = loadFixture('matrix_jobs.yml'); +const matrixYAMLwithNodeSyntaxArray = loadFixture('matrix_jobs_array.yml'); +const matrixYAMLwithNodeSyntaxArray2 = loadFixture('matrix_jobs_array2.yml'); +const matrixYAMLwithNodeSyntaxAlias = loadFixture('matrix_alias.yml'); +const invalidMatrixYAML = loadFixture('matrix_invalid.yml'); describe('manager/travis/extract', () => { describe('extractPackageFile()', () => { @@ -9,14 +14,89 @@ describe('manager/travis/extract', () => { const res = extractPackageFile('blahhhhh:foo:@what\n'); expect(res).toBeNull(); }); + it('returns results', () => { const res = extractPackageFile('node_js:\n - 6\n - 8\n'); expect(res).toMatchSnapshot(); expect(res.deps).toHaveLength(2); }); + it('should handle invalid YAML', () => { const res = extractPackageFile(invalidYAML); expect(res).toBeNull(); }); + + it('handles matrix node_js syntax with node_js string', () => { + const res = extractPackageFile(matrixYAMLwithNodeSyntaxString); + expect(res).toEqual({ + deps: [ + { + currentValue: '11.10.1', + datasource: 'github-tags', + depName: 'node', + lookupName: 'nodejs/node', + }, + ], + }); + }); + + it('handles matrix node_js syntax with node_js array', () => { + const res = extractPackageFile(matrixYAMLwithNodeSyntaxArray); + expect(res).toEqual({ + deps: [ + { + currentValue: '11.10.1', + datasource: 'github-tags', + depName: 'node', + lookupName: 'nodejs/node', + }, + { + currentValue: '11.10.2', + datasource: 'github-tags', + depName: 'node', + lookupName: 'nodejs/node', + }, + ], + }); + }); + + it('handles matrix node_js syntax with node_js array 2', () => { + const res = extractPackageFile(matrixYAMLwithNodeSyntaxArray2); + expect(res).toEqual({ + deps: [ + { + currentValue: '11.10.1', + datasource: 'github-tags', + depName: 'node', + lookupName: 'nodejs/node', + }, + { + currentValue: '11.10.2', + datasource: 'github-tags', + depName: 'node', + lookupName: 'nodejs/node', + }, + ], + }); + }); + + it('handles matrix node_js syntax with alias', () => { + const res = extractPackageFile(matrixYAMLwithNodeSyntaxAlias); + expect(res).toEqual({ + deps: [ + { + currentValue: '11.10.1', + datasource: 'github-tags', + depName: 'node', + lookupName: 'nodejs/node', + }, + ], + }); + }); + + it('handles invalid matrix node_js syntax', () => { + const res = extractPackageFile(invalidMatrixYAML); + expect(res).toBeNull(); + }); }); }); diff --git a/lib/manager/travis/extract.ts b/lib/manager/travis/extract.ts index 58ffe64021f236..c50ad28bf02202 100644 --- a/lib/manager/travis/extract.ts +++ b/lib/manager/travis/extract.ts @@ -3,12 +3,14 @@ import { load } from 'js-yaml'; import * as datasourceGithubTags from '../../datasource/github-tags'; import { logger } from '../../logger'; import type { PackageDependency, PackageFile } from '../types'; +import type { TravisMatrixItem, TravisYaml } from './types'; export function extractPackageFile(content: string): PackageFile | null { - // TODO: fix type - let doc: any; + let doc: TravisYaml | null; try { - doc = load(content, { json: true }); + doc = load(content, { + json: true, + }); } catch (err) { logger.warn({ err, content }, 'Failed to parse .travis.yml file.'); return null; @@ -22,6 +24,41 @@ export function extractPackageFile(content: string): PackageFile | null { currentValue: currentValue.toString(), })); } + + // Handle the matrix syntax + let matrix_include: TravisMatrixItem[] | undefined; + if (doc?.jobs?.include) { + matrix_include = doc.jobs.include; + } else if (doc?.matrix?.include) { + matrix_include = doc.matrix.include; + } + + if (!is.array(matrix_include)) { + return deps.length ? { deps } : null; + } + + for (const item of matrix_include) { + if (item?.node_js) { + if (is.array(item.node_js)) { + item.node_js.forEach((currentValue) => { + deps.push({ + depName: 'node', + datasource: datasourceGithubTags.id, + lookupName: 'nodejs/node', + currentValue: currentValue.toString(), + }); + }); + } else if (is.string(item.node_js)) { + deps.push({ + depName: 'node', + datasource: datasourceGithubTags.id, + lookupName: 'nodejs/node', + currentValue: item.node_js.toString(), + }); + } + } + } + if (!deps.length) { return null; } diff --git a/lib/manager/travis/readme.md b/lib/manager/travis/readme.md index fb728f0b743555..6e5cbaed906c63 100644 --- a/lib/manager/travis/readme.md +++ b/lib/manager/travis/readme.md @@ -1,14 +1,14 @@ This manager is intended to keep Travis config files (`.travis.yml`) up-to-date, this file controls the CI build environment. Currently Renovate can only update the `node_js` section of this file. -An important limitation is that Renovate does not currently "understand" [Travis's Build Matrix concept](https://docs.travis-ci.com/user/build-matrix/#matrix-expansion), so it will try to update all found Node.js versions to the latest LTS, e.g. +Renovate "understands" [Travis's Build Matrix concept](https://docs.travis-ci.com/user/build-matrix/#matrix-expansion) as well, so it will try to update all found Node.js versions to the latest LTS, e.g. ```diff node_js: - - 8.10.0 - - 10.10.0 -+ - 14.17.4 -+ - 14.17.4 ++ - 16.13.0 ++ - 16.13.0 ``` Due to this, major updates for Travis are disabled by default. @@ -24,5 +24,3 @@ Here's how to enable major updates in your Renovate config: } } ``` - -If you would like to see "build matrix" support in future, please contribute ideas to [issue #11175](https://github.com/renovatebot/renovate/issues/11175). diff --git a/lib/manager/travis/types.ts b/lib/manager/travis/types.ts new file mode 100644 index 00000000000000..937eb4ded0b39f --- /dev/null +++ b/lib/manager/travis/types.ts @@ -0,0 +1,19 @@ +// travis.yml syntax description: +// - regular: https://docs.travis-ci.com/user/tutorial/ +// - matrix: https://docs.travis-ci.com/user/build-matrix/ + +export type TravisNodeJs = string | string[]; + +export interface TravisYaml { + node_js?: TravisNodeJs; + jobs?: TravisMatrix; + matrix?: TravisMatrix; +} + +export interface TravisMatrixItem { + node_js?: TravisNodeJs; +} + +export interface TravisMatrix { + include?: TravisMatrixItem[]; +} From 5c717fadae1f07eae6106ab8cdeb17d5f460b5a0 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 22 Nov 2021 10:54:08 +0100 Subject: [PATCH 129/248] docs: one sentence per line, fix grammar (#12789) --- docs/usage/configuration-options.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 7e9baa89cdbf52..ad98b8a5883052 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -2399,7 +2399,9 @@ Then eventually when you do want to update to Webpack 3.x you can make that upda After that, Renovate will resume providing you updates to 3.x again! i.e. if you close a major upgrade PR then it won't come back again, but once you make the major upgrade yourself then Renovate will resume providing you with minor or patch updates. -This option also has priority over package groups configured by `packageRule`. So Renovate will propose separate PRs for major and minor updates of packages even if they are grouped. If you want to enforce grouped package updates, you need to set this option `false` within the `packageRule`. +This option also has priority over package groups configured by `packageRule`. +So Renovate will propose separate PRs for major and minor updates of packages even if they are grouped. +If you want to enforce grouped package updates, you need to set this option to `false` within the `packageRule`. ## separateMinorPatch From 10f487a375b9e9cd4426bb64169ab8eb7f17a18b Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Mon, 22 Nov 2021 17:23:58 +0700 Subject: [PATCH 130/248] fix(platform/gitlab): description is too long on GitLab (#12792) Co-authored-by: Michael Kriese --- lib/platform/gitlab/index.spec.ts | 10 ++++++++++ lib/platform/gitlab/index.ts | 2 ++ 2 files changed, 12 insertions(+) diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts index 72e26a2970a903..b4714de7ed8c13 100644 --- a/lib/platform/gitlab/index.spec.ts +++ b/lib/platform/gitlab/index.spec.ts @@ -1870,6 +1870,16 @@ These updates have all been created already. Click a checkbox below to force a r expect(smartTruncate).toHaveBeenCalledTimes(1); expect(smartTruncate).toHaveBeenCalledWith(expect.any(String), 25000); }); + + it('truncates description for API version gt 13.4', async () => { + jest.mock('../utils/pr-body'); + const { smartTruncate } = require('../utils/pr-body'); + + await initFakePlatform('13.4.1'); + gitlab.massageMarkdown(prBody); + expect(smartTruncate).toHaveBeenCalledTimes(1); + expect(smartTruncate).toHaveBeenCalledWith(expect.any(String), 1000000); + }); }); describe('getVulnerabilityAlerts()', () => { diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index 43e82367b2cb51..97bb7e18cbc574 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -685,6 +685,8 @@ export function massageMarkdown(input: string): string { ); desc = smartTruncate(desc, 25000); + } else { + desc = smartTruncate(desc, 1000000); } return desc; From a396a38988112b453425ff8fadff50c15c3804f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:39:49 +0100 Subject: [PATCH 131/248] build(deps): update dependency azure-devops-node-api to v11.1.0 (#12777) 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 422bdcc6324a1b..b627ddd25e8d5c 100644 --- a/package.json +++ b/package.json @@ -136,7 +136,7 @@ "@yarnpkg/core": "2.4.0", "@yarnpkg/parsers": "2.4.1", "auth-header": "1.0.0", - "azure-devops-node-api": "11.0.1", + "azure-devops-node-api": "11.1.0", "bunyan": "1.8.15", "cacache": "15.3.0", "chalk": "4.1.2", diff --git a/yarn.lock b/yarn.lock index 8b784fb00e76cb..e36750ac18d291 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3936,10 +3936,10 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -azure-devops-node-api@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-11.0.1.tgz#b7ec4783230e1de8fc972b23effe7ed2ebac17ff" - integrity sha512-YMdjAw9l5p/6leiyIloxj3k7VIvYThKjvqgiQn88r3nhT93ENwsoDS3A83CyJ4uTWzCZ5f5jCi6c27rTU5Pz+A== +azure-devops-node-api@11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-11.1.0.tgz#ea3ca49de8583b0366d000f3c3f8a75b8104055f" + integrity sha512-6/2YZuf+lJzJLrjXNYEA5RXAkMCb8j/4VcHD0qJQRsgG/KsRMYo0HgDh0by1FGHyZkQWY5LmQyJqCwRVUB3Y7Q== dependencies: tunnel "0.0.6" typed-rest-client "^1.8.4" From 170c160716ba9fcae72d9a14da8ff703e853df56 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Nov 2021 14:43:29 +0000 Subject: [PATCH 132/248] chore(deps): update dependency @types/eslint to v7.29.0 (#12790) 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 b627ddd25e8d5c..a0f5c7617cc673 100644 --- a/package.json +++ b/package.json @@ -220,7 +220,7 @@ "@types/changelog-filename-regex": "2.0.0", "@types/clean-git-ref": "2.0.0", "@types/conventional-commits-detector": "1.0.0", - "@types/eslint": "7.28.2", + "@types/eslint": "7.29.0", "@types/fs-extra": "9.0.13", "@types/git-url-parse": "9.0.1", "@types/github-url-from-git": "1.5.1", diff --git a/yarn.lock b/yarn.lock index e36750ac18d291..9a0c7c60f2a7e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3074,10 +3074,10 @@ resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.5.tgz#eb0fb1048301df980b6f8a5ec3d63f7d1572bb73" integrity sha512-DIOOg+POSrYl+OlNRHQuIEqCd8DCtynG57H862UCce16nXJX7J8eWxNGgOcf8Eyge8zXeSs27mz1UcFu8L/L7g== -"@types/eslint@7.28.2": - version "7.28.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.28.2.tgz#0ff2947cdd305897c52d5372294e8c76f351db68" - integrity sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA== +"@types/eslint@7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" + integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== dependencies: "@types/estree" "*" "@types/json-schema" "*" From 866233899c7eed9334250b0392f7124eb609a9bb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Nov 2021 16:24:38 +0100 Subject: [PATCH 133/248] chore(deps): lock file maintenance (#12783) Co-authored-by: Renovate Bot --- yarn.lock | 1465 ++++++++++++++++++++++++++--------------------------- 1 file changed, 712 insertions(+), 753 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9a0c7c60f2a7e5..6cb114d91076cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -61,14 +61,14 @@ tslib "^1.11.1" "@aws-crypto/sha256-browser@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-1.2.1.tgz#b75b89a63039f97667e61ac92c9c4ee04f35fec0" - integrity sha512-WX/Wp6sXPhcBWx/w1aSJv3bDJL0ut5Ik6hl7yfqA1pn3cfsahl4rgHzRRXqYfJ+hnhnCqdgadS17wyBbVPsK+w== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-1.2.2.tgz#004d806e3bbae130046c259ec3279a02d4a0b576" + integrity sha512-0tNR4kBtJp+9S0kis4+JLab3eg6QWuIeuPhzaYoYwNUXGBgsWIkktA2mnilet+EGWzf3n1zknJXC4X4DVyyXbg== dependencies: "@aws-crypto/ie11-detection" "^1.0.0" - "@aws-crypto/sha256-js" "^1.2.1" + "@aws-crypto/sha256-js" "^1.2.2" "@aws-crypto/supports-web-crypto" "^1.0.0" - "@aws-crypto/util" "^1.2.1" + "@aws-crypto/util" "^1.2.2" "@aws-sdk/types" "^3.1.0" "@aws-sdk/util-locate-window" "^3.0.0" tslib "^1.11.1" @@ -82,12 +82,12 @@ "@aws-sdk/types" "^3.1.0" tslib "^1.11.1" -"@aws-crypto/sha256-js@^1.0.0", "@aws-crypto/sha256-js@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.1.tgz#88c6c0cfff7f269b21740c71157987837da502df" - integrity sha512-KtZ4qFDWZy6pKcky6RvwSytR/I8vPX9Z47pXh9sOuTcxjjtcegzS2uupg9vo0vbFcAWkSHVOEmNPh6ygiC3VFQ== +"@aws-crypto/sha256-js@^1.0.0", "@aws-crypto/sha256-js@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== dependencies: - "@aws-crypto/util" "^1.2.1" + "@aws-crypto/util" "^1.2.2" "@aws-sdk/types" "^3.1.0" tslib "^1.11.1" @@ -105,10 +105,10 @@ dependencies: tslib "^1.11.1" -"@aws-crypto/util@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.1.tgz#9bd31a37843aca63829a8fcae6b897283bf6ff12" - integrity sha512-H6Qrl28lzGGXZgLkdP7DQpJ3D3jJagQJugziThcqZCJVUT0HABHJt9EQMiiuf93KcUV/MMoisl56UfCxCFfmWQ== +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== dependencies: "@aws-sdk/types" "^3.1.0" "@aws-sdk/util-utf8-browser" "^3.0.0" @@ -1559,16 +1559,11 @@ resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.38.0.tgz#16b3c2d78512d7f193edb519de46c5ef00fffd2b" integrity sha512-Opux3HLwMlWb7GIJxERsOnmbHrT2A1gsd8aF5zHapWPPH5Z0rYsgTIq64qgim896XlKlOw6/YzhD5CdyNjlQWg== -"@aws-sdk/types@3.40.0": +"@aws-sdk/types@3.40.0", "@aws-sdk/types@^3.1.0": version "3.40.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.40.0.tgz#a9d7926fcb9b699bc46be975033559d2293e60d1" integrity sha512-KpILcfvRaL88TLvo3SY4OuCCg90SvcNLPyjDwUuBqiOyWODjrKShHtAPJzej4CLp92lofh+ul0UnBfV9Jb/5PA== -"@aws-sdk/types@^3.1.0": - version "3.36.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.36.0.tgz#6d561df1070f039f29b2259affdd1201f3d06472" - integrity sha512-OeaTDZqo4OfGahgsZF2viOWxSSNColEUf8RbKAWNlke3nkMu3JW8kkft1Qte6jvoQxZ3jOQWi33Z4LUxix/V7A== - "@aws-sdk/url-parser@3.35.0": version "3.35.0" resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.35.0.tgz#1830f1fc6487c56671167c175dada52de8e36fce" @@ -1724,9 +1719,9 @@ tslib "^2.3.0" "@aws-sdk/util-locate-window@^3.0.0": - version "3.36.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.36.0.tgz#8cf066f2bea665ba5352ce293844e9f6276e29d8" - integrity sha512-w5k3siBOGy7bAfZG/p0WIHpedHNb4OQ0wUSDNvd6Kzn4dkqHPTWoA1NrCEuFk9Gwkrr1yNKxgVlo0SCtgznxPw== + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.37.0.tgz#e041f411e5e6a235e5bcffacc4b7fa90f25d8d01" + integrity sha512-NvDCfOhLLVHp27oGUUs8EVirhz91aX5gdxGS7J/sh5PF0cNN8rwaR1vSLR7BxPmJHMO7NH7i9EwiELfLfYcq6g== dependencies: tslib "^2.3.0" @@ -1805,20 +1800,13 @@ dependencies: tslib "^2.3.0" -"@aws-sdk/util-utf8-browser@3.37.0": +"@aws-sdk/util-utf8-browser@3.37.0", "@aws-sdk/util-utf8-browser@^3.0.0": version "3.37.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.37.0.tgz#d896899f4c475ceeaf8b77c5d7cdc453e5fe6b83" integrity sha512-tuiOxzfqet1kKGYzlgpMGfhr64AHJnYsFx2jZiH/O6Yq8XQg43ryjQlbJlim/K/XHGNzY0R+nabeJg34q3Ua1g== dependencies: tslib "^2.3.0" -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.36.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.36.0.tgz#f80218f44d90bb39bf1bf9a902599ad1b7c4e6a8" - integrity sha512-xVUtGIemnh2gD+1s6DZzdGNlgVxHXKlR/sT4G1afysifKrbyXMbh2Z3Ez+BgunWXQRbVXFmNQXHKHYuebMDe5w== - dependencies: - tslib "^2.3.0" - "@aws-sdk/util-utf8-node@3.35.0": version "3.35.0" resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.35.0.tgz#81e3ba82e367278ad88dcc619a82ac5178a5b927" @@ -1869,32 +1857,32 @@ dependencies: tslib "^2.3.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.15.8": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" - integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== dependencies: - "@babel/highlight" "^7.14.5" + "@babel/highlight" "^7.16.0" -"@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== +"@babel/compat-data@^7.16.0": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" + integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== -"@babel/core@^7.1.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.8.tgz#195b9f2bffe995d2c6c159e72fe525b4114e8c10" - integrity sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og== +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.7.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" + integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== dependencies: - "@babel/code-frame" "^7.15.8" - "@babel/generator" "^7.15.8" - "@babel/helper-compilation-targets" "^7.15.4" - "@babel/helper-module-transforms" "^7.15.8" - "@babel/helpers" "^7.15.4" - "@babel/parser" "^7.15.8" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.6" + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helpers" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -1902,113 +1890,113 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.15.4", "@babel/generator@^7.15.8", "@babel/generator@^7.7.2": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" - integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== +"@babel/generator@^7.16.0", "@babel/generator@^7.7.2": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== dependencies: - "@babel/types" "^7.15.6" + "@babel/types" "^7.16.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-compilation-targets@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" - integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== +"@babel/helper-compilation-targets@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" + integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== dependencies: - "@babel/compat-data" "^7.15.0" + "@babel/compat-data" "^7.16.0" "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" + browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-function-name@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" - integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== dependencies: - "@babel/helper-get-function-arity" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-get-function-arity@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" - integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-hoist-variables@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" - integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-member-expression-to-functions@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" - integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== +"@babel/helper-member-expression-to-functions@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" + integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-module-imports@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" - integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== +"@babel/helper-module-imports@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-module-transforms@^7.15.8": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2" - integrity sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg== +"@babel/helper-module-transforms@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" + integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== dependencies: - "@babel/helper-module-imports" "^7.15.4" - "@babel/helper-replace-supers" "^7.15.4" - "@babel/helper-simple-access" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.6" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-optimise-call-expression@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" - integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== +"@babel/helper-optimise-call-expression@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" + integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-replace-supers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" - integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== +"@babel/helper-replace-supers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" + integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.15.4" - "@babel/helper-optimise-call-expression" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/traverse" "^7.16.0" + "@babel/types" "^7.16.0" -"@babel/helper-simple-access@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" - integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== +"@babel/helper-simple-access@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" + integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" - integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== dependencies: - "@babel/types" "^7.15.4" + "@babel/types" "^7.16.0" -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": +"@babel/helper-validator-identifier@^7.15.7": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== @@ -2018,28 +2006,28 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helpers@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" - integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== +"@babel/helpers@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" + integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== dependencies: - "@babel/template" "^7.15.4" - "@babel/traverse" "^7.15.4" - "@babel/types" "^7.15.4" + "@babel/template" "^7.16.0" + "@babel/traverse" "^7.16.3" + "@babel/types" "^7.16.0" -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== dependencies: - "@babel/helper-validator-identifier" "^7.14.5" + "@babel/helper-validator-identifier" "^7.15.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.15.4", "@babel/parser@^7.15.8", "@babel/parser@^7.7.2": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" - integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.7.2": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" + integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -2126,50 +2114,50 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716" - integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" + integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/runtime-corejs3@^7.12.1": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz#403139af262b9a6e8f9ba04a6fdcebf8de692bf1" - integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg== + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.3.tgz#1e25de4fa994c57c18e5fdda6cc810dac70f5590" + integrity sha512-IAdDC7T0+wEB4y2gbIL0uOXEYpiZEeuFUTVbdGq+UwCcF35T/tS8KrmMomEwEc5wBbyfH3PJVpTSUqrhPDXFcQ== dependencies: - core-js-pure "^3.16.0" + core-js-pure "^3.19.0" regenerator-runtime "^0.13.4" -"@babel/template@^7.15.4", "@babel/template@^7.3.3": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" - integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.15.4", "@babel/traverse@^7.7.2": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" - integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" +"@babel/template@^7.16.0", "@babel/template@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.7.2": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" + integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.3" + "@babel/types" "^7.16.0" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.15.4", "@babel/types@^7.15.6", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - 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== +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== dependencies: - "@babel/helper-validator-identifier" "^7.14.9" + "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -2224,16 +2212,16 @@ minimatch "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@iarna/toml@2.2.5": version "2.2.5" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== -"@isaacs/string-locale-compare@^1.0.1", "@isaacs/string-locale-compare@^1.1.0": +"@isaacs/string-locale-compare@*", "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== @@ -2472,21 +2460,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0", "@npmcli/arborist@^2.9.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" - integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== +"@npmcli/arborist@*", "@npmcli/arborist@^4.0.0": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.0.5.tgz#7cdcfed28cad03803f5d75caf2b0f3051165ee70" + integrity sha512-WR2cqxzjsvmHJ9sKCdqBYG/qeiAXB9ev1iq1W2Rry7LxeJ7eDtTr4mOWe/TBvp6xFzevGecQc2YEWwExTuLZLg== dependencies: - "@isaacs/string-locale-compare" "^1.0.1" + "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^1.0.2" - "@npmcli/metavuln-calculator" "^1.1.0" + "@npmcli/map-workspaces" "^2.0.0" + "@npmcli/metavuln-calculator" "^2.0.0" "@npmcli/move-file" "^1.1.0" "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^1.0.1" + "@npmcli/node-gyp" "^1.0.3" "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^1.8.2" - bin-links "^2.2.1" + "@npmcli/run-script" "^2.0.0" + bin-links "^2.3.0" cacache "^15.0.3" common-ancestor-path "^1.0.1" json-parse-even-better-errors "^2.3.1" @@ -2497,7 +2485,7 @@ npm-package-arg "^8.1.5" npm-pick-manifest "^6.1.0" npm-registry-fetch "^11.0.0" - pacote "^11.3.5" + pacote "^12.0.2" parse-conflict-json "^1.1.1" proc-log "^1.0.0" promise-all-reject-late "^1.0.0" @@ -2510,20 +2498,15 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@^1.2.0": +"@npmcli/ci-detect@*", "@npmcli/ci-detect@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== -"@npmcli/ci-detect@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz#6c1d2c625fb6ef1b9dea85ad0a5afcbef85ef22a" - integrity sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q== - -"@npmcli/config@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.0.tgz#364fbe942037e562a832a113206e14ccb651f7bc" - integrity sha512-yjiC1xv7KTmUTqfRwN2ZL7BHV160ctGF0fLXmKkkMXj40UOvBe45Apwvt5JsFRtXSoHkUYy1ouzscziuWNzklg== +"@npmcli/config@*": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.1.tgz#41d80ce272831461b5cb158afa110525d4be0fed" + integrity sha512-F/8R/Zqun8682TgaCILUNoaVfd1LVaYZ/jcVt9KWzfKpzcPus1zEApAl54PqVqVJbNq6f01QTDQHD6L/n56BXw== dependencies: ini "^2.0.0" mkdirp-infer-owner "^2.0.0" @@ -2568,23 +2551,24 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/map-workspaces@^1.0.2", "@npmcli/map-workspaces@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab" - integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q== +"@npmcli/map-workspaces@*", "@npmcli/map-workspaces@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz#e342efbbdd0dad1bba5d7723b674ca668bf8ac5a" + integrity sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g== dependencies: "@npmcli/name-from-folder" "^1.0.1" glob "^7.1.6" minimatch "^3.0.4" read-package-json-fast "^2.0.1" -"@npmcli/metavuln-calculator@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" - integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== +"@npmcli/metavuln-calculator@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" + integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== dependencies: cacache "^15.0.5" - pacote "^11.1.11" + json-parse-even-better-errors "^2.3.1" + pacote "^12.0.0" semver "^7.3.2" "@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": @@ -2600,12 +2584,12 @@ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== -"@npmcli/node-gyp@^1.0.1", "@npmcli/node-gyp@^1.0.2": +"@npmcli/node-gyp@^1.0.2", "@npmcli/node-gyp@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== -"@npmcli/package-json@^1.0.1": +"@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== @@ -2619,7 +2603,17 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.6": +"@npmcli/run-script@*", "@npmcli/run-script@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" + integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== + dependencies: + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + node-gyp "^8.2.0" + read-package-json-fast "^2.0.1" + +"@npmcli/run-script@^1.8.2": version "1.8.6" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== @@ -2732,6 +2726,7 @@ "@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.4": version "0.0.4" + uid "0c444386e79d6145901212507521b8a0a48af000" resolved "https://github.com/renovatebot/eslint-plugin#0c444386e79d6145901212507521b8a0a48af000" "@renovate/pep440@1.0.0": @@ -2795,9 +2790,9 @@ parse-json "^5.0.0" "@semantic-release/github@^8.0.0": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.1.tgz#58d6bc5cdb4b4beaa0a106a9a9ad420318144e4f" - integrity sha512-T01lfh4yBZodAeo8t0U+W5hmPYR9BdnfwLDerXnGaYeLXm8+KMx4mQEBAf/UbRVlzmIKTqMx+/s9fY/mSQNV0A== + version "8.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.2.tgz#80114a41f6ec8ab6c0d38a436b48ff3f2223ab16" + integrity sha512-wIbfhOeuxlYzMTjtSAa2xgr54n7ZuPAS2gadyTWBpUt2PNAPgla7A6XxCXJnaKPgfVF0iFfSk3B+KlVKk6ByVg== dependencies: "@octokit/rest" "^18.0.0" "@semantic-release/error" "^2.2.0" @@ -2811,17 +2806,17 @@ https-proxy-agent "^5.0.0" issue-parser "^6.0.0" lodash "^4.17.4" - mime "^2.4.3" + mime "^3.0.0" p-filter "^2.0.0" p-retry "^4.0.0" url-join "^4.0.0" "@semantic-release/npm@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-8.0.0.tgz#ed1ff7fe59498e909ee3fe567134ae2e51ceb7e1" - integrity sha512-MAlynjIaN5XwBEzsq3xbZ8I+riD9zhLvpPqGCPaZ0j/ySbR0Sg3YG1MYv03fC1aygPFFC5RwefMxKids9llvDg== + version "8.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-8.0.3.tgz#69378ce529bbd263aa8fc899b2d0f874114e0302" + integrity sha512-Qbg7x/O1t3sJqsv2+U0AL4Utgi/ymlCiUdt67Ftz9HL9N8aDML4t2tE0T9MBaYdqwD976hz57DqHHXKVppUBoA== dependencies: - "@semantic-release/error" "^2.2.0" + "@semantic-release/error" "^3.0.0" aggregate-error "^3.0.0" execa "^5.0.0" fs-extra "^10.0.0" @@ -2871,9 +2866,9 @@ "@sinonjs/commons" "^1.7.0" "@sinonjs/fake-timers@^8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz#1c1c9a91419f804e59ae8df316a07dd1c3a76b94" - integrity sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew== + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== dependencies: "@sinonjs/commons" "^1.7.0" @@ -3070,9 +3065,9 @@ integrity sha512-ZB+G1yG5pQoWaaHg0D4H9c29q61Y0O/kyOtEx0IKL3Gca3EGEcN3jh5OHnoQp00/pFoqJR63htsviivOkTXuCw== "@types/emscripten@^1.38.0": - version "1.39.5" - resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.5.tgz#eb0fb1048301df980b6f8a5ec3d63f7d1572bb73" - integrity sha512-DIOOg+POSrYl+OlNRHQuIEqCd8DCtynG57H862UCce16nXJX7J8eWxNGgOcf8Eyge8zXeSs27mz1UcFu8L/L7g== + version "1.39.6" + resolved "https://registry.yarnpkg.com/@types/emscripten/-/emscripten-1.39.6.tgz#698b90fe60d44acf93c31064218fbea93fbfd85a" + integrity sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg== "@types/eslint@7.29.0": version "7.29.0" @@ -3105,9 +3100,9 @@ integrity sha512-B/SvVZMrLRUI9mOoguNNz58gV8A5PDtcGIaUe5PYmzAUTsIJ+ZAn/ujwBIuGIU3mRHY5SfV9dyWfnhOWtOVh6A== "@types/glob@*": - version "7.1.4" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672" - integrity sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -3263,9 +3258,9 @@ integrity sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA== "@types/node@*": - version "16.10.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" - integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== + version "16.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.9.tgz#879be3ad7af29f4c1a5c433421bf99fab7047185" + integrity sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A== "@types/node@14.17.33": version "14.17.33" @@ -3293,9 +3288,9 @@ integrity sha512-fCA3btjE7QFeRLfcD0Sjg+6/CnmC66HpMBoRfRzd2raTaWMJV21CCZ0LO8MOqf8onl5n0EPfjq4zDhbyX8SVwA== "@types/prettier@^2.1.5": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb" - integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw== + version "2.4.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" + integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== "@types/redis@^2.8.30": version "2.8.32" @@ -3331,16 +3326,11 @@ resolved "https://registry.yarnpkg.com/@types/semver-utils/-/semver-utils-1.1.1.tgz#4260b9ce13344725069a1ff86bd2f4d6c70a443e" integrity sha512-WLZZQdwo5P+H6R+bDDCFqFSlP5Jtk6gyXpE0R0KAVQbcMGmxpVsNX8dah640hY4+PpRG2+Ph3dcwDHzrOAOZ7A== -"@types/semver@7.3.9": +"@types/semver@7.3.9", "@types/semver@^7.1.0": version "7.3.9" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== -"@types/semver@^7.1.0": - version "7.3.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.8.tgz#508a27995498d7586dcecd77c25e289bfaf90c59" - integrity sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now== - "@types/shelljs@0.8.9": version "0.8.9" resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.9.tgz#45dd8501aa9882976ca3610517dac3831c2fbbf4" @@ -3439,14 +3429,14 @@ eslint-utils "^3.0.0" "@typescript-eslint/experimental-utils@^5.0.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.0.tgz#ee56b4957547ed2b0fc7451205e41502e664f546" - integrity sha512-NFVxYTjKj69qB0FM+piah1x3G/63WB8vCBMnlnEHUsiLzXSTWb9FmFn36FD9Zb4APKBLY3xRArOGSMQkuzTF1w== + version "5.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz#238a7418d2da3b24874ba35385eb21cc61d2a65e" + integrity sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.3.0" - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/typescript-estree" "5.3.0" + "@typescript-eslint/scope-manager" "5.4.0" + "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/typescript-estree" "5.4.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -3460,14 +3450,6 @@ "@typescript-eslint/typescript-estree" "5.3.1" debug "^4.3.2" -"@typescript-eslint/scope-manager@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.0.tgz#97d0ccc7c9158e89e202d5e24ce6ba49052d432e" - integrity sha512-22Uic9oRlTsPppy5Tcwfj+QET5RWEnZ5414Prby465XxQrQFZ6nnm5KnXgnsAJefG4hEgMnaxTB3kNEyjdjj6A== - dependencies: - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/visitor-keys" "5.3.0" - "@typescript-eslint/scope-manager@5.3.1": version "5.3.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz#3cfbfbcf5488fb2a9a6fbbe97963ee1e8d419269" @@ -3476,28 +3458,23 @@ "@typescript-eslint/types" "5.3.1" "@typescript-eslint/visitor-keys" "5.3.1" -"@typescript-eslint/types@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.0.tgz#af29fd53867c2df0028c57c36a655bd7e9e05416" - integrity sha512-fce5pG41/w8O6ahQEhXmMV+xuh4+GayzqEogN24EK+vECA3I6pUwKuLi5QbXO721EMitpQne5VKXofPonYlAQg== +"@typescript-eslint/scope-manager@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz#aaab08415f4a9cf32b870c7750ae8ba4607126a1" + integrity sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA== + dependencies: + "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/visitor-keys" "5.4.0" "@typescript-eslint/types@5.3.1": version "5.3.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.1.tgz#afaa715b69ebfcfde3af8b0403bf27527912f9b7" integrity sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ== -"@typescript-eslint/typescript-estree@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.0.tgz#4f68ddd46dc2983182402d2ab21fb44ad94988cf" - integrity sha512-FJ0nqcaUOpn/6Z4Jwbtf+o0valjBLkqc3MWkMvrhA2TvzFXtcclIM8F4MBEmYa2kgcI8EZeSAzwoSrIC8JYkug== - dependencies: - "@typescript-eslint/types" "5.3.0" - "@typescript-eslint/visitor-keys" "5.3.0" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" - tsutils "^3.21.0" +"@typescript-eslint/types@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.4.0.tgz#b1c130f4b381b77bec19696c6e3366f9781ce8f2" + integrity sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA== "@typescript-eslint/typescript-estree@5.3.1": version "5.3.1" @@ -3512,13 +3489,18 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.0.tgz#a6258790f3b7b2547f70ed8d4a1e0c3499994523" - integrity sha512-oVIAfIQuq0x2TFDNLVavUn548WL+7hdhxYn+9j3YdJJXB7mH9dAmZNJsPDa7Jc+B9WGqoiex7GUDbyMxV0a/aw== +"@typescript-eslint/typescript-estree@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz#fe524fb308973c68ebeb7428f3b64499a6ba5fc0" + integrity sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA== dependencies: - "@typescript-eslint/types" "5.3.0" - eslint-visitor-keys "^3.0.0" + "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/visitor-keys" "5.4.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" "@typescript-eslint/visitor-keys@5.3.1": version "5.3.1" @@ -3528,6 +3510,14 @@ "@typescript-eslint/types" "5.3.1" eslint-visitor-keys "^3.0.0" +"@typescript-eslint/visitor-keys@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz#09bc28efd3621f292fe88c86eef3bf4893364c8c" + integrity sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg== + dependencies: + "@typescript-eslint/types" "5.4.0" + eslint-visitor-keys "^3.0.0" + "@yarnpkg/core@2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-2.4.0.tgz#b5d8cc7ee2ddb022816c7afa3f83c3ee3d317c80" @@ -3566,9 +3556,9 @@ tunnel "^0.0.6" "@yarnpkg/fslib@^2.4.0", "@yarnpkg/fslib@^2.5.0": - version "2.5.2" - resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.5.2.tgz#6dcfbe12fe2d1bce14cb6e4518054abb1dd7c48d" - integrity sha512-Tonb3jXsxsGB+uTlzG6r2zcAUekIG0FfCZV/kM14fPvTE3Z1wC0cMtiD4IUzxSqyhC/zR+T1pLaTPT3xDzSvqg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/fslib/-/fslib-2.6.0.tgz#d51b7c389c8f42a79babfc5d11ccbd65769a9620" + integrity sha512-NgK7aYYNrFOFJGcWWEDXHHYNt93L3A0Ojv90Xl9+f72T+CaFkOAXyK2XBwEYreot7lT1NeopcnkmFRjHgKRKgQ== dependencies: "@yarnpkg/libzip" "^2.2.2" tslib "^1.13.0" @@ -3589,7 +3579,7 @@ "@types/emscripten" "^1.38.0" tslib "^1.13.0" -"@yarnpkg/parsers@2.4.1": +"@yarnpkg/parsers@2.4.1", "@yarnpkg/parsers@^2.3.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-2.4.1.tgz#3e9d834b22783245064599835ffbb17eb806497e" integrity sha512-QqJ5asvS5Fol9MjTy8vS8512T2djEA0Uglu23Ap6G4AqbUWykC83bCnY4AjSyGxFV1rOlkWBn7RKsAqei/9cLw== @@ -3597,14 +3587,6 @@ js-yaml "^3.10.0" tslib "^1.13.0" -"@yarnpkg/parsers@^2.3.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-2.4.0.tgz#5d092939022c96b256eaea461816ef2b7d77fa1b" - integrity sha512-XWgiNGh4MkhdBTJVEbXEqzk66JKjvxTtKGeLPqo3rnJ7JiJnRaK2n9MLTKQB0uoRMWYzPlISdIlok6H9OdlOVQ== - dependencies: - js-yaml "^3.10.0" - tslib "^1.13.0" - "@yarnpkg/pnp@^2.3.2": version "2.3.2" resolved "https://registry.yarnpkg.com/@yarnpkg/pnp/-/pnp-2.3.2.tgz#9a052a06bf09c9f0b7c31e0867a7e725cb6401ed" @@ -3641,7 +3623,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@1, abbrev@~1.1.1: +abbrev@*, abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3674,10 +3656,10 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.4.1, acorn@^8.5.0: - 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== +acorn@^8.2.4, acorn@^8.4.1, acorn@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" + integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -3730,11 +3712,6 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3759,12 +3736,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@~0.3.2: +ansicolors@*, ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= -ansistyles@~0.1.3: +ansistyles@*: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= @@ -3792,7 +3769,7 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archy@~1.0.0: +archy@*: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= @@ -3896,9 +3873,9 @@ asn1.js@^5.0.0: safer-buffer "^2.1.0" asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -3959,14 +3936,14 @@ babel-jest@^27.3.1: slash "^3.0.0" babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" babel-plugin-jest-hoist@^27.2.0: @@ -4037,13 +4014,13 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -bin-links@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.2.1.tgz#347d9dbb48f7d60e6c11fe68b77a424bee14d61b" - integrity sha512-wFzVTqavpgCCYAh8SVBdnZdiQMxTkGR+T3b14CNpBXIBe2neJWaMGAZ55XWWHELJJ89dscuq0VCBqcVaIOgCMg== +bin-links@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" + integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== dependencies: cmd-shim "^4.0.1" - mkdirp "^1.0.3" + mkdirp-infer-owner "^2.0.0" npm-normalize-package-bin "^1.0.0" read-cmd-shim "^2.0.0" rimraf "^3.0.0" @@ -4113,16 +4090,16 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.16.6: - version "4.17.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624" - integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ== +browserslist@^4.17.5: + version "4.18.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" + integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== dependencies: - caniuse-lite "^1.0.30001264" - electron-to-chromium "^1.3.857" + caniuse-lite "^1.0.30001280" + electron-to-chromium "^1.3.896" escalade "^3.1.1" - node-releases "^1.1.77" - picocolors "^0.2.1" + node-releases "^2.0.1" + picocolors "^1.0.0" bs-logger@0.x: version "0.2.6" @@ -4171,7 +4148,7 @@ bunyan@1.8.15: mv "~2" safe-json-stringify "~1" -cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: +cacache@*, cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -4200,7 +4177,7 @@ cacheable-lookup@^5.0.3: resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== -cacheable-request@^7.0.1: +cacheable-request@^7.0.1, cacheable-request@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== @@ -4241,14 +4218,14 @@ camelcase@^5.0.0, camelcase@^5.3.1: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + version "6.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" + integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== -caniuse-lite@^1.0.30001264: - version "1.0.30001265" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3" - integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw== +caniuse-lite@^1.0.30001280: + version "1.0.30001282" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz#38c781ee0a90ccfe1fe7fefd00e43f5ffdcb96fd" + integrity sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg== cardinal@^2.1.1: version "2.1.1" @@ -4263,7 +4240,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@*, chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4313,7 +4290,7 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chownr@^2.0.0: +chownr@*, chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== @@ -4323,7 +4300,7 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -ci-info@^3.1.1, ci-info@^3.2.0: +ci-info@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== @@ -4350,15 +4327,15 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= +cli-columns@*: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" -cli-table3@^0.6.0: +cli-table3@*, cli-table3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -4450,7 +4427,7 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -columnify@~1.5.4: +columnify@*: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= @@ -4549,9 +4526,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.2" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.2.tgz#190fb9900c6e02be0c0bca9b03d57e24982639fd" - integrity sha512-Jr9KAKgqAkwXMRHjxDwO/zOCDKod1XdAESHAGuJX38iZ7ZzVti/tvVoysO0suMsdAObp9NQ2rHSsSbnAqZ5f5g== + version "3.2.3" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" + integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" @@ -4567,15 +4544,15 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -core-js-pure@^3.16.0: - version "3.18.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.2.tgz#d8cc11d4885ea919f3de776d45e720e4c769d406" - integrity sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA== +core-js-pure@^3.19.0: + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.1.tgz#edffc1fc7634000a55ba05e95b3f0fe9587a5aa4" + integrity sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ== core-js@^3.6.5: - version "3.18.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.2.tgz#63a551e8a29f305cd4123754846e65896619ba5b" - integrity sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ== + version "3.19.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" + integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== core-util-is@1.0.2: version "1.0.2" @@ -4997,10 +4974,10 @@ editorconfig@0.15.3: semver "^5.6.0" sigmund "^1.0.1" -electron-to-chromium@^1.3.857: - version "1.3.864" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.864.tgz#6a993bcc196a2b8b3df84d28d5d4dd912393885f" - integrity sha512-v4rbad8GO6/yVI92WOeU9Wgxc4NA0n4f6P1FvZTY+jyY7JHEhw3bduYu60v3Q1h81Cg6eo4ApZrFPuycwd5hGw== +electron-to-chromium@^1.3.896: + version "1.3.904" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.904.tgz#52a353994faeb0f2a9fab3606b4e0614d1af7b58" + integrity sha512-x5uZWXcVNYkTh4JubD7KSC1VMKz0vZwJUqVwY3ihsW0bst1BXDe494Uqbg3Y0fDGVjJqA8vEeGuvO5foyH2+qw== email-addresses@5.0.0: version "5.0.0" @@ -5076,11 +5053,12 @@ entities@~2.1.0: integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== env-ci@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.0.2.tgz#48b6687f8af8cdf5e31b8fcf2987553d085249d9" - integrity sha512-Xc41mKvjouTXD3Oy9AqySz1IeyvJvHZ20Twf5ZLYbNpPPIuCnL/qHCmNlD01LoNy0JTunw9HPYVptD19Ac7Mbw== + version "5.4.1" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.4.1.tgz#814387ddd6857b37472ef612361f34d720c29a18" + integrity sha512-xyuCtyFZLpnW5aH0JstETKTSMwHHQX4m42juzEZzvbUCJX7RiPVlhASKM0f/cJ4vvI/+txMkZ7F5To6dCdPYhg== dependencies: - execa "^4.0.0" + execa "^5.0.0" + fromentries "^1.3.2" java-properties "^1.0.0" env-paths@^2.2.0: @@ -5276,7 +5254,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0: +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== @@ -5326,13 +5304,13 @@ eslint@8.2.0: v8-compile-cache "^2.0.3" espree@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" - integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== + version "9.1.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.1.0.tgz#ba9d3c9b34eeae205724124e31de4543d59fbf74" + integrity sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ== dependencies: - acorn "^8.5.0" + acorn "^8.6.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.0.0" + eslint-visitor-keys "^3.1.0" esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" @@ -5359,9 +5337,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -5480,9 +5458,9 @@ extsprintf@1.3.0: integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -5520,7 +5498,7 @@ fast-xml-parser@3.19.0: resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== -fastest-levenshtein@^1.0.12: +fastest-levenshtein@*: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -5618,9 +5596,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.1.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" - integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== forever-agent@~0.6.1: version "0.6.1" @@ -5653,6 +5631,11 @@ from2@^2.3.0: inherits "^2.0.1" readable-stream "^2.0.0" +fromentries@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -5694,19 +5677,19 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.1.tgz#4bea07bcde3782f06dced8950e51307aa0f4a346" - integrity sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ== +gauge@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.0.tgz#afba07aa0374a93c6219603b1fb83eaa2264d8f8" + integrity sha512-F8sU45yQpjQjxKkm1UOAhf0U/O0aFt//Fl7hsrNVto+patMHjs7dPI9mFOGUKbhrgKm0S3EjW3scMFuQmWSROw== dependencies: + ansi-regex "^5.0.1" aproba "^1.0.3 || ^2.0.0" color-support "^1.1.2" console-control-strings "^1.0.0" has-unicode "^2.0.1" - object-assign "^4.1.1" signal-exit "^3.0.0" - string-width "^1.0.1 || ^2.0.0" - strip-ansi "^3.0.1 || ^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" wide-align "^1.1.2" gauge@~2.7.3: @@ -5831,7 +5814,7 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@*, glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5873,9 +5856,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" - integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== dependencies: type-fest "^0.20.2" @@ -5898,7 +5881,7 @@ globby@^11.0.0, globby@^11.0.1, globby@^11.0.4, globby@~11.0.4: merge2 "^1.3.0" slash "^3.0.0" -got@11.8.2, got@^11.7.0: +got@11.8.2: version "11.8.2" resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== @@ -5915,7 +5898,24 @@ got@11.8.2, got@^11.7.0: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8: +got@^11.7.0: + version "11.8.3" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" + integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@*, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -6024,18 +6024,18 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: +hosted-git-info@*, hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -6144,6 +6144,13 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" +ignore-walk@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" + integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== + dependencies: + minimatch "^3.0.4" + ignore@5.1.9, ignore@^5.1.4, ignore@^5.1.8: version "5.1.9" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" @@ -6203,7 +6210,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@2.0.0, ini@^2.0.0: +ini@*, ini@2.0.0, ini@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== @@ -6213,7 +6220,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^2.0.5: +init-package-json@*: 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== @@ -6313,14 +6320,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-ci@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.0.tgz#c7e7be3c9d8eef7d0fa144390bd1e4b88dc4c994" - integrity sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ== - dependencies: - ci-info "^3.1.1" - -is-cidr@^4.0.2: +is-cidr@*: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== @@ -6358,11 +6358,6 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -6536,12 +6531,12 @@ issue-parser@^6.0.0: lodash.isstring "^4.0.1" lodash.uniqby "^4.7.0" -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: +istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -6551,6 +6546,17 @@ istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" +istanbul-lib-instrument@^5.0.4: + version "5.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" + integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -6561,18 +6567,18 @@ istanbul-lib-report@^3.0.0: supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.3.tgz#974d682037f6d12b15dc55f9a2a5f8f1ea923831" - integrity sha512-0i77ZFLsb9U3DHi22WzmIngVzfoyxxbQcZRqlF3KoKmCJGq9nhFHoGi8FqBztN2rE8w6hURnZghetn0xpkVb6A== + version "3.0.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" + integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -6671,17 +6677,7 @@ jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.0.0: - version "27.2.5" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.2.5.tgz#908f7a6aca5653824516ad30e0a9fd9767e53623" - integrity sha512-7gfwwyYkeslOOVQY4tVq5TaQa92mWfC9COsVYMNVYyJTOYAqbIkoD3twi5A+h+tAPtAelRxkqY6/xu+jwTr0dA== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.0.6" - jest-get-type "^27.0.6" - pretty-format "^27.2.5" - -jest-diff@^27.0.6, jest-diff@^27.2.5, jest-diff@^27.3.1: +jest-diff@^27.0.0, jest-diff@^27.0.6, jest-diff@^27.2.5, jest-diff@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.3.1.tgz#d2775fea15411f5f5aeda2a5e02c2f36440f6d55" integrity sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ== @@ -6749,12 +6745,7 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-get-type@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe" - integrity sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg== - -jest-get-type@^27.3.1: +jest-get-type@^27.0.6, jest-get-type@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg== @@ -7061,19 +7052,7 @@ jest-util@^26.0.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.0.0: - version "27.2.5" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.2.5.tgz#88740c4024d223634a82ce7c2263e8bc6df3b3ba" - integrity sha512-QRhDC6XxISntMzFRd/OQ6TGsjbzA5ONO0tlAj2ElHs155x1aEr0rkYJBEysG6H/gZVH3oGFzCdAB/GA8leh8NQ== - dependencies: - "@jest/types" "^27.2.5" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^3.0.0" - picomatch "^2.2.3" - -jest-util@^27.3.1: +jest-util@^27.0.0, jest-util@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.3.1.tgz#a58cdc7b6c8a560caac9ed6bdfc4e4ff23f80429" integrity sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw== @@ -7219,7 +7198,7 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@*, json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -7293,9 +7272,9 @@ jsprim@^1.2.2: verror "1.10.0" just-diff-apply@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-3.0.0.tgz#a77348d24f0694e378b57293dceb65bdf5a91c4f" - integrity sha512-K2MLc+ZC2DVxX4V61bIKPeMUUfj1YYZ3h0myhchDXOW1cKoPZMnjIoNCqv9bF2n5Oob1PFxuR2gVJxkxz4e58w== + version "3.1.2" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-3.1.2.tgz#710d8cda00c65dc4e692df50dbe9bac5581c2193" + integrity sha512-TCa7ZdxCeq6q3Rgms2JCRHTCfWAETPZ8SzYUbkYF6KR3I03sN29DaOIC+xyWboIcMvjAsD5iG2u/RWzHD8XpgQ== just-diff@^3.0.1: version "3.1.1" @@ -7308,9 +7287,9 @@ just-extend@^4.0.2: integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== keyv@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" - integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376" + integrity sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg== dependencies: json-buffer "3.0.1" @@ -7350,7 +7329,7 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@^4.0.2: +libnpmaccess@*: version "4.0.3" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== @@ -7360,7 +7339,7 @@ libnpmaccess@^4.0.2: npm-package-arg "^8.1.2" npm-registry-fetch "^11.0.0" -libnpmdiff@^2.0.4: +libnpmdiff@*: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== @@ -7374,31 +7353,31 @@ libnpmdiff@^2.0.4: pacote "^11.3.0" tar "^6.1.0" -libnpmexec@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-2.0.1.tgz#729ae3e15a3ba225964ccf248117a75d311eeb73" - integrity sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw== +libnpmexec@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-3.0.1.tgz#bc2fddf1b7bd2c1b2c43b4b726ec4cf11920ad0a" + integrity sha512-VUZTpkKBRPv3Z9DIjbsiHhEQXmQ+OwSQ/yLCY9i6CFE8UIczWyE6wVxP5sJ5NSGtSTUs6I98WewQOL45OKMyxA== dependencies: - "@npmcli/arborist" "^2.3.0" + "@npmcli/arborist" "^4.0.0" "@npmcli/ci-detect" "^1.3.0" - "@npmcli/run-script" "^1.8.4" + "@npmcli/run-script" "^2.0.0" chalk "^4.1.0" mkdirp-infer-owner "^2.0.0" npm-package-arg "^8.1.2" - pacote "^11.3.1" + pacote "^12.0.0" proc-log "^1.0.0" read "^1.0.7" read-package-json-fast "^2.0.2" walk-up-path "^1.0.0" -libnpmfund@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.1.0.tgz#ee91313905b3194b900530efa339bc3f9fc4e5c4" - integrity sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ== +libnpmfund@*: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-2.0.1.tgz#3c7e2be61e8c79e22c4918dde91ef57f64faf064" + integrity sha512-OhDbjB3gqdRyuQ56AhUtO49HZ7cZHSM7yCnhQa1lsNpmAmGPnjCImfx8SoWaAkUM7Ov8jngMR5JHKAr1ddjHTQ== dependencies: - "@npmcli/arborist" "^2.5.0" + "@npmcli/arborist" "^4.0.0" -libnpmhook@^6.0.2: +libnpmhook@*: version "6.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.3.tgz#1d7f0d7e6a7932fbf7ce0881fdb0ed8bf8748a30" integrity sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g== @@ -7406,7 +7385,7 @@ libnpmhook@^6.0.2: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmorg@^2.0.2: +libnpmorg@*: version "2.0.3" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.3.tgz#4e605d4113dfa16792d75343824a0625c76703bc" integrity sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA== @@ -7414,16 +7393,16 @@ libnpmorg@^2.0.2: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmpack@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" - integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== +libnpmpack@*: + version "3.0.0" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-3.0.0.tgz#b1cdf182106bc0d25910e79bb5c9b6c23cd71670" + integrity sha512-W6lt4blkR9YXu/qOrFknfnKBajz/1GvAc5q1XcWTGuBJn2DYKDWHtA7x1fuMQdn7hKDBOPlZ/Aqll+ZvAnrM6g== dependencies: - "@npmcli/run-script" "^1.8.3" + "@npmcli/run-script" "^2.0.0" npm-package-arg "^8.1.0" - pacote "^11.2.6" + pacote "^12.0.0" -libnpmpublish@^4.0.1: +libnpmpublish@*: version "4.0.2" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== @@ -7434,14 +7413,14 @@ libnpmpublish@^4.0.1: semver "^7.1.3" ssri "^8.0.1" -libnpmsearch@^3.1.1: +libnpmsearch@*: version "3.1.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.2.tgz#aee81b9e4768750d842b627a3051abc89fdc15f3" integrity sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw== dependencies: npm-registry-fetch "^11.0.0" -libnpmteam@^2.0.3: +libnpmteam@*: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.4.tgz#9dbe2e18ae3cb97551ec07d2a2daf9944f3edc4c" integrity sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw== @@ -7449,21 +7428,21 @@ libnpmteam@^2.0.3: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmversion@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.2.1.tgz#689aa7fe0159939b3cbbf323741d34976f4289e9" - integrity sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ== +libnpmversion@*: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-2.0.1.tgz#20b1425d88cd99c66806a54b458d2d654066b550" + integrity sha512-uFGtNTe/m0GOIBQCE4ryIsgGNJdeShW+qvYtKNLCCuiG7JY3YEslL/maFFZbaO4wlQa/oj1t0Bm9TyjahvtgQQ== dependencies: "@npmcli/git" "^2.0.7" - "@npmcli/run-script" "^1.8.4" + "@npmcli/run-script" "^2.0.0" json-parse-even-better-errors "^2.3.1" semver "^7.3.5" stringify-package "^1.0.1" lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== linkify-it@^3.0.1: version "3.0.3" @@ -7601,28 +7580,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^8.0.14: - version "8.0.14" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz#aaba73ae0ab5586ad8eaa68bd83332669393e222" - integrity sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.0.5" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - promise-retry "^2.0.1" - socks-proxy-agent "^5.0.0" - ssri "^8.0.0" - -make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: +make-fetch-happen@*, make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -7644,12 +7602,12 @@ make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: socks-proxy-agent "^6.0.0" ssri "^8.0.0" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" + tmpl "1.0.5" map-obj@^1.0.0: version "1.0.1" @@ -7852,22 +7810,22 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@~4.0.4: braces "^3.0.1" picomatch "^2.2.3" -mime-db@1.50.0: - version "1.50.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" - integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.33" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" - integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.50.0" + mime-db "1.51.0" -mime@^2.4.3: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== mimic-fn@^2.1.0: version "2.1.0" @@ -7948,7 +7906,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@*, minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -7962,7 +7920,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== @@ -7977,7 +7935,7 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@^2.0.0: +mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== @@ -7986,6 +7944,11 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -7993,11 +7956,6 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mock-fs@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.2.tgz#6fa486e06d00f8793a8d2228de980eff93ce6db7" @@ -8028,6 +7986,11 @@ mri@^1.1.5: 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" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8038,11 +8001,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -8137,42 +8095,42 @@ node-emoji@^1.10.0: lodash "^4.17.21" node-fetch@^2.6.1: - version "2.6.5" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" - integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== + version "2.6.6" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== dependencies: whatwg-url "^5.0.0" -node-gyp@^7.1.0, node-gyp@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== +node-gyp@*, node-gyp@^8.0.0, node-gyp@^8.2.0: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.3" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" + npmlog "^6.0.0" rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" + semver "^7.3.5" + tar "^6.1.2" which "^2.0.2" -node-gyp@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.2.0.tgz#ef509ccdf5cef3b4d93df0690b90aa55ff8c7977" - integrity sha512-KG8SdcoAnw2d6augGwl1kOayALUrXW/P2uOAm2J2+nmW/HjZo7y+8TDg7LejxbekOOSv3kzhq+NSUYkIDAX8eA== +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: env-paths "^2.2.0" glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^8.0.14" + graceful-fs "^4.2.3" nopt "^5.0.0" npmlog "^4.1.2" + request "^2.88.2" rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" + semver "^7.3.2" + tar "^6.0.2" which "^2.0.2" node-html-parser@3.3.6: @@ -8193,10 +8151,10 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-releases@^1.1.77: - version "1.1.77" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" - integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== node.extend@^2.0.0: version "2.0.2" @@ -8206,7 +8164,7 @@ node.extend@^2.0.0: has "^1.0.3" is "^3.2.1" -nopt@^5.0.0: +nopt@*, nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== @@ -8243,7 +8201,7 @@ normalize-url@^6.0.0, normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@^2.1.5: +npm-audit-report@*: version "2.1.5" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== @@ -8257,7 +8215,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== @@ -8269,7 +8227,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -8288,7 +8246,17 @@ npm-packlist@^2.1.4: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: +npm-packlist@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" + integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== + dependencies: + glob "^7.1.6" + ignore-walk "^4.0.1" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -8298,14 +8266,14 @@ npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: npm-package-arg "^8.1.2" semver "^7.3.4" -npm-profile@^5.0.3: +npm-profile@*: version "5.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.4.tgz#73e5bd1d808edc2c382d7139049cc367ac43161b" integrity sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA== dependencies: npm-registry-fetch "^11.0.0" -npm-registry-fetch@^11.0.0: +npm-registry-fetch@*, npm-registry-fetch@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== @@ -8339,7 +8307,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@^1.0.1: +npm-user-validate@*: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== @@ -8349,76 +8317,86 @@ npm@^7.0.0: resolved "https://registry.yarnpkg.com/npm/-/npm-7.24.2.tgz#861117af8241bea592289f22407230e5300e59ca" integrity sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ== dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^2.9.0" - "@npmcli/ci-detect" "^1.2.0" - "@npmcli/config" "^2.3.0" - "@npmcli/map-workspaces" "^1.0.4" - "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^1.8.6" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - archy "~1.0.0" - cacache "^15.3.0" - chalk "^4.1.2" - chownr "^2.0.0" - cli-columns "^3.1.2" - cli-table3 "^0.6.0" - columnify "~1.5.4" - fastest-levenshtein "^1.0.12" - glob "^7.2.0" - graceful-fs "^4.2.8" - hosted-git-info "^4.0.2" - ini "^2.0.0" - init-package-json "^2.0.5" - is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - libnpmaccess "^4.0.2" - libnpmdiff "^2.0.4" - libnpmexec "^2.0.1" - libnpmfund "^1.1.0" - libnpmhook "^6.0.2" - libnpmorg "^2.0.2" - libnpmpack "^2.0.1" - libnpmpublish "^4.0.1" - libnpmsearch "^3.1.1" - libnpmteam "^2.0.3" - libnpmversion "^1.2.1" - make-fetch-happen "^9.1.0" - minipass "^3.1.3" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - ms "^2.1.2" - node-gyp "^7.1.2" - nopt "^5.0.0" - npm-audit-report "^2.1.5" - npm-install-checks "^4.0.0" - npm-package-arg "^8.1.5" - npm-pick-manifest "^6.1.1" - npm-profile "^5.0.3" - npm-registry-fetch "^11.0.0" - npm-user-validate "^1.0.1" - npmlog "^5.0.1" - opener "^1.5.2" - pacote "^11.3.5" - parse-conflict-json "^1.1.1" - qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^4.1.1" - read-package-json-fast "^2.0.3" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.5" - ssri "^8.0.1" - tar "^6.1.11" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^1.0.4" - validate-npm-package-name "~3.0.0" - which "^2.0.2" - write-file-atomic "^3.0.3" + "@isaacs/string-locale-compare" "*" + "@npmcli/arborist" "*" + "@npmcli/ci-detect" "*" + "@npmcli/config" "*" + "@npmcli/map-workspaces" "*" + "@npmcli/package-json" "*" + "@npmcli/run-script" "*" + abbrev "*" + ansicolors "*" + ansistyles "*" + archy "*" + cacache "*" + chalk "*" + chownr "*" + cli-columns "*" + cli-table3 "*" + columnify "*" + fastest-levenshtein "*" + glob "*" + graceful-fs "*" + hosted-git-info "*" + ini "*" + init-package-json "*" + is-cidr "*" + json-parse-even-better-errors "*" + libnpmaccess "*" + libnpmdiff "*" + libnpmexec "*" + libnpmfund "*" + libnpmhook "*" + libnpmorg "*" + libnpmpack "*" + libnpmpublish "*" + libnpmsearch "*" + libnpmteam "*" + libnpmversion "*" + make-fetch-happen "*" + minipass "*" + minipass-pipeline "*" + mkdirp "*" + mkdirp-infer-owner "*" + ms "*" + node-gyp "*" + nopt "*" + npm-audit-report "*" + npm-install-checks "*" + npm-package-arg "*" + npm-pick-manifest "*" + npm-profile "*" + npm-registry-fetch "*" + npm-user-validate "*" + npmlog "*" + opener "*" + pacote "*" + parse-conflict-json "*" + qrcode-terminal "*" + read "*" + read-package-json "*" + read-package-json-fast "*" + readdir-scoped-modules "*" + rimraf "*" + semver "*" + ssri "*" + tar "*" + text-table "*" + tiny-relative-date "*" + treeverse "*" + validate-npm-package-name "*" + which "*" + write-file-atomic "*" + +npmlog@*, npmlog@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.0.tgz#ba9ef39413c3d936ea91553db7be49c34ad0520c" + integrity sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" npmlog@^4.1.2: version "4.1.2" @@ -8430,16 +8408,6 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -8462,7 +8430,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -8517,7 +8485,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@^1.5.2: +opener@*: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -8679,7 +8647,32 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: +pacote@*, pacote@^12.0.0, pacote@^12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.2.tgz#14ae30a81fe62ec4fc18c071150e6763e932527c" + integrity sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg== + dependencies: + "@npmcli/git" "^2.1.0" + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^2.0.0" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^3.0.0" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^11.0.0" + promise-retry "^2.0.1" + read-package-json-fast "^2.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.0" + +pacote@^11.3.0: version "11.3.5" resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== @@ -8711,7 +8704,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^1.1.1: +parse-conflict-json@*, parse-conflict-json@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== @@ -8846,10 +8839,10 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.3: version "2.3.0" @@ -8930,17 +8923,7 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.0, pretty-format@^27.2.5: - version "27.2.5" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.5.tgz#7cfe2a8e8f01a5b5b29296a0b70f4140df0830c5" - integrity sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g== - dependencies: - "@jest/types" "^27.2.5" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^27.0.6, pretty-format@^27.3.1: +pretty-format@^27.0.0, pretty-format@^27.0.6, pretty-format@^27.3.1: version "27.3.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.3.1.tgz#7e9486365ccdd4a502061fa761d3ab9ca1b78df5" integrity sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA== @@ -9075,7 +9058,7 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qrcode-terminal@^0.12.0: +qrcode-terminal@*: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== @@ -9146,7 +9129,7 @@ read-cmd-shim@^2.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: +read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -9154,7 +9137,7 @@ read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json- json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" -read-package-json@^4.1.1: +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== @@ -9192,7 +9175,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: +read@*, read@1, read@^1.0.7, read@~1.0.1: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -9221,7 +9204,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -9422,7 +9405,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@*, rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -9550,18 +9533,18 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@*, semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -9604,9 +9587,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== shelljs@0.8.4: version "0.8.4" @@ -9644,9 +9627,9 @@ sigmund@^1.0.1: integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.5" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" - integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== signale@^1.2.1: version "1.4.0" @@ -9698,15 +9681,6 @@ smart-buffer@^4.1.0: resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz#032fb583048a29ebffec2e6a73fca0761f48177e" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== - dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" - socks-proxy-agent@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3" @@ -9716,7 +9690,7 @@ socks-proxy-agent@^6.0.0: debug "^4.3.1" socks "^2.6.1" -socks@^2.3.3, socks@^2.6.1: +socks@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.1.tgz#989e6534a07cf337deb1b1c94aaa44296520d30e" integrity sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA== @@ -9725,9 +9699,9 @@ socks@^2.3.3, socks@^2.6.1: smart-buffer "^4.1.0" source-map-support@^0.5.6: - 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== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9774,9 +9748,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== split-on-first@^1.0.0: version "1.1.0" @@ -9829,7 +9803,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^8.0.0, ssri@^8.0.1: +ssri@*, ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -9894,15 +9868,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.1 || ^2.0.0", "string-width@^1.0.2 || 2", string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.1.0, string-width@^4.2.0: +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9969,13 +9935,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -"strip-ansi@^3.0.1 || ^4.0.0", strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -10053,7 +10012,7 @@ tar-stream@^2.0.1: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: +tar@*, tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -10103,7 +10062,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@^0.2.0, text-table@~0.2.0: +text-table@*, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -10140,7 +10099,7 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tiny-relative-date@^1.3.0: +tiny-relative-date@*: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== @@ -10159,7 +10118,7 @@ tmp@^0.2.0: dependencies: rimraf "^3.0.0" -tmpl@1.0.x: +tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== @@ -10215,7 +10174,7 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -treeverse@^1.0.4: +treeverse@*, treeverse@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== @@ -10268,9 +10227,9 @@ ts-node@10.4.0: yn "3.1.1" tsconfig-paths@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36" - integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA== + version "3.12.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" + integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.1" @@ -10402,9 +10361,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.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.2.tgz#d7dd6a46ca57214f54a2d0a43cad0f35db82ac99" - integrity sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A== + version "3.14.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" + integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== unbox-primitive@^1.0.1: version "1.0.1" @@ -10552,7 +10511,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: +validate-npm-package-name@*, validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= @@ -10606,11 +10565,11 @@ walk-up-path@^1.0.0: integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== walker@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - makeerror "1.0.x" + makeerror "1.0.12" wcwidth@^1.0.0: version "1.0.1" @@ -10674,6 +10633,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which@*, which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -10681,19 +10647,12 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - wide-align@^1.1.0, wide-align@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - string-width "^1.0.2 || 2" + string-width "^1.0.2 || 2 || 3 || 4" word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" @@ -10719,7 +10678,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== From d2d356c801b16de31f56451093a4613cc6400e05 Mon Sep 17 00:00:00 2001 From: Andrei Nistor Date: Mon, 22 Nov 2021 17:36:48 +0200 Subject: [PATCH 134/248] feat: Add jsonnet-bundler support (#12720) --- docs/usage/configuration-options.md | 11 +- lib/manager/api.ts | 2 + .../jsonnetfile-local-dependencies.json | 15 ++ .../jsonnetfile-no-dependencies.json | 5 + .../__fixtures__/jsonnetfile-with-name.json | 16 ++ .../__fixtures__/jsonnetfile.json | 24 +++ .../__snapshots__/artifacts.spec.ts.snap | 129 ++++++++++++ .../__snapshots__/extract.spec.ts.snap | 39 ++++ lib/manager/jsonnet-bundler/artifacts.spec.ts | 196 ++++++++++++++++++ lib/manager/jsonnet-bundler/artifacts.ts | 110 ++++++++++ lib/manager/jsonnet-bundler/extract.spec.ts | 68 ++++++ lib/manager/jsonnet-bundler/extract.ts | 57 +++++ lib/manager/jsonnet-bundler/index.ts | 10 + lib/manager/jsonnet-bundler/readme.md | 5 + lib/manager/jsonnet-bundler/types.ts | 20 ++ lib/util/exec/buildpack.ts | 6 + 16 files changed, 712 insertions(+), 1 deletion(-) create mode 100644 lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-local-dependencies.json create mode 100644 lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-no-dependencies.json create mode 100644 lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-with-name.json create mode 100644 lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile.json create mode 100644 lib/manager/jsonnet-bundler/__snapshots__/artifacts.spec.ts.snap create mode 100644 lib/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap create mode 100644 lib/manager/jsonnet-bundler/artifacts.spec.ts create mode 100644 lib/manager/jsonnet-bundler/artifacts.ts create mode 100644 lib/manager/jsonnet-bundler/extract.spec.ts create mode 100644 lib/manager/jsonnet-bundler/extract.ts create mode 100644 lib/manager/jsonnet-bundler/index.ts create mode 100644 lib/manager/jsonnet-bundler/readme.md create mode 100644 lib/manager/jsonnet-bundler/types.ts diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index ad98b8a5883052..35580f5723bb30 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1198,7 +1198,16 @@ With the above config, every PR raised by Renovate will have the label `dependen This feature can be used to refresh lock files and keep them up-to-date. "Maintaining" a lock file means recreating it so that every dependency version within it is updated to the latest. -Supported lock files are `package-lock.json`, `yarn.lock`, `composer.lock`, `Gemfile.lock`, `poetry.lock` and `Cargo.lock`. +Supported lock files are: + +- `package-lock.json` +- `yarn.lock` +- `composer.lock` +- `Gemfile.lock` +- `poetry.lock` +- `Cargo.lock` +- `jsonnetfile.lock.json` + Others may be added via feature request. This feature is disabled by default. diff --git a/lib/manager/api.ts b/lib/manager/api.ts index 1731c2500f3fab..de7265d558fd4f 100644 --- a/lib/manager/api.ts +++ b/lib/manager/api.ts @@ -34,6 +34,7 @@ import * as helmv3 from './helmv3'; import * as homebrew from './homebrew'; import * as html from './html'; import * as jenkins from './jenkins'; +import * as jsonnetBundler from './jsonnet-bundler'; import * as kubernetes from './kubernetes'; import * as kustomize from './kustomize'; import * as leiningen from './leiningen'; @@ -103,6 +104,7 @@ api.set('helmv3', helmv3); api.set('homebrew', homebrew); api.set('html', html); api.set('jenkins', jenkins); +api.set('jsonnet-bundler', jsonnetBundler); api.set('kubernetes', kubernetes); api.set('kustomize', kustomize); api.set('leiningen', leiningen); diff --git a/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-local-dependencies.json b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-local-dependencies.json new file mode 100644 index 00000000000000..f96725fc11b520 --- /dev/null +++ b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-local-dependencies.json @@ -0,0 +1,15 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "local": { + "directory": "jsonnet" + } + }, + "version": "" + } + ], + "legacyImports": true +} + diff --git a/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-no-dependencies.json b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-no-dependencies.json new file mode 100644 index 00000000000000..4388812ca21433 --- /dev/null +++ b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-no-dependencies.json @@ -0,0 +1,5 @@ +{ + "version": 1, + "dependencies": [], + "legacyImports": true +} diff --git a/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-with-name.json b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-with-name.json new file mode 100644 index 00000000000000..1294d50ee63cd9 --- /dev/null +++ b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile-with-name.json @@ -0,0 +1,16 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/prometheus-operator/prometheus-operator", + "subdir": "jsonnet/mixin" + } + }, + "version": "v0.50.0", + "name": "prometheus-operator-mixin" + } + ], + "legacyImports": true +} diff --git a/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile.json b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile.json new file mode 100644 index 00000000000000..09fcb116706bfb --- /dev/null +++ b/lib/manager/jsonnet-bundler/__fixtures__/jsonnetfile.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "dependencies": [ + { + "source": { + "git": { + "remote": "https://github.com/prometheus-operator/prometheus-operator.git", + "subdir": "jsonnet/prometheus-operator" + } + }, + "version": "v0.50.0" + }, + { + "source": { + "git": { + "remote": "ssh://git@github.com/prometheus-operator/kube-prometheus.git", + "subdir": "jsonnet/kube-prometheus" + } + }, + "version": "v0.9.0" + } + ], + "legacyImports": true +} diff --git a/lib/manager/jsonnet-bundler/__snapshots__/artifacts.spec.ts.snap b/lib/manager/jsonnet-bundler/__snapshots__/artifacts.spec.ts.snap new file mode 100644 index 00000000000000..79d70146d35e51 --- /dev/null +++ b/lib/manager/jsonnet-bundler/__snapshots__/artifacts.spec.ts.snap @@ -0,0 +1,129 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/jsonnet-bundler/artifacts performs lock file maintenance 1`] = ` +Array [ + Object { + "file": Object { + "contents": "Updated jsonnetfile.lock.json", + "name": "jsonnetfile.lock.json", + }, + }, +] +`; + +exports[`manager/jsonnet-bundler/artifacts performs lock file maintenance 2`] = ` +Array [ + Object { + "cmd": "jb update", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, +] +`; + +exports[`manager/jsonnet-bundler/artifacts returns error when jb update fails 1`] = ` +Array [ + Object { + "artifactError": Object { + "lockFile": "jsonnetfile.lock.json", + "stderr": "jb released the magic smoke", + }, + }, +] +`; + +exports[`manager/jsonnet-bundler/artifacts returns error when jb update fails 2`] = ` +Array [ + Object { + "cmd": "jb update", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, +] +`; + +exports[`manager/jsonnet-bundler/artifacts returns null if there are no changes 1`] = `Array []`; + +exports[`manager/jsonnet-bundler/artifacts updates the vendor dir when dependencies change 1`] = ` +Array [ + Object { + "file": Object { + "contents": "Updated jsonnetfile.json", + "name": "jsonnetfile.json", + }, + }, + Object { + "file": Object { + "contents": "Updated jsonnetfile.lock.json", + "name": "jsonnetfile.lock.json", + }, + }, + Object { + "file": Object { + "contents": "New foo/main.jsonnet", + "name": "vendor/foo/main.jsonnet", + }, + }, + Object { + "file": Object { + "contents": "New bar/main.jsonnet", + "name": "vendor/bar/main.jsonnet", + }, + }, + Object { + "file": Object { + "contents": "vendor/baz/deleted.jsonnet", + "name": "|delete|", + }, + }, +] +`; + +exports[`manager/jsonnet-bundler/artifacts updates the vendor dir when dependencies change 2`] = ` +Array [ + Object { + "cmd": "jb update https://github.com/foo/foo.git ssh://git@github.com/foo/foo.git/bar", + "options": Object { + "cwd": "/tmp/github/some/repo", + "encoding": "utf-8", + "env": Object { + "HOME": "/home/user", + "HTTPS_PROXY": "https://example.com", + "HTTP_PROXY": "http://example.com", + "LANG": "en_US.UTF-8", + "LC_ALL": "en_US", + "NO_PROXY": "localhost", + "PATH": "/tmp/path", + }, + "maxBuffer": 10485760, + "timeout": 900000, + }, + }, +] +`; diff --git a/lib/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap b/lib/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap new file mode 100644 index 00000000000000..2c3bb91b3dd6db --- /dev/null +++ b/lib/manager/jsonnet-bundler/__snapshots__/extract.spec.ts.snap @@ -0,0 +1,39 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`manager/jsonnet-bundler/extract extractPackageFile() extracts dependency 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": "v0.50.0", + "depName": "prometheus-operator", + "lookupName": "https://github.com/prometheus-operator/prometheus-operator.git", + "managerData": Object { + "subdir": "jsonnet/prometheus-operator", + }, + }, + Object { + "currentValue": "v0.9.0", + "depName": "kube-prometheus", + "lookupName": "ssh://git@github.com/prometheus-operator/kube-prometheus.git", + "managerData": Object { + "subdir": "jsonnet/kube-prometheus", + }, + }, + ], +} +`; + +exports[`manager/jsonnet-bundler/extract extractPackageFile() extracts dependency with custom name 1`] = ` +Object { + "deps": Array [ + Object { + "currentValue": "v0.50.0", + "depName": "prometheus-operator-mixin", + "lookupName": "https://github.com/prometheus-operator/prometheus-operator", + "managerData": Object { + "subdir": "jsonnet/mixin", + }, + }, + ], +} +`; diff --git a/lib/manager/jsonnet-bundler/artifacts.spec.ts b/lib/manager/jsonnet-bundler/artifacts.spec.ts new file mode 100644 index 00000000000000..f8f339fa0d727f --- /dev/null +++ b/lib/manager/jsonnet-bundler/artifacts.spec.ts @@ -0,0 +1,196 @@ +import { join } from 'upath'; +import { envMock, exec, mockExecAll } from '../../../test/exec-util'; +import { env, fs, git } from '../../../test/util'; +import { setGlobalConfig } from '../../config/global'; +import type { RepoGlobalConfig } from '../../config/types'; +import type { StatusResult } from '../../util/git'; +import type { UpdateArtifactsConfig } from '../types'; +import { updateArtifacts } from '.'; + +jest.mock('child_process'); +jest.mock('../../util/exec/env'); +jest.mock('../../util/fs'); +jest.mock('../../util/git'); + +const adminConfig: RepoGlobalConfig = { + // `join` fixes Windows CI + localDir: join('/tmp/github/some/repo'), + cacheDir: join('/tmp/renovate/cache'), +}; +const config: UpdateArtifactsConfig = {}; + +describe('manager/jsonnet-bundler/artifacts', () => { + beforeEach(() => { + env.getChildProcessEnv.mockReturnValue(envMock.basic); + + setGlobalConfig(adminConfig); + }); + + it('returns null if jsonnetfile.lock does not exist', async () => { + fs.readLocalFile.mockResolvedValueOnce(null); + expect( + await updateArtifacts({ + packageFileName: 'jsonnetfile.json', + updatedDeps: [], + newPackageFileContent: '', + config, + }) + ).toBeNull(); + }); + + it('returns null if there are no changes', async () => { + fs.readLocalFile.mockResolvedValueOnce('Current jsonnetfile.lock.json'); + const execSnapshots = mockExecAll(exec); + git.getRepoStatus.mockResolvedValueOnce({ + modified: [], + not_added: [], + deleted: [], + isClean(): boolean { + return true; + }, + } as StatusResult); + expect( + await updateArtifacts({ + packageFileName: 'jsonnetfile.json', + updatedDeps: [], + newPackageFileContent: '', + config, + }) + ).toBeNull(); + expect(execSnapshots).toMatchSnapshot(); + }); + + it('updates the vendor dir when dependencies change', async () => { + fs.readLocalFile.mockResolvedValueOnce('Current jsonnetfile.lock.json'); + const execSnapshots = mockExecAll(exec); + git.getRepoStatus.mockResolvedValueOnce({ + not_added: ['vendor/foo/main.jsonnet', 'vendor/bar/main.jsonnet'], + modified: ['jsonnetfile.json', 'jsonnetfile.lock.json'], + deleted: ['vendor/baz/deleted.jsonnet'], + isClean(): boolean { + return false; + }, + } as StatusResult); + fs.readLocalFile.mockResolvedValueOnce('Updated jsonnetfile.json'); + fs.readLocalFile.mockResolvedValueOnce('Updated jsonnetfile.lock.json'); + fs.readLocalFile.mockResolvedValueOnce('New foo/main.jsonnet'); + fs.readLocalFile.mockResolvedValueOnce('New bar/main.jsonnet'); + expect( + await updateArtifacts({ + packageFileName: 'jsonnetfile.json', + updatedDeps: [ + { + depName: 'foo', + lookupName: 'https://github.com/foo/foo.git', + }, + { + depName: 'foo', + lookupName: 'ssh://git@github.com/foo/foo.git', + managerData: { + subdir: 'bar', + }, + }, + ], + newPackageFileContent: 'Updated jsonnetfile.json', + config, + }) + ).toMatchSnapshot([ + { + file: { + name: 'jsonnetfile.json', + contents: 'Updated jsonnetfile.json', + }, + }, + { + file: { + name: 'jsonnetfile.lock.json', + contents: 'Updated jsonnetfile.lock.json', + }, + }, + { + file: { + name: 'vendor/foo/main.jsonnet', + contents: 'New foo/main.jsonnet', + }, + }, + { + file: { + name: 'vendor/bar/main.jsonnet', + contents: 'New bar/main.jsonnet', + }, + }, + { + file: { + name: '|delete|', + contents: 'vendor/baz/deleted.jsonnet', + }, + }, + ]); + expect(execSnapshots).toMatchSnapshot(); + }); + + it('performs lock file maintenance', async () => { + fs.readLocalFile.mockResolvedValueOnce('Current jsonnetfile.lock.json'); + const execSnapshots = mockExecAll(exec); + git.getRepoStatus.mockResolvedValueOnce({ + modified: ['jsonnetfile.lock.json'], + isClean(): boolean { + return false; + }, + } as StatusResult); + fs.readLocalFile.mockResolvedValueOnce('Updated jsonnetfile.lock.json'); + expect( + await updateArtifacts({ + packageFileName: 'jsonnetfile.json', + updatedDeps: [], + newPackageFileContent: '', + config: { + ...config, + isLockFileMaintenance: true, + }, + }) + ).toMatchSnapshot([ + { + file: { + name: 'jsonnetfile.lock.json', + contents: 'Updated jsonnetfile.lock.json', + }, + }, + ]); + expect(execSnapshots).toMatchSnapshot(); + }); + + it('returns error when jb update fails', async () => { + const execError = new Error(); + (execError as any).stderr = 'jb released the magic smoke'; + + fs.readLocalFile.mockResolvedValueOnce('Current jsonnetfile.lock.json'); + const execSnapshots = mockExecAll(exec, execError); + git.getRepoStatus.mockResolvedValueOnce({ + modified: ['jsonnetfile.lock.json'], + isClean(): boolean { + return false; + }, + } as StatusResult); + fs.readLocalFile.mockResolvedValueOnce('Updated jsonnetfile.lock.json'); + expect( + await updateArtifacts({ + packageFileName: 'jsonnetfile.json', + updatedDeps: [], + newPackageFileContent: '', + config: { + ...config, + isLockFileMaintenance: true, + }, + }) + ).toMatchSnapshot([ + { + artifactError: { + lockFile: 'jsonnetfile.lock.json', + stderr: 'jb released the magic smoke', + }, + }, + ]); + expect(execSnapshots).toMatchSnapshot(); + }); +}); diff --git a/lib/manager/jsonnet-bundler/artifacts.ts b/lib/manager/jsonnet-bundler/artifacts.ts new file mode 100644 index 00000000000000..5e3bc76056b794 --- /dev/null +++ b/lib/manager/jsonnet-bundler/artifacts.ts @@ -0,0 +1,110 @@ +import { quote } from 'shlex'; +import { TEMPORARY_ERROR } from '../../constants/error-messages'; +import { logger } from '../../logger'; +import { ExecOptions, exec } from '../../util/exec'; +import type { ToolConstraint } from '../../util/exec/types'; +import { readLocalFile } from '../../util/fs'; +import { getRepoStatus } from '../../util/git'; +import { regEx } from '../../util/regex'; +import type { + PackageDependency, + UpdateArtifact, + UpdateArtifactsResult, +} from '../types'; + +function dependencyUrl(dep: PackageDependency): string { + const url = dep.lookupName; + if (dep.managerData?.subdir) { + return url.concat('/', dep.managerData.subdir); + } + return url; +} + +export async function updateArtifacts( + updateArtifact: UpdateArtifact +): Promise { + const { packageFileName, updatedDeps, config } = updateArtifact; + logger.trace({ packageFileName }, 'jsonnet-bundler.updateArtifacts()'); + + const lockFileName = packageFileName.replace(regEx(/\.json$/), '.lock.json'); + const existingLockFileContent = await readLocalFile(lockFileName, 'utf8'); + + if (!existingLockFileContent) { + logger.debug('No jsonnetfile.lock.json found'); + return null; + } + + const jsonnetBundlerToolConstraint: ToolConstraint = { + toolName: 'jb', + constraint: config.constraints?.jb, + }; + + const execOptions: ExecOptions = { + cwdFile: packageFileName, + docker: { + image: 'sidecar', + }, + toolConstraints: [jsonnetBundlerToolConstraint], + }; + + try { + if (config.isLockFileMaintenance) { + await exec('jb update', execOptions); + } else { + const dependencyUrls = updatedDeps.map(dependencyUrl); + if (dependencyUrls.length > 0) { + await exec( + `jb update ${dependencyUrls.map(quote).join(' ')}`, + execOptions + ); + } + } + + const status = await getRepoStatus(); + + if (status.isClean()) { + return null; + } + + const res: UpdateArtifactsResult[] = []; + + for (const f of status.modified ?? []) { + res.push({ + file: { + name: f, + contents: await readLocalFile(f), + }, + }); + } + for (const f of status.not_added ?? []) { + res.push({ + file: { + name: f, + contents: await readLocalFile(f), + }, + }); + } + for (const f of status.deleted ?? []) { + res.push({ + file: { + name: '|delete|', + contents: f, + }, + }); + } + + return res; + } catch (err) /* istanbul ignore next */ { + if (err.message === TEMPORARY_ERROR) { + throw err; + } + return [ + { + artifactError: { + lockFile: lockFileName, + stderr: err.stderr, + }, + }, + ]; + } +} diff --git a/lib/manager/jsonnet-bundler/extract.spec.ts b/lib/manager/jsonnet-bundler/extract.spec.ts new file mode 100644 index 00000000000000..7264679f2e116e --- /dev/null +++ b/lib/manager/jsonnet-bundler/extract.spec.ts @@ -0,0 +1,68 @@ +import { loadFixture } from '../../../test/util'; +import { extractPackageFile } from '.'; + +const jsonnetfile = loadFixture('jsonnetfile.json'); +const jsonnetfileWithName = loadFixture('jsonnetfile-with-name.json'); +const jsonnetfileNoDependencies = loadFixture( + 'jsonnetfile-no-dependencies.json' +); +const jsonnetfileLocalDependencies = loadFixture( + 'jsonnetfile-local-dependencies.json' +); + +describe('manager/jsonnet-bundler/extract', () => { + describe('extractPackageFile()', () => { + it('returns null for invalid jsonnetfile', () => { + expect( + extractPackageFile('this is not a jsonnetfile', 'jsonnetfile.json') + ).toBeNull(); + }); + it('returns null for jsonnetfile with no dependencies', () => { + expect( + extractPackageFile(jsonnetfileNoDependencies, 'jsonnetfile.json') + ).toBeNull(); + }); + it('returns null for local dependencies', () => { + expect( + extractPackageFile(jsonnetfileLocalDependencies, 'jsonnetfile.json') + ).toBeNull(); + }); + it('returns null for vendored dependencies', () => { + expect( + extractPackageFile(jsonnetfile, 'vendor/jsonnetfile.json') + ).toBeNull(); + }); + it('extracts dependency', () => { + const res = extractPackageFile(jsonnetfile, 'jsonnetfile.json'); + expect(res).toMatchSnapshot({ + deps: [ + { + depName: 'prometheus-operator', + lookupName: + 'https://github.com/prometheus-operator/prometheus-operator.git', + currentValue: 'v0.50.0', + }, + { + depName: 'kube-prometheus', + lookupName: + 'ssh://git@github.com/prometheus-operator/kube-prometheus.git', + currentValue: 'v0.9.0', + }, + ], + }); + }); + it('extracts dependency with custom name', () => { + const res = extractPackageFile(jsonnetfileWithName, 'jsonnetfile.json'); + expect(res).toMatchSnapshot({ + deps: [ + { + depName: 'prometheus-operator-mixin', + lookupName: + 'https://github.com/prometheus-operator/prometheus-operator', + currentValue: 'v0.50.0', + }, + ], + }); + }); + }); +}); diff --git a/lib/manager/jsonnet-bundler/extract.ts b/lib/manager/jsonnet-bundler/extract.ts new file mode 100644 index 00000000000000..7162f4cd8873be --- /dev/null +++ b/lib/manager/jsonnet-bundler/extract.ts @@ -0,0 +1,57 @@ +import { logger } from '../../logger'; +import { regEx } from '../../util/regex'; +import type { PackageDependency, PackageFile } from '../types'; +import type { Dependency, JsonnetFile } from './types'; + +const gitUrl = regEx( + /(ssh:\/\/git@|https:\/\/)([\w.]+)\/([\w:/\-~]*)\/(?[\w:/-]+)(\.git)?/ +); + +export function extractPackageFile( + content: string, + packageFile: string +): PackageFile | null { + logger.trace({ packageFile }, 'jsonnet-bundler.extractPackageFile()'); + + if (packageFile.match(/vendor\//)) { + return null; + } + + const deps: PackageDependency[] = []; + let jsonnetFile: JsonnetFile; + try { + jsonnetFile = JSON.parse(content) as JsonnetFile; + } catch (err) { + logger.debug({ packageFile }, 'Invalid JSON'); + return null; + } + + for (const dependency of jsonnetFile.dependencies ?? []) { + const dep = extractDependency(dependency); + if (dep) { + deps.push(dep); + } + } + + if (!deps.length) { + return null; + } + + return { deps }; +} + +function extractDependency(dependency: Dependency): PackageDependency | null { + if (!dependency.source.git) { + return null; + } + + const match = gitUrl.exec(dependency.source.git.remote); + + return { + depName: + dependency.name || match.groups.depName || dependency.source.git.remote, + lookupName: dependency.source.git.remote, + currentValue: dependency.version, + managerData: { subdir: dependency.source.git.subdir }, + }; +} diff --git a/lib/manager/jsonnet-bundler/index.ts b/lib/manager/jsonnet-bundler/index.ts new file mode 100644 index 00000000000000..aa3fd5480c9944 --- /dev/null +++ b/lib/manager/jsonnet-bundler/index.ts @@ -0,0 +1,10 @@ +import { GitTagsDatasource } from '../../datasource/git-tags'; +export { updateArtifacts } from './artifacts'; +export { extractPackageFile } from './extract'; + +export const supportsLockFileMaintenance = true; + +export const defaultConfig = { + fileMatch: ['(^|/)jsonnetfile.json$'], + datasource: GitTagsDatasource.id, +}; diff --git a/lib/manager/jsonnet-bundler/readme.md b/lib/manager/jsonnet-bundler/readme.md new file mode 100644 index 00000000000000..7a8d7da5201248 --- /dev/null +++ b/lib/manager/jsonnet-bundler/readme.md @@ -0,0 +1,5 @@ +Extracts dependencies from `jsonnetfile.json` files, updates `jsonnetfile.lock.json` and updates the `vendor` directory. + +Supports [lock file maintenance](https://docs.renovatebot.com/configuration-options/#lockfilemaintenance). + +This plugin requires `jsonnet-bundler >= v0.4.0` since previous versions don't support updating single dependencies. diff --git a/lib/manager/jsonnet-bundler/types.ts b/lib/manager/jsonnet-bundler/types.ts new file mode 100644 index 00000000000000..9947e87b4d6ec5 --- /dev/null +++ b/lib/manager/jsonnet-bundler/types.ts @@ -0,0 +1,20 @@ +// original spec https://github.com/jsonnet-bundler/jsonnet-bundler/tree/master/spec/v1 + +export interface JsonnetFile { + dependencies?: Dependency[]; +} + +export interface Dependency { + source: Source; + version: string; + name?: string; +} + +export interface Source { + git?: GitSource; +} + +export interface GitSource { + remote: string; + subdir?: string; +} diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts index ae47f44e8cc6d1..be9b28b847b32f 100644 --- a/lib/util/exec/buildpack.ts +++ b/lib/util/exec/buildpack.ts @@ -3,6 +3,7 @@ import { getPkgReleases } from '../../datasource'; import { logger } from '../../logger'; import * as allVersioning from '../../versioning'; import { id as composerVersioningId } from '../../versioning/composer'; +import { id as semverVersioningId } from '../../versioning/semver'; import type { ToolConfig, ToolConstraint } from './types'; const allToolConfig: Record = { @@ -11,6 +12,11 @@ const allToolConfig: Record = { depName: 'composer/composer', versioning: composerVersioningId, }, + jb: { + datasource: 'github-releases', + depName: 'jsonnet-bundler/jsonnet-bundler', + versioning: semverVersioningId, + }, }; export async function resolveConstraint( From 906dbce7757fb5f4ab9f9f62d90f31795b8f6795 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 22 Nov 2021 21:07:36 +0100 Subject: [PATCH 135/248] fix: skip lookups no currentVersion or lockedVersion (#12731) --- lib/workers/repository/process/lookup/generate.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/workers/repository/process/lookup/generate.ts b/lib/workers/repository/process/lookup/generate.ts index 8a5086ac1c7ae7..9eb27f22d836c4 100644 --- a/lib/workers/repository/process/lookup/generate.ts +++ b/lib/workers/repository/process/lookup/generate.ts @@ -48,6 +48,12 @@ export function generateUpdate( } update.newMajor = versioning.getMajor(newVersion); update.newMinor = versioning.getMinor(newVersion); + // istanbul ignore if + if (!update.updateType && !currentVersion) { + logger.debug({ update }, 'Update has no currentVersion'); + update.newValue = currentValue; + return update; + } update.updateType = update.updateType || getUpdateType(config, versioning, currentVersion, newVersion); From 0099ba17623577689a85b7fd1290b0fa6053e43a Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 22 Nov 2021 21:08:10 +0100 Subject: [PATCH 136/248] fix(config): check if matchStrings is iterable (#12759) --- lib/config/validation.spec.ts | 31 +++++++++++++++++++ lib/config/validation.ts | 58 ++++++++++++++++++----------------- 2 files changed, 61 insertions(+), 28 deletions(-) diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts index f850f7f291e188..0bf7c5a9069f81 100644 --- a/lib/config/validation.spec.ts +++ b/lib/config/validation.spec.ts @@ -292,6 +292,29 @@ describe('config/validation', () => { expect(errors).toMatchSnapshot(); }); it('errors if no regexManager matchStrings', async () => { + const config = { + regexManagers: [ + { + fileMatch: [], + }, + ], + }; + const { warnings, errors } = await configValidation.validateConfig( + config as any, + true + ); + expect(warnings).toHaveLength(0); + expect(errors).toHaveLength(1); + expect(errors).toMatchInlineSnapshot(` + Array [ + Object { + "message": "Each Regex Manager must contain a fileMatch array", + "topic": "Configuration Error", + }, + ] + `); + }); + it('errors if empty regexManager matchStrings', async () => { const config = { regexManagers: [ { @@ -306,6 +329,14 @@ describe('config/validation', () => { ); expect(warnings).toHaveLength(0); expect(errors).toHaveLength(1); + expect(errors).toMatchInlineSnapshot(` + Array [ + Object { + "message": "Each Regex Manager must contain a fileMatch array", + "topic": "Configuration Error", + }, + ] + `); }); it('errors if no regexManager fileMatch', async () => { const config = { diff --git a/lib/config/validation.ts b/lib/config/validation.ts index fb99cc6f3d02fb..69aaca7ac94771 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -408,39 +408,41 @@ export async function validateConfig( )}`, }); } else if (is.nonEmptyArray(regexManager.fileMatch)) { - let validRegex = false; - for (const matchString of regexManager.matchStrings) { - try { - regEx(matchString); - validRegex = true; - } catch (e) { - errors.push({ - topic: 'Configuration Error', - message: `Invalid regExp for ${currentPath}: \`${String( - matchString - )}\``, - }); - } - } - if (validRegex) { - const mandatoryFields = [ - 'depName', - 'currentValue', - 'datasource', - ]; - for (const field of mandatoryFields) { - if ( - !regexManager[`${field}Template`] && - !regexManager.matchStrings.some((matchString) => - matchString.includes(`(?<${field}>`) - ) - ) { + if (is.nonEmptyArray(regexManager.matchStrings)) { + let validRegex = false; + for (const matchString of regexManager.matchStrings) { + try { + regEx(matchString); + validRegex = true; + } catch (e) { errors.push({ topic: 'Configuration Error', - message: `Regex Managers must contain ${field}Template configuration or regex group named ${field}`, + message: `Invalid regExp for ${currentPath}: \`${String( + matchString + )}\``, }); } } + if (validRegex) { + const mandatoryFields = [ + 'depName', + 'currentValue', + 'datasource', + ]; + for (const field of mandatoryFields) { + if ( + !regexManager[`${field}Template`] && + !regexManager.matchStrings.some((matchString) => + matchString.includes(`(?<${field}>`) + ) + ) { + errors.push({ + topic: 'Configuration Error', + message: `Regex Managers must contain ${field}Template configuration or regex group named ${field}`, + }); + } + } + } } } else { errors.push({ From b87207f06ce21452249ec455a56bf80d40e76fc7 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 22 Nov 2021 21:40:58 +0100 Subject: [PATCH 137/248] fix: update resolutions (#12796) --- package.json | 3 +- yarn.lock | 596 +++++++++++++++++++++++++-------------------------- 2 files changed, 297 insertions(+), 302 deletions(-) diff --git a/package.json b/package.json index a0f5c7617cc673..ae234e8327a296 100644 --- a/package.json +++ b/package.json @@ -288,8 +288,7 @@ "unified": "9.2.2" }, "resolutions": { - "**/css-what": "^5.0.1", - "**/kind-of": ">=6.0.3" + "**/json-schema": "^0.4.0" }, "files": [ "dist" diff --git a/yarn.lock b/yarn.lock index 6cb114d91076cd..a59ca5f62e9e0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2221,7 +2221,7 @@ resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== -"@isaacs/string-locale-compare@*", "@isaacs/string-locale-compare@^1.1.0": +"@isaacs/string-locale-compare@^1.0.1", "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== @@ -2460,21 +2460,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@*", "@npmcli/arborist@^4.0.0": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.0.5.tgz#7cdcfed28cad03803f5d75caf2b0f3051165ee70" - integrity sha512-WR2cqxzjsvmHJ9sKCdqBYG/qeiAXB9ev1iq1W2Rry7LxeJ7eDtTr4mOWe/TBvp6xFzevGecQc2YEWwExTuLZLg== +"@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0", "@npmcli/arborist@^2.9.0": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" + integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== dependencies: - "@isaacs/string-locale-compare" "^1.1.0" + "@isaacs/string-locale-compare" "^1.0.1" "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.0" - "@npmcli/metavuln-calculator" "^2.0.0" + "@npmcli/map-workspaces" "^1.0.2" + "@npmcli/metavuln-calculator" "^1.1.0" "@npmcli/move-file" "^1.1.0" "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^1.0.3" + "@npmcli/node-gyp" "^1.0.1" "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^2.0.0" - bin-links "^2.3.0" + "@npmcli/run-script" "^1.8.2" + bin-links "^2.2.1" cacache "^15.0.3" common-ancestor-path "^1.0.1" json-parse-even-better-errors "^2.3.1" @@ -2485,7 +2485,7 @@ npm-package-arg "^8.1.5" npm-pick-manifest "^6.1.0" npm-registry-fetch "^11.0.0" - pacote "^12.0.2" + pacote "^11.3.5" parse-conflict-json "^1.1.1" proc-log "^1.0.0" promise-all-reject-late "^1.0.0" @@ -2498,12 +2498,12 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@*", "@npmcli/ci-detect@^1.3.0": +"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== -"@npmcli/config@*": +"@npmcli/config@^2.3.0": version "2.3.1" resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.1.tgz#41d80ce272831461b5cb158afa110525d4be0fed" integrity sha512-F/8R/Zqun8682TgaCILUNoaVfd1LVaYZ/jcVt9KWzfKpzcPus1zEApAl54PqVqVJbNq6f01QTDQHD6L/n56BXw== @@ -2551,24 +2551,23 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/map-workspaces@*", "@npmcli/map-workspaces@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz#e342efbbdd0dad1bba5d7723b674ca668bf8ac5a" - integrity sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g== +"@npmcli/map-workspaces@^1.0.2", "@npmcli/map-workspaces@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab" + integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q== dependencies: "@npmcli/name-from-folder" "^1.0.1" glob "^7.1.6" minimatch "^3.0.4" read-package-json-fast "^2.0.1" -"@npmcli/metavuln-calculator@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" - integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== +"@npmcli/metavuln-calculator@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" + integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== dependencies: cacache "^15.0.5" - json-parse-even-better-errors "^2.3.1" - pacote "^12.0.0" + pacote "^11.1.11" semver "^7.3.2" "@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": @@ -2584,12 +2583,12 @@ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== -"@npmcli/node-gyp@^1.0.2", "@npmcli/node-gyp@^1.0.3": +"@npmcli/node-gyp@^1.0.1", "@npmcli/node-gyp@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== -"@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": +"@npmcli/package-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== @@ -2603,17 +2602,7 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@*", "@npmcli/run-script@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" - integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== - dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^8.2.0" - read-package-json-fast "^2.0.1" - -"@npmcli/run-script@^1.8.2": +"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.6": version "1.8.6" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== @@ -2726,7 +2715,6 @@ "@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.4": version "0.0.4" - uid "0c444386e79d6145901212507521b8a0a48af000" resolved "https://github.com/renovatebot/eslint-plugin#0c444386e79d6145901212507521b8a0a48af000" "@renovate/pep440@1.0.0": @@ -3623,7 +3611,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@*, abbrev@1: +abbrev@1, abbrev@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3712,6 +3700,11 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3736,12 +3729,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@*, ansicolors@~0.3.2: +ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= -ansistyles@*: +ansistyles@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= @@ -3769,7 +3762,7 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archy@*: +archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= @@ -4014,7 +4007,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -bin-links@^2.3.0: +bin-links@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== @@ -4148,7 +4141,7 @@ bunyan@1.8.15: mv "~2" safe-json-stringify "~1" -cacache@*, cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: +cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -4240,7 +4233,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@*, chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4290,7 +4283,7 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chownr@*, chownr@^2.0.0: +chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== @@ -4327,15 +4320,15 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@*: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== +cli-columns@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" + integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" + string-width "^2.0.0" + strip-ansi "^3.0.1" -cli-table3@*, cli-table3@^0.6.0: +cli-table3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -4427,7 +4420,7 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -columnify@*: +columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= @@ -4630,7 +4623,7 @@ css-select@^4.1.3: domutils "^2.6.0" nth-check "^2.0.0" -css-what@^5.0.0, css-what@^5.0.1: +css-what@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== @@ -4975,9 +4968,9 @@ editorconfig@0.15.3: sigmund "^1.0.1" electron-to-chromium@^1.3.896: - version "1.3.904" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.904.tgz#52a353994faeb0f2a9fab3606b4e0614d1af7b58" - integrity sha512-x5uZWXcVNYkTh4JubD7KSC1VMKz0vZwJUqVwY3ihsW0bst1BXDe494Uqbg3Y0fDGVjJqA8vEeGuvO5foyH2+qw== + version "1.3.905" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.905.tgz#3c18f17f71f73013c5252af556aab213740c477f" + integrity sha512-jTjkycBMCCMk86PAucHtqicZ6dKlgPw+gAXMI9xxH5ua0+60dH+PVR7efwQMqCOQxmhHSo4aF4f37Idb5XBAcA== email-addresses@5.0.0: version "5.0.0" @@ -5498,7 +5491,7 @@ fast-xml-parser@3.19.0: resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== -fastest-levenshtein@*: +fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -5677,6 +5670,21 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +gauge@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.1.tgz#4bea07bcde3782f06dced8950e51307aa0f4a346" + integrity sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^1.0.1 || ^2.0.0" + strip-ansi "^3.0.1 || ^4.0.0" + wide-align "^1.1.2" + gauge@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.0.tgz#afba07aa0374a93c6219603b1fb83eaa2264d8f8" @@ -5814,7 +5822,7 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob@*, glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5915,7 +5923,7 @@ got@^11.7.0: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@*, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -6024,18 +6032,18 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@*, hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -6144,13 +6152,6 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore-walk@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" - integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== - dependencies: - minimatch "^3.0.4" - ignore@5.1.9, ignore@^5.1.4, ignore@^5.1.8: version "5.1.9" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" @@ -6210,7 +6211,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@*, ini@2.0.0, ini@^2.0.0: +ini@2.0.0, ini@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== @@ -6220,7 +6221,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@*: +init-package-json@^2.0.5: 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== @@ -6320,7 +6321,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-cidr@*: +is-cidr@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== @@ -6358,6 +6359,11 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -7198,7 +7204,7 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@*, json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -7208,10 +7214,10 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema@0.2.3, json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" @@ -7293,7 +7299,7 @@ keyv@^4.0.0: dependencies: json-buffer "3.0.1" -kind-of@>=6.0.3, kind-of@^6.0.3: +kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -7329,7 +7335,7 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@*: +libnpmaccess@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== @@ -7339,7 +7345,7 @@ libnpmaccess@*: npm-package-arg "^8.1.2" npm-registry-fetch "^11.0.0" -libnpmdiff@*: +libnpmdiff@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== @@ -7353,31 +7359,31 @@ libnpmdiff@*: pacote "^11.3.0" tar "^6.1.0" -libnpmexec@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-3.0.1.tgz#bc2fddf1b7bd2c1b2c43b4b726ec4cf11920ad0a" - integrity sha512-VUZTpkKBRPv3Z9DIjbsiHhEQXmQ+OwSQ/yLCY9i6CFE8UIczWyE6wVxP5sJ5NSGtSTUs6I98WewQOL45OKMyxA== +libnpmexec@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-2.0.1.tgz#729ae3e15a3ba225964ccf248117a75d311eeb73" + integrity sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw== dependencies: - "@npmcli/arborist" "^4.0.0" + "@npmcli/arborist" "^2.3.0" "@npmcli/ci-detect" "^1.3.0" - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.4" chalk "^4.1.0" mkdirp-infer-owner "^2.0.0" npm-package-arg "^8.1.2" - pacote "^12.0.0" + pacote "^11.3.1" proc-log "^1.0.0" read "^1.0.7" read-package-json-fast "^2.0.2" walk-up-path "^1.0.0" -libnpmfund@*: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-2.0.1.tgz#3c7e2be61e8c79e22c4918dde91ef57f64faf064" - integrity sha512-OhDbjB3gqdRyuQ56AhUtO49HZ7cZHSM7yCnhQa1lsNpmAmGPnjCImfx8SoWaAkUM7Ov8jngMR5JHKAr1ddjHTQ== +libnpmfund@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.1.0.tgz#ee91313905b3194b900530efa339bc3f9fc4e5c4" + integrity sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ== dependencies: - "@npmcli/arborist" "^4.0.0" + "@npmcli/arborist" "^2.5.0" -libnpmhook@*: +libnpmhook@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.3.tgz#1d7f0d7e6a7932fbf7ce0881fdb0ed8bf8748a30" integrity sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g== @@ -7385,7 +7391,7 @@ libnpmhook@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmorg@*: +libnpmorg@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.3.tgz#4e605d4113dfa16792d75343824a0625c76703bc" integrity sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA== @@ -7393,16 +7399,16 @@ libnpmorg@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmpack@*: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-3.0.0.tgz#b1cdf182106bc0d25910e79bb5c9b6c23cd71670" - integrity sha512-W6lt4blkR9YXu/qOrFknfnKBajz/1GvAc5q1XcWTGuBJn2DYKDWHtA7x1fuMQdn7hKDBOPlZ/Aqll+ZvAnrM6g== +libnpmpack@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" + integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== dependencies: - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.3" npm-package-arg "^8.1.0" - pacote "^12.0.0" + pacote "^11.2.6" -libnpmpublish@*: +libnpmpublish@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== @@ -7413,14 +7419,14 @@ libnpmpublish@*: semver "^7.1.3" ssri "^8.0.1" -libnpmsearch@*: +libnpmsearch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.2.tgz#aee81b9e4768750d842b627a3051abc89fdc15f3" integrity sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw== dependencies: npm-registry-fetch "^11.0.0" -libnpmteam@*: +libnpmteam@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.4.tgz#9dbe2e18ae3cb97551ec07d2a2daf9944f3edc4c" integrity sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw== @@ -7428,13 +7434,13 @@ libnpmteam@*: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmversion@*: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-2.0.1.tgz#20b1425d88cd99c66806a54b458d2d654066b550" - integrity sha512-uFGtNTe/m0GOIBQCE4ryIsgGNJdeShW+qvYtKNLCCuiG7JY3YEslL/maFFZbaO4wlQa/oj1t0Bm9TyjahvtgQQ== +libnpmversion@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.2.1.tgz#689aa7fe0159939b3cbbf323741d34976f4289e9" + integrity sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ== dependencies: "@npmcli/git" "^2.0.7" - "@npmcli/run-script" "^2.0.0" + "@npmcli/run-script" "^1.8.4" json-parse-even-better-errors "^2.3.1" semver "^7.3.5" stringify-package "^1.0.1" @@ -7580,7 +7586,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@*, make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: +make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -7906,7 +7912,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@*, minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -7920,7 +7926,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== @@ -7935,7 +7941,7 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: +mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== @@ -7944,11 +7950,6 @@ mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -7956,6 +7957,11 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mock-fs@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.2.tgz#6fa486e06d00f8793a8d2228de980eff93ce6db7" @@ -7986,11 +7992,6 @@ mri@^1.1.5: 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" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8001,6 +8002,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -8101,23 +8107,7 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-gyp@*, node-gyp@^8.0.0, node-gyp@^8.2.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-gyp@^7.1.0: +node-gyp@^7.1.0, node-gyp@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== @@ -8133,6 +8123,22 @@ node-gyp@^7.1.0: tar "^6.0.2" which "^2.0.2" +node-gyp@^8.0.0: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-html-parser@3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-3.3.6.tgz#fdbb3ba16d1252d7197ec39f0260d9c10ef33590" @@ -8164,7 +8170,7 @@ node.extend@^2.0.0: has "^1.0.3" is "^3.2.1" -nopt@*, nopt@^5.0.0: +nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== @@ -8201,7 +8207,7 @@ normalize-url@^6.0.0, normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@*: +npm-audit-report@^2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== @@ -8215,7 +8221,7 @@ npm-bundled@^1.1.1: dependencies: npm-normalize-package-bin "^1.0.1" -npm-install-checks@*, npm-install-checks@^4.0.0: +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== @@ -8227,7 +8233,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -8246,17 +8252,7 @@ npm-packlist@^2.1.4: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-packlist@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" - integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== - dependencies: - glob "^7.1.6" - ignore-walk "^4.0.1" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: +npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -8266,14 +8262,14 @@ npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pic npm-package-arg "^8.1.2" semver "^7.3.4" -npm-profile@*: +npm-profile@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.4.tgz#73e5bd1d808edc2c382d7139049cc367ac43161b" integrity sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA== dependencies: npm-registry-fetch "^11.0.0" -npm-registry-fetch@*, npm-registry-fetch@^11.0.0: +npm-registry-fetch@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" integrity sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA== @@ -8307,7 +8303,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@*: +npm-user-validate@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== @@ -8317,86 +8313,76 @@ npm@^7.0.0: resolved "https://registry.yarnpkg.com/npm/-/npm-7.24.2.tgz#861117af8241bea592289f22407230e5300e59ca" integrity sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ== dependencies: - "@isaacs/string-locale-compare" "*" - "@npmcli/arborist" "*" - "@npmcli/ci-detect" "*" - "@npmcli/config" "*" - "@npmcli/map-workspaces" "*" - "@npmcli/package-json" "*" - "@npmcli/run-script" "*" - abbrev "*" - ansicolors "*" - ansistyles "*" - archy "*" - cacache "*" - chalk "*" - chownr "*" - cli-columns "*" - cli-table3 "*" - columnify "*" - fastest-levenshtein "*" - glob "*" - graceful-fs "*" - hosted-git-info "*" - ini "*" - init-package-json "*" - is-cidr "*" - json-parse-even-better-errors "*" - libnpmaccess "*" - libnpmdiff "*" - libnpmexec "*" - libnpmfund "*" - libnpmhook "*" - libnpmorg "*" - libnpmpack "*" - libnpmpublish "*" - libnpmsearch "*" - libnpmteam "*" - libnpmversion "*" - make-fetch-happen "*" - minipass "*" - minipass-pipeline "*" - mkdirp "*" - mkdirp-infer-owner "*" - ms "*" - node-gyp "*" - nopt "*" - npm-audit-report "*" - npm-install-checks "*" - npm-package-arg "*" - npm-pick-manifest "*" - npm-profile "*" - npm-registry-fetch "*" - npm-user-validate "*" - npmlog "*" - opener "*" - pacote "*" - parse-conflict-json "*" - qrcode-terminal "*" - read "*" - read-package-json "*" - read-package-json-fast "*" - readdir-scoped-modules "*" - rimraf "*" - semver "*" - ssri "*" - tar "*" - text-table "*" - tiny-relative-date "*" - treeverse "*" - validate-npm-package-name "*" - which "*" - write-file-atomic "*" - -npmlog@*, npmlog@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.0.tgz#ba9ef39413c3d936ea91553db7be49c34ad0520c" - integrity sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.0" - set-blocking "^2.0.0" + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^2.9.0" + "@npmcli/ci-detect" "^1.2.0" + "@npmcli/config" "^2.3.0" + "@npmcli/map-workspaces" "^1.0.4" + "@npmcli/package-json" "^1.0.1" + "@npmcli/run-script" "^1.8.6" + abbrev "~1.1.1" + ansicolors "~0.3.2" + ansistyles "~0.1.3" + archy "~1.0.0" + cacache "^15.3.0" + chalk "^4.1.2" + chownr "^2.0.0" + cli-columns "^3.1.2" + cli-table3 "^0.6.0" + columnify "~1.5.4" + fastest-levenshtein "^1.0.12" + glob "^7.2.0" + graceful-fs "^4.2.8" + hosted-git-info "^4.0.2" + ini "^2.0.0" + init-package-json "^2.0.5" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + libnpmaccess "^4.0.2" + libnpmdiff "^2.0.4" + libnpmexec "^2.0.1" + libnpmfund "^1.1.0" + libnpmhook "^6.0.2" + libnpmorg "^2.0.2" + libnpmpack "^2.0.1" + libnpmpublish "^4.0.1" + libnpmsearch "^3.1.1" + libnpmteam "^2.0.3" + libnpmversion "^1.2.1" + make-fetch-happen "^9.1.0" + minipass "^3.1.3" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^7.1.2" + nopt "^5.0.0" + npm-audit-report "^2.1.5" + npm-install-checks "^4.0.0" + npm-package-arg "^8.1.5" + npm-pick-manifest "^6.1.1" + npm-profile "^5.0.3" + npm-registry-fetch "^11.0.0" + npm-user-validate "^1.0.1" + npmlog "^5.0.1" + opener "^1.5.2" + pacote "^11.3.5" + parse-conflict-json "^1.1.1" + qrcode-terminal "^0.12.0" + read "~1.0.7" + read-package-json "^4.1.1" + read-package-json-fast "^2.0.3" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.5" + ssri "^8.0.1" + tar "^6.1.11" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^1.0.4" + validate-npm-package-name "~3.0.0" + which "^2.0.2" + write-file-atomic "^3.0.3" npmlog@^4.1.2: version "4.1.2" @@ -8408,6 +8394,26 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.0.tgz#ba9ef39413c3d936ea91553db7be49c34ad0520c" + integrity sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" + nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -8430,7 +8436,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0: +object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -8485,7 +8491,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@*: +opener@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -8647,32 +8653,7 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@*, pacote@^12.0.0, pacote@^12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.2.tgz#14ae30a81fe62ec4fc18c071150e6763e932527c" - integrity sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg== - dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^2.0.0" - cacache "^15.0.5" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^3.0.0" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^11.0.0" - promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" - -pacote@^11.3.0: +pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: version "11.3.5" resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== @@ -8704,7 +8685,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@*, parse-conflict-json@^1.1.1: +parse-conflict-json@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== @@ -9058,7 +9039,7 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qrcode-terminal@*: +qrcode-terminal@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== @@ -9129,7 +9110,7 @@ read-cmd-shim@^2.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: +read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -9137,7 +9118,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.1.1: +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== @@ -9175,7 +9156,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@*, read@1, read@^1.0.7, read@~1.0.1: +read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -9204,7 +9185,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@*, readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -9405,7 +9386,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@*, rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -9533,18 +9514,18 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -semver@*, semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -9682,9 +9663,9 @@ smart-buffer@^4.1.0: integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks-proxy-agent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz#869cf2d7bd10fea96c7ad3111e81726855e285c3" - integrity sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg== + version "6.1.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz#e664e8f1aaf4e1fb3df945f09e3d94f911137f87" + integrity sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew== dependencies: agent-base "^6.0.2" debug "^4.3.1" @@ -9803,7 +9784,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@*, ssri@^8.0.0, ssri@^8.0.1: +ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -9868,6 +9849,14 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.1 || ^2.0.0", string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -9935,6 +9924,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +"strip-ansi@^3.0.1 || ^4.0.0", strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -10012,7 +10008,7 @@ tar-stream@^2.0.1: inherits "^2.0.3" readable-stream "^3.1.1" -tar@*, tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: +tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -10062,7 +10058,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@*, text-table@^0.2.0: +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -10099,7 +10095,7 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tiny-relative-date@*: +tiny-relative-date@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== @@ -10174,7 +10170,7 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -treeverse@*, treeverse@^1.0.4: +treeverse@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== @@ -10511,7 +10507,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@*, validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0: +validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= @@ -10633,13 +10629,6 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which@*, which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -10647,6 +10636,13 @@ which@^1.2.9: dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -10678,7 +10674,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== From cf7121319c5dd6ac8651fd2772567227c392cb3f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Nov 2021 22:35:13 +0000 Subject: [PATCH 138/248] chore(deps): update linters to v5.4.0 (#12795) Co-authored-by: Renovate Bot --- package.json | 4 +-- yarn.lock | 74 ++++++++++------------------------------------------ 2 files changed, 16 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index ae234e8327a296..de5de1387440bf 100644 --- a/package.json +++ b/package.json @@ -247,8 +247,8 @@ "@types/traverse": "0.6.32", "@types/url-join": "4.0.1", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.4.0", + "@typescript-eslint/parser": "5.4.0", "aws-sdk-client-mock": "0.5.6", "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", diff --git a/yarn.lock b/yarn.lock index a59ca5f62e9e0d..1ff1afc836067e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3390,13 +3390,13 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz#d8ff412f10f54f6364e7fd7c1e70eb6767f434c3" - integrity sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw== +"@typescript-eslint/eslint-plugin@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz#05e711a2e7b68342661fde61bccbd1531c19521a" + integrity sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg== dependencies: - "@typescript-eslint/experimental-utils" "5.3.1" - "@typescript-eslint/scope-manager" "5.3.1" + "@typescript-eslint/experimental-utils" "5.4.0" + "@typescript-eslint/scope-manager" "5.4.0" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -3404,19 +3404,7 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz#bbd8f9b67b4d5fdcb9d2f90297d8fcda22561e05" - integrity sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.3.1" - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/typescript-estree" "5.3.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/experimental-utils@^5.0.0": +"@typescript-eslint/experimental-utils@5.4.0", "@typescript-eslint/experimental-utils@^5.0.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz#238a7418d2da3b24874ba35385eb21cc61d2a65e" integrity sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg== @@ -3428,24 +3416,16 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.3.1.tgz#8ff1977c3d3200c217b3e4628d43ef92f89e5261" - integrity sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw== +"@typescript-eslint/parser@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.4.0.tgz#3aa83ce349d66e39b84151f6d5464928044ca9e3" + integrity sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw== dependencies: - "@typescript-eslint/scope-manager" "5.3.1" - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/typescript-estree" "5.3.1" + "@typescript-eslint/scope-manager" "5.4.0" + "@typescript-eslint/types" "5.4.0" + "@typescript-eslint/typescript-estree" "5.4.0" debug "^4.3.2" -"@typescript-eslint/scope-manager@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz#3cfbfbcf5488fb2a9a6fbbe97963ee1e8d419269" - integrity sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg== - dependencies: - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/visitor-keys" "5.3.1" - "@typescript-eslint/scope-manager@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz#aaab08415f4a9cf32b870c7750ae8ba4607126a1" @@ -3454,29 +3434,11 @@ "@typescript-eslint/types" "5.4.0" "@typescript-eslint/visitor-keys" "5.4.0" -"@typescript-eslint/types@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.3.1.tgz#afaa715b69ebfcfde3af8b0403bf27527912f9b7" - integrity sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ== - "@typescript-eslint/types@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.4.0.tgz#b1c130f4b381b77bec19696c6e3366f9781ce8f2" integrity sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA== -"@typescript-eslint/typescript-estree@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz#50cc4bfb93dc31bc75e08ae52e29fcb786d606ec" - integrity sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ== - dependencies: - "@typescript-eslint/types" "5.3.1" - "@typescript-eslint/visitor-keys" "5.3.1" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz#fe524fb308973c68ebeb7428f3b64499a6ba5fc0" @@ -3490,14 +3452,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz#c2860ff22939352db4f3806f34b21d8ad00588ba" - integrity sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ== - dependencies: - "@typescript-eslint/types" "5.3.1" - eslint-visitor-keys "^3.0.0" - "@typescript-eslint/visitor-keys@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz#09bc28efd3621f292fe88c86eef3bf4893364c8c" From ad9a2f4e77fe2ae0b5288938f71495e209c8702f Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 23 Nov 2021 07:56:19 +0100 Subject: [PATCH 139/248] fix: gracefully handle invalid locked version (#12800) --- lib/workers/repository/process/lookup/index.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index a946363ce64bfb..93cb4189a0a908 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -205,9 +205,16 @@ export async function lookupUpdates( }); } let filterStart = currentVersion; - if (lockedVersion && rangeStrategy === 'update-lockfile') { - // Look for versions greater than the current locked version that still satisfy the package.json range - filterStart = lockedVersion; + if (lockedVersion) { + // istanbul ignore if + if (!versioning.isVersion(lockedVersion)) { + res.skipReason = SkipReason.InvalidVersion; + return res; + } + if (rangeStrategy === 'update-lockfile') { + // Look for versions greater than the current locked version that still satisfy the package.json range + filterStart = lockedVersion; + } } // Filter latest, unstable, etc let filteredReleases = filterVersions( From 38982300c450b78f7ae54f9642c9b3d000833e22 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 23 Nov 2021 08:42:39 +0100 Subject: [PATCH 140/248] fix(gradle): handle null tokenizing (#12799) --- lib/versioning/gradle/index.ts | 2 +- lib/workers/repository/process/lookup/bucket.ts | 4 ++++ lib/workers/repository/process/lookup/index.ts | 11 +++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/versioning/gradle/index.ts b/lib/versioning/gradle/index.ts index 71bd6682f5be08..fa60dc22c520c1 100644 --- a/lib/versioning/gradle/index.ts +++ b/lib/versioning/gradle/index.ts @@ -24,7 +24,7 @@ const equals = (a: string, b: string): boolean => compare(a, b) === 0; const getMajor = (version: string): number | null => { if (isVersion(version)) { const tokens = tokenize(version.replace(regEx(/^v/i), '')); - const majorToken = tokens[0]; + const majorToken = tokens?.[0]; if (majorToken && majorToken.type === TokenType.Number) { return +majorToken.val; } diff --git a/lib/workers/repository/process/lookup/bucket.ts b/lib/workers/repository/process/lookup/bucket.ts index daa6c5f3842d98..112815aa962509 100644 --- a/lib/workers/repository/process/lookup/bucket.ts +++ b/lib/workers/repository/process/lookup/bucket.ts @@ -19,6 +19,10 @@ export function getBucket( } const fromMajor = versioning.getMajor(currentVersion); const toMajor = versioning.getMajor(newVersion); + // istanbul ignore if + if (toMajor === null) { + return null; + } if (fromMajor !== toMajor) { if (separateMultipleMajor) { return `major-${toMajor}`; diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index 93cb4189a0a908..ae5165ca9490fe 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -1,3 +1,4 @@ +import is from '@sindresorhus/is'; import { mergeChildConfig } from '../../../../config'; import type { ValidationMessage } from '../../../../config/types'; import { CONFIG_VALIDATION } from '../../../../constants/error-messages'; @@ -238,10 +239,12 @@ export async function lookupUpdates( release.version, versioning ); - if (buckets[bucket]) { - buckets[bucket].push(release); - } else { - buckets[bucket] = [release]; + if (is.string(bucket)) { + if (buckets[bucket]) { + buckets[bucket].push(release); + } else { + buckets[bucket] = [release]; + } } } const depResultConfig = mergeChildConfig(config, res); From ff87759b4847ece883b91609e6ec25cddfd1bc3c Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 23 Nov 2021 09:13:17 +0100 Subject: [PATCH 141/248] refactor: getCurrentVersion params --- lib/workers/repository/process/lookup/current.ts | 5 ++--- lib/workers/repository/process/lookup/index.ts | 6 ++++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/workers/repository/process/lookup/current.ts b/lib/workers/repository/process/lookup/current.ts index 94f8d12fd4e7d9..0b7113f703988e 100644 --- a/lib/workers/repository/process/lookup/current.ts +++ b/lib/workers/repository/process/lookup/current.ts @@ -2,16 +2,15 @@ import is from '@sindresorhus/is'; import { logger } from '../../../../logger'; import { regEx } from '../../../../util/regex'; import type { VersioningApi } from '../../../../versioning/types'; -import type { LookupUpdateConfig } from './types'; export function getCurrentVersion( - config: LookupUpdateConfig, + currentValue: string, + lockedVersion: string, versioning: VersioningApi, rangeStrategy: string, latestVersion: string, allVersions: string[] ): string | null { - const { currentValue, lockedVersion } = config; // istanbul ignore if if (!is.string(currentValue)) { return null; diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index ae5165ca9490fe..22041898d1ff1e 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -170,14 +170,16 @@ export async function lookupUpdates( .map((release) => release.version); const currentVersion = getCurrentVersion( - config, + currentValue, + lockedVersion, versioning, rangeStrategy, latestVersion, nonDeprecatedVersions ) || getCurrentVersion( - config, + currentValue, + lockedVersion, versioning, rangeStrategy, latestVersion, From 95b20ca65bf7f9f6078375ee4a3a3fdff5c08b47 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Nov 2021 11:57:10 +0100 Subject: [PATCH 142/248] chore(deps): update dependency pretty-quick to v3.1.2 (#12803) 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 de5de1387440bf..aa5e5ff847a0af 100644 --- a/package.json +++ b/package.json @@ -275,7 +275,7 @@ "nock": "13.2.1", "npm-run-all": "4.1.5", "prettier": "2.4.1", - "pretty-quick": "3.1.1", + "pretty-quick": "3.1.2", "rimraf": "3.0.2", "semantic-release": "18.0.0", "shelljs": "0.8.4", diff --git a/yarn.lock b/yarn.lock index 1ff1afc836067e..3920d488a86c0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8868,10 +8868,10 @@ pretty-format@^27.0.0, pretty-format@^27.0.6, pretty-format@^27.3.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-quick@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.1.tgz#93ca4e2dd38cc4e970e3f54a0ead317a25454688" - integrity sha512-ZYLGiMoV2jcaas3vTJrLvKAYsxDoXQBUn8OSTxkl67Fyov9lyXivJTl0+2WVh+y6EovGcw7Lm5ThYpH+Sh3XxQ== +pretty-quick@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.2.tgz#89d8741af7122cbd7f34182df746c5a7ea360b5c" + integrity sha512-T+fpTJrDjTzewql4p3lKrRA7z3MrNyjBK1MKeaBm5PpKwATgVm885TpY7TgY8KFt5Q1Qn3QDseRQcyX9AKTKkA== dependencies: chalk "^3.0.0" execa "^4.0.0" From 84b776cebedd536a4c4b8eca870ce27193dab319 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 23 Nov 2021 12:21:10 +0100 Subject: [PATCH 143/248] feat: support update-lockfile for unconstrained deps (#12802) --- .../__snapshots__/extract.spec.ts.snap | 194 +++++++++--------- lib/manager/bundler/extract.ts | 7 +- lib/util/package-rules.ts | 7 +- .../repository/process/lookup/current.ts | 3 + .../repository/process/lookup/index.spec.ts | 25 +++ .../repository/process/lookup/index.ts | 15 +- 6 files changed, 140 insertions(+), 111 deletions(-) diff --git a/lib/manager/bundler/__snapshots__/extract.spec.ts.snap b/lib/manager/bundler/__snapshots__/extract.spec.ts.snap index 5a50bac31a485b..1c0f4aee0fb2fe 100644 --- a/lib/manager/bundler/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/bundler/__snapshots__/extract.spec.ts.snap @@ -16,20 +16,20 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "puma", "lockedVersion": "4.3.1", "managerData": Object { "lineNumber": 5, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "bootsnap", "lockedVersion": "1.4.5", "managerData": Object { "lineNumber": 6, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 5.0", @@ -41,30 +41,31 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "sass-rails-bootstrap", "lockedVersion": "2.2.2.3", "managerData": Object { "lineNumber": 9, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "jquery-rails", "lockedVersion": "4.3.5", "managerData": Object { "lineNumber": 10, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "uglifier", "lockedVersion": "4.2.0", "managerData": Object { "lineNumber": 11, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "foreman", "depTypes": Array [ "development", @@ -73,9 +74,9 @@ Object { "managerData": Object { "lineNumber": 14, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "sqlite3", "depTypes": Array [ "development", @@ -84,9 +85,9 @@ Object { "managerData": Object { "lineNumber": 15, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "listen", "depTypes": Array [ "development", @@ -95,9 +96,9 @@ Object { "managerData": Object { "lineNumber": 16, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "pg", "depTypes": Array [ "production", @@ -106,9 +107,9 @@ Object { "managerData": Object { "lineNumber": 20, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "newrelic_rpm", "depTypes": Array [ "production", @@ -117,7 +118,6 @@ Object { "managerData": Object { "lineNumber": 21, }, - "skipReason": "no-version", }, Object { "currentValue": "< 1.17.2", @@ -132,6 +132,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "airbrake", "depTypes": Array [ "production", @@ -140,7 +141,6 @@ Object { "managerData": Object { "lineNumber": 23, }, - "skipReason": "no-version", }, ], "lockFiles": Array [ @@ -339,12 +339,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "browser", "lockedVersion": "2.7.1", "managerData": Object { "lineNumber": 29, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 0.7.7", @@ -356,12 +356,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "iso-639", "lockedVersion": "0.2.8", "managerData": Object { "lineNumber": 31, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 5.1", @@ -476,12 +476,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "fastimage", "lockedVersion": "2.1.7", "managerData": Object { "lineNumber": 49, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 2.1", @@ -511,11 +511,11 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "health_check", "managerData": Object { "lineNumber": 53, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 4.3", @@ -562,12 +562,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "idn-ruby", "lockedVersion": "0.1.0", "managerData": Object { "lineNumber": 59, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.1", @@ -597,11 +597,11 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "nilsimsa", "managerData": Object { "lineNumber": 63, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.10", @@ -649,12 +649,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "parslet", "lockedVersion": "1.8.2", "managerData": Object { "lineNumber": 69, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.19", @@ -666,11 +666,11 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "posix-spawn", "managerData": Object { "lineNumber": 71, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 2.1", @@ -682,12 +682,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "premailer-rails", "lockedVersion": "1.10.3", "managerData": Object { "lineNumber": 73, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 6.2", @@ -897,19 +897,19 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "webpush", "lockedVersion": "0.3.8", "managerData": Object { "lineNumber": 97, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "json-ld", "managerData": Object { "lineNumber": 99, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 3.0", @@ -1213,6 +1213,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "memory_profiler", "depTypes": Array [ "development", @@ -1221,7 +1222,6 @@ Object { "managerData": Object { "lineNumber": 136, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 0.78", @@ -1320,6 +1320,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "derailed_benchmarks", "depTypes": Array [ "development", @@ -1328,9 +1329,9 @@ Object { "managerData": Object { "lineNumber": 147, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "stackprof", "depTypes": Array [ "development", @@ -1339,7 +1340,6 @@ Object { "managerData": Object { "lineNumber": 148, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 0.11", @@ -1366,20 +1366,20 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "concurrent-ruby", "lockedVersion": "1.1.5", "managerData": Object { "lineNumber": 156, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "connection_pool", "lockedVersion": "2.2.2", "managerData": Object { "lineNumber": 157, }, - "skipReason": "no-version", }, ], "lockFiles": Array [ @@ -1398,12 +1398,12 @@ Object { }, "deps": Array [ Object { + "datasource": "rubygems", "depName": "rails", "lockedVersion": "6.0.1", "managerData": Object { "lineNumber": 4, }, - "skipReason": "no-version", }, Object { "currentValue": ">= 11.1", @@ -1415,12 +1415,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "rack-proxy", "lockedVersion": "0.6.5", "managerData": Object { "lineNumber": 6, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 5.0", @@ -1435,6 +1435,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "byebug", "depTypes": Array [ "test", @@ -1443,7 +1444,6 @@ Object { "managerData": Object { "lineNumber": 10, }, - "skipReason": "no-version", }, ], "lockFiles": Array [ @@ -1489,12 +1489,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "sass-rails", "lockedVersion": "5.0.7", "managerData": Object { "lineNumber": 14, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 5", @@ -1506,11 +1506,11 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "webpacker", "managerData": Object { "lineNumber": 16, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 3.1.11", @@ -1573,6 +1573,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "w3c_validators", "depTypes": Array [ "doc", @@ -1581,7 +1582,6 @@ Object { "managerData": Object { "lineNumber": 34, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.2.0", @@ -1596,12 +1596,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "dalli", "lockedVersion": "2.7.9", "managerData": Object { "lineNumber": 39, }, - "skipReason": "no-version", }, Object { "currentValue": "\\">= 3.0.5\\", \\"< 3.2\\"", @@ -1613,20 +1613,20 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "libxml-ruby", "lockedVersion": "3.1.0", "managerData": Object { "lineNumber": 41, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "connection_pool", "lockedVersion": "2.2.2", "managerData": Object { "lineNumber": 42, }, - "skipReason": "no-version", }, Object { "currentValue": ">= 1.1.0", @@ -1638,6 +1638,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "resque", "depTypes": Array [ "job", @@ -1646,9 +1647,9 @@ Object { "managerData": Object { "lineNumber": 49, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "resque-scheduler", "depTypes": Array [ "job", @@ -1657,9 +1658,9 @@ Object { "managerData": Object { "lineNumber": 50, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "sidekiq", "depTypes": Array [ "job", @@ -1668,9 +1669,9 @@ Object { "managerData": Object { "lineNumber": 51, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "sucker_punch", "depTypes": Array [ "job", @@ -1679,9 +1680,9 @@ Object { "managerData": Object { "lineNumber": 52, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "delayed_job", "depTypes": Array [ "job", @@ -1690,9 +1691,9 @@ Object { "managerData": Object { "lineNumber": 53, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "queue_classic", "depTypes": Array [ "job", @@ -1700,9 +1701,9 @@ Object { "managerData": Object { "lineNumber": 54, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "sneakers", "depTypes": Array [ "job", @@ -1711,9 +1712,9 @@ Object { "managerData": Object { "lineNumber": 55, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "que", "depTypes": Array [ "job", @@ -1722,9 +1723,9 @@ Object { "managerData": Object { "lineNumber": 56, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "backburner", "depTypes": Array [ "job", @@ -1733,9 +1734,9 @@ Object { "managerData": Object { "lineNumber": 57, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "delayed_job_active_record", "depTypes": Array [ "job", @@ -1744,9 +1745,9 @@ Object { "managerData": Object { "lineNumber": 58, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "sequel", "depTypes": Array [ "job", @@ -1755,9 +1756,9 @@ Object { "managerData": Object { "lineNumber": 59, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "puma", "depTypes": Array [ "cable", @@ -1766,9 +1767,9 @@ Object { "managerData": Object { "lineNumber": 64, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "hiredis", "depTypes": Array [ "cable", @@ -1777,7 +1778,6 @@ Object { "managerData": Object { "lineNumber": 66, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 4.0", @@ -1792,6 +1792,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "redis-namespace", "depTypes": Array [ "cable", @@ -1800,9 +1801,9 @@ Object { "managerData": Object { "lineNumber": 69, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "websocket-client-simple", "depTypes": Array [ "cable", @@ -1810,9 +1811,9 @@ Object { "managerData": Object { "lineNumber": 71, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "blade", "depTypes": Array [ "cable", @@ -1821,9 +1822,9 @@ Object { "managerData": Object { "lineNumber": 73, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "blade-sauce_labs_plugin", "depTypes": Array [ "cable", @@ -1832,9 +1833,9 @@ Object { "managerData": Object { "lineNumber": 74, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "sprockets-export", "depTypes": Array [ "cable", @@ -1843,9 +1844,9 @@ Object { "managerData": Object { "lineNumber": 75, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "aws-sdk-s3", "depTypes": Array [ "storage", @@ -1854,7 +1855,6 @@ Object { "managerData": Object { "lineNumber": 80, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.11", @@ -1869,6 +1869,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "azure-storage", "depTypes": Array [ "storage", @@ -1877,7 +1878,6 @@ Object { "managerData": Object { "lineNumber": 82, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.2", @@ -1892,22 +1892,23 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "aws-sdk-sns", "lockedVersion": "1.8.1", "managerData": Object { "lineNumber": 88, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "webmock", "lockedVersion": "3.4.2", "managerData": Object { "lineNumber": 89, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "qunit-selenium", "depTypes": Array [ "ujs", @@ -1916,9 +1917,9 @@ Object { "managerData": Object { "lineNumber": 92, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "chromedriver-helper", "depTypes": Array [ "ujs", @@ -1927,9 +1928,9 @@ Object { "managerData": Object { "lineNumber": 93, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "minitest-bisect", "depTypes": Array [ "test", @@ -1938,9 +1939,9 @@ Object { "managerData": Object { "lineNumber": 101, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "minitest-retry", "depTypes": Array [ "test", @@ -1949,9 +1950,9 @@ Object { "managerData": Object { "lineNumber": 102, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "stackprof", "depTypes": Array [ "test", @@ -1960,9 +1961,9 @@ Object { "managerData": Object { "lineNumber": 105, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "byebug", "depTypes": Array [ "test", @@ -1971,9 +1972,9 @@ Object { "managerData": Object { "lineNumber": 106, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "benchmark-ips", "depTypes": Array [ "test", @@ -1982,7 +1983,6 @@ Object { "managerData": Object { "lineNumber": 109, }, - "skipReason": "no-version", }, Object { "currentValue": ">= 1.8.1", @@ -2036,14 +2036,15 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "activerecord-jdbcsqlite3-adapter", "lockedVersion": "52.1-java", "managerData": Object { "lineNumber": 129, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "activerecord-jdbcmysql-adapter", "depTypes": Array [ "db", @@ -2052,9 +2053,9 @@ Object { "managerData": Object { "lineNumber": 131, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "activerecord-jdbcpostgresql-adapter", "depTypes": Array [ "db", @@ -2063,7 +2064,6 @@ Object { "managerData": Object { "lineNumber": 132, }, - "skipReason": "no-version", }, Object { "currentValue": ">= 1.3.0", @@ -2116,26 +2116,26 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "activerecord-oracle_enhanced-adapter", "managerData": Object { "lineNumber": 154, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "ibm_db", "managerData": Object { "lineNumber": 158, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "tzinfo-data", "lockedVersion": "1.2018.7", "managerData": Object { "lineNumber": 159, }, - "skipReason": "no-version", }, Object { "currentValue": ">= 0.1.0", @@ -2163,6 +2163,7 @@ Object { }, "deps": Array [ Object { + "datasource": "rubygems", "depName": "some_internal_gem", "managerData": Object { "lineNumber": 4, @@ -2170,9 +2171,9 @@ Object { "registryUrls": Array [ "https://gems.example.com", ], - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "another_internal_gem", "managerData": Object { "lineNumber": 5, @@ -2180,7 +2181,6 @@ Object { "registryUrls": Array [ "https://gems.example.com", ], - "skipReason": "no-version", }, Object { "currentValue": "latest", @@ -2191,13 +2191,14 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "sqlite3", "managerData": Object { "lineNumber": 10, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "wirble", "depTypes": Array [ "development", @@ -2206,9 +2207,9 @@ Object { "managerData": Object { "lineNumber": 14, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "faker", "depTypes": Array [ "development", @@ -2217,7 +2218,6 @@ Object { "managerData": Object { "lineNumber": 15, }, - "skipReason": "no-version", }, ], "registryUrls": Array [ @@ -2539,12 +2539,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "gssapi", "lockedVersion": "1.2.0", "managerData": Object { "lineNumber": 52, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 4.11", @@ -2664,12 +2664,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "net-ldap", "lockedVersion": "0.16.0", "managerData": Object { "lineNumber": 81, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.1.0", @@ -2735,12 +2735,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "hashie-forbidden_attributes", "lockedVersion": "0.1.1", "managerData": Object { "lineNumber": 98, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.0", @@ -2770,12 +2770,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "mini_magick", "lockedVersion": "4.9.5", "managerData": Object { "lineNumber": 108, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 3.5", @@ -2895,20 +2895,20 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "aws-sdk", "lockedVersion": "2.11.374", "managerData": Object { "lineNumber": 134, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "faraday_middleware-aws-signers-v4", "lockedVersion": "0.1.7", "managerData": Object { "lineNumber": 135, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 2.12", @@ -3073,12 +3073,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "icalendar", "lockedVersion": "2.4.1", "managerData": Object { "lineNumber": 158, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 3.1.0", @@ -3156,6 +3156,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "rack-timeout", "depTypes": Array [ "puma", @@ -3164,7 +3165,6 @@ Object { "managerData": Object { "lineNumber": 175, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 0.6.0", @@ -3248,12 +3248,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "ruby-progressbar", "lockedVersion": "1.10.1", "managerData": Object { "lineNumber": 200, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 2.0.9", @@ -3292,12 +3292,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "device_detector", "lockedVersion": "1.0.0", "managerData": Object { "lineNumber": 216, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 4.0", @@ -3480,12 +3480,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "fast_blank", "lockedVersion": "1.0.0", "managerData": Object { "lineNumber": 273, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 0.10.5", @@ -3713,12 +3713,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "derailed_benchmarks", "lockedVersion": "1.3.5", "managerData": Object { "lineNumber": 321, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 0.8", @@ -3892,6 +3892,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "awesome_print", "depTypes": Array [ "development", @@ -3901,7 +3902,6 @@ Object { "managerData": Object { "lineNumber": 353, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.7.0", @@ -4252,6 +4252,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "rspec-parameterized", "depTypes": Array [ "test", @@ -4260,7 +4261,6 @@ Object { "managerData": Object { "lineNumber": 404, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 3.22.0", @@ -4347,6 +4347,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "rails-controller-testing", "depTypes": Array [ "test", @@ -4355,7 +4356,6 @@ Object { "managerData": Object { "lineNumber": 414, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.1", @@ -4382,6 +4382,7 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "rspec_junit_formatter", "depTypes": Array [ "test", @@ -4390,9 +4391,9 @@ Object { "managerData": Object { "lineNumber": 417, }, - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "guard-rspec", "depTypes": Array [ "test", @@ -4401,7 +4402,6 @@ Object { "managerData": Object { "lineNumber": 418, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 4.9", @@ -4431,12 +4431,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "html2text", "lockedVersion": "0.2.0", "managerData": Object { "lineNumber": 426, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 1.0.0", @@ -4520,12 +4520,12 @@ Object { }, }, Object { + "datasource": "rubygems", "depName": "net-ntp", "lockedVersion": "2.1.3", "managerData": Object { "lineNumber": 445, }, - "skipReason": "no-version", }, Object { "currentValue": "~> 5.2", @@ -4745,6 +4745,7 @@ Object { }, "deps": Array [ Object { + "datasource": "rubygems", "depName": "rubocop", "lockedVersion": "0.68.1", "managerData": Object { @@ -4753,9 +4754,9 @@ Object { "registryUrls": Array [ "https://rubygems.org", ], - "skipReason": "no-version", }, Object { + "datasource": "rubygems", "depName": "brakeman", "lockedVersion": "4.4.0", "managerData": Object { @@ -4764,7 +4765,6 @@ Object { "registryUrls": Array [ "https://rubygems.org", ], - "skipReason": "no-version", }, ], "lockFiles": Array [ diff --git a/lib/manager/bundler/extract.ts b/lib/manager/bundler/extract.ts index 76853e34aed402..16032b92f95d3a 100644 --- a/lib/manager/bundler/extract.ts +++ b/lib/manager/bundler/extract.ts @@ -1,6 +1,5 @@ import { RubyGemsDatasource } from '../../datasource/rubygems'; import { logger } from '../../logger'; -import { SkipReason } from '../../types'; import { readLocalFile } from '../../util/fs'; import { regEx } from '../../util/regex'; import type { PackageDependency, PackageFile } from '../types'; @@ -52,12 +51,8 @@ export async function extractPackageFile( dep.currentValue = regEx(/\s*,\s*/).test(currentValue) // TODO #12071 ? currentValue : currentValue.slice(1, -1); - } else { - dep.skipReason = SkipReason.NoVersion; - } - if (!dep.skipReason) { - dep.datasource = RubyGemsDatasource.id; } + dep.datasource = RubyGemsDatasource.id; res.deps.push(dep); } const groupMatch = regEx(/^group\s+(.*?)\s+do/).exec(line); // TODO #12071 diff --git a/lib/util/package-rules.ts b/lib/util/package-rules.ts index 2f21b91bcd611f..aa0af30dec9b88 100644 --- a/lib/util/package-rules.ts +++ b/lib/util/package-rules.ts @@ -29,6 +29,7 @@ function matchesRule( manager, datasource, } = inputConfig; + const unconstrainedValue = lockedVersion && is.undefined(currentValue); // Setting empty arrays simplifies our logic later const matchFiles = packageRule.matchFiles || []; const matchPaths = packageRule.matchPaths || []; @@ -206,14 +207,16 @@ function matchesRule( const matchCurrentVersionStr = matchCurrentVersion.toString(); if (isConfigRegex(matchCurrentVersionStr)) { const matches = configRegexPredicate(matchCurrentVersionStr); - if (!matches(currentValue)) { + if (!unconstrainedValue && !matches(currentValue)) { return false; } positiveMatch = true; } else if (version.isVersion(matchCurrentVersionStr)) { let isMatch = false; try { - isMatch = version.matches(matchCurrentVersionStr, currentValue); + isMatch = + unconstrainedValue || + version.matches(matchCurrentVersionStr, currentValue); } catch (err) { // Do nothing } diff --git a/lib/workers/repository/process/lookup/current.ts b/lib/workers/repository/process/lookup/current.ts index 0b7113f703988e..54731b2c9250c6 100644 --- a/lib/workers/repository/process/lookup/current.ts +++ b/lib/workers/repository/process/lookup/current.ts @@ -11,6 +11,9 @@ export function getCurrentVersion( latestVersion: string, allVersions: string[] ): string | null { + if (lockedVersion && is.undefined(currentValue)) { + return allVersions.pop(); + } // istanbul ignore if if (!is.string(currentValue)) { return null; diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index 6956c3d469072d..7be15465e6992e 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -341,6 +341,31 @@ describe('workers/repository/process/lookup/index', () => { expect(res.updates).toMatchSnapshot(); expect(res.updates[0].updateType).toBe('minor'); }); + it('handles unconstrainedValue values', async () => { + config.lockedVersion = '1.2.1'; + config.rangeStrategy = 'update-lockfile'; + config.depName = 'q'; + config.datasource = datasourceNpmId; + httpMock.scope('https://registry.npmjs.org').get('/q').reply(200, qJson); + const res = await lookup.lookupUpdates(config); + expect(res.updates).toMatchInlineSnapshot(` + Array [ + Object { + "bucket": "major", + "isLockfileUpdate": true, + "isRange": true, + "newMajor": 1, + "newMinor": 4, + "newValue": undefined, + "newVersion": "1.4.1", + "releaseTimestamp": "2015-05-17T04:25:07.299Z", + "updateType": "minor", + }, + ] + `); + expect(res.updates[0].newValue).toBeUndefined(); + expect(res.updates[0].updateType).toBe('minor'); + }); it('widens minor ranged versions if configured', async () => { config.currentValue = '~1.3.0'; config.rangeStrategy = 'widen'; diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index 22041898d1ff1e..12a070500254d8 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -45,6 +45,7 @@ export async function lookupUpdates( isVulnerabilityAlert, updatePinnedDependencies, } = config; + const unconstrainedValue = lockedVersion && is.undefined(currentValue); const res: UpdateResult = { updates: [], warnings: [], @@ -64,7 +65,7 @@ export async function lookupUpdates( return res; } const isValid = currentValue && versioning.isValid(currentValue); - if (isValid) { + if (unconstrainedValue || isValid) { if ( !updatePinnedDependencies && versioning.isSingleVersion(currentValue) @@ -130,8 +131,8 @@ export async function lookupUpdates( ); } // Check that existing constraint can be satisfied - const allSatisfyingVersions = allVersions.filter((v) => - versioning.matches(v.version, currentValue) + const allSatisfyingVersions = allVersions.filter( + (v) => unconstrainedValue || versioning.matches(v.version, currentValue) ); if (rollbackPrs && !allSatisfyingVersions.length) { const rollback = getRollbackUpdate(config, allVersions, versioning); @@ -226,9 +227,10 @@ export async function lookupUpdates( latestVersion, allVersions, versioning - ).filter((v) => - // Leave only compatible versions - versioning.isCompatible(v.version, currentValue) + ).filter( + (v) => + // Leave only compatible versions + unconstrainedValue || versioning.isCompatible(v.version, currentValue) ); if (isVulnerabilityAlert) { filteredReleases = filteredReleases.slice(0, 1); @@ -383,6 +385,7 @@ export async function lookupUpdates( rollbackPrs, isVulnerabilityAlert, updatePinnedDependencies, + unconstrainedValue, err, }, 'lookupUpdates error' From 95fdd833eb4f100bde10bd0e59571a2a1da328af Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Tue, 23 Nov 2021 15:03:12 +0100 Subject: [PATCH 144/248] docs(gitea): add git upload filter description (#12807) Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> --- lib/platform/gitea/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/platform/gitea/index.md b/lib/platform/gitea/index.md index 3a45af107fe621..f79c49a29e3d77 100644 --- a/lib/platform/gitea/index.md +++ b/lib/platform/gitea/index.md @@ -1,5 +1,9 @@ # Gitea +Renovate uses modern Git upload filters to suppress large blob downloads. +For Gitea you need to manually enable upload filters. +Read the official [Gitea docs](https://docs.gitea.io/en-us/clone-filters/) for more information. + ## Unsupported platform features/concepts - **Adding reviewers to PRs not supported**: Gitea versions older than v1.14.0 do not have the required API. From 2f1c8afcf2622d7b9280f05387cd93f352a941b1 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 23 Nov 2021 15:17:49 +0100 Subject: [PATCH 145/248] fix(config): validate matchStrings (#12808) --- lib/config/validation.spec.ts | 17 ++++++++++++----- lib/config/validation.ts | 7 ++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/config/validation.spec.ts b/lib/config/validation.spec.ts index 0bf7c5a9069f81..ea0566e943ac39 100644 --- a/lib/config/validation.spec.ts +++ b/lib/config/validation.spec.ts @@ -308,7 +308,7 @@ describe('config/validation', () => { expect(errors).toMatchInlineSnapshot(` Array [ Object { - "message": "Each Regex Manager must contain a fileMatch array", + "message": "Each Regex Manager must contain a non-empty fileMatch array", "topic": "Configuration Error", }, ] @@ -318,21 +318,28 @@ describe('config/validation', () => { const config = { regexManagers: [ { - fileMatch: [], + fileMatch: ['foo'], matchStrings: [], }, + { + fileMatch: ['foo'], + }, ], }; const { warnings, errors } = await configValidation.validateConfig( - config, + config as RenovateConfig, true ); expect(warnings).toHaveLength(0); - expect(errors).toHaveLength(1); + expect(errors).toHaveLength(2); expect(errors).toMatchInlineSnapshot(` Array [ Object { - "message": "Each Regex Manager must contain a fileMatch array", + "message": "Each Regex Manager must contain a non-empty matchStrings array", + "topic": "Configuration Error", + }, + Object { + "message": "Each Regex Manager must contain a non-empty matchStrings array", "topic": "Configuration Error", }, ] diff --git a/lib/config/validation.ts b/lib/config/validation.ts index 69aaca7ac94771..4c80f07031328e 100644 --- a/lib/config/validation.ts +++ b/lib/config/validation.ts @@ -443,11 +443,16 @@ export async function validateConfig( } } } + } else { + errors.push({ + topic: 'Configuration Error', + message: `Each Regex Manager must contain a non-empty matchStrings array`, + }); } } else { errors.push({ topic: 'Configuration Error', - message: `Each Regex Manager must contain a fileMatch array`, + message: `Each Regex Manager must contain a non-empty fileMatch array`, }); } } From 2d66faa1c2a656540580bbafb73a21d8594d94c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Nov 2021 18:31:57 +0000 Subject: [PATCH 146/248] chore(deps): update github/codeql-action action to v1.0.24 (#12804) Co-authored-by: Renovate Bot --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 94457b1f7e332b..2bf4724246631a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -26,7 +26,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@a627e9fa504113bfa8e90a9b429b157a38b1cdbd # renovate: tag=v1.0.23 + uses: github/codeql-action/init@e095058bfa09de8070f94e98f5dc059531bc6235 # renovate: tag=v1.0.24 with: config-file: ./.github/codeql/codeql-config.yml @@ -36,7 +36,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@a627e9fa504113bfa8e90a9b429b157a38b1cdbd # renovate: tag=v1.0.23 + uses: github/codeql-action/autobuild@e095058bfa09de8070f94e98f5dc059531bc6235 # renovate: tag=v1.0.24 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -50,4 +50,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@a627e9fa504113bfa8e90a9b429b157a38b1cdbd # renovate: tag=v1.0.23 + uses: github/codeql-action/analyze@e095058bfa09de8070f94e98f5dc059531bc6235 # renovate: tag=v1.0.24 From 31b889067e1bedaa31ae85c8ec9a3472df2e2899 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 23 Nov 2021 19:52:01 +0000 Subject: [PATCH 147/248] chore(deps): update dependency @types/parse-link-header to v1.0.1 (#12812) 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 aa5e5ff847a0af..c64bb104837688 100644 --- a/package.json +++ b/package.json @@ -238,7 +238,7 @@ "@types/nock": "10.0.3", "@types/node": "14.17.33", "@types/node-emoji": "1.8.1", - "@types/parse-link-header": "1.0.0", + "@types/parse-link-header": "1.0.1", "@types/registry-auth-token": "4.2.1", "@types/semver": "7.3.9", "@types/semver-stable": "3.0.0", diff --git a/yarn.lock b/yarn.lock index 3920d488a86c0d..e00931dde1fb80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3270,10 +3270,10 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/parse-link-header@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.0.tgz#69f059e40a0fa93dc2e095d4142395ae6adc5d7a" - integrity sha512-fCA3btjE7QFeRLfcD0Sjg+6/CnmC66HpMBoRfRzd2raTaWMJV21CCZ0LO8MOqf8onl5n0EPfjq4zDhbyX8SVwA== +"@types/parse-link-header@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/parse-link-header/-/parse-link-header-1.0.1.tgz#6eade790736a050b9242c7c6b2fceda9b3dc394a" + integrity sha512-E2+Go9rQgPbmpkeA2iFXTWSTxX38KXlXwcdiIbt71Oorqr+G5QtH4AhpuDdxwRVyiTzdUrHnaaIumW/LhiZwVg== "@types/prettier@^2.1.5": version "2.4.2" From 06d8c270433206eecba4f60635f669cd8c5393c1 Mon Sep 17 00:00:00 2001 From: Maksim Date: Tue, 23 Nov 2021 21:10:45 +0100 Subject: [PATCH 148/248] refactor: global config (#12743) Co-authored-by: Michael Kriese --- lib/config/decrypt.spec.ts | 23 +++--- lib/config/decrypt.ts | 4 +- lib/config/global.ts | 78 +++++++++++-------- lib/config/migration.spec.ts | 4 +- lib/config/migration.ts | 4 +- lib/config/presets/npm/index.spec.ts | 4 +- lib/datasource/crate/index.spec.ts | 16 ++-- lib/datasource/crate/index.ts | 4 +- lib/datasource/npm/index.spec.ts | 8 +- lib/datasource/npm/npmrc.spec.ts | 6 +- lib/datasource/npm/npmrc.ts | 4 +- lib/manager/batect/extract.spec.ts | 6 +- lib/manager/bundler/artifacts.spec.ts | 22 +++--- lib/manager/cargo/artifacts.spec.ts | 8 +- lib/manager/cargo/extract.spec.ts | 6 +- lib/manager/cocoapods/artifacts.spec.ts | 16 ++-- lib/manager/cocoapods/extract.spec.ts | 6 +- lib/manager/composer/artifacts.spec.ts | 20 +++-- lib/manager/composer/utils.spec.ts | 12 +-- lib/manager/composer/utils.ts | 6 +- lib/manager/git-submodules/extract.spec.ts | 4 +- lib/manager/git-submodules/extract.ts | 4 +- lib/manager/git-submodules/update.spec.ts | 6 +- lib/manager/git-submodules/update.ts | 4 +- lib/manager/gitlabci/extract.spec.ts | 6 +- lib/manager/gomod/artifacts.spec.ts | 26 +++---- lib/manager/gomod/artifacts.ts | 4 +- .../gradle-wrapper/artifacts-real.spec.ts | 10 +-- lib/manager/gradle-wrapper/artifacts.spec.ts | 8 +- lib/manager/gradle-wrapper/artifacts.ts | 4 +- lib/manager/gradle-wrapper/util.spec.ts | 10 +-- lib/manager/gradle-wrapper/utils.ts | 6 +- .../gradle/deep/gradle-updates-report.spec.ts | 4 +- lib/manager/gradle/deep/index-real.spec.ts | 6 +- lib/manager/gradle/deep/index.spec.ts | 12 +-- lib/manager/gradle/deep/index.ts | 4 +- lib/manager/gradle/deep/utils.ts | 6 +- lib/manager/helmv3/artifacts.spec.ts | 10 +-- lib/manager/jsonnet-bundler/artifacts.spec.ts | 4 +- lib/manager/mix/artifacts.spec.ts | 12 +-- lib/manager/mix/extract.spec.ts | 4 +- lib/manager/npm/extract/index.ts | 4 +- lib/manager/npm/extract/pnpm.spec.ts | 4 +- lib/manager/npm/post-update/index.ts | 8 +- lib/manager/npm/post-update/lerna.spec.ts | 4 +- lib/manager/npm/post-update/lerna.ts | 6 +- lib/manager/npm/post-update/npm.ts | 6 +- lib/manager/npm/post-update/pnpm.ts | 6 +- lib/manager/npm/post-update/yarn.ts | 6 +- lib/manager/nuget/artifacts.spec.ts | 10 +-- lib/manager/nuget/artifacts.ts | 4 +- lib/manager/nuget/extract.spec.ts | 6 +- lib/manager/nuget/extract.ts | 4 +- lib/manager/pip-compile/artifacts.spec.ts | 8 +- .../pip_requirements/artifacts.spec.ts | 4 +- lib/manager/pip_requirements/extract.spec.ts | 8 +- lib/manager/pip_requirements/extract.ts | 4 +- lib/manager/pipenv/artifacts.spec.ts | 12 +-- lib/manager/poetry/artifacts.spec.ts | 8 +- lib/manager/terraform/extract.spec.ts | 4 +- lib/manager/terraform/lockfile/hash.spec.ts | 4 +- lib/manager/terraform/lockfile/index.spec.ts | 4 +- lib/util/cache/repository/index.spec.ts | 4 +- lib/util/cache/repository/index.ts | 4 +- lib/util/exec/docker/index.spec.ts | 8 +- lib/util/exec/docker/index.ts | 6 +- lib/util/exec/env.spec.ts | 4 +- lib/util/exec/env.ts | 4 +- lib/util/exec/index.spec.ts | 16 ++-- lib/util/exec/index.ts | 12 +-- lib/util/fs/index.spec.ts | 12 +-- lib/util/fs/index.ts | 20 ++--- lib/util/git/index.spec.ts | 4 +- lib/util/git/index.ts | 8 +- lib/util/json-writer/editor-config.spec.ts | 4 +- lib/util/json-writer/editor-config.ts | 4 +- lib/util/template/index.ts | 4 +- lib/workers/branch/artifacts.spec.ts | 6 +- lib/workers/branch/artifacts.ts | 4 +- lib/workers/branch/automerge.spec.ts | 6 +- lib/workers/branch/automerge.ts | 4 +- lib/workers/branch/commit.spec.ts | 6 +- lib/workers/branch/commit.ts | 4 +- .../branch/execute-post-upgrade-commands.ts | 8 +- lib/workers/branch/handle-existing.ts | 6 +- lib/workers/branch/index.spec.ts | 26 +++---- lib/workers/branch/index.ts | 8 +- lib/workers/branch/lock-files/index.spec.ts | 6 +- lib/workers/branch/reuse.ts | 4 +- lib/workers/pr/automerge.ts | 6 +- lib/workers/pr/index.ts | 14 ++-- .../repository/dependency-dashboard.spec.ts | 6 +- .../repository/dependency-dashboard.ts | 8 +- lib/workers/repository/error-config.spec.ts | 8 +- lib/workers/repository/error-config.ts | 6 +- lib/workers/repository/finalise/prune.spec.ts | 10 +-- lib/workers/repository/finalise/prune.ts | 8 +- lib/workers/repository/index.spec.ts | 4 +- lib/workers/repository/index.ts | 6 +- lib/workers/repository/init/cache.spec.ts | 4 +- lib/workers/repository/init/index.spec.ts | 6 +- .../onboarding/branch/config.spec.ts | 4 +- .../repository/onboarding/branch/create.ts | 4 +- .../repository/onboarding/branch/index.ts | 4 +- .../onboarding/branch/rebase.spec.ts | 4 +- .../repository/onboarding/branch/rebase.ts | 4 +- .../repository/onboarding/pr/index.spec.ts | 8 +- lib/workers/repository/onboarding/pr/index.ts | 8 +- lib/workers/repository/process/deprecated.ts | 4 +- 109 files changed, 441 insertions(+), 422 deletions(-) diff --git a/lib/config/decrypt.spec.ts b/lib/config/decrypt.spec.ts index 2d6d2151255cc5..3a51e8dcc2b2a9 100644 --- a/lib/config/decrypt.spec.ts +++ b/lib/config/decrypt.spec.ts @@ -1,6 +1,6 @@ import { loadFixture } from '../../test/util'; import { decryptConfig } from './decrypt'; -import { setGlobalConfig } from './global'; +import { GlobalConfig } from './global'; import type { RenovateConfig } from './types'; const privateKey = loadFixture('private.pem', '.'); @@ -12,7 +12,7 @@ describe('config/decrypt', () => { let config: RenovateConfig; beforeEach(() => { config = {}; - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns empty with no privateKey', async () => { delete config.encrypted; @@ -27,19 +27,22 @@ describe('config/decrypt', () => { }); it('handles invalid encrypted type', async () => { config.encrypted = 1; - setGlobalConfig({ privateKey }); + GlobalConfig.set({ privateKey }); const res = await decryptConfig(config, repository); expect(res.encrypted).toBeUndefined(); }); it('handles invalid encrypted value', async () => { config.encrypted = { a: 1 }; - setGlobalConfig({ privateKey, privateKeyOld: 'invalid-key' }); + GlobalConfig.set({ privateKey, privateKeyOld: 'invalid-key' }); await expect(decryptConfig(config, repository)).rejects.toThrow( 'config-validation' ); }); it('replaces npm token placeholder in npmrc', async () => { - setGlobalConfig({ privateKey: 'invalid-key', privateKeyOld: privateKey }); // test old key failover + GlobalConfig.set({ + privateKey: 'invalid-key', + privateKeyOld: privateKey, + }); // test old key failover config.npmrc = '//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n'; config.encrypted = { @@ -54,7 +57,7 @@ describe('config/decrypt', () => { ); }); it('appends npm token in npmrc', async () => { - setGlobalConfig({ privateKey }); + GlobalConfig.set({ privateKey }); config.npmrc = 'foo=bar\n'; config.encrypted = { npmToken: @@ -66,7 +69,7 @@ describe('config/decrypt', () => { expect(res.npmrc).toMatchSnapshot(); }); it('decrypts nested', async () => { - setGlobalConfig({ privateKey }); + GlobalConfig.set({ privateKey }); config.packageFiles = [ { packageFile: 'package.json', @@ -93,7 +96,7 @@ describe('config/decrypt', () => { ); }); it('rejects invalid PGP message', async () => { - setGlobalConfig({ privateKey: privateKeyPgp }); + GlobalConfig.set({ privateKey: privateKeyPgp }); config.encrypted = { token: 'long-but-wrong-wcFMAw+4H7SgaqGOAQ//ZNPgHJ4RQBdfFoDX8Ywe9UxqMlc8k6VasCszQ2JULh/BpEdKdgRUGNaKaeZ+oBKYDBmDwAD5V5FEMlsg+KO2gykp/p2BAwvKGtYK0MtxLh4h9yJbN7TrVnGO3/cC+Inp8exQt0gD6f1Qo/9yQ9NE4/BIbaSs2b2DgeIK7Ed8N675AuSo73UOa6o7t+9pKeAAK5TQwgSvolihbUs8zjnScrLZD+nhvL3y5gpAqK9y//a+bTu6xPA1jdLjsswoCUq/lfVeVsB2GWV2h6eex/0fRKgN7xxNgdMn0a7msrvumhTawP8mPisPY2AAsHRIgQ9vdU5HbOPdGoIwI9n9rMdIRn9Dy7/gcX9Ic+RP2WwS/KnPHLu/CveY4W5bYqYoikWtJs9HsBCyWFiHIRrJF+FnXwtKdoptRfxTfJIkBoLrV6fDIyKo79iL+xxzgrzWs77KEJUJfexZBEGBCnrV2o7mo3SU197S0qx7HNvqrmeCj8CLxq8opXC71TNa+XE6BQUVyhMFxtW9LNxZUHRiNzrTSikArT4hzjyr3f9cb0kZVcs6XJQsm1EskU3WXo7ETD7nsukS9GfbwMn7tfYidB/yHSHl09ih871BcgByDmEKKdmamcNilW2bmTAqB5JmtaYT5/H8jRQWo/VGrEqlmiA4KmwSv7SZPlDnaDFrmzmMZZDSRgHe5KWl283XLmSeE8J0NPqwFH3PeOv4fIbOjJrnbnFBwSAsgsMe2K4OyFDh2COfrho7s8EP1Kl5lBkYJ+VRreGRerdSu24', @@ -133,7 +136,7 @@ describe('config/decrypt', () => { ); }); it('handles PGP org constraint', async () => { - setGlobalConfig({ privateKey: privateKeyPgp }); + GlobalConfig.set({ privateKey: privateKeyPgp }); config.encrypted = { token: 'wcFMAw+4H7SgaqGOAQ/+Lz6RlbEymbnmMhrktuaGiDPWRNPEQFuMRwwYM6/B/r0JMZa9tskAA5RpyYKxGmJJeuRtlA8GkTw02GoZomlJf/KXJZ95FwSbkXMSRJRD8LJ2402Hw2TaOTaSvfamESnm8zhNo8cok627nkKQkyrpk64heVlU5LIbO2+UgYgbiSQjuXZiW+QuJ1hVRjx011FQgEYc59+22yuKYqd8rrni7TrVqhGRlHCAqvNAGjBI4H7uTFh0sP4auunT/JjxTeTkJoNu8KgS/LdrvISpO67TkQziZo9XD5FOzSN7N3e4f8vO4N4fpjgkIDH/9wyEYe0zYz34xMAFlnhZzqrHycRqzBJuMxGqlFQcKWp9IisLMoVJhLrnvbDLuwwcjeqYkhvODjSs7UDKwTE4X4WmvZr0x4kOclOeAAz/pM6oNVnjgWJd9SnYtoa67bZVkne0k6mYjVhosie8v8icijmJ4OyLZUGWnjZCRd/TPkzQUw+B0yvsop9FYGidhCI+4MVx6W5w7SRtCctxVfCjLpmU4kWaBUUJ5YIQ5xm55yxEYuAsQkxOAYDCMFlV8ntWStYwIG1FsBgJX6VPevXuPPMjWiPNedIpJwBH2PLB4blxMfzDYuCeaIqU4daDaEWxxpuFTTK9fLdJKuipwFG6rwE3OuijeSN+2SLszi834DXtUjQdikHSTQG392+oTmZCFPeffLk/OiV2VpdXF3gGL7sr5M9hOWIZ783q0vW1l6nAElZ7UA//kW+L6QRxbnBVTJK5eCmMY6RJmL76zjqC1jQ0FC10', @@ -146,7 +149,7 @@ describe('config/decrypt', () => { ); }); it('handles PGP org/repo constraint', async () => { - setGlobalConfig({ privateKey: privateKeyPgp }); + GlobalConfig.set({ privateKey: privateKeyPgp }); config.encrypted = { token: 'wcFMAw+4H7SgaqGOAQ//Wp7N0PaDZp0uOdwsc1CuqAq0UPcq+IQdHyKpJs3tHiCecXBHogy4P+rY9nGaUrVneCr4HexuKGuyJf1yl0ZqFffAUac5PjF8eDvjukQGOUq4aBlOogJCEefnuuVxVJx+NRR5iF1P6v57bmI1c+zoqZI/EQB30KU6O1BsdGPLUA/+R3dwCZd5Mbd36s34eYBasqcY9/QbqFcpElXMEPMse3kMCsVXPbZ+UMjtPJiBPUmtJq+ifnu1LzDrfshusSQMwgd/QNk7nEsijiYKllkWhHTP6g7zigvJ46x0h6AYS108YiuK3B9XUhXN9m05Ac6KTEEUdRI3E/dK2dQuRkLjXC8wceQm4A19Gm0uHoMIJYOCbiVoBCH6ayvKbZWZV5lZ4D1JbDNGmKeIj6OX9XWEMKiwTx0Xe89V7BdJzwIGrL0TCLtXuYWZ/R2k+UuBqtgzr44BsBqMpKUA0pcGBoqsEou1M05Ae9fJMF6ADezF5UQZPxT1hrMldiTp3p9iHGfWN2tKHeoW/8CqlIqg9JEkTc+Pl/L9E6ndy5Zjf097PvcmSGhxUQBE7XlrZoIlGhiEU/1HPMen0UUIs0LUu1ywpjCex2yTWnU2YmEwy0MQI1sekSr96QFxDDz9JcynYOYbqR/X9pdxEWyzQ+NJ3n6K97nE1Dj9Sgwu7mFGiUdNkf/SUAF0eZi/eXg71qumpMGBd4eWPtgkeMPLHjvMSYw9vBUfcoKFz6RJ4woG0dw5HOFkPnIjXKWllnl/o01EoBp/o8uswsIS9Nb8i+bp27U6tAHE', diff --git a/lib/config/decrypt.ts b/lib/config/decrypt.ts index 547f7b47e7b400..3d06a171f28a8a 100644 --- a/lib/config/decrypt.ts +++ b/lib/config/decrypt.ts @@ -5,7 +5,7 @@ import { logger } from '../logger'; import { maskToken } from '../util/mask'; import { regEx } from '../util/regex'; import { add } from '../util/sanitize'; -import { getGlobalConfig } from './global'; +import { GlobalConfig } from './global'; import type { RenovateConfig } from './types'; export async function tryDecryptPgp( @@ -155,7 +155,7 @@ export async function decryptConfig( ): Promise { logger.trace({ config }, 'decryptConfig()'); const decryptedConfig = { ...config }; - const { privateKey, privateKeyOld } = getGlobalConfig(); + const { privateKey, privateKeyOld } = GlobalConfig.get(); for (const [key, val] of Object.entries(config)) { if (key === 'encrypted' && is.object(val)) { logger.debug({ config: val }, 'Found encrypted config'); diff --git a/lib/config/global.ts b/lib/config/global.ts index 0aefa514bdf309..313bc2ff4bb32c 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -1,40 +1,52 @@ import type { RenovateConfig, RepoGlobalConfig } from './types'; -let repoGlobalConfig: RepoGlobalConfig = {}; +export class GlobalConfig { + // TODO: once global config work is complete, add a test to make sure this list includes all options with globalOnly=true (#9603) + private static readonly OPTIONS = [ + 'allowCustomCrateRegistries', + 'allowedPostUpgradeCommands', + 'allowPlugins', + 'allowPostUpgradeCommandTemplating', + 'allowScripts', + 'binarySource', + 'cacheDir', + 'customEnvVariables', + 'dockerChildPrefix', + 'dockerImagePrefix', + 'dockerUser', + 'dryRun', + 'exposeAllEnv', + 'localDir', + 'migratePresets', + 'privateKey', + 'privateKeyOld', + ]; -// TODO: once global config work is complete, add a test to make sure this list includes all options with globalOnly=true (#9603) -const repoGlobalOptions = [ - 'allowCustomCrateRegistries', - 'allowPlugins', - 'allowPostUpgradeCommandTemplating', - 'allowScripts', - 'allowedPostUpgradeCommands', - 'binarySource', - 'customEnvVariables', - 'dockerChildPrefix', - 'dockerImagePrefix', - 'dockerUser', - 'dryRun', - 'exposeAllEnv', - 'migratePresets', - 'privateKey', - 'privateKeyOld', - 'localDir', - 'cacheDir', -]; + private static config: RepoGlobalConfig = {}; -export function setGlobalConfig( - config: RenovateConfig | RepoGlobalConfig = {} -): RenovateConfig { - repoGlobalConfig = {}; - const result = { ...config }; - for (const option of repoGlobalOptions) { - repoGlobalConfig[option] = config[option]; - delete result[option]; + static get(): RepoGlobalConfig; + static get( + key?: Key + ): RepoGlobalConfig[Key]; + static get( + key?: Key + ): RepoGlobalConfig | RepoGlobalConfig[Key] { + return key ? GlobalConfig.config[key] : GlobalConfig.config; } - return result; -} -export function getGlobalConfig(): RepoGlobalConfig { - return repoGlobalConfig; + static set(config: RenovateConfig | RepoGlobalConfig): RenovateConfig { + GlobalConfig.reset(); + + const result = { ...config }; + for (const option of GlobalConfig.OPTIONS) { + GlobalConfig.config[option] = config[option]; + delete result[option]; + } + + return result; + } + + static reset(): void { + GlobalConfig.config = {}; + } } diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts index 9f2b54634d494a..8f4a4202ac53d7 100644 --- a/lib/config/migration.spec.ts +++ b/lib/config/migration.spec.ts @@ -1,6 +1,6 @@ import { PlatformId } from '../constants'; import { getConfig } from './defaults'; -import { setGlobalConfig } from './global'; +import { GlobalConfig } from './global'; import * as configMigration from './migration'; import type { MigratedConfig, @@ -703,7 +703,7 @@ describe('config/migration', () => { }); }); it('it migrates presets', () => { - setGlobalConfig({ + GlobalConfig.set({ migratePresets: { '@org': 'local>org/renovate-config', '@org2/foo': '', diff --git a/lib/config/migration.ts b/lib/config/migration.ts index 2d7fd47f075007..4219e35676bc47 100644 --- a/lib/config/migration.ts +++ b/lib/config/migration.ts @@ -4,7 +4,7 @@ import { dequal } from 'dequal'; import { logger } from '../logger'; import { clone } from '../util/clone'; import { regEx } from '../util/regex'; -import { getGlobalConfig } from './global'; +import { GlobalConfig } from './global'; import { MigrationsService } from './migrations'; import { getOptions } from './options'; import { removedPresets } from './presets/common'; @@ -42,7 +42,7 @@ export function migrateConfig( 'optionalDependencies', 'peerDependencies', ]; - const { migratePresets } = getGlobalConfig(); + const { migratePresets } = GlobalConfig.get(); for (const [key, val] of Object.entries(config)) { if (key === 'pathRules') { if (is.array(val)) { diff --git a/lib/config/presets/npm/index.spec.ts b/lib/config/presets/npm/index.spec.ts index 9ec951dd424a62..3c55df68bb7122 100644 --- a/lib/config/presets/npm/index.spec.ts +++ b/lib/config/presets/npm/index.spec.ts @@ -1,5 +1,5 @@ import * as httpMock from '../../../../test/http-mock'; -import { setGlobalConfig } from '../../global'; +import { GlobalConfig } from '../../global'; import * as npm from '.'; jest.mock('registry-auth-token'); @@ -8,7 +8,7 @@ jest.mock('delay'); describe('config/presets/npm/index', () => { beforeEach(() => { jest.resetAllMocks(); - setGlobalConfig(); + GlobalConfig.reset(); }); afterEach(() => { delete process.env.RENOVATE_CACHE_NPM_MINUTES; diff --git a/lib/datasource/crate/index.spec.ts b/lib/datasource/crate/index.spec.ts index 1e6a0f9b599a1a..37fbfdde9518e8 100644 --- a/lib/datasource/crate/index.spec.ts +++ b/lib/datasource/crate/index.spec.ts @@ -6,7 +6,7 @@ import { dirname, join } from 'upath'; import { getPkgReleases } from '..'; import * as httpMock from '../../../test/http-mock'; import { loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as memCache from '../../util/cache/memory'; import { RegistryFlavor, RegistryInfo } from './types'; @@ -102,7 +102,7 @@ describe('datasource/crate/index', () => { localDir: join(tmpDir.path, 'local'), cacheDir: join(tmpDir.path, 'cache'), }; - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); simpleGit.mockReset(); memCache.init(); @@ -111,7 +111,7 @@ describe('datasource/crate/index', () => { afterEach(async () => { await tmpDir.cleanup(); tmpDir = null; - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null for missing registry url', async () => { @@ -247,7 +247,7 @@ describe('datasource/crate/index', () => { }); it('clones cloudsmith private registry', async () => { const { mockClone } = setupGitMocks(); - setGlobalConfig({ ...adminConfig, allowCustomCrateRegistries: true }); + GlobalConfig.set({ ...adminConfig, allowCustomCrateRegistries: true }); const url = 'https://dl.cloudsmith.io/basic/myorg/myrepo/cargo/index.git'; const res = await getPkgReleases({ datasource, @@ -261,7 +261,7 @@ describe('datasource/crate/index', () => { }); it('clones other private registry', async () => { const { mockClone } = setupGitMocks(); - setGlobalConfig({ ...adminConfig, allowCustomCrateRegistries: true }); + GlobalConfig.set({ ...adminConfig, allowCustomCrateRegistries: true }); const url = 'https://github.com/mcorbin/testregistry'; const res = await getPkgReleases({ datasource, @@ -275,7 +275,7 @@ describe('datasource/crate/index', () => { }); it('clones once then reuses the cache', async () => { const { mockClone } = setupGitMocks(); - setGlobalConfig({ ...adminConfig, allowCustomCrateRegistries: true }); + GlobalConfig.set({ ...adminConfig, allowCustomCrateRegistries: true }); const url = 'https://github.com/mcorbin/othertestregistry'; await getPkgReleases({ datasource, @@ -291,7 +291,7 @@ describe('datasource/crate/index', () => { }); it('guards against race conditions while cloning', async () => { const { mockClone } = setupGitMocks(250); - setGlobalConfig({ ...adminConfig, allowCustomCrateRegistries: true }); + GlobalConfig.set({ ...adminConfig, allowCustomCrateRegistries: true }); const url = 'https://github.com/mcorbin/othertestregistry'; await Promise.all([ @@ -317,7 +317,7 @@ describe('datasource/crate/index', () => { }); it('returns null when git clone fails', async () => { setupErrorGitMock(); - setGlobalConfig({ ...adminConfig, allowCustomCrateRegistries: true }); + GlobalConfig.set({ ...adminConfig, allowCustomCrateRegistries: true }); const url = 'https://github.com/mcorbin/othertestregistry'; const result = await getPkgReleases({ diff --git a/lib/datasource/crate/index.ts b/lib/datasource/crate/index.ts index ef92d12700b253..b7c69137b9b282 100644 --- a/lib/datasource/crate/index.ts +++ b/lib/datasource/crate/index.ts @@ -1,7 +1,7 @@ import hasha from 'hasha'; import Git from 'simple-git'; import { join } from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import * as memCache from '../../util/cache/memory'; import { cache } from '../../util/cache/package/decorator'; @@ -186,7 +186,7 @@ export class CrateDatasource extends Datasource { }; if (flavor !== RegistryFlavor.CratesIo) { - if (!getGlobalConfig().allowCustomCrateRegistries) { + if (!GlobalConfig.get('allowCustomCrateRegistries')) { logger.warn( 'crate datasource: allowCustomCrateRegistries=true is required for registries other than crates.io, bailing out' ); diff --git a/lib/datasource/npm/index.spec.ts b/lib/datasource/npm/index.spec.ts index 21d15880aaba9b..ed891df75ad0b6 100644 --- a/lib/datasource/npm/index.spec.ts +++ b/lib/datasource/npm/index.spec.ts @@ -2,7 +2,7 @@ import mockDate from 'mockdate'; import _registryAuthToken from 'registry-auth-token'; import { getPkgReleases } from '..'; import * as httpMock from '../../../test/http-mock'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { EXTERNAL_HOST_ERROR } from '../../constants/error-messages'; import * as hostRules from '../../util/host-rules'; import { id as datasource, getNpmrc, resetCache, setNpmrc } from '.'; @@ -17,7 +17,7 @@ let npmResponse: any; describe('datasource/npm/index', () => { beforeEach(() => { jest.resetAllMocks(); - setGlobalConfig(); + GlobalConfig.reset(); hostRules.clear(); resetCache(); setNpmrc(); @@ -357,7 +357,7 @@ describe('datasource/npm/index', () => { .reply(200, npmResponse); process.env.REGISTRY = 'https://registry.from-env.com'; process.env.RENOVATE_CACHE_NPM_MINUTES = '15'; - setGlobalConfig({ exposeAllEnv: true }); + GlobalConfig.set({ exposeAllEnv: true }); const npmrc = 'registry=${REGISTRY}'; const res = await getPkgReleases({ datasource, depName: 'foobar', npmrc }); @@ -366,7 +366,7 @@ describe('datasource/npm/index', () => { }); it('should throw error if necessary env var is not present', () => { - setGlobalConfig({ exposeAllEnv: true }); + GlobalConfig.set({ exposeAllEnv: true }); expect(() => setNpmrc('registry=${REGISTRY_MISSING}')).toThrow( Error('env-replace') diff --git a/lib/datasource/npm/npmrc.spec.ts b/lib/datasource/npm/npmrc.spec.ts index 1bd3e86e84c59b..07a6a7faa17ad1 100644 --- a/lib/datasource/npm/npmrc.spec.ts +++ b/lib/datasource/npm/npmrc.spec.ts @@ -1,5 +1,5 @@ import { mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import * as _sanitize from '../../util/sanitize'; import { getNpmrc, setNpmrc } from './npmrc'; @@ -10,7 +10,7 @@ const sanitize = mocked(_sanitize); describe('datasource/npm/npmrc', () => { beforeEach(() => { setNpmrc(''); - setGlobalConfig(); + GlobalConfig.reset(); jest.resetAllMocks(); }); @@ -37,7 +37,7 @@ describe('datasource/npm/npmrc', () => { }); it('sanitize _authtoken with high trust', () => { - setGlobalConfig({ exposeAllEnv: true }); + GlobalConfig.set({ exposeAllEnv: true }); process.env.TEST_TOKEN = 'test'; setNpmrc( '//registry.test.com:_authToken=${TEST_TOKEN}\n_authToken=\nregistry=http://localhost' diff --git a/lib/datasource/npm/npmrc.ts b/lib/datasource/npm/npmrc.ts index 7ca1d605814b5a..8a927ef6365381 100644 --- a/lib/datasource/npm/npmrc.ts +++ b/lib/datasource/npm/npmrc.ts @@ -3,7 +3,7 @@ import is from '@sindresorhus/is'; import ini from 'ini'; import registryAuthToken from 'registry-auth-token'; import getRegistryUrl from 'registry-auth-token/registry-url'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import type { OutgoingHttpHeaders } from '../../util/http/types'; import { maskToken } from '../../util/mask'; @@ -61,7 +61,7 @@ export function setNpmrc(input?: string): void { npmrcRaw = input; logger.debug('Setting npmrc'); npmrc = ini.parse(input.replace(regEx(/\\n/g), '\n')); - const { exposeAllEnv } = getGlobalConfig(); + const { exposeAllEnv } = GlobalConfig.get(); for (const [key, val] of Object.entries(npmrc)) { if (!exposeAllEnv) { sanitize(key, val); diff --git a/lib/manager/batect/extract.spec.ts b/lib/manager/batect/extract.spec.ts index 8b76e27da3ae99..dcda4ee57289b8 100644 --- a/lib/manager/batect/extract.spec.ts +++ b/lib/manager/batect/extract.spec.ts @@ -1,4 +1,4 @@ -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { GitTagsDatasource } from '../../datasource/git-tags'; import { id as dockerVersioning } from '../../versioning/docker'; @@ -35,11 +35,11 @@ const config: ExtractConfig = {}; describe('manager/batect/extract', () => { describe('extractPackageFile()', () => { beforeEach(() => { - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns empty array for empty configuration file', async () => { diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts index a13202422dec75..deca0c00d3e518 100644 --- a/lib/manager/bundler/artifacts.spec.ts +++ b/lib/manager/bundler/artifacts.spec.ts @@ -2,7 +2,7 @@ import { exec as _exec } from 'child_process'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { fs, git, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as _datasource from '../../datasource'; import * as docker from '../../util/exec/docker'; @@ -52,11 +52,11 @@ describe('manager/bundler/artifacts', () => { bundlerHostRules.findAllAuthenticatable.mockReturnValue([]); docker.resetPrefetchedImages(); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); fs.ensureCacheDir.mockResolvedValue('/tmp/cache/others/gem'); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null by default', async () => { expect( @@ -106,7 +106,7 @@ describe('manager/bundler/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('works explicit global binarySource', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'global' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'global' }); fs.readLocalFile.mockResolvedValueOnce('Current Gemfile.lock'); fs.writeLocalFile.mockResolvedValueOnce(null as never); fs.readLocalFile.mockResolvedValueOnce(null); @@ -127,7 +127,7 @@ describe('manager/bundler/artifacts', () => { }); describe('Docker', () => { beforeEach(() => { - setGlobalConfig({ + GlobalConfig.set({ ...adminConfig, binarySource: 'docker', }); @@ -159,7 +159,7 @@ describe('manager/bundler/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('constraints options', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Current Gemfile.lock'); fs.writeLocalFile.mockResolvedValueOnce(null as never); datasource.getPkgReleases.mockResolvedValueOnce({ @@ -191,7 +191,7 @@ describe('manager/bundler/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('invalid constraints options', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Current Gemfile.lock'); fs.writeLocalFile.mockResolvedValueOnce(null as never); datasource.getPkgReleases.mockResolvedValueOnce({ @@ -224,7 +224,7 @@ describe('manager/bundler/artifacts', () => { }); it('injects bundler host configuration environment variables', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Current Gemfile.lock'); fs.writeLocalFile.mockResolvedValueOnce(null as never); fs.readLocalFile.mockResolvedValueOnce('1.2.0'); @@ -264,7 +264,7 @@ describe('manager/bundler/artifacts', () => { }); it('injects bundler host configuration as command with bundler < 2', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Current Gemfile.lock'); fs.writeLocalFile.mockResolvedValueOnce(null as never); fs.readLocalFile.mockResolvedValueOnce('1.2.0'); @@ -309,7 +309,7 @@ describe('manager/bundler/artifacts', () => { }); it('injects bundler host configuration as command with bundler >= 2', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Current Gemfile.lock'); fs.writeLocalFile.mockResolvedValueOnce(null as never); fs.readLocalFile.mockResolvedValueOnce('1.2.0'); @@ -354,7 +354,7 @@ describe('manager/bundler/artifacts', () => { }); it('injects bundler host configuration as command with bundler == latest', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Current Gemfile.lock'); fs.writeLocalFile.mockResolvedValueOnce(null as never); fs.readLocalFile.mockResolvedValueOnce('1.2.0'); diff --git a/lib/manager/cargo/artifacts.spec.ts b/lib/manager/cargo/artifacts.spec.ts index b3ee807645ec01..aa867d7a872957 100644 --- a/lib/manager/cargo/artifacts.spec.ts +++ b/lib/manager/cargo/artifacts.spec.ts @@ -3,7 +3,7 @@ import _fs from 'fs-extra'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { git, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; @@ -33,11 +33,11 @@ describe('manager/cargo/artifacts', () => { jest.resetModules(); env.getChildProcessEnv.mockReturnValue(envMock.basic); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null if no Cargo.lock found', async () => { fs.stat.mockRejectedValue(new Error('not found!')); @@ -171,7 +171,7 @@ describe('manager/cargo/artifacts', () => { it('returns updated Cargo.lock with docker', async () => { fs.stat.mockResolvedValueOnce({ name: 'Cargo.lock' } as any); - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); git.getFile.mockResolvedValueOnce('Old Cargo.lock'); const execSnapshots = mockExecAll(exec); fs.readFile.mockResolvedValueOnce('New Cargo.lock' as any); diff --git a/lib/manager/cargo/extract.spec.ts b/lib/manager/cargo/extract.spec.ts index d8c33612858f8b..9fa7553744585b 100644 --- a/lib/manager/cargo/extract.spec.ts +++ b/lib/manager/cargo/extract.spec.ts @@ -1,7 +1,7 @@ import { DirectoryResult, dir } from 'tmp-promise'; import { join } from 'upath'; import { loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { writeLocalFile } from '../../util/fs'; import type { ExtractConfig } from '../types'; @@ -29,11 +29,11 @@ describe('manager/cargo/extract', () => { cacheDir: join(tmpDir.path, 'cache'), }; - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterEach(async () => { await tmpDir.cleanup(); - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null for invalid toml', async () => { expect( diff --git a/lib/manager/cocoapods/artifacts.spec.ts b/lib/manager/cocoapods/artifacts.spec.ts index 06bd91f6af1026..f36e1c8fda2343 100644 --- a/lib/manager/cocoapods/artifacts.spec.ts +++ b/lib/manager/cocoapods/artifacts.spec.ts @@ -3,7 +3,7 @@ import _fs from 'fs-extra'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { git, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as _datasource from '../../datasource'; import * as _env from '../../util/exec/env'; @@ -37,7 +37,7 @@ describe('manager/cocoapods/artifacts', () => { jest.resetAllMocks(); env.getChildProcessEnv.mockReturnValue(envMock.basic); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); datasource.getPkgReleases.mockResolvedValue({ releases: [ @@ -51,7 +51,7 @@ describe('manager/cocoapods/artifacts', () => { }); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null if no Podfile.lock found', async () => { const execSnapshots = mockExecAll(exec); @@ -79,7 +79,7 @@ describe('manager/cocoapods/artifacts', () => { }); it('returns null for invalid local directory', async () => { const execSnapshots = mockExecAll(exec); - setGlobalConfig({ + GlobalConfig.set({ localDir: '', }); @@ -124,7 +124,7 @@ describe('manager/cocoapods/artifacts', () => { }); it('returns updated Podfile', async () => { const execSnapshots = mockExecAll(exec); - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('Old Podfile' as any); git.getRepoStatus.mockResolvedValueOnce({ modified: ['Podfile.lock'], @@ -142,7 +142,7 @@ describe('manager/cocoapods/artifacts', () => { }); it('returns updated Podfile and Pods files', async () => { const execSnapshots = mockExecAll(exec); - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('Old Manifest.lock' as any); fs.readFile.mockResolvedValueOnce('New Podfile' as any); fs.readFile.mockResolvedValueOnce('Pods manifest' as any); @@ -204,7 +204,7 @@ describe('manager/cocoapods/artifacts', () => { it('dynamically selects Docker image tag', async () => { const execSnapshots = mockExecAll(exec); - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('COCOAPODS: 1.2.4' as any); @@ -229,7 +229,7 @@ describe('manager/cocoapods/artifacts', () => { it('falls back to the `latest` Docker image tag', async () => { const execSnapshots = mockExecAll(exec); - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('COCOAPODS: 1.2.4' as any); datasource.getPkgReleases.mockResolvedValueOnce({ diff --git a/lib/manager/cocoapods/extract.spec.ts b/lib/manager/cocoapods/extract.spec.ts index 3ff03c63673dac..b0e1a311d2ebf4 100644 --- a/lib/manager/cocoapods/extract.spec.ts +++ b/lib/manager/cocoapods/extract.spec.ts @@ -1,5 +1,5 @@ import { loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { extractPackageFile } from '.'; @@ -11,7 +11,7 @@ const adminConfig: RepoGlobalConfig = { localDir: '' }; describe('manager/cocoapods/extract', () => { describe('extractPackageFile()', () => { it('extracts from simple file', async () => { - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); const { deps } = await extractPackageFile(simplePodfile, 'Podfile'); expect(deps).toMatchSnapshot([ { depName: 'a' }, @@ -40,7 +40,7 @@ describe('manager/cocoapods/extract', () => { }); it('extracts from complex file', async () => { - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); const { deps } = await extractPackageFile(complexPodfile, 'Podfile'); expect(deps).toMatchSnapshot([ { depName: 'IQKeyboardManager', currentValue: '~> 6.5.0' }, diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts index a0cdc01deb3215..3373630d4bd32c 100644 --- a/lib/manager/composer/artifacts.spec.ts +++ b/lib/manager/composer/artifacts.spec.ts @@ -1,7 +1,7 @@ import { join } from 'upath'; import { envMock, exec, mockExecAll } from '../../../test/exec-util'; import { env, fs, git, mocked, partial } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { PlatformId } from '../../constants'; import * as _datasource from '../../datasource'; @@ -46,7 +46,7 @@ describe('manager/composer/artifacts', () => { env.getChildProcessEnv.mockReturnValue(envMock.basic); docker.resetPrefetchedImages(); hostRules.clear(); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); fs.ensureCacheDir.mockResolvedValue('/tmp/renovate/cache/others/composer'); datasource.getPkgReleases.mockResolvedValueOnce({ releases: [ @@ -62,7 +62,7 @@ describe('manager/composer/artifacts', () => { }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns if no composer.lock found', async () => { @@ -81,7 +81,11 @@ describe('manager/composer/artifacts', () => { const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{}'); git.getRepoStatus.mockResolvedValueOnce(repoStatus); - setGlobalConfig({ ...adminConfig, allowScripts: true, allowPlugins: true }); + GlobalConfig.set({ + ...adminConfig, + allowScripts: true, + allowPlugins: true, + }); expect( await composer.updateArtifacts({ packageFileName: 'composer.json', @@ -220,7 +224,7 @@ describe('manager/composer/artifacts', () => { }); it('supports docker mode', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); @@ -255,7 +259,7 @@ describe('manager/composer/artifacts', () => { }); it('supports global mode', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'global' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'global' }); fs.readLocalFile.mockResolvedValueOnce('{}'); const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{ }'); @@ -422,7 +426,7 @@ describe('manager/composer/artifacts', () => { const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{}'); git.getRepoStatus.mockResolvedValueOnce(repoStatus); - setGlobalConfig({ ...adminConfig, allowPlugins: true }); + GlobalConfig.set({ ...adminConfig, allowPlugins: true }); expect( await composer.updateArtifacts({ packageFileName: 'composer.json', @@ -439,7 +443,7 @@ describe('manager/composer/artifacts', () => { const execSnapshots = mockExecAll(exec); fs.readLocalFile.mockResolvedValueOnce('{}'); git.getRepoStatus.mockResolvedValueOnce(repoStatus); - setGlobalConfig({ ...adminConfig, allowPlugins: true }); + GlobalConfig.set({ ...adminConfig, allowPlugins: true }); expect( await composer.updateArtifacts({ packageFileName: 'composer.json', diff --git a/lib/manager/composer/utils.spec.ts b/lib/manager/composer/utils.spec.ts index 7213bf1333bd5f..5553063184f3f3 100644 --- a/lib/manager/composer/utils.spec.ts +++ b/lib/manager/composer/utils.spec.ts @@ -1,4 +1,4 @@ -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { extractContraints, getComposerArguments, @@ -46,7 +46,7 @@ describe('manager/composer/utils', () => { describe('getComposerArguments', () => { afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('disables scripts and plugins by default', () => { @@ -82,7 +82,7 @@ describe('manager/composer/utils', () => { ); }); it('allows scripts when configured', () => { - setGlobalConfig({ + GlobalConfig.set({ allowScripts: true, }); expect(getComposerArguments({})).toBe( @@ -90,7 +90,7 @@ describe('manager/composer/utils', () => { ); }); it('disables scripts when configured locally', () => { - setGlobalConfig({ + GlobalConfig.set({ allowScripts: true, }); expect( @@ -102,7 +102,7 @@ describe('manager/composer/utils', () => { ); }); it('allows plugins when configured', () => { - setGlobalConfig({ + GlobalConfig.set({ allowPlugins: true, }); expect(getComposerArguments({})).toBe( @@ -110,7 +110,7 @@ describe('manager/composer/utils', () => { ); }); it('disables plugins when configured locally', () => { - setGlobalConfig({ + GlobalConfig.set({ allowPlugins: true, }); expect( diff --git a/lib/manager/composer/utils.ts b/lib/manager/composer/utils.ts index d88609f129b046..5b6b3a2c00292d 100644 --- a/lib/manager/composer/utils.ts +++ b/lib/manager/composer/utils.ts @@ -1,5 +1,5 @@ import { quote } from 'shlex'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { api, id as composerVersioningId } from '../../versioning/composer'; import type { UpdateArtifactsConfig } from '../types'; @@ -23,11 +23,11 @@ export function getComposerArguments(config: UpdateArtifactsConfig): string { } args += ' --no-ansi --no-interaction'; - if (!getGlobalConfig().allowScripts || config.ignoreScripts) { + if (!GlobalConfig.get('allowScripts') || config.ignoreScripts) { args += ' --no-scripts --no-autoloader'; } - if (!getGlobalConfig().allowPlugins || config.ignorePlugins) { + if (!GlobalConfig.get('allowPlugins') || config.ignorePlugins) { args += ' --no-plugins'; } diff --git a/lib/manager/git-submodules/extract.spec.ts b/lib/manager/git-submodules/extract.spec.ts index 1b5ba0982896d6..9fe186ed5ee2f1 100644 --- a/lib/manager/git-submodules/extract.spec.ts +++ b/lib/manager/git-submodules/extract.spec.ts @@ -1,7 +1,7 @@ import { mock } from 'jest-mock-extended'; import _simpleGit, { Response, SimpleGit } from 'simple-git'; import { partial } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import * as hostRules from '../../util/host-rules'; import type { PackageFile } from '../types'; import extractPackageFile from './extract'; @@ -44,7 +44,7 @@ describe('manager/git-submodules/extract', () => { }); describe('extractPackageFile()', () => { it('extracts submodules', async () => { - setGlobalConfig({ localDir: `${__dirname}/__fixtures__` }); + GlobalConfig.set({ localDir: `${__dirname}/__fixtures__` }); hostRules.add({ matchHost: 'github.com', token: '123test' }); let res: PackageFile; expect(await extractPackageFile('', '.gitmodules.1', {})).toBeNull(); diff --git a/lib/manager/git-submodules/extract.ts b/lib/manager/git-submodules/extract.ts index 0017b70e8d6fc3..f67c0b46a7def9 100644 --- a/lib/manager/git-submodules/extract.ts +++ b/lib/manager/git-submodules/extract.ts @@ -1,7 +1,7 @@ import URL from 'url'; import Git, { SimpleGit } from 'simple-git'; import upath from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { GitRefsDatasource } from '../../datasource/git-refs'; import { logger } from '../../logger'; import { simpleGitConfig } from '../../util/git/config'; @@ -90,7 +90,7 @@ export default async function extractPackageFile( fileName: string, config: ExtractConfig ): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const git = Git(localDir); const gitModulesPath = upath.join(localDir, fileName); diff --git a/lib/manager/git-submodules/update.spec.ts b/lib/manager/git-submodules/update.spec.ts index 358f06671370c7..0e95061ea081d0 100644 --- a/lib/manager/git-submodules/update.spec.ts +++ b/lib/manager/git-submodules/update.spec.ts @@ -1,7 +1,7 @@ import _simpleGit from 'simple-git'; import { DirectoryResult, dir } from 'tmp-promise'; import { join } from 'upath'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import type { Upgrade } from '../types'; import updateDependency from './update'; @@ -19,11 +19,11 @@ describe('manager/git-submodules/update', () => { tmpDir = await dir({ unsafeCleanup: true }); adminConfig = { localDir: join(tmpDir.path) }; - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterAll(async () => { await tmpDir.cleanup(); - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null on error', async () => { simpleGit.mockReturnValue({ diff --git a/lib/manager/git-submodules/update.ts b/lib/manager/git-submodules/update.ts index 314fa05aebbc93..ee4c432e577bf2 100644 --- a/lib/manager/git-submodules/update.ts +++ b/lib/manager/git-submodules/update.ts @@ -1,6 +1,6 @@ import Git from 'simple-git'; import upath from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import type { UpdateDependencyConfig } from '../types'; @@ -8,7 +8,7 @@ export default async function updateDependency({ fileContent, upgrade, }: UpdateDependencyConfig): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const git = Git(localDir); const submoduleGit = Git(upath.join(localDir, upgrade.depName)); diff --git a/lib/manager/gitlabci/extract.spec.ts b/lib/manager/gitlabci/extract.spec.ts index 04c6ec92254344..ca18521d5c0a71 100644 --- a/lib/manager/gitlabci/extract.spec.ts +++ b/lib/manager/gitlabci/extract.spec.ts @@ -1,5 +1,5 @@ import { logger } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import type { ExtractConfig, PackageDependency } from '../types'; import { extractAllPackageFiles } from './extract'; @@ -10,11 +10,11 @@ const adminConfig: RepoGlobalConfig = { localDir: '' }; describe('manager/gitlabci/extract', () => { beforeEach(() => { - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); describe('extractAllPackageFiles()', () => { diff --git a/lib/manager/gomod/artifacts.spec.ts b/lib/manager/gomod/artifacts.spec.ts index 482842efc805ec..81520b3ac768a4 100644 --- a/lib/manager/gomod/artifacts.spec.ts +++ b/lib/manager/gomod/artifacts.spec.ts @@ -3,7 +3,7 @@ import _fs from 'fs-extra'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { git, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; @@ -61,11 +61,11 @@ describe('manager/gomod/artifacts', () => { delete process.env.GOPATH; env.getChildProcessEnv.mockReturnValue({ ...envMock.basic, ...goEnv }); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns if no go.sum found', async () => { const execSnapshots = mockExecAll(exec); @@ -151,7 +151,7 @@ describe('manager/gomod/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('supports docker mode without credentials', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('Current go.sum' as any); fs.readFile.mockResolvedValueOnce(null as any); // vendor modules filename const execSnapshots = mockExecAll(exec); @@ -170,7 +170,7 @@ describe('manager/gomod/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('supports global mode', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'global' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'global' }); fs.readFile.mockResolvedValueOnce('Current go.sum' as any); fs.readFile.mockResolvedValueOnce(null as any); // vendor modules filename const execSnapshots = mockExecAll(exec); @@ -189,7 +189,7 @@ describe('manager/gomod/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('supports docker mode with credentials', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.find.mockReturnValueOnce({ token: 'some-token', }); @@ -212,7 +212,7 @@ describe('manager/gomod/artifacts', () => { }); it('supports docker mode with 2 credentials', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.find.mockReturnValueOnce({ token: 'some-token', }); @@ -256,7 +256,7 @@ describe('manager/gomod/artifacts', () => { }); it('supports docker mode with single credential', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.getAll.mockReturnValueOnce([ { token: 'some-enterprise-token', @@ -295,7 +295,7 @@ describe('manager/gomod/artifacts', () => { }); it('supports docker mode with multiple credentials for different paths', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.getAll.mockReturnValueOnce([ { token: 'some-enterprise-token-repo1', @@ -341,7 +341,7 @@ describe('manager/gomod/artifacts', () => { }); it('supports docker mode and ignores non http credentials', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.getAll.mockReturnValueOnce([ { token: 'some-token', @@ -384,7 +384,7 @@ describe('manager/gomod/artifacts', () => { }); it('supports docker mode with many credentials', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.find.mockReturnValueOnce({ token: 'some-token', }); @@ -442,7 +442,7 @@ describe('manager/gomod/artifacts', () => { }); it('supports docker mode and ignores non git credentials', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.find.mockReturnValueOnce({ token: 'some-token', }); @@ -484,7 +484,7 @@ describe('manager/gomod/artifacts', () => { }); it('supports docker mode with goModTidy', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); hostRules.find.mockReturnValueOnce({}); fs.readFile.mockResolvedValueOnce('Current go.sum' as any); fs.readFile.mockResolvedValueOnce(null as any); // vendor modules filename diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts index 14c81c734198f6..54c9043748ea90 100644 --- a/lib/manager/gomod/artifacts.ts +++ b/lib/manager/gomod/artifacts.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { dirname, join } from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { PlatformId } from '../../constants'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; @@ -171,7 +171,7 @@ export async function updateArtifacts({ GONOSUMDB: process.env.GONOSUMDB, GOSUMDB: process.env.GOSUMDB, GOFLAGS: useModcacherw(config.constraints?.go) ? '-modcacherw' : null, - CGO_ENABLED: getGlobalConfig().binarySource === 'docker' ? '0' : null, + CGO_ENABLED: GlobalConfig.get('binarySource') === 'docker' ? '0' : null, ...getGitEnvironmentVariables(), }, docker: { diff --git a/lib/manager/gradle-wrapper/artifacts-real.spec.ts b/lib/manager/gradle-wrapper/artifacts-real.spec.ts index b8a406f0621afd..4ae117f3d7380a 100644 --- a/lib/manager/gradle-wrapper/artifacts-real.spec.ts +++ b/lib/manager/gradle-wrapper/artifacts-real.spec.ts @@ -3,7 +3,7 @@ import Git from 'simple-git'; import { resolve } from 'upath'; import * as httpMock from '../../../test/http-mock'; import { git, partial } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import type { StatusResult } from '../../util/git'; import { ifSystemSupportsGradle } from '../gradle/deep/__testutil__/gradle'; @@ -42,12 +42,12 @@ describe('manager/gradle-wrapper/artifacts-real', () => { beforeEach(() => { jest.resetAllMocks(); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterEach(async () => { await Git(fixtures).checkout(['HEAD', '--', '.']); - setGlobalConfig(); + GlobalConfig.reset(); }); it('replaces existing value', async () => { @@ -168,7 +168,7 @@ describe('manager/gradle-wrapper/artifacts-real', () => { localDir: resolve(fixtures, './wrongCmd'), }; - setGlobalConfig(wrongCmdConfig); + GlobalConfig.set(wrongCmdConfig); const res = await gradleWrapper.updateArtifacts({ packageFileName: 'gradle/wrapper/gradle-wrapper.properties', updatedDeps: [], @@ -191,7 +191,7 @@ describe('manager/gradle-wrapper/artifacts-real', () => { }); it('gradlew not found', async () => { - setGlobalConfig({ localDir: 'some-dir' }); + GlobalConfig.set({ localDir: 'some-dir' }); const res = await gradleWrapper.updateArtifacts({ packageFileName: 'gradle-wrapper.properties', updatedDeps: [], diff --git a/lib/manager/gradle-wrapper/artifacts.spec.ts b/lib/manager/gradle-wrapper/artifacts.spec.ts index a98cedc9d94fd3..b7770644d8ae49 100644 --- a/lib/manager/gradle-wrapper/artifacts.spec.ts +++ b/lib/manager/gradle-wrapper/artifacts.spec.ts @@ -9,7 +9,7 @@ import { git, partial, } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { resetPrefetchedImages } from '../../util/exec/docker'; import type { StatusResult } from '../../util/git'; @@ -50,7 +50,7 @@ describe('manager/gradle-wrapper/artifacts', () => { LC_ALL: 'en_US', }); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); resetPrefetchedImages(); fs.readLocalFile.mockResolvedValue('test'); @@ -58,7 +58,7 @@ describe('manager/gradle-wrapper/artifacts', () => { }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('replaces existing value', async () => { @@ -97,7 +97,7 @@ describe('manager/gradle-wrapper/artifacts', () => { }); it('gradlew not found', async () => { - setGlobalConfig({ ...adminConfig, localDir: 'some-dir' }); + GlobalConfig.set({ ...adminConfig, localDir: 'some-dir' }); const res = await gradleWrapper.updateArtifacts({ packageFileName: 'gradle-wrapper.properties', updatedDeps: [], diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts index ca14ee8325a28f..98dabbe218ec8a 100644 --- a/lib/manager/gradle-wrapper/artifacts.ts +++ b/lib/manager/gradle-wrapper/artifacts.ts @@ -1,6 +1,6 @@ import { quote } from 'shlex'; import { resolve } from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; import { ExecOptions, exec } from '../../util/exec'; @@ -57,7 +57,7 @@ export async function updateArtifacts({ config, }: UpdateArtifact): Promise { try { - const { localDir: projectDir } = getGlobalConfig(); + const projectDir = GlobalConfig.get('localDir'); logger.debug({ updatedDeps }, 'gradle-wrapper.updateArtifacts()'); const gradlew = gradleWrapperFileName(); const gradlewPath = resolve(projectDir, `./${gradlew}`); diff --git a/lib/manager/gradle-wrapper/util.spec.ts b/lib/manager/gradle-wrapper/util.spec.ts index 61dd0852c7fc7e..e48174e5e44bdd 100644 --- a/lib/manager/gradle-wrapper/util.spec.ts +++ b/lib/manager/gradle-wrapper/util.spec.ts @@ -1,4 +1,4 @@ -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { extractGradleVersion, getJavaContraint } from './utils'; describe('manager/gradle-wrapper/util', () => { @@ -8,22 +8,22 @@ describe('manager/gradle-wrapper/util', () => { }); it('return ^11.0.0 for docker mode and undefined gradle', () => { - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); expect(getJavaContraint(undefined)).toBe('^11.0.0'); }); it('return ^8.0.0 for docker gradle < 5', () => { - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); expect(getJavaContraint('4.9')).toBe('^8.0.0'); }); it('return ^11.0.0 for docker gradle >=5 && <7', () => { - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); expect(getJavaContraint('6.0')).toBe('^11.0.0'); }); it('return ^16.0.0 for docker gradle >= 7', () => { - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); expect(getJavaContraint('7.0.1')).toBe('^16.0.0'); }); }); diff --git a/lib/manager/gradle-wrapper/utils.ts b/lib/manager/gradle-wrapper/utils.ts index 5dd3ebce553e53..99f389ed196f0a 100644 --- a/lib/manager/gradle-wrapper/utils.ts +++ b/lib/manager/gradle-wrapper/utils.ts @@ -1,7 +1,7 @@ import type { Stats } from 'fs'; import os from 'os'; import upath from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { chmod } from '../../util/fs'; import { regEx } from '../../util/regex'; @@ -17,7 +17,7 @@ export const extraEnv = { export function gradleWrapperFileName(): string { if ( os.platform() === 'win32' && - getGlobalConfig()?.binarySource !== 'docker' + GlobalConfig.get('binarySource') !== 'docker' ) { return 'gradlew.bat'; } @@ -53,7 +53,7 @@ export async function prepareGradleCommand( * @returns A Java semver range */ export function getJavaContraint(gradleVersion: string): string | null { - if (getGlobalConfig()?.binarySource !== 'docker') { + if (GlobalConfig.get('binarySource') !== 'docker') { // ignore return null; } diff --git a/lib/manager/gradle/deep/gradle-updates-report.spec.ts b/lib/manager/gradle/deep/gradle-updates-report.spec.ts index fc804f22cafb0b..25709740f8f178 100644 --- a/lib/manager/gradle/deep/gradle-updates-report.spec.ts +++ b/lib/manager/gradle/deep/gradle-updates-report.spec.ts @@ -1,7 +1,7 @@ import * as fs from 'fs-extra'; import tmp, { DirectoryResult } from 'tmp-promise'; import * as upath from 'upath'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { exec } from '../../../util/exec'; import { extraEnv } from '../../gradle-wrapper/utils'; import { ifSystemSupportsGradle } from './__testutil__/gradle'; @@ -22,7 +22,7 @@ describe('manager/gradle/deep/gradle-updates-report', () => { beforeEach(async () => { workingDir = await tmp.dir({ unsafeCleanup: true }); - setGlobalConfig({ localDir: workingDir.path }); + GlobalConfig.set({ localDir: workingDir.path }); }); afterEach(() => workingDir.cleanup()); diff --git a/lib/manager/gradle/deep/index-real.spec.ts b/lib/manager/gradle/deep/index-real.spec.ts index d0bfcf894ca144..e6c0fbe321f58c 100644 --- a/lib/manager/gradle/deep/index-real.spec.ts +++ b/lib/manager/gradle/deep/index-real.spec.ts @@ -1,6 +1,6 @@ import fsExtra from 'fs-extra'; import tmp, { DirectoryResult } from 'tmp-promise'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import type { RepoGlobalConfig } from '../../../config/types'; import type { ExtractConfig } from '../../types'; import { ifSystemSupportsGradle } from './__testutil__/gradle'; @@ -26,7 +26,7 @@ describe('manager/gradle/deep/index-real', () => { workingDir = await tmp.dir({ unsafeCleanup: true }); successFile = ''; adminConfig = { localDir: workingDir.path }; - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); testRunConfig = { ...baseConfig }; await fsExtra.copy(`${fixtures}/minimal-project`, workingDir.path); await fsExtra.copy(`${fixtures}/gradle-wrappers/6`, workingDir.path); @@ -48,7 +48,7 @@ allprojects { afterEach(async () => { await workingDir.cleanup(); - setGlobalConfig(); + GlobalConfig.reset(); }); it('executes an executable gradle wrapper', async () => { diff --git a/lib/manager/gradle/deep/index.spec.ts b/lib/manager/gradle/deep/index.spec.ts index ae157097710703..9177bf06a10f28 100644 --- a/lib/manager/gradle/deep/index.spec.ts +++ b/lib/manager/gradle/deep/index.spec.ts @@ -9,7 +9,7 @@ import { fs, loadFixture, } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import type { RepoGlobalConfig } from '../../../config/types'; import { ReleaseResult, @@ -122,11 +122,11 @@ describe('manager/gradle/deep/index', () => { } beforeAll(() => { - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterAll(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); beforeEach(() => { @@ -304,7 +304,7 @@ describe('manager/gradle/deep/index', () => { }); it('should use docker if required', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); const execSnapshots = setupMocks({ wrapperFilename: null, wrapperPropertiesFilename: null, @@ -326,7 +326,7 @@ describe('manager/gradle/deep/index', () => { }); it('should use docker even if gradlew is available', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); const execSnapshots = setupMocks(); getPkgReleases.mockResolvedValueOnce(javaReleases); const dependencies = await extractAllPackageFiles(config, [ @@ -345,7 +345,7 @@ describe('manager/gradle/deep/index', () => { }); it('should use docker even if gradlew.bat is available on Windows', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); jest.spyOn(os, 'platform').mockReturnValueOnce('win32'); const execSnapshots = setupMocks({ wrapperFilename: 'gradlew.bat' }); getPkgReleases.mockResolvedValueOnce(javaReleases); diff --git a/lib/manager/gradle/deep/index.ts b/lib/manager/gradle/deep/index.ts index 85dec5179d1c62..103c893549d317 100644 --- a/lib/manager/gradle/deep/index.ts +++ b/lib/manager/gradle/deep/index.ts @@ -1,6 +1,6 @@ import type { Stats } from 'fs'; import upath from 'upath'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { TEMPORARY_ERROR } from '../../../constants/error-messages'; import * as datasourceMaven from '../../../datasource/maven'; import { logger } from '../../../logger'; @@ -101,7 +101,7 @@ export async function extractAllPackageFiles( ): Promise { let rootBuildGradle: string | undefined; let gradlew: Stats | null; - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); for (const packageFile of packageFiles) { const dirname = upath.dirname(packageFile); const gradlewPath = upath.join(dirname, gradleWrapperFileName()); diff --git a/lib/manager/gradle/deep/utils.ts b/lib/manager/gradle/deep/utils.ts index b984d6c055ab49..8f5d886a182771 100644 --- a/lib/manager/gradle/deep/utils.ts +++ b/lib/manager/gradle/deep/utils.ts @@ -1,5 +1,5 @@ import { join } from 'upath'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { localPathExists, readLocalFile } from '../../../util/fs'; import { extractGradleVersion, @@ -11,7 +11,7 @@ const GradleWrapperProperties = 'gradle/wrapper/gradle-wrapper.properties'; export async function getDockerConstraint( gradleRoot: string ): Promise { - if (getGlobalConfig()?.binarySource !== 'docker') { + if (GlobalConfig.get('binarySource') !== 'docker') { // ignore return null; } @@ -29,7 +29,7 @@ export async function getDockerConstraint( export async function getDockerPreCommands( gradleRoot: string ): Promise { - if (getGlobalConfig()?.binarySource !== 'docker') { + if (GlobalConfig.get('binarySource') !== 'docker') { // ignore return null; } diff --git a/lib/manager/helmv3/artifacts.spec.ts b/lib/manager/helmv3/artifacts.spec.ts index 8b753abadef754..54238b5cfafba7 100644 --- a/lib/manager/helmv3/artifacts.spec.ts +++ b/lib/manager/helmv3/artifacts.spec.ts @@ -3,7 +3,7 @@ import _fs from 'fs-extra'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; @@ -31,11 +31,11 @@ describe('manager/helmv3/artifacts', () => { jest.resetModules(); env.getChildProcessEnv.mockReturnValue(envMock.basic); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null if no Chart.lock found', async () => { const updatedDeps = [{ depName: 'dep1' }]; @@ -109,7 +109,7 @@ describe('manager/helmv3/artifacts', () => { }); it('returns updated Chart.lock with docker', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('Old Chart.lock' as never); const execSnapshots = mockExecAll(exec); fs.readFile.mockResolvedValueOnce('New Chart.lock' as never); @@ -171,7 +171,7 @@ describe('manager/helmv3/artifacts', () => { }); it('sets repositories from aliases with docker', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('Old Chart.lock' as never); const execSnapshots = mockExecAll(exec); fs.readFile.mockResolvedValueOnce('New Chart.lock' as never); diff --git a/lib/manager/jsonnet-bundler/artifacts.spec.ts b/lib/manager/jsonnet-bundler/artifacts.spec.ts index f8f339fa0d727f..9b358b6fbbf729 100644 --- a/lib/manager/jsonnet-bundler/artifacts.spec.ts +++ b/lib/manager/jsonnet-bundler/artifacts.spec.ts @@ -1,7 +1,7 @@ import { join } from 'upath'; import { envMock, exec, mockExecAll } from '../../../test/exec-util'; import { env, fs, git } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import type { StatusResult } from '../../util/git'; import type { UpdateArtifactsConfig } from '../types'; @@ -23,7 +23,7 @@ describe('manager/jsonnet-bundler/artifacts', () => { beforeEach(() => { env.getChildProcessEnv.mockReturnValue(envMock.basic); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); it('returns null if jsonnetfile.lock does not exist', async () => { diff --git a/lib/manager/mix/artifacts.spec.ts b/lib/manager/mix/artifacts.spec.ts index 8a43a5e7de43e9..fb51593334454b 100644 --- a/lib/manager/mix/artifacts.spec.ts +++ b/lib/manager/mix/artifacts.spec.ts @@ -1,7 +1,7 @@ import { join } from 'upath'; import { envMock, exec, mockExecAll } from '../../../test/exec-util'; import { env, fs, hostRules } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import type { UpdateArtifactsConfig } from '../types'; @@ -25,11 +25,11 @@ describe('manager/mix/artifacts', () => { jest.resetModules(); env.getChildProcessEnv.mockReturnValue(envMock.basic); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns null if no mix.lock found', async () => { @@ -82,7 +82,7 @@ describe('manager/mix/artifacts', () => { it('returns updated mix.lock', async () => { jest.spyOn(docker, 'removeDanglingContainers').mockResolvedValueOnce(); - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Old mix.lock'); fs.findLocalSiblingOrParent.mockResolvedValueOnce('mix.lock'); const execSnapshots = mockExecAll(exec); @@ -100,7 +100,7 @@ describe('manager/mix/artifacts', () => { it('authenticates to private repositories', async () => { jest.spyOn(docker, 'removeDanglingContainers').mockResolvedValueOnce(); - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readLocalFile.mockResolvedValueOnce('Old mix.lock'); fs.findLocalSiblingOrParent.mockResolvedValueOnce('mix.lock'); const execSnapshots = mockExecAll(exec); @@ -140,7 +140,7 @@ describe('manager/mix/artifacts', () => { }); it('returns updated mix.lock in subdir', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.findLocalSiblingOrParent.mockResolvedValueOnce('subdir/mix.lock'); mockExecAll(exec); expect( diff --git a/lib/manager/mix/extract.spec.ts b/lib/manager/mix/extract.spec.ts index 009fd1a5605bdf..107ca67b6287bb 100644 --- a/lib/manager/mix/extract.spec.ts +++ b/lib/manager/mix/extract.spec.ts @@ -1,12 +1,12 @@ import { loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { extractPackageFile } from '.'; const sample = loadFixture('mix.exs'); describe('manager/mix/extract', () => { beforeEach(() => { - setGlobalConfig({ localDir: '' }); + GlobalConfig.set({ localDir: '' }); }); describe('extractPackageFile()', () => { diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index a1589c6bf21fb7..143c8de05bae98 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import validateNpmPackageName from 'validate-npm-package-name'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { CONFIG_VALIDATION } from '../../../constants/error-messages'; import * as datasourceGithubTags from '../../../datasource/github-tags'; import { id as npmId } from '../../../datasource/npm'; @@ -113,7 +113,7 @@ export async function extractPackageFile( logger.debug('Stripping package-lock setting from .npmrc'); repoNpmrc = repoNpmrc.replace(/(^|\n)package-lock.*?(\n|$)/g, '\n'); // TODO #12070 } - if (repoNpmrc.includes('=${') && !getGlobalConfig().exposeAllEnv) { + if (repoNpmrc.includes('=${') && !GlobalConfig.get('exposeAllEnv')) { logger.debug( { npmrcFileName }, 'Stripping .npmrc file of lines with variables' diff --git a/lib/manager/npm/extract/pnpm.spec.ts b/lib/manager/npm/extract/pnpm.spec.ts index 99d9918198960f..650ef274016c24 100644 --- a/lib/manager/npm/extract/pnpm.spec.ts +++ b/lib/manager/npm/extract/pnpm.spec.ts @@ -1,6 +1,6 @@ import yaml from 'js-yaml'; import { getFixturePath, logger } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import * as fs from '../../../util/fs'; import { detectPnpmWorkspaces, @@ -10,7 +10,7 @@ import { describe('manager/npm/extract/pnpm', () => { beforeAll(() => { - setGlobalConfig({ localDir: getFixturePath('pnpm-monorepo/', '..') }); + GlobalConfig.set({ localDir: getFixturePath('pnpm-monorepo/', '..') }); }); describe('.extractPnpmFilters()', () => { diff --git a/lib/manager/npm/post-update/index.ts b/lib/manager/npm/post-update/index.ts index b957e78e03d6fd..03ec150b52bcca 100644 --- a/lib/manager/npm/post-update/index.ts +++ b/lib/manager/npm/post-update/index.ts @@ -3,7 +3,7 @@ import deepmerge from 'deepmerge'; import detectIndent from 'detect-indent'; import { dump, load } from 'js-yaml'; import upath from 'upath'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { SYSTEM_INSUFFICIENT_DISK_SPACE } from '../../../constants/error-messages'; import { id as npmId } from '../../../datasource/npm'; import { logger } from '../../../logger'; @@ -141,7 +141,7 @@ export async function writeExistingFiles( { packageFiles: npmFiles.map((n) => n.packageFile) }, 'Writing package.json files' ); - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); for (const packageFile of npmFiles) { const basedir = upath.join( localDir, @@ -251,7 +251,7 @@ export async function writeUpdatedPackageFiles( logger.debug('No files found'); return; } - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); for (const packageFile of config.updatedPackageFiles) { if (packageFile.name.endsWith('package-lock.json')) { logger.debug(`Writing package-lock file: ${packageFile.name}`); @@ -510,7 +510,7 @@ export async function getAdditionalFiles( } catch (err) { logger.warn({ err }, 'Error getting token for packageFile'); } - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); for (const npmLock of dirs.npmLockDirs) { const lockFileDir = upath.dirname(npmLock); const fullLockFileDir = upath.join(localDir, lockFileDir); diff --git a/lib/manager/npm/post-update/lerna.spec.ts b/lib/manager/npm/post-update/lerna.spec.ts index 511153de43b04d..d48fa30fd5a84c 100644 --- a/lib/manager/npm/post-update/lerna.spec.ts +++ b/lib/manager/npm/post-update/lerna.spec.ts @@ -1,7 +1,7 @@ import { exec as _exec } from 'child_process'; import { envMock, mockExecAll } from '../../../../test/exec-util'; import { mocked } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import * as _env from '../../../util/exec/env'; import * as _lernaHelper from './lerna'; @@ -95,7 +95,7 @@ describe('manager/npm/post-update/lerna', () => { }); it('allows scripts for trust level high', async () => { const execSnapshots = mockExecAll(exec); - setGlobalConfig({ allowScripts: true }); + GlobalConfig.set({ allowScripts: true }); const res = await lernaHelper.generateLockFiles( lernaPkgFile('npm'), 'some-dir', diff --git a/lib/manager/npm/post-update/lerna.ts b/lib/manager/npm/post-update/lerna.ts index a7b3329cce141b..d696d03a8c9fca 100644 --- a/lib/manager/npm/post-update/lerna.ts +++ b/lib/manager/npm/post-update/lerna.ts @@ -1,6 +1,6 @@ import semver, { validRange } from 'semver'; import { quote } from 'shlex'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { TEMPORARY_ERROR } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import { ExecOptions, exec } from '../../../util/exec'; @@ -67,7 +67,7 @@ export async function generateLockFiles( return { error: false }; } let lernaCommand = `lerna bootstrap --no-ci --ignore-scripts -- `; - if (getGlobalConfig().allowScripts && config.ignoreScripts !== false) { + if (GlobalConfig.get('allowScripts') && config.ignoreScripts !== false) { cmdOptions = cmdOptions.replace('--ignore-scripts ', ''); lernaCommand = lernaCommand.replace('--ignore-scripts ', ''); } @@ -87,7 +87,7 @@ export async function generateLockFiles( }, }; // istanbul ignore if - if (getGlobalConfig().exposeAllEnv) { + if (GlobalConfig.get('exposeAllEnv')) { execOptions.extraEnv.NPM_AUTH = env.NPM_AUTH; execOptions.extraEnv.NPM_EMAIL = env.NPM_EMAIL; } diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index f84023593c5cec..8adfe5698aa557 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -1,7 +1,7 @@ import { validRange } from 'semver'; import { quote } from 'shlex'; import { join } from 'upath'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { SYSTEM_INSUFFICIENT_DISK_SPACE, TEMPORARY_ERROR, @@ -52,7 +52,7 @@ export async function generateLockFile( cmdOptions += '--package-lock-only --no-audit'; } - if (!getGlobalConfig().allowScripts || config.ignoreScripts) { + if (!GlobalConfig.get('allowScripts') || config.ignoreScripts) { cmdOptions += ' --ignore-scripts'; } @@ -71,7 +71,7 @@ export async function generateLockFile( }, }; // istanbul ignore if - if (getGlobalConfig().exposeAllEnv) { + if (GlobalConfig.get('exposeAllEnv')) { execOptions.extraEnv.NPM_AUTH = env.NPM_AUTH; execOptions.extraEnv.NPM_EMAIL = env.NPM_EMAIL; } diff --git a/lib/manager/npm/post-update/pnpm.ts b/lib/manager/npm/post-update/pnpm.ts index 7d0f62ba404e2f..1e9c030bc3245e 100644 --- a/lib/manager/npm/post-update/pnpm.ts +++ b/lib/manager/npm/post-update/pnpm.ts @@ -1,7 +1,7 @@ import { validRange } from 'semver'; import { quote } from 'shlex'; import { join } from 'upath'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { TEMPORARY_ERROR } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import { ExecOptions, exec } from '../../../util/exec'; @@ -50,13 +50,13 @@ export async function generateLockFile( }, }; // istanbul ignore if - if (getGlobalConfig().exposeAllEnv) { + if (GlobalConfig.get('exposeAllEnv')) { execOptions.extraEnv.NPM_AUTH = env.NPM_AUTH; execOptions.extraEnv.NPM_EMAIL = env.NPM_EMAIL; } cmd = 'pnpm'; let args = 'install --recursive --lockfile-only'; - if (!getGlobalConfig().allowScripts || config.ignoreScripts) { + if (!GlobalConfig.get('allowScripts') || config.ignoreScripts) { args += ' --ignore-scripts'; args += ' --ignore-pnpmfile'; } diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts index 60d4fd550fde78..e98cc18911f9c3 100644 --- a/lib/manager/npm/post-update/yarn.ts +++ b/lib/manager/npm/post-update/yarn.ts @@ -2,7 +2,7 @@ import is from '@sindresorhus/is'; import { gte, minVersion, validRange } from 'semver'; import { quote } from 'shlex'; import { join } from 'upath'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { SYSTEM_INSUFFICIENT_DISK_SPACE, TEMPORARY_ERROR, @@ -128,7 +128,7 @@ export async function generateLockFile( extraEnv.YARN_ENABLE_GLOBAL_CACHE = '1'; } } - if (!getGlobalConfig().allowScripts || config.ignoreScripts) { + if (!GlobalConfig.get('allowScripts') || config.ignoreScripts) { if (isYarn1) { cmdOptions += ' --ignore-scripts'; } else if (isYarnModeAvailable) { @@ -152,7 +152,7 @@ export async function generateLockFile( }, }; // istanbul ignore if - if (getGlobalConfig().exposeAllEnv) { + if (GlobalConfig.get('exposeAllEnv')) { execOptions.extraEnv.NPM_AUTH = env.NPM_AUTH; execOptions.extraEnv.NPM_EMAIL = env.NPM_EMAIL; } diff --git a/lib/manager/nuget/artifacts.spec.ts b/lib/manager/nuget/artifacts.spec.ts index 64f0890d169efb..71824a6dc72162 100644 --- a/lib/manager/nuget/artifacts.spec.ts +++ b/lib/manager/nuget/artifacts.spec.ts @@ -2,7 +2,7 @@ import { exec as _exec } from 'child_process'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { fs, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; @@ -49,12 +49,12 @@ describe('manager/nuget/artifacts', () => { Promise.resolve(`others/${dirName}`) ); getRandomString.mockReturnValue('not-so-random' as any); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('aborts if no lock file found', async () => { @@ -150,7 +150,7 @@ describe('manager/nuget/artifacts', () => { }); it('supports docker mode', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); const execSnapshots = mockExecAll(exec); fs.getSiblingFileName.mockReturnValueOnce('packages.lock.json'); fs.readLocalFile.mockResolvedValueOnce('Current packages.lock.json' as any); @@ -166,7 +166,7 @@ describe('manager/nuget/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('supports global mode', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'global' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'global' }); const execSnapshots = mockExecAll(exec); fs.getSiblingFileName.mockReturnValueOnce('packages.lock.json'); fs.readLocalFile.mockResolvedValueOnce('Current packages.lock.json' as any); diff --git a/lib/manager/nuget/artifacts.ts b/lib/manager/nuget/artifacts.ts index 34a910aad3c6c7..acd693db32b64a 100644 --- a/lib/manager/nuget/artifacts.ts +++ b/lib/manager/nuget/artifacts.ts @@ -1,5 +1,5 @@ import { join } from 'path'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { id, parseRegistryUrl } from '../../datasource/nuget'; import { logger } from '../../logger'; @@ -30,7 +30,7 @@ async function addSourceCmds( config: UpdateArtifactsConfig, nugetConfigFile: string ): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const registries = (await getConfiguredRegistries(packageFileName, localDir)) || getDefaultRegistries(); diff --git a/lib/manager/nuget/extract.spec.ts b/lib/manager/nuget/extract.spec.ts index 587d4c61f45232..e12e01825c8af8 100644 --- a/lib/manager/nuget/extract.spec.ts +++ b/lib/manager/nuget/extract.spec.ts @@ -1,6 +1,6 @@ import * as upath from 'upath'; import { loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import type { ExtractConfig } from '../types'; import { extractPackageFile } from './extract'; @@ -14,10 +14,10 @@ const adminConfig: RepoGlobalConfig = { describe('manager/nuget/extract', () => { describe('extractPackageFile()', () => { beforeEach(() => { - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns empty for invalid csproj', async () => { expect(await extractPackageFile('nothing here', 'bogus', config)).toEqual( diff --git a/lib/manager/nuget/extract.ts b/lib/manager/nuget/extract.ts index b110aa8346bf60..fb4f4fc130a4fa 100644 --- a/lib/manager/nuget/extract.ts +++ b/lib/manager/nuget/extract.ts @@ -1,5 +1,5 @@ import { XmlDocument, XmlElement, XmlNode } from 'xmldoc'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import * as datasourceNuget from '../../datasource/nuget'; import { logger } from '../../logger'; import { getSiblingFileName, localPathExists } from '../../util/fs'; @@ -72,7 +72,7 @@ export async function extractPackageFile( ): Promise { logger.trace({ packageFile }, 'nuget.extractPackageFile()'); - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const registries = await getConfiguredRegistries(packageFile, localDir); const registryUrls = registries ? registries.map((registry) => registry.url) diff --git a/lib/manager/pip-compile/artifacts.spec.ts b/lib/manager/pip-compile/artifacts.spec.ts index 4f62a4899d8dfc..fff86aa9d08564 100644 --- a/lib/manager/pip-compile/artifacts.spec.ts +++ b/lib/manager/pip-compile/artifacts.spec.ts @@ -3,7 +3,7 @@ import _fs from 'fs-extra'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { git, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; @@ -40,7 +40,7 @@ describe('manager/pip-compile/artifacts', () => { LANG: 'en_US.UTF-8', LC_ALL: 'en_US', }); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); }); @@ -89,7 +89,7 @@ describe('manager/pip-compile/artifacts', () => { }); it('supports docker mode', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); const execSnapshots = mockExecAll(exec); git.getRepoStatus.mockResolvedValue({ modified: ['requirements.txt'], @@ -144,7 +144,7 @@ describe('manager/pip-compile/artifacts', () => { }); it('uses pipenv version from config', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); const execSnapshots = mockExecAll(exec); git.getRepoStatus.mockResolvedValue({ modified: ['requirements.txt'], diff --git a/lib/manager/pip_requirements/artifacts.spec.ts b/lib/manager/pip_requirements/artifacts.spec.ts index 798025ef7a0710..61af191fa3b3ab 100644 --- a/lib/manager/pip_requirements/artifacts.spec.ts +++ b/lib/manager/pip_requirements/artifacts.spec.ts @@ -1,5 +1,5 @@ import _fs from 'fs-extra'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { UpdateArtifactsConfig } from '../types'; import { updateArtifacts } from './artifacts'; @@ -19,7 +19,7 @@ describe('manager/pip_requirements/artifacts', () => { beforeEach(() => { jest.resetAllMocks(); jest.resetModules(); - setGlobalConfig({ localDir: '' }); + GlobalConfig.set({ localDir: '' }); }); it('returns null if no updatedDeps were provided', async () => { expect( diff --git a/lib/manager/pip_requirements/extract.spec.ts b/lib/manager/pip_requirements/extract.spec.ts index 551aec84e366ac..94f9b027834b96 100644 --- a/lib/manager/pip_requirements/extract.spec.ts +++ b/lib/manager/pip_requirements/extract.spec.ts @@ -1,5 +1,5 @@ import { loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { extractPackageFile } from './extract'; const requirements1 = loadFixture('requirements1.txt'); @@ -14,11 +14,11 @@ const requirements8 = loadFixture('requirements8.txt'); describe('manager/pip_requirements/extract', () => { beforeEach(() => { delete process.env.PIP_TEST_TOKEN; - setGlobalConfig(); + GlobalConfig.reset(); }); afterEach(() => { delete process.env.PIP_TEST_TOKEN; - setGlobalConfig(); + GlobalConfig.reset(); }); describe('extractPackageFile()', () => { let config; @@ -124,7 +124,7 @@ describe('manager/pip_requirements/extract', () => { }); it('should replace env vars in high trust mode', () => { process.env.PIP_TEST_TOKEN = 'its-a-secret'; - setGlobalConfig({ exposeAllEnv: true }); + GlobalConfig.set({ exposeAllEnv: true }); const res = extractPackageFile(requirements7, 'unused_file_name', {}); expect(res.registryUrls).toEqual([ 'https://pypi.org/pypi/', diff --git a/lib/manager/pip_requirements/extract.ts b/lib/manager/pip_requirements/extract.ts index 047fbcfe9dda49..c10ab1966e8dcf 100644 --- a/lib/manager/pip_requirements/extract.ts +++ b/lib/manager/pip_requirements/extract.ts @@ -1,6 +1,6 @@ // based on https://www.python.org/dev/peps/pep-0508/#names import { RANGE_PATTERN } from '@renovate/pep440/lib/specifier'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { PypiDatasource } from '../../datasource/pypi'; import { logger } from '../../logger'; import { SkipReason } from '../../types'; @@ -91,7 +91,7 @@ export function extractPackageFile( res.registryUrls = registryUrls.map((url) => { // handle the optional quotes in eg. `--extra-index-url "https://foo.bar"` const cleaned = url.replace(regEx(/^"/), '').replace(regEx(/"$/), ''); // TODO #12071 - if (!getGlobalConfig().exposeAllEnv) { + if (!GlobalConfig.get('exposeAllEnv')) { return cleaned; } // interpolate any environment variables diff --git a/lib/manager/pipenv/artifacts.spec.ts b/lib/manager/pipenv/artifacts.spec.ts index fbacc6945ae058..c8351a87592b90 100644 --- a/lib/manager/pipenv/artifacts.spec.ts +++ b/lib/manager/pipenv/artifacts.spec.ts @@ -3,7 +3,7 @@ import _fs from 'fs-extra'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { git, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; @@ -42,7 +42,7 @@ describe('manager/pipenv/artifacts', () => { LC_ALL: 'en_US', }); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); pipFileLock = { _meta: { requires: {} }, @@ -108,7 +108,7 @@ describe('manager/pipenv/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('supports docker mode', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); pipFileLock._meta.requires.python_version = '3.7'; fs.readFile.mockResolvedValueOnce(JSON.stringify(pipFileLock) as any); const execSnapshots = mockExecAll(exec); @@ -160,7 +160,7 @@ describe('manager/pipenv/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('uses pipenv version from Pipfile', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); pipFileLock.default.pipenv.version = '==2020.8.13'; fs.readFile.mockResolvedValueOnce(JSON.stringify(pipFileLock) as any); const execSnapshots = mockExecAll(exec); @@ -179,7 +179,7 @@ describe('manager/pipenv/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('uses pipenv version from Pipfile dev packages', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); pipFileLock.develop.pipenv.version = '==2020.8.13'; fs.readFile.mockResolvedValueOnce(JSON.stringify(pipFileLock) as any); const execSnapshots = mockExecAll(exec); @@ -198,7 +198,7 @@ describe('manager/pipenv/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('uses pipenv version from config', async () => { - setGlobalConfig(dockerAdminConfig); + GlobalConfig.set(dockerAdminConfig); pipFileLock.default.pipenv.version = '==2020.8.13'; fs.readFile.mockResolvedValueOnce(JSON.stringify(pipFileLock) as any); const execSnapshots = mockExecAll(exec); diff --git a/lib/manager/poetry/artifacts.spec.ts b/lib/manager/poetry/artifacts.spec.ts index 69f3922fafc613..02440b20e92d19 100644 --- a/lib/manager/poetry/artifacts.spec.ts +++ b/lib/manager/poetry/artifacts.spec.ts @@ -3,7 +3,7 @@ import _fs from 'fs-extra'; import { join } from 'upath'; import { envMock, mockExecAll } from '../../../test/exec-util'; import { loadFixture, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as _datasource from '../../datasource'; import * as docker from '../../util/exec/docker'; @@ -36,7 +36,7 @@ describe('manager/poetry/artifacts', () => { beforeEach(() => { jest.resetAllMocks(); env.getChildProcessEnv.mockReturnValue(envMock.basic); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); docker.resetPrefetchedImages(); }); it('returns null if no poetry.lock found', async () => { @@ -130,7 +130,7 @@ describe('manager/poetry/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('returns updated poetry.lock using docker', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce('[metadata]\n' as any); const execSnapshots = mockExecAll(exec); fs.readFile.mockReturnValueOnce('New poetry.lock' as any); @@ -155,7 +155,7 @@ describe('manager/poetry/artifacts', () => { expect(execSnapshots).toMatchSnapshot(); }); it('returns updated poetry.lock using docker (constraints)', async () => { - setGlobalConfig({ ...adminConfig, binarySource: 'docker' }); + GlobalConfig.set({ ...adminConfig, binarySource: 'docker' }); fs.readFile.mockResolvedValueOnce( '[metadata]\npython-versions = "~2.7 || ^3.4"' as any ); diff --git a/lib/manager/terraform/extract.spec.ts b/lib/manager/terraform/extract.spec.ts index 109092ffc35426..fe6f6f4b1fcf32 100644 --- a/lib/manager/terraform/extract.spec.ts +++ b/lib/manager/terraform/extract.spec.ts @@ -1,6 +1,6 @@ import { join } from 'upath'; import { fs, loadFixture } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { extractPackageFile } from '.'; @@ -25,7 +25,7 @@ jest.mock('../../util/fs'); describe('manager/terraform/extract', () => { beforeEach(() => { - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); describe('extractPackageFile()', () => { it('returns null for empty', async () => { diff --git a/lib/manager/terraform/lockfile/hash.spec.ts b/lib/manager/terraform/lockfile/hash.spec.ts index d14da9c54cfb9f..b2b06757525d36 100644 --- a/lib/manager/terraform/lockfile/hash.spec.ts +++ b/lib/manager/terraform/lockfile/hash.spec.ts @@ -2,7 +2,7 @@ import { createReadStream } from 'fs'; import { DirectoryResult, dir } from 'tmp-promise'; import * as httpMock from '../../../../test/http-mock'; import { getFixturePath, loadFixture, logger } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { TerraformProviderDatasource } from '../../../datasource/terraform-provider'; import { Logger } from '../../../logger/types'; import { TerraformProviderHash } from './hash'; @@ -17,7 +17,7 @@ describe('manager/terraform/lockfile/hash', () => { beforeEach(async () => { cacheDir = await dir({ unsafeCleanup: true }); - setGlobalConfig({ cacheDir: cacheDir.path }); + GlobalConfig.set({ cacheDir: cacheDir.path }); }); afterEach(() => cacheDir.cleanup()); diff --git a/lib/manager/terraform/lockfile/index.spec.ts b/lib/manager/terraform/lockfile/index.spec.ts index 2964b081bd0fce..0c2a4d52c1e779 100644 --- a/lib/manager/terraform/lockfile/index.spec.ts +++ b/lib/manager/terraform/lockfile/index.spec.ts @@ -1,6 +1,6 @@ import { join } from 'upath'; import { fs, loadFixture, mocked } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { getPkgReleases } from '../../../datasource'; import type { UpdateArtifactsConfig } from '../../types'; import { TerraformProviderHash } from './hash'; @@ -33,7 +33,7 @@ describe('manager/terraform/lockfile/index', () => { beforeEach(() => { jest.resetAllMocks(); jest.resetModules(); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); }); it('returns null if no .terraform.lock.hcl found', async () => { diff --git a/lib/util/cache/repository/index.spec.ts b/lib/util/cache/repository/index.spec.ts index 2fe02ba3cd546c..af06921428db85 100644 --- a/lib/util/cache/repository/index.spec.ts +++ b/lib/util/cache/repository/index.spec.ts @@ -1,6 +1,6 @@ import * as _fs from 'fs-extra'; import { mocked } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import * as repositoryCache from '.'; jest.mock('fs-extra'); @@ -10,7 +10,7 @@ const fs = mocked(_fs); describe('util/cache/repository/index', () => { beforeEach(() => { jest.resetAllMocks(); - setGlobalConfig({ cacheDir: '/tmp/renovate/cache/' }); + GlobalConfig.set({ cacheDir: '/tmp/renovate/cache/' }); }); const config = { platform: 'github', diff --git a/lib/util/cache/repository/index.ts b/lib/util/cache/repository/index.ts index cd726ab7e034dd..415b629e4b7376 100644 --- a/lib/util/cache/repository/index.ts +++ b/lib/util/cache/repository/index.ts @@ -1,6 +1,6 @@ import * as fs from 'fs-extra'; import { join } from 'upath'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import type { RenovateConfig, RepositoryCacheConfig, @@ -17,7 +17,7 @@ let cache: Cache = Object.create({}); export function getCacheFileName(config: RenovateConfig): string { return join( - getGlobalConfig().cacheDir, + GlobalConfig.get('cacheDir'), '/renovate/repository/', config.platform, config.repository + '.json' diff --git a/lib/util/exec/docker/index.spec.ts b/lib/util/exec/docker/index.spec.ts index 4c8d4dea7dfcd7..cd666248811ca6 100644 --- a/lib/util/exec/docker/index.spec.ts +++ b/lib/util/exec/docker/index.spec.ts @@ -3,7 +3,7 @@ import { mockExecAll, mockExecSequence, } from '../../../../test/exec-util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { SYSTEM_INSUFFICIENT_MEMORY } from '../../../constants/error-messages'; import { getPkgReleases as _getPkgReleases } from '../../../datasource'; import { logger } from '../../../logger'; @@ -141,12 +141,12 @@ describe('util/exec/docker/index', () => { describe('removeDanglingContainers', () => { beforeEach(() => { - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); }); it('short-circuits in non-Docker environment', async () => { const execSnapshots = mockExecAll(exec); - setGlobalConfig({ binarySource: 'global' }); + GlobalConfig.set({ binarySource: 'global' }); await removeDanglingContainers(); expect(execSnapshots).toBeEmpty(); }); @@ -231,7 +231,7 @@ describe('util/exec/docker/index', () => { `bash -l -c "foo && bar && baz"`; beforeEach(() => { - setGlobalConfig({ dockerUser: 'some-user' }); + GlobalConfig.set({ dockerUser: 'some-user' }); }); it('returns executable command', async () => { diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index 25646de2394015..dc921146acf1d7 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -1,5 +1,5 @@ import is from '@sindresorhus/is'; -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { SYSTEM_INSUFFICIENT_MEMORY } from '../../../constants/error-messages'; import { getPkgReleases } from '../../../datasource'; import { logger } from '../../../logger'; @@ -159,7 +159,7 @@ export async function removeDockerContainer( } export async function removeDanglingContainers(): Promise { - const { binarySource, dockerChildPrefix } = getGlobalConfig(); + const { binarySource, dockerChildPrefix } = GlobalConfig.get(); if (binarySource !== 'docker') { return; } @@ -212,7 +212,7 @@ export async function generateDockerCommand( dockerUser, dockerChildPrefix, dockerImagePrefix, - } = getGlobalConfig(); + } = GlobalConfig.get(); const result = ['docker run --rm']; const containerName = getContainerName(image, dockerChildPrefix); const containerLabel = getContainerLabel(dockerChildPrefix); diff --git a/lib/util/exec/env.spec.ts b/lib/util/exec/env.spec.ts index d6a4d09bf52c5f..ac221486e9c6c1 100644 --- a/lib/util/exec/env.spec.ts +++ b/lib/util/exec/env.spec.ts @@ -1,4 +1,4 @@ -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { getChildProcessEnv } from './env'; describe('util/exec/env', () => { @@ -54,7 +54,7 @@ describe('util/exec/env', () => { describe('getChildProcessEnv when trustlevel set to high', () => { it('returns process.env if trustlevel set to high', () => { - setGlobalConfig({ exposeAllEnv: true }); + GlobalConfig.set({ exposeAllEnv: true }); expect(getChildProcessEnv()).toMatchObject(process.env); }); }); diff --git a/lib/util/exec/env.ts b/lib/util/exec/env.ts index f453bd34abc34a..7fef55acf6f7ac 100644 --- a/lib/util/exec/env.ts +++ b/lib/util/exec/env.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; const basicEnvVars = [ 'HTTP_PROXY', @@ -20,7 +20,7 @@ export function getChildProcessEnv( customEnvVars: string[] = [] ): NodeJS.ProcessEnv { const env: NodeJS.ProcessEnv = {}; - if (getGlobalConfig().exposeAllEnv) { + if (GlobalConfig.get('exposeAllEnv')) { return { ...env, ...process.env }; } const envVars = [...basicEnvVars, ...customEnvVars]; diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts index 86a61a213ab687..eca56e89d98eba 100644 --- a/lib/util/exec/index.spec.ts +++ b/lib/util/exec/index.spec.ts @@ -3,7 +3,7 @@ import { exec as _cpExec, } from 'child_process'; import { envMock } from '../../../test/exec-util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { RawExecOptions, VolumeOption } from './common'; @@ -38,7 +38,7 @@ describe('util/exec/index', () => { jest.restoreAllMocks(); jest.resetModules(); processEnvOrig = process.env; - setGlobalConfig(); + GlobalConfig.reset(); }); afterEach(() => { @@ -697,7 +697,7 @@ describe('util/exec/index', () => { callback(null, { stdout: '', stderr: '' }); return undefined; }); - setGlobalConfig({ cacheDir, localDir: cwd, ...adminConfig }); + GlobalConfig.set({ cacheDir, localDir: cwd, ...adminConfig }); await exec(cmd as string, inOpts); expect(actualCmd).toEqual(outCommand); @@ -714,19 +714,19 @@ describe('util/exec/index', () => { return undefined; }); - setGlobalConfig({ binarySource: 'global' }); + GlobalConfig.set({ binarySource: 'global' }); await exec(inCmd, { docker }); await exec(inCmd, { docker }); - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); await exec(inCmd, { docker }); await exec(inCmd, { docker }); - setGlobalConfig({ binarySource: 'global' }); + GlobalConfig.set({ binarySource: 'global' }); await exec(inCmd, { docker }); await exec(inCmd, { docker }); - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); await exec(inCmd, { docker }); await exec(inCmd, { docker }); @@ -750,7 +750,7 @@ describe('util/exec/index', () => { }); it('wraps error if removeDockerContainer throws an error', async () => { - setGlobalConfig({ binarySource: 'docker' }); + GlobalConfig.set({ binarySource: 'docker' }); cpExec.mockImplementation(() => { throw new Error('some error occurred'); }); diff --git a/lib/util/exec/index.ts b/lib/util/exec/index.ts index c093e0b059e3b4..221790b16a6d76 100644 --- a/lib/util/exec/index.ts +++ b/lib/util/exec/index.ts @@ -1,6 +1,6 @@ import type { ExecOptions as ChildProcessExecOptions } from 'child_process'; import { dirname, join } from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; import { generateInstallCommands } from './buildpack'; @@ -28,7 +28,7 @@ function getChildEnv({ extraEnv = {}, env: forcedEnv = {}, }: ExecOptions): ExtraEnv { - const { customEnvVariables: globalConfigEnv } = getGlobalConfig(); + const globalConfigEnv = GlobalConfig.get('customEnvVariables'); const inheritedKeys = Object.entries(extraEnv).reduce( (acc, [key, val]) => @@ -62,7 +62,7 @@ function dockerEnvVars( } function getCwd({ cwd, cwdFile }: ExecOptions): string { - const { localDir: defaultCwd } = getGlobalConfig(); + const defaultCwd = GlobalConfig.get('localDir'); const paramCwd = cwdFile ? join(defaultCwd, dirname(cwdFile)) : cwd; return paramCwd || defaultCwd; } @@ -90,7 +90,7 @@ function getRawExecOptions(opts: ExecOptions): RawExecOptions { } function isDocker({ docker }: ExecOptions): boolean { - const { binarySource } = getGlobalConfig(); + const { binarySource } = GlobalConfig.get(); return binarySource === 'docker' && !!docker; } @@ -104,7 +104,7 @@ async function prepareRawExec( opts: ExecOptions = {} ): Promise { const { docker } = opts; - const { customEnvVariables } = getGlobalConfig(); + const { customEnvVariables } = GlobalConfig.get(); const rawOptions = getRawExecOptions(opts); @@ -136,7 +136,7 @@ export async function exec( opts: ExecOptions = {} ): Promise { const { docker } = opts; - const { dockerChildPrefix } = getGlobalConfig(); + const { dockerChildPrefix } = GlobalConfig.get(); const { rawCommands, rawOptions } = await prepareRawExec(cmd, opts); const useDocker = isDocker(opts); diff --git a/lib/util/fs/index.spec.ts b/lib/util/fs/index.spec.ts index 1a7732410c5dfd..6275b0edb87486 100644 --- a/lib/util/fs/index.spec.ts +++ b/lib/util/fs/index.spec.ts @@ -2,7 +2,7 @@ import { withDir } from 'tmp-promise'; import { join } from 'upath'; import { envMock } from '../../../test/exec-util'; import { mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import * as _env from '../exec/env'; import { ensureCacheDir, @@ -22,7 +22,7 @@ const env = mocked(_env); describe('util/fs/index', () => { describe('readLocalFile', () => { beforeEach(() => { - setGlobalConfig({ localDir: '' }); + GlobalConfig.set({ localDir: '' }); }); it('reads buffer', async () => { @@ -56,7 +56,7 @@ describe('util/fs/index', () => { it('returns path for file', async () => { await withDir( async (localDir) => { - setGlobalConfig({ + GlobalConfig.set({ localDir: localDir.path, }); @@ -110,7 +110,7 @@ describe('util/fs/index', () => { it('returns dir content', async () => { await withDir( async (localDir) => { - setGlobalConfig({ + GlobalConfig.set({ localDir: localDir.path, }); await writeLocalFile('test/Cargo.toml', ''); @@ -138,7 +138,7 @@ describe('util/fs/index', () => { it('return empty array for non existing directory', async () => { await withDir( async (localDir) => { - setGlobalConfig({ + GlobalConfig.set({ localDir: localDir.path, }); await expect(readLocalDirectory('somedir')).rejects.toThrow(); @@ -170,7 +170,7 @@ describe('util/fs/index', () => { ...envMock.basic, }); - setGlobalConfig({ + GlobalConfig.set({ cacheDir: join(dirFromConfig), }); diff --git a/lib/util/fs/index.ts b/lib/util/fs/index.ts index 03e2d6be351bd0..eae38c5237599d 100644 --- a/lib/util/fs/index.ts +++ b/lib/util/fs/index.ts @@ -3,7 +3,7 @@ import util from 'util'; import is from '@sindresorhus/is'; import * as fs from 'fs-extra'; import { isAbsolute, join, parse } from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; export * from './proxies'; @@ -31,7 +31,7 @@ export async function readLocalFile( fileName: string, encoding?: string ): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const localFileName = join(localDir, fileName); try { const fileContent = await fs.readFile(localFileName, encoding); @@ -46,13 +46,13 @@ export async function writeLocalFile( fileName: string, fileContent: string ): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const localFileName = join(localDir, fileName); await fs.outputFile(localFileName, fileContent); } export async function deleteLocalFile(fileName: string): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); if (localDir) { const localFileName = join(localDir, fileName); await fs.remove(localFileName); @@ -64,7 +64,7 @@ export async function renameLocalFile( fromFile: string, toFile: string ): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); await fs.move(join(localDir, fromFile), join(localDir, toFile)); } @@ -77,13 +77,13 @@ export async function ensureDir(dirName: string): Promise { // istanbul ignore next export async function ensureLocalDir(dirName: string): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const localDirName = join(localDir, dirName); await fs.ensureDir(localDirName); } export async function ensureCacheDir(name: string): Promise { - const cacheDirName = join(getGlobalConfig().cacheDir, `others/${name}`); + const cacheDirName = join(GlobalConfig.get('cacheDir'), `others/${name}`); await fs.ensureDir(cacheDirName); return cacheDirName; } @@ -94,12 +94,12 @@ export async function ensureCacheDir(name: string): Promise { * without risk of that information leaking to other repositories/users. */ export function privateCacheDir(): string { - const { cacheDir } = getGlobalConfig(); + const { cacheDir } = GlobalConfig.get(); return join(cacheDir, '__renovate-private-cache'); } export function localPathExists(pathName: string): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); // Works for both files as well as directories return fs .stat(join(localDir, pathName)) @@ -140,7 +140,7 @@ export async function findLocalSiblingOrParent( * Get files by name from directory */ export async function readLocalDirectory(path: string): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const localPath = join(localDir, path); const fileList = await fs.readdir(localPath); return fileList; diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index 83aff7d3e2196a..99e2ec22140af4 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -2,7 +2,7 @@ import fs from 'fs-extra'; import Git from 'simple-git'; import SimpleGit from 'simple-git/src/git'; import tmp from 'tmp-promise'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { CONFIG_VALIDATION } from '../../constants/error-messages'; import * as git from '.'; import { GitNoVerifyOption, setNoVerify } from '.'; @@ -71,7 +71,7 @@ describe('util/git/index', () => { await repo.clone(base.path, '.', ['--bare']); await repo.addConfig('commit.gpgsign', 'false'); tmpDir = await tmp.dir({ unsafeCleanup: true }); - setGlobalConfig({ localDir: tmpDir.path }); + GlobalConfig.set({ localDir: tmpDir.path }); await git.initRepo({ url: origin.path, }); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index a79522eb5d74cc..fcd7990b5f6a1f 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -10,7 +10,7 @@ import Git, { } from 'simple-git'; import { join } from 'upath'; import { configFileNames } from '../../config/app-strings'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { CONFIG_VALIDATION, @@ -199,7 +199,7 @@ export async function initRepo(args: StorageConfig): Promise { config.ignoredAuthors = []; config.additionalBranches = []; config.branchIsModified = {}; - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); git = Git(localDir, simpleGitConfig()); gitInitialized = false; await fetchBranchCommits(); @@ -298,7 +298,7 @@ export async function syncGit(): Promise { return; } gitInitialized = true; - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); logger.debug('Initializing git repository into ' + localDir); const gitHead = join(localDir, '.git/HEAD'); let clone = true; @@ -699,7 +699,7 @@ export async function commitFiles({ await writePrivateKey(); privateKeySet = true; } - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); await configSigningKey(localDir); await writeGitAuthor(); try { diff --git a/lib/util/json-writer/editor-config.spec.ts b/lib/util/json-writer/editor-config.spec.ts index b3bbe22780585f..068028334d8ffa 100644 --- a/lib/util/json-writer/editor-config.spec.ts +++ b/lib/util/json-writer/editor-config.spec.ts @@ -1,7 +1,7 @@ import mockFs from 'mock-fs'; import { loadFixture } from '../../../test/util'; import { configFileNames } from '../../config/app-strings'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { EditorConfig } from './editor-config'; import { IndentationType } from './indentation-type'; @@ -13,7 +13,7 @@ const NON_JSON_FILES_EDITOR_CONFIG = loadFixture('.non_json_editorconfig', '.'); describe('util/json-writer/editor-config', () => { beforeAll(() => { - setGlobalConfig({ + GlobalConfig.set({ localDir: '', }); }); diff --git a/lib/util/json-writer/editor-config.ts b/lib/util/json-writer/editor-config.ts index 33bc638642fb33..f025d02d13670e 100644 --- a/lib/util/json-writer/editor-config.ts +++ b/lib/util/json-writer/editor-config.ts @@ -1,12 +1,12 @@ import { KnownProps, parse } from 'editorconfig'; import { join } from 'upath'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { CodeFormat } from './code-format'; import { IndentationType } from './indentation-type'; export class EditorConfig { public static async getCodeFormat(fileName: string): Promise { - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); const knownProps = await parse(join(localDir, fileName)); return { diff --git a/lib/util/template/index.ts b/lib/util/template/index.ts index 4a4ad1ee33af62..a4e84d60256b23 100644 --- a/lib/util/template/index.ts +++ b/lib/util/template/index.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import * as handlebars from 'handlebars'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { clone } from '../clone'; @@ -154,7 +154,7 @@ export function compile( input: CompileInput, filterFields = true ): string { - const data = { ...getGlobalConfig(), ...input }; + const data = { ...GlobalConfig.get(), ...input }; const filteredInput = filterFields ? getFilteredObject(data) : data; logger.trace({ template, filteredInput }, 'Compiling template'); if (filterFields) { diff --git a/lib/workers/branch/artifacts.spec.ts b/lib/workers/branch/artifacts.spec.ts index d185d13c0611d0..d234cd7867ebe9 100644 --- a/lib/workers/branch/artifacts.spec.ts +++ b/lib/workers/branch/artifacts.spec.ts @@ -1,5 +1,5 @@ import { getConfig, platform } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { BranchStatus } from '../../types'; import { BranchConfig } from '../types'; import { setArtifactErrorStatus } from './artifacts'; @@ -7,7 +7,7 @@ import { setArtifactErrorStatus } from './artifacts'; describe('workers/branch/artifacts', () => { let config: BranchConfig; beforeEach(() => { - setGlobalConfig({}); + GlobalConfig.set({}); jest.resetAllMocks(); config = { ...getConfig(), @@ -31,7 +31,7 @@ describe('workers/branch/artifacts', () => { }); it('skips status (dry-run)', async () => { - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); platform.getBranchStatusCheck.mockResolvedValueOnce(null); await setArtifactErrorStatus(config); expect(platform.setBranchStatus).not.toHaveBeenCalled(); diff --git a/lib/workers/branch/artifacts.ts b/lib/workers/branch/artifacts.ts index 6c982bb99cee5a..8a82b19184003f 100644 --- a/lib/workers/branch/artifacts.ts +++ b/lib/workers/branch/artifacts.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { platform } from '../../platform'; import { BranchStatus } from '../../types'; @@ -23,7 +23,7 @@ export async function setArtifactErrorStatus( // Check if state needs setting if (existingState !== state) { logger.debug(`Updating status check state to failed`); - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would set branch status in ' + config.branchName); } else { await platform.setBranchStatus({ diff --git a/lib/workers/branch/automerge.spec.ts b/lib/workers/branch/automerge.spec.ts index 9b6439f4fe3818..65de824a3ee5e4 100644 --- a/lib/workers/branch/automerge.spec.ts +++ b/lib/workers/branch/automerge.spec.ts @@ -1,5 +1,5 @@ import { defaultConfig, git, platform } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { BranchStatus } from '../../types'; import { tryBranchAutomerge } from './automerge'; @@ -13,7 +13,7 @@ describe('workers/branch/automerge', () => { config = { ...defaultConfig, }; - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns false if not configured for automerge', async () => { config.automerge = false; @@ -63,7 +63,7 @@ describe('workers/branch/automerge', () => { it('returns true if automerge succeeds (dry-run)', async () => { config.automerge = true; config.automergeType = 'branch'; - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); platform.getBranchStatus.mockResolvedValueOnce(BranchStatus.green); expect(await tryBranchAutomerge(config)).toBe('automerged'); }); diff --git a/lib/workers/branch/automerge.ts b/lib/workers/branch/automerge.ts index fd4f82b3508db8..c2d53a1fc514ce 100644 --- a/lib/workers/branch/automerge.ts +++ b/lib/workers/branch/automerge.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { logger } from '../../logger'; import { platform } from '../../platform'; @@ -33,7 +33,7 @@ export async function tryBranchAutomerge( if (branchStatus === BranchStatus.green) { logger.debug(`Automerging branch`); try { - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would automerge branch' + config.branchName); } else { await mergeBranch(config.branchName); diff --git a/lib/workers/branch/commit.spec.ts b/lib/workers/branch/commit.spec.ts index 6a99afd89cf361..c501a90c29a3a9 100644 --- a/lib/workers/branch/commit.spec.ts +++ b/lib/workers/branch/commit.spec.ts @@ -1,5 +1,5 @@ import { defaultConfig, git, partial } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { BranchConfig } from '../types'; import { commitFilesToBranch } from './commit'; @@ -21,7 +21,7 @@ describe('workers/branch/commit', () => { }); jest.resetAllMocks(); git.commitFiles.mockResolvedValueOnce('123test'); - setGlobalConfig(); + GlobalConfig.reset(); }); it('handles empty files', async () => { await commitFilesToBranch(config); @@ -37,7 +37,7 @@ describe('workers/branch/commit', () => { expect(git.commitFiles.mock.calls).toMatchSnapshot(); }); it('dry runs', async () => { - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); config.updatedPackageFiles.push({ name: 'package.json', contents: 'some contents', diff --git a/lib/workers/branch/commit.ts b/lib/workers/branch/commit.ts index 917578f569d2a8..bd201e7ea8ccdd 100644 --- a/lib/workers/branch/commit.ts +++ b/lib/workers/branch/commit.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import minimatch from 'minimatch'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { CONFIG_SECRETS_EXPOSED } from '../../constants/error-messages'; import { logger } from '../../logger'; import { commitFiles } from '../../util/git'; @@ -32,7 +32,7 @@ export function commitFilesToBranch( const fileLength = [...new Set(updatedFiles.map((file) => file.name))].length; logger.debug(`${fileLength} file(s) to commit`); // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would commit files to branch ' + config.branchName); return null; } diff --git a/lib/workers/branch/execute-post-upgrade-commands.ts b/lib/workers/branch/execute-post-upgrade-commands.ts index 94cb192fa63a60..7c863533f9ee76 100644 --- a/lib/workers/branch/execute-post-upgrade-commands.ts +++ b/lib/workers/branch/execute-post-upgrade-commands.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import minimatch from 'minimatch'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { addMeta, logger } from '../../logger'; import type { ArtifactError } from '../../manager/types'; import { exec } from '../../util/exec'; @@ -23,7 +23,7 @@ export async function postUpgradeCommandsExecutor( let updatedArtifacts = [...(config.updatedArtifacts || [])]; const artifactErrors = [...(config.artifactErrors || [])]; const { allowedPostUpgradeCommands, allowPostUpgradeCommandTemplating } = - getGlobalConfig(); + GlobalConfig.get(); for (const upgrade of filteredUpgradeCommands) { addMeta({ dep: upgrade.depName }); @@ -62,7 +62,7 @@ export async function postUpgradeCommandsExecutor( logger.debug({ cmd: compiledCmd }, 'Executing post-upgrade task'); const execResult = await exec(compiledCmd, { - cwd: getGlobalConfig().localDir, + cwd: GlobalConfig.get('localDir'), }); logger.debug( @@ -149,7 +149,7 @@ export async function postUpgradeCommandsExecutor( export default async function executePostUpgradeCommands( config: BranchConfig ): Promise { - const { allowedPostUpgradeCommands } = getGlobalConfig(); + const { allowedPostUpgradeCommands } = GlobalConfig.get(); const hasChangedFiles = config.updatedPackageFiles?.length > 0 || diff --git a/lib/workers/branch/handle-existing.ts b/lib/workers/branch/handle-existing.ts index 969049e641ca80..e0d00108fe97bb 100644 --- a/lib/workers/branch/handle-existing.ts +++ b/lib/workers/branch/handle-existing.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { Pr, platform } from '../../platform'; import { PrState } from '../../types'; @@ -19,7 +19,7 @@ export async function handlepr(config: BranchConfig, pr: Pr): Promise { '\n\nIf this PR was closed by mistake or you changed your mind, you can simply rename this PR and you will soon get a fresh replacement PR opened.'; if (!config.suppressNotifications.includes('prIgnoreNotification')) { const ignoreTopic = `Renovate Ignore Notification`; - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( `DRY-RUN: Would ensure closed PR comment in PR #${pr.number}` ); @@ -32,7 +32,7 @@ export async function handlepr(config: BranchConfig, pr: Pr): Promise { } } if (branchExists(config.branchName)) { - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would delete branch ' + config.branchName); } else { await deleteBranch(config.branchName); diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts index 07231792f93bbb..d819e2e03bc2c2 100644 --- a/lib/workers/branch/index.spec.ts +++ b/lib/workers/branch/index.spec.ts @@ -1,6 +1,6 @@ import * as _fs from 'fs-extra'; import { defaultConfig, git, mocked, platform } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { MANAGER_LOCKFILE_ERROR, @@ -93,7 +93,7 @@ describe('workers/branch/index', () => { body: '', }, }); - setGlobalConfig(adminConfig); + GlobalConfig.set(adminConfig); sanitize.sanitize.mockImplementation((input) => input); }); afterEach(() => { @@ -101,7 +101,7 @@ describe('workers/branch/index', () => { platform.ensureCommentRemoval.mockClear(); commit.commitFilesToBranch.mockClear(); jest.resetAllMocks(); - setGlobalConfig(); + GlobalConfig.reset(); }); it('skips branch if not scheduled and branch does not exist', async () => { schedule.isScheduledNow.mockReturnValueOnce(false); @@ -427,7 +427,7 @@ describe('workers/branch/index', () => { git.branchExists.mockReturnValue(true); commit.commitFilesToBranch.mockResolvedValueOnce(null); automerge.tryBranchAutomerge.mockResolvedValueOnce('automerged'); - setGlobalConfig({ ...adminConfig, dryRun: true }); + GlobalConfig.set({ ...adminConfig, dryRun: true }); await branchWorker.processBranch(config); expect(automerge.tryBranchAutomerge).toHaveBeenCalledTimes(1); expect(prWorker.ensurePr).toHaveBeenCalledTimes(0); @@ -732,7 +732,7 @@ describe('workers/branch/index', () => { checkExisting.prAlreadyExisted.mockResolvedValueOnce({ state: PrState.Closed, } as Pr); - setGlobalConfig({ ...adminConfig, dryRun: true }); + GlobalConfig.set({ ...adminConfig, dryRun: true }); // FIXME: explicit assert condition expect(await branchWorker.processBranch(config)).toMatchSnapshot(); }); @@ -743,7 +743,7 @@ describe('workers/branch/index', () => { state: PrState.Open, } as Pr); git.isBranchModified.mockResolvedValueOnce(true); - setGlobalConfig({ ...adminConfig, dryRun: true }); + GlobalConfig.set({ ...adminConfig, dryRun: true }); // FIXME: explicit assert condition expect(await branchWorker.processBranch(config)).toMatchSnapshot(); }); @@ -766,7 +766,7 @@ describe('workers/branch/index', () => { git.isBranchModified.mockResolvedValueOnce(true); schedule.isScheduledNow.mockReturnValueOnce(false); commit.commitFilesToBranch.mockResolvedValueOnce(null); - setGlobalConfig({ ...adminConfig, dryRun: true }); + GlobalConfig.set({ ...adminConfig, dryRun: true }); // FIXME: explicit assert condition expect( await branchWorker.processBranch({ @@ -799,7 +799,7 @@ describe('workers/branch/index', () => { pr: {}, } as EnsurePrResult); commit.commitFilesToBranch.mockResolvedValueOnce(null); - setGlobalConfig({ ...adminConfig, dryRun: true }); + GlobalConfig.set({ ...adminConfig, dryRun: true }); // FIXME: explicit assert condition expect( await branchWorker.processBranch({ @@ -875,7 +875,7 @@ describe('workers/branch/index', () => { schedule.isScheduledNow.mockReturnValueOnce(false); commit.commitFilesToBranch.mockResolvedValueOnce(null); - setGlobalConfig({ + GlobalConfig.set({ ...adminConfig, allowedPostUpgradeCommands: ['^echo {{{versioning}}}$'], allowPostUpgradeCommandTemplating: true, @@ -953,7 +953,7 @@ describe('workers/branch/index', () => { schedule.isScheduledNow.mockReturnValueOnce(false); commit.commitFilesToBranch.mockResolvedValueOnce(null); - setGlobalConfig({ + GlobalConfig.set({ ...adminConfig, allowedPostUpgradeCommands: ['^exit 1$'], allowPostUpgradeCommandTemplating: true, @@ -1022,7 +1022,7 @@ describe('workers/branch/index', () => { schedule.isScheduledNow.mockReturnValueOnce(false); commit.commitFilesToBranch.mockResolvedValueOnce(null); - setGlobalConfig({ + GlobalConfig.set({ ...adminConfig, allowedPostUpgradeCommands: ['^echo {{{versioning}}}$'], allowPostUpgradeCommandTemplating: false, @@ -1103,7 +1103,7 @@ describe('workers/branch/index', () => { schedule.isScheduledNow.mockReturnValueOnce(false); commit.commitFilesToBranch.mockResolvedValueOnce(null); - setGlobalConfig({ + GlobalConfig.set({ ...adminConfig, allowedPostUpgradeCommands: ['^echo {{{depName}}}$'], allowPostUpgradeCommandTemplating: true, @@ -1238,7 +1238,7 @@ describe('workers/branch/index', () => { schedule.isScheduledNow.mockReturnValueOnce(false); commit.commitFilesToBranch.mockResolvedValueOnce(null); - setGlobalConfig({ + GlobalConfig.set({ ...adminConfig, allowedPostUpgradeCommands: ['^echo hardcoded-string$'], allowPostUpgradeCommandTemplating: true, diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts index 56f107a55a4a24..4173209ffa0c0d 100644 --- a/lib/workers/branch/index.ts +++ b/lib/workers/branch/index.ts @@ -1,5 +1,5 @@ import { DateTime } from 'luxon'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { CONFIG_VALIDATION, @@ -418,7 +418,7 @@ export async function processBranch( } else if (config.updatedArtifacts?.length && branchPr) { // If there are artifacts, no errors, and an existing PR then ensure any artifacts error comment is removed // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( `DRY-RUN: Would ensure comment removal in PR #${branchPr.number}` ); @@ -484,7 +484,7 @@ export async function processBranch( const mergeStatus = await tryBranchAutomerge(config); logger.debug(`mergeStatus=${mergeStatus}`); if (mergeStatus === 'automerged') { - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would delete branch' + config.branchName); } else { await deleteBranchSilently(config.branchName); @@ -662,7 +662,7 @@ export async function processBranch( config.suppressNotifications.includes('lockFileErrors') ) ) { - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( `DRY-RUN: Would ensure lock file error comment in PR #${pr.number}` ); diff --git a/lib/workers/branch/lock-files/index.spec.ts b/lib/workers/branch/lock-files/index.spec.ts index f226dcec5a8775..6adeb1205d2f0f 100644 --- a/lib/workers/branch/lock-files/index.spec.ts +++ b/lib/workers/branch/lock-files/index.spec.ts @@ -1,6 +1,6 @@ import { git, mocked } from '../../../../test/util'; import { getConfig } from '../../../config/defaults'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import * as _lockFiles from '../../../manager/npm/post-update'; import * as _lerna from '../../../manager/npm/post-update/lerna'; import * as _npm from '../../../manager/npm/post-update/npm'; @@ -31,7 +31,7 @@ const { writeUpdatedPackageFiles, getAdditionalFiles } = lockFiles; describe('workers/branch/lock-files/index', () => { describe('writeUpdatedPackageFiles', () => { beforeEach(() => { - setGlobalConfig({ + GlobalConfig.set({ localDir: 'some-tmp-dir', }); fs.outputFile = jest.fn(); @@ -70,7 +70,7 @@ describe('workers/branch/lock-files/index', () => { }); describe('getAdditionalFiles', () => { beforeEach(() => { - setGlobalConfig({ + GlobalConfig.set({ localDir: 'some-tmp-dir', }); git.getFile.mockResolvedValueOnce('some lock file contents'); diff --git a/lib/workers/branch/reuse.ts b/lib/workers/branch/reuse.ts index 8d53647b3e180a..a114fd864fa7d7 100644 --- a/lib/workers/branch/reuse.ts +++ b/lib/workers/branch/reuse.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { platform } from '../../platform'; import type { RangeStrategy } from '../../types'; @@ -36,7 +36,7 @@ export async function shouldReuseExistingBranch( if (pr.labels?.includes(config.rebaseLabel)) { logger.debug(`Manual rebase requested via PR labels for #${pr.number}`); // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( `DRY-RUN: Would delete label ${config.rebaseLabel} from #${pr.number}` ); diff --git a/lib/workers/pr/automerge.ts b/lib/workers/pr/automerge.ts index f96dd04b3dd8ae..a03f15886da1c8 100644 --- a/lib/workers/pr/automerge.ts +++ b/lib/workers/pr/automerge.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { logger } from '../../logger'; import { Pr, platform } from '../../platform'; import { BranchStatus } from '../../types'; @@ -76,7 +76,7 @@ export async function checkAutoMerge( if (automergeType === 'pr-comment') { logger.debug(`Applying automerge comment: ${automergeComment}`); // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( `DRY-RUN: Would add PR automerge comment to PR #${pr.number}` ); @@ -100,7 +100,7 @@ export async function checkAutoMerge( } // Let's merge this // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( `DRY-RUN: Would merge PR #${pr.number} with strategy "${automergeStrategy}"` ); diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts index 1b50dcbd790130..c6b78986057b49 100644 --- a/lib/workers/pr/index.ts +++ b/lib/workers/pr/index.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { PLATFORM_INTEGRATION_UNAUTHORIZED, @@ -70,7 +70,7 @@ export async function addAssigneesReviewers( } if (assignees.length > 0) { // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would add assignees to PR #${pr.number}`); } else { await platform.addAssignees(pr.number, assignees); @@ -99,7 +99,7 @@ export async function addAssigneesReviewers( } if (reviewers.length > 0) { // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would add reviewers to PR #${pr.number}`); } else { await platform.addReviewers(pr.number, reviewers); @@ -378,7 +378,7 @@ export async function ensurePr( ); } // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would update PR #${existingPr.number}`); } else { await platform.updatePr({ @@ -401,7 +401,7 @@ export async function ensurePr( let pr: Pr; try { // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would create PR: ' + prTitle); pr = { number: 0, displayNumber: 'Dry run PR' } as never; } else { @@ -444,7 +444,7 @@ export async function ensurePr( { branch: branchName }, 'Deleting branch due to server error' ); - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would delete branch: ' + config.branchName); } else { await deleteBranch(branchName); @@ -465,7 +465,7 @@ export async function ensurePr( content = platform.massageMarkdown(content); logger.debug('Adding branch automerge failure message to PR'); // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would add comment to PR #${pr.number}`); } else { await platform.ensureComment({ diff --git a/lib/workers/repository/dependency-dashboard.spec.ts b/lib/workers/repository/dependency-dashboard.spec.ts index 2b12e6518416df..94b4edd93a8415 100644 --- a/lib/workers/repository/dependency-dashboard.spec.ts +++ b/lib/workers/repository/dependency-dashboard.spec.ts @@ -7,7 +7,7 @@ import { logger, platform, } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { PlatformId } from '../../constants'; import type { Platform } from '../../platform'; import { BranchConfig, BranchResult, BranchUpgradeConfig } from '../types'; @@ -32,7 +32,7 @@ async function dryRun( ensureIssueCalls = 0 ) { jest.clearAllMocks(); - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); await dependencyDashboard.ensureDependencyDashboard(config, branches); expect(platform.ensureIssueClosing).toHaveBeenCalledTimes( ensureIssueClosingCalls @@ -67,7 +67,7 @@ describe('workers/repository/dependency-dashboard', () => { describe('ensureDependencyDashboard()', () => { beforeEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('do nothing if dependencyDashboard is disabled', async () => { const branches: BranchConfig[] = []; diff --git a/lib/workers/repository/dependency-dashboard.ts b/lib/workers/repository/dependency-dashboard.ts index 6d1e9404e5c618..ce2dfea6f29d32 100644 --- a/lib/workers/repository/dependency-dashboard.ts +++ b/lib/workers/repository/dependency-dashboard.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import { nameFromLevel } from 'bunyan'; -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { getProblems, logger } from '../../logger'; import { platform } from '../../platform'; @@ -111,7 +111,7 @@ export async function ensureDependencyDashboard( ) ) ) { - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( { title: config.dependencyDashboardTitle }, 'DRY-RUN: Would close Dependency Dashboard' @@ -132,7 +132,7 @@ export async function ensureDependencyDashboard( is.nonEmptyArray(branches) && branches.some((branch) => branch.result !== BranchResult.Automerged); if (config.dependencyDashboardAutoclose && !hasBranches) { - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( { title: config.dependencyDashboardTitle }, 'DRY-RUN: Would close Dependency Dashboard' @@ -345,7 +345,7 @@ export async function ensureDependencyDashboard( } } - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info( { title: config.dependencyDashboardTitle }, 'DRY-RUN: Would ensure Dependency Dashboard' diff --git a/lib/workers/repository/error-config.spec.ts b/lib/workers/repository/error-config.spec.ts index 6f791725ce62b8..f940702b30c259 100644 --- a/lib/workers/repository/error-config.spec.ts +++ b/lib/workers/repository/error-config.spec.ts @@ -1,6 +1,6 @@ import { mock } from 'jest-mock-extended'; import { RenovateConfig, getConfig, platform } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import { CONFIG_VALIDATION } from '../../constants/error-messages'; import { Pr } from '../../platform'; import { PrState } from '../../types'; @@ -17,7 +17,7 @@ beforeEach(() => { describe('workers/repository/error-config', () => { describe('raiseConfigWarningIssue()', () => { beforeEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('creates issues', async () => { const error = new Error(CONFIG_VALIDATION); @@ -32,7 +32,7 @@ describe('workers/repository/error-config', () => { error.validationSource = 'package.json'; error.validationMessage = 'some-message'; platform.ensureIssue.mockResolvedValueOnce('created'); - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); const res = await raiseConfigWarningIssue(config, error); expect(res).toBeUndefined(); }); @@ -57,7 +57,7 @@ describe('workers/repository/error-config', () => { number: 1, state: PrState.Open, }); - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); const res = await raiseConfigWarningIssue(config, error); expect(res).toBeUndefined(); }); diff --git a/lib/workers/repository/error-config.ts b/lib/workers/repository/error-config.ts index 5b10967bac489b..c692ed49924ec9 100644 --- a/lib/workers/repository/error-config.ts +++ b/lib/workers/repository/error-config.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { logger } from '../../logger'; import { platform } from '../../platform'; @@ -26,7 +26,7 @@ export async function raiseConfigWarningIssue( logger.debug('Updating onboarding PR with config error notice'); body = `## Action Required: Fix Renovate Configuration\n\n${body}`; body += `\n\nOnce you have resolved this problem (in this onboarding branch), Renovate will return to providing you with a preview of your repository's configuration.`; - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would update PR #${pr.number}`); } else { try { @@ -39,7 +39,7 @@ export async function raiseConfigWarningIssue( logger.warn({ err }, 'Error updating onboarding PR'); } } - } else if (getGlobalConfig().dryRun) { + } else if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would ensure config error issue'); } else { const once = false; diff --git a/lib/workers/repository/finalise/prune.spec.ts b/lib/workers/repository/finalise/prune.spec.ts index 6e2c0c7418e180..a57909be0e50c8 100644 --- a/lib/workers/repository/finalise/prune.spec.ts +++ b/lib/workers/repository/finalise/prune.spec.ts @@ -4,7 +4,7 @@ import { git, platform, } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { PlatformId } from '../../../constants'; import * as cleanup from './prune'; @@ -22,7 +22,7 @@ beforeEach(() => { describe('workers/repository/finalise/prune', () => { describe('pruneStaleBranches()', () => { beforeEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); it('returns if no branchList', async () => { delete config.branchList; @@ -69,7 +69,7 @@ describe('workers/repository/finalise/prune', () => { }); it('does nothing on dryRun', async () => { config.branchList = ['renovate/a', 'renovate/b']; - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); git.getBranchList.mockReturnValueOnce( config.branchList.concat(['renovate/c']) ); @@ -109,7 +109,7 @@ describe('workers/repository/finalise/prune', () => { }); it('skips comment if dry run', async () => { config.branchList = ['renovate/a', 'renovate/b']; - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); git.getBranchList.mockReturnValueOnce( config.branchList.concat(['renovate/c']) ); @@ -124,7 +124,7 @@ describe('workers/repository/finalise/prune', () => { }); it('dry run delete branch no PR', async () => { config.branchList = ['renovate/a', 'renovate/b']; - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); git.getBranchList.mockReturnValueOnce( config.branchList.concat(['renovate/c']) ); diff --git a/lib/workers/repository/finalise/prune.ts b/lib/workers/repository/finalise/prune.ts index 94cc51609d690d..17aaf3bd05d235 100644 --- a/lib/workers/repository/finalise/prune.ts +++ b/lib/workers/repository/finalise/prune.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import type { RenovateConfig } from '../../../config/types'; import { REPOSITORY_CHANGED } from '../../../constants/error-messages'; import { logger } from '../../../logger'; @@ -31,7 +31,7 @@ async function cleanUpBranches( { prNo: pr.number, prTitle: pr.title }, 'Branch is modified - skipping PR autoclosing' ); - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would add Autoclosing Skipped comment to PR`); } else { await platform.ensureComment({ @@ -41,7 +41,7 @@ async function cleanUpBranches( 'This PR has been flagged for autoclosing, however it is being skipped due to the branch being already modified. Please close/delete it manually or report a bug if you think this is in error.', }); } - } else if (getGlobalConfig().dryRun) { + } else if (GlobalConfig.get('dryRun')) { logger.info( { prNo: pr.number, prTitle: pr.title }, `DRY-RUN: Would autoclose PR` @@ -62,7 +62,7 @@ async function cleanUpBranches( }); await deleteBranch(branchName); } - } else if (getGlobalConfig().dryRun) { + } else if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would delete orphan branch ${branchName}`); } else { logger.info({ branch: branchName }, `Deleting orphan branch`); diff --git a/lib/workers/repository/index.spec.ts b/lib/workers/repository/index.spec.ts index 212de3ee05947e..e45c1b78ef2f6d 100644 --- a/lib/workers/repository/index.spec.ts +++ b/lib/workers/repository/index.spec.ts @@ -1,7 +1,7 @@ import { mock } from 'jest-mock-extended'; import { RenovateConfig, getConfig, mocked } from '../../../test/util'; -import { setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import * as _process from './process'; import { ExtractResult } from './process/extract-update'; import { renovateRepository } from '.'; @@ -18,7 +18,7 @@ describe('workers/repository/index', () => { let config: RenovateConfig; beforeEach(() => { config = getConfig(); - setGlobalConfig({ localDir: '' }); + GlobalConfig.set({ localDir: '' }); }); it('runs', async () => { process.extractDependencies.mockResolvedValue(mock()); diff --git a/lib/workers/repository/index.ts b/lib/workers/repository/index.ts index c658082f0f2d3d..1357f316557f86 100644 --- a/lib/workers/repository/index.ts +++ b/lib/workers/repository/index.ts @@ -1,5 +1,5 @@ import fs from 'fs-extra'; -import { getGlobalConfig, setGlobalConfig } from '../../config/global'; +import { GlobalConfig } from '../../config/global'; import type { RenovateConfig } from '../../config/types'; import { logger, setMeta } from '../../logger'; import { removeDanglingContainers } from '../../util/exec/docker'; @@ -30,14 +30,14 @@ export async function renovateRepository( canRetry = true ): Promise { splitInit(); - let config = setGlobalConfig(repoConfig); + let config = GlobalConfig.set(repoConfig); await removeDanglingContainers(); setMeta({ repository: config.repository }); logger.info({ renovateVersion }, 'Repository started'); logger.trace({ config }); let repoResult: ProcessResult; queue.clear(); - const { localDir } = getGlobalConfig(); + const { localDir } = GlobalConfig.get(); try { await fs.ensureDir(localDir); logger.debug('Using localDir: ' + localDir); diff --git a/lib/workers/repository/init/cache.spec.ts b/lib/workers/repository/init/cache.spec.ts index bb3de366992a89..9f06b635a18c7a 100644 --- a/lib/workers/repository/init/cache.spec.ts +++ b/lib/workers/repository/init/cache.spec.ts @@ -1,5 +1,5 @@ import { RenovateConfig, getConfig } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import { initializeCaches } from './cache'; describe('workers/repository/init/cache', () => { @@ -7,7 +7,7 @@ describe('workers/repository/init/cache', () => { let config: RenovateConfig; beforeEach(() => { config = { ...getConfig() }; - setGlobalConfig({ cacheDir: '' }); + GlobalConfig.set({ cacheDir: '' }); }); it('initializes', async () => { expect(await initializeCaches(config)).toBeUndefined(); diff --git a/lib/workers/repository/init/index.spec.ts b/lib/workers/repository/init/index.spec.ts index d21970e174a77d..a166c3d70219c3 100644 --- a/lib/workers/repository/init/index.spec.ts +++ b/lib/workers/repository/init/index.spec.ts @@ -1,5 +1,5 @@ import { logger, mocked } from '../../../../test/util'; -import { setGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import * as _secrets from '../../../config/secrets'; import * as _onboarding from '../onboarding/branch'; import * as _apis from './apis'; @@ -24,10 +24,10 @@ const secrets = mocked(_secrets); describe('workers/repository/init/index', () => { beforeEach(() => { - setGlobalConfig({ localDir: '', cacheDir: '' }); + GlobalConfig.set({ localDir: '', cacheDir: '' }); }); afterEach(() => { - setGlobalConfig(); + GlobalConfig.reset(); }); describe('initRepo', () => { diff --git a/lib/workers/repository/onboarding/branch/config.spec.ts b/lib/workers/repository/onboarding/branch/config.spec.ts index 7c9bc2e3157c80..c5e62f9c56c86c 100644 --- a/lib/workers/repository/onboarding/branch/config.spec.ts +++ b/lib/workers/repository/onboarding/branch/config.spec.ts @@ -1,5 +1,5 @@ import { RenovateConfig, getConfig } from '../../../../../test/util'; -import { setGlobalConfig } from '../../../../config/global'; +import { GlobalConfig } from '../../../../config/global'; import * as presets from '../../../../config/presets/local'; import { PRESET_DEP_NOT_FOUND } from '../../../../config/presets/util'; import { getOnboardingConfig, getOnboardingConfigContents } from './config'; @@ -12,7 +12,7 @@ describe('workers/repository/onboarding/branch/config', () => { let config: RenovateConfig; beforeAll(() => { - setGlobalConfig({ + GlobalConfig.set({ localDir: '', }); }); diff --git a/lib/workers/repository/onboarding/branch/create.ts b/lib/workers/repository/onboarding/branch/create.ts index a449e4d080d563..5b9bf89d242e23 100644 --- a/lib/workers/repository/onboarding/branch/create.ts +++ b/lib/workers/repository/onboarding/branch/create.ts @@ -1,5 +1,5 @@ import { configFileNames } from '../../../../config/app-strings'; -import { getGlobalConfig } from '../../../../config/global'; +import { GlobalConfig } from '../../../../config/global'; import type { RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; import { commitFiles } from '../../../../util/git'; @@ -26,7 +26,7 @@ export async function createOnboardingBranch( const commitMessage = commitMessageFactory.create(); // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would commit files to onboarding branch'); return null; } diff --git a/lib/workers/repository/onboarding/branch/index.ts b/lib/workers/repository/onboarding/branch/index.ts index 9910884ef0f026..26a453c781c996 100644 --- a/lib/workers/repository/onboarding/branch/index.ts +++ b/lib/workers/repository/onboarding/branch/index.ts @@ -1,5 +1,5 @@ import { mergeChildConfig } from '../../../../config'; -import { getGlobalConfig } from '../../../../config/global'; +import { GlobalConfig } from '../../../../config/global'; import type { RenovateConfig } from '../../../../config/types'; import { REPOSITORY_FORKED, @@ -70,7 +70,7 @@ export async function checkOnboardingBranch( ); } } - if (!getGlobalConfig().dryRun) { + if (!GlobalConfig.get('dryRun')) { await checkoutBranch(onboardingBranch); } const branchList = [onboardingBranch]; diff --git a/lib/workers/repository/onboarding/branch/rebase.spec.ts b/lib/workers/repository/onboarding/branch/rebase.spec.ts index c0d6e04898d750..23857990739529 100644 --- a/lib/workers/repository/onboarding/branch/rebase.spec.ts +++ b/lib/workers/repository/onboarding/branch/rebase.spec.ts @@ -1,12 +1,12 @@ import { RenovateConfig, defaultConfig, git } from '../../../../../test/util'; -import { setGlobalConfig } from '../../../../config/global'; +import { GlobalConfig } from '../../../../config/global'; import { rebaseOnboardingBranch } from './rebase'; jest.mock('../../../../util/git'); describe('workers/repository/onboarding/branch/rebase', () => { beforeAll(() => { - setGlobalConfig({ + GlobalConfig.set({ localDir: '', }); }); diff --git a/lib/workers/repository/onboarding/branch/rebase.ts b/lib/workers/repository/onboarding/branch/rebase.ts index b905ebd9848c3a..a49c4eafd4446d 100644 --- a/lib/workers/repository/onboarding/branch/rebase.ts +++ b/lib/workers/repository/onboarding/branch/rebase.ts @@ -1,5 +1,5 @@ import { configFileNames } from '../../../../config/app-strings'; -import { getGlobalConfig } from '../../../../config/global'; +import { GlobalConfig } from '../../../../config/global'; import type { RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; import { @@ -43,7 +43,7 @@ export async function rebaseOnboardingBranch( const commitMessage = commitMessageFactory.create(); // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would rebase files in onboarding branch'); return null; } diff --git a/lib/workers/repository/onboarding/pr/index.spec.ts b/lib/workers/repository/onboarding/pr/index.spec.ts index caa5e23b1f4806..debdb38980893b 100644 --- a/lib/workers/repository/onboarding/pr/index.spec.ts +++ b/lib/workers/repository/onboarding/pr/index.spec.ts @@ -5,7 +5,7 @@ import { partial, platform, } from '../../../../../test/util'; -import { setGlobalConfig } from '../../../../config/global'; +import { GlobalConfig } from '../../../../config/global'; import { logger } from '../../../../logger'; import type { PackageFile } from '../../../../manager/types'; import { Pr } from '../../../../platform'; @@ -31,7 +31,7 @@ describe('workers/repository/onboarding/pr/index', () => { branches = []; platform.massageMarkdown = jest.fn((input) => input); platform.createPr.mockResolvedValueOnce(partial({})); - setGlobalConfig(); + GlobalConfig.reset(); }); let createPrBody: string; it('returns if onboarded', async () => { @@ -89,7 +89,7 @@ describe('workers/repository/onboarding/pr/index', () => { expect(platform.createPr).toHaveBeenCalledTimes(1); }); it('dryrun of updates PR when modified', async () => { - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); config.baseBranch = 'some-branch'; platform.getBranchPr.mockResolvedValueOnce( partial({ @@ -108,7 +108,7 @@ describe('workers/repository/onboarding/pr/index', () => { ); }); it('dryrun of creates PR', async () => { - setGlobalConfig({ dryRun: true }); + GlobalConfig.set({ dryRun: true }); await ensureOnboardingPr(config, packageFiles, branches); expect(logger.info).toHaveBeenCalledWith( 'DRY-RUN: Would check branch renovate/configure' diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index 0f5ac5dcc48972..bf0c7be77dd29f 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../../../config/global'; +import { GlobalConfig } from '../../../../config/global'; import type { RenovateConfig } from '../../../../config/types'; import { logger } from '../../../../logger'; import type { PackageFile } from '../../../../manager/types'; @@ -66,7 +66,7 @@ If you need any further assistance then you can also [request help here](${confi prBody = prBody.replace('{{PACKAGE FILES}}\n', ''); } let configDesc = ''; - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info(`DRY-RUN: Would check branch ${config.onboardingBranch}`); } else if (await isBranchModified(config.onboardingBranch)) { configDesc = emojify( @@ -114,7 +114,7 @@ If you need any further assistance then you can also [request help here](${confi return; } // PR must need updating - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would update onboarding PR'); } else { await platform.updatePr({ @@ -129,7 +129,7 @@ If you need any further assistance then you can also [request help here](${confi logger.debug('Creating onboarding PR'); const labels: string[] = config.addLabels ?? []; try { - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Would create onboarding PR'); } else { const pr = await platform.createPr({ diff --git a/lib/workers/repository/process/deprecated.ts b/lib/workers/repository/process/deprecated.ts index 2c438d83948096..53fdc99cf1912a 100644 --- a/lib/workers/repository/process/deprecated.ts +++ b/lib/workers/repository/process/deprecated.ts @@ -1,4 +1,4 @@ -import { getGlobalConfig } from '../../../config/global'; +import { GlobalConfig } from '../../../config/global'; import type { RenovateConfig } from '../../../config/types'; import { logger } from '../../../logger'; import type { PackageFile } from '../../../manager/types'; @@ -55,7 +55,7 @@ export async function raiseDeprecationWarnings( .join(', ')}`; issueBody += `\n\nIf you don't care about this, you can close this issue and not be warned about \`${depName}\`'s deprecation again. If you would like to completely disable all future deprecation warnings then add the following to your config:\n\n\`\`\`\n"suppressNotifications": ["deprecationWarningIssues"]\n\`\`\`\n\n`; // istanbul ignore if - if (getGlobalConfig().dryRun) { + if (GlobalConfig.get('dryRun')) { logger.info('DRY-RUN: Ensure deprecation warning issue for ' + depName); } else { const ensureOnce = true; From cb3d75ec4e719a6c54d55d68ec135161a1c994aa Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 24 Nov 2021 12:14:24 +0700 Subject: [PATCH 149/248] feat(platform/gitlab): confidential issues (#12728) --- docs/usage/configuration-options.md | 7 ++ lib/config/options/index.ts | 8 ++ lib/config/types.ts | 1 + .../gitlab/__snapshots__/index.spec.ts.snap | 93 ++++++++++++++++++- lib/platform/gitlab/index.spec.ts | 57 ++++++++++++ lib/platform/gitlab/index.ts | 3 + lib/platform/types.ts | 1 + .../repository/dependency-dashboard.ts | 1 + lib/workers/repository/error-config.ts | 1 + lib/workers/repository/process/deprecated.ts | 1 + 10 files changed, 169 insertions(+), 4 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 35580f5723bb30..d71ff1f41c449a 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -377,6 +377,13 @@ Set to `null` (not recommended) to fully omit `--ignore-platform-reqs/--ignore-p This requires the Renovate image to be fully compatible with your Composer platform requirements in order for the Composer invocation to succeed, otherwise Renovate will fail to create the updated lock file. The Composer output should inform you about the reasons the update failed. +## confidential + +If enabled, all issues created by Renovate are set as confidential, even in a public repository. +**Note:** the Dependency Dashboard issue will also be confidential. +By default issues created by Renovate are visible to all users. +This option is applicable to GitLab only. + ## configWarningReuseIssue Renovate's default behavior is to reuse/reopen a single Config Warning issue in each repository so as to keep the "noise" down. diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 2321dbbc47af8a..2d0d0bebb3aaf1 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -1667,6 +1667,14 @@ const options: RenovateOptions[] = [ default: false, supportedPlatforms: ['gitlab'], }, + { + name: 'confidential', + description: + 'If enabled, issues created by Renovate are set as confidential.', + type: 'boolean', + default: false, + supportedPlatforms: ['gitlab'], + }, { name: 'reviewersSampleSize', description: 'Take a random sample of given size from reviewers.', diff --git a/lib/config/types.ts b/lib/config/types.ts index 470709ae7e8b68..c1ca573ce60c5e 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -27,6 +27,7 @@ export interface RenovateSharedConfig { manager?: string; commitMessage?: string; commitMessagePrefix?: string; + confidential?: boolean; draftPR?: boolean; enabled?: boolean; enabledManagers?: string[]; diff --git a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap index f12f50e8788ef3..35afb53a28cdcd 100644 --- a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap +++ b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap @@ -1190,6 +1190,41 @@ Array [ ] `; +exports[`platform/gitlab/index ensureIssue() creates confidential issue 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://gitlab.com/api/v4/projects/undefined/issues?per_page=100&scope=created_by_me&state=opened", + }, + Object { + "body": Object { + "confidential": true, + "description": "new-content", + "labels": "", + "title": "new-title", + }, + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "content-length": "81", + "content-type": "application/json", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "POST", + "url": "https://gitlab.com/api/v4/projects/undefined/issues", + }, +] +`; + exports[`platform/gitlab/index ensureIssue() creates issue 1`] = ` Array [ Object { @@ -1205,6 +1240,7 @@ Array [ }, Object { "body": Object { + "confidential": false, "description": "new-content", "labels": "", "title": "new-title", @@ -1213,7 +1249,7 @@ Array [ "accept": "application/json", "accept-encoding": "gzip, deflate, br", "authorization": "Bearer 123test", - "content-length": "61", + "content-length": "82", "content-type": "application/json", "host": "gitlab.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", @@ -1239,6 +1275,7 @@ Array [ }, Object { "body": Object { + "confidential": false, "description": "new-content", "labels": "Renovate,Maintenance", "title": "new-title", @@ -1247,7 +1284,7 @@ Array [ "accept": "application/json", "accept-encoding": "gzip, deflate, br", "authorization": "Bearer 123test", - "content-length": "81", + "content-length": "102", "content-type": "application/json", "host": "gitlab.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", @@ -1285,6 +1322,52 @@ Array [ ] `; +exports[`platform/gitlab/index ensureIssue() updates confidential issue 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://gitlab.com/api/v4/projects/undefined/issues?per_page=100&scope=created_by_me&state=opened", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://gitlab.com/api/v4/projects/undefined/issues/2", + }, + Object { + "body": Object { + "confidential": true, + "description": "newer-content", + "labels": "Renovate,Maintenance", + "title": "title-2", + }, + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "content-length": "101", + "content-type": "application/json", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "PUT", + "url": "https://gitlab.com/api/v4/projects/undefined/issues/2", + }, +] +`; + exports[`platform/gitlab/index ensureIssue() updates issue 1`] = ` Array [ Object { @@ -1311,6 +1394,7 @@ Array [ }, Object { "body": Object { + "confidential": false, "description": "newer-content", "labels": "", "title": "title-2", @@ -1319,7 +1403,7 @@ Array [ "accept": "application/json", "accept-encoding": "gzip, deflate, br", "authorization": "Bearer 123test", - "content-length": "61", + "content-length": "82", "content-type": "application/json", "host": "gitlab.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", @@ -1356,6 +1440,7 @@ Array [ }, Object { "body": Object { + "confidential": false, "description": "newer-content", "labels": "Renovate,Maintenance", "title": "title-2", @@ -1364,7 +1449,7 @@ Array [ "accept": "application/json", "accept-encoding": "gzip, deflate, br", "authorization": "Bearer 123test", - "content-length": "81", + "content-length": "102", "content-type": "application/json", "host": "gitlab.com", "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts index b4714de7ed8c13..f269426ed379b6 100644 --- a/lib/platform/gitlab/index.spec.ts +++ b/lib/platform/gitlab/index.spec.ts @@ -890,6 +890,63 @@ describe('platform/gitlab/index', () => { expect(res).toBeNull(); expect(httpMock.getTrace()).toMatchSnapshot(); }); + + it('creates confidential issue', async () => { + httpMock + .scope(gitlabApiHost) + .get( + '/api/v4/projects/undefined/issues?per_page=100&scope=created_by_me&state=opened' + ) + .reply(200, [ + { + iid: 1, + title: 'title-1', + }, + { + iid: 2, + title: 'title-2', + }, + ]) + .post('/api/v4/projects/undefined/issues') + .reply(200); + const res = await gitlab.ensureIssue({ + title: 'new-title', + body: 'new-content', + confidential: true, + }); + expect(res).toBe('created'); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('updates confidential issue', async () => { + httpMock + .scope(gitlabApiHost) + .get( + '/api/v4/projects/undefined/issues?per_page=100&scope=created_by_me&state=opened' + ) + .reply(200, [ + { + iid: 1, + title: 'title-1', + }, + { + iid: 2, + title: 'title-2', + }, + ]) + .get('/api/v4/projects/undefined/issues/2') + .reply(200, { description: 'new-content' }) + .put('/api/v4/projects/undefined/issues/2') + .reply(200); + const res = await gitlab.ensureIssue({ + title: 'title-2', + body: 'newer-content', + labels: ['Renovate', 'Maintenance'], + confidential: true, + }); + expect(res).toBe('updated'); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); }); describe('ensureIssueClosing()', () => { it('closes issue', async () => { diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index 97bb7e18cbc574..447e59dd4b5842 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -862,6 +862,7 @@ export async function ensureIssue({ reuseTitle, body, labels, + confidential, }: EnsureIssueConfig): Promise<'updated' | 'created' | null> { logger.debug(`ensureIssue()`); const description = massageMarkdown(sanitize(body)); @@ -886,6 +887,7 @@ export async function ensureIssue({ title, description, labels: (labels || issue.labels || []).join(','), + confidential: confidential ?? false, }, } ); @@ -897,6 +899,7 @@ export async function ensureIssue({ title, description, labels: (labels || []).join(','), + confidential: confidential ?? false, }, }); logger.info('Issue created'); diff --git a/lib/platform/types.ts b/lib/platform/types.ts index 549d2368de8b54..86768972bc5bc8 100644 --- a/lib/platform/types.ts +++ b/lib/platform/types.ts @@ -106,6 +106,7 @@ export interface EnsureIssueConfig { labels?: string[]; once?: boolean; shouldReOpen?: boolean; + confidential?: boolean; } export interface BranchStatusConfig { branchName: string; diff --git a/lib/workers/repository/dependency-dashboard.ts b/lib/workers/repository/dependency-dashboard.ts index ce2dfea6f29d32..7953327c40e64b 100644 --- a/lib/workers/repository/dependency-dashboard.ts +++ b/lib/workers/repository/dependency-dashboard.ts @@ -356,6 +356,7 @@ export async function ensureDependencyDashboard( reuseTitle, body: issueBody, labels: config.dependencyDashboardLabels, + confidential: config.confidential, }); } } diff --git a/lib/workers/repository/error-config.ts b/lib/workers/repository/error-config.ts index c692ed49924ec9..98601171f9e250 100644 --- a/lib/workers/repository/error-config.ts +++ b/lib/workers/repository/error-config.ts @@ -49,6 +49,7 @@ export async function raiseConfigWarningIssue( body, once, shouldReOpen: shouldReopen, + confidential: config.confidential, }); if (res === 'created') { logger.warn({ configError: error, res }, 'Config Warning'); diff --git a/lib/workers/repository/process/deprecated.ts b/lib/workers/repository/process/deprecated.ts index 53fdc99cf1912a..af36e8decab945 100644 --- a/lib/workers/repository/process/deprecated.ts +++ b/lib/workers/repository/process/deprecated.ts @@ -63,6 +63,7 @@ export async function raiseDeprecationWarnings( title: issueTitle, body: issueBody, once: ensureOnce, + confidential: config.confidential, }); } } From 51b2d09e0f8e2528fd135123dada02523c99a37d Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 24 Nov 2021 12:40:03 +0700 Subject: [PATCH 150/248] feat(platform): get file branchOrTag (#12710) --- lib/platform/azure/index.spec.ts | 16 ++ lib/platform/azure/index.ts | 8 +- .../__snapshots__/index.spec.ts.snap | 164 ++++++++++++++++++ lib/platform/bitbucket-server/index.spec.ts | 41 +++++ lib/platform/bitbucket-server/index.ts | 11 +- .../__snapshots__/index.spec.ts.snap | 52 ++++++ lib/platform/bitbucket/index.spec.ts | 24 +++ lib/platform/bitbucket/index.ts | 11 +- lib/platform/gitea/index.spec.ts | 21 +++ lib/platform/gitea/index.ts | 11 +- .../github/__snapshots__/index.spec.ts.snap | 122 +++++++++++++ lib/platform/github/index.spec.ts | 31 ++++ lib/platform/github/index.ts | 11 +- .../gitlab/__snapshots__/index.spec.ts.snap | 54 ++++++ lib/platform/gitlab/index.spec.ts | 36 ++++ lib/platform/gitlab/index.ts | 11 +- lib/platform/types.ts | 12 +- 17 files changed, 611 insertions(+), 25 deletions(-) diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts index 4a4d8bcc555d82..f9946440b64bec 100644 --- a/lib/platform/azure/index.spec.ts +++ b/lib/platform/azure/index.spec.ts @@ -1245,6 +1245,7 @@ describe('platform/azure/index', () => { const res = await azure.getJsonFile('file.json'); expect(res).toEqual(data); }); + it('returns file content in json5 format', async () => { const json5Data = ` { @@ -1263,6 +1264,21 @@ describe('platform/azure/index', () => { const res = await azure.getJsonFile('file.json5'); expect(res).toEqual({ foo: 'bar' }); }); + + it('ignores branchOrTag', async () => { + const data = { foo: 'bar' }; + azureApi.gitApi.mockImplementationOnce( + () => + ({ + getItemContent: jest.fn(() => + Promise.resolve(Readable.from(JSON.stringify(data))) + ), + } as any) + ); + const res = await azure.getJsonFile('file.json', undefined, 'dev'); + expect(res).toEqual(data); + }); + it('throws on malformed JSON', async () => { azureApi.gitApi.mockImplementationOnce( () => diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts index adacb465fef94d..cccec641fd7755 100644 --- a/lib/platform/azure/index.ts +++ b/lib/platform/azure/index.ts @@ -113,7 +113,8 @@ export async function getRepos(): Promise { export async function getRawFile( fileName: string, - repoName?: string + repoName?: string, + branchOrTag?: string ): Promise { const azureApiGit = await azureApi.gitApi(); @@ -133,9 +134,10 @@ export async function getRawFile( export async function getJsonFile( fileName: string, - repoName?: string + repoName?: string, + branchOrTag?: string ): Promise { - const raw = await getRawFile(fileName, repoName); + const raw = await getRawFile(fileName, repoName, branchOrTag); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap b/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap index ac53786634db08..e1dba3d9a65bca 100644 --- a/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap +++ b/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap @@ -2027,6 +2027,47 @@ Array [ ] `; +exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() ignores branchOrTag argument 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/rest/api/1.0/projects/SOME/repos/repo", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/rest/api/1.0/projects/SOME/repos/repo/branches/default", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000", + }, +] +`; + exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() returns file content 1`] = ` Array [ Object { @@ -2068,6 +2109,47 @@ Array [ ] `; +exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() returns file content from given repo 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/rest/api/1.0/projects/SOME/repos/repo", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/rest/api/1.0/projects/SOME/repos/repo/branches/default", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/rest/api/1.0/projects/DIFFERENT/repos/repo/browse/file.json?limit=20000", + }, +] +`; + exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() returns file content in json5 format 1`] = ` Array [ Object { @@ -6443,6 +6525,47 @@ Array [ ] `; +exports[`platform/bitbucket-server/index endpoint with path getJsonFile() ignores branchOrTag argument 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/SOME/repos/repo", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/SOME/repos/repo/branches/default", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000", + }, +] +`; + exports[`platform/bitbucket-server/index endpoint with path getJsonFile() returns file content 1`] = ` Array [ Object { @@ -6484,6 +6607,47 @@ Array [ ] `; +exports[`platform/bitbucket-server/index endpoint with path getJsonFile() returns file content from given repo 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/SOME/repos/repo", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/SOME/repos/repo/branches/default", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Basic YWJjOjEyMw==", + "host": "stash.renovatebot.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + "x-atlassian-token": "no-check", + }, + "method": "GET", + "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/DIFFERENT/repos/repo/browse/file.json?limit=20000", + }, +] +`; + exports[`platform/bitbucket-server/index endpoint with path getJsonFile() returns file content in json5 format 1`] = ` Array [ Object { diff --git a/lib/platform/bitbucket-server/index.spec.ts b/lib/platform/bitbucket-server/index.spec.ts index 2f77e0e4d03f01..cdd64adf09190f 100644 --- a/lib/platform/bitbucket-server/index.spec.ts +++ b/lib/platform/bitbucket-server/index.spec.ts @@ -2109,6 +2109,7 @@ Followed by some information. expect(res).toEqual(data); expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('returns file content in json5 format', async () => { const json5Data = ` { @@ -2129,6 +2130,46 @@ Followed by some information. expect(res).toEqual({ foo: 'bar' }); expect(httpMock.getTrace()).toMatchSnapshot(); }); + + it('returns file content from given repo', async () => { + const data = { foo: 'bar' }; + const scope = await initRepo(); + scope + .get( + `${urlPath}/rest/api/1.0/projects/DIFFERENT/repos/repo/browse/file.json?limit=20000` + ) + .reply(200, { + isLastPage: true, + lines: [{ text: JSON.stringify(data) }], + }); + const res = await bitbucket.getJsonFile( + 'file.json', + 'DIFFERENT/repo' + ); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('ignores branchOrTag argument', async () => { + const data = { foo: 'bar' }; + const scope = await initRepo(); + scope + .get( + `${urlPath}/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000` + ) + .reply(200, { + isLastPage: true, + lines: [{ text: JSON.stringify(data) }], + }); + const res = await bitbucket.getJsonFile( + 'file.json', + 'SOME/repo', + 'dev' + ); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + it('throws on malformed JSON', async () => { const scope = await initRepo(); scope diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts index 5b06c01dbc45b9..f7d2a194da7f0a 100644 --- a/lib/platform/bitbucket-server/index.ts +++ b/lib/platform/bitbucket-server/index.ts @@ -123,9 +123,11 @@ export async function getRepos(): Promise { export async function getRawFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const [project, slug] = repoName.split('/'); + const repo = repoName ?? config.repository; + const [project, slug] = repo.split('/'); const fileUrl = `./rest/api/1.0/projects/${project}/repos/${slug}/browse/${fileName}?limit=20000`; const res = await bitbucketServerHttp.getJson(fileUrl); const { isLastPage, lines, size } = res.body; @@ -139,9 +141,10 @@ export async function getRawFile( export async function getJsonFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const raw = await getRawFile(fileName, repoName); + const raw = await getRawFile(fileName, repoName, branchOrTag); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap index 44df44b929326c..5a3567ff52045f 100644 --- a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap +++ b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap @@ -912,6 +912,32 @@ Array [ ] `; +exports[`platform/bitbucket/index getJsonFile() ignores branchOrTag 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", + }, + Object { + "headers": Object { + "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/src/HEAD/file.json", + }, +] +`; + exports[`platform/bitbucket/index getJsonFile() returns file content 1`] = ` Array [ Object { @@ -938,6 +964,32 @@ Array [ ] `; +exports[`platform/bitbucket/index getJsonFile() returns file content from given repo 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", + }, + Object { + "headers": Object { + "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/different/repo/src/HEAD/file.json", + }, +] +`; + exports[`platform/bitbucket/index getJsonFile() returns file content in json5 format 1`] = ` Array [ Object { diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts index 2f8bda30a35b93..05cc557e711eeb 100644 --- a/lib/platform/bitbucket/index.spec.ts +++ b/lib/platform/bitbucket/index.spec.ts @@ -938,6 +938,7 @@ describe('platform/bitbucket/index', () => { expect(res).toEqual(data); expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('returns file content in json5 format', async () => { const json5Data = ` { @@ -953,6 +954,29 @@ describe('platform/bitbucket/index', () => { expect(res).toEqual({ foo: 'bar' }); expect(httpMock.getTrace()).toMatchSnapshot(); }); + + it('returns file content from given repo', async () => { + const data = { foo: 'bar' }; + const scope = await initRepoMock(); + scope + .get('/2.0/repositories/different/repo/src/HEAD/file.json') + .reply(200, JSON.stringify(data)); + const res = await bitbucket.getJsonFile('file.json', 'different/repo'); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('ignores branchOrTag', async () => { + const data = { foo: 'bar' }; + const scope = await initRepoMock(); + scope + .get('/2.0/repositories/some/repo/src/HEAD/file.json') + .reply(200, JSON.stringify(data)); + const res = await bitbucket.getJsonFile('file.json', 'some/repo', 'dev'); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + it('throws on malformed JSON', async () => { const scope = await initRepoMock(); scope diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts index 4ec06444c1b78a..31b36a17ff5d94 100644 --- a/lib/platform/bitbucket/index.ts +++ b/lib/platform/bitbucket/index.ts @@ -110,20 +110,23 @@ export async function getRepos(): Promise { export async function getRawFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { // See: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/src/%7Bcommit%7D/%7Bpath%7D + const repo = repoName ?? config.repository; const path = fileName; - const url = `/2.0/repositories/${repoName}/src/HEAD/${path}`; + const url = `/2.0/repositories/${repo}/src/HEAD/${path}`; const res = await bitbucketHttp.get(url); return res.body; } export async function getJsonFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const raw = await getRawFile(fileName, repoName); + const raw = await getRawFile(fileName, repoName, branchOrTag); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts index 01af9de574a19b..871c400d0271bb 100644 --- a/lib/platform/gitea/index.spec.ts +++ b/lib/platform/gitea/index.spec.ts @@ -1527,6 +1527,27 @@ describe('platform/gitea/index', () => { const res = await gitea.getJsonFile('file.json'); expect(res).toEqual(data); }); + + it('returns file content from given repo', async () => { + const data = { foo: 'bar' }; + helper.getRepoContents.mockResolvedValueOnce({ + contentString: JSON.stringify(data), + } as never); + await initFakeRepo({ full_name: 'different/repo' }); + const res = await gitea.getJsonFile('file.json', 'different/repo'); + expect(res).toEqual(data); + }); + + it('ignores branchOrTag', async () => { + const data = { foo: 'bar' }; + helper.getRepoContents.mockResolvedValueOnce({ + contentString: JSON.stringify(data), + } as never); + await initFakeRepo({ full_name: 'some/repo' }); + const res = await gitea.getJsonFile('file.json', 'some/repo', 'dev'); + expect(res).toEqual(data); + }); + it('returns file content in json5 format', async () => { const json5Data = ` { diff --git a/lib/platform/gitea/index.ts b/lib/platform/gitea/index.ts index e006e8883d5300..9ed3cd688c0fa2 100644 --- a/lib/platform/gitea/index.ts +++ b/lib/platform/gitea/index.ts @@ -211,17 +211,20 @@ const platform: Platform = { async getRawFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const contents = await helper.getRepoContents(repoName, fileName); + const repo = repoName ?? config.repository; + const contents = await helper.getRepoContents(repo, fileName); return contents.contentString; }, async getJsonFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const raw = await platform.getRawFile(fileName, repoName); + const raw = await platform.getRawFile(fileName, repoName, branchOrTag); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/github/__snapshots__/index.spec.ts.snap b/lib/platform/github/__snapshots__/index.spec.ts.snap index 57fcf445b09bf3..e95821a17a60e7 100644 --- a/lib/platform/github/__snapshots__/index.spec.ts.snap +++ b/lib/platform/github/__snapshots__/index.spec.ts.snap @@ -4945,6 +4945,67 @@ Array [ ] `; +exports[`platform/github/index getJsonFile() ignores branchOrTag 1`] = ` +Array [ + Object { + "graphql": Object { + "query": Object { + "__vars": Object { + "$name": "String!", + "$owner": "String!", + }, + "repository": Object { + "__args": Object { + "name": "$name", + "owner": "$owner", + }, + "autoMergeAllowed": null, + "defaultBranchRef": Object { + "name": null, + "target": Object { + "oid": null, + }, + }, + "hasIssuesEnabled": 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": "395", + "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", + }, + Object { + "headers": Object { + "accept": "application/vnd.github.v3+json", + "accept-encoding": "gzip, deflate, br", + "authorization": "token 123test", + "host": "api.github.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://api.github.com/repos/some/repo/contents/file.json", + }, +] +`; + exports[`platform/github/index getJsonFile() returns file content 1`] = ` Array [ Object { @@ -5006,6 +5067,67 @@ Array [ ] `; +exports[`platform/github/index getJsonFile() returns file content from given repo 1`] = ` +Array [ + Object { + "graphql": Object { + "query": Object { + "__vars": Object { + "$name": "String!", + "$owner": "String!", + }, + "repository": Object { + "__args": Object { + "name": "$name", + "owner": "$owner", + }, + "autoMergeAllowed": null, + "defaultBranchRef": Object { + "name": null, + "target": Object { + "oid": null, + }, + }, + "hasIssuesEnabled": null, + "isArchived": null, + "isFork": null, + "mergeCommitAllowed": null, + "nameWithOwner": null, + "rebaseMergeAllowed": null, + "squashMergeAllowed": null, + }, + }, + "variables": Object { + "name": "repo", + "owner": "different", + }, + }, + "headers": Object { + "accept": "application/vnd.github.v3+json", + "accept-encoding": "gzip, deflate, br", + "authorization": "token 123test", + "content-length": "400", + "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", + }, + Object { + "headers": Object { + "accept": "application/vnd.github.v3+json", + "accept-encoding": "gzip, deflate, br", + "authorization": "token 123test", + "host": "api.github.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://api.github.com/repos/different/repo/contents/file.json", + }, +] +`; + exports[`platform/github/index getJsonFile() returns file content in json5 format 1`] = ` Array [ Object { diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts index 1f4cb3419dfc62..a16ab9c08e44a4 100644 --- a/lib/platform/github/index.spec.ts +++ b/lib/platform/github/index.spec.ts @@ -2410,6 +2410,7 @@ describe('platform/github/index', () => { expect(res).toEqual(data); expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('returns file content in json5 format', async () => { const json5Data = ` { @@ -2427,6 +2428,36 @@ describe('platform/github/index', () => { expect(res).toEqual({ foo: 'bar' }); expect(httpMock.getTrace()).toMatchSnapshot(); }); + + it('returns file content from given repo', async () => { + const data = { foo: 'bar' }; + const scope = httpMock.scope(githubApiHost); + initRepoMock(scope, 'different/repo'); + await github.initRepo({ + repository: 'different/repo', + token: 'token', + } as any); + scope.get('/repos/different/repo/contents/file.json').reply(200, { + content: Buffer.from(JSON.stringify(data)).toString('base64'), + }); + const res = await github.getJsonFile('file.json', 'different/repo'); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('ignores branchOrTag', async () => { + const data = { foo: 'bar' }; + const scope = httpMock.scope(githubApiHost); + initRepoMock(scope, 'some/repo'); + await github.initRepo({ repository: 'some/repo', token: 'token' } as any); + scope.get('/repos/some/repo/contents/file.json').reply(200, { + content: Buffer.from(JSON.stringify(data)).toString('base64'), + }); + const res = await github.getJsonFile('file.json', 'some/repo', 'dev'); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + it('throws on malformed JSON', async () => { const scope = httpMock.scope(githubApiHost); initRepoMock(scope, 'some/repo'); diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts index e6b50f7f872ca0..4ead5ef8faf230 100644 --- a/lib/platform/github/index.ts +++ b/lib/platform/github/index.ts @@ -173,9 +173,11 @@ async function getBranchProtection( export async function getRawFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const url = `repos/${repoName}/contents/${fileName}`; + const repo = repoName ?? config.repository; + const url = `repos/${repo}/contents/${fileName}`; const res = await githubApi.getJson<{ content: string }>(url); const buf = res.body.content; const str = Buffer.from(buf, 'base64').toString(); @@ -184,9 +186,10 @@ export async function getRawFile( export async function getJsonFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const raw = await getRawFile(fileName, repoName); + const raw = await getRawFile(fileName, repoName, branchOrTag); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap index 35afb53a28cdcd..9a4910787a5d7a 100644 --- a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap +++ b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap @@ -2272,6 +2272,33 @@ Array [ ] `; +exports[`platform/gitlab/index getJsonFile() ingores branchOrTag 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://gitlab.com/api/v4/projects/some%2Frepo", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://gitlab.com/api/v4/projects/some%2Frepo/repository/files/dir%2Ffile.json?ref=HEAD", + }, +] +`; + exports[`platform/gitlab/index getJsonFile() returns file content 1`] = ` Array [ Object { @@ -2299,6 +2326,33 @@ Array [ ] `; +exports[`platform/gitlab/index getJsonFile() returns file content from given repo 1`] = ` +Array [ + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://gitlab.com/api/v4/projects/some%2Frepo", + }, + Object { + "headers": Object { + "accept": "application/json", + "accept-encoding": "gzip, deflate, br", + "authorization": "Bearer 123test", + "host": "gitlab.com", + "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", + }, + "method": "GET", + "url": "https://gitlab.com/api/v4/projects/different%2Frepo/repository/files/dir%2Ffile.json?ref=HEAD", + }, +] +`; + exports[`platform/gitlab/index getJsonFile() returns file content in json5 format 1`] = ` Array [ Object { diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts index f269426ed379b6..e4f42a679177d8 100644 --- a/lib/platform/gitlab/index.spec.ts +++ b/lib/platform/gitlab/index.spec.ts @@ -1984,6 +1984,7 @@ These updates have all been created already. Click a checkbox below to force a r expect(res).toEqual(data); expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('returns file content in json5 format', async () => { const json5Data = ` { @@ -2003,6 +2004,41 @@ These updates have all been created already. Click a checkbox below to force a r expect(res).toEqual({ foo: 'bar' }); expect(httpMock.getTrace()).toMatchSnapshot(); }); + + it('returns file content from given repo', async () => { + const data = { foo: 'bar' }; + const scope = await initRepo(); + scope + .get( + '/api/v4/projects/different%2Frepo/repository/files/dir%2Ffile.json?ref=HEAD' + ) + .reply(200, { + content: Buffer.from(JSON.stringify(data)).toString('base64'), + }); + const res = await gitlab.getJsonFile('dir/file.json', 'different%2Frepo'); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + + it('ingores branchOrTag', async () => { + const data = { foo: 'bar' }; + const scope = await initRepo(); + scope + .get( + '/api/v4/projects/some%2Frepo/repository/files/dir%2Ffile.json?ref=HEAD' + ) + .reply(200, { + content: Buffer.from(JSON.stringify(data)).toString('base64'), + }); + const res = await gitlab.getJsonFile( + 'dir/file.json', + 'some%2Frepo', + 'dev' + ); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + it('throws on malformed JSON', async () => { const scope = await initRepo(); scope diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index 447e59dd4b5842..059c3b54de96e8 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -157,10 +157,12 @@ function urlEscape(str: string): string { export async function getRawFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { const escapedFileName = urlEscape(fileName); - const url = `projects/${repoName}/repository/files/${escapedFileName}?ref=HEAD`; + const repo = repoName ?? config.repository; + const url = `projects/${repo}/repository/files/${escapedFileName}?ref=HEAD`; const res = await gitlabApi.getJson<{ content: string }>(url); const buf = res.body.content; const str = Buffer.from(buf, 'base64').toString(); @@ -169,9 +171,10 @@ export async function getRawFile( export async function getJsonFile( fileName: string, - repoName: string = config.repository + repoName?: string, + branchOrTag?: string ): Promise { - const raw = await getRawFile(fileName, repoName); + const raw = await getRawFile(fileName, repoName, branchOrTag); if (fileName.endsWith('.json5')) { return JSON5.parse(raw); } diff --git a/lib/platform/types.ts b/lib/platform/types.ts index 86768972bc5bc8..0c0936e446beff 100644 --- a/lib/platform/types.ts +++ b/lib/platform/types.ts @@ -153,8 +153,16 @@ export interface Platform { getIssueList(): Promise; getIssue?(number: number, useCache?: boolean): Promise; getVulnerabilityAlerts(): Promise; - getRawFile(fileName: string, repoName?: string): Promise; - getJsonFile(fileName: string, repoName?: string): Promise; + getRawFile( + fileName: string, + repoName?: string, + branchOrTag?: string + ): Promise; + getJsonFile( + fileName: string, + repoName?: string, + branchOrTag?: string + ): Promise; initRepo(config: RepoParams): Promise; getPrList(): Promise; ensureIssueClosing(title: string): Promise; From 96b854df90ecb07612554d9f28d26637e9affd3b Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 24 Nov 2021 09:04:09 +0300 Subject: [PATCH 151/248] fix(github): Log shrinked GraphQL page size (#12706) --- lib/util/http/github.ts | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/util/http/github.ts b/lib/util/http/github.ts index a96fad6973222c..69e6718132c514 100644 --- a/lib/util/http/github.ts +++ b/lib/util/http/github.ts @@ -15,7 +15,8 @@ import { regEx } from '../regex'; import { GotLegacyError } from './legacy'; import { Http, HttpPostOptions, HttpResponse, InternalHttpOptions } from '.'; -let baseUrl = 'https://api.github.com/'; +const githubBaseUrl = 'https://api.github.com/'; +let baseUrl = githubBaseUrl; export const setBaseUrl = (url: string): void => { baseUrl = url; }; @@ -308,7 +309,10 @@ export class GithubHttp extends Http { const result: T[] = []; const { paginate = true } = options; - let count = options.count || 100; + + let optimalCount: null | number = null; + const initialCount = options.count || 100; + let count = initialCount; let limit = options.limit || 1000; let cursor: string = null; @@ -322,6 +326,8 @@ export class GithubHttp extends Http { }); const fieldData = res?.data?.repository?.[fieldName]; if (fieldData) { + optimalCount = count; + const { nodes = [], edges = [], pageInfo } = fieldData; result.push(...nodes); result.push(...edges); @@ -351,6 +357,19 @@ export class GithubHttp extends Http { } } + // See: https://github.com/renovatebot/renovate/issues/12703 + // istanbul ignore if + if ( + optimalCount && + optimalCount < initialCount && // log only shrinked results + baseUrl === githubBaseUrl + ) { + logger.debug( + { optimalCount }, + 'Successful GraphQL query with shrinked pagination size' + ); + } + return result; } } From 6549cbdd65cc2383be18fac98dc638ddd221cb0b Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 23 Nov 2021 15:46:54 +0100 Subject: [PATCH 152/248] fix: check currentValue before pinning --- lib/workers/repository/process/lookup/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index 12a070500254d8..a7a3d9eb0e22d4 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -192,6 +192,7 @@ export async function lookupUpdates( } res.currentVersion = currentVersion; if ( + currentValue && currentVersion && rangeStrategy === 'pin' && !versioning.isSingleVersion(currentValue) From 133c57f30b27eec74a8f46e204254b1814e0adfa Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Tue, 23 Nov 2021 15:49:24 +0100 Subject: [PATCH 153/248] fix(jenkins): check doc.plugins is iterable --- lib/manager/jenkins/extract.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/manager/jenkins/extract.ts b/lib/manager/jenkins/extract.ts index 3dcc58b0ce5a33..4b13b92bec913d 100644 --- a/lib/manager/jenkins/extract.ts +++ b/lib/manager/jenkins/extract.ts @@ -1,3 +1,4 @@ +import is from '@sindresorhus/is'; import { load } from 'js-yaml'; import { JenkinsPluginsDatasource } from '../../datasource/jenkins-plugins'; import { logger } from '../../logger'; @@ -55,7 +56,7 @@ function extractYaml(content: string): PackageDependency[] { try { const doc = load(content, { json: true }) as JenkinsPlugins; - if (doc?.plugins) { + if (is.nonEmptyArray(doc?.plugins)) { for (const plugin of doc.plugins) { if (plugin.artifactId) { const dep = getDependency(plugin); From 3d2159f05f8a54ddda9604be7f6e0ae61e077320 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 24 Nov 2021 09:07:50 +0100 Subject: [PATCH 154/248] fix(argocd): check for undefined definition --- lib/manager/argocd/extract.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/manager/argocd/extract.ts b/lib/manager/argocd/extract.ts index 9561f7c5061b5a..b4b0839fc2260f 100644 --- a/lib/manager/argocd/extract.ts +++ b/lib/manager/argocd/extract.ts @@ -9,7 +9,7 @@ import { fileTestRegex } from './util'; function createDependency( definition: ApplicationDefinition ): PackageDependency { - const source = definition.spec?.source; + const source = definition?.spec?.source; if ( !source || From 14947cd78b0bf2df5d6f081bff7d820119a53149 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 24 Nov 2021 16:46:05 +0700 Subject: [PATCH 155/248] feat(platform/github): modify getJsonFile to use branchOrTag on GitHub (#12819) --- lib/platform/github/__snapshots__/index.spec.ts.snap | 6 +++--- lib/platform/github/index.spec.ts | 4 ++-- lib/platform/github/index.ts | 5 ++++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/platform/github/__snapshots__/index.spec.ts.snap b/lib/platform/github/__snapshots__/index.spec.ts.snap index e95821a17a60e7..339ec34173c28d 100644 --- a/lib/platform/github/__snapshots__/index.spec.ts.snap +++ b/lib/platform/github/__snapshots__/index.spec.ts.snap @@ -4945,7 +4945,7 @@ Array [ ] `; -exports[`platform/github/index getJsonFile() ignores branchOrTag 1`] = ` +exports[`platform/github/index getJsonFile() returns file content 1`] = ` Array [ Object { "graphql": Object { @@ -5006,7 +5006,7 @@ Array [ ] `; -exports[`platform/github/index getJsonFile() returns file content 1`] = ` +exports[`platform/github/index getJsonFile() returns file content from branch or tag 1`] = ` Array [ Object { "graphql": Object { @@ -5062,7 +5062,7 @@ Array [ "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, "method": "GET", - "url": "https://api.github.com/repos/some/repo/contents/file.json", + "url": "https://api.github.com/repos/some/repo/contents/file.json?ref=dev", }, ] `; diff --git a/lib/platform/github/index.spec.ts b/lib/platform/github/index.spec.ts index a16ab9c08e44a4..97fd3541e27143 100644 --- a/lib/platform/github/index.spec.ts +++ b/lib/platform/github/index.spec.ts @@ -2445,12 +2445,12 @@ describe('platform/github/index', () => { expect(httpMock.getTrace()).toMatchSnapshot(); }); - it('ignores branchOrTag', async () => { + it('returns file content from branch or tag', async () => { const data = { foo: 'bar' }; const scope = httpMock.scope(githubApiHost); initRepoMock(scope, 'some/repo'); await github.initRepo({ repository: 'some/repo', token: 'token' } as any); - scope.get('/repos/some/repo/contents/file.json').reply(200, { + scope.get('/repos/some/repo/contents/file.json?ref=dev').reply(200, { content: Buffer.from(JSON.stringify(data)).toString('base64'), }); const res = await github.getJsonFile('file.json', 'some/repo', 'dev'); diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts index 4ead5ef8faf230..ecc2895006f824 100644 --- a/lib/platform/github/index.ts +++ b/lib/platform/github/index.ts @@ -177,7 +177,10 @@ export async function getRawFile( branchOrTag?: string ): Promise { const repo = repoName ?? config.repository; - const url = `repos/${repo}/contents/${fileName}`; + let url = `repos/${repo}/contents/${fileName}`; + if (branchOrTag) { + url += `?ref=` + branchOrTag; + } const res = await githubApi.getJson<{ content: string }>(url); const buf = res.body.content; const str = Buffer.from(buf, 'base64').toString(); From 559e7e344ee5fa2b7a6b9bed679cc1162c983b92 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 24 Nov 2021 17:08:09 +0700 Subject: [PATCH 156/248] feat(platform/gitlab): modify getJsonFile to use branchOrTag on GitLab (#12821) Co-authored-by: Michael Kriese --- lib/platform/gitlab/__snapshots__/index.spec.ts.snap | 6 +++--- lib/platform/gitlab/index.spec.ts | 4 ++-- lib/platform/gitlab/index.ts | 4 +++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap index 9a4910787a5d7a..dc2c6e615441ee 100644 --- a/lib/platform/gitlab/__snapshots__/index.spec.ts.snap +++ b/lib/platform/gitlab/__snapshots__/index.spec.ts.snap @@ -2272,7 +2272,7 @@ Array [ ] `; -exports[`platform/gitlab/index getJsonFile() ingores branchOrTag 1`] = ` +exports[`platform/gitlab/index getJsonFile() returns file content 1`] = ` Array [ Object { "headers": Object { @@ -2299,7 +2299,7 @@ Array [ ] `; -exports[`platform/gitlab/index getJsonFile() returns file content 1`] = ` +exports[`platform/gitlab/index getJsonFile() returns file content from branch or tag 1`] = ` Array [ Object { "headers": Object { @@ -2321,7 +2321,7 @@ Array [ "user-agent": "RenovateBot/0.0.0-semantic-release (https://github.com/renovatebot/renovate)", }, "method": "GET", - "url": "https://gitlab.com/api/v4/projects/some%2Frepo/repository/files/dir%2Ffile.json?ref=HEAD", + "url": "https://gitlab.com/api/v4/projects/some%2Frepo/repository/files/dir%2Ffile.json?ref=dev", }, ] `; diff --git a/lib/platform/gitlab/index.spec.ts b/lib/platform/gitlab/index.spec.ts index e4f42a679177d8..e64f45b7d8c702 100644 --- a/lib/platform/gitlab/index.spec.ts +++ b/lib/platform/gitlab/index.spec.ts @@ -2020,12 +2020,12 @@ These updates have all been created already. Click a checkbox below to force a r expect(httpMock.getTrace()).toMatchSnapshot(); }); - it('ingores branchOrTag', async () => { + it('returns file content from branch or tag', async () => { const data = { foo: 'bar' }; const scope = await initRepo(); scope .get( - '/api/v4/projects/some%2Frepo/repository/files/dir%2Ffile.json?ref=HEAD' + '/api/v4/projects/some%2Frepo/repository/files/dir%2Ffile.json?ref=dev' ) .reply(200, { content: Buffer.from(JSON.stringify(data)).toString('base64'), diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index 059c3b54de96e8..64e1e1caa42be8 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -162,7 +162,9 @@ export async function getRawFile( ): Promise { const escapedFileName = urlEscape(fileName); const repo = repoName ?? config.repository; - const url = `projects/${repo}/repository/files/${escapedFileName}?ref=HEAD`; + const url = + `projects/${repo}/repository/files/${escapedFileName}?ref=` + + (branchOrTag || `HEAD`); const res = await gitlabApi.getJson<{ content: string }>(url); const buf = res.body.content; const str = Buffer.from(buf, 'base64').toString(); From 42857138cb502cc3706ba9d3f8faf9d3e1077b0a Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 24 Nov 2021 17:18:33 +0700 Subject: [PATCH 157/248] feat(platform/gitea): modify getJsonFile to use branchOrTag on Gitea (#12822) --- lib/platform/gitea/index.spec.ts | 2 +- lib/platform/gitea/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/platform/gitea/index.spec.ts b/lib/platform/gitea/index.spec.ts index 871c400d0271bb..ec60644daf02e6 100644 --- a/lib/platform/gitea/index.spec.ts +++ b/lib/platform/gitea/index.spec.ts @@ -1538,7 +1538,7 @@ describe('platform/gitea/index', () => { expect(res).toEqual(data); }); - it('ignores branchOrTag', async () => { + it('returns file content from branch or tag', async () => { const data = { foo: 'bar' }; helper.getRepoContents.mockResolvedValueOnce({ contentString: JSON.stringify(data), diff --git a/lib/platform/gitea/index.ts b/lib/platform/gitea/index.ts index 9ed3cd688c0fa2..0fed2bd1795185 100644 --- a/lib/platform/gitea/index.ts +++ b/lib/platform/gitea/index.ts @@ -215,7 +215,7 @@ const platform: Platform = { branchOrTag?: string ): Promise { const repo = repoName ?? config.repository; - const contents = await helper.getRepoContents(repo, fileName); + const contents = await helper.getRepoContents(repo, fileName, branchOrTag); return contents.contentString; }, From 2ec5c54cf0612c192a426afb4f2cba0e2e9441f2 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 24 Nov 2021 18:17:19 +0700 Subject: [PATCH 158/248] feat(platform/bitbucket-server): modify getJsonFile to use branchOrTag on Bitbucket server (#12824) Co-authored-by: Rhys Arkins --- .../__snapshots__/index.spec.ts.snap | 12 ++++++------ lib/platform/bitbucket-server/index.spec.ts | 4 ++-- lib/platform/bitbucket-server/index.ts | 4 +++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap b/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap index e1dba3d9a65bca..a9dc459199cf13 100644 --- a/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap +++ b/lib/platform/bitbucket-server/__snapshots__/index.spec.ts.snap @@ -2027,7 +2027,7 @@ Array [ ] `; -exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() ignores branchOrTag argument 1`] = ` +exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() returns file content 1`] = ` Array [ Object { "headers": Object { @@ -2068,7 +2068,7 @@ Array [ ] `; -exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() returns file content 1`] = ` +exports[`platform/bitbucket-server/index endpoint with no path getJsonFile() returns file content from branch or tag 1`] = ` Array [ Object { "headers": Object { @@ -2104,7 +2104,7 @@ Array [ "x-atlassian-token": "no-check", }, "method": "GET", - "url": "https://stash.renovatebot.com/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000", + "url": "https://stash.renovatebot.com/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000&at=dev", }, ] `; @@ -6525,7 +6525,7 @@ Array [ ] `; -exports[`platform/bitbucket-server/index endpoint with path getJsonFile() ignores branchOrTag argument 1`] = ` +exports[`platform/bitbucket-server/index endpoint with path getJsonFile() returns file content 1`] = ` Array [ Object { "headers": Object { @@ -6566,7 +6566,7 @@ Array [ ] `; -exports[`platform/bitbucket-server/index endpoint with path getJsonFile() returns file content 1`] = ` +exports[`platform/bitbucket-server/index endpoint with path getJsonFile() returns file content from branch or tag 1`] = ` Array [ Object { "headers": Object { @@ -6602,7 +6602,7 @@ Array [ "x-atlassian-token": "no-check", }, "method": "GET", - "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000", + "url": "https://stash.renovatebot.com/vcs/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000&at=dev", }, ] `; diff --git a/lib/platform/bitbucket-server/index.spec.ts b/lib/platform/bitbucket-server/index.spec.ts index cdd64adf09190f..c031b8652c78da 100644 --- a/lib/platform/bitbucket-server/index.spec.ts +++ b/lib/platform/bitbucket-server/index.spec.ts @@ -2150,12 +2150,12 @@ Followed by some information. expect(httpMock.getTrace()).toMatchSnapshot(); }); - it('ignores branchOrTag argument', async () => { + it('returns file content from branch or tag', async () => { const data = { foo: 'bar' }; const scope = await initRepo(); scope .get( - `${urlPath}/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000` + `${urlPath}/rest/api/1.0/projects/SOME/repos/repo/browse/file.json?limit=20000&at=dev` ) .reply(200, { isLastPage: true, diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts index f7d2a194da7f0a..2a01c173fc03a2 100644 --- a/lib/platform/bitbucket-server/index.ts +++ b/lib/platform/bitbucket-server/index.ts @@ -128,7 +128,9 @@ export async function getRawFile( ): Promise { const repo = repoName ?? config.repository; const [project, slug] = repo.split('/'); - const fileUrl = `./rest/api/1.0/projects/${project}/repos/${slug}/browse/${fileName}?limit=20000`; + const fileUrl = + `./rest/api/1.0/projects/${project}/repos/${slug}/browse/${fileName}?limit=20000` + + (branchOrTag ? '&at=' + branchOrTag : ''); const res = await bitbucketServerHttp.getJson(fileUrl); const { isLastPage, lines, size } = res.body; if (isLastPage) { From f6454ba1a77f995cd6e60ec9025718e8eeba863e Mon Sep 17 00:00:00 2001 From: Keven van Zuijlen Date: Wed, 24 Nov 2021 12:33:22 +0100 Subject: [PATCH 159/248] fix(azure): add default branch policy support (#12806) Co-authored-by: Michael Kriese --- lib/platform/azure/azure-helper.spec.ts | 78 +++++++++++++++++++++++-- lib/platform/azure/azure-helper.ts | 11 +++- lib/platform/azure/index.ts | 7 ++- 3 files changed, 86 insertions(+), 10 deletions(-) diff --git a/lib/platform/azure/azure-helper.spec.ts b/lib/platform/azure/azure-helper.spec.ts index 18d3d23e232dac..e4e2776a77931f 100644 --- a/lib/platform/azure/azure-helper.spec.ts +++ b/lib/platform/azure/azure-helper.spec.ts @@ -232,8 +232,47 @@ describe('platform/azure/azure-helper', () => { GitPullRequestMergeStrategy.Squash ); }); + it('should return default branch policy', async () => { + azureApi.policyApi.mockImplementationOnce( + () => + ({ + getPolicyConfigurations: jest.fn(() => [ + { + settings: { + allowSquash: true, + scope: [ + { + repositoryId: 'doo-dee-doo-repository-id', + }, + ], + }, + type: { + id: 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab', + }, + }, + { + settings: { + allowRebase: true, + scope: [ + { + matchKind: 'DefaultBranch', + }, + ], + }, + type: { + id: 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab', + }, + }, + ]), + } as any) + ); + expect(await azureHelper.getMergeMethod('', '')).toEqual( + GitPullRequestMergeStrategy.Rebase + ); + }); it('should return most specific exact branch policy', async () => { const refMock = 'refs/heads/ding'; + const defaultBranchMock = 'dong'; azureApi.policyApi.mockImplementationOnce( () => ({ @@ -264,6 +303,19 @@ describe('platform/azure/azure-helper', () => { id: 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab', }, }, + { + settings: { + allowSquash: true, + scope: [ + { + matchKind: 'DefaultBranch', + }, + ], + }, + type: { + id: 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab', + }, + }, { settings: { allowRebase: true, @@ -282,12 +334,13 @@ describe('platform/azure/azure-helper', () => { ]), } as any) ); - expect(await azureHelper.getMergeMethod('', '', refMock)).toEqual( - GitPullRequestMergeStrategy.Rebase - ); + expect( + await azureHelper.getMergeMethod('', '', refMock, defaultBranchMock) + ).toEqual(GitPullRequestMergeStrategy.Rebase); }); it('should return most specific prefix branch policy', async () => { const refMock = 'refs/heads/ding-wow'; + const defaultBranchMock = 'dong-wow'; azureApi.policyApi.mockImplementationOnce( () => ({ @@ -305,6 +358,19 @@ describe('platform/azure/azure-helper', () => { id: 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab', }, }, + { + settings: { + allowSquash: true, + scope: [ + { + matchKind: 'DefaultBranch', + }, + ], + }, + type: { + id: 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab', + }, + }, { settings: { allowRebase: true, @@ -323,9 +389,9 @@ describe('platform/azure/azure-helper', () => { ]), } as any) ); - expect(await azureHelper.getMergeMethod('', '', refMock)).toEqual( - GitPullRequestMergeStrategy.Rebase - ); + expect( + await azureHelper.getMergeMethod('', '', refMock, defaultBranchMock) + ).toEqual(GitPullRequestMergeStrategy.Rebase); }); }); }); diff --git a/lib/platform/azure/azure-helper.ts b/lib/platform/azure/azure-helper.ts index ce6b6089f61fa7..43540132a83972 100644 --- a/lib/platform/azure/azure-helper.ts +++ b/lib/platform/azure/azure-helper.ts @@ -110,14 +110,21 @@ export async function getCommitDetails( export async function getMergeMethod( repoId: string, project: string, - branchRef?: string + branchRef?: string, + defaultBranch?: string ): Promise { type Scope = { repositoryId: string; refName?: string; - matchKind: 'Prefix' | 'Exact'; + matchKind: 'Prefix' | 'Exact' | 'DefaultBranch'; }; const isRelevantScope = (scope: Scope): boolean => { + if ( + scope.matchKind === 'DefaultBranch' && + (!branchRef || branchRef === `refs/heads/${defaultBranch}`) + ) { + return true; + } if (scope.repositoryId !== repoId) { return false; } diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts index cccec641fd7755..1b340395f2739a 100644 --- a/lib/platform/azure/index.ts +++ b/lib/platform/azure/index.ts @@ -169,7 +169,9 @@ export async function initRepo({ const names = getProjectAndRepo(repository); config.defaultMergeMethod = await azureHelper.getMergeMethod( repo.id, - names.project + names.project, + null, + defaultBranch ); config.mergeMethods = {}; config.repoForceRebase = false; @@ -618,7 +620,8 @@ export async function mergePr({ (config.mergeMethods[pr.targetRefName] = await azureHelper.getMergeMethod( config.repoId, config.project, - pr.targetRefName + pr.targetRefName, + config.defaultBranch )); const objToUpdate: GitPullRequest = { From bb64598d6aa53fca04d3b7283dc6d105ea121517 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 24 Nov 2021 14:28:50 +0100 Subject: [PATCH 160/248] fix: check currentValue before generating newValue --- .../repository/process/lookup/generate.ts | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/workers/repository/process/lookup/generate.ts b/lib/workers/repository/process/lookup/generate.ts index 9eb27f22d836c4..94d8538ef38ccb 100644 --- a/lib/workers/repository/process/lookup/generate.ts +++ b/lib/workers/repository/process/lookup/generate.ts @@ -32,19 +32,21 @@ export function generateUpdate( } } const { currentValue } = config; - try { - update.newValue = versioning.getNewValue({ - currentValue, - rangeStrategy, - currentVersion, - newVersion, - }); - } catch (err) /* istanbul ignore next */ { - logger.warn( - { err, currentValue, rangeStrategy, currentVersion, newVersion }, - 'getNewValue error' - ); - update.newValue = currentValue; + if (currentValue) { + try { + update.newValue = versioning.getNewValue({ + currentValue, + rangeStrategy, + currentVersion, + newVersion, + }); + } catch (err) /* istanbul ignore next */ { + logger.warn( + { err, currentValue, rangeStrategy, currentVersion, newVersion }, + 'getNewValue error' + ); + update.newValue = currentValue; + } } update.newMajor = versioning.getMajor(newVersion); update.newMinor = versioning.getMinor(newVersion); From eed9826518f944f45447a91d5d8867b0d7ec2534 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 24 Nov 2021 15:14:49 +0100 Subject: [PATCH 161/248] fix: Revert fix: check currentValue before generating newValue --- .../repository/process/lookup/generate.ts | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/lib/workers/repository/process/lookup/generate.ts b/lib/workers/repository/process/lookup/generate.ts index 94d8538ef38ccb..9eb27f22d836c4 100644 --- a/lib/workers/repository/process/lookup/generate.ts +++ b/lib/workers/repository/process/lookup/generate.ts @@ -32,21 +32,19 @@ export function generateUpdate( } } const { currentValue } = config; - if (currentValue) { - try { - update.newValue = versioning.getNewValue({ - currentValue, - rangeStrategy, - currentVersion, - newVersion, - }); - } catch (err) /* istanbul ignore next */ { - logger.warn( - { err, currentValue, rangeStrategy, currentVersion, newVersion }, - 'getNewValue error' - ); - update.newValue = currentValue; - } + try { + update.newValue = versioning.getNewValue({ + currentValue, + rangeStrategy, + currentVersion, + newVersion, + }); + } catch (err) /* istanbul ignore next */ { + logger.warn( + { err, currentValue, rangeStrategy, currentVersion, newVersion }, + 'getNewValue error' + ); + update.newValue = currentValue; } update.newMajor = versioning.getMajor(newVersion); update.newMinor = versioning.getMinor(newVersion); From 41b0517ef14fed6421e3154b49a7ce0ff3aa022e Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Wed, 24 Nov 2021 15:25:21 +0100 Subject: [PATCH 162/248] fix: check currentValue before updating newValue --- .../repository/process/lookup/generate.ts | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/lib/workers/repository/process/lookup/generate.ts b/lib/workers/repository/process/lookup/generate.ts index 9eb27f22d836c4..6a5a3b7c6b6011 100644 --- a/lib/workers/repository/process/lookup/generate.ts +++ b/lib/workers/repository/process/lookup/generate.ts @@ -32,18 +32,22 @@ export function generateUpdate( } } const { currentValue } = config; - try { - update.newValue = versioning.getNewValue({ - currentValue, - rangeStrategy, - currentVersion, - newVersion, - }); - } catch (err) /* istanbul ignore next */ { - logger.warn( - { err, currentValue, rangeStrategy, currentVersion, newVersion }, - 'getNewValue error' - ); + if (currentValue) { + try { + update.newValue = versioning.getNewValue({ + currentValue, + rangeStrategy, + currentVersion, + newVersion, + }); + } catch (err) /* istanbul ignore next */ { + logger.warn( + { err, currentValue, rangeStrategy, currentVersion, newVersion }, + 'getNewValue error' + ); + update.newValue = currentValue; + } + } else { update.newValue = currentValue; } update.newMajor = versioning.getMajor(newVersion); From 18217016a4b4ff0831dce8eb8ffe940d43b5a65b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Nov 2021 16:08:50 +0100 Subject: [PATCH 163/248] chore(deps): update dependency type-fest to v2.5.4 (#12828) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c64bb104837688..15563d8b9b6f22 100644 --- a/package.json +++ b/package.json @@ -283,7 +283,7 @@ "tmp-promise": "3.0.3", "ts-jest": "27.0.7", "ts-node": "10.4.0", - "type-fest": "2.5.3", + "type-fest": "2.5.4", "typescript": "4.4.4", "unified": "9.2.2" }, diff --git a/yarn.lock b/yarn.lock index e00931dde1fb80..0f73f886481fab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10244,10 +10244,10 @@ type-detect@4.0.8, 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.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.5.3.tgz#2538287381b24d0c1d4911279934f28aaa10d620" - integrity sha512-7VNmE7FlsrdcWjKbtuRuynZz96Gmf35p5DvoR2tbceNP0vd58ISx87PvUUInlhtRC49vSX6qlxEKc7AoiHRirg== +type-fest@2.5.4: + version "2.5.4" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.5.4.tgz#1613bf29a172ff1c66c29325466af9096fe505b5" + integrity sha512-zyPomVvb6u7+gJ/GPYUH6/nLDNiTtVOqXVUHtxFv5PmZQh6skgfeRtFYzWC01T5KeNWNIx5/0P111rKFLlkFvA== type-fest@^0.13.1: version "0.13.1" From 9d85a4c9f2d748dfbc06fb98e5d1786a6159e228 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Nov 2021 16:52:50 +0000 Subject: [PATCH 164/248] chore(deps): update dependency @types/bunyan to v1.8.8 (#12827) 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 15563d8b9b6f22..dca666c79d5918 100644 --- a/package.json +++ b/package.json @@ -215,7 +215,7 @@ "@renovate/eslint-plugin": "https://github.com/renovatebot/eslint-plugin#v0.0.4", "@semantic-release/exec": "6.0.2", "@types/auth-header": "1.0.2", - "@types/bunyan": "1.8.7", + "@types/bunyan": "1.8.8", "@types/cacache": "15.0.1", "@types/changelog-filename-regex": "2.0.0", "@types/clean-git-ref": "2.0.0", diff --git a/yarn.lock b/yarn.lock index 0f73f886481fab..926ed142d9e506 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3013,10 +3013,10 @@ dependencies: "@babel/types" "^7.3.0" -"@types/bunyan@1.8.7": - version "1.8.7" - resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.7.tgz#63cc65b5ecff6217d1509409a575e7b991f80831" - integrity sha512-jaNt6xX5poSmXuDAkQrSqx2zkR66OrdRDuVnU8ldvn3k/Ci/7Sf5nooKspQWimDnw337Bzt/yirqSThTjvrHkg== +"@types/bunyan@1.8.8": + version "1.8.8" + resolved "https://registry.yarnpkg.com/@types/bunyan/-/bunyan-1.8.8.tgz#8d6d33f090f37c07e2a80af30ae728450a101008" + integrity sha512-Cblq+Yydg3u+sGiz2mjHjC5MPmdjY+No4qvHrF+BUhblsmSfMvsHLbOG62tPbonsqBj6sbWv1LHcsoe5Jw+/Ow== dependencies: "@types/node" "*" From 4d1c4f16dc419b6e4b224f5d5962dafe2b35f5cb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Nov 2021 00:53:54 +0000 Subject: [PATCH 165/248] build(deps): update dependency openpgp to v5.0.1 (#12836) 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 dca666c79d5918..a08ea4ecdbd127 100644 --- a/package.json +++ b/package.json @@ -178,7 +178,7 @@ "minimatch": "3.0.4", "moo": "0.5.1", "node-html-parser": "3.3.6", - "openpgp": "5.0.0", + "openpgp": "5.0.1", "p-all": "3.0.0", "p-map": "4.0.0", "p-queue": "6.6.2", diff --git a/yarn.lock b/yarn.lock index 926ed142d9e506..d58c2f1a9ea83c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8450,10 +8450,10 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -openpgp@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.0.0.tgz#2da0ee406c8834223ae928a9a214f4811f83f923" - integrity sha512-H4Jsj9Bp1KFQ/w520M1d2x45iz9V39Lf+IwIXmUaBmJAMagAt0zanqmWeFzIMJUYmrHTcm6fO/rpc6aftFUHbA== +openpgp@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/openpgp/-/openpgp-5.0.1.tgz#fe355dcdc2074e505d5c22ee51e880a8296bd0ab" + integrity sha512-J9HGIcXumwczJwX3JvgshWYtkhsOJHm5ZPd1ipJ1BqrZL06NgqV/EfJyF3ThOlNV2rY0MGWdS8L8/kKyeo3sXg== dependencies: asn1.js "^5.0.0" From 6ad29b61242a6ebcb540c7f53c11c8ad7921cf8c Mon Sep 17 00:00:00 2001 From: Michael B <31598087+mmichaelb@users.noreply.github.com> Date: Thu, 25 Nov 2021 12:01:52 +0100 Subject: [PATCH 166/248] fix(platform/gitlab): add missing "waiting_for_resource" branch status (#12832) Co-authored-by: Rhys Arkins Co-authored-by: Michael Kriese --- lib/platform/gitlab/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts index 64e1e1caa42be8..e489d592cde129 100644 --- a/lib/platform/gitlab/index.ts +++ b/lib/platform/gitlab/index.ts @@ -332,6 +332,7 @@ type BranchState = | 'pending' | 'created' | 'running' + | 'waiting_for_resource' | 'manual' | 'success' | 'failed' @@ -372,6 +373,7 @@ const gitlabToRenovateStatusMapping: Record = { created: BranchStatus.yellow, manual: BranchStatus.yellow, running: BranchStatus.yellow, + waiting_for_resource: BranchStatus.yellow, success: BranchStatus.green, failed: BranchStatus.red, canceled: BranchStatus.red, From 62936413261a54829131f3e6354d7ffc8a8db2d0 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Thu, 25 Nov 2021 18:18:27 +0700 Subject: [PATCH 167/248] feat(config): add safeguard timeouts (#12604) * Add safeguard timeouts #2804 * Fix unit tests * Fix unit tests * Update lib/util/exec/index.ts Co-authored-by: Michael Kriese * Changes after code review * Fixes after merge Co-authored-by: Michael Kriese Co-authored-by: Rhys Arkins --- docs/usage/self-hosted-configuration.md | 5 +++++ lib/config/global.ts | 1 + lib/config/options/index.ts | 8 ++++++++ lib/config/types.ts | 1 + lib/util/exec/index.spec.ts | 20 ++++++++++++++++++++ lib/util/exec/index.ts | 12 ++++++++++-- 6 files changed, 45 insertions(+), 2 deletions(-) diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index 362f3af83f65fd..6283d86b00310a 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -250,6 +250,11 @@ e.g. ## endpoint +## executionTimeout + +Default execution timeout in minutes for child processes Renovate creates. +If this option is not set, Renovate will fallback to 15 minutes. + ## exposeAllEnv By default, Renovate only passes a limited set of environment variables to package managers. diff --git a/lib/config/global.ts b/lib/config/global.ts index 313bc2ff4bb32c..9a1b68f7fa1589 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -16,6 +16,7 @@ export class GlobalConfig { 'dockerUser', 'dryRun', 'exposeAllEnv', + 'executionTimeout', 'localDir', 'migratePresets', 'privateKey', diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index 2d0d0bebb3aaf1..da9e1d713bbeba 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -747,6 +747,14 @@ const options: RenovateOptions[] = [ subType: 'string', default: [], }, + { + name: 'executionTimeout', + description: + 'Default execution timeout in minutes for child processes Renovate creates.', + type: 'integer', + default: 15, + globalOnly: true, + }, { name: 'aliases', description: 'Aliases for registries, package manager specific.', diff --git a/lib/config/types.ts b/lib/config/types.ts index c1ca573ce60c5e..27634a140a6cf2 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -102,6 +102,7 @@ export interface RepoGlobalConfig { dockerImagePrefix?: string; dockerUser?: string; dryRun?: boolean; + executionTimeout?: number; exposeAllEnv?: boolean; migratePresets?: Record; privateKey?: string; diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts index eca56e89d98eba..cf0eddd08589ab 100644 --- a/lib/util/exec/index.spec.ts +++ b/lib/util/exec/index.spec.ts @@ -542,6 +542,26 @@ describe('util/exec/index', () => { }, ], + [ + 'Default timeout from executionTimeout config option', + { + processEnv, + inCmd, + inOpts: {}, + outCmd, + outOpts: [ + { + cwd, + encoding, + env: envMock.basic, + timeout: 30 * 60 * 1000, + maxBuffer: 10485760, + }, + ], + adminConfig: { executionTimeout: 30 }, + }, + ], + [ 'Explicit maxBuffer', { diff --git a/lib/util/exec/index.ts b/lib/util/exec/index.ts index 221790b16a6d76..4e2310bf73a0f1 100644 --- a/lib/util/exec/index.ts +++ b/lib/util/exec/index.ts @@ -68,6 +68,7 @@ function getCwd({ cwd, cwdFile }: ExecOptions): string { } function getRawExecOptions(opts: ExecOptions): RawExecOptions { + const defaultExecutionTimeout = GlobalConfig.get('executionTimeout'); const execOptions: ExecOptions = { ...opts }; delete execOptions.extraEnv; delete execOptions.docker; @@ -82,8 +83,15 @@ function getRawExecOptions(opts: ExecOptions): RawExecOptions { env: childEnv, cwd, }; - // Set default timeout to 15 minutes - rawExecOptions.timeout = rawExecOptions.timeout || 15 * 60 * 1000; + // Set default timeout config.executionTimeout if specified; othrwise to 15 minutes + if (!rawExecOptions.timeout) { + if (defaultExecutionTimeout) { + rawExecOptions.timeout = defaultExecutionTimeout * 60 * 1000; + } else { + rawExecOptions.timeout = 15 * 60 * 1000; + } + } + // Set default max buffer size to 10MB rawExecOptions.maxBuffer = rawExecOptions.maxBuffer || 10 * 1024 * 1024; return rawExecOptions; From 9cad1e17fc07143837811928af9d5c2f90f4a365 Mon Sep 17 00:00:00 2001 From: Jeroen Schepens Date: Thu, 25 Nov 2021 22:06:30 +0100 Subject: [PATCH 168/248] feat(terraform): modules with bitbucket repositories (#12770) --- lib/manager/terraform/__fixtures__/1.tf | 24 +++++++- .../__snapshots__/extract.spec.ts.snap | 37 ++++++++++++- lib/manager/terraform/extract.spec.ts | 2 +- lib/manager/terraform/modules.spec.ts | 55 ++++++++++++++++++- lib/manager/terraform/modules.ts | 11 ++++ 5 files changed, 124 insertions(+), 5 deletions(-) diff --git a/lib/manager/terraform/__fixtures__/1.tf b/lib/manager/terraform/__fixtures__/1.tf index 5bb3886b382a36..6199b622cda0d1 100644 --- a/lib/manager/terraform/__fixtures__/1.tf +++ b/lib/manager/terraform/__fixtures__/1.tf @@ -92,7 +92,7 @@ module "addons_aws" { aws-ebs-csi-driver = { enabled = true is_default_class = true - version = "1.0.0" + version = "1.0.0" } @@ -143,7 +143,7 @@ provider "gitlab" { } provider "gitlab" { - token = "${var.gitlab_token}" + token = "${var.gitlab_token}" version = "=1.3" } @@ -189,6 +189,26 @@ module "gittags_ssh" { source = "git::ssh://git@bitbucket.com/hashicorp/example?ref=v1.0.3" } +module "bitbucket_ssh" { + source = "git::ssh://git@bitbucket.org/hashicorp/example.git?ref=v1.0.0" +} + +module "bitbucket_https" { + source = "git::https://git@bitbucket.org/hashicorp/example.git?ref=v1.0.0" +} + +module "bitbucket_plain" { + source = "bitbucket.org/hashicorp/example.git?ref=v1.0.0" +} + +module "bitbucket_subfolder" { + source = "bitbucket.org/hashicorp/example.git/terraform?ref=v1.0.0" +} + +module "bitbucket_subfolder_with_double_slash" { + source = "bitbucket.org/hashicorp/example.git//terraform?ref=v1.0.0" +} + terraform { required_providers { aws = ">= 2.7.0" diff --git a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap index fa6022ae042664..2a4c2b8e8b5a3b 100644 --- a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap @@ -263,6 +263,41 @@ Object { "depType": "module", "lookupName": "ssh://git@bitbucket.com/hashicorp/example", }, + Object { + "currentValue": "v1.0.0", + "datasource": "bitbucket-tags", + "depName": "example", + "depType": "module", + "lookupName": "example", + }, + Object { + "currentValue": "v1.0.0", + "datasource": "bitbucket-tags", + "depName": "example", + "depType": "module", + "lookupName": "example", + }, + Object { + "currentValue": "v1.0.0", + "datasource": "bitbucket-tags", + "depName": "example", + "depType": "module", + "lookupName": "example", + }, + Object { + "currentValue": "v1.0.0", + "datasource": "bitbucket-tags", + "depName": "example", + "depType": "module", + "lookupName": "example", + }, + Object { + "currentValue": "v1.0.0", + "datasource": "bitbucket-tags", + "depName": "example", + "depType": "module", + "lookupName": "example", + }, Object { "currentValue": ">= 2.7.0", "datasource": "terraform-provider", @@ -285,7 +320,7 @@ Object { "depName": "hashicorp/terraform", "depType": "required_version", "extractVersion": "v(?.*)$", - "lineNumber": 230, + "lineNumber": 250, }, Object { "currentValue": "2.7.2", diff --git a/lib/manager/terraform/extract.spec.ts b/lib/manager/terraform/extract.spec.ts index fe6f6f4b1fcf32..1d4afed611462c 100644 --- a/lib/manager/terraform/extract.spec.ts +++ b/lib/manager/terraform/extract.spec.ts @@ -35,7 +35,7 @@ describe('manager/terraform/extract', () => { it('extracts', async () => { const res = await extractPackageFile(tf1, '1.tf', {}); expect(res).toMatchSnapshot(); - expect(res.deps).toHaveLength(46); + expect(res.deps).toHaveLength(51); expect(res.deps.filter((dep) => dep.skipReason)).toHaveLength(8); }); diff --git a/lib/manager/terraform/modules.spec.ts b/lib/manager/terraform/modules.spec.ts index f7c1674e5a655b..fcbc3fc33333b1 100644 --- a/lib/manager/terraform/modules.spec.ts +++ b/lib/manager/terraform/modules.spec.ts @@ -1,4 +1,8 @@ -import { gitTagsRefMatchRegex, githubRefMatchRegex } from './modules'; +import { + bitbucketRefMatchRegex, + gitTagsRefMatchRegex, + githubRefMatchRegex, +} from './modules'; describe('manager/terraform/modules', () => { describe('githubRefMatchRegex', () => { @@ -60,4 +64,53 @@ describe('manager/terraform/modules', () => { expect(ssh.tag).toBe('v1.0.0'); }); }); + describe('bitbucketRefMatchRegex', () => { + it('should split workspace, project and tag from source', () => { + const ssh = bitbucketRefMatchRegex.exec( + 'git::ssh://git@bitbucket.org/hashicorp/example.git?ref=v1.0.0' + ).groups; + const https = bitbucketRefMatchRegex.exec( + 'git::https://git@bitbucket.org/hashicorp/example.git?ref=v1.0.0' + ).groups; + const plain = bitbucketRefMatchRegex.exec( + 'bitbucket.org/hashicorp/example.git?ref=v1.0.0' + ).groups; + const subfolder = bitbucketRefMatchRegex.exec( + 'bitbucket.org/hashicorp/example.git/terraform?ref=v1.0.0' + ).groups; + const subfolderWithDoubleSlash = bitbucketRefMatchRegex.exec( + 'bitbucket.org/hashicorp/example.git//terraform?ref=v1.0.0' + ).groups; + + expect(ssh.workspace).toBe('hashicorp'); + expect(ssh.project).toBe('example'); + expect(ssh.tag).toBe('v1.0.0'); + + expect(https.workspace).toBe('hashicorp'); + expect(https.project).toBe('example'); + expect(https.tag).toBe('v1.0.0'); + + expect(plain.workspace).toBe('hashicorp'); + expect(plain.project).toBe('example'); + expect(plain.tag).toBe('v1.0.0'); + + expect(subfolder.workspace).toBe('hashicorp'); + expect(subfolder.project).toBe('example'); + expect(subfolder.tag).toBe('v1.0.0'); + + expect(subfolderWithDoubleSlash.workspace).toBe('hashicorp'); + expect(subfolderWithDoubleSlash.project).toBe('example'); + expect(subfolderWithDoubleSlash.tag).toBe('v1.0.0'); + }); + + it('should parse alpha-numeric characters as well as dots, underscores, and dashes in repo names', () => { + const dots = bitbucketRefMatchRegex.exec( + 'bitbucket.org/hashicorp/example.repo-123.git?ref=v1.0.0' + ).groups; + + expect(dots.workspace).toBe('hashicorp'); + expect(dots.project).toBe('example.repo-123'); + expect(dots.tag).toBe('v1.0.0'); + }); + }); }); diff --git a/lib/manager/terraform/modules.ts b/lib/manager/terraform/modules.ts index 810c614c0ed0f9..cd387c73930579 100644 --- a/lib/manager/terraform/modules.ts +++ b/lib/manager/terraform/modules.ts @@ -1,3 +1,4 @@ +import { BitBucketTagsDatasource } from '../../datasource/bitbucket-tags'; import { GitTagsDatasource } from '../../datasource/git-tags'; import * as datasourceGithubTags from '../../datasource/github-tags'; import { TerraformModuleDatasource } from '../../datasource/terraform-module'; @@ -12,6 +13,9 @@ import type { ExtractionResult } from './types'; export const githubRefMatchRegex = regEx( /github\.com([/:])(?[^/]+\/[a-z0-9-_.]+).*\?ref=(?.*)$/i ); +export const bitbucketRefMatchRegex = regEx( + /(?:git::)?(?(?:http|https|ssh)?(?::\/\/)?(?:.*@)?(?bitbucket\.org\/(?.*)\/(?.*).git\/?(?.*)))\?ref=(?.*)$/ +); export const gitTagsRefMatchRegex = regEx( /(?:git::)?(?(?:http|https|ssh):\/\/(?:.*@)?(?.*.*\/(?.*\/.*)))\?ref=(?.*)$/ ); @@ -31,6 +35,7 @@ export function extractTerraformModule( export function analyseTerraformModule(dep: PackageDependency): void { const githubRefMatch = githubRefMatchRegex.exec(dep.managerData.source); + const bitbucketRefMatch = bitbucketRefMatchRegex.exec(dep.managerData.source); const gitTagsRefMatch = gitTagsRefMatchRegex.exec(dep.managerData.source); if (githubRefMatch) { @@ -39,6 +44,12 @@ export function analyseTerraformModule(dep: PackageDependency): void { dep.depName = 'github.com/' + dep.lookupName; dep.currentValue = githubRefMatch.groups.tag; dep.datasource = datasourceGithubTags.id; + } else if (bitbucketRefMatch) { + dep.depType = 'module'; + dep.depName = bitbucketRefMatch.groups.project; + dep.lookupName = dep.depName; + dep.currentValue = bitbucketRefMatch.groups.tag; + dep.datasource = BitBucketTagsDatasource.id; } else if (gitTagsRefMatch) { dep.depType = 'module'; if (gitTagsRefMatch.groups.path.includes('//')) { From 26710c46b9f482f543dccf396a882befbf7d105e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Nov 2021 23:45:10 +0000 Subject: [PATCH 169/248] chore(deps): update dependency @types/jest to v27.0.3 (#12847) 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 a08ea4ecdbd127..29c5c36e62fd22 100644 --- a/package.json +++ b/package.json @@ -226,7 +226,7 @@ "@types/github-url-from-git": "1.5.1", "@types/global-agent": "2.1.1", "@types/ini": "1.3.31", - "@types/jest": "27.0.2", + "@types/jest": "27.0.3", "@types/js-yaml": "4.0.4", "@types/json-dup-key-validator": "1.0.0", "@types/linkify-markdown": "1.0.1", diff --git a/yarn.lock b/yarn.lock index d58c2f1a9ea83c..d8f335bba98683 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3136,10 +3136,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@27.0.2": - version "27.0.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.2.tgz#ac383c4d4aaddd29bbf2b916d8d105c304a5fcd7" - integrity sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA== +"@types/jest@27.0.3": + version "27.0.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.3.tgz#0cf9dfe9009e467f70a342f0f94ead19842a783a" + integrity sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg== dependencies: jest-diff "^27.0.0" pretty-format "^27.0.0" From 1c4302e1cda6074e79e69392df37fc8538c0cdfa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Nov 2021 01:04:26 +0000 Subject: [PATCH 170/248] chore(deps): update dependency @types/node to v14.17.34 (#12848) 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 29c5c36e62fd22..e8e4d7aea50b8f 100644 --- a/package.json +++ b/package.json @@ -236,7 +236,7 @@ "@types/marshal": "0.5.1", "@types/moo": "0.5.5", "@types/nock": "10.0.3", - "@types/node": "14.17.33", + "@types/node": "14.17.34", "@types/node-emoji": "1.8.1", "@types/parse-link-header": "1.0.1", "@types/registry-auth-token": "4.2.1", diff --git a/yarn.lock b/yarn.lock index d8f335bba98683..35adabac1445a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3250,10 +3250,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.9.tgz#879be3ad7af29f4c1a5c433421bf99fab7047185" integrity sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A== -"@types/node@14.17.33": - version "14.17.33" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.33.tgz#011ee28e38dc7aee1be032ceadf6332a0ab15b12" - integrity sha512-noEeJ06zbn3lOh4gqe2v7NMGS33jrulfNqYFDjjEbhpDEHR5VTxgYNQSBqBlJIsBJW3uEYDgD6kvMnrrhGzq8g== +"@types/node@14.17.34": + version "14.17.34" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.34.tgz#fe4b38b3f07617c0fa31ae923fca9249641038f0" + integrity sha512-USUftMYpmuMzeWobskoPfzDi+vkpe0dvcOBRNOscFrGxVp4jomnRxWuVohgqBow2xyIPC0S3gjxV/5079jhmDg== "@types/node@^13.7.0": version "13.13.52" From aa6d7012b48aa38482f10613971882c1054b6fc2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Nov 2021 19:56:34 +0000 Subject: [PATCH 171/248] chore(deps): update dependency @types/js-yaml to v4.0.5 (#12857) 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 e8e4d7aea50b8f..c1e7385e7770db 100644 --- a/package.json +++ b/package.json @@ -227,7 +227,7 @@ "@types/global-agent": "2.1.1", "@types/ini": "1.3.31", "@types/jest": "27.0.3", - "@types/js-yaml": "4.0.4", + "@types/js-yaml": "4.0.5", "@types/json-dup-key-validator": "1.0.0", "@types/linkify-markdown": "1.0.1", "@types/luxon": "2.0.7", diff --git a/yarn.lock b/yarn.lock index 35adabac1445a7..fee19561a2be0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3144,10 +3144,10 @@ jest-diff "^27.0.0" pretty-format "^27.0.0" -"@types/js-yaml@4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.4.tgz#cc38781257612581a1a0eb25f1709d2b06812fce" - integrity sha512-AuHubXUmg0AzkXH0Mx6sIxeY/1C110mm/EkE/gB1sTRz3h2dao2W/63q42SlVST+lICxz5Oki2hzYA6+KnnieQ== +"@types/js-yaml@4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.5.tgz#738dd390a6ecc5442f35e7f03fa1431353f7e138" + integrity sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA== "@types/json-dup-key-validator@1.0.0": version "1.0.0" From 4fef60daaf30c4e176b14c3db4e424955b8ad5b8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 26 Nov 2021 20:06:20 +0000 Subject: [PATCH 172/248] chore(deps): update dependency typescript to v4.5.2 (#12833) Co-authored-by: Renovate Bot Co-authored-by: Michael Kriese --- package.json | 2 +- tools/utils.mjs | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c1e7385e7770db..c77cda454396d5 100644 --- a/package.json +++ b/package.json @@ -284,7 +284,7 @@ "ts-jest": "27.0.7", "ts-node": "10.4.0", "type-fest": "2.5.4", - "typescript": "4.4.4", + "typescript": "4.5.2", "unified": "9.2.2" }, "resolutions": { diff --git a/tools/utils.mjs b/tools/utils.mjs index 34e0d88af752c2..2a3047276735fa 100644 --- a/tools/utils.mjs +++ b/tools/utils.mjs @@ -22,7 +22,7 @@ export { program }; */ export function exec(cmd) { try { - if (!program.dryRun) { + if (!options.dryRun) { const res = shell.exec(cmd); return res.code === 0; } diff --git a/yarn.lock b/yarn.lock index fee19561a2be0a..7e3cd07a370c83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10300,10 +10300,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@4.4.4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" - integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== +typescript@4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" + integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" From 1a391955591fed34e0a5033aa644f47842bbd7f1 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Fri, 26 Nov 2021 23:36:17 +0300 Subject: [PATCH 173/248] refactor(git): Extract types to separate file (#12855) --- lib/config/types.ts | 2 +- lib/manager/bundler/artifacts.spec.ts | 2 +- lib/manager/cocoapods/artifacts.spec.ts | 2 +- lib/manager/composer/artifacts.spec.ts | 2 +- lib/manager/gomod/artifacts.spec.ts | 2 +- .../gradle-wrapper/artifacts-real.spec.ts | 2 +- lib/manager/gradle-wrapper/artifacts.spec.ts | 2 +- lib/manager/gradle-wrapper/artifacts.ts | 3 +- lib/manager/jsonnet-bundler/artifacts.spec.ts | 2 +- lib/manager/pip-compile/artifacts.spec.ts | 2 +- lib/manager/pipenv/artifacts.spec.ts | 2 +- lib/manager/types.ts | 2 +- lib/util/git/author.ts | 6 +- lib/util/git/config.ts | 11 +-- lib/util/git/index.spec.ts | 6 +- lib/util/git/index.ts | 80 ++++--------------- lib/util/git/types.ts | 58 ++++++++++++++ .../branch/execute-post-upgrade-commands.ts | 3 +- lib/workers/branch/get-updated.ts | 3 +- lib/workers/branch/index.spec.ts | 2 +- lib/workers/types.ts | 2 +- 21 files changed, 97 insertions(+), 99 deletions(-) create mode 100644 lib/util/git/types.ts diff --git a/lib/config/types.ts b/lib/config/types.ts index 27634a140a6cf2..c349a7066c016a 100644 --- a/lib/config/types.ts +++ b/lib/config/types.ts @@ -1,7 +1,7 @@ import type { LogLevel } from 'bunyan'; import type { Range } from 'semver'; import type { HostRule } from '../types'; -import type { GitNoVerifyOption } from '../util/git'; +import type { GitNoVerifyOption } from '../util/git/types'; export type RenovateConfigStage = | 'global' diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts index deca0c00d3e518..d0ce943b323a93 100644 --- a/lib/manager/bundler/artifacts.spec.ts +++ b/lib/manager/bundler/artifacts.spec.ts @@ -7,7 +7,7 @@ import type { RepoGlobalConfig } from '../../config/types'; import * as _datasource from '../../datasource'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import type { UpdateArtifactsConfig } from '../types'; import * as _bundlerHostRules from './host-rules'; import { updateArtifacts } from '.'; diff --git a/lib/manager/cocoapods/artifacts.spec.ts b/lib/manager/cocoapods/artifacts.spec.ts index f36e1c8fda2343..77ca05394ab466 100644 --- a/lib/manager/cocoapods/artifacts.spec.ts +++ b/lib/manager/cocoapods/artifacts.spec.ts @@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as _datasource from '../../datasource'; import * as _env from '../../util/exec/env'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import type { UpdateArtifactsConfig } from '../types'; import { updateArtifacts } from '.'; diff --git a/lib/manager/composer/artifacts.spec.ts b/lib/manager/composer/artifacts.spec.ts index 3373630d4bd32c..7ebeaa8f2a4281 100644 --- a/lib/manager/composer/artifacts.spec.ts +++ b/lib/manager/composer/artifacts.spec.ts @@ -7,7 +7,7 @@ import { PlatformId } from '../../constants'; import * as _datasource from '../../datasource'; import * as datasourcePackagist from '../../datasource/packagist'; import * as docker from '../../util/exec/docker'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import * as hostRules from '../../util/host-rules'; import type { UpdateArtifactsConfig } from '../types'; import * as composer from './artifacts'; diff --git a/lib/manager/gomod/artifacts.spec.ts b/lib/manager/gomod/artifacts.spec.ts index 81520b3ac768a4..c4a2d881f56427 100644 --- a/lib/manager/gomod/artifacts.spec.ts +++ b/lib/manager/gomod/artifacts.spec.ts @@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import * as _hostRules from '../../util/host-rules'; import type { UpdateArtifactsConfig } from '../types'; import * as gomod from './artifacts'; diff --git a/lib/manager/gradle-wrapper/artifacts-real.spec.ts b/lib/manager/gradle-wrapper/artifacts-real.spec.ts index 4ae117f3d7380a..e5ff7af1289a37 100644 --- a/lib/manager/gradle-wrapper/artifacts-real.spec.ts +++ b/lib/manager/gradle-wrapper/artifacts-real.spec.ts @@ -5,7 +5,7 @@ import * as httpMock from '../../../test/http-mock'; import { git, partial } from '../../../test/util'; import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import { ifSystemSupportsGradle } from '../gradle/deep/__testutil__/gradle'; import type { UpdateArtifactsConfig } from '../types'; import * as gradleWrapper from '.'; diff --git a/lib/manager/gradle-wrapper/artifacts.spec.ts b/lib/manager/gradle-wrapper/artifacts.spec.ts index b7770644d8ae49..4d042f021fdfbd 100644 --- a/lib/manager/gradle-wrapper/artifacts.spec.ts +++ b/lib/manager/gradle-wrapper/artifacts.spec.ts @@ -12,7 +12,7 @@ import { import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { resetPrefetchedImages } from '../../util/exec/docker'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import type { UpdateArtifactsConfig } from '../types'; import * as gradleWrapper from '.'; diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts index 98dabbe218ec8a..3a70a7bf5e1a51 100644 --- a/lib/manager/gradle-wrapper/artifacts.ts +++ b/lib/manager/gradle-wrapper/artifacts.ts @@ -5,7 +5,8 @@ import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; import { ExecOptions, exec } from '../../util/exec'; import { readLocalFile, stat, writeLocalFile } from '../../util/fs'; -import { StatusResult, getRepoStatus } from '../../util/git'; +import { getRepoStatus } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import { Http } from '../../util/http'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; import { diff --git a/lib/manager/jsonnet-bundler/artifacts.spec.ts b/lib/manager/jsonnet-bundler/artifacts.spec.ts index 9b358b6fbbf729..87c666493499b2 100644 --- a/lib/manager/jsonnet-bundler/artifacts.spec.ts +++ b/lib/manager/jsonnet-bundler/artifacts.spec.ts @@ -3,7 +3,7 @@ import { envMock, exec, mockExecAll } from '../../../test/exec-util'; import { env, fs, git } from '../../../test/util'; import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import type { UpdateArtifactsConfig } from '../types'; import { updateArtifacts } from '.'; diff --git a/lib/manager/pip-compile/artifacts.spec.ts b/lib/manager/pip-compile/artifacts.spec.ts index fff86aa9d08564..6b37eb0e079291 100644 --- a/lib/manager/pip-compile/artifacts.spec.ts +++ b/lib/manager/pip-compile/artifacts.spec.ts @@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import type { UpdateArtifactsConfig } from '../types'; import * as pipCompile from './artifacts'; diff --git a/lib/manager/pipenv/artifacts.spec.ts b/lib/manager/pipenv/artifacts.spec.ts index c8351a87592b90..2993afd5476b89 100644 --- a/lib/manager/pipenv/artifacts.spec.ts +++ b/lib/manager/pipenv/artifacts.spec.ts @@ -7,7 +7,7 @@ import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import * as docker from '../../util/exec/docker'; import * as _env from '../../util/exec/env'; -import type { StatusResult } from '../../util/git'; +import type { StatusResult } from '../../util/git/types'; import type { UpdateArtifactsConfig } from '../types'; import * as pipenv from './artifacts'; diff --git a/lib/manager/types.ts b/lib/manager/types.ts index 326c07093bd377..77f848f3569445 100644 --- a/lib/manager/types.ts +++ b/lib/manager/types.ts @@ -6,7 +6,7 @@ import type { } from '../config/types'; import type { ProgrammingLanguage } from '../constants'; import type { RangeStrategy, SkipReason } from '../types'; -import type { File } from '../util/git'; +import type { File } from '../util/git/types'; export type Result = T | Promise; diff --git a/lib/util/git/author.ts b/lib/util/git/author.ts index f029ebc3363762..26860683b635e7 100644 --- a/lib/util/git/author.ts +++ b/lib/util/git/author.ts @@ -1,11 +1,7 @@ import addrs from 'email-addresses'; import { logger } from '../../logger'; import { regEx } from '../regex'; - -export interface GitAuthor { - name?: string; - address?: string; -} +import type { GitAuthor } from './types'; export function parseGitAuthor(input: string): GitAuthor | null { let result: GitAuthor = null; diff --git a/lib/util/git/config.ts b/lib/util/git/config.ts index 7842559b577edb..056189cfca23d9 100644 --- a/lib/util/git/config.ts +++ b/lib/util/git/config.ts @@ -1,15 +1,8 @@ import is from '@sindresorhus/is'; import { SimpleGitOptions } from 'simple-git'; +import type { GitNoVerifyOption } from './types'; -export const enum GitNoVerifyOption { - Commit = 'commit', - Push = 'push', -} - -let noVerify: GitNoVerifyOption[] = [ - GitNoVerifyOption.Push, - GitNoVerifyOption.Commit, -]; +let noVerify: GitNoVerifyOption[] = ['push', 'commit']; export function setNoVerify(value: GitNoVerifyOption[]): void { if (!is.array(value, is.string)) { diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index 99e2ec22140af4..23dfe76acf5a0f 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -5,7 +5,7 @@ import tmp from 'tmp-promise'; import { GlobalConfig } from '../../config/global'; import { CONFIG_VALIDATION } from '../../constants/error-messages'; import * as git from '.'; -import { GitNoVerifyOption, setNoVerify } from '.'; +import { setNoVerify } from '.'; describe('util/git/index', () => { jest.setTimeout(15000); @@ -363,7 +363,7 @@ describe('util/git/index', () => { contents: 'some new-contents', }, ]; - setNoVerify([GitNoVerifyOption.Commit]); + setNoVerify(['commit']); await git.commitFiles({ branchName: 'renovate/something', @@ -393,7 +393,7 @@ describe('util/git/index', () => { contents: 'some new-contents', }, ]; - setNoVerify([GitNoVerifyOption.Push]); + setNoVerify(['push']); await git.commitFiles({ branchName: 'renovate/something', diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index fcd7990b5f6a1f..58f5450373eef1 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -1,13 +1,6 @@ import URL from 'url'; import fs from 'fs-extra'; -import Git, { - DiffResult as DiffResult_, - Options, - ResetMode, - SimpleGit, - StatusResult as StatusResult_, - TaskOptions, -} from 'simple-git'; +import Git, { Options, ResetMode, SimpleGit, TaskOptions } from 'simple-git'; import { join } from 'upath'; import { configFileNames } from '../../config/app-strings'; import { GlobalConfig } from '../../config/global'; @@ -22,45 +15,27 @@ import { } from '../../constants/error-messages'; import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; -import { GitOptions, GitProtocol } from '../../types/git'; +import type { GitProtocol } from '../../types/git'; import { Limit, incLimitedValue } from '../../workers/global/limits'; import { regEx } from '../regex'; import { parseGitAuthor } from './author'; -import { GitNoVerifyOption, getNoVerify, simpleGitConfig } from './config'; +import { getNoVerify, simpleGitConfig } from './config'; import { configSigningKey, writePrivateKey } from './private-key'; - -export { GitNoVerifyOption, setNoVerify } from './config'; +import type { + CommitFilesConfig, + CommitSha, + LocalConfig, + StatusResult, + StorageConfig, +} from './types'; + +export { setNoVerify } from './config'; export { setPrivateKey } from './private-key'; declare module 'fs-extra' { export function exists(pathLike: string): Promise; } -export type StatusResult = StatusResult_; - -export type DiffResult = DiffResult_; - -export type CommitSha = string; - -interface StorageConfig { - currentBranch?: string; - url: string; - extraCloneOpts?: GitOptions; - cloneSubmodules?: boolean; - fullClone?: boolean; -} - -interface LocalConfig extends StorageConfig { - additionalBranches: string[]; - currentBranch: string; - currentBranchSha: string; - branchCommits: Record; - branchIsModified: Record; - ignoredAuthors: string[]; - gitAuthorName?: string; - gitAuthorEmail?: string; -} - // istanbul ignore next function checkForPlatformFailure(err: Error): void { if (process.env.NODE_ENV === 'test') { @@ -660,33 +635,6 @@ export async function hasDiff(branchName: string): Promise { } } -/** - * File to commit - */ -export interface File { - /** - * Relative file path - */ - name: string; - - /** - * file contents - */ - contents: string | Buffer; - - /** - * the executable bit - */ - executable?: boolean; -} - -export type CommitFilesConfig = { - branchName: string; - files: File[]; - message: string; - force?: boolean; -}; - export async function commitFiles({ branchName, files, @@ -764,7 +712,7 @@ export async function commitFiles({ } const commitOptions: Options = {}; - if (getNoVerify().includes(GitNoVerifyOption.Commit)) { + if (getNoVerify().includes('commit')) { commitOptions['--no-verify'] = null; } @@ -795,7 +743,7 @@ export async function commitFiles({ '--force-with-lease': null, '-u': null, }; - if (getNoVerify().includes(GitNoVerifyOption.Push)) { + if (getNoVerify().includes('push')) { pushOptions['--no-verify'] = null; } diff --git a/lib/util/git/types.ts b/lib/util/git/types.ts new file mode 100644 index 00000000000000..edf2902e214fdd --- /dev/null +++ b/lib/util/git/types.ts @@ -0,0 +1,58 @@ +import type { GitOptions } from '../../types/git'; + +export type { DiffResult, StatusResult } from 'simple-git'; + +export interface GitAuthor { + name?: string; + address?: string; +} + +export type GitNoVerifyOption = 'commit' | 'push'; + +export type CommitSha = string; + +export interface StorageConfig { + currentBranch?: string; + url: string; + extraCloneOpts?: GitOptions; + cloneSubmodules?: boolean; + fullClone?: boolean; +} + +export interface LocalConfig extends StorageConfig { + additionalBranches: string[]; + currentBranch: string; + currentBranchSha: string; + branchCommits: Record; + branchIsModified: Record; + ignoredAuthors: string[]; + gitAuthorName?: string; + gitAuthorEmail?: string; +} + +/** + * File to commit + */ +export interface File { + /** + * Relative file path + */ + name: string; + + /** + * file contents + */ + contents: string | Buffer; + + /** + * the executable bit + */ + executable?: boolean; +} + +export type CommitFilesConfig = { + branchName: string; + files: File[]; + message: string; + force?: boolean; +}; diff --git a/lib/workers/branch/execute-post-upgrade-commands.ts b/lib/workers/branch/execute-post-upgrade-commands.ts index 7c863533f9ee76..8a2fc6d0545e7f 100644 --- a/lib/workers/branch/execute-post-upgrade-commands.ts +++ b/lib/workers/branch/execute-post-upgrade-commands.ts @@ -5,7 +5,8 @@ import { addMeta, logger } from '../../logger'; import type { ArtifactError } from '../../manager/types'; import { exec } from '../../util/exec'; import { readLocalFile, writeLocalFile } from '../../util/fs'; -import { File, getRepoStatus } from '../../util/git'; +import { getRepoStatus } from '../../util/git'; +import type { File } from '../../util/git/types'; import { regEx } from '../../util/regex'; import { sanitize } from '../../util/sanitize'; import { compile } from '../../util/template'; diff --git a/lib/workers/branch/get-updated.ts b/lib/workers/branch/get-updated.ts index 287c705488a3c9..2bd880163a4e04 100644 --- a/lib/workers/branch/get-updated.ts +++ b/lib/workers/branch/get-updated.ts @@ -3,7 +3,8 @@ import { WORKER_FILE_UPDATE_FAILED } from '../../constants/error-messages'; import { logger } from '../../logger'; import { get } from '../../manager'; import type { ArtifactError, PackageDependency } from '../../manager/types'; -import { File, getFile } from '../../util/git'; +import { getFile } from '../../util/git'; +import { File } from '../../util/git/types'; import type { BranchConfig } from '../types'; import { doAutoReplace } from './auto-replace'; diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts index d819e2e03bc2c2..196ac118a3621f 100644 --- a/lib/workers/branch/index.spec.ts +++ b/lib/workers/branch/index.spec.ts @@ -10,7 +10,7 @@ import * as _npmPostExtract from '../../manager/npm/post-update'; import type { WriteExistingFilesResult } from '../../manager/npm/post-update/types'; import { PrState } from '../../types'; import * as _exec from '../../util/exec'; -import { File, StatusResult } from '../../util/git'; +import type { File, StatusResult } from '../../util/git/types'; import * as _mergeConfidence from '../../util/merge-confidence'; import * as _sanitize from '../../util/sanitize'; import * as _limits from '../global/limits'; diff --git a/lib/workers/types.ts b/lib/workers/types.ts index 401464f9664541..02e0c5a44f4453 100644 --- a/lib/workers/types.ts +++ b/lib/workers/types.ts @@ -14,7 +14,7 @@ import type { PackageFile, } from '../manager/types'; import type { PlatformPrOptions } from '../platform/types'; -import type { File } from '../util/git'; +import type { File } from '../util/git/types'; import type { MergeConfidence } from '../util/merge-confidence'; import type { ChangeLogResult } from './pr/changelog/types'; From e16060efccb282d4476ac4f0477733144ebe2b36 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 27 Nov 2021 06:21:49 +0100 Subject: [PATCH 174/248] build(deps): update dependency got to v11.8.3 (#12838) --- .../__snapshots__/err-serializer.spec.ts.snap | 2 +- package.json | 2 +- yarn.lock | 21 ++----------------- 3 files changed, 4 insertions(+), 21 deletions(-) diff --git a/lib/logger/__snapshots__/err-serializer.spec.ts.snap b/lib/logger/__snapshots__/err-serializer.spec.ts.snap index 28a773719a6d8d..ce8133fcf296e8 100644 --- a/lib/logger/__snapshots__/err-serializer.spec.ts.snap +++ b/lib/logger/__snapshots__/err-serializer.spec.ts.snap @@ -51,7 +51,7 @@ Array [ exports[`logger/err-serializer got sanitize http error 2`] = ` Object { - "code": undefined, + "code": "ERR_NON_2XX_3XX_RESPONSE", "message": "Response code 412 (Precondition Failed)", "name": "HTTPError", "options": Object { diff --git a/package.json b/package.json index c77cda454396d5..741d625c43eb4d 100644 --- a/package.json +++ b/package.json @@ -161,7 +161,7 @@ "git-url-parse": "11.6.0", "github-url-from-git": "1.5.0", "global-agent": "2.2.0", - "got": "11.8.2", + "got": "11.8.3", "handlebars": "4.7.7", "handy-redis": "2.3.1", "hasha": "5.2.2", diff --git a/yarn.lock b/yarn.lock index 7e3cd07a370c83..bfbbab1a0b80c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4124,7 +4124,7 @@ cacheable-lookup@^5.0.3: resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== -cacheable-request@^7.0.1, cacheable-request@^7.0.2: +cacheable-request@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== @@ -5843,24 +5843,7 @@ globby@^11.0.0, globby@^11.0.1, globby@^11.0.4, globby@~11.0.4: merge2 "^1.3.0" slash "^3.0.0" -got@11.8.2: - version "11.8.2" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" - integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.1" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -got@^11.7.0: +got@11.8.3, got@^11.7.0: version "11.8.3" resolved "https://registry.yarnpkg.com/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg== From d1229b228c403d68bebab5f56bba84a0e427c635 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Sat, 27 Nov 2021 12:42:10 +0700 Subject: [PATCH 175/248] feat(platform/azure): modify getJsonFile to use branchOrTag (#12826) Co-authored-by: Michael Kriese --- .../azure/__snapshots__/index.spec.ts.snap | 7 +++++++ .../azure/__snapshots__/index.spec.ts.snap | 7 +++++++ lib/platform/azure/index.spec.ts | 2 +- lib/platform/azure/index.ts | 18 +++++++++++++++++- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/config/presets/azure/__snapshots__/index.spec.ts.snap b/lib/config/presets/azure/__snapshots__/index.spec.ts.snap index c9758c77a590f4..862395350f3778 100644 --- a/lib/config/presets/azure/__snapshots__/index.spec.ts.snap +++ b/lib/config/presets/azure/__snapshots__/index.spec.ts.snap @@ -5,6 +5,13 @@ Array [ Array [ "123456", "some-filename.json", + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, ], ] `; diff --git a/lib/platform/azure/__snapshots__/index.spec.ts.snap b/lib/platform/azure/__snapshots__/index.spec.ts.snap index 1a4ccf8fe17198..e40a8dc126c859 100644 --- a/lib/platform/azure/__snapshots__/index.spec.ts.snap +++ b/lib/platform/azure/__snapshots__/index.spec.ts.snap @@ -206,6 +206,13 @@ Array [ Array [ "123456", "file.json", + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, ], ] `; diff --git a/lib/platform/azure/index.spec.ts b/lib/platform/azure/index.spec.ts index f9946440b64bec..29b8a88a8abf29 100644 --- a/lib/platform/azure/index.spec.ts +++ b/lib/platform/azure/index.spec.ts @@ -1265,7 +1265,7 @@ describe('platform/azure/index', () => { expect(res).toEqual({ foo: 'bar' }); }); - it('ignores branchOrTag', async () => { + it('returns file content from branch or tag', async () => { const data = { foo: 'bar' }; azureApi.gitApi.mockImplementationOnce( () => diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts index 1b340395f2739a..231cc0558d12ab 100644 --- a/lib/platform/azure/index.ts +++ b/lib/platform/azure/index.ts @@ -5,6 +5,7 @@ import { GitPullRequestMergeStrategy, GitStatus, GitStatusState, + GitVersionDescriptor, PullRequestStatus, } from 'azure-devops-node-api/interfaces/GitInterfaces'; import delay from 'delay'; @@ -127,7 +128,22 @@ export async function getRawFile( repoId = config.repoId; } - const buf = await azureApiGit.getItemContent(repoId, fileName); + const versionDescriptor: GitVersionDescriptor = { + version: branchOrTag, + } as GitVersionDescriptor; + + const buf = await azureApiGit.getItemContent( + repoId, + fileName, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + branchOrTag ? versionDescriptor : undefined + ); + const str = await streamToString(buf); return str; } From 562d4ef5e9558fdc4c0cfb853fc448d256892d60 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 27 Nov 2021 08:54:06 +0300 Subject: [PATCH 176/248] test(util/sanitize): Improve test for sanitize function (#12860) --- lib/util/__snapshots__/sanitize.spec.ts.snap | 3 --- lib/util/sanitize.spec.ts | 15 +++++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) delete mode 100644 lib/util/__snapshots__/sanitize.spec.ts.snap diff --git a/lib/util/__snapshots__/sanitize.spec.ts.snap b/lib/util/__snapshots__/sanitize.spec.ts.snap deleted file mode 100644 index a2b1fff385f13c..00000000000000 --- a/lib/util/__snapshots__/sanitize.spec.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`util/sanitize sanitizes secrets from strings 1`] = `"My token is **redacted**, username is \\"userabc\\" and password is \\"**redacted**\\" (hashed: **redacted**)"`; diff --git a/lib/util/sanitize.spec.ts b/lib/util/sanitize.spec.ts index c3d96fb9d59fee..15068a9d9db91b 100644 --- a/lib/util/sanitize.spec.ts +++ b/lib/util/sanitize.spec.ts @@ -16,11 +16,14 @@ describe('util/sanitize', () => { const hashed = Buffer.from(`${username}:${password}`).toString('base64'); add(hashed); add(password); - // FIXME: explicit assert condition - expect( - sanitize( - `My token is ${token}, username is "${username}" and password is "${password}" (hashed: ${hashed})` - ) - ).toMatchSnapshot(); + + const input = `My token is ${token}, username is "${username}" and password is "${password}" (hashed: ${hashed})`; + const output = + 'My token is **redacted**, username is "userabc" and password is "**redacted**" (hashed: **redacted**)'; + expect(sanitize(input)).toBe(output); + + const inputX2 = [input, input].join('\n'); + const outputX2 = [output, output].join('\n'); + expect(sanitize(inputX2)).toBe(outputX2); }); }); From 79da9bc0780e4d64158f7cc83661e0859491dabd Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 27 Nov 2021 09:38:47 +0300 Subject: [PATCH 177/248] refactor(logger): Switch to nanoid (#12861) --- lib/logger/index.ts | 4 ++-- package.json | 2 +- yarn.lock | 15 ++++----------- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/lib/logger/index.ts b/lib/logger/index.ts index 421f86caa35d1c..5dbd16ff66e8b0 100644 --- a/lib/logger/index.ts +++ b/lib/logger/index.ts @@ -1,6 +1,6 @@ import is from '@sindresorhus/is'; import * as bunyan from 'bunyan'; -import * as shortid from 'shortid'; +import { nanoid } from 'nanoid'; import cmdSerializer from './cmd-serializer'; import configSerializer from './config-serializer'; import errSerializer from './err-serializer'; @@ -8,7 +8,7 @@ import { RenovateStream } from './pretty-stdout'; import type { BunyanRecord, Logger } from './types'; import { ProblemStream, withSanitizer } from './utils'; -let logContext: string = process.env.LOG_CONTEXT || shortid.generate(); +let logContext: string = process.env.LOG_CONTEXT ?? nanoid(); let curMeta = {}; const problems = new ProblemStream(); diff --git a/package.json b/package.json index 741d625c43eb4d..5c897c2116aff1 100644 --- a/package.json +++ b/package.json @@ -177,6 +177,7 @@ "marshal": "0.5.2", "minimatch": "3.0.4", "moo": "0.5.1", + "nanoid": "3.1.30", "node-html-parser": "3.3.6", "openpgp": "5.0.1", "p-all": "3.0.0", @@ -192,7 +193,6 @@ "semver-stable": "3.0.0", "semver-utils": "1.1.4", "shlex": "2.1.0", - "shortid": "2.2.16", "simple-git": "2.47.0", "slugify": "1.6.2", "traverse": "0.6.6", diff --git a/yarn.lock b/yarn.lock index bfbbab1a0b80c0..3db33422db6d9d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7974,10 +7974,10 @@ nan@^2.14.0, nan@^2.14.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== -nanoid@^2.1.0: - version "2.1.11" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" - integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== +nanoid@3.1.30: + version "3.1.30" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" + integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== natural-compare@^1.4.0: version "1.4.0" @@ -9523,13 +9523,6 @@ shlex@2.1.0: resolved "https://registry.yarnpkg.com/shlex/-/shlex-2.1.0.tgz#4f8fbf75c4a9956283e4095fa5eac3f4969f6a6b" integrity sha512-Tk8PjohJbWpGu2NtAlsEi/9AS4GU2zW2ZWLFrWRDskZpSJmyBIU3nTkBtocxD90r3w4BwRevsNtIqIP9HMuYiQ== -shortid@2.2.16: - version "2.2.16" - resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.16.tgz#b742b8f0cb96406fd391c76bfc18a67a57fe5608" - integrity sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g== - dependencies: - nanoid "^2.1.0" - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" From fb8715c921319dc26eb121efc74cf804f9eaf408 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 27 Nov 2021 11:40:44 +0300 Subject: [PATCH 178/248] refactor(logger): Simplify sanitizeValue function (#12859) * refactor(logger): Simplify sanitizeValue function * Return older test * One more test for functions --- lib/logger/index.spec.ts | 8 +++++ lib/logger/utils.ts | 64 +++++++++++++++++++++++++--------------- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/lib/logger/index.spec.ts b/lib/logger/index.spec.ts index c6de2300da9b2e..d55c13a68b667c 100644 --- a/lib/logger/index.spec.ts +++ b/lib/logger/index.spec.ts @@ -152,6 +152,10 @@ describe('logger/index', () => { }); add({ password: 'secret"password' }); + class SomeClass { + constructor(public field: string) {} + } + logger.error({ foo: 'secret"password', bar: ['somethingelse', 'secret"password'], @@ -162,6 +166,8 @@ describe('logger/index', () => { secrets: { foo: 'barsecret', }, + someFn: () => 'secret"password', + someObject: new SomeClass('secret"password'), }); expect(logged.foo).not.toBe('secret"password'); @@ -173,5 +179,7 @@ describe('logger/index', () => { expect(logged.content).toBe('[content]'); expect(logged.prBody).toBe('[Template]'); expect(logged.secrets.foo).toBe('***********'); + expect(logged.someFn).toBe('[function]'); + expect(logged.someObject.field).toBe('**redacted**'); }); }); diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index b8d6ebef2c3391..ab00f9746e5b4d 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -1,4 +1,5 @@ import { Stream } from 'stream'; +import is from '@sindresorhus/is'; import bunyan from 'bunyan'; import fs from 'fs-extra'; import { clone } from '../util/clone'; @@ -90,38 +91,54 @@ export default function prepareError(err: Error): Record { return response; } -export function sanitizeValue(_value: unknown, seen = new WeakMap()): any { - let value = _value; - if (Array.isArray(value)) { - const length = value.length; - const arrayResult = Array(length); - seen.set(value, arrayResult); - for (let idx = 0; idx < length; idx += 1) { - const val = value[idx]; - arrayResult[idx] = seen.has(val) - ? seen.get(val) - : sanitizeValue(val, seen); - } - return arrayResult; +type NestedValue = unknown[] | object; + +function isNested(value: unknown): value is NestedValue { + return is.array(value) || is.object(value); +} + +export function sanitizeValue( + value: unknown, + seen = new WeakMap() +): any { + if (is.string(value)) { + return sanitize(value); } - if (value instanceof Buffer) { - return '[content]'; + if (is.date(value)) { + return value; } - if (value instanceof Error) { - value = prepareError(value); + if (is.function_(value)) { + return '[function]'; } - const valueType = typeof value; + if (is.buffer(value)) { + return '[content]'; + } + + if (is.error(value)) { + const err = prepareError(value); + return sanitizeValue(err, seen); + } - if (value && valueType !== 'function' && valueType === 'object') { - if (value instanceof Date) { - return value; + if (is.array(value)) { + const length = value.length; + const arrayResult = Array(length); + seen.set(value, arrayResult); + for (let idx = 0; idx < length; idx += 1) { + const val = value[idx]; + arrayResult[idx] = + isNested(val) && seen.has(val) + ? seen.get(val) + : sanitizeValue(val, seen); } + return arrayResult; + } + if (is.object(value)) { const objectResult: Record = {}; - seen.set(value as any, objectResult); + seen.set(value, objectResult); for (const [key, val] of Object.entries(value)) { let curValue: any; if (!val) { @@ -143,10 +160,11 @@ export function sanitizeValue(_value: unknown, seen = new WeakMap()): any { objectResult[key] = curValue; } + return objectResult; } - return valueType === 'string' ? sanitize(value as string) : value; + return value; } export function withSanitizer(streamConfig: bunyan.Stream): bunyan.Stream { From e7a969016d4a00f77f677713c547c33f199936ba Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 27 Nov 2021 12:22:58 +0300 Subject: [PATCH 179/248] refactor(logger): Update logger internals (#12842) * refactor(logger): Update logger internals * Check the entire logger directory * Refactor sanitizeValue function * Backport changes * Backport test too --- lib/logger/config-serializer.ts | 20 +++++++++++--------- lib/logger/index.spec.ts | 14 +++++++------- lib/logger/index.ts | 2 +- lib/logger/types.ts | 6 +++++- lib/logger/utils.ts | 13 +++++++++---- tsconfig.strict.json | 6 ++++++ 6 files changed, 39 insertions(+), 22 deletions(-) diff --git a/lib/logger/config-serializer.ts b/lib/logger/config-serializer.ts index 240cbd2f73c22d..cc54936e583c40 100644 --- a/lib/logger/config-serializer.ts +++ b/lib/logger/config-serializer.ts @@ -14,15 +14,17 @@ export default function configSerializer( const arrayFields = ['packageFiles', 'upgrades']; return traverse(config).map(function scrub(val: string) { - if (val && templateFields.includes(this.key)) { - this.update('[Template]'); - } - if (val && contentFields.includes(this.key)) { - this.update('[content]'); - } - // istanbul ignore if - if (val && arrayFields.includes(this.key)) { - this.update('[Array]'); + if (this.key && val) { + if (templateFields.includes(this.key)) { + this.update('[Template]'); + } + if (contentFields.includes(this.key)) { + this.update('[content]'); + } + // istanbul ignore if + if (arrayFields.includes(this.key)) { + this.update('[Array]'); + } } }); } diff --git a/lib/logger/index.spec.ts b/lib/logger/index.spec.ts index d55c13a68b667c..3a3e10966360e1 100644 --- a/lib/logger/index.spec.ts +++ b/lib/logger/index.spec.ts @@ -92,10 +92,10 @@ describe('logger/index', () => { }); it('supports file-based logging', () => { - let chunk = null; + let chunk = ''; fs.createWriteStream.mockReturnValueOnce({ writable: true, - write(x) { + write(x: string) { chunk = x; }, }); @@ -112,10 +112,10 @@ describe('logger/index', () => { }); it('handles cycles', () => { - let logged = null; + let logged: Record = {}; fs.createWriteStream.mockReturnValueOnce({ writable: true, - write(x) { + write(x: string) { logged = JSON.parse(x); }, }); @@ -126,7 +126,7 @@ describe('logger/index', () => { level: 'error', }); - const meta = { foo: null, bar: [] }; + const meta: Record = { foo: null, bar: [] }; meta.foo = meta; meta.bar.push(meta); logger.error(meta, 'foo'); @@ -137,10 +137,10 @@ describe('logger/index', () => { }); it('sanitizes secrets', () => { - let logged = null; + let logged: Record = {}; fs.createWriteStream.mockReturnValueOnce({ writable: true, - write(x) { + write(x: string) { logged = JSON.parse(x); }, }); diff --git a/lib/logger/index.ts b/lib/logger/index.ts index 5dbd16ff66e8b0..66f91378fdc236 100644 --- a/lib/logger/index.ts +++ b/lib/logger/index.ts @@ -9,7 +9,7 @@ import type { BunyanRecord, Logger } from './types'; import { ProblemStream, withSanitizer } from './utils'; let logContext: string = process.env.LOG_CONTEXT ?? nanoid(); -let curMeta = {}; +let curMeta: Record = {}; const problems = new ProblemStream(); diff --git a/lib/logger/types.ts b/lib/logger/types.ts index a7d081e0a28055..a4fa07fe2da407 100644 --- a/lib/logger/types.ts +++ b/lib/logger/types.ts @@ -30,5 +30,9 @@ export interface BunyanRecord extends Record { export type BunyanStream = (NodeJS.WritableStream | Stream) & { writable?: boolean; - write: (chunk: BunyanRecord, enc, cb) => void; + write: ( + chunk: BunyanRecord, + enc: BufferEncoding, + cb: (err?: Error | null) => void + ) => void; }; diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index ab00f9746e5b4d..0bb5ffdaf317d3 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -71,9 +71,10 @@ export default function prepareError(err: Error): Record { }; response.options = options; - for (const k of ['username', 'password', 'method', 'http2']) { - options[k] = err.options[k]; - } + options.username = err.options.username; + options.password = err.options.password; + options.method = err.options.method; + options.http2 = err.options.http2; // istanbul ignore else if (err.response) { @@ -174,7 +175,11 @@ export function withSanitizer(streamConfig: bunyan.Stream): bunyan.Stream { const stream = streamConfig.stream as BunyanStream; if (stream?.writable) { - const write = (chunk: BunyanRecord, enc, cb): void => { + const write = ( + chunk: BunyanRecord, + enc: BufferEncoding, + cb: (err?: Error | null) => void + ): void => { const raw = sanitizeValue(chunk); const result = streamConfig.type === 'raw' diff --git a/tsconfig.strict.json b/tsconfig.strict.json index dbadb581e39e05..2f67feec4ce983 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -46,6 +46,12 @@ "./lib/globals.d.ts", "./lib/logger/__mocks__/index.ts", "./lib/logger/cmd-serializer.ts", + "./lib/logger/config-serializer.ts", + "./lib/logger/err-serializer.ts", + "./lib/logger/index.ts", + "./lib/logger/pretty-stdout.ts", + "./lib/logger/types.ts", + "./lib/logger/utils.ts", "./lib/manager/argocd/types.ts", "./lib/manager/azure-pipelines/types.ts", "./lib/manager/bazel/types.ts", From 0638bfd716ef902ccb6d4aefabd30b8e3d3d556f Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 27 Nov 2021 12:32:39 +0300 Subject: [PATCH 180/248] refactor(workers): Strict nulls for CommitMessage class (#12863) Co-authored-by: Michael Kriese --- lib/workers/repository/model/commit-message.ts | 8 ++++---- tsconfig.strict.json | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/workers/repository/model/commit-message.ts b/lib/workers/repository/model/commit-message.ts index c62dd048b7d98b..bab8afd4f6f429 100644 --- a/lib/workers/repository/model/commit-message.ts +++ b/lib/workers/repository/model/commit-message.ts @@ -1,9 +1,9 @@ export class CommitMessage { public static readonly SEPARATOR: string = ':'; - private message: string; + private message = ''; - private prefix: string; + private prefix = ''; constructor(message = '') { this.setMessage(message); @@ -26,11 +26,11 @@ export class CommitMessage { } public setCustomPrefix(prefix?: string): void { - this.prefix = (prefix || '').trim(); + this.prefix = (prefix ?? '').trim(); } public setSemanticPrefix(type?: string, scope?: string): void { - this.prefix = (type || '').trim(); + this.prefix = (type ?? '').trim(); if (scope?.trim()) { this.prefix += `(${scope.trim()})`; diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 2f67feec4ce983..3e8b6d89ff3bed 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -122,6 +122,7 @@ "./lib/workers/pr/changelog/hbs-template.ts", "./lib/workers/pr/changelog/types.ts", "./lib/workers/repository/init/types.ts", + "./lib/workers/repository/model/commit-message.ts", "./test/graphql-snapshot.ts", "./test/json-schema.ts", "./test/newline-snapshot-serializer.ts", From b90aeda507bcbd1847991cf8028a355ed4bfccac Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 27 Nov 2021 13:04:49 +0300 Subject: [PATCH 181/248] refactor(typescript): Enable null check for some trivial files (#12864) * refactor(typescript): Enable null check for some trivial type files * Add "test/http-mock.ts" Co-authored-by: Michael Kriese Co-authored-by: Rhys Arkins --- tsconfig.strict.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 3e8b6d89ff3bed..55d8ed90782f28 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -7,6 +7,7 @@ }, "files": [ "./lib/config/app-strings.ts", + "./lib/config/migrations/types.ts", "./lib/config/presets/common.ts", "./lib/constants/error-messages.ts", "./lib/constants/platforms.ts", @@ -30,11 +31,14 @@ "./lib/datasource/gitlab-releases/types.ts", "./lib/datasource/gitlab-tags/types.ts", "./lib/datasource/gradle-version/types.ts", + "./lib/datasource/helm/types.ts", "./lib/datasource/hex/types.ts", "./lib/datasource/maven/common.ts", + "./lib/datasource/maven/types.ts", "./lib/datasource/node/common.ts", "./lib/datasource/node/types.ts", "./lib/datasource/npm/common.ts", + "./lib/datasource/npm/types.ts", "./lib/datasource/nuget/types.ts", "./lib/datasource/orb/types.ts", "./lib/datasource/pypi/types.ts", @@ -64,6 +68,7 @@ "./lib/manager/gitlabci/utils.ts", "./lib/manager/gradle-wrapper/types.ts", "./lib/manager/gradle/deep/types.ts", + "./lib/manager/gradle/shallow/common.ts", "./lib/manager/gradle/types.ts", "./lib/manager/helm-values/types.ts", "./lib/manager/helmfile/types.ts", @@ -109,6 +114,7 @@ "./lib/util/exec/common.ts", "./lib/util/exec/types.ts", "./lib/util/git/config.ts", + "./lib/util/git/types.ts", "./lib/util/html.ts", "./lib/util/http/hooks.ts", "./lib/util/http/types.ts", @@ -124,6 +130,7 @@ "./lib/workers/repository/init/types.ts", "./lib/workers/repository/model/commit-message.ts", "./test/graphql-snapshot.ts", + "./test/http-mock.ts", "./test/json-schema.ts", "./test/newline-snapshot-serializer.ts", "./test/static-files.spec.ts", From ef51e85b7ab0fe7fc50fc654760bb663457a5e33 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sat, 27 Nov 2021 15:08:24 +0300 Subject: [PATCH 182/248] refactor(cache/package): Enable strict checks (#12862) Co-authored-by: Rhys Arkins --- lib/util/cache/package/decorator.spec.ts | 9 ++++++--- lib/util/cache/package/decorator.ts | 9 +++++++-- lib/util/cache/package/file.ts | 2 +- lib/util/cache/package/index.ts | 16 ++++++++++------ lib/util/cache/package/redis.ts | 4 ++-- lib/util/cache/package/types.ts | 2 +- tsconfig.strict.json | 4 ++++ 7 files changed, 31 insertions(+), 15 deletions(-) diff --git a/lib/util/cache/package/decorator.spec.ts b/lib/util/cache/package/decorator.spec.ts index dd9f27244d0d15..8aa008b09cd3e1 100644 --- a/lib/util/cache/package/decorator.spec.ts +++ b/lib/util/cache/package/decorator.spec.ts @@ -36,7 +36,10 @@ describe('util/cache/package/decorator', () => { it('Do cache null', async () => { class MyClass { @cache({ namespace: 'namespace', key: (cacheKey, test) => cacheKey }) - public async getString(cacheKey: string, test: string): Promise { + public async getString( + cacheKey: string, + test: string | null + ): Promise { await spy(); return test; } @@ -52,7 +55,7 @@ describe('util/cache/package/decorator', () => { it('Do not cache undefined', async () => { class MyClass { @cache({ namespace: 'namespace', key: 'undefined' }) - public async getString(): Promise { + public async getString(): Promise { await spy(); return undefined; } @@ -66,7 +69,7 @@ describe('util/cache/package/decorator', () => { it('should cache function', async () => { class MyClass { @cache({ - namespace: (arg: GetReleasesConfig) => arg.registryUrl, + namespace: (arg: GetReleasesConfig) => arg.registryUrl ?? 'default', key: () => 'key', }) public async getNumber(_: GetReleasesConfig): Promise { diff --git a/lib/util/cache/package/decorator.ts b/lib/util/cache/package/decorator.ts index cf7382e2d691d3..a0d8e0d0ef6f7d 100644 --- a/lib/util/cache/package/decorator.ts +++ b/lib/util/cache/package/decorator.ts @@ -101,20 +101,25 @@ export function cache({ return callback(); } - let finalNamespace: string; + let finalNamespace: string | undefined; if (is.string(namespace)) { finalNamespace = namespace; } else if (is.function_(namespace)) { finalNamespace = namespace.apply(instance, args); } - let finalKey: string; + let finalKey: string | undefined; if (is.string(key)) { finalKey = key; } else if (is.function_(key)) { finalKey = key.apply(instance, args); } + // istanbul ignore if + if (!finalNamespace || !finalKey) { + return callback(); + } + const cachedResult = await packageCache.get( finalNamespace, finalKey diff --git a/lib/util/cache/package/file.ts b/lib/util/cache/package/file.ts index 2c66f4afa31d56..99965ba0dc3109 100644 --- a/lib/util/cache/package/file.ts +++ b/lib/util/cache/package/file.ts @@ -17,7 +17,7 @@ async function rm(namespace: string, key: string): Promise { export async function get( namespace: string, key: string -): Promise { +): Promise { if (!cacheFileName) { return undefined; } diff --git a/lib/util/cache/package/index.ts b/lib/util/cache/package/index.ts index a4bf0f57405b9c..a524d9986e1c5d 100644 --- a/lib/util/cache/package/index.ts +++ b/lib/util/cache/package/index.ts @@ -10,7 +10,10 @@ function getGlobalKey(namespace: string, key: string): string { return `global%%${namespace}%%${key}`; } -export function get(namespace: string, key: string): Promise { +export async function get( + namespace: string, + key: string +): Promise { if (!cacheProxy) { return undefined; } @@ -18,21 +21,22 @@ export function get(namespace: string, key: string): Promise { if (memCache.get(globalKey) === undefined) { memCache.set(globalKey, cacheProxy.get(namespace, key)); } - return memCache.get(globalKey); + const result = await memCache.get(globalKey); + return result; } -export function set( +export async function set( namespace: string, key: string, value: unknown, minutes: number ): Promise { if (!cacheProxy) { - return undefined; + return; } const globalKey = getGlobalKey(namespace, key); memCache.set(globalKey, value); - return cacheProxy.set(namespace, key, value, minutes); + await cacheProxy.set(namespace, key, value, minutes); } export function init(config: AllConfig): void { @@ -42,7 +46,7 @@ export function init(config: AllConfig): void { get: redisCache.get, set: redisCache.set, }; - } else { + } else if (config.cacheDir) { fileCache.init(config.cacheDir); cacheProxy = { get: fileCache.get, diff --git a/lib/util/cache/package/redis.ts b/lib/util/cache/package/redis.ts index cdafdb18f81cca..95954154ea7ccc 100644 --- a/lib/util/cache/package/redis.ts +++ b/lib/util/cache/package/redis.ts @@ -25,14 +25,14 @@ async function rm(namespace: string, key: string): Promise { export async function get( namespace: string, key: string -): Promise { +): Promise { if (!client) { return undefined; } logger.trace(`cache.get(${namespace}, ${key})`); try { const res = await client?.get(getKey(namespace, key)); - const cachedValue = JSON.parse(res); + const cachedValue = res && JSON.parse(res); if (cachedValue) { if (DateTime.local() < DateTime.fromISO(cachedValue.expiry)) { logger.trace({ namespace, key }, 'Returning cached value'); diff --git a/lib/util/cache/package/types.ts b/lib/util/cache/package/types.ts index 89896e47ac5135..51fa8a0e7ca520 100644 --- a/lib/util/cache/package/types.ts +++ b/lib/util/cache/package/types.ts @@ -1,5 +1,5 @@ export interface PackageCache { - get(namespace: string, key: string): Promise; + get(namespace: string, key: string): Promise; set( namespace: string, diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 55d8ed90782f28..250c37b2050abf 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -108,6 +108,10 @@ "./lib/types/versioning.ts", "./lib/types/vulnerability-alert.ts", "./lib/util/cache/memory/index.ts", + "./lib/util/cache/package/decorator.ts", + "./lib/util/cache/package/file.ts", + "./lib/util/cache/package/index.ts", + "./lib/util/cache/package/redis.ts", "./lib/util/cache/package/types.ts", "./lib/util/clone.ts", "./lib/util/date.ts", From c814a9a193a525526bdc187a57bb9e59bed0fc56 Mon Sep 17 00:00:00 2001 From: Jesse Newland Date: Sat, 27 Nov 2021 09:40:36 -0600 Subject: [PATCH 183/248] feat(datasource/github-releases): skip draft releases (#12856) * feat(datasource/github-releases): skip draft releases * Apply suggestions from code review Co-authored-by: Michael Kriese * invert logic Co-authored-by: Michael Kriese Co-authored-by: Rhys Arkins --- lib/datasource/github-releases/index.spec.ts | 6 +++++- lib/datasource/github-releases/index.ts | 8 ++++---- lib/datasource/github-releases/types.ts | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/datasource/github-releases/index.spec.ts b/lib/datasource/github-releases/index.spec.ts index 99f4a5381ebfa6..52b5d1189658b3 100644 --- a/lib/datasource/github-releases/index.spec.ts +++ b/lib/datasource/github-releases/index.spec.ts @@ -15,7 +15,8 @@ const responseBody = [ { tag_name: 'a', published_at: '2020-03-09T13:00:00Z' }, { tag_name: 'v', published_at: '2020-03-09T12:00:00Z' }, { tag_name: '1.0.0', published_at: '2020-03-09T11:00:00Z' }, - { tag_name: 'v1.1.0', published_at: '2020-03-09T10:00:00Z' }, + { tag_name: 'v1.1.0', draft: false, published_at: '2020-03-09T10:00:00Z' }, + { tag_name: '1.2.0', draft: true, published_at: '2020-03-09T10:00:00Z' }, { tag_name: '2.0.0', published_at: '2020-04-09T10:00:00Z', @@ -47,6 +48,9 @@ describe('datasource/github-releases/index', () => { expect( res.releases.find((release) => release.version === 'v1.1.0') ).toBeDefined(); + expect( + res.releases.find((release) => release.version === '1.2.0') + ).toBeUndefined(); expect( res.releases.find((release) => release.version === '2.0.0').isStable ).toBeFalse(); diff --git a/lib/datasource/github-releases/index.ts b/lib/datasource/github-releases/index.ts index c7db64bd1a9e93..1c58489a9f51d4 100644 --- a/lib/datasource/github-releases/index.ts +++ b/lib/datasource/github-releases/index.ts @@ -55,14 +55,14 @@ export async function getReleases({ sourceUrl: getSourceUrl(repo, registryUrl), releases: null, }; - dependency.releases = githubReleases.map( - ({ tag_name, published_at, prerelease }) => ({ + dependency.releases = githubReleases + .filter(({ draft }) => draft !== true) + .map(({ tag_name, published_at, prerelease }) => ({ version: tag_name, gitRef: tag_name, releaseTimestamp: published_at, isStable: prerelease ? false : undefined, - }) - ); + })); const cacheMinutes = 10; await packageCache.set(cacheNamespace, cacheKey, dependency, cacheMinutes); return dependency; diff --git a/lib/datasource/github-releases/types.ts b/lib/datasource/github-releases/types.ts index 2989ddcaee72fc..36f79f6922a104 100644 --- a/lib/datasource/github-releases/types.ts +++ b/lib/datasource/github-releases/types.ts @@ -3,6 +3,7 @@ export type GithubRelease = { tag_name: string; published_at: string; prerelease: boolean; + draft?: boolean; assets: GithubReleaseAsset[]; html_url: string; From 0bb5fcb6f781728701b6b71177b0c2293568e429 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 28 Nov 2021 11:04:44 +0300 Subject: [PATCH 184/248] refactor(util/regex): Enable strict null checks (#12866) * refactor(util/regex): Enable strict null checks * Fix coverage * Refactor guard checks --- lib/util/package-rules.ts | 10 ++++--- lib/util/regex.ts | 27 +++++++++++-------- .../repository/process/lookup/filter.ts | 8 +++--- tsconfig.strict.json | 2 ++ 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/lib/util/package-rules.ts b/lib/util/package-rules.ts index aa0af30dec9b88..c112ee21ba84af 100644 --- a/lib/util/package-rules.ts +++ b/lib/util/package-rules.ts @@ -5,7 +5,7 @@ import { mergeChildConfig } from '../config'; import type { PackageRule, PackageRuleInputConfig } from '../config/types'; import { logger } from '../logger'; import * as allVersioning from '../versioning'; -import { configRegexPredicate, isConfigRegex, regEx } from './regex'; +import { configRegexPredicate, regEx } from './regex'; function matchesRule( inputConfig: PackageRuleInputConfig, @@ -205,9 +205,11 @@ function matchesRule( if (matchCurrentVersion) { const version = allVersioning.get(versioning); const matchCurrentVersionStr = matchCurrentVersion.toString(); - if (isConfigRegex(matchCurrentVersionStr)) { - const matches = configRegexPredicate(matchCurrentVersionStr); - if (!unconstrainedValue && !matches(currentValue)) { + const matchCurrentVersionPred = configRegexPredicate( + matchCurrentVersionStr + ); + if (matchCurrentVersionPred) { + if (!unconstrainedValue && !matchCurrentVersionPred(currentValue)) { return false; } positiveMatch = true; diff --git a/lib/util/regex.ts b/lib/util/regex.ts index fe3479c444b21a..a59bf7b0ccf892 100644 --- a/lib/util/regex.ts +++ b/lib/util/regex.ts @@ -22,8 +22,9 @@ try { export function regEx(pattern: string | RegExp, flags?: string): RegExp { const key = `${pattern.toString()}:${flags}`; - if (cache.has(key)) { - return cache.get(key); + const cachedResult = cache.get(key); + if (cachedResult) { + return cachedResult; } try { @@ -63,16 +64,20 @@ function parseConfigRegex(input: string): RegExp | null { return null; } -type ConfigRegexPredicate = (string) => boolean; +type ConfigRegexPredicate = (s: string) => boolean; -export function configRegexPredicate(input: string): ConfigRegexPredicate { - const configRegex = parseConfigRegex(input); - if (configRegex) { - const isPositive = !input.startsWith('!'); - return (x: string): boolean => { - const res = configRegex.test(x); - return isPositive ? res : !res; - }; +export function configRegexPredicate( + input: string +): ConfigRegexPredicate | null { + if (isConfigRegex(input)) { + const configRegex = parseConfigRegex(input); + if (configRegex) { + const isPositive = !input.startsWith('!'); + return (x: string): boolean => { + const res = configRegex.test(x); + return isPositive ? res : !res; + }; + } } return null; } diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts index 60c290a637dfeb..74730e8fff1290 100644 --- a/lib/workers/repository/process/lookup/filter.ts +++ b/lib/workers/repository/process/lookup/filter.ts @@ -2,7 +2,7 @@ import * as semver from 'semver'; import { CONFIG_VALIDATION } from '../../../../constants/error-messages'; import type { Release } from '../../../../datasource/types'; import { logger } from '../../../../logger'; -import { configRegexPredicate, isConfigRegex } from '../../../../util/regex'; +import { configRegexPredicate } from '../../../../util/regex'; import type { VersioningApi } from '../../../../versioning'; import * as npmVersioning from '../../../../versioning/npm'; import * as pep440 from '../../../../versioning/pep440'; @@ -60,10 +60,10 @@ export function filterVersions( } if (allowedVersions) { - if (isConfigRegex(allowedVersions)) { - const isAllowed = configRegexPredicate(allowedVersions); + const isAllowedPred = configRegexPredicate(allowedVersions); + if (isAllowedPred) { filteredVersions = filteredVersions.filter(({ version }) => - isAllowed(version) + isAllowedPred(version) ); } else if (versioning.isValid(allowedVersions)) { filteredVersions = filteredVersions.filter((v) => diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 250c37b2050abf..546c9d9a867d18 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -127,6 +127,8 @@ "./lib/util/mask.spec.ts", "./lib/util/mask.ts", "./lib/util/object.ts", + "./lib/util/regex.spec.ts", + "./lib/util/regex.ts", "./lib/util/sanitize.ts", "./lib/util/split.ts", "./lib/workers/pr/changelog/hbs-template.ts", From 04d161252fb2e3eb60a937e16448f372a351dc9f Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 28 Nov 2021 15:54:46 +0300 Subject: [PATCH 185/248] refactor(config/global): Enable strict null checks (#12867) * refactor(config/global): Enable strict null checks * Fix inefficient copying Co-authored-by: Rhys Arkins --- lib/config/global.ts | 4 ++-- tsconfig.strict.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/config/global.ts b/lib/config/global.ts index 9a1b68f7fa1589..4c81facf974119 100644 --- a/lib/config/global.ts +++ b/lib/config/global.ts @@ -2,7 +2,7 @@ import type { RenovateConfig, RepoGlobalConfig } from './types'; export class GlobalConfig { // TODO: once global config work is complete, add a test to make sure this list includes all options with globalOnly=true (#9603) - private static readonly OPTIONS = [ + private static readonly OPTIONS: (keyof RepoGlobalConfig)[] = [ 'allowCustomCrateRegistries', 'allowedPostUpgradeCommands', 'allowPlugins', @@ -40,7 +40,7 @@ export class GlobalConfig { const result = { ...config }; for (const option of GlobalConfig.OPTIONS) { - GlobalConfig.config[option] = config[option]; + GlobalConfig.config[option] = config[option] as never; delete result[option]; } diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 546c9d9a867d18..151e37de1e6085 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -7,6 +7,7 @@ }, "files": [ "./lib/config/app-strings.ts", + "./lib/config/global.ts", "./lib/config/migrations/types.ts", "./lib/config/presets/common.ts", "./lib/constants/error-messages.ts", From f4dbff9bd39adad13a50f6ff0d359720aaa7f8c2 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 28 Nov 2021 18:31:11 +0300 Subject: [PATCH 186/248] refactor(util/host-rules): Strict null checks for host rules (#12868) Co-authored-by: Rhys Arkins --- lib/util/host-rules.ts | 72 +++++++++++++++++++++++++++--------------- lib/util/url.ts | 2 +- tsconfig.strict.json | 2 ++ 3 files changed, 50 insertions(+), 26 deletions(-) diff --git a/lib/util/host-rules.ts b/lib/util/host-rules.ts index 298b9e76d413ee..5fbf389607149c 100644 --- a/lib/util/host-rules.ts +++ b/lib/util/host-rules.ts @@ -1,3 +1,4 @@ +import is from '@sindresorhus/is'; import merge from 'deepmerge'; import { logger } from '../logger'; import { HostRule } from '../types'; @@ -7,27 +8,41 @@ import { parseUrl, validateUrl } from './url'; let hostRules: HostRule[] = []; -const legacyHostFields = ['hostName', 'domainName', 'baseUrl']; +interface LegacyHostRule { + hostName?: string; + domainName?: string; + baseUrl?: string; +} -export function add(params: HostRule): void { - const rule = clone(params); - const matchedFields = legacyHostFields.filter((field) => rule[field]); - if (matchedFields.length) { - if (rule.matchHost || matchedFields.length > 1) { - throw new Error( - `hostRules cannot contain more than one host-matching field - use "matchHost" only.` - ); - } - const field = matchedFields[0]; - logger.warn({ field }, 'Legacy hostRules field needs migrating'); - rule.matchHost = rule[field]; - delete rule[field]; +function migrateRule(rule: LegacyHostRule & HostRule): HostRule { + const cloned: LegacyHostRule & HostRule = clone(rule); + delete cloned.hostName; + delete cloned.domainName; + delete cloned.baseUrl; + const result: HostRule = cloned; + + const { matchHost } = result; + const { hostName, domainName, baseUrl } = rule; + const hostValues = [matchHost, hostName, domainName, baseUrl].filter(Boolean); + if (hostValues.length === 1) { + const [matchHost] = hostValues; + result.matchHost = matchHost; + } else if (hostValues.length > 1) { + throw new Error( + `hostRules cannot contain more than one host-matching field - use "matchHost" only.` + ); } - const confidentialFields = ['password', 'token']; + return result; +} + +export function add(params: HostRule): void { + const rule = migrateRule(params); + + const confidentialFields: (keyof HostRule)[] = ['password', 'token']; if (rule.matchHost) { const parsedUrl = parseUrl(rule.matchHost); - rule.resolvedHost = parsedUrl?.hostname || rule.matchHost; + rule.resolvedHost = parsedUrl?.hostname ?? rule.matchHost; confidentialFields.forEach((field) => { if (rule[field]) { logger.debug( @@ -38,7 +53,7 @@ export function add(params: HostRule): void { } confidentialFields.forEach((field) => { const secret = rule[field]; - if (secret && secret.length > 3) { + if (is.string(secret) && secret.length > 3) { sanitize.add(secret); } }); @@ -61,7 +76,7 @@ function isEmptyRule(rule: HostRule): boolean { } function isHostTypeRule(rule: HostRule): boolean { - return rule.hostType && !rule.resolvedHost; + return !!rule.hostType && !rule.resolvedHost; } function isHostOnlyRule(rule: HostRule): boolean { @@ -69,7 +84,7 @@ function isHostOnlyRule(rule: HostRule): boolean { } function isMultiRule(rule: HostRule): boolean { - return rule.hostType && !!rule.resolvedHost; + return !!rule.hostType && !!rule.resolvedHost; } function matchesHostType(rule: HostRule, search: HostRuleSearch): boolean { @@ -77,10 +92,14 @@ function matchesHostType(rule: HostRule, search: HostRuleSearch): boolean { } function matchesHost(rule: HostRule, search: HostRuleSearch): boolean { - if (validateUrl(rule.matchHost)) { + // istanbul ignore if + if (!rule.matchHost) { + return false; + } + if (search.url && validateUrl(rule.matchHost)) { return search.url.startsWith(rule.matchHost); } - const parsedUrl = parseUrl(search.url); + const parsedUrl = search.url ? parseUrl(search.url) : null; if (!parsedUrl?.hostname) { return false; } @@ -132,10 +151,13 @@ export function find(search: HostRuleSearch): HostRule { } export function hosts({ hostType }: { hostType: string }): string[] { - return hostRules - .filter((rule) => rule.hostType === hostType) - .map((rule) => rule.resolvedHost) - .filter(Boolean); + const result: string[] = []; + for (const rule of hostRules) { + if (rule.hostType === hostType && rule.resolvedHost) { + result.push(rule.resolvedHost); + } + } + return result; } export function findAll({ hostType }: { hostType: string }): HostRule[] { diff --git a/lib/util/url.ts b/lib/util/url.ts index 4b3ac3362eefc0..99677b269a3297 100644 --- a/lib/util/url.ts +++ b/lib/util/url.ts @@ -77,5 +77,5 @@ export function parseUrl(url: string): URL | null { * @returns an URL object or null */ export function createURLFromHostOrURL(url: string): URL | null { - return parseUrl(url) || parseUrl(`https://${url}`); + return parseUrl(url) ?? parseUrl(`https://${url}`); } diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 151e37de1e6085..61ba5f4a3991cc 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -120,6 +120,7 @@ "./lib/util/exec/types.ts", "./lib/util/git/config.ts", "./lib/util/git/types.ts", + "./lib/util/host-rules.ts", "./lib/util/html.ts", "./lib/util/http/hooks.ts", "./lib/util/http/types.ts", @@ -132,6 +133,7 @@ "./lib/util/regex.ts", "./lib/util/sanitize.ts", "./lib/util/split.ts", + "./lib/util/url.ts", "./lib/workers/pr/changelog/hbs-template.ts", "./lib/workers/pr/changelog/types.ts", "./lib/workers/repository/init/types.ts", From 177cae82fb12e0d6136d7a844b5fe971832934c7 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Sun, 28 Nov 2021 18:45:13 +0300 Subject: [PATCH 187/248] refactor(ubuntu): Enable strict null checks (#12849) Co-authored-by: Michael Kriese --- lib/versioning/ubuntu/index.ts | 14 +++++++------- tsconfig.strict.json | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/versioning/ubuntu/index.ts b/lib/versioning/ubuntu/index.ts index d875e52aedd586..07e470eedffd8f 100644 --- a/lib/versioning/ubuntu/index.ts +++ b/lib/versioning/ubuntu/index.ts @@ -72,12 +72,12 @@ function getPatch(version: string): null | number { // comparison function equals(version: string, other: string): boolean { - return isVersion(version) && isVersion(other) && version === other; + return !!isVersion(version) && !!isVersion(other) && version === other; } function isGreaterThan(version: string, other: string): boolean { - const xMajor = getMajor(version); - const yMajor = getMajor(other); + const xMajor = getMajor(version) ?? 0; + const yMajor = getMajor(other) ?? 0; if (xMajor > yMajor) { return true; } @@ -85,8 +85,8 @@ function isGreaterThan(version: string, other: string): boolean { return false; } - const xMinor = getMinor(version); - const yMinor = getMinor(other); + const xMinor = getMinor(version) ?? 0; + const yMinor = getMinor(other) ?? 0; if (xMinor > yMinor) { return true; } @@ -94,8 +94,8 @@ function isGreaterThan(version: string, other: string): boolean { return false; } - const xPatch = getPatch(version) || 0; - const yPatch = getPatch(other) || 0; + const xPatch = getPatch(version) ?? 0; + const yPatch = getPatch(other) ?? 0; return xPatch > yPatch; } diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 61ba5f4a3991cc..7a93df971d22c8 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -134,6 +134,8 @@ "./lib/util/sanitize.ts", "./lib/util/split.ts", "./lib/util/url.ts", + "./lib/versioning/ubuntu/index.spec.ts", + "./lib/versioning/ubuntu/index.ts", "./lib/workers/pr/changelog/hbs-template.ts", "./lib/workers/pr/changelog/types.ts", "./lib/workers/repository/init/types.ts", From d5f04ef4fba99185f4a42cc96731b193630a0c55 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 29 Nov 2021 10:33:36 +0300 Subject: [PATCH 188/248] refactor(swift): Enable strict null checks (#12850) --- lib/versioning/swift/index.spec.ts | 5 ++- lib/versioning/swift/index.ts | 43 +++++++++++++++-------- lib/versioning/swift/range.ts | 56 +++++++++++++++++++----------- tsconfig.strict.json | 2 ++ 4 files changed, 71 insertions(+), 35 deletions(-) diff --git a/lib/versioning/swift/index.spec.ts b/lib/versioning/swift/index.spec.ts index 9bc5a45d99308b..dd1b8c812ce4a6 100644 --- a/lib/versioning/swift/index.spec.ts +++ b/lib/versioning/swift/index.spec.ts @@ -23,16 +23,19 @@ describe('versioning/swift/index', () => { version | expected ${'from: "1.2.3"'} | ${true} ${'from : "1.2.3"'} | ${true} + ${'from : "1.2.3.4.5"'} | ${false} ${'from:"1.2.3"'} | ${true} ${' from:"1.2.3" '} | ${true} ${' from : "1.2.3" '} | ${true} ${'"1.2.3"..."1.2.4"'} | ${true} ${' "1.2.3" ... "1.2.4" '} | ${true} ${'"1.2.3"...'} | ${true} + ${'"1.2.3.4.5"...'} | ${false} ${' "1.2.3" ... '} | ${true} ${'..."1.2.4"'} | ${true} ${' ... "1.2.4" '} | ${true} ${'"1.2.3"..<"1.2.4"'} | ${true} + ${'"1.2.3.4.5"..<"1.2.4"'} | ${false} ${' "1.2.3" ..< "1.2.4" '} | ${true} ${'..<"1.2.4"'} | ${true} ${' ..< "1.2.4" '} | ${true} @@ -86,7 +89,7 @@ describe('versioning/swift/index', () => { `( 'isLessThanRange("$version", "$range") === "$expected"', ({ version, range, expected }) => { - expect(isLessThanRange(version, range)).toBe(expected); + expect(isLessThanRange?.(version, range)).toBe(expected); } ); diff --git a/lib/versioning/swift/index.ts b/lib/versioning/swift/index.ts index fa7ba22a6bee6b..d3de422d7797fa 100644 --- a/lib/versioning/swift/index.ts +++ b/lib/versioning/swift/index.ts @@ -29,21 +29,36 @@ const { export const isValid = (input: string): boolean => !!valid(input) || !!validRange(toSemverRange(input)); + export const isVersion = (input: string): boolean => !!valid(input); -const getSatisfyingVersion = (versions: string[], range: string): string => - maxSatisfying( - versions.map((v) => v.replace(regEx(/^v/), '')), // TODO #12071 - toSemverRange(range) - ); -const minSatisfyingVersion = (versions: string[], range: string): string => - minSatisfying( - versions.map((v) => v.replace(regEx(/^v/), '')), // TODO #12071 #12070 - toSemverRange(range) - ); -const isLessThanRange = (version: string, range: string): boolean => - ltr(version, toSemverRange(range)); -const matches = (version: string, range: string): boolean => - satisfies(version, toSemverRange(range)); + +function getSatisfyingVersion( + versions: string[], + range: string +): string | null { + const normalizedVersions = versions.map((v) => v.replace(regEx(/^v/), '')); + const semverRange = toSemverRange(range); + return semverRange ? maxSatisfying(normalizedVersions, semverRange) : null; +} + +function minSatisfyingVersion( + versions: string[], + range: string +): string | null { + const normalizedVersions = versions.map((v) => v.replace(regEx(/^v/), '')); + const semverRange = toSemverRange(range); + return semverRange ? minSatisfying(normalizedVersions, semverRange) : null; +} + +function isLessThanRange(version: string, range: string): boolean { + const semverRange = toSemverRange(range); + return semverRange ? ltr(version, semverRange) : false; +} + +function matches(version: string, range: string): boolean { + const semverRange = toSemverRange(range); + return semverRange ? satisfies(version, semverRange) : false; +} export const api: VersioningApi = { equals, diff --git a/lib/versioning/swift/range.ts b/lib/versioning/swift/range.ts index 18ce3d20e0638b..955db8b68ca59d 100644 --- a/lib/versioning/swift/range.ts +++ b/lib/versioning/swift/range.ts @@ -7,27 +7,40 @@ const fromRange = regEx(/^\s*"([^"]+)"\s*\.\.\.\s*$/); const binaryRange = regEx(/^\s*"([^"]+)"\s*(\.\.[.<])\s*"([^"]+)"\s*$/); const toRange = regEx(/^\s*(\.\.[.<])\s*"([^"]+)"\s*$/); -function toSemverRange(range: string): string { - if (fromParam.test(range)) { - const [, version] = fromParam.exec(range); +function toSemverRange(range: string): string | null { + const fromParamMatch = fromParam.exec(range); + if (fromParamMatch) { + const [, version] = fromParamMatch; if (semver.valid(version)) { const nextMajor = `${semver.major(version) + 1}.0.0`; return `>=${version} <${nextMajor}`; } - } else if (fromRange.test(range)) { - const [, version] = fromRange.exec(range); + return null; + } + + const fromRangeMatch = fromRange.exec(range); + if (fromRangeMatch) { + const [, version] = fromRangeMatch; if (semver.valid(version)) { return `>=${version}`; } - } else if (binaryRange.test(range)) { - const [, currentVersion, op, newVersion] = binaryRange.exec(range); + return null; + } + + const binaryRangeMatch = binaryRange.exec(range); + if (binaryRangeMatch) { + const [, currentVersion, op, newVersion] = binaryRangeMatch; if (semver.valid(currentVersion) && semver.valid(newVersion)) { return op === '..<' ? `>=${currentVersion} <${newVersion}` : `>=${currentVersion} <=${newVersion}`; } - } else if (toRange.test(range)) { - const [, op, newVersion] = toRange.exec(range); + return null; + } + + const toRangeMatch = toRange.exec(range); + if (toRangeMatch) { + const [, op, newVersion] = toRangeMatch; if (semver.valid(newVersion)) { return op === '..<' ? `<${newVersion}` : `<=${newVersion}`; } @@ -35,26 +48,29 @@ function toSemverRange(range: string): string { return null; } -function getNewValue({ - currentValue, - currentVersion, - newVersion, -}: NewValueConfig): string { +function getNewValue({ currentValue, newVersion }: NewValueConfig): string { if (fromParam.test(currentValue)) { return currentValue.replace(regEx(/".*?"/), `"${newVersion}"`); } - if (fromRange.test(currentValue)) { - const [, version] = fromRange.exec(currentValue); + + const fromRangeMatch = fromRange.exec(currentValue); + if (fromRangeMatch) { + const [, version] = fromRangeMatch; return currentValue.replace(version, newVersion); } - if (binaryRange.test(currentValue)) { - const [, , , version] = binaryRange.exec(currentValue); + + const binaryRangeMatch = binaryRange.exec(currentValue); + if (binaryRangeMatch) { + const [, , , version] = binaryRangeMatch; return currentValue.replace(version, newVersion); } - if (toRange.test(currentValue)) { - const [, , version] = toRange.exec(currentValue); + + const toRangeMatch = toRange.exec(currentValue); + if (toRangeMatch) { + const [, , version] = toRangeMatch; return currentValue.replace(version, newVersion); } + return currentValue; } diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 7a93df971d22c8..0d5f61d746ed94 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -134,6 +134,8 @@ "./lib/util/sanitize.ts", "./lib/util/split.ts", "./lib/util/url.ts", + "./lib/versioning/swift/index.spec.ts", + "./lib/versioning/swift/index.ts", "./lib/versioning/ubuntu/index.spec.ts", "./lib/versioning/ubuntu/index.ts", "./lib/workers/pr/changelog/hbs-template.ts", From 5c7e9509fde36b9942a94a3e03d8989e47c263f2 Mon Sep 17 00:00:00 2001 From: Matt Travi Date: Mon, 29 Nov 2021 01:43:57 -0600 Subject: [PATCH 189/248] feat(preset): add rollup node-resolve plugin to the replacements list (#12865) --- lib/config/presets/internal/replacements.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/config/presets/internal/replacements.ts b/lib/config/presets/internal/replacements.ts index 023c59f75cb897..a610b49b788fe5 100644 --- a/lib/config/presets/internal/replacements.ts +++ b/lib/config/presets/internal/replacements.ts @@ -3,7 +3,11 @@ import type { Preset } from '../types'; export const presets: Record = { all: { description: 'All replacements', - extends: ['replacements:jade-to-pug', 'replacements:cucumber-to-scoped'], + extends: [ + 'replacements:jade-to-pug', + 'replacements:cucumber-to-scoped', + 'replacements:rollup-node-resolve-to-scoped', + ], }, 'jade-to-pug': { description: 'Jade was renamed to Pug', @@ -27,4 +31,15 @@ export const presets: Record = { }, ], }, + 'rollup-node-resolve-to-scoped': { + description: 'the node-resolve plugin for rollup became scoped', + packageRules: [ + { + matchDatasources: ['npm'], + matchPackageNames: ['rollup-plugin-node-resolve'], + replacementName: '@rollup/plugin-node-resolve', + replacementVersion: '6.0.0', + }, + ], + }, }; From b3252ae86cd4d1d219afcec9787cf19fd2af6a31 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Mon, 29 Nov 2021 14:55:53 +0700 Subject: [PATCH 190/248] feat(platform/bitbucket): modify getJsonFile to use branchOrTag on Bitbucket (#12825) Co-authored-by: Rhys Arkins Co-authored-by: Michael Kriese --- .../__snapshots__/index.spec.ts.snap | 43 +++++++++++++++++-- lib/platform/bitbucket/index.spec.ts | 22 +++++++++- lib/platform/bitbucket/index.ts | 14 +++++- 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap index 5a3567ff52045f..3d6b461911c5e1 100644 --- a/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap +++ b/lib/platform/bitbucket/__snapshots__/index.spec.ts.snap @@ -912,7 +912,7 @@ Array [ ] `; -exports[`platform/bitbucket/index getJsonFile() ignores branchOrTag 1`] = ` +exports[`platform/bitbucket/index getJsonFile() returns file content 1`] = ` Array [ Object { "headers": Object { @@ -938,7 +938,7 @@ Array [ ] `; -exports[`platform/bitbucket/index getJsonFile() returns file content 1`] = ` +exports[`platform/bitbucket/index getJsonFile() returns file content from branch or tag 1`] = ` Array [ Object { "headers": Object { @@ -959,7 +959,44 @@ Array [ "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/src/HEAD/file.json", + "url": "https://api.bitbucket.org/2.0/repositories/some/repo/src/dev/file.json", + }, +] +`; + +exports[`platform/bitbucket/index getJsonFile() returns file content from branch with a slash in its name 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", + }, + 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/refs/branches/feat/123-test", + }, + Object { + "headers": Object { + "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/src/1234567890/file.json", }, ] `; diff --git a/lib/platform/bitbucket/index.spec.ts b/lib/platform/bitbucket/index.spec.ts index 05cc557e711eeb..2027b0fdcc6be1 100644 --- a/lib/platform/bitbucket/index.spec.ts +++ b/lib/platform/bitbucket/index.spec.ts @@ -966,17 +966,35 @@ describe('platform/bitbucket/index', () => { expect(httpMock.getTrace()).toMatchSnapshot(); }); - it('ignores branchOrTag', async () => { + it('returns file content from branch or tag', async () => { const data = { foo: 'bar' }; const scope = await initRepoMock(); scope - .get('/2.0/repositories/some/repo/src/HEAD/file.json') + .get('/2.0/repositories/some/repo/src/dev/file.json') .reply(200, JSON.stringify(data)); const res = await bitbucket.getJsonFile('file.json', 'some/repo', 'dev'); expect(res).toEqual(data); expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('returns file content from branch with a slash in its name', async () => { + const data = { foo: 'bar' }; + const scope = await initRepoMock(); + scope + .get('/2.0/repositories/some/repo/refs/branches/feat/123-test') + .reply(200, JSON.stringify({ target: { hash: '1234567890' } })); + scope + .get('/2.0/repositories/some/repo/src/1234567890/file.json') + .reply(200, JSON.stringify(data)); + const res = await bitbucket.getJsonFile( + 'file.json', + 'some/repo', + 'feat/123-test' + ); + expect(res).toEqual(data); + expect(httpMock.getTrace()).toMatchSnapshot(); + }); + it('throws on malformed JSON', async () => { const scope = await initRepoMock(); scope diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts index 31b36a17ff5d94..1b9803120d8c79 100644 --- a/lib/platform/bitbucket/index.ts +++ b/lib/platform/bitbucket/index.ts @@ -48,6 +48,8 @@ let config: utils.Config = {} as any; const defaults = { endpoint: BITBUCKET_PROD_ENDPOINT }; +const pathSeparator = '/'; + let renovateUserUuid: string; export async function initPlatform({ @@ -116,7 +118,17 @@ export async function getRawFile( // See: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/src/%7Bcommit%7D/%7Bpath%7D const repo = repoName ?? config.repository; const path = fileName; - const url = `/2.0/repositories/${repo}/src/HEAD/${path}`; + + let finalBranchOrTag = branchOrTag; + if (branchOrTag?.includes(pathSeparator)) { + // Branch name contans slash, so we have to replace branch name with SHA1 of the head commit; otherwise the API will not work. + finalBranchOrTag = await getBranchCommit(branchOrTag); + } + + const url = + `/2.0/repositories/${repo}/src/` + + (finalBranchOrTag || `HEAD`) + + `/${path}`; const res = await bitbucketHttp.get(url); return res.body; } From dbca35b2b91e1087b826ebf96e7b7e87ad935a7b Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 29 Nov 2021 11:56:08 +0100 Subject: [PATCH 191/248] docs: add example of using `matchCurrentVersion` with a SemVer range (#12594) --- docs/usage/configuration-options.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index d71ff1f41c449a..a344273e28de84 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1518,7 +1518,18 @@ Use this field to restrict rules to a particular datasource. e.g. ### matchCurrentVersion -`matchCurrentVersion` can be an exact SemVer version or a SemVer range. +`matchCurrentVersion` can be an exact SemVer version or a SemVer range: + +```json +{ + "packageRules": [ + { + "matchCurrentVersion": ">=1.0.0", + "matchPackageNames": ["angular"] + } + ] +} +``` This field also supports Regular Expressions which must begin and end with `/`. For example, the following enforces that only `1.*` versions will be used: From 2c12ff1e0aa0cfcaf313f4ce539f17c52ef244d5 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 29 Nov 2021 17:52:56 +0300 Subject: [PATCH 192/248] refactor(typescript): Use include/exclude sets for strict tsconfig (#12886) --- tsconfig.strict.json | 205 +++++++++++++------------------------------ 1 file changed, 62 insertions(+), 143 deletions(-) diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 0d5f61d746ed94..eb5bc10ea27bf3 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -5,148 +5,67 @@ "noImplicitAny": true, "lib": ["es2019"] }, - "files": [ - "./lib/config/app-strings.ts", - "./lib/config/global.ts", - "./lib/config/migrations/types.ts", - "./lib/config/presets/common.ts", - "./lib/constants/error-messages.ts", - "./lib/constants/platforms.ts", - "./lib/constants/programming-language.ts", - "./lib/data-files.generated.ts", - "./lib/datasource/adoptium-java/common.ts", - "./lib/datasource/adoptium-java/types.ts", - "./lib/datasource/artifactory/common.ts", - "./lib/datasource/bitbucket-tags/types.ts", - "./lib/datasource/cdnjs/types.ts", - "./lib/datasource/crate/types.ts", - "./lib/datasource/dart/types.ts", - "./lib/datasource/docker/types.ts", - "./lib/datasource/galaxy-collection/types.ts", - "./lib/datasource/galaxy/types.ts", - "./lib/datasource/git-refs/types.ts", - "./lib/datasource/github-releases/types.ts", - "./lib/datasource/github-tags/types.ts", - "./lib/datasource/gitlab-packages/common.ts", - "./lib/datasource/gitlab-packages/types.ts", - "./lib/datasource/gitlab-releases/types.ts", - "./lib/datasource/gitlab-tags/types.ts", - "./lib/datasource/gradle-version/types.ts", - "./lib/datasource/helm/types.ts", - "./lib/datasource/hex/types.ts", - "./lib/datasource/maven/common.ts", - "./lib/datasource/maven/types.ts", - "./lib/datasource/node/common.ts", - "./lib/datasource/node/types.ts", - "./lib/datasource/npm/common.ts", - "./lib/datasource/npm/types.ts", - "./lib/datasource/nuget/types.ts", - "./lib/datasource/orb/types.ts", - "./lib/datasource/pypi/types.ts", - "./lib/datasource/repology/types.ts", - "./lib/datasource/rubygems/types.ts", - "./lib/datasource/terraform-module/types.ts", - "./lib/datasource/terraform-provider/types.ts", - "./lib/datasource/types.ts", - "./lib/globals.d.ts", - "./lib/logger/__mocks__/index.ts", - "./lib/logger/cmd-serializer.ts", - "./lib/logger/config-serializer.ts", - "./lib/logger/err-serializer.ts", - "./lib/logger/index.ts", - "./lib/logger/pretty-stdout.ts", - "./lib/logger/types.ts", - "./lib/logger/utils.ts", - "./lib/manager/argocd/types.ts", - "./lib/manager/azure-pipelines/types.ts", - "./lib/manager/bazel/types.ts", - "./lib/manager/cargo/types.ts", - "./lib/manager/cocoapods/types.ts", - "./lib/manager/composer/types.ts", - "./lib/manager/docker-compose/types.ts", - "./lib/manager/git-submodules/types.ts", - "./lib/manager/gitlabci/types.ts", - "./lib/manager/gitlabci/utils.ts", - "./lib/manager/gradle-wrapper/types.ts", - "./lib/manager/gradle/deep/types.ts", - "./lib/manager/gradle/shallow/common.ts", - "./lib/manager/gradle/types.ts", - "./lib/manager/helm-values/types.ts", - "./lib/manager/helmfile/types.ts", - "./lib/manager/helmsman/types.ts", - "./lib/manager/homebrew/types.ts", - "./lib/manager/jenkins/types.ts", - "./lib/manager/kustomize/types.ts", - "./lib/manager/leiningen/types.ts", - "./lib/manager/maven/types.ts", - "./lib/manager/npm/extract/types.ts", - "./lib/manager/npm/update/locked-dependency/types.ts", - "./lib/manager/nuget/types.ts", - "./lib/manager/pip_setup/types.ts", - "./lib/manager/pipenv/types.ts", - "./lib/manager/poetry/types.ts", - "./lib/manager/pre-commit/types.ts", - "./lib/manager/regex/types.ts", - "./lib/manager/sbt/types.ts", - "./lib/manager/swift/types.ts", - "./lib/manager/terraform/common.ts", - "./lib/manager/terraform/lockfile/types.ts", - "./lib/manager/terragrunt/common.ts", - "./lib/platform/bitbucket/types.ts", - "./lib/platform/gitea/types.ts", - "./lib/platform/github/graphql.ts", - "./lib/platform/gitlab/types.ts", - "./lib/platform/utils/pr-body.ts", - "./lib/proxy.ts", - "./lib/types/branch-status.ts", - "./lib/types/errors/external-host-error.ts", - "./lib/types/git.ts", - "./lib/types/host-rules.ts", - "./lib/types/later.d.ts", - "./lib/types/platform/bitbucket-server/index.ts", - "./lib/types/pr-state.ts", - "./lib/types/skip-reason.ts", - "./lib/types/versioning.ts", - "./lib/types/vulnerability-alert.ts", - "./lib/util/cache/memory/index.ts", - "./lib/util/cache/package/decorator.ts", - "./lib/util/cache/package/file.ts", - "./lib/util/cache/package/index.ts", - "./lib/util/cache/package/redis.ts", - "./lib/util/cache/package/types.ts", - "./lib/util/clone.ts", - "./lib/util/date.ts", - "./lib/util/exec/common.ts", - "./lib/util/exec/types.ts", - "./lib/util/git/config.ts", - "./lib/util/git/types.ts", - "./lib/util/host-rules.ts", - "./lib/util/html.ts", - "./lib/util/http/hooks.ts", - "./lib/util/http/types.ts", - "./lib/util/index.ts", - "./lib/util/json-writer/indentation-type.ts", - "./lib/util/mask.spec.ts", - "./lib/util/mask.ts", - "./lib/util/object.ts", - "./lib/util/regex.spec.ts", - "./lib/util/regex.ts", - "./lib/util/sanitize.ts", - "./lib/util/split.ts", - "./lib/util/url.ts", - "./lib/versioning/swift/index.spec.ts", - "./lib/versioning/swift/index.ts", - "./lib/versioning/ubuntu/index.spec.ts", - "./lib/versioning/ubuntu/index.ts", - "./lib/workers/pr/changelog/hbs-template.ts", - "./lib/workers/pr/changelog/types.ts", - "./lib/workers/repository/init/types.ts", - "./lib/workers/repository/model/commit-message.ts", - "./test/graphql-snapshot.ts", - "./test/http-mock.ts", - "./test/json-schema.ts", - "./test/newline-snapshot-serializer.ts", - "./test/static-files.spec.ts", - "./tools/utils/index.ts" + "include": [ + "lib/config/app-strings.ts", + "lib/config/global.ts", + "lib/config/migrations/types.ts", + "lib/config/presets/common.ts", + "lib/constants/**/*.ts", + "lib/data-files.generated.ts", + "lib/datasource/**/common.ts", + "lib/datasource/**/types.ts", + "lib/globals.d.ts", + "lib/logger/**/*.ts", + "lib/manager/**/common.ts", + "lib/manager/**/types.ts", + "lib/platform/**/types.ts", + "lib/platform/github/graphql.ts", + "lib/platform/utils/pr-body.ts", + "lib/proxy.ts", + "lib/types/**/*.ts", + "lib/util/cache/package/*.ts", + "lib/util/clone.ts", + "lib/util/date.ts", + "lib/util/exec/common.ts", + "lib/util/exec/types.ts", + "lib/util/git/config.ts", + "lib/util/git/types.ts", + "lib/util/host-rules.ts", + "lib/util/html.ts", + "lib/util/http/hooks.ts", + "lib/util/http/types.ts", + "lib/util/index.ts", + "lib/util/json-writer/indentation-type.ts", + "lib/util/mask.spec.ts", + "lib/util/mask.ts", + "lib/util/object.ts", + "lib/util/regex.spec.ts", + "lib/util/regex.ts", + "lib/util/sanitize.ts", + "lib/util/split.ts", + "lib/util/url.ts", + "lib/versioning/swift/*.ts", + "lib/versioning/ubuntu/*.ts", + "lib/workers/pr/changelog/hbs-template.ts", + "lib/workers/pr/changelog/types.ts", + "lib/workers/repository/init/types.ts", + "lib/workers/repository/model/commit-message.ts", + "test/graphql-snapshot.ts", + "test/http-mock.ts", + "test/json-schema.ts", + "test/newline-snapshot-serializer.ts", + "test/static-files.spec.ts", + "tools/utils/index.ts" + ], + "exclude": [ + "lib/constants/platform.spec.ts", + "lib/datasource/docker/common.ts", + "lib/datasource/github-releases/common.ts", + "lib/datasource/go/common.ts", + "lib/datasource/go/types.ts", + "lib/datasource/helm/common.ts", + "lib/logger/err-serializer.spec.ts", + "lib/manager/gradle/shallow/types.ts", + "lib/util/cache/package/*.spec.ts" ] } From 52b2bdbb48085c1f1b2e1c28d0011eb7cb2afe97 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Mon, 29 Nov 2021 19:04:43 +0300 Subject: [PATCH 193/248] refactor(util/cache): Enable strict nulls (#12887) --- lib/util/cache/repository/index.ts | 10 +++++----- tsconfig.strict.json | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/util/cache/repository/index.ts b/lib/util/cache/repository/index.ts index 415b629e4b7376..e81ba7bbf015c5 100644 --- a/lib/util/cache/repository/index.ts +++ b/lib/util/cache/repository/index.ts @@ -11,16 +11,16 @@ import type { Cache } from './types'; // Increment this whenever there could be incompatibilities between old and new cache structure export const CACHE_REVISION = 9; -let repositoryCache: RepositoryCacheConfig = 'disabled'; -let cacheFileName: string; -let cache: Cache = Object.create({}); +let repositoryCache: RepositoryCacheConfig | undefined = 'disabled'; +let cacheFileName: string | null = null; +let cache: Cache | null = Object.create({}); export function getCacheFileName(config: RenovateConfig): string { return join( GlobalConfig.get('cacheDir'), '/renovate/repository/', config.platform, - config.repository + '.json' + `${config.repository}.json` ); } @@ -63,7 +63,7 @@ export async function initialize(config: RenovateConfig): Promise { } export function getCache(): Cache { - return cache || createCache(); + return cache ?? createCache(); } export async function finalize(): Promise { diff --git a/tsconfig.strict.json b/tsconfig.strict.json index eb5bc10ea27bf3..9815efcfbd2e80 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -23,7 +23,7 @@ "lib/platform/utils/pr-body.ts", "lib/proxy.ts", "lib/types/**/*.ts", - "lib/util/cache/package/*.ts", + "lib/util/cache/*.ts", "lib/util/clone.ts", "lib/util/date.ts", "lib/util/exec/common.ts", @@ -66,6 +66,6 @@ "lib/datasource/helm/common.ts", "lib/logger/err-serializer.spec.ts", "lib/manager/gradle/shallow/types.ts", - "lib/util/cache/package/*.spec.ts" + "lib/util/cache/*.spec.ts" ] } From fc2f6da4627c9546a68307dfe3fd824e2fe28546 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 17:15:01 +0100 Subject: [PATCH 194/248] chore(deps): update dependency eslint to v8.3.0 (#12889) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 5c897c2116aff1..c49244337160f1 100644 --- a/package.json +++ b/package.json @@ -253,7 +253,7 @@ "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", "emojibase-data": "6.2.0", - "eslint": "8.2.0", + "eslint": "8.3.0", "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", "eslint-plugin-import": "2.25.3", diff --git a/yarn.lock b/yarn.lock index 3db33422db6d9d..fedced3d34ffee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5181,10 +5181,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" - integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -5206,10 +5206,10 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== -eslint@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.2.0.tgz#44d3fb506d0f866a506d97a0fc0e90ee6d06a815" - integrity sha512-erw7XmM+CLxTOickrimJ1SiF55jiNlVSp2qqm0NuBWPtHYQCegD5ZMaW0c3i5ytPqL+SSLaCxdvQXFPLJn+ABw== +eslint@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.3.0.tgz#a3c2409507403c1c7f6c42926111d6cbefbc3e85" + integrity sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww== dependencies: "@eslint/eslintrc" "^1.0.4" "@humanwhocodes/config-array" "^0.6.0" @@ -5220,10 +5220,10 @@ eslint@8.2.0: doctrine "^3.0.0" enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^6.0.0" + eslint-scope "^7.1.0" eslint-utils "^3.0.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.1.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -5250,7 +5250,7 @@ eslint@8.2.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.0.0: +espree@^9.0.0, espree@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/espree/-/espree-9.1.0.tgz#ba9d3c9b34eeae205724124e31de4543d59fbf74" integrity sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ== From 34605f4bda15ff0090c1f7ecd5933f17788c20ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 17:15:45 +0100 Subject: [PATCH 195/248] chore(deps): update actions/setup-node action to v2.5.0 (#12884) Co-authored-by: Renovate Bot --- .github/workflows/build.yml | 6 +++--- .github/workflows/release-npm.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cdd54fd2a4207b..8ff55b8fdf3461 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -63,7 +63,7 @@ jobs: fetch-depth: 2 - name: Set up Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@270253e841af726300e85d718a5f606959b2903c # renovate: tag=v2.4.1 + uses: actions/setup-node@04c56d2f954f1e4c69436aa54cfef261a018f458 # renovate: tag=v2.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: yarn @@ -119,7 +119,7 @@ jobs: fetch-depth: 2 - name: Set up Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@270253e841af726300e85d718a5f606959b2903c # renovate: tag=v2.4.1 + uses: actions/setup-node@04c56d2f954f1e4c69436aa54cfef261a018f458 # renovate: tag=v2.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: yarn @@ -169,7 +169,7 @@ jobs: fetch-depth: 0 - name: Set up Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@270253e841af726300e85d718a5f606959b2903c # renovate: tag=v2.4.1 + uses: actions/setup-node@04c56d2f954f1e4c69436aa54cfef261a018f458 # renovate: tag=v2.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: yarn diff --git a/.github/workflows/release-npm.yml b/.github/workflows/release-npm.yml index 6fbc1c81d57696..aeae97e96cf264 100644 --- a/.github/workflows/release-npm.yml +++ b/.github/workflows/release-npm.yml @@ -40,7 +40,7 @@ jobs: ref: ${{ env.GIT_SHA }} - name: Set up Node.js ${{ env.NODE_VERSION }} - uses: actions/setup-node@270253e841af726300e85d718a5f606959b2903c # renovate: tag=v2.4.1 + uses: actions/setup-node@04c56d2f954f1e4c69436aa54cfef261a018f458 # renovate: tag=v2.5.0 with: node-version: ${{ env.NODE_VERSION }} cache: yarn From 7fc43c7e7b646057a7fa6952e7c865174a3afee4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 18:30:14 +0100 Subject: [PATCH 196/248] build(deps): update dependency slugify to v1.6.3 (#12888) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c49244337160f1..4ec7681afa016a 100644 --- a/package.json +++ b/package.json @@ -194,7 +194,7 @@ "semver-utils": "1.1.4", "shlex": "2.1.0", "simple-git": "2.47.0", - "slugify": "1.6.2", + "slugify": "1.6.3", "traverse": "0.6.6", "tslib": "2.3.1", "upath": "2.0.1", diff --git a/yarn.lock b/yarn.lock index fedced3d34ffee..a76eded1a727c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9582,10 +9582,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slugify@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.2.tgz#4cb97220a2278e1b86fb017c6da668e6a865354c" - integrity sha512-XMtI8qD84LwCpthLMBHlIhcrj10cgA+U/Ot8G6FD6uFuWZtMfKK75JO7l81nzpFJsPlsW6LT+VKqWQJW3+6New== +slugify@1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.3.tgz#325aec50871acfb17976f2d3cb09ee1e7ab563be" + integrity sha512-1MPyqnIhgiq+/0iDJyqSJHENdnH5MMIlgJIBxmkRMzTNKlS/QsN5dXsB+MdDq4E6w0g9jFA4XOTRkVDjDae/2w== smart-buffer@^4.1.0: version "4.2.0" From ee2e155f1fd032ec77bed942ee7b797137bb5dd2 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Tue, 30 Nov 2021 01:01:05 +0545 Subject: [PATCH 197/248] fix: modify regex to be re2 compatbile (#12778) Co-authored-by: Rhys Arkins Co-authored-by: Michael Kriese --- lib/datasource/crate/index.ts | 3 +- lib/datasource/go/releases-goproxy.ts | 12 ++++---- lib/datasource/maven/index.ts | 2 +- lib/datasource/npm/npmrc.ts | 3 +- lib/datasource/packagist/index.ts | 3 +- lib/logger/cmd-serializer.ts | 2 +- lib/logger/err-serializer.ts | 2 +- lib/logger/pretty-stdout.ts | 2 +- lib/logger/utils.ts | 2 +- lib/manager/bazel/extract.ts | 2 +- lib/manager/bundler/extract.ts | 5 ++-- lib/manager/bundler/locked-version.ts | 2 +- lib/manager/cake/index.ts | 8 +++--- lib/manager/cocoapods/artifacts.ts | 2 +- lib/manager/cocoapods/extract.ts | 14 ++++++---- lib/manager/dockerfile/extract.ts | 4 +-- lib/manager/gitlabci/extract.ts | 22 +++++++++------ lib/manager/gradle/shallow/tokenizer.ts | 18 ++++++------ lib/manager/helmv3/update.ts | 3 +- lib/manager/leiningen/extract.ts | 9 +++--- lib/manager/npm/extract/index.ts | 28 +++++++++++-------- lib/manager/npm/extract/pnpm.ts | 2 +- .../npm/update/package-version/index.ts | 3 +- lib/manager/nuget/extract.ts | 6 ++-- lib/manager/terraform/lockfile/hash.ts | 3 +- lib/manager/terraform/lockfile/util.ts | 18 +++++++----- lib/manager/terraform/providers.ts | 4 +-- lib/manager/terraform/required-version.ts | 5 ++-- lib/platform/github/massage-markdown-links.ts | 4 +-- lib/util/emoji.ts | 2 +- lib/util/http/gitea.ts | 2 +- lib/util/ignore.ts | 1 - lib/util/modules.ts | 4 +-- lib/util/template/index.ts | 4 +-- lib/util/url.ts | 4 +-- lib/versioning/hashicorp/index.ts | 4 +-- lib/versioning/rez/pattern.ts | 8 +++--- lib/versioning/ruby/index.ts | 7 +++-- 38 files changed, 127 insertions(+), 102 deletions(-) diff --git a/lib/datasource/crate/index.ts b/lib/datasource/crate/index.ts index b7c69137b9b282..acc4841adf1161 100644 --- a/lib/datasource/crate/index.ts +++ b/lib/datasource/crate/index.ts @@ -7,6 +7,7 @@ import * as memCache from '../../util/cache/memory'; import { cache } from '../../util/cache/package/decorator'; import { privateCacheDir, readFile } from '../../util/fs'; import { simpleGitConfig } from '../../util/git/config'; +import { regEx } from '../../util/regex'; import * as cargoVersioning from '../../versioning/cargo'; import { Datasource } from '../datasource'; import type { GetReleasesConfig, Release, ReleaseResult } from '../types'; @@ -143,7 +144,7 @@ export class CrateDatasource extends Datasource { * clone the repository. */ private static cacheDirFromUrl(url: URL): string { - const proto = url.protocol.replace(/:$/, ''); // TODO #12070 + const proto = url.protocol.replace(regEx(/:$/), ''); const host = url.hostname; const hash = hasha(url.pathname, { algorithm: 'sha256', diff --git a/lib/datasource/go/releases-goproxy.ts b/lib/datasource/go/releases-goproxy.ts index 5acb7a080b5b0a..c35de8224feea6 100644 --- a/lib/datasource/go/releases-goproxy.ts +++ b/lib/datasource/go/releases-goproxy.ts @@ -37,9 +37,9 @@ export function parseGoproxy( } const result: GoproxyItem[] = input - .split(/([^,|]*(?:,|\|))/) // TODO: #12070 + .split(regEx(/([^,|]*(?:,|\|))/)) .filter(Boolean) - .map((s) => s.split(/(?=,|\|)/)) // TODO: #12070 + .map((s) => s.split(/(?=,|\|)/)) // TODO: #12872 lookahead .map(([url, separator]) => ({ url, fallback: @@ -56,7 +56,7 @@ export function parseGoproxy( const lexer = moo.states({ main: { separator: { - match: /\s*?,\s*?/, // TODO #12070 + match: /\s*?,\s*?/, // TODO #12870 value: (_: string) => '|', }, asterisk: { @@ -77,14 +77,14 @@ const lexer = moo.states({ value: (s: string) => s.replace(regEx('\\.', 'g'), '\\.'), }, escapedChar: { - match: /\\./, // TODO #12070 + match: /\\./, // TODO #12870 value: (s: string) => s.slice(1), }, }, characterRange: { - char: /[^\\\]\n]/, // TODO #12070 + char: /[^\\\]\n]/, // TODO #12870 escapedChar: { - match: /\\./, // TODO #12070 + match: /\\./, // TODO #12870 value: (s: string) => s.slice(1), }, characterRangeEnd: { diff --git a/lib/datasource/maven/index.ts b/lib/datasource/maven/index.ts index 00f6d7198d7c80..468ee1b1574373 100644 --- a/lib/datasource/maven/index.ts +++ b/lib/datasource/maven/index.ts @@ -306,7 +306,7 @@ export async function getReleases({ registryUrl, }: GetReleasesConfig): Promise { const dependency = getDependencyParts(lookupName); - const repoUrl = registryUrl.replace(/\/?$/, '/'); // TODO #12070 + const repoUrl = registryUrl.replace(/\/?$/, '/'); // TODO #12071 logger.debug(`Looking up ${dependency.display} in repository ${repoUrl}`); diff --git a/lib/datasource/npm/npmrc.ts b/lib/datasource/npm/npmrc.ts index 8a927ef6365381..cc3cf86f227efb 100644 --- a/lib/datasource/npm/npmrc.ts +++ b/lib/datasource/npm/npmrc.ts @@ -112,8 +112,7 @@ export function resolvePackage(packageName: string): PackageResolution { !authInfo && npmrc && npmrc._authToken && - registryUrl.replace(regEx(/\/?$/), '/') === - npmrc.registry?.replace(/\/?$/, '/') // TODO #12070 + registryUrl.replace(/\/?$/, '/') === npmrc.registry?.replace(/\/?$/, '/') // TODO #12070 ) { authInfo = { type: 'Bearer', token: npmrc._authToken }; } diff --git a/lib/datasource/packagist/index.ts b/lib/datasource/packagist/index.ts index 12bda735ee0e46..decb8d894bd545 100644 --- a/lib/datasource/packagist/index.ts +++ b/lib/datasource/packagist/index.ts @@ -6,6 +6,7 @@ import * as memCache from '../../util/cache/memory'; import * as packageCache from '../../util/cache/package'; import * as hostRules from '../../util/host-rules'; import { Http, HttpOptions } from '../../util/http'; +import { regEx } from '../../util/regex'; import * as composerVersioning from '../../versioning/composer'; import type { GetReleasesConfig, ReleaseResult } from '../types'; import type { @@ -124,7 +125,7 @@ function extractDepReleases(versions: RegistryFile): ReleaseResult { dep.sourceUrl = release.source.url; } return { - version: version.replace(/^v/, ''), // TODO #12070 + version: version.replace(regEx(/^v/), ''), gitRef: version, releaseTimestamp: release.time, }; diff --git a/lib/logger/cmd-serializer.ts b/lib/logger/cmd-serializer.ts index ea7741c52bb575..5142e5c6ca8c69 100644 --- a/lib/logger/cmd-serializer.ts +++ b/lib/logger/cmd-serializer.ts @@ -3,7 +3,7 @@ export default function cmdSerializer( cmd: string | string[] ): string | string[] { if (typeof cmd === 'string') { - return cmd.replace(/https:\/\/[^@]*@/g, 'https://**redacted**@'); // TODO #12070 + return cmd.replace(/https:\/\/[^@]*@/g, 'https://**redacted**@'); // TODO #12874 } return cmd; } diff --git a/lib/logger/err-serializer.ts b/lib/logger/err-serializer.ts index 23d81cc111af80..d33cc614606e3a 100644 --- a/lib/logger/err-serializer.ts +++ b/lib/logger/err-serializer.ts @@ -12,7 +12,7 @@ export default function errSerializer(err: Error): any { const val = response[field]; if (is.string(val)) { response[field] = val.replace( - /https:\/\/[^@]*?@/g, // TODO #12070 #12071 + /https:\/\/[^@]*?@/g, // TODO #12874 'https://**redacted**@' ); } diff --git a/lib/logger/pretty-stdout.ts b/lib/logger/pretty-stdout.ts index fc97db214cf8ae..2259b880177b5b 100644 --- a/lib/logger/pretty-stdout.ts +++ b/lib/logger/pretty-stdout.ts @@ -37,7 +37,7 @@ const levels: Record = { export function indent(str: string, leading = false): string { const prefix = leading ? ' ' : ''; - return prefix + str.split(/\r?\n/).join('\n '); // TODO #12070 + return prefix + str.split(/\r?\n/).join('\n '); // TODO #12874 } export function getMeta(rec: BunyanRecord): string { diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index 0bb5ffdaf317d3..cb0de0a395ba7d 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -184,7 +184,7 @@ export function withSanitizer(streamConfig: bunyan.Stream): bunyan.Stream { const result = streamConfig.type === 'raw' ? raw - : JSON.stringify(raw, bunyan.safeCycles()).replace(/\n?$/, '\n'); // TODO #12070 + : JSON.stringify(raw, bunyan.safeCycles()).replace(/\n?$/, '\n'); // TODO #12874 stream.write(result, enc, cb); }; diff --git a/lib/manager/bazel/extract.ts b/lib/manager/bazel/extract.ts index 123f54d75fd976..1e97dbffff4566 100644 --- a/lib/manager/bazel/extract.ts +++ b/lib/manager/bazel/extract.ts @@ -51,7 +51,7 @@ function parseUrl(urlString: string): UrlParsedResult | null { const lexer = moo.states({ main: { - lineComment: { match: /#.*?$/ }, // TODO #12070 + lineComment: { match: /#.*?$/ }, // TODO #12870 leftParen: { match: '(' }, rightParen: { match: ')' }, longDoubleQuoted: { diff --git a/lib/manager/bundler/extract.ts b/lib/manager/bundler/extract.ts index 16032b92f95d3a..2d8ccd655cc317 100644 --- a/lib/manager/bundler/extract.ts +++ b/lib/manager/bundler/extract.ts @@ -38,8 +38,9 @@ export async function extractPackageFile( if (rubyMatch) { res.constraints = { ruby: rubyMatch[1] }; } - const gemMatchRegex = - /^\s*gem\s+(['"])(?[^'"]+)\1(\s*,\s*(?(['"])[^'"]+\5(\s*,\s*\5[^'"]+\5)?))?/; // TODO #12070 #12071 + const gemMatchRegex = regEx( + `^\\s*gem\\s+(['"])(?[^'"]+)(['"])(\\s*,\\s*(?(['"])[^'"]+['"](\\s*,\\s*['"][^'"]+['"])?))?` + ); // TODO #12071 const gemMatch = gemMatchRegex.exec(line); if (gemMatch) { const dep: PackageDependency = { diff --git a/lib/manager/bundler/locked-version.ts b/lib/manager/bundler/locked-version.ts index c18ceb244d2209..e2d786c9e0b966 100644 --- a/lib/manager/bundler/locked-version.ts +++ b/lib/manager/bundler/locked-version.ts @@ -1,7 +1,7 @@ import { logger } from '../../logger'; import { isVersion } from '../../versioning/ruby'; -const DEP_REGEX = new RegExp('(?<=\\().*(?=\\))'); // TODO #12070 +const DEP_REGEX = new RegExp('(?<=\\().*(?=\\))'); // TODO #12872 (?<=re) after text matching export function extractLockFileEntries( lockFileContent: string ): Map { diff --git a/lib/manager/cake/index.ts b/lib/manager/cake/index.ts index c469a3e29f644b..5d2a05166c602d 100644 --- a/lib/manager/cake/index.ts +++ b/lib/manager/cake/index.ts @@ -13,13 +13,13 @@ export const defaultConfig = { const lexer = moo.states({ main: { - lineComment: { match: /\/\/.*?$/ }, // TODO #12070 - multiLineComment: { match: /\/\*[^]*?\*\//, lineBreaks: true }, // TODO #12070 + lineComment: { match: /\/\/.*?$/ }, // TODO #12870 + multiLineComment: { match: /\/\*[^]*?\*\//, lineBreaks: true }, // TODO #12870 dependency: { - match: /^#(?:addin|tool|module|load|l)\s+(?:nuget|dotnet):.*$/, // TODO #12070 + match: /^#(?:addin|tool|module|load|l)\s+(?:nuget|dotnet):.*$/, // TODO #12870 }, dependencyQuoted: { - match: /^#(?:addin|tool|module|load|l)\s+"(?:nuget|dotnet):[^"]+"\s*$/, // TODO #12070 + match: /^#(?:addin|tool|module|load|l)\s+"(?:nuget|dotnet):[^"]+"\s*$/, // TODO #12870 value: (s: string) => s.trim().slice(1, -1), }, unknown: moo.fallback, diff --git a/lib/manager/cocoapods/artifacts.ts b/lib/manager/cocoapods/artifacts.ts index 3fc124fa06cb7f..7c745cfb5d1d59 100644 --- a/lib/manager/cocoapods/artifacts.ts +++ b/lib/manager/cocoapods/artifacts.ts @@ -13,7 +13,7 @@ import { getRepoStatus } from '../../util/git'; import { regEx } from '../../util/regex'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; -const pluginRegex = /^\s*plugin\s*(['"])(?[^'"]+)\1/; // TODO #12070 +const pluginRegex = regEx(`^\\s*plugin\\s*(['"])(?[^'"]+)(['"])`); function getPluginCommands(content: string): string[] { const result = new Set(); diff --git a/lib/manager/cocoapods/extract.ts b/lib/manager/cocoapods/extract.ts index 09ce166170d749..84306227bda2a4 100644 --- a/lib/manager/cocoapods/extract.ts +++ b/lib/manager/cocoapods/extract.ts @@ -10,12 +10,14 @@ import type { PackageDependency, PackageFile } from '../types'; import type { ParsedLine } from './types'; const regexMappings = [ - /^\s*pod\s+(['"])(?[^'"/]+)(\/(?[^'"]+))?\1/, // TODO #12070 - /^\s*pod\s+(['"])[^'"]+\1\s*,\s*(['"])(?[^'"]+)\2\s*$/, // TODO #12070 - /,\s*:git\s*=>\s*(['"])(?[^'"]+)\1/, // TODO #12070 - /,\s*:tag\s*=>\s*(['"])(?[^'"]+)\1/, // TODO #12070 - /,\s*:path\s*=>\s*(['"])(?[^'"]+)\1/, // TODO #12070 - /^\s*source\s*(['"])(?[^'"]+)\1/, // TODO #12070 + regEx(`^\\s*pod\\s+(['"])(?[^'"/]+)(\\/(?[^'"]+))?(['"])`), + regEx( + `^\\s*pod\\s+(['"])[^'"]+(['"])\\s*,\\s*(['"])(?[^'"]+)(['"])\\s*$` + ), + regEx(`,\\s*:git\\s*=>\\s*(['"])(?[^'"]+)(['"])`), + regEx(`,\\s*:tag\\s*=>\\s*(['"])(?[^'"]+)(['"])`), + regEx(`,\\s*:path\\s*=>\\s*(['"])(?[^'"]+)(['"])`), + regEx(`^\\s*source\\s*(['"])(?[^'"]+)(['"])`), ]; export function parseLine(line: string): ParsedLine { diff --git a/lib/manager/dockerfile/extract.ts b/lib/manager/dockerfile/extract.ts index 0053192215b955..778e9702efa502 100644 --- a/lib/manager/dockerfile/extract.ts +++ b/lib/manager/dockerfile/extract.ts @@ -153,7 +153,7 @@ export function extractPackageFile(content: string): PackageFile | null { const stageNames: string[] = []; const fromMatches = content.matchAll( - /^[ \t]*FROM(?:\\\r?\n| |\t|#.*?\r?\n|[ \t]--[a-z]+=\S+?)*[ \t](?\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?\S+))?/gim // TODO #12070 + /^[ \t]*FROM(?:\\\r?\n| |\t|#.*?\r?\n|[ \t]--[a-z]+=\S+?)*[ \t](?\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?\S+))?/gim // TODO #12070 complex for re2 has too many not supported groups ); for (const fromMatch of fromMatches) { @@ -180,7 +180,7 @@ export function extractPackageFile(content: string): PackageFile | null { } const copyFromMatches = content.matchAll( - /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|[ \t]--[a-z]+=\w+?)*[ \t]--from=(?\S+)/gim // TODO #12070 + /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|[ \t]--[a-z]+=\w+?)*[ \t]--from=(?\S+)/gim // TODO #12070 complex for re2 has too many not supported groups ); for (const copyFromMatch of copyFromMatches) { diff --git a/lib/manager/gitlabci/extract.ts b/lib/manager/gitlabci/extract.ts index 23d98d30ac7799..14a478b453af2b 100644 --- a/lib/manager/gitlabci/extract.ts +++ b/lib/manager/gitlabci/extract.ts @@ -2,17 +2,21 @@ import is from '@sindresorhus/is'; import { load } from 'js-yaml'; import { logger } from '../../logger'; import { readLocalFile } from '../../util/fs'; +import { regEx } from '../../util/regex'; import { getDep } from '../dockerfile/extract'; import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import type { GitlabPipeline } from './types'; import { replaceReferenceTags } from './utils'; -const commentsRe = /^\s*#/; // TODO #12070 -const whitespaceRe = /^(?\s*)/; // TODO #12070 -const imageRe = - /^(?\s*)image:(?:\s+['"]?(?[^\s'"]+)['"]?)?\s*$/; // TODO #12070 -const nameRe = /^\s*name:\s+['"]?(?[^\s'"]+)['"]?\s*$/; // TODO #12070 -const serviceRe = /^\s*-\s*(?:name:\s+)?['"]?(?[^\s'"]+)['"]?\s*$/; // TODO #12070 +const commentsRe = regEx(/^\s*#/); +const whitespaceRe = regEx(`^(?\\s*)`); +const imageRe = regEx( + `^(?\\s*)image:(?:\\s+['"]?(?[^\\s'"]+)['"]?)?\\s*$` +); +const nameRe = regEx(`^\\s*name:\\s+['"]?(?[^\\s'"]+)['"]?\\s*$`); +const serviceRe = regEx( + `^\\s*-\\s*(?:name:\\s+)?['"]?(?[^\\s'"]+)['"]?\\s*$` +); function skipCommentLines( lines: string[], lineNumber: number @@ -61,7 +65,7 @@ export function extractPackageFile(content: string): PackageFile | null { } } } - const services = /^\s*services:\s*$/.test(line); // TODO #12071 #12070 + const services = regEx(/^\s*services:\s*$/).test(line); // TODO #12071 if (services) { logger.trace(`Matched services on line ${lineNumber}`); let foundImage: boolean; @@ -120,7 +124,7 @@ export async function extractAllPackageFiles( if (is.array(doc?.include)) { for (const includeObj of doc.include) { if (is.string(includeObj.local)) { - const fileObj = includeObj.local.replace(/^\//, ''); // TODO #12071 #12070 + const fileObj = includeObj.local.replace(regEx(/^\//), ''); if (!seen.has(fileObj)) { seen.add(fileObj); filesToExamine.push(fileObj); @@ -128,7 +132,7 @@ export async function extractAllPackageFiles( } } } else if (is.string(doc?.include)) { - const fileObj = doc.include.replace(/^\//, ''); // TODO #12071 #12070 + const fileObj = doc.include.replace(regEx(/^\//), ''); if (!seen.has(fileObj)) { seen.add(fileObj); filesToExamine.push(fileObj); diff --git a/lib/manager/gradle/shallow/tokenizer.ts b/lib/manager/gradle/shallow/tokenizer.ts index 728fcbe2a887ca..b599d41f9bd403 100644 --- a/lib/manager/gradle/shallow/tokenizer.ts +++ b/lib/manager/gradle/shallow/tokenizer.ts @@ -3,7 +3,7 @@ import { regEx } from '../../../util/regex'; import { TokenType } from './common'; import type { StringInterpolation, Token } from './types'; -const escapedCharRegex = /\\['"bfnrt\\]/; // TODO #12070 +const escapedCharRegex = /\\['"bfnrt\\]/; // TODO #12870 const escapedChars = { [TokenType.EscapedChar]: { match: escapedCharRegex, @@ -24,17 +24,17 @@ const escapedChars = { const lexer = moo.states({ // Top-level Groovy lexemes main: { - [TokenType.LineComment]: { match: /\/\/.*?$/ }, // TODO #12070 - [TokenType.MultiComment]: { match: /\/\*[^]*?\*\//, lineBreaks: true }, // TODO #12070 - [TokenType.Newline]: { match: /\r?\n/, lineBreaks: true }, // TODO #12070 - [TokenType.Space]: { match: /[ \t\r]+/ }, // TODO #12070 + [TokenType.LineComment]: { match: /\/\/.*?$/ }, // TODO #12870 + [TokenType.MultiComment]: { match: /\/\*[^]*?\*\//, lineBreaks: true }, // TODO #12870 + [TokenType.Newline]: { match: /\r?\n/, lineBreaks: true }, // TODO #12870 + [TokenType.Space]: { match: /[ \t\r]+/ }, // TODO #12870 [TokenType.Semicolon]: ';', [TokenType.Colon]: ':', [TokenType.Dot]: '.', [TokenType.Comma]: ',', - [TokenType.Operator]: /(?:==|\+=?|-=?|\/=?|\*\*?|\.+|:)/, // TODO #12070 + [TokenType.Operator]: /(?:==|\+=?|-=?|\/=?|\*\*?|\.+|:)/, // TODO #12870 [TokenType.Assignment]: '=', - [TokenType.Word]: { match: /[a-zA-Z$_][a-zA-Z0-9$_]+/ }, // TODO #12070 + [TokenType.Word]: { match: /[a-zA-Z$_][a-zA-Z0-9$_]+/ }, // TODO #12870 [TokenType.LeftParen]: { match: '(' }, [TokenType.RightParen]: { match: ')' }, [TokenType.LeftBracket]: { match: '[' }, @@ -86,12 +86,12 @@ const lexer = moo.states({ variable: { // Supported: ${foo}, $foo, ${ foo.bar.baz }, $foo.bar.baz match: - /\${\s*[a-zA-Z_][a-zA-Z0-9_]*(?:\s*\.\s*[a-zA-Z_][a-zA-Z0-9_]*)*\s*}|\$[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*/, // TODO #12070 + /\${\s*[a-zA-Z_][a-zA-Z0-9_]*(?:\s*\.\s*[a-zA-Z_][a-zA-Z0-9_]*)*\s*}|\$[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*/, // TODO #12870 value: (x: string): string => x.replace(regEx(/^\${?\s*/), '').replace(regEx(/\s*}$/), ''), }, [TokenType.IgnoredInterpolationStart]: { - match: /\${/, // TODO #12070 + match: /\${/, // TODO #12870 push: TokenType.IgnoredInterpolationStart, }, [TokenType.Chars]: moo.fallback, diff --git a/lib/manager/helmv3/update.ts b/lib/manager/helmv3/update.ts index 6f02c15eb37d5c..a965beb3221aac 100644 --- a/lib/manager/helmv3/update.ts +++ b/lib/manager/helmv3/update.ts @@ -1,5 +1,6 @@ import { ReleaseType, inc } from 'semver'; import { logger } from '../../logger'; +import { regEx } from '../../util/regex'; import type { BumpPackageVersionResult } from '../types'; export function bumpPackageVersion( @@ -20,7 +21,7 @@ export function bumpPackageVersion( } logger.debug({ newChartVersion }); bumpedContent = content.replace( - /^(?version:\s*).*$/m, // TODO #12070 + regEx(`^(?version:\\s*).*$`, 'm'), `$${newChartVersion}` ); if (bumpedContent === content) { diff --git a/lib/manager/leiningen/extract.ts b/lib/manager/leiningen/extract.ts index 1986c36e743cc8..9d83ff1022c7ee 100644 --- a/lib/manager/leiningen/extract.ts +++ b/lib/manager/leiningen/extract.ts @@ -4,7 +4,7 @@ import type { PackageDependency, PackageFile } from '../types'; import type { ExtractContext, ExtractedVariables } from './types'; export function trimAtKey(str: string, kwName: string): string | null { - const regex = new RegExp(`:${kwName}(?=\\s)`); // TODO #12070 + const regex = new RegExp(`:${kwName}(?=\\s)`); // TODO #12872 lookahead const keyOffset = str.search(regex); if (keyOffset < 0) { return null; @@ -105,7 +105,7 @@ function extractLeinRepos(content: string): string[] { const result = []; const repoContent = trimAtKey( - content.replace(/;;.*(?=[\r\n])/g, ''), // get rid of comments // TODO #12070 + content.replace(/;;.*(?=[\r\n])/g, ''), // get rid of comments // TODO #12872 lookahead 'repositories' ); @@ -125,10 +125,11 @@ function extractLeinRepos(content: string): string[] { } } const repoSectionContent = repoContent.slice(0, endIdx); - const matches = repoSectionContent.match(/"https?:\/\/[^"]*"/g) || []; // TODO #12070 + const matches = + repoSectionContent.match(regEx(/"https?:\/\/[^"]*"/g)) || []; const urls = matches.map((x) => x.replace(regEx(/^"/), '').replace(regEx(/"$/), '') - ); // TODO #12071 + ); urls.forEach((url) => result.push(url)); } diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index 143c8de05bae98..4ed11b1940820b 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -27,12 +27,13 @@ function parseDepName(depType: string, key: string): string { return key; } - const [, depName] = /((?:@[^/]+\/)?[^/@]+)$/.exec(key) ?? []; // TODO #12070 + const [, depName] = regEx(/((?:@[^/]+\/)?[^/@]+)$/).exec(key) ?? []; return depName; } -const RE_REPOSITORY_GITHUB_SSH_FORMAT = - /(?:git@)github.com:([^/]+)\/([^/.]+)(?:\.git)?/; // TODO #12070 +const RE_REPOSITORY_GITHUB_SSH_FORMAT = regEx( + /(?:git@)github.com:([^/]+)\/([^/.]+)(?:\.git)?/ +); export async function extractPackageFile( content: string, @@ -107,11 +108,14 @@ export async function extractPackageFile( } else { npmrc = config.npmrc || ''; if (npmrc.length) { - npmrc = npmrc.replace(/\n?$/, '\n'); // TODO #12070 + npmrc = npmrc.replace(/\n?$/, '\n'); // TODO #12070 add \n to front when used with re2 } if (repoNpmrc?.includes('package-lock')) { logger.debug('Stripping package-lock setting from .npmrc'); - repoNpmrc = repoNpmrc.replace(/(^|\n)package-lock.*?(\n|$)/g, '\n'); // TODO #12070 + repoNpmrc = repoNpmrc.replace( + regEx(/(^|\n)package-lock.*?(\n|$)/g), + '\n' + ); } if (repoNpmrc.includes('=${') && !GlobalConfig.get('exposeAllEnv')) { logger.debug( @@ -280,10 +284,10 @@ export async function extractPackageFile( const matchUrlSshFormat = RE_REPOSITORY_GITHUB_SSH_FORMAT.exec(depNamePart); if (matchUrlSshFormat === null) { githubOwnerRepo = depNamePart - .replace(/^github:/, '') // TODO #12070 - .replace(/^git\+/, '') // TODO #12070 - .replace(/^https:\/\/github\.com\//, '') // TODO #12070 - .replace(/\.git$/, ''); // TODO #12070 + .replace(regEx(/^github:/), '') + .replace(regEx(/^git\+/), '') + .replace(regEx(/^https:\/\/github\.com\//), '') + .replace(regEx(/\.git$/), ''); const githubRepoSplit = githubOwnerRepo.split('/'); if (githubRepoSplit.length !== 2) { dep.skipReason = SkipReason.UnknownVersion; @@ -295,7 +299,7 @@ export async function extractPackageFile( githubRepo = matchUrlSshFormat[2]; githubOwnerRepo = `${githubOwner}/${githubRepo}`; } - const githubValidRegex = /^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}$/; // TODO #12070 + const githubValidRegex = /^[a-z\d](?:[a-z\d]|-(?=[a-z\d])){0,38}$/; // TODO #12872 lookahead if ( !githubValidRegex.test(githubOwner) || !githubValidRegex.test(githubRepo) @@ -310,8 +314,8 @@ export async function extractPackageFile( dep.lookupName = githubOwnerRepo; dep.pinDigests = false; } else if ( - /^[0-9a-f]{7}$/.test(depRefPart) || // TODO #12070 - /^[0-9a-f]{40}$/.test(depRefPart) // TODO #12070 + regEx(/^[0-9a-f]{7}$/).test(depRefPart) || + regEx(/^[0-9a-f]{40}$/).test(depRefPart) ) { dep.currentRawValue = dep.currentValue; dep.currentValue = null; diff --git a/lib/manager/npm/extract/pnpm.ts b/lib/manager/npm/extract/pnpm.ts index 64475e6eba31f2..54be1d398bf686 100644 --- a/lib/manager/npm/extract/pnpm.ts +++ b/lib/manager/npm/extract/pnpm.ts @@ -105,7 +105,7 @@ export async function detectPnpmWorkspaces( packageFilters !== null && matchesAnyPattern( packageFile, - packageFilters.map((filter) => filter.replace(/\/?$/, '/package.json')) // TODO #12070 #12071 + packageFilters.map((filter) => filter.replace(/\/?$/, '/package.json')) // TODO #12070 ); if (isPackageInWorkspace) { p.pnpmShrinkwrap = lockFilePath; diff --git a/lib/manager/npm/update/package-version/index.ts b/lib/manager/npm/update/package-version/index.ts index 0689cd9109ab70..c28065f6350817 100644 --- a/lib/manager/npm/update/package-version/index.ts +++ b/lib/manager/npm/update/package-version/index.ts @@ -1,5 +1,6 @@ import { ReleaseType, inc } from 'semver'; import { logger } from '../../../../logger'; +import { regEx } from '../../../../util/regex'; import type { BumpPackageVersionResult } from '../../../types'; export function bumpPackageVersion( @@ -31,7 +32,7 @@ export function bumpPackageVersion( } logger.debug({ newPjVersion }); bumpedContent = content.replace( - /(?"version":\s*")[^"]*/, // TODO #12070 + regEx(`(?"version":\\s*")[^"]*`), `$${newPjVersion}` ); if (bumpedContent === content) { diff --git a/lib/manager/nuget/extract.ts b/lib/manager/nuget/extract.ts index fb4f4fc130a4fa..5c14279e91993f 100644 --- a/lib/manager/nuget/extract.ts +++ b/lib/manager/nuget/extract.ts @@ -4,6 +4,7 @@ import * as datasourceNuget from '../../datasource/nuget'; import { logger } from '../../logger'; import { getSiblingFileName, localPathExists } from '../../util/fs'; import { hasKey } from '../../util/object'; +import { regEx } from '../../util/regex'; import type { ExtractConfig, PackageDependency, PackageFile } from '../types'; import { extractMsbuildGlobalManifest } from './extract/global-manifest'; import type { DotnetToolsManifest } from './types'; @@ -20,8 +21,9 @@ import { getConfiguredRegistries } from './util'; * The update of the right boundary does not make sense regarding to the lowest version restore rule, * so we don't include it in the extracting regexp */ -const checkVersion = - /^\s*(?:[[])?(?:(?[^"(,[\]]+)\s*(?:,\s*[)\]]|])?)\s*$/; // TODO #12070 +const checkVersion = regEx( + `^\\s*(?:[[])?(?:(?[^"(,[\\]]+)\\s*(?:,\\s*[)\\]]|])?)\\s*$` +); const elemNames = new Set([ 'PackageReference', 'PackageVersion', diff --git a/lib/manager/terraform/lockfile/hash.ts b/lib/manager/terraform/lockfile/hash.ts index 94799f362c3d59..f20b2ec0c450d2 100644 --- a/lib/manager/terraform/lockfile/hash.ts +++ b/lib/manager/terraform/lockfile/hash.ts @@ -9,6 +9,7 @@ import { cache } from '../../../util/cache/package/decorator'; import * as fs from '../../../util/fs'; import { ensureCacheDir } from '../../../util/fs'; import { Http } from '../../../util/http'; +import { regEx } from '../../../util/regex'; export class TerraformProviderHash { static http = new Http(TerraformProviderDatasource.id); @@ -31,7 +32,7 @@ export class TerraformProviderHash { // add double space, the filename and a new line char rootHash.update(' '); - const fileName = file.replace(/^.*[\\/]/, ''); // TODO #12070 + const fileName = file.replace(regEx(/^.*[\\/]/), ''); // TODO #12071 rootHash.update(fileName); rootHash.update('\n'); } diff --git a/lib/manager/terraform/lockfile/util.ts b/lib/manager/terraform/lockfile/util.ts index d6bedc5d2c367b..4e257557c32270 100644 --- a/lib/manager/terraform/lockfile/util.ts +++ b/lib/manager/terraform/lockfile/util.ts @@ -1,4 +1,5 @@ import { getSiblingFileName, readLocalFile } from '../../../util/fs'; +import { regEx } from '../../../util/regex'; import { get as getVersioning } from '../../../versioning'; import type { UpdateArtifactsResult } from '../../types'; import type { @@ -8,13 +9,16 @@ import type { ProviderSlice, } from './types'; -const providerStartLineRegex = - /^provider "(?[^/]*)\/(?[^/]*)\/(?[^/]*)"/; // TODO #12070 -const versionLineRegex = - /^(?[\s]*version[\s]*=[\s]*")(?[^"']+)(?".*)$/; // TODO #12070 -const constraintLineRegex = - /^(?[\s]*constraints[\s]*=[\s]*")(?[^"']+)(?".*)$/; // TODO #12070 -const hashLineRegex = /^(?\s*")(?[^"]+)(?",.*)$/; // TODO #12070 +const providerStartLineRegex = regEx( + `^provider "(?[^/]*)\\/(?[^/]*)\\/(?[^/]*)"` +); +const versionLineRegex = regEx( + `^(?[\\s]*version[\\s]*=[\\s]*")(?[^"']+)(?".*)$` +); +const constraintLineRegex = regEx( + `^(?[\\s]*constraints[\\s]*=[\\s]*")(?[^"']+)(?".*)$` +); +const hashLineRegex = regEx(`^(?\\s*")(?[^"]+)(?",.*)$`); const lockFile = '.terraform.lock.hcl'; diff --git a/lib/manager/terraform/providers.ts b/lib/manager/terraform/providers.ts index 229395dc1d3bd3..f82e1a05faebcc 100644 --- a/lib/manager/terraform/providers.ts +++ b/lib/manager/terraform/providers.ts @@ -42,8 +42,8 @@ export function extractTerraformProvider( // istanbul ignore else if (is.string(line)) { // `{` will be counted wit +1 and `}` with -1. Therefore if we reach braceCounter == 0. We have found the end of the terraform block - const openBrackets = (line.match(/\{/g) || []).length; // TODO #12071 #12070 - const closedBrackets = (line.match(/\}/g) || []).length; // TODO #12071 #12070 + const openBrackets = (line.match(regEx(/\{/g)) || []).length; // TODO #12071 + const closedBrackets = (line.match(regEx(/\}/g)) || []).length; // TODO #12071 braceCounter = braceCounter + openBrackets - closedBrackets; // only update fields inside the root block diff --git a/lib/manager/terraform/required-version.ts b/lib/manager/terraform/required-version.ts index 1de63c941f06fa..12f5ad4bdf0f8e 100644 --- a/lib/manager/terraform/required-version.ts +++ b/lib/manager/terraform/required-version.ts @@ -1,5 +1,6 @@ import * as datasourceGithubTags from '../../datasource/github-tags'; import { logger } from '../../logger'; +import { regEx } from '../../util/regex'; import type { PackageDependency } from '../types'; import { TerraformDependencyTypes } from './common'; import type { ExtractionResult } from './types'; @@ -20,8 +21,8 @@ export function extractTerraformRequiredVersion( const line = lines[lineNumber]; // `{` will be counted wit +1 and `}` with -1. Therefore if we reach braceCounter == 0. We have found the end of the terraform block - const openBrackets = (line.match(/\{/g) || []).length; // TODO #12070 - const closedBrackets = (line.match(/\}/g) || []).length; // TODO #12070 + const openBrackets = (line.match(regEx(/\{/g)) || []).length; + const closedBrackets = (line.match(regEx(/\}/g)) || []).length; braceCounter = braceCounter + openBrackets - closedBrackets; const kvMatch = keyValueExtractionRegex.exec(line); diff --git a/lib/platform/github/massage-markdown-links.ts b/lib/platform/github/massage-markdown-links.ts index cbff68d00f5df6..84391ff7649ea6 100644 --- a/lib/platform/github/massage-markdown-links.ts +++ b/lib/platform/github/massage-markdown-links.ts @@ -12,10 +12,10 @@ interface UrlMatch { } const urlRegex = - /(?:https?:)?(?:\/\/)?(?:www\.)?(? source ); -const emojiRegex = new RegExp(`(?:${emojiRegexSrc.join('|')})`, 'g'); // TODO #12070 +const emojiRegex = new RegExp(`(?:${emojiRegexSrc.join('|')})`, 'g'); // TODO #12070 cannot figure it out const excludedModifiers = new Set([ '20E3', '200D', diff --git a/lib/util/http/gitea.ts b/lib/util/http/gitea.ts index 2631c5e0d7ba71..24d618fdeb2bef 100644 --- a/lib/util/http/gitea.ts +++ b/lib/util/http/gitea.ts @@ -4,7 +4,7 @@ import { Http, HttpOptions, HttpResponse, InternalHttpOptions } from '.'; let baseUrl: string; export const setBaseUrl = (newBaseUrl: string): void => { - baseUrl = newBaseUrl.replace(/\/*$/, '/'); // TODO #12070 #12071 + baseUrl = newBaseUrl.replace(/\/*$/, '/'); // TODO #12070 }; export interface GiteaHttpOptions extends InternalHttpOptions { diff --git a/lib/util/ignore.ts b/lib/util/ignore.ts index 6ef218d970996c..fc16a2e137446a 100644 --- a/lib/util/ignore.ts +++ b/lib/util/ignore.ts @@ -3,7 +3,6 @@ import { regEx } from './regex'; export function isSkipComment(comment?: string): boolean { if (regEx(/^(renovate|pyup):/).test(comment)) { - // TODO #12070 #12071 needs to be checked manually const command = comment.split('#')[0].split(':')[1].trim(); if (command === 'ignore') { return true; diff --git a/lib/util/modules.ts b/lib/util/modules.ts index 9d988ac1095be3..5b3b9fc27d44c4 100644 --- a/lib/util/modules.ts +++ b/lib/util/modules.ts @@ -3,8 +3,8 @@ import { join, normalizeTrim } from 'upath'; import { regEx } from './regex'; function relatePath(here: string, there: string): string { - const thereParts = normalizeTrim(there).split(regEx(/[\\/]/)); // TODO #12070 needs to be tested manually - const hereParts = normalizeTrim(here).split(regEx(/[\\/]/)); // TODO #12070 needs to be tested manually + const thereParts = normalizeTrim(there).split(regEx(/[\\/]/)); + const hereParts = normalizeTrim(here).split(regEx(/[\\/]/)); let idx = 0; while ( diff --git a/lib/util/template/index.ts b/lib/util/template/index.ts index a4e84d60256b23..a449097b3f8ac7 100644 --- a/lib/util/template/index.ts +++ b/lib/util/template/index.ts @@ -13,7 +13,7 @@ handlebars.registerHelper('stringToPrettyJSON', (input: string): string => // istanbul ignore next handlebars.registerHelper( 'replace', - (find, replace, context) => context.replace(new RegExp(find, 'g'), replace) // TODO #12070 + (find, replace, context) => context.replace(new RegExp(find, 'g'), replace) // TODO #12873 ); export const exposedConfigOptions = [ @@ -147,7 +147,7 @@ function getFilteredObject(input: CompileInput): any { return res; } -const templateRegex = /{{(#(if|unless) )?([a-zA-Z]+)}}/g; // TODO #12070 +const templateRegex = /{{(#(if|unless) )?([a-zA-Z]+)}}/g; // TODO #12873 export function compile( template: string, diff --git a/lib/util/url.ts b/lib/util/url.ts index 99677b269a3297..25a23c31f9d6c5 100644 --- a/lib/util/url.ts +++ b/lib/util/url.ts @@ -15,11 +15,11 @@ export function ensurePathPrefix(url: string, prefix: string): string { } export function ensureTrailingSlash(url: string): string { - return url.replace(/\/?$/, '/'); // TODO #12070 #12071 add tests for this one + return url.replace(/\/?$/, '/'); // TODO #12070 adds slash at the front when re2 is used } export function trimTrailingSlash(url: string): string { - return url.replace(regEx(/\/+$/), ''); // TODO #12071 + return url.replace(regEx(/\/+$/), ''); } export function resolveBaseUrl(baseUrl: string, input: string | URL): string { diff --git a/lib/versioning/hashicorp/index.ts b/lib/versioning/hashicorp/index.ts index 79749443b08a0e..62c1e99f476ffb 100644 --- a/lib/versioning/hashicorp/index.ts +++ b/lib/versioning/hashicorp/index.ts @@ -49,14 +49,14 @@ function getNewValue({ replaceValue = `$${npm.getMinor(newVersion)}$`; } return currentValue.replace( - /(?~>\s*0\.)\d+(?.*)$/, // TODO #12070 + regEx(`(?~>\\s*0\\.)\\d+(?.*)$`), // TODO #12071 replaceValue ); } // handle special ~> 1.2 case if (regEx(/(~>\s*)\d+\.\d+$/).test(currentValue)) { return currentValue.replace( - /(?~>\s*)\d+\.\d+$/, // TODO #12070 + regEx(`(?~>\\s*)\\d+\\.\\d+$`), // TODO #12071 `$${npm.getMajor(newVersion)}.0` ); } diff --git a/lib/versioning/rez/pattern.ts b/lib/versioning/rez/pattern.ts index d2d7c98e46d39a..432da270404bf7 100644 --- a/lib/versioning/rez/pattern.ts +++ b/lib/versioning/rez/pattern.ts @@ -76,17 +76,17 @@ export const inclusiveBound = regEx( `^(?(?${versionGroup})?\\.\\.(?${versionGroup})?)$` ); /* Match an inclusive bound (e.g. 1.0.0..2.0.0) */ // Add ? after |\\+) in order to match >=1.15 -export const lowerBound = new RegExp( // TODO #12070 +export const lowerBound = new RegExp( // TODO #12872 named backreference `^(?(?>|>=)?(?${versionGroup})?(\\k|\\+)?)$` ); /* Match a lower bound (e.g. 1.0.0+) */ -export const upperBound = new RegExp( // TODO #12070 +export const upperBound = new RegExp( // TODO #12872 lookahead `^(?(?<(?=${versionGroup})|<=)?(?${versionGroup})?)$` ); /* Match an upper bound (e.g. <=1.0.0) */ // Add ,? to match >=7,<9 (otherwise it just matches >=7<9) -export const ascendingRange = new RegExp( // TODO #12070 +export const ascendingRange = new RegExp( // TODO #12872 named backreference `^(?(?(?>|>=)?(?${versionGroup})?(\\k|\\+)?),?(?(\\k,?|)(?<(?=${versionGroup})|<=)(?${versionGroup})?))$` ); /* Match a range in ascending order (e.g. 1.0.0+<2.0.0) */ // Add , to match <9,>=7 (otherwise it just matches <9>=7) -export const descendingRange = new RegExp( // TODO #12070 +export const descendingRange = new RegExp( // TODO #12872 named backreference `^(?(?(?<|<=)?(?${versionGroup})?(\\k|\\+)?),(?(\\k,|)(?<(?=${versionGroup})|>=?)(?${versionGroup})?))$` ); /* Match a range in descending order (e.g. <=2.0.0,1.0.0+) */ diff --git a/lib/versioning/ruby/index.ts b/lib/versioning/ruby/index.ts index 929e267ae90ff0..a1e73b7617abbc 100644 --- a/lib/versioning/ruby/index.ts +++ b/lib/versioning/ruby/index.ts @@ -129,11 +129,14 @@ const getNewValue = ({ .split(',') .map( (element) => - element.replace(/^(?\s*)/, `$${delimiter}`) // TODO #12071 #12070 + element.replace( + regEx(`^(?\\s*)`), + `$${delimiter}` + ) // TODO #12071 ) .map( (element) => - element.replace(/(?\s*)$/, `${delimiter}$`) // TODO #12071 #12070 + element.replace(/(?\s*)$/, `${delimiter}$`) // TODO #12071 #12070 adds ' at front when re2 is used ) .join(','); } From 6b803a2db926b4f9a6522a773397e98e697f9413 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Nov 2021 20:28:28 +0100 Subject: [PATCH 198/248] chore(deps): update actions/setup-java action to v2.4.0 (#12883) --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8ff55b8fdf3461..4e82a7201f944f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -70,7 +70,7 @@ jobs: - name: Set up Java ${{ env.JAVA_VERSION }} if: env.SKIP_JAVA_TESTS == 'false' - uses: actions/setup-java@8db439b6b47e5e12312bf036760bbaa6893481ac # renovate: tag=v2.3.1 + uses: actions/setup-java@5f00602cd1b2819185d88dc7a1b1985f598c6705 # renovate: tag=v2.4.0 with: java-version: ${{ env.JAVA_VERSION }} distribution: 'adopt' From d7713a39e9a3edb570eecc070d32198c956bd8f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Nov 2021 09:50:01 +0100 Subject: [PATCH 199/248] chore(deps): update dependency eslint-plugin-jest to v25.3.0 (#12893) 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 4ec7681afa016a..96363f58889d15 100644 --- a/package.json +++ b/package.json @@ -257,7 +257,7 @@ "eslint-config-prettier": "8.3.0", "eslint-formatter-gha": "1.3.0", "eslint-plugin-import": "2.25.3", - "eslint-plugin-jest": "25.2.4", + "eslint-plugin-jest": "25.3.0", "eslint-plugin-promise": "5.1.1", "expect-more-jest": "5.4.0", "glob": "7.2.0", diff --git a/yarn.lock b/yarn.lock index a76eded1a727c1..408bc955862d12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5161,10 +5161,10 @@ eslint-plugin-import@2.25.3: resolve "^1.20.0" tsconfig-paths "^3.11.0" -eslint-plugin-jest@25.2.4: - version "25.2.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.2.4.tgz#bb9f6a0bd1fd524ffb0b8b7a159cd70a58a1a793" - integrity sha512-HRyinpgmEdkVr7pNPaYPHCoGqEzpgk79X8pg/xCeoAdurbyQjntJQ4pTzHl7BiVEBlam/F1Qsn+Dk0HtJO7Aaw== +eslint-plugin-jest@25.3.0: + version "25.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-25.3.0.tgz#6c04bbf13624a75684a05391a825b58e2e291950" + integrity sha512-79WQtuBsTN1S8Y9+7euBYwxIOia/k7ykkl9OCBHL3xuww5ecursHy/D8GCIlvzHVWv85gOkS5Kv6Sh7RxOgK1Q== dependencies: "@typescript-eslint/experimental-utils" "^5.0.0" From 43d35ee7fc3c46b7e1b6ccd96c2572f9a6ecb0d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Nov 2021 14:41:55 +0000 Subject: [PATCH 200/248] chore(deps): update dependency type-fest to v2.6.0 (#12894) 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 96363f58889d15..10ef2ce7885130 100644 --- a/package.json +++ b/package.json @@ -283,7 +283,7 @@ "tmp-promise": "3.0.3", "ts-jest": "27.0.7", "ts-node": "10.4.0", - "type-fest": "2.5.4", + "type-fest": "2.6.0", "typescript": "4.5.2", "unified": "9.2.2" }, diff --git a/yarn.lock b/yarn.lock index 408bc955862d12..bc1f86674ffaf6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10220,10 +10220,10 @@ type-detect@4.0.8, 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.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.5.4.tgz#1613bf29a172ff1c66c29325466af9096fe505b5" - integrity sha512-zyPomVvb6u7+gJ/GPYUH6/nLDNiTtVOqXVUHtxFv5PmZQh6skgfeRtFYzWC01T5KeNWNIx5/0P111rKFLlkFvA== +type-fest@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.6.0.tgz#e9f1e78c5f746ca97ccbb873c59aa16c3bf6b123" + integrity sha512-XN1FDGGtaSDA6CFsCW5iolTQqFsnJ+ZF6JqSz0SqXoh4F8GY0xqUv5RYnTilpmL+sOH8OH4FX8tf9YyAPM2LDA== type-fest@^0.13.1: version "0.13.1" From c42faf0fecbbb555c65d547100fbf04391dc90f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Nov 2021 20:00:36 +0000 Subject: [PATCH 201/248] chore(deps): update node.js to v14.18.2 (#12897) Co-authored-by: Renovate Bot --- .devcontainer/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index cdef203bf5501e..d158ec61a7ee31 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM containerbase/node:v14.18.1@sha256:b720748f7a35570e402a8741f37a5bd54ad485dd6b4aeaff04027ad761b1306d +FROM containerbase/node:14.18.2@sha256:39288a62b456a381b12cf63aa207ec0b356a05410e95ee1b3fbbc2e1933b1ebc # renovate: datasource=npm From aba9a435432c899e19661e4f38db841dccd6239e Mon Sep 17 00:00:00 2001 From: Ankit Soneji Date: Tue, 30 Nov 2021 23:47:16 -0800 Subject: [PATCH 202/248] feat: add git@ support to message github url method (#12899) Co-authored-by: Michael Kriese --- lib/datasource/metadata.spec.ts | 28 +++++++++++++++++++++++++++- lib/datasource/metadata.ts | 11 +++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/lib/datasource/metadata.spec.ts b/lib/datasource/metadata.spec.ts index 81fceb357fe951..fff49ac554366d 100644 --- a/lib/datasource/metadata.spec.ts +++ b/lib/datasource/metadata.spec.ts @@ -1,5 +1,5 @@ import * as datasourceMaven from './maven'; -import { addMetaData } from './metadata'; +import { addMetaData, massageGithubUrl } from './metadata'; import * as datasourceNpm from './npm'; import { PypiDatasource } from './pypi'; import type { ReleaseResult } from './types'; @@ -227,4 +227,30 @@ describe('datasource/metadata', () => { { releaseTimestamp: '2000-01-03T12:34:56.000Z' }, ]); }); + + it('Should massage github git@ url to valid https url', () => { + expect(massageGithubUrl('git@example.com:foo/bar')).toMatch( + 'https://example.com/foo/bar' + ); + }); + it('Should massage github http url to valid https url', () => { + expect(massageGithubUrl('http://example.com/foo/bar')).toMatch( + 'https://example.com/foo/bar' + ); + }); + it('Should massage github http and git url to valid https url', () => { + expect(massageGithubUrl('http+git://example.com/foo/bar')).toMatch( + 'https://example.com/foo/bar' + ); + }); + it('Should massage github ssh git@ url to valid https url', () => { + expect(massageGithubUrl('ssh://git@example.com/foo/bar')).toMatch( + 'https://example.com/foo/bar' + ); + }); + it('Should massage github git url to valid https url', () => { + expect(massageGithubUrl('git://example.com/foo/bar')).toMatch( + 'https://example.com/foo/bar' + ); + }); }); diff --git a/lib/datasource/metadata.ts b/lib/datasource/metadata.ts index d9685047d49807..35cc8d50e2ff81 100644 --- a/lib/datasource/metadata.ts +++ b/lib/datasource/metadata.ts @@ -110,11 +110,18 @@ const manualSourceUrls = { const githubPages = regEx('^https://([^.]+).github.com/([^/]+)$'); const gitPrefix = regEx('^git:/?/?'); -function massageGithubUrl(url: string): string { - return url +export function massageGithubUrl(url: string): string { + let massagedUrl = url; + + if (url.startsWith('git@')) { + massagedUrl = url.replace(':', '/').replace('git@', 'https://'); + } + + return massagedUrl .replace('http:', 'https:') .replace('http+git:', 'https:') .replace('https+git:', 'https:') + .replace('ssh://git@', 'https://') .replace(gitPrefix, 'https://') .replace(githubPages, 'https://github.com/$1/$2') .replace('www.github.com', 'github.com') From 879e59fa196831a352fddfd77dde8d0d3239b721 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 1 Dec 2021 12:12:56 +0300 Subject: [PATCH 203/248] refactor(util/fs): Enable strict null checks (#12904) --- lib/util/fs/index.ts | 6 ++++-- lib/util/fs/proxies.ts | 2 +- tsconfig.strict.json | 4 +++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/util/fs/index.ts b/lib/util/fs/index.ts index eae38c5237599d..114ed425b0c882 100644 --- a/lib/util/fs/index.ts +++ b/lib/util/fs/index.ts @@ -30,11 +30,13 @@ export async function readLocalFile( export async function readLocalFile( fileName: string, encoding?: string -): Promise { +): Promise { const { localDir } = GlobalConfig.get(); const localFileName = join(localDir, fileName); try { - const fileContent = await fs.readFile(localFileName, encoding); + const fileContent = encoding + ? await fs.readFile(localFileName, encoding) + : await fs.readFile(localFileName); return fileContent; } catch (err) { logger.trace({ err }, 'Error reading local file'); diff --git a/lib/util/fs/proxies.ts b/lib/util/fs/proxies.ts index 3abe0f4624a97c..4008ec28950772 100644 --- a/lib/util/fs/proxies.ts +++ b/lib/util/fs/proxies.ts @@ -23,7 +23,7 @@ export function readFile( fileName: string, encoding?: string ): Promise { - return fs.readFile(fileName, encoding); + return encoding ? fs.readFile(fileName, encoding) : fs.readFile(fileName); } // istanbul ignore next diff --git a/tsconfig.strict.json b/tsconfig.strict.json index 9815efcfbd2e80..d2bb5af542a5e3 100644 --- a/tsconfig.strict.json +++ b/tsconfig.strict.json @@ -28,6 +28,7 @@ "lib/util/date.ts", "lib/util/exec/common.ts", "lib/util/exec/types.ts", + "lib/util/fs", "lib/util/git/config.ts", "lib/util/git/types.ts", "lib/util/host-rules.ts", @@ -66,6 +67,7 @@ "lib/datasource/helm/common.ts", "lib/logger/err-serializer.spec.ts", "lib/manager/gradle/shallow/types.ts", - "lib/util/cache/*.spec.ts" + "lib/util/cache/*.spec.ts", + "lib/util/fs/index.spec.ts" ] } From 47f54e7c3ce730cd7ff16d46fd0812f7d9adc281 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 Dec 2021 12:02:00 +0000 Subject: [PATCH 204/248] build(deps): update dependency semantic-release to v18.0.1 (#12908) Co-authored-by: Renovate Bot --- package.json | 2 +- yarn.lock | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 10ef2ce7885130..7d701b8f141e09 100644 --- a/package.json +++ b/package.json @@ -277,7 +277,7 @@ "prettier": "2.4.1", "pretty-quick": "3.1.2", "rimraf": "3.0.2", - "semantic-release": "18.0.0", + "semantic-release": "18.0.1", "shelljs": "0.8.4", "strip-ansi": "6.0.1", "tmp-promise": "3.0.3", diff --git a/yarn.lock b/yarn.lock index bc1f86674ffaf6..b1259514eb7f03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2742,14 +2742,14 @@ dependencies: tslib "2.1.0" -"@semantic-release/commit-analyzer@^9.0.0": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.1.tgz#e9b75a966898cae36493c7eb8158135eb302e270" - integrity sha512-ncNsnrLmiykhgNZUXNvhhAjNN0me7VGIb0X5hu3ogyi5DDPapjGAHdEffO5vi+HX1BFWLRD/Ximx5PjGAKjAqQ== +"@semantic-release/commit-analyzer@^9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" + integrity sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g== dependencies: conventional-changelog-angular "^5.0.0" conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.0.7" + conventional-commits-parser "^3.2.3" debug "^4.0.0" import-from "^4.0.0" lodash "^4.17.4" @@ -4472,7 +4472,7 @@ conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.0.7: +conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== @@ -9388,12 +9388,12 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -semantic-release@18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-18.0.0.tgz#b44b7101ed0525c041b984f74854852be67341cc" - integrity sha512-/Szyhq5DTZCYry/aZqpBbK/kqv10ydn6oiiaYOXtPgDbAIkqidZcQOm+mfYFJ0sBTUaOYCKMlcPMgJycP7jDYQ== +semantic-release@18.0.1: + version "18.0.1" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-18.0.1.tgz#df5ad44b9c2fd67fe3cdbc660b3d1f55298b9f34" + integrity sha512-xTdKCaEnCzHr+Fqyhg/5I8P9pvY9z7WHa8TFCYIwcdPbuzAtQShOTzw3VNPsqBT+Yq1kFyBQFBKBYkGOlqWmfA== dependencies: - "@semantic-release/commit-analyzer" "^9.0.0" + "@semantic-release/commit-analyzer" "^9.0.2" "@semantic-release/error" "^3.0.0" "@semantic-release/github" "^8.0.0" "@semantic-release/npm" "^8.0.0" From dc9b5a0599502dc958ffe99525a4e55bde1b93e5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:49:13 +0100 Subject: [PATCH 205/248] docs: update references to renovate/renovate to v29.29.0 (#12911) 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 842b1a45dce0b8..d8e42211c901f7 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -229,7 +229,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:29.14.1 +FROM renovate/renovate:29.29.0 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From 3a9aeb0f0a0236f653d2a6a21cfdc9942d51fde7 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Wed, 1 Dec 2021 20:17:56 +0545 Subject: [PATCH 206/248] fix: match source url prefixes compares case insensitive (#12896) --- lib/util/package-rules.spec.ts | 21 +++++++++++++++++++++ lib/util/package-rules.ts | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/util/package-rules.spec.ts b/lib/util/package-rules.spec.ts index afc4da063e03ff..39cce745fb9cc8 100644 --- a/lib/util/package-rules.spec.ts +++ b/lib/util/package-rules.spec.ts @@ -733,4 +733,25 @@ describe('util/package-rules', () => { const res = applyPackageRules(config); expect(res.groupSlug).toBe('b'); }); + it('matches matchSourceUrlPrefixes(case-insensitive)', () => { + const config: TestConfig = { + packageRules: [ + { + matchSourceUrlPrefixes: [ + 'https://github.com/foo/bar', + 'https://github.com/Renovatebot/', + ], + x: 1, + }, + ], + }; + const dep = { + depType: 'dependencies', + depName: 'a', + updateType: 'patch' as UpdateType, + sourceUrl: 'https://github.com/renovatebot/Presets', + }; + const res = applyPackageRules({ ...config, ...dep }); + expect(res.x).toBe(1); + }); }); diff --git a/lib/util/package-rules.ts b/lib/util/package-rules.ts index c112ee21ba84af..487738be03a722 100644 --- a/lib/util/package-rules.ts +++ b/lib/util/package-rules.ts @@ -194,8 +194,9 @@ function matchesRule( positiveMatch = true; } if (matchSourceUrlPrefixes.length) { + const upperCaseSourceUrl = sourceUrl?.toUpperCase(); const isMatch = matchSourceUrlPrefixes.some((prefix) => - sourceUrl?.startsWith(prefix) + upperCaseSourceUrl?.startsWith(prefix.toUpperCase()) ); if (!isMatch) { return false; From dd7bb46723ec16c0e4cbcd0dbf56bc8ab692d8c2 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Wed, 1 Dec 2021 15:44:37 +0100 Subject: [PATCH 207/248] docs(dashboard): fix missing syntax highlight (#12910) Co-authored-by: Michael Kriese --- docs/usage/key-concepts/dashboard.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/key-concepts/dashboard.md b/docs/usage/key-concepts/dashboard.md index c9c2b1252008b0..b7ffb534c8e11e 100644 --- a/docs/usage/key-concepts/dashboard.md +++ b/docs/usage/key-concepts/dashboard.md @@ -29,7 +29,7 @@ To turn on the Dashboard manually, add the `:dependencyDashboard` preset to your Or set `dependencyDashboard` to `true`: -``` +```json { "dependencyDashboard": true } From fa01e11d9455f7a7434dc087dc584612902e4261 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 2 Dec 2021 10:28:20 +0100 Subject: [PATCH 208/248] chore: add Maybe option to feature implementation --- .github/ISSUE_TEMPLATE/feature_request.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index fb5b8bdb527ab7..83d409b4d49947 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -24,6 +24,7 @@ body: label: Is this a feature you are interested in implementing yourself? options: - 'Yes' + - 'Maybe' - 'No' validations: required: true From e8e99ef5b74a1117f9dc840dc01a4778a7c459ee Mon Sep 17 00:00:00 2001 From: Sergey Vedmak Date: Thu, 2 Dec 2021 15:37:37 +0300 Subject: [PATCH 209/248] feat(release notes): Show release notes from monorepo (#12543) --- .../pr/__snapshots__/index.spec.ts.snap | 2 +- lib/workers/pr/body/changelogs.ts | 20 +++++++++++ .../__snapshots__/github.spec.ts.snap | 12 +++++++ .../__snapshots__/gitlab.spec.ts.snap | 4 +++ .../__snapshots__/index.spec.ts.snap | 15 +++++++++ .../__snapshots__/release-notes.spec.ts.snap | 24 ++++++++++++++ lib/workers/pr/changelog/github/index.ts | 9 ++--- lib/workers/pr/changelog/gitlab/index.ts | 1 + lib/workers/pr/changelog/hbs-template.ts | 2 +- lib/workers/pr/changelog/release-notes.ts | 22 +++++++++---- lib/workers/pr/changelog/types.ts | 2 ++ lib/workers/pr/index.spec.ts | 33 +++++++++++++++++++ lib/workers/pr/index.ts | 25 ++++++++++---- lib/workers/types.ts | 7 ++-- 14 files changed, 156 insertions(+), 22 deletions(-) diff --git a/lib/workers/pr/__snapshots__/index.spec.ts.snap b/lib/workers/pr/__snapshots__/index.spec.ts.snap index 7ff26d4911972d..296ae0bf1cc9eb 100644 --- a/lib/workers/pr/__snapshots__/index.spec.ts.snap +++ b/lib/workers/pr/__snapshots__/index.spec.ts.snap @@ -137,7 +137,7 @@ Array [ "gitLabIgnoreApprovals": false, "usePlatformAutomerge": false, }, - "prBody": "This PR contains the following updates:\\n\\n| Package | Type | Update | Change |\\n|---|---|---|---|\\n| [dummy](https://dummy.com) ([source](https://github.com/renovateapp/dummy), [changelog](https://github.com/renovateapp/dummy/changelog.md)) | devDependencies | lockFileMaintenance | \`1.0.0\` -> \`1.1.0\` |\\n| a | | | \`zzzzzz\` -> \`aaaaaaa\` |\\n| b | | pin | \`some_old_value\` -> \`some_new_value\` |\\n| c | | | \`\` -> \`\` |\\n| d | | lockFileMaintenance | \`\` -> \`\` |\\n\\nnote 1\\n\\nnote 2\\n\\n:warning: Release Notes retrieval for this PR were skipped because no github.com credentials were available.\\nIf you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes).\\n\\n🔡 If you wish to disable git hash updates, add \`\\":disableDigestUpdates\\"\` to the extends array in your config.\\n\\n🔧 This Pull Request updates lock files to use the latest dependency versions.\\n\\n---\\n\\n### Release Notes\\n\\n
\\nrenovateapp/dummy\\n\\n### [\`v1.1.0\`](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n[Compare Source](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n
\\n\\n
\\nrenovateapp/dummy\\n\\n
\\n\\n---\\n\\n### Configuration\\n\\n📅 **Schedule**: At any time (no schedule defined).\\n\\nđŸšĻ **Automerge**: Disabled by config. Please merge this manually once you are satisfied.\\n\\nâ™ģ **Rebasing**: Never, or you tick the rebase/retry checkbox.\\n\\nđŸ‘ģ **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.\\n\\n---\\n\\n - [ ] If you want to rebase/retry this PR, click this checkbox.\\n\\n---\\n\\nThis PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).", + "prBody": "This PR contains the following updates:\\n\\n| Package | Type | Update | Change |\\n|---|---|---|---|\\n| [dummy](https://dummy.com) ([source](https://github.com/renovateapp/dummy), [changelog](https://github.com/renovateapp/dummy/changelog.md)) | devDependencies | lockFileMaintenance | \`1.0.0\` -> \`1.1.0\` |\\n| a | | | \`zzzzzz\` -> \`aaaaaaa\` |\\n| b | | pin | \`some_old_value\` -> \`some_new_value\` |\\n| c | | | \`\` -> \`\` |\\n| d | | lockFileMaintenance | \`\` -> \`\` |\\n| e | | lockFileMaintenance | \`\` -> \`\` |\\n| f | | lockFileMaintenance | \`\` -> \`\` |\\n\\nnote 1\\n\\nnote 2\\n\\n:warning: Release Notes retrieval for this PR were skipped because no github.com credentials were available.\\nIf you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes).\\n\\n🔡 If you wish to disable git hash updates, add \`\\":disableDigestUpdates\\"\` to the extends array in your config.\\n\\n🔧 This Pull Request updates lock files to use the latest dependency versions.\\n\\n---\\n\\n### Release Notes\\n\\n
\\nrenovateapp/dummy (dummy)\\n\\n### [\`v1.1.0\`](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n[Compare Source](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n
\\n\\n
\\nrenovateapp/dummy (b)\\n\\n### [\`v1.1.0\`](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n[Compare Source](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n
\\n\\n
\\nrenovateapp/dummy (c)\\n\\n
\\n\\n
\\nrenovateapp/dummy (d)\\n\\n
\\n\\n
\\nrenovateapp/dummymonorepo\\n\\n### [\`v1.1.0\`](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n[Compare Source](https://github.com/renovateapp/dummy/compare/v1.0.0...v1.1.0)\\n\\n
\\n\\n---\\n\\n### Configuration\\n\\n📅 **Schedule**: At any time (no schedule defined).\\n\\nđŸšĻ **Automerge**: Disabled by config. Please merge this manually once you are satisfied.\\n\\nâ™ģ **Rebasing**: Never, or you tick the rebase/retry checkbox.\\n\\nđŸ‘ģ **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.\\n\\n---\\n\\n - [ ] If you want to rebase/retry this PR, click this checkbox.\\n\\n---\\n\\nThis PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).", "prTitle": "Update dependency dummy to v1.1.0", "sourceBranch": "renovate/dummy-1.x", "targetBranch": undefined, diff --git a/lib/workers/pr/body/changelogs.ts b/lib/workers/pr/body/changelogs.ts index 73aa37c51d5f77..ad7b3660e5ebe8 100644 --- a/lib/workers/pr/body/changelogs.ts +++ b/lib/workers/pr/body/changelogs.ts @@ -11,6 +11,26 @@ export function getChangelogs(config: BranchConfig): string { if (!config.hasReleaseNotes) { return releaseNotes; } + + const countReleaseNodesByRepoName: Record = {}; + + for (const upgrade of config.upgrades) { + if (upgrade.hasReleaseNotes) { + countReleaseNodesByRepoName[upgrade.repoName] = + (countReleaseNodesByRepoName[upgrade.repoName] || 0) + 1; + } + } + + for (const upgrade of config.upgrades) { + if (upgrade.hasReleaseNotes) { + upgrade.releaseNotesSummaryTitle = `${upgrade.repoName}${ + countReleaseNodesByRepoName[upgrade.repoName] > 1 + ? ` (${upgrade.depName})` + : '' + }`; + } + } + releaseNotes += '\n\n---\n\n' + template.compile(releaseNotesHbs, config, false) + '\n\n'; releaseNotes = releaseNotes.replace(regEx(/### \[`vv/g), '### [`v'); diff --git a/lib/workers/pr/changelog/__snapshots__/github.spec.ts.snap b/lib/workers/pr/changelog/__snapshots__/github.spec.ts.snap index a97678ef16b0b3..dfc462b844d482 100644 --- a/lib/workers/pr/changelog/__snapshots__/github.spec.ts.snap +++ b/lib/workers/pr/changelog/__snapshots__/github.spec.ts.snap @@ -34,6 +34,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -45,6 +46,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -87,6 +89,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github-enterprise.example.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -98,6 +101,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github-enterprise.example.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -140,6 +144,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -151,6 +156,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -193,6 +199,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -204,6 +211,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -246,6 +254,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -257,6 +266,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -299,6 +309,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -310,6 +321,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", diff --git a/lib/workers/pr/changelog/__snapshots__/gitlab.spec.ts.snap b/lib/workers/pr/changelog/__snapshots__/gitlab.spec.ts.snap index d02b4cdfbaf35f..ae886d87da5b3e 100644 --- a/lib/workers/pr/changelog/__snapshots__/gitlab.spec.ts.snap +++ b/lib/workers/pr/changelog/__snapshots__/gitlab.spec.ts.snap @@ -259,6 +259,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://gitlab.com/meno/dropzone/compare/v5.6.0...v5.6.1", }, "version": "5.6.1", @@ -270,6 +271,7 @@ Object { }, "date": "2020-02-13T15:37:00.000Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://gitlab.com/meno/dropzone/compare/v5.5.0...v5.6.0", }, "version": "5.6.0", @@ -281,6 +283,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://gitlab.com/meno/dropzone/compare/v5.4.0...v5.5.0", }, "version": "5.5.0", @@ -292,6 +295,7 @@ Object { }, "date": "2018-08-24T14:23:00.000Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://gitlab.com/meno/dropzone/compare/v5.2.0...v5.4.0", }, "version": "5.4.0", diff --git a/lib/workers/pr/changelog/__snapshots__/index.spec.ts.snap b/lib/workers/pr/changelog/__snapshots__/index.spec.ts.snap index f57ff11e1bfdda..688c33142244d7 100644 --- a/lib/workers/pr/changelog/__snapshots__/index.spec.ts.snap +++ b/lib/workers/pr/changelog/__snapshots__/index.spec.ts.snap @@ -34,6 +34,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -45,6 +46,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -191,6 +193,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github-enterprise.example.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -202,6 +205,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github-enterprise.example.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -392,6 +396,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -403,6 +408,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -593,6 +599,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github-enterprise.example.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -604,6 +611,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github-enterprise.example.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -794,6 +802,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -805,6 +814,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", @@ -840,6 +850,7 @@ Object { }, "date": "2017-12-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/v2.3.0...v2.4.2", }, "version": "2.4.2", @@ -851,6 +862,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/2.2.2...v2.3.0", }, "version": "2.3.0", @@ -862,6 +874,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/1.0.0...2.2.2", }, "version": "2.2.2", @@ -1052,6 +1065,7 @@ Object { }, "date": "2017-10-24T03:20:46.238Z", "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_2.2.2...npm_2.3.0", }, "version": "2.3.0", @@ -1063,6 +1077,7 @@ Object { }, "date": undefined, "releaseNotes": Object { + "notesSourceUrl": "", "url": "https://github.com/chalk/chalk/compare/npm_1.0.0...npm_2.2.2", }, "version": "2.2.2", diff --git a/lib/workers/pr/changelog/__snapshots__/release-notes.spec.ts.snap b/lib/workers/pr/changelog/__snapshots__/release-notes.spec.ts.snap index 4386f098d4e6cd..bd95f1cb5cd9c4 100644 --- a/lib/workers/pr/changelog/__snapshots__/release-notes.spec.ts.snap +++ b/lib/workers/pr/changelog/__snapshots__/release-notes.spec.ts.snap @@ -46,6 +46,7 @@ Array [ "body": undefined, "id": undefined, "name": undefined, + "notesSourceUrl": "https://api.github.com/repos/some/yet-other-repository/releases", "tag": "v1.0.0", "url": undefined, }, @@ -53,6 +54,7 @@ Array [ "body": "some body #123, [#124](https://github.com/some/yet-other-repository/issues/124)", "id": undefined, "name": undefined, + "notesSourceUrl": "https://api.github.com/repos/some/yet-other-repository/releases", "tag": "v1.0.1", "url": undefined, }, @@ -79,12 +81,14 @@ Array [ Object { "body": undefined, "name": undefined, + "notesSourceUrl": "https://gitlab.com/api/v4/projects/some%2fyet-other-repository/releases", "tag": "v1.0.0", "url": "https://gitlab.com/api/v4/projects/some%2fyet-other-repository/releases/v1.0.0", }, Object { "body": undefined, "name": undefined, + "notesSourceUrl": "https://gitlab.com/api/v4/projects/some%2fyet-other-repository/releases", "tag": "v1.0.1", "url": "https://gitlab.com/api/v4/projects/some%2fyet-other-repository/releases/v1.0.1", }, @@ -111,12 +115,14 @@ Array [ Object { "body": undefined, "name": undefined, + "notesSourceUrl": "https://my.custom.domain/api/v4/projects/some%2fyet-other-repository/releases", "tag": "v1.0.0", "url": "https://my.custom.domain/api/v4/projects/some%2fyet-other-repository/releases/v1.0.0", }, Object { "body": undefined, "name": undefined, + "notesSourceUrl": "https://my.custom.domain/api/v4/projects/some%2fyet-other-repository/releases", "tag": "v1.0.1", "url": "https://my.custom.domain/api/v4/projects/some%2fyet-other-repository/releases/v1.0.1", }, @@ -145,6 +151,7 @@ Object { ", "id": undefined, "name": undefined, + "notesSourceUrl": "https://api.github.com/repos/some/other-repository/releases", "tag": "1.0.1", "url": "https://github.com/some/other-repository/releases/1.0.1", } @@ -171,6 +178,7 @@ Object { ", "id": undefined, "name": undefined, + "notesSourceUrl": "https://api.github.com/repos/some/other-repository/releases", "tag": "other@1.0.1", "url": "https://github.com/some/other-repository/releases/other@1.0.1", } @@ -197,6 +205,7 @@ Object { ", "id": undefined, "name": undefined, + "notesSourceUrl": "https://api.github.com/repos/some/other-repository/releases", "tag": "other_v1.0.1", "url": "https://github.com/some/other-repository/releases/other_v1.0.1", } @@ -223,6 +232,7 @@ Object { ", "id": undefined, "name": undefined, + "notesSourceUrl": "https://api.github.com/repos/some/other-repository/releases", "tag": "other-1.0.1", "url": "https://github.com/some/other-repository/releases/other-1.0.1", } @@ -249,6 +259,7 @@ Object { ", "id": undefined, "name": undefined, + "notesSourceUrl": "https://api.github.com/repos/some/other-repository/releases", "tag": "v1.0.1", "url": "https://github.com/some/other-repository/releases/v1.0.1", } @@ -273,6 +284,7 @@ exports[`workers/pr/changelog/release-notes getReleaseNotes() gets release notes Object { "body": "some body #123, [#124](https://gitlab.com/some/yet-other-repository/issues/124)", "name": undefined, + "notesSourceUrl": "https://api.gitlab.com/projects/some%2fother-repository/releases", "tag": "1.0.1", "url": "https://gitlab.com/some/other-repository/tags/1.0.1", } @@ -297,6 +309,7 @@ exports[`workers/pr/changelog/release-notes getReleaseNotes() gets release notes Object { "body": "some body #123, [#124](https://gitlab.com/some/yet-other-repository/issues/124)", "name": undefined, + "notesSourceUrl": "https://api.gitlab.com/projects/some%2fother-repository/releases", "tag": "other-1.0.1", "url": "https://gitlab.com/some/other-repository/tags/other-1.0.1", } @@ -321,6 +334,7 @@ exports[`workers/pr/changelog/release-notes getReleaseNotes() gets release notes Object { "body": "some body #123, [#124](https://gitlab.com/some/yet-other-repository/issues/124)", "name": undefined, + "notesSourceUrl": "https://api.gitlab.com/projects/some%2fother-repository/releases", "tag": "v1.0.1", "url": "https://gitlab.com/some/other-repository/tags/v1.0.1", } @@ -390,6 +404,7 @@ See merge request itentialopensource/adapter-utils!177 *** ", + "notesSourceUrl": "https://gitlab.com/itentialopensource/adapter-utils/blob/master/packages/foo/CHANGELOG.md", "url": "https://gitlab.com/itentialopensource/adapter-utils/blob/master/packages/foo/CHANGELOG.md#4330-05-15-2020", } `; @@ -428,6 +443,7 @@ See merge request itentialopensource/adapter-utils!177 *** ", + "notesSourceUrl": "https://gitlab.com/itentialopensource/adapter-utils/blob/master/CHANGELOG.md", "url": "https://gitlab.com/itentialopensource/adapter-utils/blob/master/CHANGELOG.md#4330-05-15-2020", } `; @@ -493,6 +509,7 @@ Object { - **translations:** fix pluralization in error messages. ([#1557](https://www.github.com/yargs/yargs/issues/1557)) ([94fa38c](https://www.github.com/yargs/yargs/commit/94fa38cbab8d86943e87bf41d368ed56dffa6835)) - **yargs:** correct support of bundled electron apps ([#1554](https://www.github.com/yargs/yargs/issues/1554)) ([a0b61ac](https://www.github.com/yargs/yargs/commit/a0b61ac21e2b554aa73dbf1a66d4a7af94047c2f)) ", + "notesSourceUrl": "https://github.com/yargs/yargs/blob/master/CHANGELOG.md", "url": "https://github.com/yargs/yargs/blob/master/CHANGELOG.md#1520-httpswwwgithubcomyargsyargscomparev1510v1520-2020-03-01", } `; @@ -543,6 +560,7 @@ Object { - address ambiguity between nargs of 1 and requiresArg ([#1572](https://www.github.com/yargs/yargs/issues/1572)) ([a5edc32](https://www.github.com/yargs/yargs/commit/a5edc328ecb3f90d1ba09cfe70a0040f68adf50a)) ", + "notesSourceUrl": "https://github.com/yargs/yargs/blob/master/CHANGELOG.md", "url": "https://github.com/yargs/yargs/blob/master/CHANGELOG.md#1530-httpswwwgithubcomyargsyargscomparev1520v1530-2020-03-08", } `; @@ -647,6 +665,7 @@ Object { "body": "- Fix \`condenseFlow\` output (quote keys for sure, instead of spaces), [#371](https://github.com/nodeca/js-yaml/issues/371), [#370](https://github.com/nodeca/js-yaml/issues/370). - Dump astrals as codepoints instead of surrogate pair, [#368](https://github.com/nodeca/js-yaml/issues/368). ", + "notesSourceUrl": "https://github.com/nodeca/js-yaml/blob/master/packages/foo/CHANGELOG.md", "url": "https://github.com/nodeca/js-yaml/blob/master/packages/foo/CHANGELOG.md#3100--2017-09-10", } `; @@ -712,6 +731,7 @@ Object { [#15085](https://github.com/angular/angular.js/issues/15085), [#15105](https://github.com/angular/angular.js/issues/15105)) ", + "notesSourceUrl": "https://github.com/angular/angular.js/blob/master/CHANGELOG.md", "url": "https://github.com/angular/angular.js/blob/master/CHANGELOG.md#169-fiery-basilisk-2018-02-02", } `; @@ -787,6 +807,7 @@ Object { - Update Polish translation, - Thanks to [@biesiad](https://gitlab.com/biesiad) for the contribution ", + "notesSourceUrl": "https://gitlab.com/gitlab-org/gitter/webapp/blob/master/CHANGELOG.md", "url": "https://gitlab.com/gitlab-org/gitter/webapp/blob/master/CHANGELOG.md#20260---2020-05-18", } `; @@ -1014,6 +1035,7 @@ Object { - \`[docs]\` Update \`expect.anything()\` sample code ([#5007](https://github.com/facebook/jest/pull/5007)) ", + "notesSourceUrl": "https://github.com/facebook/jest/blob/master/CHANGELOG.md", "url": "https://github.com/facebook/jest/blob/master/CHANGELOG.md#jest-2200", } `; @@ -1058,6 +1080,7 @@ Object { "body": "- Fix \`condenseFlow\` output (quote keys for sure, instead of spaces), [#371](https://github.com/nodeca/js-yaml/issues/371), [#370](https://github.com/nodeca/js-yaml/issues/370). - Dump astrals as codepoints instead of surrogate pair, [#368](https://github.com/nodeca/js-yaml/issues/368). ", + "notesSourceUrl": "https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md", "url": "https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md#3100--2017-09-10", } `; @@ -1100,6 +1123,7 @@ Object { - Update Polish translation, - Thanks to [@biesiad](https://gitlab.com/biesiad) for the contribution ", + "notesSourceUrl": "https://my.custom.domain/gitlab-org/gitter/webapp/blob/master/CHANGELOG.md", "url": "https://my.custom.domain/gitlab-org/gitter/webapp/blob/master/CHANGELOG.md#20260---2020-05-18", } `; diff --git a/lib/workers/pr/changelog/github/index.ts b/lib/workers/pr/changelog/github/index.ts index 354e7da27d6308..d73cc320940701 100644 --- a/lib/workers/pr/changelog/github/index.ts +++ b/lib/workers/pr/changelog/github/index.ts @@ -109,12 +109,13 @@ export async function getReleaseList( repository: string ): Promise { logger.trace('github.getReleaseList()'); - const url = `${ensureTrailingSlash( - apiBaseUrl - )}repos/${repository}/releases?per_page=100`; - const res = await http.getJson(url, { paginate: true }); + const url = `${ensureTrailingSlash(apiBaseUrl)}repos/${repository}/releases`; + const res = await http.getJson(`${url}?per_page=100`, { + paginate: true, + }); return res.body.map((release) => ({ url: release.html_url, + notesSourceUrl: url, id: release.id, tag: release.tag_name, name: release.name, diff --git a/lib/workers/pr/changelog/gitlab/index.ts b/lib/workers/pr/changelog/gitlab/index.ts index 3364cffb9e1a44..11217cb77e71ed 100644 --- a/lib/workers/pr/changelog/gitlab/index.ts +++ b/lib/workers/pr/changelog/gitlab/index.ts @@ -109,6 +109,7 @@ export async function getReleaseList( }); return res.body.map((release) => ({ url: `${apiUrl}/${release.tag_name}`, + notesSourceUrl: apiUrl, name: release.name, body: release.description, tag: release.tag_name, diff --git a/lib/workers/pr/changelog/hbs-template.ts b/lib/workers/pr/changelog/hbs-template.ts index 35521b9872be84..5de10f0658edbe 100644 --- a/lib/workers/pr/changelog/hbs-template.ts +++ b/lib/workers/pr/changelog/hbs-template.ts @@ -5,7 +5,7 @@ export default `### Release Notes {{#if upgrade.hasReleaseNotes}}
-{{upgrade.repoName}} +{{upgrade.releaseNotesSummaryTitle}} {{#each upgrade.releases as |release|}} diff --git a/lib/workers/pr/changelog/release-notes.ts b/lib/workers/pr/changelog/release-notes.ts index f365fde6e9a468..3f84a9cade2810 100644 --- a/lib/workers/pr/changelog/release-notes.ts +++ b/lib/workers/pr/changelog/release-notes.ts @@ -207,7 +207,9 @@ export async function getReleaseNotesMdFileInner( export function getReleaseNotesMdFile( project: ChangeLogProject ): Promise { - const cacheKey = `getReleaseNotesMdFile-${project.repository}-${project.apiBaseUrl}`; + const cacheKey = `getReleaseNotesMdFile@v2-${project.repository}${ + project.sourceDirectory ? `-${project.sourceDirectory}` : '' + }-${project.apiBaseUrl}`; const cachedResult = memCache.get>(cacheKey); // istanbul ignore if if (cachedResult !== undefined) { @@ -258,8 +260,11 @@ export async function getReleaseNotesMd( if (word.includes(version) && !isUrl(word)) { logger.trace({ body }, 'Found release notes for v' + version); // TODO: fix url - let url = `${baseUrl}${repository}/blob/master/${changelogFile}#`; - url += title.join('-').replace(regEx(/[^A-Za-z0-9-]/g), ''); // TODO #12071 + const notesSourceUrl = `${baseUrl}${repository}/blob/master/${changelogFile}`; + const url = + notesSourceUrl + + '#' + + title.join('-').replace(regEx(/[^A-Za-z0-9-]/g), ''); // TODO #12071 body = massageBody(body, baseUrl); if (body?.length) { try { @@ -273,6 +278,7 @@ export async function getReleaseNotesMd( return { body, url, + notesSourceUrl, }; } } @@ -320,10 +326,12 @@ export async function addReleaseNotes( return input; } const output: ChangeLogResult = { ...input, versions: [] }; - const repository = input.project.repository; - const cacheNamespace = `changelog-${input.project.type}-notes`; + const { repository, sourceDirectory } = input.project; + const cacheNamespace = `changelog-${input.project.type}-notes@v2`; function getCacheKey(version: string): string { - return `${repository}:${version}`; + return `${repository}:${ + sourceDirectory ? `${sourceDirectory}:` : '' + }${version}`; } for (const v of input.versions) { let releaseNotes: ChangeLogNotes; @@ -338,7 +346,7 @@ export async function addReleaseNotes( } // Small hack to force display of release notes when there is a compare url if (!releaseNotes && v.compare.url) { - releaseNotes = { url: v.compare.url }; + releaseNotes = { url: v.compare.url, notesSourceUrl: '' }; } const cacheMinutes = releaseNotesCacheMinutes(v.date); await packageCache.set( diff --git a/lib/workers/pr/changelog/types.ts b/lib/workers/pr/changelog/types.ts index 48217fc59eab65..8569d7015ca0cd 100644 --- a/lib/workers/pr/changelog/types.ts +++ b/lib/workers/pr/changelog/types.ts @@ -3,6 +3,8 @@ export interface ChangeLogNotes { id?: number; name?: string; tag?: string; + // url to changelog.md file or github/gitlab release api + notesSourceUrl: string; url: string; } diff --git a/lib/workers/pr/index.spec.ts b/lib/workers/pr/index.spec.ts index 2cd7adeec71b26..37aba8e8b15482 100644 --- a/lib/workers/pr/index.spec.ts +++ b/lib/workers/pr/index.spec.ts @@ -282,6 +282,7 @@ describe('workers/pr/index', () => { expect(platform.createPr).toHaveBeenCalled(); }); it('should create group PR', async () => { + const depsWithSameNotesSourceUrl = ['e', 'f']; config.upgrades = config.upgrades.concat([ { depName: 'a', @@ -305,12 +306,44 @@ describe('workers/pr/index', () => { updateType: 'lockFileMaintenance', prBodyNotes: ['{{#if foo}}'], }, + { + depName: depsWithSameNotesSourceUrl[0], + updateType: 'lockFileMaintenance', + prBodyNotes: ['{{#if foo}}'], + }, + { + depName: depsWithSameNotesSourceUrl[1], + updateType: 'lockFileMaintenance', + prBodyNotes: ['{{#if foo}}'], + }, ] as never); config.updateType = 'lockFileMaintenance'; config.recreateClosed = true; config.rebaseWhen = 'never'; for (const upgrade of config.upgrades) { upgrade.logJSON = await changelogHelper.getChangeLogJSON(upgrade); + + if (depsWithSameNotesSourceUrl.includes(upgrade.depName)) { + upgrade.sourceDirectory = `packages/${upgrade.depName}`; + + upgrade.logJSON = { + ...upgrade.logJSON, + project: { + ...upgrade.logJSON.project, + repository: 'renovateapp/dummymonorepo', + }, + versions: upgrade.logJSON.versions.map((V) => { + return { + ...V, + releaseNotes: { + ...V.releaseNotes, + notesSourceUrl: + 'https://github.com/renovateapp/dummymonorepo/blob/changelogfile.md', + }, + }; + }), + }; + } } const { pr } = await prWorker.ensurePr(config); expect(pr).toMatchObject({ displayNumber: 'New Pull Request' }); diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts index c6b78986057b49..8ada26136c7f72 100644 --- a/lib/workers/pr/index.ts +++ b/lib/workers/pr/index.ts @@ -16,7 +16,7 @@ import { regEx } from '../../util/regex'; 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 type { BranchConfig, BranchUpgradeConfig, PrBlockedBy } from '../types'; import { getPrBody } from './body'; import { ChangeLogError } from './changelog/types'; import { codeOwnersForPr } from './code-owners'; @@ -260,6 +260,14 @@ export async function ensurePr( const processedUpgrades: string[] = []; const commitRepos: string[] = []; + function getRepoNameWithSourceDirectory( + upgrade: BranchUpgradeConfig + ): string { + return `${upgrade.repoName}${ + upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : '' + }`; + } + // Get changelog and then generate template strings for (const upgrade of upgrades) { const upgradeKey = `${upgrade.depType}-${upgrade.depName}-${ @@ -282,9 +290,9 @@ export async function ensurePr( if ( upgrade.hasReleaseNotes && upgrade.repoName && - !commitRepos.includes(upgrade.repoName) + !commitRepos.includes(getRepoNameWithSourceDirectory(upgrade)) ) { - commitRepos.push(upgrade.repoName); + commitRepos.push(getRepoNameWithSourceDirectory(upgrade)); if (logJSON.versions) { logJSON.versions.forEach((version) => { const release = { ...version }; @@ -309,17 +317,20 @@ export async function ensurePr( config.hasReleaseNotes = config.upgrades.some((upg) => upg.hasReleaseNotes); - const releaseNoteRepos: string[] = []; + const releaseNotesSources: string[] = []; for (const upgrade of config.upgrades) { - if (upgrade.hasReleaseNotes) { - if (releaseNoteRepos.includes(upgrade.sourceUrl)) { + const notesSourceUrl = + upgrade.releases?.[0]?.releaseNotes?.notesSourceUrl || upgrade.sourceUrl; + + if (upgrade.hasReleaseNotes && notesSourceUrl) { + if (releaseNotesSources.includes(notesSourceUrl)) { logger.debug( { depName: upgrade.depName }, 'Removing duplicate release notes' ); upgrade.hasReleaseNotes = false; } else { - releaseNoteRepos.push(upgrade.sourceUrl); + releaseNotesSources.push(notesSourceUrl); } } } diff --git a/lib/workers/types.ts b/lib/workers/types.ts index 02e0c5a44f4453..eeb658f305d3fd 100644 --- a/lib/workers/types.ts +++ b/lib/workers/types.ts @@ -16,7 +16,9 @@ import type { import type { PlatformPrOptions } from '../platform/types'; import type { File } from '../util/git/types'; import type { MergeConfidence } from '../util/merge-confidence'; -import type { ChangeLogResult } from './pr/changelog/types'; +import type { ChangeLogRelease, ChangeLogResult } from './pr/changelog/types'; + +export type ReleaseWithNotes = Release & Partial; export interface BranchUpgradeConfig extends Merge, @@ -50,7 +52,7 @@ export interface BranchUpgradeConfig prBodyTemplate?: string; prPriority?: number; prTitle?: string; - releases?: Release[]; + releases?: ReleaseWithNotes[]; releaseTimestamp?: string; repoName?: string; minimumConfidence?: MergeConfidence; @@ -61,6 +63,7 @@ export interface BranchUpgradeConfig logJSON?: ChangeLogResult; + hasReleaseNotes?: boolean; homepage?: string; changelogUrl?: string; dependencyUrl?: string; From 8e156efc343237b032b410385153206a0fb0117b Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Thu, 2 Dec 2021 17:04:18 +0100 Subject: [PATCH 210/248] fix(lookup): currentVersion = lockedVersion (#12922) --- .../repository/process/lookup/current.ts | 3 --- .../repository/process/lookup/filter.ts | 1 + .../repository/process/lookup/index.spec.ts | 2 +- .../repository/process/lookup/index.ts | 23 ++++++++----------- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/lib/workers/repository/process/lookup/current.ts b/lib/workers/repository/process/lookup/current.ts index 54731b2c9250c6..0b7113f703988e 100644 --- a/lib/workers/repository/process/lookup/current.ts +++ b/lib/workers/repository/process/lookup/current.ts @@ -11,9 +11,6 @@ export function getCurrentVersion( latestVersion: string, allVersions: string[] ): string | null { - if (lockedVersion && is.undefined(currentValue)) { - return allVersions.pop(); - } // istanbul ignore if if (!is.string(currentValue)) { return null; diff --git a/lib/workers/repository/process/lookup/filter.ts b/lib/workers/repository/process/lookup/filter.ts index 74730e8fff1290..522840e1bec3c1 100644 --- a/lib/workers/repository/process/lookup/filter.ts +++ b/lib/workers/repository/process/lookup/filter.ts @@ -29,6 +29,7 @@ export function filterVersions( } return true; } + // istanbul ignore if: shouldn't happen if (!currentVersion) { return []; } diff --git a/lib/workers/repository/process/lookup/index.spec.ts b/lib/workers/repository/process/lookup/index.spec.ts index 7be15465e6992e..f4e748e7e110f1 100644 --- a/lib/workers/repository/process/lookup/index.spec.ts +++ b/lib/workers/repository/process/lookup/index.spec.ts @@ -351,7 +351,7 @@ describe('workers/repository/process/lookup/index', () => { expect(res.updates).toMatchInlineSnapshot(` Array [ Object { - "bucket": "major", + "bucket": "non-major", "isLockfileUpdate": true, "isRange": true, "newMajor": 1, diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index a7a3d9eb0e22d4..d1417de1903fd1 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -169,7 +169,11 @@ export async function lookupUpdates( const nonDeprecatedVersions = dependency.releases .filter((release) => !release.isDeprecated) .map((release) => release.version); - const currentVersion = + let currentVersion: string; + if (rangeStrategy === 'update-lockfile') { + currentVersion = lockedVersion; + } + currentVersion ??= getCurrentVersion( currentValue, lockedVersion, @@ -209,22 +213,15 @@ export async function lookupUpdates( newMajor: versioning.getMajor(currentVersion), }); } - let filterStart = currentVersion; - if (lockedVersion) { - // istanbul ignore if - if (!versioning.isVersion(lockedVersion)) { - res.skipReason = SkipReason.InvalidVersion; - return res; - } - if (rangeStrategy === 'update-lockfile') { - // Look for versions greater than the current locked version that still satisfy the package.json range - filterStart = lockedVersion; - } + // istanbul ignore if + if (!versioning.isVersion(currentVersion)) { + res.skipReason = SkipReason.InvalidVersion; + return res; } // Filter latest, unstable, etc let filteredReleases = filterVersions( config, - filterStart, + currentVersion, latestVersion, allVersions, versioning From 412272a41e426b0c749fde89f20aa7b7fcc41c0f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 2 Dec 2021 19:42:33 +0000 Subject: [PATCH 211/248] chore(deps): update dependency prettier to v2.5.0 (#12921) 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 7d701b8f141e09..018408c586e73b 100644 --- a/package.json +++ b/package.json @@ -274,7 +274,7 @@ "mockdate": "3.0.5", "nock": "13.2.1", "npm-run-all": "4.1.5", - "prettier": "2.4.1", + "prettier": "2.5.0", "pretty-quick": "3.1.2", "rimraf": "3.0.2", "semantic-release": "18.0.1", diff --git a/yarn.lock b/yarn.lock index b1259514eb7f03..5948183dd37ff2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8821,10 +8821,10 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prettier@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" - integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== +prettier@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.0.tgz#a6370e2d4594e093270419d9cc47f7670488f893" + integrity sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg== pretty-bytes@^5.1.0: version "5.6.0" From 040ada507810bc4c8e874fc8e4f25d34113bdca7 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 3 Dec 2021 08:03:20 +0100 Subject: [PATCH 212/248] feat(composer): update unbound versions (#12930) --- .../__snapshots__/extract.spec.ts.snap | 27 ------------------- lib/manager/composer/extract.ts | 3 --- 2 files changed, 30 deletions(-) diff --git a/lib/manager/composer/__snapshots__/extract.spec.ts.snap b/lib/manager/composer/__snapshots__/extract.spec.ts.snap index 8e7f636a648c7c..1e83084218d8d8 100644 --- a/lib/manager/composer/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/composer/__snapshots__/extract.spec.ts.snap @@ -75,14 +75,12 @@ Object { "datasource": "packagist", "depName": "friendsofsymfony/user-bundle", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "fzaninotto/faker", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "1.0.1", @@ -95,7 +93,6 @@ Object { "datasource": "packagist", "depName": "jms/payment-core-bundle", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "1.1.0", @@ -174,28 +171,24 @@ Object { "datasource": "packagist", "depName": "behat/behat-bundle", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "behat/mink-bundle", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "behat/sahi-client", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "behat/common-contexts", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "^1.10.0", @@ -285,14 +278,12 @@ Object { "datasource": "packagist", "depName": "friendsofsymfony/user-bundle", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "fzaninotto/faker", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "1.0.1", @@ -305,7 +296,6 @@ Object { "datasource": "packagist", "depName": "jms/payment-core-bundle", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "1.1.0", @@ -384,28 +374,24 @@ Object { "datasource": "packagist", "depName": "behat/behat-bundle", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "behat/mink-bundle", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "behat/sahi-client", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "behat/common-contexts", "depType": "require-dev", - "skipReason": "any-version", }, Object { "currentValue": "^1.10.0", @@ -438,7 +424,6 @@ Object { "datasource": "packagist", "depName": "johnpbloch/wordpress", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "^2.0.1", @@ -457,56 +442,48 @@ Object { "datasource": "packagist", "depName": "wpackagist-plugin/tinymce-advanced", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "wpackagist-plugin/acf-content-analysis-for-yoast-seo", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "wpackagist-plugin/duplicate-post", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "wpackagist-plugin/simple-image-sizes", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "wpackagist-plugin/wordpress-seo", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "wpackagist-plugin/timber-library", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "wp-sync-db/wp-sync-db", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "*", "datasource": "packagist", "depName": "asha23/wp-seed-timber", "depType": "require", - "skipReason": "any-version", }, ], "managerData": Object { @@ -526,7 +503,6 @@ Object { "datasource": "packagist", "depName": "aws/aws-sdk-php", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "dev-trunk", @@ -563,7 +539,6 @@ Object { "datasource": "packagist", "depName": "aws/aws-sdk-php", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "^1.10.0", @@ -588,7 +563,6 @@ Object { "datasource": "packagist", "depName": "wpackagist-theme/hueman", "depType": "require", - "skipReason": "any-version", }, ], "registryUrls": Array [ @@ -605,7 +579,6 @@ Object { "datasource": "packagist", "depName": "aws/aws-sdk-php", "depType": "require", - "skipReason": "any-version", }, Object { "currentValue": "dev-trunk", diff --git a/lib/manager/composer/extract.ts b/lib/manager/composer/extract.ts index c6f85f9bbe630e..8eb3c6a4e78d63 100644 --- a/lib/manager/composer/extract.ts +++ b/lib/manager/composer/extract.ts @@ -150,9 +150,6 @@ export async function extractPackageFile( if (!depName.includes('/')) { dep.skipReason = SkipReason.Unsupported; } - if (currentValue === '*') { - dep.skipReason = SkipReason.AnyVersion; - } if (lockParsed) { const lockField = depType === 'require' From b95f608fa1f0837c15b88f727ace3485114f6bdb Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 3 Dec 2021 11:00:49 +0100 Subject: [PATCH 213/248] refactor: remove unused postCommands (#12939) --- lib/util/exec/common.ts | 1 - lib/util/exec/docker/index.spec.ts | 4 +--- lib/util/exec/docker/index.ts | 9 +++------ lib/util/exec/index.spec.ts | 4 +--- 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/lib/util/exec/common.ts b/lib/util/exec/common.ts index f0cb2a9c853624..a55f4f7976ba26 100644 --- a/lib/util/exec/common.ts +++ b/lib/util/exec/common.ts @@ -21,7 +21,6 @@ export interface DockerOptions { envVars?: Opt[]>; cwd?: Opt; preCommands?: DockerExtraCommands; - postCommands?: DockerExtraCommands; } export interface RawExecOptions extends ChildProcessExecOptions { diff --git a/lib/util/exec/docker/index.spec.ts b/lib/util/exec/docker/index.spec.ts index cd666248811ca6..2fa288b3dbcfb1 100644 --- a/lib/util/exec/docker/index.spec.ts +++ b/lib/util/exec/docker/index.spec.ts @@ -209,12 +209,10 @@ describe('util/exec/docker/index', () => { describe('generateDockerCommand', () => { const preCommands = [null, 'foo', undefined]; const commands = ['bar']; - const postCommands = [undefined, 'baz', null]; const envVars = ['FOO', 'BAR']; const image = 'sample_image'; const dockerOptions = { preCommands, - postCommands, image, cwd: '/tmp/foobar', envVars, @@ -228,7 +226,7 @@ describe('util/exec/docker/index', () => { `-e FOO -e BAR ` + `-w "/tmp/foobar" ` + `renovate/${img} ` + - `bash -l -c "foo && bar && baz"`; + `bash -l -c "foo && bar"`; beforeEach(() => { GlobalConfig.set({ dockerUser: 'some-user' }); diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index dc921146acf1d7..5b3590b98cc7a5 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -205,7 +205,6 @@ export async function generateDockerCommand( let image = options.image; const volumes = options.volumes || []; const preCommands = options.preCommands || []; - const postCommands = options.postCommands || []; const { localDir, cacheDir, @@ -256,11 +255,9 @@ export async function generateDockerCommand( await prefetchDockerImage(taggedImage); result.push(taggedImage); - const bashCommand = [ - ...prepareCommands(preCommands), - ...commands, - ...prepareCommands(postCommands), - ].join(' && '); + const bashCommand = [...prepareCommands(preCommands), ...commands].join( + ' && ' + ); result.push(`bash -l -c "${bashCommand.replace(regEx(/"/g), '\\"')}"`); // lgtm [js/incomplete-sanitization] return result.join(' '); diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts index cf0eddd08589ab..8ab962ec62e02c 100644 --- a/lib/util/exec/index.spec.ts +++ b/lib/util/exec/index.spec.ts @@ -465,13 +465,12 @@ describe('util/exec/index', () => { docker: { image, preCommands: ['preCommand1', 'preCommand2', null], - postCommands: ['postCommand1', undefined, 'postCommand2'], }, }, outCmd: [ dockerPullCmd, dockerRemoveCmd, - `docker run --rm --name=${name} --label=renovate_child ${defaultVolumes} -w "${cwd}" ${fullImage} bash -l -c "preCommand1 && preCommand2 && ${inCmd} && postCommand1 && postCommand2"`, + `docker run --rm --name=${name} --label=renovate_child ${defaultVolumes} -w "${cwd}" ${fullImage} bash -l -c "preCommand1 && preCommand2 && ${inCmd}"`, ], outOpts: [ dockerPullOpts, @@ -497,7 +496,6 @@ describe('util/exec/index', () => { docker: { image, preCommands: null, - postCommands: undefined, }, }, outCmd: [ From 508cec1015a1c29cef630007a3f9420530dd68a9 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 3 Dec 2021 12:07:32 +0100 Subject: [PATCH 214/248] refactor: move preCommands out of docker options (#12938) --- lib/manager/bundler/artifacts.ts | 2 +- lib/manager/gradle/deep/index.ts | 2 +- lib/manager/mix/artifacts.ts | 2 +- lib/manager/npm/post-update/lerna.ts | 2 +- lib/manager/npm/post-update/npm.ts | 2 +- lib/manager/npm/post-update/pnpm.ts | 2 +- lib/manager/npm/post-update/yarn.ts | 2 +- lib/manager/pip-compile/artifacts.ts | 6 +++--- lib/manager/pip_requirements/artifacts.ts | 2 +- lib/manager/pipenv/artifacts.ts | 4 +--- lib/manager/poetry/artifacts.ts | 2 +- lib/util/exec/common.ts | 1 - lib/util/exec/docker/index.spec.ts | 13 ++++++++----- lib/util/exec/docker/index.ts | 2 +- lib/util/exec/index.spec.ts | 3 +-- lib/util/exec/index.ts | 8 ++++++-- 16 files changed, 29 insertions(+), 26 deletions(-) diff --git a/lib/manager/bundler/artifacts.ts b/lib/manager/bundler/artifacts.ts index f4d4860d0d3aa7..ee48fb52ad5cc9 100644 --- a/lib/manager/bundler/artifacts.ts +++ b/lib/manager/bundler/artifacts.ts @@ -183,8 +183,8 @@ export async function updateArtifacts( image: 'ruby', tagScheme: 'ruby', tagConstraint: await getRubyConstraint(updateArtifact), - preCommands, }, + preCommands, }; await exec(cmd, execOptions); diff --git a/lib/manager/gradle/deep/index.ts b/lib/manager/gradle/deep/index.ts index 103c893549d317..0a9b318c768280 100644 --- a/lib/manager/gradle/deep/index.ts +++ b/lib/manager/gradle/deep/index.ts @@ -74,8 +74,8 @@ export async function executeGradle( tagConstraint: config.constraints?.java ?? (await getDockerConstraint(gradleRoot)), tagScheme: getJavaVersioning(), - preCommands: await getDockerPreCommands(gradleRoot), }, + preCommands: await getDockerPreCommands(gradleRoot), extraEnv, }; try { diff --git a/lib/manager/mix/artifacts.ts b/lib/manager/mix/artifacts.ts index b8160d722e9499..be162da958d898 100644 --- a/lib/manager/mix/artifacts.ts +++ b/lib/manager/mix/artifacts.ts @@ -75,8 +75,8 @@ export async function updateArtifacts({ cwdFile: packageFileName, docker: { image: 'elixir', - preCommands, }, + preCommands, }; const command = [ 'mix', diff --git a/lib/manager/npm/post-update/lerna.ts b/lib/manager/npm/post-update/lerna.ts index d696d03a8c9fca..058b0ba1f06dcc 100644 --- a/lib/manager/npm/post-update/lerna.ts +++ b/lib/manager/npm/post-update/lerna.ts @@ -83,8 +83,8 @@ export async function generateLockFiles( image: 'node', tagScheme: 'node', tagConstraint, - preCommands, }, + preCommands, }; // istanbul ignore if if (GlobalConfig.get('exposeAllEnv')) { diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index 8adfe5698aa557..801cb6149362af 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -67,8 +67,8 @@ export async function generateLockFile( image: 'node', tagScheme: 'node', tagConstraint, - preCommands, }, + preCommands, }; // istanbul ignore if if (GlobalConfig.get('exposeAllEnv')) { diff --git a/lib/manager/npm/post-update/pnpm.ts b/lib/manager/npm/post-update/pnpm.ts index 1e9c030bc3245e..ffbaef99ca967a 100644 --- a/lib/manager/npm/post-update/pnpm.ts +++ b/lib/manager/npm/post-update/pnpm.ts @@ -46,8 +46,8 @@ export async function generateLockFile( image: 'node', tagScheme: 'node', tagConstraint, - preCommands, }, + preCommands, }; // istanbul ignore if if (GlobalConfig.get('exposeAllEnv')) { diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts index e98cc18911f9c3..a188bd3297f466 100644 --- a/lib/manager/npm/post-update/yarn.ts +++ b/lib/manager/npm/post-update/yarn.ts @@ -148,8 +148,8 @@ export async function generateLockFile( image: 'node', tagScheme: 'node', tagConstraint, - preCommands, }, + preCommands, }; // istanbul ignore if if (GlobalConfig.get('exposeAllEnv')) { diff --git a/lib/manager/pip-compile/artifacts.ts b/lib/manager/pip-compile/artifacts.ts index c5809a31e673ce..e77e7658036a9b 100644 --- a/lib/manager/pip-compile/artifacts.ts +++ b/lib/manager/pip-compile/artifacts.ts @@ -67,10 +67,10 @@ export async function updateArtifacts({ image: 'python', tagConstraint, tagScheme: 'pep440', - preCommands: [ - `pip install --user ${quote(`pip-tools${pipToolsConstraint}`)}`, - ], }, + preCommands: [ + `pip install --user ${quote(`pip-tools${pipToolsConstraint}`)}`, + ], }; logger.debug({ cmd }, 'pip-compile command'); await exec(cmd, execOptions); diff --git a/lib/manager/pip_requirements/artifacts.ts b/lib/manager/pip_requirements/artifacts.ts index 4725a5a938f5d2..b60280871403b4 100644 --- a/lib/manager/pip_requirements/artifacts.ts +++ b/lib/manager/pip_requirements/artifacts.ts @@ -40,8 +40,8 @@ export async function updateArtifacts({ docker: { image: 'python', tagScheme: 'pip_requirements', - preCommands: ['pip install hashin'], }, + preCommands: ['pip install hashin'], }; await exec(cmd, execOptions); const newContent = await readLocalFile(packageFileName, 'utf8'); diff --git a/lib/manager/pipenv/artifacts.ts b/lib/manager/pipenv/artifacts.ts index 92b0f371ddf523..53bffcd1acc4f8 100644 --- a/lib/manager/pipenv/artifacts.ts +++ b/lib/manager/pipenv/artifacts.ts @@ -103,10 +103,8 @@ export async function updateArtifacts({ image: 'python', tagConstraint, tagScheme: 'pep440', - preCommands: [ - `pip install --user ${quote(`pipenv${pipenvConstraint}`)}`, - ], }, + preCommands: [`pip install --user ${quote(`pipenv${pipenvConstraint}`)}`], }; logger.debug({ cmd }, 'pipenv lock command'); await exec(cmd, execOptions); diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts index fc541b4e3109fc..0022848f8d1a21 100644 --- a/lib/manager/poetry/artifacts.ts +++ b/lib/manager/poetry/artifacts.ts @@ -139,8 +139,8 @@ export async function updateArtifacts({ image: 'python', tagConstraint, tagScheme: 'poetry', - preCommands: [poetryInstall], }, + preCommands: [poetryInstall], }; await exec(cmd, execOptions); const newPoetryLockContent = await readLocalFile(lockFileName, 'utf8'); diff --git a/lib/util/exec/common.ts b/lib/util/exec/common.ts index a55f4f7976ba26..8bd56e6c1ddadc 100644 --- a/lib/util/exec/common.ts +++ b/lib/util/exec/common.ts @@ -20,7 +20,6 @@ export interface DockerOptions { volumes?: Opt; envVars?: Opt[]>; cwd?: Opt; - preCommands?: DockerExtraCommands; } export interface RawExecOptions extends ChildProcessExecOptions { diff --git a/lib/util/exec/docker/index.spec.ts b/lib/util/exec/docker/index.spec.ts index 2fa288b3dbcfb1..8b08837dc569e7 100644 --- a/lib/util/exec/docker/index.spec.ts +++ b/lib/util/exec/docker/index.spec.ts @@ -212,7 +212,6 @@ describe('util/exec/docker/index', () => { const envVars = ['FOO', 'BAR']; const image = 'sample_image'; const dockerOptions = { - preCommands, image, cwd: '/tmp/foobar', envVars, @@ -234,7 +233,11 @@ describe('util/exec/docker/index', () => { it('returns executable command', async () => { mockExecAll(exec); - const res = await generateDockerCommand(commands, dockerOptions); + const res = await generateDockerCommand( + commands, + preCommands, + dockerOptions + ); expect(res).toBe(command(image)); }); @@ -245,7 +248,7 @@ describe('util/exec/docker/index', () => { ['/tmp/bar', `/tmp/bar`], ['/tmp/baz', `/home/baz`], ]; - const res = await generateDockerCommand(commands, { + const res = await generateDockerCommand(commands, preCommands, { ...dockerOptions, volumes: [...volumes, ...volumes], }); @@ -259,7 +262,7 @@ describe('util/exec/docker/index', () => { it('handles tag parameter', async () => { mockExecAll(exec); - const res = await generateDockerCommand(commands, { + const res = await generateDockerCommand(commands, preCommands, { ...dockerOptions, tag: '1.2.3', }); @@ -275,7 +278,7 @@ describe('util/exec/docker/index', () => { { version: '2.0.0' }, ], } as never); - const res = await generateDockerCommand(commands, { + const res = await generateDockerCommand(commands, preCommands, { ...dockerOptions, tagScheme: 'npm', tagConstraint: '^1.2.3', diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index 5b3590b98cc7a5..c1d8ef4e83d002 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -199,12 +199,12 @@ export async function removeDanglingContainers(): Promise { export async function generateDockerCommand( commands: string[], + preCommands: string[], options: DockerOptions ): Promise { const { envVars, cwd, tagScheme, tagConstraint } = options; let image = options.image; const volumes = options.volumes || []; - const preCommands = options.preCommands || []; const { localDir, cacheDir, diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts index 8ab962ec62e02c..acd141c8f0961c 100644 --- a/lib/util/exec/index.spec.ts +++ b/lib/util/exec/index.spec.ts @@ -464,8 +464,8 @@ describe('util/exec/index', () => { inOpts: { docker: { image, - preCommands: ['preCommand1', 'preCommand2', null], }, + preCommands: ['preCommand1', 'preCommand2', null], }, outCmd: [ dockerPullCmd, @@ -495,7 +495,6 @@ describe('util/exec/index', () => { inOpts: { docker: { image, - preCommands: null, }, }, outCmd: [ diff --git a/lib/util/exec/index.ts b/lib/util/exec/index.ts index 4e2310bf73a0f1..e76defc33759c3 100644 --- a/lib/util/exec/index.ts +++ b/lib/util/exec/index.ts @@ -5,6 +5,7 @@ import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; import { generateInstallCommands } from './buildpack'; import { + DockerExtraCommands, DockerOptions, ExecResult, Opt, @@ -22,6 +23,7 @@ export interface ExecOptions extends ChildProcessExecOptions { extraEnv?: Opt; docker?: Opt; toolConstraints?: Opt; + preCommands?: DockerExtraCommands; } function getChildEnv({ @@ -74,6 +76,7 @@ function getRawExecOptions(opts: ExecOptions): RawExecOptions { delete execOptions.docker; delete execOptions.cwdFile; delete execOptions.toolConstraints; + delete execOptions.preCommands; const childEnv = getChildEnv(opts); const cwd = getCwd(opts); @@ -125,12 +128,13 @@ async function prepareRawExec( const envVars = dockerEnvVars(extraEnv, childEnv); const cwd = getCwd(opts); const dockerOptions: DockerOptions = { ...docker, cwd, envVars }; - dockerOptions.preCommands = [ + const preCommands = [ ...(await generateInstallCommands(opts.toolConstraints)), - ...(dockerOptions.preCommands || []), + ...(opts.preCommands || []), ]; const dockerCommand = await generateDockerCommand( rawCommands, + preCommands, dockerOptions ); rawCommands = [dockerCommand]; From 9679f83daef952380bf129dd11e70617d2a3138d Mon Sep 17 00:00:00 2001 From: Jeroen Schepens Date: Fri, 3 Dec 2021 12:32:27 +0100 Subject: [PATCH 215/248] fix(terraform): no more 404s with bitbucket-tags in terraform modules (#12931) --- .../__snapshots__/extract.spec.ts.snap | 20 +++++++++---------- lib/manager/terraform/modules.ts | 5 ++++- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap index 2a4c2b8e8b5a3b..c52332ad0de4c6 100644 --- a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap @@ -266,37 +266,37 @@ Object { Object { "currentValue": "v1.0.0", "datasource": "bitbucket-tags", - "depName": "example", + "depName": "hashicorp/example", "depType": "module", - "lookupName": "example", + "lookupName": "hashicorp/example", }, Object { "currentValue": "v1.0.0", "datasource": "bitbucket-tags", - "depName": "example", + "depName": "hashicorp/example", "depType": "module", - "lookupName": "example", + "lookupName": "hashicorp/example", }, Object { "currentValue": "v1.0.0", "datasource": "bitbucket-tags", - "depName": "example", + "depName": "hashicorp/example", "depType": "module", - "lookupName": "example", + "lookupName": "hashicorp/example", }, Object { "currentValue": "v1.0.0", "datasource": "bitbucket-tags", - "depName": "example", + "depName": "hashicorp/example", "depType": "module", - "lookupName": "example", + "lookupName": "hashicorp/example", }, Object { "currentValue": "v1.0.0", "datasource": "bitbucket-tags", - "depName": "example", + "depName": "hashicorp/example", "depType": "module", - "lookupName": "example", + "lookupName": "hashicorp/example", }, Object { "currentValue": ">= 2.7.0", diff --git a/lib/manager/terraform/modules.ts b/lib/manager/terraform/modules.ts index cd387c73930579..594838baf11c3d 100644 --- a/lib/manager/terraform/modules.ts +++ b/lib/manager/terraform/modules.ts @@ -46,7 +46,10 @@ export function analyseTerraformModule(dep: PackageDependency): void { dep.datasource = datasourceGithubTags.id; } else if (bitbucketRefMatch) { dep.depType = 'module'; - dep.depName = bitbucketRefMatch.groups.project; + dep.depName = + bitbucketRefMatch.groups.workspace + + '/' + + bitbucketRefMatch.groups.project; dep.lookupName = dep.depName; dep.currentValue = bitbucketRefMatch.groups.tag; dep.datasource = BitBucketTagsDatasource.id; From 8c588ddbfc4a6deba1521401573422485163db67 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 3 Dec 2021 12:58:39 +0100 Subject: [PATCH 216/248] feat(npm): use install-tool instead of npm global installs (#12624) --- lib/manager/npm/post-update/npm.ts | 26 +++++++------------------- lib/util/exec/buildpack.ts | 6 ++++++ 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index 801cb6149362af..27c8e598722d5b 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -1,5 +1,3 @@ -import { validRange } from 'semver'; -import { quote } from 'shlex'; import { join } from 'upath'; import { GlobalConfig } from '../../../config/global'; import { @@ -8,6 +6,7 @@ import { } from '../../../constants/error-messages'; import { logger } from '../../../logger'; import { ExecOptions, exec } from '../../../util/exec'; +import type { ToolConstraint } from '../../../util/exec/types'; import { move, pathExists, readFile, remove } from '../../../util/fs'; import type { PostUpdateConfig, Upgrade } from '../../types'; import { getNodeConstraint } from './node-version'; @@ -25,23 +24,11 @@ export async function generateLockFile( let lockFile = null; try { - let installNpm = 'npm i -g npm'; - const npmCompatibility = config.constraints?.npm as string; - // istanbul ignore else - if (npmCompatibility) { - // istanbul ignore else - if (validRange(npmCompatibility)) { - installNpm = `npm i -g ${quote(`npm@${npmCompatibility}`)} || true`; - } else { - logger.debug( - { npmCompatibility }, - 'npm compatibility range is not valid - skipping' - ); - } - } else { - logger.debug('No npm compatibility range found - installing npm latest'); - } - const preCommands = [installNpm, 'hash -d npm']; + const npmToolConstraint: ToolConstraint = { + toolName: 'npm', + constraint: config.constraints?.npm, + }; + const preCommands = ['hash -d npm']; const commands = []; let cmdOptions = ''; if (postUpdateOptions?.includes('npmDedupe') || skipInstalls === false) { @@ -63,6 +50,7 @@ export async function generateLockFile( NPM_CONFIG_CACHE: env.NPM_CONFIG_CACHE, npm_config_store: env.npm_config_store, }, + toolConstraints: [npmToolConstraint], docker: { image: 'node', tagScheme: 'node', diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts index be9b28b847b32f..6562b83b0118ae 100644 --- a/lib/util/exec/buildpack.ts +++ b/lib/util/exec/buildpack.ts @@ -3,6 +3,7 @@ import { getPkgReleases } from '../../datasource'; import { logger } from '../../logger'; import * as allVersioning from '../../versioning'; import { id as composerVersioningId } from '../../versioning/composer'; +import { id as npmVersioningId } from '../../versioning/npm'; import { id as semverVersioningId } from '../../versioning/semver'; import type { ToolConfig, ToolConstraint } from './types'; @@ -17,6 +18,11 @@ const allToolConfig: Record = { depName: 'jsonnet-bundler/jsonnet-bundler', versioning: semverVersioningId, }, + npm: { + datasource: 'npm', + depName: 'npm', + versioning: npmVersioningId, + }, }; export async function resolveConstraint( From 05d88a567de0967c59e13aa3abdff2586d1fcf91 Mon Sep 17 00:00:00 2001 From: Oleg Sigida <6461608+osigida@users.noreply.github.com> Date: Fri, 3 Dec 2021 15:31:06 +0100 Subject: [PATCH 217/248] fix: Logs error details on merge failure #12923 (#12940) Co-authored-by: Rhys Arkins --- lib/platform/bitbucket/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts index 1b9803120d8c79..0d5ae4bf0390e2 100644 --- a/lib/platform/bitbucket/index.ts +++ b/lib/platform/bitbucket/index.ts @@ -818,6 +818,8 @@ export async function mergePr({ ); logger.debug('Automerging succeeded'); } catch (err) /* istanbul ignore next */ { + logger.debug({ err }, `PR merge error`); + logger.info({ pr: prNo }, 'PR automerge failed'); return false; } return true; From ded642bf928e2d1b612d2138e9253af974ee4afc Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 3 Dec 2021 16:49:27 +0100 Subject: [PATCH 218/248] refactor(npm): move hash to toolConstraints (#12943) --- lib/manager/npm/post-update/npm.ts | 2 -- lib/util/exec/buildpack.spec.ts | 6 ++++++ lib/util/exec/buildpack.ts | 10 +++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index 27c8e598722d5b..47178f33f4df24 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -28,7 +28,6 @@ export async function generateLockFile( toolName: 'npm', constraint: config.constraints?.npm, }; - const preCommands = ['hash -d npm']; const commands = []; let cmdOptions = ''; if (postUpdateOptions?.includes('npmDedupe') || skipInstalls === false) { @@ -56,7 +55,6 @@ export async function generateLockFile( tagScheme: 'node', tagConstraint, }, - preCommands, }; // istanbul ignore if if (GlobalConfig.get('exposeAllEnv')) { diff --git a/lib/util/exec/buildpack.spec.ts b/lib/util/exec/buildpack.spec.ts index 1a47e3f3c45ac6..365d185e6ea3da 100644 --- a/lib/util/exec/buildpack.spec.ts +++ b/lib/util/exec/buildpack.spec.ts @@ -95,5 +95,11 @@ describe('util/exec/buildpack', () => { ] `); }); + it('hashes npm', async () => { + const toolConstraints: ToolConstraint[] = [{ toolName: 'npm' }]; + const res = await generateInstallCommands(toolConstraints); + expect(res).toHaveLength(2); + expect(res[1]).toBe('hash -d npm'); + }); }); }); diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts index 6562b83b0118ae..7766f427383fac 100644 --- a/lib/util/exec/buildpack.ts +++ b/lib/util/exec/buildpack.ts @@ -70,6 +70,8 @@ export async function resolveConstraint( return latestVersion; } +const hashedTools = ['npm']; + export async function generateInstallCommands( toolConstraints: ToolConstraint[] ): Promise { @@ -77,10 +79,12 @@ export async function generateInstallCommands( if (toolConstraints?.length) { for (const toolConstraint of toolConstraints) { const toolVersion = await resolveConstraint(toolConstraint); - const installCommand = `install-tool ${toolConstraint.toolName} ${quote( - toolVersion - )}`; + const { toolName } = toolConstraint; + const installCommand = `install-tool ${toolName} ${quote(toolVersion)}`; installCommands.push(installCommand); + if (hashedTools.includes(toolName)) { + installCommands.push(`hash -d ${toolName}`); + } } } return installCommands; From 38ae77eafc7cd6f6ae10c51678aecb1ce60589d2 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Fri, 3 Dec 2021 23:13:27 +0100 Subject: [PATCH 219/248] refactor(npm): move hash to allToolConfig (#12946) --- lib/util/exec/buildpack.ts | 5 ++--- lib/util/exec/types.ts | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts index 7766f427383fac..2d90c088fe4f7e 100644 --- a/lib/util/exec/buildpack.ts +++ b/lib/util/exec/buildpack.ts @@ -21,6 +21,7 @@ const allToolConfig: Record = { npm: { datasource: 'npm', depName: 'npm', + hash: true, versioning: npmVersioningId, }, }; @@ -70,8 +71,6 @@ export async function resolveConstraint( return latestVersion; } -const hashedTools = ['npm']; - export async function generateInstallCommands( toolConstraints: ToolConstraint[] ): Promise { @@ -82,7 +81,7 @@ export async function generateInstallCommands( const { toolName } = toolConstraint; const installCommand = `install-tool ${toolName} ${quote(toolVersion)}`; installCommands.push(installCommand); - if (hashedTools.includes(toolName)) { + if (allToolConfig[toolName].hash) { installCommands.push(`hash -d ${toolName}`); } } diff --git a/lib/util/exec/types.ts b/lib/util/exec/types.ts index 65b015083da0f0..bbb92517773b0e 100644 --- a/lib/util/exec/types.ts +++ b/lib/util/exec/types.ts @@ -6,5 +6,6 @@ export interface ToolConstraint { export interface ToolConfig { datasource: string; depName: string; + hash?: boolean; versioning: string; } From 328de3fc271ec4099834182ab4edba4248ccee6f Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 Dec 2021 07:12:27 +0100 Subject: [PATCH 220/248] refactor: exec types (#12942) --- lib/manager/bundler/artifacts.ts | 3 +- lib/manager/cargo/artifacts.ts | 3 +- lib/manager/cocoapods/artifacts.ts | 3 +- lib/manager/composer/artifacts.ts | 4 +-- lib/manager/gomod/artifacts.ts | 3 +- lib/manager/gradle-wrapper/artifacts.ts | 3 +- lib/manager/gradle/deep/index.ts | 3 +- lib/manager/helmv3/artifacts.ts | 3 +- lib/manager/jsonnet-bundler/artifacts.ts | 4 +-- lib/manager/mix/artifacts.ts | 3 +- lib/manager/npm/post-update/lerna.ts | 3 +- lib/manager/npm/post-update/npm.ts | 4 +-- lib/manager/npm/post-update/pnpm.ts | 3 +- lib/manager/npm/post-update/yarn.ts | 3 +- lib/manager/nuget/artifacts.ts | 3 +- lib/manager/pip-compile/artifacts.ts | 3 +- lib/manager/pip_requirements/artifacts.ts | 3 +- lib/manager/pipenv/artifacts.ts | 3 +- lib/manager/poetry/artifacts.ts | 3 +- lib/util/exec/common.ts | 35 ++---------------- lib/util/exec/docker/index.spec.ts | 2 +- lib/util/exec/docker/index.ts | 9 ++--- lib/util/exec/index.spec.ts | 5 +-- lib/util/exec/index.ts | 38 ++++++-------------- lib/util/exec/types.ts | 44 +++++++++++++++++++++++ test/exec-util.ts | 2 +- 26 files changed, 102 insertions(+), 93 deletions(-) diff --git a/lib/manager/bundler/artifacts.ts b/lib/manager/bundler/artifacts.ts index ee48fb52ad5cc9..a69d7389e9b8ba 100644 --- a/lib/manager/bundler/artifacts.ts +++ b/lib/manager/bundler/artifacts.ts @@ -7,7 +7,8 @@ import { import { logger } from '../../logger'; import { HostRule } from '../../types'; import * as memCache from '../../util/cache/memory'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { deleteLocalFile, ensureCacheDir, diff --git a/lib/manager/cargo/artifacts.ts b/lib/manager/cargo/artifacts.ts index 1788c8d18c4e17..0627b9a15c4ea9 100644 --- a/lib/manager/cargo/artifacts.ts +++ b/lib/manager/cargo/artifacts.ts @@ -1,7 +1,8 @@ import { quote } from 'shlex'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { findLocalSiblingOrParent, readLocalFile, diff --git a/lib/manager/cocoapods/artifacts.ts b/lib/manager/cocoapods/artifacts.ts index 7c745cfb5d1d59..ba6adbad6dd483 100644 --- a/lib/manager/cocoapods/artifacts.ts +++ b/lib/manager/cocoapods/artifacts.ts @@ -2,7 +2,8 @@ import { quote } from 'shlex'; import { dirname, join } from 'upath'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { ensureCacheDir, getSiblingFileName, diff --git a/lib/manager/composer/artifacts.ts b/lib/manager/composer/artifacts.ts index 9c9d210f5f3cb0..78cfa37d0f294b 100644 --- a/lib/manager/composer/artifacts.ts +++ b/lib/manager/composer/artifacts.ts @@ -7,8 +7,8 @@ import { } from '../../constants/error-messages'; import * as datasourcePackagist from '../../datasource/packagist'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; -import type { ToolConstraint } from '../../util/exec/types'; +import { exec } from '../../util/exec'; +import type { ExecOptions, ToolConstraint } from '../../util/exec/types'; import { ensureCacheDir, ensureLocalDir, diff --git a/lib/manager/gomod/artifacts.ts b/lib/manager/gomod/artifacts.ts index 54c9043748ea90..dbb2083ef90a72 100644 --- a/lib/manager/gomod/artifacts.ts +++ b/lib/manager/gomod/artifacts.ts @@ -4,7 +4,8 @@ import { GlobalConfig } from '../../config/global'; import { PlatformId } from '../../constants'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { ensureCacheDir, readLocalFile, writeLocalFile } from '../../util/fs'; import { getRepoStatus } from '../../util/git'; import { getGitAuthenticatedEnvironmentVariables } from '../../util/git/auth'; diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts index 3a70a7bf5e1a51..2facba0cf0d694 100644 --- a/lib/manager/gradle-wrapper/artifacts.ts +++ b/lib/manager/gradle-wrapper/artifacts.ts @@ -3,7 +3,8 @@ import { resolve } from 'upath'; import { GlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { readLocalFile, stat, writeLocalFile } from '../../util/fs'; import { getRepoStatus } from '../../util/git'; import type { StatusResult } from '../../util/git/types'; diff --git a/lib/manager/gradle/deep/index.ts b/lib/manager/gradle/deep/index.ts index 0a9b318c768280..b7e50648aed071 100644 --- a/lib/manager/gradle/deep/index.ts +++ b/lib/manager/gradle/deep/index.ts @@ -5,7 +5,8 @@ import { TEMPORARY_ERROR } from '../../../constants/error-messages'; import * as datasourceMaven from '../../../datasource/maven'; import { logger } from '../../../logger'; import { ExternalHostError } from '../../../types/errors/external-host-error'; -import { ExecOptions, exec } from '../../../util/exec'; +import { exec } from '../../../util/exec'; +import type { ExecOptions } from '../../../util/exec/types'; import { readLocalFile, stat } from '../../../util/fs'; import { extraEnv, diff --git a/lib/manager/helmv3/artifacts.ts b/lib/manager/helmv3/artifacts.ts index 62506e4d14d71e..a2c47cb335786f 100644 --- a/lib/manager/helmv3/artifacts.ts +++ b/lib/manager/helmv3/artifacts.ts @@ -1,7 +1,8 @@ import { quote } from 'shlex'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { getSiblingFileName, getSubDirectory, diff --git a/lib/manager/jsonnet-bundler/artifacts.ts b/lib/manager/jsonnet-bundler/artifacts.ts index 5e3bc76056b794..9e19bc5701683f 100644 --- a/lib/manager/jsonnet-bundler/artifacts.ts +++ b/lib/manager/jsonnet-bundler/artifacts.ts @@ -1,8 +1,8 @@ import { quote } from 'shlex'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; -import type { ToolConstraint } from '../../util/exec/types'; +import { exec } from '../../util/exec'; +import type { ExecOptions, ToolConstraint } from '../../util/exec/types'; import { readLocalFile } from '../../util/fs'; import { getRepoStatus } from '../../util/git'; import { regEx } from '../../util/regex'; diff --git a/lib/manager/mix/artifacts.ts b/lib/manager/mix/artifacts.ts index be162da958d898..b53d712d71091e 100644 --- a/lib/manager/mix/artifacts.ts +++ b/lib/manager/mix/artifacts.ts @@ -1,7 +1,8 @@ import { quote } from 'shlex'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { findLocalSiblingOrParent, readLocalFile, diff --git a/lib/manager/npm/post-update/lerna.ts b/lib/manager/npm/post-update/lerna.ts index 058b0ba1f06dcc..7d072d19538a92 100644 --- a/lib/manager/npm/post-update/lerna.ts +++ b/lib/manager/npm/post-update/lerna.ts @@ -3,7 +3,8 @@ import { quote } from 'shlex'; import { GlobalConfig } from '../../../config/global'; import { TEMPORARY_ERROR } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import { ExecOptions, exec } from '../../../util/exec'; +import { exec } from '../../../util/exec'; +import type { ExecOptions } from '../../../util/exec/types'; import type { PackageFile, PostUpdateConfig } from '../../types'; import { getNodeConstraint } from './node-version'; import type { GenerateLockFileResult } from './types'; diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index 47178f33f4df24..2c560f0d851795 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -5,8 +5,8 @@ import { TEMPORARY_ERROR, } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import { ExecOptions, exec } from '../../../util/exec'; -import type { ToolConstraint } from '../../../util/exec/types'; +import { exec } from '../../../util/exec'; +import type { ExecOptions, ToolConstraint } from '../../../util/exec/types'; import { move, pathExists, readFile, remove } from '../../../util/fs'; import type { PostUpdateConfig, Upgrade } from '../../types'; import { getNodeConstraint } from './node-version'; diff --git a/lib/manager/npm/post-update/pnpm.ts b/lib/manager/npm/post-update/pnpm.ts index ffbaef99ca967a..93b6180d911f33 100644 --- a/lib/manager/npm/post-update/pnpm.ts +++ b/lib/manager/npm/post-update/pnpm.ts @@ -4,7 +4,8 @@ import { join } from 'upath'; import { GlobalConfig } from '../../../config/global'; import { TEMPORARY_ERROR } from '../../../constants/error-messages'; import { logger } from '../../../logger'; -import { ExecOptions, exec } from '../../../util/exec'; +import { exec } from '../../../util/exec'; +import type { ExecOptions } from '../../../util/exec/types'; import { readFile, remove } from '../../../util/fs'; import type { PostUpdateConfig, Upgrade } from '../../types'; import { getNodeConstraint } from './node-version'; diff --git a/lib/manager/npm/post-update/yarn.ts b/lib/manager/npm/post-update/yarn.ts index a188bd3297f466..ebbb3588291d8f 100644 --- a/lib/manager/npm/post-update/yarn.ts +++ b/lib/manager/npm/post-update/yarn.ts @@ -10,7 +10,8 @@ import { import { id as npmId } from '../../../datasource/npm'; import { logger } from '../../../logger'; import { ExternalHostError } from '../../../types/errors/external-host-error'; -import { ExecOptions, exec } from '../../../util/exec'; +import { exec } from '../../../util/exec'; +import type { ExecOptions } from '../../../util/exec/types'; import { exists, readFile, remove, writeFile } from '../../../util/fs'; import { regEx } from '../../../util/regex'; import type { PostUpdateConfig, Upgrade } from '../../types'; diff --git a/lib/manager/nuget/artifacts.ts b/lib/manager/nuget/artifacts.ts index acd693db32b64a..a3b6fdeaab8d33 100644 --- a/lib/manager/nuget/artifacts.ts +++ b/lib/manager/nuget/artifacts.ts @@ -3,7 +3,8 @@ import { GlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { id, parseRegistryUrl } from '../../datasource/nuget'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { ensureCacheDir, getSiblingFileName, diff --git a/lib/manager/pip-compile/artifacts.ts b/lib/manager/pip-compile/artifacts.ts index e77e7658036a9b..a2025ace6eb4f8 100644 --- a/lib/manager/pip-compile/artifacts.ts +++ b/lib/manager/pip-compile/artifacts.ts @@ -3,7 +3,8 @@ import { quote } from 'shlex'; import { parse } from 'upath'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { deleteLocalFile, readLocalFile, writeLocalFile } from '../../util/fs'; import { getRepoStatus } from '../../util/git'; import { regEx } from '../../util/regex'; diff --git a/lib/manager/pip_requirements/artifacts.ts b/lib/manager/pip_requirements/artifacts.ts index b60280871403b4..d3ca1878f036ae 100644 --- a/lib/manager/pip_requirements/artifacts.ts +++ b/lib/manager/pip_requirements/artifacts.ts @@ -1,7 +1,8 @@ import is from '@sindresorhus/is'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { readLocalFile } from '../../util/fs'; import { regEx } from '../../util/regex'; import type { UpdateArtifact, UpdateArtifactsResult } from '../types'; diff --git a/lib/manager/pipenv/artifacts.ts b/lib/manager/pipenv/artifacts.ts index 53bffcd1acc4f8..84ead7814ad26b 100644 --- a/lib/manager/pipenv/artifacts.ts +++ b/lib/manager/pipenv/artifacts.ts @@ -1,7 +1,8 @@ import { quote } from 'shlex'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { deleteLocalFile, ensureCacheDir, diff --git a/lib/manager/poetry/artifacts.ts b/lib/manager/poetry/artifacts.ts index 0022848f8d1a21..c6817201f48263 100644 --- a/lib/manager/poetry/artifacts.ts +++ b/lib/manager/poetry/artifacts.ts @@ -3,7 +3,8 @@ import is from '@sindresorhus/is'; import { quote } from 'shlex'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; -import { ExecOptions, exec } from '../../util/exec'; +import { exec } from '../../util/exec'; +import type { ExecOptions } from '../../util/exec/types'; import { deleteLocalFile, getSiblingFileName, diff --git a/lib/util/exec/common.ts b/lib/util/exec/common.ts index 8bd56e6c1ddadc..80e3be2e7dfe04 100644 --- a/lib/util/exec/common.ts +++ b/lib/util/exec/common.ts @@ -1,37 +1,8 @@ -import { - ExecOptions as ChildProcessExecOptions, - exec as cpExec, -} from 'child_process'; +import { exec } from 'child_process'; import { promisify } from 'util'; - -export type Opt = T | null | undefined; - -export type VolumesPair = [string, string]; -export type VolumeOption = Opt; - -export type DockerExtraCommand = Opt; -export type DockerExtraCommands = Opt; - -export interface DockerOptions { - image: string; - tag?: Opt; - tagScheme?: Opt; - tagConstraint?: Opt; - volumes?: Opt; - envVars?: Opt[]>; - cwd?: Opt; -} - -export interface RawExecOptions extends ChildProcessExecOptions { - encoding: string; -} - -export interface ExecResult { - stdout: string; - stderr: string; -} +import type { ExecResult, RawExecOptions } from './types'; export const rawExec: ( cmd: string, opts: RawExecOptions -) => Promise = promisify(cpExec); +) => Promise = promisify(exec); diff --git a/lib/util/exec/docker/index.spec.ts b/lib/util/exec/docker/index.spec.ts index 8b08837dc569e7..5d10725d51ac79 100644 --- a/lib/util/exec/docker/index.spec.ts +++ b/lib/util/exec/docker/index.spec.ts @@ -7,7 +7,7 @@ import { GlobalConfig } from '../../../config/global'; import { SYSTEM_INSUFFICIENT_MEMORY } from '../../../constants/error-messages'; import { getPkgReleases as _getPkgReleases } from '../../../datasource'; import { logger } from '../../../logger'; -import type { VolumeOption } from '../common'; +import type { VolumeOption } from '../types'; import { generateDockerCommand, getDockerTag, diff --git a/lib/util/exec/docker/index.ts b/lib/util/exec/docker/index.ts index c1d8ef4e83d002..bae3aea2f1e9b4 100644 --- a/lib/util/exec/docker/index.ts +++ b/lib/util/exec/docker/index.ts @@ -6,13 +6,8 @@ import { logger } from '../../../logger'; import * as versioning from '../../../versioning'; import { regEx } from '../../regex'; import { ensureTrailingSlash } from '../../url'; -import { - DockerOptions, - Opt, - VolumeOption, - VolumesPair, - rawExec, -} from '../common'; +import { rawExec } from '../common'; +import type { DockerOptions, Opt, VolumeOption, VolumesPair } from '../types'; const prefetchedImages = new Set(); diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts index acd141c8f0961c..a1c7e5a855c98f 100644 --- a/lib/util/exec/index.spec.ts +++ b/lib/util/exec/index.spec.ts @@ -6,9 +6,10 @@ import { envMock } from '../../../test/exec-util'; import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; -import { RawExecOptions, VolumeOption } from './common'; import * as dockerModule from './docker'; -import { ExecOptions, exec } from '.'; +import type { RawExecOptions, VolumeOption } from './types'; +import type { ExecOptions } from './types'; +import { exec } from '.'; const cpExec: jest.Mock = _cpExec as any; diff --git a/lib/util/exec/index.ts b/lib/util/exec/index.ts index e76defc33759c3..a04b9b710a0b63 100644 --- a/lib/util/exec/index.ts +++ b/lib/util/exec/index.ts @@ -1,30 +1,18 @@ -import type { ExecOptions as ChildProcessExecOptions } from 'child_process'; import { dirname, join } from 'upath'; import { GlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { logger } from '../../logger'; import { generateInstallCommands } from './buildpack'; -import { - DockerExtraCommands, +import { rawExec } from './common'; +import { generateDockerCommand, removeDockerContainer } from './docker'; +import { getChildProcessEnv } from './env'; +import type { DockerOptions, + ExecOptions, ExecResult, - Opt, + ExtraEnv, RawExecOptions, - rawExec, -} from './common'; -import { generateDockerCommand, removeDockerContainer } from './docker'; -import { getChildProcessEnv } from './env'; -import type { ToolConstraint } from './types'; - -type ExtraEnv = Record; - -export interface ExecOptions extends ChildProcessExecOptions { - cwdFile?: string; - extraEnv?: Opt; - docker?: Opt; - toolConstraints?: Opt; - preCommands?: DockerExtraCommands; -} +} from './types'; function getChildEnv({ extraEnv = {}, @@ -71,20 +59,14 @@ function getCwd({ cwd, cwdFile }: ExecOptions): string { function getRawExecOptions(opts: ExecOptions): RawExecOptions { const defaultExecutionTimeout = GlobalConfig.get('executionTimeout'); - const execOptions: ExecOptions = { ...opts }; - delete execOptions.extraEnv; - delete execOptions.docker; - delete execOptions.cwdFile; - delete execOptions.toolConstraints; - delete execOptions.preCommands; - const childEnv = getChildEnv(opts); const cwd = getCwd(opts); const rawExecOptions: RawExecOptions = { + cwd, encoding: 'utf-8', - ...execOptions, env: childEnv, - cwd, + maxBuffer: opts.maxBuffer, + timeout: opts.timeout, }; // Set default timeout config.executionTimeout if specified; othrwise to 15 minutes if (!rawExecOptions.timeout) { diff --git a/lib/util/exec/types.ts b/lib/util/exec/types.ts index bbb92517773b0e..39847e8be650d3 100644 --- a/lib/util/exec/types.ts +++ b/lib/util/exec/types.ts @@ -1,3 +1,5 @@ +import type { ExecOptions as ChildProcessExecOptions } from 'child_process'; + export interface ToolConstraint { toolName: string; constraint?: string; @@ -9,3 +11,45 @@ export interface ToolConfig { hash?: boolean; versioning: string; } + +export type Opt = T | null | undefined; + +export type VolumesPair = [string, string]; +export type VolumeOption = Opt; + +export type DockerExtraCommand = Opt; +export type DockerExtraCommands = Opt; + +export interface DockerOptions { + image: string; + tag?: Opt; + tagScheme?: Opt; + tagConstraint?: Opt; + volumes?: Opt; + envVars?: Opt[]>; + cwd?: Opt; +} + +export interface RawExecOptions extends ChildProcessExecOptions { + encoding: string; +} + +export interface ExecResult { + stdout: string; + stderr: string; +} + +export type ExtraEnv = Record; + +export interface ExecOptions { + cwd?: string; + cwdFile?: string; + env?: Opt; + extraEnv?: Opt; + docker?: Opt; + toolConstraints?: Opt; + preCommands?: DockerExtraCommands; + // Following are pass-through to child process + maxBuffer?: number | undefined; + timeout?: number | undefined; +} diff --git a/test/exec-util.ts b/test/exec-util.ts index 0a0b5d8bdb6564..3f6a61d1700931 100644 --- a/test/exec-util.ts +++ b/test/exec-util.ts @@ -2,7 +2,7 @@ import { exec as _exec } from 'child_process'; import is from '@sindresorhus/is'; import traverse from 'traverse'; import { toUnix } from 'upath'; -import { ExecOptions } from '../lib/util/exec'; +import type { ExecOptions } from '../lib/util/exec/types'; import { regEx } from '../lib/util/regex'; type CallOptions = ExecOptions | null | undefined; From fbf93ad6a5ecc5c67528a4814b970956fba4bcab Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 Dec 2021 10:42:20 +0100 Subject: [PATCH 221/248] test: add jest watchPathIgnorePatterns (#12955) --- jest.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/jest.config.ts b/jest.config.ts index 0ddfc41e98d7ea..6f09d687b37ad1 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -34,6 +34,7 @@ const config: InitialOptionsTsJest = { snapshotSerializers: ['/test/newline-snapshot-serializer.ts'], testEnvironment: 'node', testRunner: 'jest-circus/runner', + watchPathIgnorePatterns: ['/.cache/', '/coverage/'], globals: { 'ts-jest': { tsconfig: '/tsconfig.spec.json', From fc3461d5edbc605cea501795dabc1987a17960bd Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sat, 4 Dec 2021 12:11:30 +0100 Subject: [PATCH 222/248] test: drop NODE_ENV from jest command (#12953) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 018408c586e73b..f5f3a3a475becb 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "generate": "run-s generate:*", "generate:imports": "node tools/generate-imports.mjs", "git-check": "node tools/check-git-version.mjs", - "jest": "cross-env NODE_ENV=test LOG_LEVEL=fatal TZ=UTC node --expose-gc node_modules/jest/bin/jest.js --logHeapUsage", + "jest": "cross-env LOG_LEVEL=fatal TZ=UTC node --expose-gc node_modules/jest/bin/jest.js --logHeapUsage", "jest-debug": "cross-env NODE_OPTIONS=--inspect-brk yarn jest --testTimeout=100000000", "jest-silent": "cross-env yarn jest --reporters jest-silent-reporter", "lint": "run-s ls-lint eslint prettier markdown-lint git-check doc-fence-check", From 9b633b6f505e142feba69550d28ba457c00435fd Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 5 Dec 2021 07:20:29 +0100 Subject: [PATCH 223/248] fix(artifactory): assume UTC timezone (#12954) --- lib/datasource/artifactory/index.ts | 2 +- lib/datasource/artifactory/readme.md | 2 ++ package.json | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/datasource/artifactory/index.ts b/lib/datasource/artifactory/index.ts index 3b8054e905eccb..95744dcb28d466 100644 --- a/lib/datasource/artifactory/index.ts +++ b/lib/datasource/artifactory/index.ts @@ -109,6 +109,6 @@ export class ArtifactoryDatasource extends Datasource { } private static parseReleaseTimestamp(rawText: string): string { - return rawText.trim().replace(regEx(/ ?-$/), ''); // TODO #12071 + return rawText.trim().replace(regEx(/ ?-$/), '') + 'Z'; // TODO #12071 } } diff --git a/lib/datasource/artifactory/readme.md b/lib/datasource/artifactory/readme.md index e8e40c6fe46d76..c1c49534bbe1b3 100644 --- a/lib/datasource/artifactory/readme.md +++ b/lib/datasource/artifactory/readme.md @@ -3,3 +3,5 @@ Artifactory is the recommended registry for Conan packages. This datasource returns releases from given custom `registryUrl`(s). The target URL is composed by the `registryUrl` and the `lookupName`, which defaults to `depName` when `lookupName` is not defined. + +The release timestamp is taken from the date in the directory listing, and is assumed to be in UTC time. diff --git a/package.json b/package.json index f5f3a3a475becb..f26b543acc430e 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "generate": "run-s generate:*", "generate:imports": "node tools/generate-imports.mjs", "git-check": "node tools/check-git-version.mjs", - "jest": "cross-env LOG_LEVEL=fatal TZ=UTC node --expose-gc node_modules/jest/bin/jest.js --logHeapUsage", + "jest": "cross-env LOG_LEVEL=fatal node --expose-gc node_modules/jest/bin/jest.js --logHeapUsage", "jest-debug": "cross-env NODE_OPTIONS=--inspect-brk yarn jest --testTimeout=100000000", "jest-silent": "cross-env yarn jest --reporters jest-silent-reporter", "lint": "run-s ls-lint eslint prettier markdown-lint git-check doc-fence-check", From 99749f17f3c594c57d9b6a1142a186b033365439 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Sun, 5 Dec 2021 09:27:21 +0100 Subject: [PATCH 224/248] fix(npm): allow hash -d to fail (#12960) --- lib/manager/npm/post-update/lerna.ts | 2 +- lib/util/exec/buildpack.spec.ts | 2 +- lib/util/exec/buildpack.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/manager/npm/post-update/lerna.ts b/lib/manager/npm/post-update/lerna.ts index 7d072d19538a92..75cbd26cd20cf1 100644 --- a/lib/manager/npm/post-update/lerna.ts +++ b/lib/manager/npm/post-update/lerna.ts @@ -58,7 +58,7 @@ export async function generateLockFiles( if (validRange(npmCompatibility)) { installNpm += `@${quote(npmCompatibility)} || true`; } - preCommands.push(installNpm, 'hash -d npm'); + preCommands.push(installNpm, 'hash -d npm 2>/dev/null || true'); cmdOptions = '--ignore-scripts --no-audit'; if (skipInstalls !== false) { cmdOptions += ' --package-lock-only'; diff --git a/lib/util/exec/buildpack.spec.ts b/lib/util/exec/buildpack.spec.ts index 365d185e6ea3da..6cc85cde5bfcb2 100644 --- a/lib/util/exec/buildpack.spec.ts +++ b/lib/util/exec/buildpack.spec.ts @@ -99,7 +99,7 @@ describe('util/exec/buildpack', () => { const toolConstraints: ToolConstraint[] = [{ toolName: 'npm' }]; const res = await generateInstallCommands(toolConstraints); expect(res).toHaveLength(2); - expect(res[1]).toBe('hash -d npm'); + expect(res[1]).toBe('hash -d npm 2>/dev/null || true'); }); }); }); diff --git a/lib/util/exec/buildpack.ts b/lib/util/exec/buildpack.ts index 2d90c088fe4f7e..75bae696d82c64 100644 --- a/lib/util/exec/buildpack.ts +++ b/lib/util/exec/buildpack.ts @@ -82,7 +82,7 @@ export async function generateInstallCommands( const installCommand = `install-tool ${toolName} ${quote(toolVersion)}`; installCommands.push(installCommand); if (allToolConfig[toolName].hash) { - installCommands.push(`hash -d ${toolName}`); + installCommands.push(`hash -d ${toolName} 2>/dev/null || true`); } } } From 87abbebc1dadef142155b4ee04ffc40e1c44f5ae Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Sun, 5 Dec 2021 19:52:04 +0100 Subject: [PATCH 225/248] fix(terraform): check for missing version provider blocks (#12962) --- lib/manager/terraform/__snapshots__/extract.spec.ts.snap | 1 + lib/manager/terraform/extract.spec.ts | 2 +- lib/manager/terraform/providers.ts | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap index c52332ad0de4c6..af0195c598ad9d 100644 --- a/lib/manager/terraform/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/terraform/__snapshots__/extract.spec.ts.snap @@ -212,6 +212,7 @@ Object { "depType": "provider", "lockedVersion": undefined, "lookupName": "hashicorp/helm", + "skipReason": "no-version", }, Object { "currentValue": "V1.9", diff --git a/lib/manager/terraform/extract.spec.ts b/lib/manager/terraform/extract.spec.ts index 1d4afed611462c..745489c41a4eb4 100644 --- a/lib/manager/terraform/extract.spec.ts +++ b/lib/manager/terraform/extract.spec.ts @@ -36,7 +36,7 @@ describe('manager/terraform/extract', () => { const res = await extractPackageFile(tf1, '1.tf', {}); expect(res).toMatchSnapshot(); expect(res.deps).toHaveLength(51); - expect(res.deps.filter((dep) => dep.skipReason)).toHaveLength(8); + expect(res.deps.filter((dep) => dep.skipReason)).toHaveLength(9); }); it('returns null if only local deps', async () => { diff --git a/lib/manager/terraform/providers.ts b/lib/manager/terraform/providers.ts index f82e1a05faebcc..e742b8837cbe35 100644 --- a/lib/manager/terraform/providers.ts +++ b/lib/manager/terraform/providers.ts @@ -99,4 +99,8 @@ export function analyzeTerraformProvider( massageProviderLookupName(dep); dep.lockedVersion = getLockedVersion(dep, locks); + + if (!dep.currentValue) { + dep.skipReason = SkipReason.NoVersion; + } } From 536523327a32684ae98d16beb97280e97829f034 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 04:01:02 +0000 Subject: [PATCH 226/248] docs: update references to renovate/renovate to v29.32.4 (#12964) 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 d8e42211c901f7..7185abfdd9521c 100644 --- a/docs/usage/docker.md +++ b/docs/usage/docker.md @@ -229,7 +229,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:29.29.0 +FROM renovate/renovate:29.32.4 # Include the "Docker tip" which you can find here https://cloud.google.com/sdk/docs/install # under "Installation" for "Debian/Ubuntu" RUN ... From 3f0ec61b71b2a179eb5bb28ad8c9b7d70fe96940 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 06:27:16 +0100 Subject: [PATCH 227/248] chore(deps): lock file maintenance (#12965) --- yarn.lock | 1492 +++++++++++++++++++++++++++++------------------------ 1 file changed, 805 insertions(+), 687 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5948183dd37ff2..3f84d37ca9fd13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,9 +17,9 @@ tunnel "0.0.6" "@arcanis/slice-ansi@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@arcanis/slice-ansi/-/slice-ansi-1.0.2.tgz#35331e41a1062e3c53c01ad2ec1555c5c1959d8f" - integrity sha512-lDL63z0W/L/WTgqrwVOuNyMAsTv+pvjybd21z9SWdStmQoXT59E/iVWwat3gYjcdTNBf6oHAMoyFm8dtjpXEYw== + version "1.1.1" + resolved "https://registry.yarnpkg.com/@arcanis/slice-ansi/-/slice-ansi-1.1.1.tgz#0ee328a68996ca45854450033a3d161421dc4f55" + integrity sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w== dependencies: grapheme-splitter "^1.0.4" @@ -2183,13 +2183,13 @@ "@cspotcode/source-map-consumer" "0.8.0" "@eslint/eslintrc@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.4.tgz#dfe0ff7ba270848d10c5add0715e04964c034b31" - integrity sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.0.0" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" @@ -2221,7 +2221,7 @@ resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== -"@isaacs/string-locale-compare@^1.0.1", "@isaacs/string-locale-compare@^1.1.0": +"@isaacs/string-locale-compare@*", "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== @@ -2242,75 +2242,75 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.3.1.tgz#e8ea3a475d3f8162f23d69efbfaa9cbe486bee93" - integrity sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw== +"@jest/console@^27.3.1", "@jest/console@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.2.tgz#7a95612d38c007ddb528ee446fe5e5e785e685ce" + integrity sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.3.1" - jest-util "^27.3.1" + jest-message-util "^27.4.2" + jest-util "^27.4.2" slash "^3.0.0" -"@jest/core@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.3.1.tgz#04992ef1b58b17c459afb87ab56d81e63d386925" - integrity sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg== +"@jest/core@^27.3.1", "@jest/core@^27.4.3": + version "27.4.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.3.tgz#9b9b34f4e6429a633085f476402aa2e3ce707877" + integrity sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ== dependencies: - "@jest/console" "^27.3.1" - "@jest/reporters" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/console" "^27.4.2" + "@jest/reporters" "^27.4.2" + "@jest/test-result" "^27.4.2" + "@jest/transform" "^27.4.2" + "@jest/types" "^27.4.2" "@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.3.0" - jest-config "^27.3.1" - jest-haste-map "^27.3.1" - jest-message-util "^27.3.1" - jest-regex-util "^27.0.6" - jest-resolve "^27.3.1" - jest-resolve-dependencies "^27.3.1" - jest-runner "^27.3.1" - jest-runtime "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" - jest-watcher "^27.3.1" + jest-changed-files "^27.4.2" + jest-config "^27.4.3" + jest-haste-map "^27.4.2" + jest-message-util "^27.4.2" + jest-regex-util "^27.4.0" + jest-resolve "^27.4.2" + jest-resolve-dependencies "^27.4.2" + jest-runner "^27.4.3" + jest-runtime "^27.4.2" + jest-snapshot "^27.4.2" + jest-util "^27.4.2" + jest-validate "^27.4.2" + jest-watcher "^27.4.2" micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.3.1.tgz#2182defbce8d385fd51c5e7c7050f510bd4c86b1" - integrity sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw== +"@jest/environment@^27.3.1", "@jest/environment@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.2.tgz#03efabce528dbb09bffd3ec7e39bb0f3f7475cc2" + integrity sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw== dependencies: - "@jest/fake-timers" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/fake-timers" "^27.4.2" + "@jest/types" "^27.4.2" "@types/node" "*" - jest-mock "^27.3.0" + jest-mock "^27.4.2" -"@jest/fake-timers@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.3.1.tgz#1fad860ee9b13034762cdb94266e95609dfce641" - integrity sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA== +"@jest/fake-timers@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.2.tgz#d217f86c3ba2027bf29e0b731fd0cb761a72d093" + integrity sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^27.3.1" - jest-mock "^27.3.0" - jest-util "^27.3.1" + jest-message-util "^27.4.2" + jest-mock "^27.4.2" + jest-util "^27.4.2" -"@jest/globals@27.3.1", "@jest/globals@^27.3.1": +"@jest/globals@27.3.1": version "27.3.1" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.3.1.tgz#ce1dfb03d379237a9da6c1b99ecfaca1922a5f9e" integrity sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg== @@ -2319,7 +2319,16 @@ "@jest/types" "^27.2.5" expect "^27.3.1" -"@jest/reporters@27.3.1", "@jest/reporters@^27.3.1": +"@jest/globals@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.2.tgz#56a402c5ebf22eba1d34e900772147f5126ea2d8" + integrity sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew== + dependencies: + "@jest/environment" "^27.4.2" + "@jest/types" "^27.4.2" + expect "^27.4.2" + +"@jest/reporters@27.3.1": version "27.3.1" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.3.1.tgz#28b5c1f5789481e23788048fa822ed15486430b9" integrity sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w== @@ -2350,16 +2359,47 @@ terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" -"@jest/source-map@^27.0.6": - version "27.0.6" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.0.6.tgz#be9e9b93565d49b0548b86e232092491fb60551f" - integrity sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g== +"@jest/reporters@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.2.tgz#d3860c5d3f668fa1326ab2bf5989f774e5c03f04" + integrity sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^27.4.2" + "@jest/test-result" "^27.4.2" + "@jest/transform" "^27.4.2" + "@jest/types" "^27.4.2" + "@types/node" "*" + 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.4.2" + jest-resolve "^27.4.2" + jest-util "^27.4.2" + jest-worker "^27.4.2" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^4.0.1" + terminal-link "^2.0.0" + v8-to-istanbul "^8.1.0" + +"@jest/source-map@^27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.4.0.tgz#2f0385d0d884fb3e2554e8f71f8fa957af9a74b6" + integrity sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ== dependencies: callsites "^3.0.0" graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@27.3.1", "@jest/test-result@^27.3.1": +"@jest/test-result@27.3.1": version "27.3.1" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.3.1.tgz#89adee8b771877c69b3b8d59f52f29dccc300194" integrity sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg== @@ -2369,31 +2409,41 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz#4b3bde2dbb05ee74afdae608cf0768e3354683b1" - integrity sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA== +"@jest/test-result@^27.3.1", "@jest/test-result@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.2.tgz#05fd4a5466ec502f3eae0b39dff2b93ea4d5d9ec" + integrity sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA== dependencies: - "@jest/test-result" "^27.3.1" + "@jest/console" "^27.4.2" + "@jest/types" "^27.4.2" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.2.tgz#94bb7e5412d59ae2a8a4b8f9925bb16b6dc82b4c" + integrity sha512-HmHp5mlh9f9GyNej5yCS1JZIFfUGnP9+jEOH5zoq5EmsuZeYD+dGULqyvGDPtuzzbyAFJ6R4+z4SS0VvnFwwGQ== + dependencies: + "@jest/test-result" "^27.4.2" graceful-fs "^4.2.4" - jest-haste-map "^27.3.1" - jest-runtime "^27.3.1" + jest-haste-map "^27.4.2" + jest-runtime "^27.4.2" -"@jest/transform@^27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.3.1.tgz#ff80eafbeabe811e9025e4b6f452126718455220" - integrity sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ== +"@jest/transform@^27.3.1", "@jest/transform@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.2.tgz#459885e96de2e21fc68b8b371e90aa653966dd0d" + integrity sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" 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.3.1" - jest-regex-util "^27.0.6" - jest-util "^27.3.1" + jest-haste-map "^27.4.2" + jest-regex-util "^27.4.0" + jest-util "^27.4.2" micromatch "^4.0.4" pirates "^4.0.1" slash "^3.0.0" @@ -2411,10 +2461,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.0.6", "@jest/types@^27.2.5": - version "27.2.5" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.2.5.tgz#420765c052605e75686982d24b061b4cbba22132" - integrity sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ== +"@jest/types@^27.0.6", "@jest/types@^27.2.5", "@jest/types@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" + integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -2460,21 +2510,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^2.3.0", "@npmcli/arborist@^2.5.0", "@npmcli/arborist@^2.9.0": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-2.10.0.tgz#424c2d73a7ae59c960b0cc7f74fed043e4316c2c" - integrity sha512-CLnD+zXG9oijEEzViimz8fbOoFVb7hoypiaf7p6giJhvYtrxLAyY3cZAMPIFQvsG731+02eMDp3LqVBNo7BaZA== +"@npmcli/arborist@*", "@npmcli/arborist@^4.0.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.1.0.tgz#436464664bcfb3b180963383c410ff9180351c59" + integrity sha512-bkaOqCuTUtpVOe1vaAP7TUihu64wIbnSDpsbqBJUsGFTLYXbjKwi6xj8Zx5cfHkM3nqyeEEbPYlGkt0TXjKrUg== dependencies: - "@isaacs/string-locale-compare" "^1.0.1" + "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^1.0.2" - "@npmcli/metavuln-calculator" "^1.1.0" + "@npmcli/map-workspaces" "^2.0.0" + "@npmcli/metavuln-calculator" "^2.0.0" "@npmcli/move-file" "^1.1.0" "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^1.0.1" + "@npmcli/node-gyp" "^1.0.3" "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^1.8.2" - bin-links "^2.2.1" + "@npmcli/run-script" "^2.0.0" + bin-links "^2.3.0" cacache "^15.0.3" common-ancestor-path "^1.0.1" json-parse-even-better-errors "^2.3.1" @@ -2485,7 +2535,7 @@ npm-package-arg "^8.1.5" npm-pick-manifest "^6.1.0" npm-registry-fetch "^11.0.0" - pacote "^11.3.5" + pacote "^12.0.2" parse-conflict-json "^1.1.1" proc-log "^1.0.0" promise-all-reject-late "^1.0.0" @@ -2498,15 +2548,15 @@ treeverse "^1.0.4" walk-up-path "^1.0.0" -"@npmcli/ci-detect@^1.2.0", "@npmcli/ci-detect@^1.3.0": +"@npmcli/ci-detect@*", "@npmcli/ci-detect@^1.3.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz#18478bbaa900c37bfbd8a2006a6262c62e8b0fe1" integrity sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q== -"@npmcli/config@^2.3.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.1.tgz#41d80ce272831461b5cb158afa110525d4be0fed" - integrity sha512-F/8R/Zqun8682TgaCILUNoaVfd1LVaYZ/jcVt9KWzfKpzcPus1zEApAl54PqVqVJbNq6f01QTDQHD6L/n56BXw== +"@npmcli/config@*": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-2.3.2.tgz#6027efc132fcc809abef749c2f2e13dc4dcd6e0b" + integrity sha512-2/9dj143BFgQR8qxJbYptd8k+4+Po2uHYq3H6498ynZcRu4LrsDlngov5HGrvo2+f0pe0fBJwDEP2rRtaW8bkw== dependencies: ini "^2.0.0" mkdirp-infer-owner "^2.0.0" @@ -2551,23 +2601,24 @@ npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -"@npmcli/map-workspaces@^1.0.2", "@npmcli/map-workspaces@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-1.0.4.tgz#915708b55afa25e20bc2c14a766c124c2c5d4cab" - integrity sha512-wVR8QxhyXsFcD/cORtJwGQodeeaDf0OxcHie8ema4VgFeqwYkFsDPnSrIRSytX8xR6nKPAH89WnwTcaU608b/Q== +"@npmcli/map-workspaces@*", "@npmcli/map-workspaces@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.0.tgz#e342efbbdd0dad1bba5d7723b674ca668bf8ac5a" + integrity sha512-QBJfpCY1NOAkkW3lFfru9VTdqvMB2TN0/vrevl5xBCv5Fi0XDVcA6rqqSau4Ysi4Iw3fBzyXV7hzyTBDfadf7g== dependencies: "@npmcli/name-from-folder" "^1.0.1" glob "^7.1.6" minimatch "^3.0.4" read-package-json-fast "^2.0.1" -"@npmcli/metavuln-calculator@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-1.1.1.tgz#2f95ff3c6d88b366dd70de1c3f304267c631b458" - integrity sha512-9xe+ZZ1iGVaUovBVFI9h3qW+UuECUzhvZPxK9RaEA2mjU26o5D0JloGYWwLYvQELJNmBdQB6rrpuN8jni6LwzQ== +"@npmcli/metavuln-calculator@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" + integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== dependencies: cacache "^15.0.5" - pacote "^11.1.11" + json-parse-even-better-errors "^2.3.1" + pacote "^12.0.0" semver "^7.3.2" "@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": @@ -2583,12 +2634,12 @@ resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== -"@npmcli/node-gyp@^1.0.1", "@npmcli/node-gyp@^1.0.2": +"@npmcli/node-gyp@^1.0.2", "@npmcli/node-gyp@^1.0.3": version "1.0.3" resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== -"@npmcli/package-json@^1.0.1": +"@npmcli/package-json@*", "@npmcli/package-json@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== @@ -2602,7 +2653,17 @@ dependencies: infer-owner "^1.0.4" -"@npmcli/run-script@^1.8.2", "@npmcli/run-script@^1.8.3", "@npmcli/run-script@^1.8.4", "@npmcli/run-script@^1.8.6": +"@npmcli/run-script@*", "@npmcli/run-script@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" + integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== + dependencies: + "@npmcli/node-gyp" "^1.0.2" + "@npmcli/promise-spawn" "^1.3.2" + node-gyp "^8.2.0" + read-package-json-fast "^2.0.1" + +"@npmcli/run-script@^1.8.2": version "1.8.6" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-1.8.6.tgz#18314802a6660b0d4baa4c3afe7f1ad39d8c28b7" integrity sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g== @@ -2715,6 +2776,7 @@ "@renovate/eslint-plugin@https://github.com/renovatebot/eslint-plugin#v0.0.4": version "0.0.4" + uid "0c444386e79d6145901212507521b8a0a48af000" resolved "https://github.com/renovatebot/eslint-plugin#0c444386e79d6145901212507521b8a0a48af000" "@renovate/pep440@1.0.0": @@ -2819,14 +2881,14 @@ tempy "^1.0.0" "@semantic-release/release-notes-generator@^10.0.0": - version "10.0.2" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.2.tgz#944068c6ba0cf5d7779bdfeb537db29a4d295622" - integrity sha512-I4eavIcDan8fNQHskZ2cbWkFMimvgxNkqR2UfuYNwYBgswEl3SJsN8XMf9gZWObt6nXDc2QfDwhjy8DjTZqS3w== + version "10.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz#85f7ca78bfa6b01fb5fda0ac48112855d69171dc" + integrity sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w== dependencies: conventional-changelog-angular "^5.0.0" conventional-changelog-writer "^5.0.0" conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.0.0" + conventional-commits-parser "^3.2.3" debug "^4.0.0" get-stream "^6.0.0" import-from "^4.0.0" @@ -3246,9 +3308,9 @@ integrity sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA== "@types/node@*": - version "16.11.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.9.tgz#879be3ad7af29f4c1a5c433421bf99fab7047185" - integrity sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A== + version "16.11.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.11.tgz#6ea7342dfb379ea1210835bada87b3c512120234" + integrity sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw== "@types/node@14.17.34": version "14.17.34" @@ -3404,7 +3466,7 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.4.0", "@typescript-eslint/experimental-utils@^5.0.0": +"@typescript-eslint/experimental-utils@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz#238a7418d2da3b24874ba35385eb21cc61d2a65e" integrity sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg== @@ -3416,6 +3478,18 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz#3fe2514dc2f3cd95562206e4058435ea51df609e" + integrity sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.5.0" + "@typescript-eslint/types" "5.5.0" + "@typescript-eslint/typescript-estree" "5.5.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/parser@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.4.0.tgz#3aa83ce349d66e39b84151f6d5464928044ca9e3" @@ -3434,11 +3508,24 @@ "@typescript-eslint/types" "5.4.0" "@typescript-eslint/visitor-keys" "5.4.0" +"@typescript-eslint/scope-manager@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz#2b9f3672fa6cddcb4160e7e8b49ef1fd00f83c09" + integrity sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg== + dependencies: + "@typescript-eslint/types" "5.5.0" + "@typescript-eslint/visitor-keys" "5.5.0" + "@typescript-eslint/types@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.4.0.tgz#b1c130f4b381b77bec19696c6e3366f9781ce8f2" integrity sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA== +"@typescript-eslint/types@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.5.0.tgz#fee61ae510e84ed950a53937a2b443e078107003" + integrity sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg== + "@typescript-eslint/typescript-estree@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz#fe524fb308973c68ebeb7428f3b64499a6ba5fc0" @@ -3452,6 +3539,19 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz#12f422698c1636bd0206086bbec9844c54625ebc" + integrity sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ== + dependencies: + "@typescript-eslint/types" "5.5.0" + "@typescript-eslint/visitor-keys" "5.5.0" + debug "^4.3.2" + globby "^11.0.4" + is-glob "^4.0.3" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz#09bc28efd3621f292fe88c86eef3bf4893364c8c" @@ -3460,6 +3560,14 @@ "@typescript-eslint/types" "5.4.0" eslint-visitor-keys "^3.0.0" +"@typescript-eslint/visitor-keys@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz#4787586897b61f26068a3db5c50b3f5d254f9083" + integrity sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw== + dependencies: + "@typescript-eslint/types" "5.5.0" + eslint-visitor-keys "^3.0.0" + "@yarnpkg/core@2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@yarnpkg/core/-/core-2.4.0.tgz#b5d8cc7ee2ddb022816c7afa3f83c3ee3d317c80" @@ -3565,7 +3673,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -abbrev@1, abbrev@~1.1.1: +abbrev@*, abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== @@ -3654,11 +3762,6 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3683,12 +3786,12 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansicolors@~0.3.2: +ansicolors@*, ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= -ansistyles@~0.1.3: +ansistyles@*: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= @@ -3716,7 +3819,7 @@ aproba@^1.0.3: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -archy@~1.0.0: +archy@*: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= @@ -3868,16 +3971,16 @@ azure-devops-node-api@11.1.0: tunnel "0.0.6" typed-rest-client "^1.8.4" -babel-jest@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.3.1.tgz#0636a3404c68e07001e434ac4956d82da8a80022" - integrity sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ== +babel-jest@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.2.tgz#6edf80971045cfd44f3f10b6eda6007d95f62742" + integrity sha512-MADrjb3KBO2eyZCAc6QaJg6RT5u+6oEdDyHO5HEalnpwQ6LrhTsQF2Kj1Wnz2t6UPXIXPk18dSXXOT0wF5yTxA== dependencies: - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/transform" "^27.4.2" + "@jest/types" "^27.4.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^27.2.0" + babel-preset-jest "^27.4.0" chalk "^4.0.0" graceful-fs "^4.2.4" slash "^3.0.0" @@ -3893,10 +3996,10 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -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== +babel-plugin-jest-hoist@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz#d7831fc0f93573788d80dee7e682482da4c730d6" + integrity sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -3921,12 +4024,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.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== +babel-preset-jest@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz#70d0e676a282ccb200fbabd7f415db5fdf393bca" + integrity sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg== dependencies: - babel-plugin-jest-hoist "^27.2.0" + babel-plugin-jest-hoist "^27.4.0" babel-preset-current-node-syntax "^1.0.0" backslash@^0.2.0: @@ -3961,7 +4064,7 @@ before-after-hook@^2.2.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== -bin-links@^2.2.1: +bin-links@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-2.3.0.tgz#1ff241c86d2c29b24ae52f49544db5d78a4eb967" integrity sha512-JzrOLHLwX2zMqKdyYZjkDgQGT+kHDkIhv2/IK2lJ00qLxV4TmFoHi8drDBb6H5Zrz1YfgHkai4e2MGPqnoUhqA== @@ -4095,7 +4198,7 @@ bunyan@1.8.15: mv "~2" safe-json-stringify "~1" -cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0, cacache@^15.3.0: +cacache@*, cacache@15.3.0, cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: version "15.3.0" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== @@ -4170,9 +4273,9 @@ camelcase@^6.2.0: integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== caniuse-lite@^1.0.30001280: - version "1.0.30001282" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001282.tgz#38c781ee0a90ccfe1fe7fefd00e43f5ffdcb96fd" - integrity sha512-YhF/hG6nqBEllymSIjLtR2iWDDnChvhnVJqp+vloyt2tEHFG1yBR+ac2B/rOw0qOK0m0lEXU2dv4E/sMk5P9Kg== + version "1.0.30001284" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001284.tgz#d3653929ded898cd0c1f09a56fd8ca6952df4fca" + integrity sha512-t28SKa7g6kiIQi6NHeOcKrOrGMzCRrXvlasPwWC26TH2QNdglgzQIRUuJ0cR3NeQPH+5jpuveeeSFDLm2zbkEw== cardinal@^2.1.1: version "2.1.1" @@ -4187,7 +4290,12 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@*: + version "5.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.0.tgz#bd96c6bb8e02b96e08c0c3ee2a9d90e050c7b832" + integrity sha512-/duVOqst+luxCQRKEo4bNxinsOQtMP80ZYm7mMqzuh5PociNL0PvmHFvREJ9ueYL2TxlHjBcmLCdmocx9Vg+IQ== + +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -4237,7 +4345,7 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chownr@^2.0.0: +chownr@*, chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== @@ -4248,9 +4356,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6" - integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== + version "3.3.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" + integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== cidr-regex@^3.1.1: version "3.1.1" @@ -4274,15 +4382,15 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-columns@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= +cli-columns@*: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== dependencies: - string-width "^2.0.0" - strip-ansi "^3.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" -cli-table3@^0.6.0: +cli-table3@*, cli-table3@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== @@ -4374,7 +4482,7 @@ colors@^1.1.2: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -columnify@~1.5.4: +columnify@*: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= @@ -4472,7 +4580,7 @@ conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: lodash.ismatch "^4.4.0" modify-values "^1.0.0" -conventional-commits-parser@^3.0.0, conventional-commits-parser@^3.2.3: +conventional-commits-parser@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== @@ -4492,14 +4600,14 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: safe-buffer "~5.1.1" core-js-pure@^3.19.0: - version "3.19.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.1.tgz#edffc1fc7634000a55ba05e95b3f0fe9587a5aa4" - integrity sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ== + version "3.19.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.2.tgz#26b5bfb503178cff6e3e115bc2ba6c6419383680" + integrity sha512-5LkcgQEy8pFeVnd/zomkUBSwnmIxuF1C8E9KrMAbOc8f34IBT9RGvTYeNDdp1PnvMJrrVhvk1hg/yVV5h/znlg== core-js@^3.6.5: - version "3.19.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.1.tgz#f6f173cae23e73a7d88fa23b6e9da329276c6641" - integrity sha512-Tnc7E9iKd/b/ff7GFbhwPVzJzPztGrChB8X8GLqoYGdEOG8IpLnK1xPyo3ZoO3HsK6TodJS58VGPOxA+hLHQMg== + version "3.19.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.2.tgz#ae216d7f4f7e924d9a2e3ff1e4b1940220f9157b" + integrity sha512-ciYCResnLIATSsXuXnIOH4CbdfgV+H1Ltg16hJFN7/v6OxqnFr/IFGeLacaZ+fHLAm0TBbXwNK9/DNBzBUrO/g== core-util-is@1.0.2: version "1.0.2" @@ -4626,9 +4734,9 @@ dateformat@^3.0.0: integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" @@ -4809,10 +4917,10 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diff-sequences@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723" - integrity sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ== +diff-sequences@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" + integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== diff@^4.0.1: version "4.0.2" @@ -4867,9 +4975,9 @@ domexception@^2.0.1: webidl-conversions "^5.0.0" domhandler@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" - integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: domelementtype "^2.2.0" @@ -4922,9 +5030,9 @@ editorconfig@0.15.3: sigmund "^1.0.1" electron-to-chromium@^1.3.896: - version "1.3.905" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.905.tgz#3c18f17f71f73013c5252af556aab213740c477f" - integrity sha512-jTjkycBMCCMk86PAucHtqicZ6dKlgPw+gAXMI9xxH5ua0+60dH+PVR7efwQMqCOQxmhHSo4aF4f37Idb5XBAcA== + version "1.4.11" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.11.tgz#303c9deebbe90c68bf5c2c81a88a3bf4522c8810" + integrity sha512-2OhsaYgsWGhWjx2et8kaUcdktPbBGjKM2X0BReUCKcSCPttEY+hz2zie820JLbttU8jwL92+JJysWwkut3wZgA== email-addresses@5.0.0: version "5.0.0" @@ -5000,9 +5108,9 @@ entities@~2.1.0: integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== env-ci@^5.0.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.4.1.tgz#814387ddd6857b37472ef612361f34d720c29a18" - integrity sha512-xyuCtyFZLpnW5aH0JstETKTSMwHHQX4m42juzEZzvbUCJX7RiPVlhASKM0f/cJ4vvI/+txMkZ7F5To6dCdPYhg== + version "5.5.0" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" + integrity sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A== dependencies: execa "^5.0.0" fromentries "^1.3.2" @@ -5250,10 +5358,10 @@ eslint@8.3.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.0.0, espree@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.1.0.tgz#ba9d3c9b34eeae205724124e31de4543d59fbf74" - integrity sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ== +espree@^9.1.0, espree@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" + integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== dependencies: acorn "^8.6.0" acorn-jsx "^5.3.1" @@ -5371,17 +5479,17 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -expect@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.3.1.tgz#d0f170b1f5c8a2009bab0beffd4bb94f043e38e7" - integrity sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg== +expect@^27.3.1, expect@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.2.tgz#4429b0f7e307771d176de9bdf23229b101db6ef6" + integrity sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" ansi-styles "^5.0.0" - jest-get-type "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-regex-util "^27.0.6" + jest-get-type "^27.4.0" + jest-matcher-utils "^27.4.2" + jest-message-util "^27.4.2" + jest-regex-util "^27.4.0" extend@^3.0.0, extend@~3.0.2: version "3.0.2" @@ -5445,7 +5553,7 @@ fast-xml-parser@3.19.0: resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== -fastest-levenshtein@^1.0.12: +fastest-levenshtein@*: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== @@ -5624,21 +5732,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.1.tgz#4bea07bcde3782f06dced8950e51307aa0f4a346" - integrity sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^1.0.1 || ^2.0.0" - strip-ansi "^3.0.1 || ^4.0.0" - wide-align "^1.1.2" - gauge@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.0.tgz#afba07aa0374a93c6219603b1fb83eaa2264d8f8" @@ -5776,7 +5869,7 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: +glob@*, glob@7.2.0, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -5860,7 +5953,7 @@ got@11.8.3, got@^11.7.0: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.8: +graceful-fs@*, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.6: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -5969,18 +6062,18 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1, hosted-git-info@^4.0.2: +hosted-git-info@*, hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== dependencies: lru-cache "^6.0.0" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -6089,6 +6182,13 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" +ignore-walk@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" + integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== + dependencies: + minimatch "^3.0.4" + ignore@5.1.9, ignore@^5.1.4, ignore@^5.1.8: version "5.1.9" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" @@ -6148,7 +6248,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@2.0.0, ini@^2.0.0: +ini@*, ini@2.0.0, ini@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== @@ -6158,7 +6258,7 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -init-package-json@^2.0.5: +init-package-json@*: 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== @@ -6258,7 +6358,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-cidr@^4.0.2: +is-cidr@*: version "4.0.2" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== @@ -6296,11 +6396,6 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -6519,9 +6614,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.5.tgz#a2580107e71279ea6d661ddede929ffc6d693384" - integrity sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ== + version "3.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.1.tgz#7085857f17d2441053c6ce5c3b8fdf6882289397" + integrity sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -6531,84 +6626,85 @@ 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.3.0: - version "27.3.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.3.0.tgz#22a02cc2b34583fc66e443171dc271c0529d263c" - integrity sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg== +jest-changed-files@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.4.2.tgz#da2547ea47c6e6a5f6ed336151bd2075736eb4a5" + integrity sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.3.1.tgz#1679e74387cbbf0c6a8b42de963250a6469e0797" - integrity sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw== +jest-circus@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.2.tgz#466f482207ca9f323b78416c28f4d1fa7588159a" + integrity sha512-2ePUSru1BGMyzxsMvRfu+tNb+PW60rUyMLJBfw1Nrh5zC8RoTPfF+zbE0JToU31a6ZVe4nnrNKWYRzlghAbL0A== dependencies: - "@jest/environment" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/environment" "^27.4.2" + "@jest/test-result" "^27.4.2" + "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.3.1" + expect "^27.4.2" is-generator-fn "^2.0.0" - jest-each "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-runtime "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - pretty-format "^27.3.1" + jest-each "^27.4.2" + jest-matcher-utils "^27.4.2" + jest-message-util "^27.4.2" + jest-runtime "^27.4.2" + jest-snapshot "^27.4.2" + jest-util "^27.4.2" + pretty-format "^27.4.2" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" jest-cli@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.3.1.tgz#b576f9d146ba6643ce0a162d782b40152b6b1d16" - integrity sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q== + version "27.4.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.3.tgz#89acba683b9f91c7a5e342e2ea13aa5414836a0d" + integrity sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw== dependencies: - "@jest/core" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/core" "^27.4.3" + "@jest/test-result" "^27.4.2" + "@jest/types" "^27.4.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" + jest-config "^27.4.3" + jest-util "^27.4.2" + jest-validate "^27.4.2" prompts "^2.0.1" yargs "^16.2.0" -jest-config@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.3.1.tgz#cb3b7f6aaa8c0a7daad4f2b9573899ca7e09bbad" - integrity sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg== +jest-config@^27.4.3: + version "27.4.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.3.tgz#7820e08f7526fa3f725423e2f0fa7888ee0ef9c9" + integrity sha512-DQ10HTSqYtC2pO7s9j2jw+li4xUnm2wLYWH2o7K1ftB8NyvToHsXoLlXxtsGh3AW9gUQR6KY/4B7G+T/NswJBw== dependencies: "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.3.1" - "@jest/types" "^27.2.5" - babel-jest "^27.3.1" + "@jest/test-sequencer" "^27.4.2" + "@jest/types" "^27.4.2" + babel-jest "^27.4.2" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-circus "^27.3.1" - jest-environment-jsdom "^27.3.1" - jest-environment-node "^27.3.1" - jest-get-type "^27.3.1" - jest-jasmine2 "^27.3.1" - jest-regex-util "^27.0.6" - jest-resolve "^27.3.1" - jest-runner "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" + jest-circus "^27.4.2" + jest-environment-jsdom "^27.4.3" + jest-environment-node "^27.4.2" + jest-get-type "^27.4.0" + jest-jasmine2 "^27.4.2" + jest-regex-util "^27.4.0" + jest-resolve "^27.4.2" + jest-runner "^27.4.3" + jest-util "^27.4.2" + jest-validate "^27.4.2" micromatch "^4.0.4" - pretty-format "^27.3.1" + pretty-format "^27.4.2" + slash "^3.0.0" jest-diff@^26.6.2: version "26.6.2" @@ -6620,58 +6716,58 @@ jest-diff@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-diff@^27.0.0, jest-diff@^27.0.6, jest-diff@^27.2.5, jest-diff@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.3.1.tgz#d2775fea15411f5f5aeda2a5e02c2f36440f6d55" - integrity sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ== +jest-diff@^27.0.0, jest-diff@^27.0.6, jest-diff@^27.2.5, jest-diff@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.2.tgz#786b2a5211d854f848e2dcc1e324448e9481f36f" + integrity sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q== dependencies: chalk "^4.0.0" - diff-sequences "^27.0.6" - jest-get-type "^27.3.1" - pretty-format "^27.3.1" + diff-sequences "^27.4.0" + jest-get-type "^27.4.0" + pretty-format "^27.4.2" -jest-docblock@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.0.6.tgz#cc78266acf7fe693ca462cbbda0ea4e639e4e5f3" - integrity sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA== +jest-docblock@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.4.0.tgz#06c78035ca93cbbb84faf8fce64deae79a59f69f" + integrity sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg== dependencies: detect-newline "^3.0.0" -jest-each@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.3.1.tgz#14c56bb4f18dd18dc6bdd853919b5f16a17761ff" - integrity sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ== +jest-each@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.2.tgz#19364c82a692d0d26557642098d1f4619c9ee7d3" + integrity sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" chalk "^4.0.0" - jest-get-type "^27.3.1" - jest-util "^27.3.1" - pretty-format "^27.3.1" - -jest-environment-jsdom@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz#63ac36d68f7a9303494df783494856222b57f73e" - integrity sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg== - dependencies: - "@jest/environment" "^27.3.1" - "@jest/fake-timers" "^27.3.1" - "@jest/types" "^27.2.5" + jest-get-type "^27.4.0" + jest-util "^27.4.2" + pretty-format "^27.4.2" + +jest-environment-jsdom@^27.4.3: + version "27.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.3.tgz#74198285f6284888ca9c7486c4e5e67add75aa53" + integrity sha512-x1AUVz3G14LpEJs7KIFUaTINT2n0unOUmvdAby3s/sldUpJJetOJifHo1O/EUQC5fNBowggwJbVulko18y6OWw== + dependencies: + "@jest/environment" "^27.4.2" + "@jest/fake-timers" "^27.4.2" + "@jest/types" "^27.4.2" "@types/node" "*" - jest-mock "^27.3.0" - jest-util "^27.3.1" + jest-mock "^27.4.2" + jest-util "^27.4.2" jsdom "^16.6.0" -jest-environment-node@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.3.1.tgz#af7d0eed04edafb740311b303f3fe7c8c27014bb" - integrity sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw== +jest-environment-node@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.2.tgz#bf5586a0924a8d21c13838121ac0941638c7d15e" + integrity sha512-nzTZ5nJ+FabuZPH2YVci7SZIHpvtNRHPt8+vipLkCnAgXGjVzHm7XJWdnNqXbAkExIgiKeVEkVMNZOZE/LeiIg== dependencies: - "@jest/environment" "^27.3.1" - "@jest/fake-timers" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/environment" "^27.4.2" + "@jest/fake-timers" "^27.4.2" + "@jest/types" "^27.4.2" "@types/node" "*" - jest-mock "^27.3.0" - jest-util "^27.3.1" + jest-mock "^27.4.2" + jest-util "^27.4.2" jest-extended@1.1.0: version "1.1.0" @@ -6688,10 +6784,10 @@ jest-get-type@^26.3.0: resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-get-type@^27.0.6, jest-get-type@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.3.1.tgz#a8a2b0a12b50169773099eee60a0e6dd11423eff" - integrity sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg== +jest-get-type@^27.0.6, jest-get-type@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" + integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== jest-github-actions-reporter@1.0.3: version "1.0.3" @@ -6700,48 +6796,48 @@ jest-github-actions-reporter@1.0.3: dependencies: "@actions/core" "^1.2.0" -jest-haste-map@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.3.1.tgz#7656fbd64bf48bda904e759fc9d93e2c807353ee" - integrity sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg== +jest-haste-map@^27.3.1, jest-haste-map@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.2.tgz#7fc7d5e568cca704284f4850885b74a0b8b87587" + integrity sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.4" - jest-regex-util "^27.0.6" - jest-serializer "^27.0.6" - jest-util "^27.3.1" - jest-worker "^27.3.1" + jest-regex-util "^27.4.0" + jest-serializer "^27.4.0" + jest-util "^27.4.2" + jest-worker "^27.4.2" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz#df6d3d07c7dafc344feb43a0072a6f09458d32b0" - integrity sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg== +jest-jasmine2@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.2.tgz#c956c88b9c05ca22afdc779deebc2890cb891797" + integrity sha512-VO/fyAJSH9u0THjbteFiL8qc93ufU+yW+bdieDc8tzTCWwlWzO53UHS5nFK1qmE8izb5Smkn+XHlVt6/l06MKQ== dependencies: "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.3.1" - "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/environment" "^27.4.2" + "@jest/source-map" "^27.4.0" + "@jest/test-result" "^27.4.2" + "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.3.1" + expect "^27.4.2" is-generator-fn "^2.0.0" - jest-each "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-runtime "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - pretty-format "^27.3.1" + jest-each "^27.4.2" + jest-matcher-utils "^27.4.2" + jest-message-util "^27.4.2" + jest-runtime "^27.4.2" + jest-snapshot "^27.4.2" + jest-util "^27.4.2" + pretty-format "^27.4.2" throat "^6.0.1" jest-junit@13.0.0: @@ -6754,13 +6850,13 @@ jest-junit@13.0.0: uuid "^8.3.2" xml "^1.0.1" -jest-leak-detector@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz#7fb632c2992ef707a1e73286e1e704f9cc1772b2" - integrity sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg== +jest-leak-detector@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz#7fc3120893a7a911c553f3f2bdff9faa4454abbb" + integrity sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw== dependencies: - jest-get-type "^27.3.1" - pretty-format "^27.3.1" + jest-get-type "^27.4.0" + pretty-format "^27.4.2" jest-matcher-utils@27.0.6: version "27.0.6" @@ -6782,15 +6878,15 @@ jest-matcher-utils@^26.6.2: jest-get-type "^26.3.0" pretty-format "^26.6.2" -jest-matcher-utils@^27.0.6, jest-matcher-utils@^27.2.4, jest-matcher-utils@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz#257ad61e54a6d4044e080d85dbdc4a08811e9c1c" - integrity sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w== +jest-matcher-utils@^27.0.6, jest-matcher-utils@^27.2.4, jest-matcher-utils@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz#d17c5038607978a255e0a9a5c32c24e984b6c60b" + integrity sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ== dependencies: chalk "^4.0.0" - jest-diff "^27.3.1" - jest-get-type "^27.3.1" - pretty-format "^27.3.1" + jest-diff "^27.4.2" + jest-get-type "^27.4.0" + pretty-format "^27.4.2" jest-message-util@^26.6.2: version "26.6.2" @@ -6807,18 +6903,18 @@ jest-message-util@^26.6.2: slash "^3.0.0" stack-utils "^2.0.2" -jest-message-util@^27.0.6, jest-message-util@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.3.1.tgz#f7c25688ad3410ab10bcb862bcfe3152345c6436" - integrity sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg== +jest-message-util@^27.0.6, jest-message-util@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.2.tgz#07f3f1bf207d69cf798ce830cc57f1a849f99388" + integrity sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.3.1" + pretty-format "^27.4.2" slash "^3.0.0" stack-utils "^2.0.3" @@ -6829,12 +6925,12 @@ jest-mock-extended@2.0.4: dependencies: ts-essentials "^7.0.3" -jest-mock@^27.3.0: - version "27.3.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.3.0.tgz#ddf0ec3cc3e68c8ccd489bef4d1f525571a1b867" - integrity sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw== +jest-mock@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.2.tgz#184ff197a25491bfe4570c286daa5d62eb760b88" + integrity sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" "@types/node" "*" jest-pnp-resolver@^1.2.2: @@ -6847,76 +6943,76 @@ jest-regex-util@^26.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-regex-util@^27.0.6: - version "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-regex-util@^27.0.6, jest-regex-util@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.4.0.tgz#e4c45b52653128843d07ad94aec34393ea14fbca" + integrity sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg== -jest-resolve-dependencies@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz#85b99bdbdfa46e2c81c6228fc4c91076f624f6e2" - integrity sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A== +jest-resolve-dependencies@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.2.tgz#2f4f363cca26f75a22aefd496f9c7ae65b3de37f" + integrity sha512-hb++cTpqvOWfU49MCP/JQkxmnrhKoAVqXWFjgYXswRSVGk8Q6bDTSvhbCeYXDtXaymY0y7WrrSIlKogClcKJuw== dependencies: - "@jest/types" "^27.2.5" - jest-regex-util "^27.0.6" - jest-snapshot "^27.3.1" + "@jest/types" "^27.4.2" + jest-regex-util "^27.4.0" + jest-snapshot "^27.4.2" -jest-resolve@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.3.1.tgz#0e5542172a1aa0270be6f66a65888647bdd74a3e" - integrity sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw== +jest-resolve@^27.3.1, jest-resolve@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.2.tgz#d3e4cbee7acb4a4f8c8bfc270767bec34d2aefaf" + integrity sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" chalk "^4.0.0" graceful-fs "^4.2.4" - jest-haste-map "^27.3.1" + jest-haste-map "^27.4.2" jest-pnp-resolver "^1.2.2" - jest-util "^27.3.1" - jest-validate "^27.3.1" + jest-util "^27.4.2" + jest-validate "^27.4.2" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.3.1.tgz#1d594dcbf3bd8600a7e839e790384559eaf96e3e" - integrity sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww== +jest-runner@^27.4.3: + version "27.4.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.3.tgz#9f05d4733829787778e8a143ade913834d0828dc" + integrity sha512-JgR6Om/j22Fd6ZUUIGTWNcCtuZVYbNrecb4k89W4UyFJoRtHpo2zMKWkmFFFJoqwWGrfrcPLnVBIgkJiTV3cyA== dependencies: - "@jest/console" "^27.3.1" - "@jest/environment" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/console" "^27.4.2" + "@jest/environment" "^27.4.2" + "@jest/test-result" "^27.4.2" + "@jest/transform" "^27.4.2" + "@jest/types" "^27.4.2" "@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.3.1" - jest-environment-node "^27.3.1" - jest-haste-map "^27.3.1" - jest-leak-detector "^27.3.1" - jest-message-util "^27.3.1" - jest-resolve "^27.3.1" - jest-runtime "^27.3.1" - jest-util "^27.3.1" - jest-worker "^27.3.1" + jest-docblock "^27.4.0" + jest-environment-jsdom "^27.4.3" + jest-environment-node "^27.4.2" + jest-haste-map "^27.4.2" + jest-leak-detector "^27.4.2" + jest-message-util "^27.4.2" + jest-resolve "^27.4.2" + jest-runtime "^27.4.2" + jest-util "^27.4.2" + jest-worker "^27.4.2" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.3.1.tgz#80fa32eb85fe5af575865ddf379874777ee993d7" - integrity sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg== - dependencies: - "@jest/console" "^27.3.1" - "@jest/environment" "^27.3.1" - "@jest/globals" "^27.3.1" - "@jest/source-map" "^27.0.6" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" +jest-runtime@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.2.tgz#d72da8a0e97366c16ad515a2c437191a72600d38" + integrity sha512-eqPgcBaUNaw6j8T5M+dnfAEh6MIrh2YmtskCr9sl50QYpD22Sg+QqHw3J3nmaLzVMbBtOMHFFxLF0Qx8MsZVFQ== + dependencies: + "@jest/console" "^27.4.2" + "@jest/environment" "^27.4.2" + "@jest/globals" "^27.4.2" + "@jest/source-map" "^27.4.0" + "@jest/test-result" "^27.4.2" + "@jest/transform" "^27.4.2" + "@jest/types" "^27.4.2" "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" @@ -6925,22 +7021,22 @@ jest-runtime@^27.3.1: exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.3.1" - jest-message-util "^27.3.1" - jest-mock "^27.3.0" - jest-regex-util "^27.0.6" - jest-resolve "^27.3.1" - jest-snapshot "^27.3.1" - jest-util "^27.3.1" - jest-validate "^27.3.1" + jest-haste-map "^27.4.2" + jest-message-util "^27.4.2" + jest-mock "^27.4.2" + jest-regex-util "^27.4.0" + jest-resolve "^27.4.2" + jest-snapshot "^27.4.2" + jest-util "^27.4.2" + jest-validate "^27.4.2" slash "^3.0.0" strip-bom "^4.0.0" yargs "^16.2.0" -jest-serializer@^27.0.6: - version "27.0.6" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.0.6.tgz#93a6c74e0132b81a2d54623251c46c498bb5bec1" - integrity sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA== +jest-serializer@^27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.4.0.tgz#34866586e1cae2388b7d12ffa2c7819edef5958a" + integrity sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ== dependencies: "@types/node" "*" graceful-fs "^4.2.4" @@ -6953,10 +7049,10 @@ jest-silent-reporter@0.5.0: chalk "^4.0.0" jest-util "^26.0.0" -jest-snapshot@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.3.1.tgz#1da5c0712a252d70917d46c037054f5918c49ee4" - integrity sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg== +jest-snapshot@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.2.tgz#bd1ea04a8fab402e5ab18b788809fa597ddff532" + integrity sha512-DI7lJlNIu6WSQ+esqhnJzEzU70+dV+cNjoF1c+j5FagWEd3KtOyZvVliAH0RWNQ6KSnAAnKSU0qxJ8UXOOhuUQ== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" @@ -6964,23 +7060,23 @@ jest-snapshot@^27.3.1: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/transform" "^27.4.2" + "@jest/types" "^27.4.2" "@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.3.1" + expect "^27.4.2" graceful-fs "^4.2.4" - jest-diff "^27.3.1" - jest-get-type "^27.3.1" - jest-haste-map "^27.3.1" - jest-matcher-utils "^27.3.1" - jest-message-util "^27.3.1" - jest-resolve "^27.3.1" - jest-util "^27.3.1" + jest-diff "^27.4.2" + jest-get-type "^27.4.0" + jest-haste-map "^27.4.2" + jest-matcher-utils "^27.4.2" + jest-message-util "^27.4.2" + jest-resolve "^27.4.2" + jest-util "^27.4.2" natural-compare "^1.4.0" - pretty-format "^27.3.1" + pretty-format "^27.4.2" semver "^7.3.2" jest-util@^26.0.0: @@ -6995,47 +7091,47 @@ jest-util@^26.0.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.0.0, jest-util@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.3.1.tgz#a58cdc7b6c8a560caac9ed6bdfc4e4ff23f80429" - integrity sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw== +jest-util@^27.0.0, jest-util@^27.3.1, jest-util@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" + integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.4" picomatch "^2.2.3" -jest-validate@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.3.1.tgz#3a395d61a19cd13ae9054af8cdaf299116ef8a24" - integrity sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q== +jest-validate@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.2.tgz#eecfcc1b1c9429aa007da08a2bae4e32a81bbbc3" + integrity sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.3.1" + jest-get-type "^27.4.0" leven "^3.1.0" - pretty-format "^27.3.1" + pretty-format "^27.4.2" -jest-watcher@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.3.1.tgz#ba5e0bc6aa843612b54ddb7f009d1cbff7e05f3e" - integrity sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA== +jest-watcher@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.2.tgz#c9037edfd80354c9fe90de4b6f8b6e2b8e736744" + integrity sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg== dependencies: - "@jest/test-result" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/test-result" "^27.4.2" + "@jest/types" "^27.4.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.3.1" + jest-util "^27.4.2" string-length "^4.0.1" -jest-worker@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.3.1.tgz#0def7feae5b8042be38479799aeb7b5facac24b2" - integrity sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g== +jest-worker@^27.3.1, jest-worker@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.2.tgz#0fb123d50955af1a450267787f340a1bf7e12bc4" + integrity sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -7141,7 +7237,7 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@*, json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -7151,7 +7247,7 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3, json-schema@^0.4.0: +json-schema@0.4.0, json-schema@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== @@ -7205,13 +7301,13 @@ jsonparse@^1.2.0, jsonparse@^1.3.1: integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" just-diff-apply@^3.0.0: @@ -7272,7 +7368,7 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libnpmaccess@^4.0.2: +libnpmaccess@*: version "4.0.3" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz#dfb0e5b0a53c315a2610d300e46b4ddeb66e7eec" integrity sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ== @@ -7282,7 +7378,7 @@ libnpmaccess@^4.0.2: npm-package-arg "^8.1.2" npm-registry-fetch "^11.0.0" -libnpmdiff@^2.0.4: +libnpmdiff@*: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-2.0.4.tgz#bb1687992b1a97a8ea4a32f58ad7c7f92de53b74" integrity sha512-q3zWePOJLHwsLEUjZw3Kyu/MJMYfl4tWCg78Vl6QGSfm4aXBUSVzMzjJ6jGiyarsT4d+1NH4B1gxfs62/+y9iQ== @@ -7296,31 +7392,31 @@ libnpmdiff@^2.0.4: pacote "^11.3.0" tar "^6.1.0" -libnpmexec@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-2.0.1.tgz#729ae3e15a3ba225964ccf248117a75d311eeb73" - integrity sha512-4SqBB7eJvJWmUKNF42Q5qTOn20DRjEE4TgvEh2yneKlAiRlwlhuS9MNR45juWwmoURJlf2K43bozlVt7OZiIOw== +libnpmexec@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-3.0.1.tgz#bc2fddf1b7bd2c1b2c43b4b726ec4cf11920ad0a" + integrity sha512-VUZTpkKBRPv3Z9DIjbsiHhEQXmQ+OwSQ/yLCY9i6CFE8UIczWyE6wVxP5sJ5NSGtSTUs6I98WewQOL45OKMyxA== dependencies: - "@npmcli/arborist" "^2.3.0" + "@npmcli/arborist" "^4.0.0" "@npmcli/ci-detect" "^1.3.0" - "@npmcli/run-script" "^1.8.4" + "@npmcli/run-script" "^2.0.0" chalk "^4.1.0" mkdirp-infer-owner "^2.0.0" npm-package-arg "^8.1.2" - pacote "^11.3.1" + pacote "^12.0.0" proc-log "^1.0.0" read "^1.0.7" read-package-json-fast "^2.0.2" walk-up-path "^1.0.0" -libnpmfund@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-1.1.0.tgz#ee91313905b3194b900530efa339bc3f9fc4e5c4" - integrity sha512-Kfmh3pLS5/RGKG5WXEig8mjahPVOxkik6lsbH4iX0si1xxNi6eeUh/+nF1MD+2cgalsQif3O5qyr6mNz2ryJrQ== +libnpmfund@*: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-2.0.1.tgz#3c7e2be61e8c79e22c4918dde91ef57f64faf064" + integrity sha512-OhDbjB3gqdRyuQ56AhUtO49HZ7cZHSM7yCnhQa1lsNpmAmGPnjCImfx8SoWaAkUM7Ov8jngMR5JHKAr1ddjHTQ== dependencies: - "@npmcli/arborist" "^2.5.0" + "@npmcli/arborist" "^4.0.0" -libnpmhook@^6.0.2: +libnpmhook@*: version "6.0.3" resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-6.0.3.tgz#1d7f0d7e6a7932fbf7ce0881fdb0ed8bf8748a30" integrity sha512-3fmkZJibIybzmAvxJ65PeV3NzRc0m4xmYt6scui5msocThbEp4sKFT80FhgrCERYDjlUuFahU6zFNbJDHbQ++g== @@ -7328,7 +7424,7 @@ libnpmhook@^6.0.2: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmorg@^2.0.2: +libnpmorg@*: version "2.0.3" resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-2.0.3.tgz#4e605d4113dfa16792d75343824a0625c76703bc" integrity sha512-JSGl3HFeiRFUZOUlGdiNcUZOsUqkSYrg6KMzvPZ1WVZ478i47OnKSS0vkPmX45Pai5mTKuwIqBMcGWG7O8HfdA== @@ -7336,16 +7432,16 @@ libnpmorg@^2.0.2: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmpack@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-2.0.1.tgz#d3eac25cc8612f4e7cdeed4730eee339ba51c643" - integrity sha512-He4/jxOwlaQ7YG7sIC1+yNeXeUDQt8RLBvpI68R3RzPMZPa4/VpxhlDo8GtBOBDYoU8eq6v1wKL38sq58u4ibQ== +libnpmpack@*: + version "3.0.0" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-3.0.0.tgz#b1cdf182106bc0d25910e79bb5c9b6c23cd71670" + integrity sha512-W6lt4blkR9YXu/qOrFknfnKBajz/1GvAc5q1XcWTGuBJn2DYKDWHtA7x1fuMQdn7hKDBOPlZ/Aqll+ZvAnrM6g== dependencies: - "@npmcli/run-script" "^1.8.3" + "@npmcli/run-script" "^2.0.0" npm-package-arg "^8.1.0" - pacote "^11.2.6" + pacote "^12.0.0" -libnpmpublish@^4.0.1: +libnpmpublish@*: version "4.0.2" resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz#be77e8bf5956131bcb45e3caa6b96a842dec0794" integrity sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw== @@ -7356,14 +7452,14 @@ libnpmpublish@^4.0.1: semver "^7.1.3" ssri "^8.0.1" -libnpmsearch@^3.1.1: +libnpmsearch@*: version "3.1.2" resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-3.1.2.tgz#aee81b9e4768750d842b627a3051abc89fdc15f3" integrity sha512-BaQHBjMNnsPYk3Bl6AiOeVuFgp72jviShNBw5aHaHNKWqZxNi38iVNoXbo6bG/Ccc/m1To8s0GtMdtn6xZ1HAw== dependencies: npm-registry-fetch "^11.0.0" -libnpmteam@^2.0.3: +libnpmteam@*: version "2.0.4" resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-2.0.4.tgz#9dbe2e18ae3cb97551ec07d2a2daf9944f3edc4c" integrity sha512-FPrVJWv820FZFXaflAEVTLRWZrerCvfe7ZHSMzJ/62EBlho2KFlYKjyNEsPW3JiV7TLSXi3vo8u0gMwIkXSMTw== @@ -7371,13 +7467,13 @@ libnpmteam@^2.0.3: aproba "^2.0.0" npm-registry-fetch "^11.0.0" -libnpmversion@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-1.2.1.tgz#689aa7fe0159939b3cbbf323741d34976f4289e9" - integrity sha512-AA7x5CFgBFN+L4/JWobnY5t4OAHjQuPbAwUYJ7/NtHuyLut5meb+ne/aj0n7PWNiTGCJcRw/W6Zd2LoLT7EZuQ== +libnpmversion@*: + version "2.0.1" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-2.0.1.tgz#20b1425d88cd99c66806a54b458d2d654066b550" + integrity sha512-uFGtNTe/m0GOIBQCE4ryIsgGNJdeShW+qvYtKNLCCuiG7JY3YEslL/maFFZbaO4wlQa/oj1t0Bm9TyjahvtgQQ== dependencies: "@npmcli/git" "^2.0.7" - "@npmcli/run-script" "^1.8.4" + "@npmcli/run-script" "^2.0.0" json-parse-even-better-errors "^2.3.1" semver "^7.3.5" stringify-package "^1.0.1" @@ -7523,7 +7619,7 @@ make-error@1.x, make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: +make-fetch-happen@*, make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== @@ -7849,7 +7945,7 @@ minipass-json-stream@^1.0.1: jsonparse "^1.3.1" minipass "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@*, minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== @@ -7863,7 +7959,7 @@ minipass-sized@^1.0.3: dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@*, minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: version "3.1.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.5.tgz#71f6251b0a33a49c01b3cf97ff77eda030dff732" integrity sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw== @@ -7878,7 +7974,7 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-infer-owner@^2.0.0: +mkdirp-infer-owner@*, mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== @@ -7887,6 +7983,11 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" +mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" @@ -7894,11 +7995,6 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mock-fs@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-5.1.2.tgz#6fa486e06d00f8793a8d2228de980eff93ce6db7" @@ -7929,6 +8025,11 @@ mri@^1.1.5: 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" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -7939,11 +8040,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multimatch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" @@ -8044,23 +8140,7 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" -node-gyp@^7.1.0, node-gyp@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.3" - nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" - rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" - which "^2.0.2" - -node-gyp@^8.0.0: +node-gyp@*, node-gyp@^8.0.0, node-gyp@^8.2.0: version "8.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== @@ -8076,6 +8156,22 @@ node-gyp@^8.0.0: tar "^6.1.2" which "^2.0.2" +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" + node-html-parser@3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-3.3.6.tgz#fdbb3ba16d1252d7197ec39f0260d9c10ef33590" @@ -8107,7 +8203,7 @@ node.extend@^2.0.0: has "^1.0.3" is "^3.2.1" -nopt@^5.0.0: +nopt@*, nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== @@ -8144,7 +8240,7 @@ normalize-url@^6.0.0, normalize-url@^6.0.1, normalize-url@^6.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -npm-audit-report@^2.1.5: +npm-audit-report@*: version "2.1.5" resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-2.1.5.tgz#a5b8850abe2e8452fce976c8960dd432981737b5" integrity sha512-YB8qOoEmBhUH1UJgh1xFAv7Jg1d+xoNhsDYiFQlEFThEBui0W1vIz2ZK6FVg4WZjwEdl7uBQlm1jy3MUfyHeEw== @@ -8158,7 +8254,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== @@ -8170,7 +8266,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== -npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: +npm-package-arg@*, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1, npm-package-arg@^8.1.0, npm-package-arg@^8.1.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: version "8.1.5" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== @@ -8189,7 +8285,17 @@ npm-packlist@^2.1.4: npm-bundled "^1.1.1" npm-normalize-package-bin "^1.0.1" -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: +npm-packlist@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" + integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== + dependencies: + glob "^7.1.6" + ignore-walk "^4.0.1" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@*, npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== @@ -8199,13 +8305,25 @@ npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: npm-package-arg "^8.1.2" semver "^7.3.4" -npm-profile@^5.0.3: +npm-profile@*: version "5.0.4" resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-5.0.4.tgz#73e5bd1d808edc2c382d7139049cc367ac43161b" integrity sha512-OKtU7yoAEBOnc8zJ+/uo5E4ugPp09sopo+6y1njPp+W99P8DvQon3BJYmpvyK2Bf1+3YV5LN1bvgXRoZ1LUJBA== dependencies: npm-registry-fetch "^11.0.0" +npm-registry-fetch@*: + version "12.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-12.0.0.tgz#53d8c94f7c37293707b23728864710b76d3a3ca5" + integrity sha512-nd1I90UHoETjgWpo3GbcoM1l2S4JCUpzDcahU4x/GVCiDQ6yRiw2KyDoPVD8+MqODbPtWwHHGiyc4O5sgdEqPQ== + dependencies: + make-fetch-happen "^9.0.1" + minipass "^3.1.3" + minipass-fetch "^1.3.0" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + npm-registry-fetch@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz#68c1bb810c46542760d62a6a965f85a702d43a76" @@ -8240,7 +8358,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-user-validate@^1.0.1: +npm-user-validate@*: version "1.0.1" resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== @@ -8250,76 +8368,86 @@ npm@^7.0.0: resolved "https://registry.yarnpkg.com/npm/-/npm-7.24.2.tgz#861117af8241bea592289f22407230e5300e59ca" integrity sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ== dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^2.9.0" - "@npmcli/ci-detect" "^1.2.0" - "@npmcli/config" "^2.3.0" - "@npmcli/map-workspaces" "^1.0.4" - "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^1.8.6" - abbrev "~1.1.1" - ansicolors "~0.3.2" - ansistyles "~0.1.3" - archy "~1.0.0" - cacache "^15.3.0" - chalk "^4.1.2" - chownr "^2.0.0" - cli-columns "^3.1.2" - cli-table3 "^0.6.0" - columnify "~1.5.4" - fastest-levenshtein "^1.0.12" - glob "^7.2.0" - graceful-fs "^4.2.8" - hosted-git-info "^4.0.2" - ini "^2.0.0" - init-package-json "^2.0.5" - is-cidr "^4.0.2" - json-parse-even-better-errors "^2.3.1" - libnpmaccess "^4.0.2" - libnpmdiff "^2.0.4" - libnpmexec "^2.0.1" - libnpmfund "^1.1.0" - libnpmhook "^6.0.2" - libnpmorg "^2.0.2" - libnpmpack "^2.0.1" - libnpmpublish "^4.0.1" - libnpmsearch "^3.1.1" - libnpmteam "^2.0.3" - libnpmversion "^1.2.1" - make-fetch-happen "^9.1.0" - minipass "^3.1.3" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - ms "^2.1.2" - node-gyp "^7.1.2" - nopt "^5.0.0" - npm-audit-report "^2.1.5" - npm-install-checks "^4.0.0" - npm-package-arg "^8.1.5" - npm-pick-manifest "^6.1.1" - npm-profile "^5.0.3" - npm-registry-fetch "^11.0.0" - npm-user-validate "^1.0.1" - npmlog "^5.0.1" - opener "^1.5.2" - pacote "^11.3.5" - parse-conflict-json "^1.1.1" - qrcode-terminal "^0.12.0" - read "~1.0.7" - read-package-json "^4.1.1" - read-package-json-fast "^2.0.3" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.5" - ssri "^8.0.1" - tar "^6.1.11" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^1.0.4" - validate-npm-package-name "~3.0.0" - which "^2.0.2" - write-file-atomic "^3.0.3" + "@isaacs/string-locale-compare" "*" + "@npmcli/arborist" "*" + "@npmcli/ci-detect" "*" + "@npmcli/config" "*" + "@npmcli/map-workspaces" "*" + "@npmcli/package-json" "*" + "@npmcli/run-script" "*" + abbrev "*" + ansicolors "*" + ansistyles "*" + archy "*" + cacache "*" + chalk "*" + chownr "*" + cli-columns "*" + cli-table3 "*" + columnify "*" + fastest-levenshtein "*" + glob "*" + graceful-fs "*" + hosted-git-info "*" + ini "*" + init-package-json "*" + is-cidr "*" + json-parse-even-better-errors "*" + libnpmaccess "*" + libnpmdiff "*" + libnpmexec "*" + libnpmfund "*" + libnpmhook "*" + libnpmorg "*" + libnpmpack "*" + libnpmpublish "*" + libnpmsearch "*" + libnpmteam "*" + libnpmversion "*" + make-fetch-happen "*" + minipass "*" + minipass-pipeline "*" + mkdirp "*" + mkdirp-infer-owner "*" + ms "*" + node-gyp "*" + nopt "*" + npm-audit-report "*" + npm-install-checks "*" + npm-package-arg "*" + npm-pick-manifest "*" + npm-profile "*" + npm-registry-fetch "*" + npm-user-validate "*" + npmlog "*" + opener "*" + pacote "*" + parse-conflict-json "*" + qrcode-terminal "*" + read "*" + read-package-json "*" + read-package-json-fast "*" + readdir-scoped-modules "*" + rimraf "*" + semver "*" + ssri "*" + tar "*" + text-table "*" + tiny-relative-date "*" + treeverse "*" + validate-npm-package-name "*" + which "*" + write-file-atomic "*" + +npmlog@*, npmlog@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.0.tgz#ba9ef39413c3d936ea91553db7be49c34ad0520c" + integrity sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.0" + set-blocking "^2.0.0" npmlog@^4.1.2: version "4.1.2" @@ -8331,26 +8459,6 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.0.tgz#ba9ef39413c3d936ea91553db7be49c34ad0520c" - integrity sha512-03ppFRGlsyUaQFbGC2C8QWJN/C/K7PsfyD9aQdhVKAQIH4sQBc8WASqFBP7O+Ut4d2oo5LoeoboB3cGdBZSp6Q== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.0" - set-blocking "^2.0.0" - nth-check@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" @@ -8373,7 +8481,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -8428,7 +8536,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opener@^1.5.2: +opener@*: version "1.5.2" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== @@ -8590,7 +8698,32 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@^11.1.11, pacote@^11.2.6, pacote@^11.3.0, pacote@^11.3.1, pacote@^11.3.5: +pacote@*, pacote@^12.0.0, pacote@^12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.2.tgz#14ae30a81fe62ec4fc18c071150e6763e932527c" + integrity sha512-Ar3mhjcxhMzk+OVZ8pbnXdb0l8+pimvlsqBGRNkble2NVgyqOGE3yrCGi/lAYq7E7NRDMz89R1Wx5HIMCGgeYg== + dependencies: + "@npmcli/git" "^2.1.0" + "@npmcli/installed-package-contents" "^1.0.6" + "@npmcli/promise-spawn" "^1.2.0" + "@npmcli/run-script" "^2.0.0" + cacache "^15.0.5" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.3" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^3.0.0" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^11.0.0" + promise-retry "^2.0.1" + read-package-json-fast "^2.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.1.0" + +pacote@^11.3.0: version "11.3.5" resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.3.5.tgz#73cf1fc3772b533f575e39efa96c50be8c3dc9d2" integrity sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg== @@ -8622,7 +8755,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-conflict-json@^1.1.1: +parse-conflict-json@*, parse-conflict-json@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-1.1.1.tgz#54ec175bde0f2d70abf6be79e0e042290b86701b" integrity sha512-4gySviBiW5TRl7XHvp1agcS7SOe0KZOjC//71dzZVWJrY9hCrgtvl5v3SyIxCZ4fZF47TxD9nfzmxcx76xmbUw== @@ -8841,12 +8974,12 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.0, pretty-format@^27.0.6, pretty-format@^27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.3.1.tgz#7e9486365ccdd4a502061fa761d3ab9ca1b78df5" - integrity sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA== +pretty-format@^27.0.0, pretty-format@^27.0.6, pretty-format@^27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.2.tgz#e4ce92ad66c3888423d332b40477c87d1dac1fb8" + integrity sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw== dependencies: - "@jest/types" "^27.2.5" + "@jest/types" "^27.4.2" ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^17.0.1" @@ -8976,7 +9109,7 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qrcode-terminal@^0.12.0: +qrcode-terminal@*: version "0.12.0" resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== @@ -9047,7 +9180,7 @@ read-cmd-shim@^2.0.0: resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz#4a50a71d6f0965364938e9038476f7eede3928d9" integrity sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw== -read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: +read-package-json-fast@*, read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== @@ -9055,7 +9188,7 @@ read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json- json-parse-even-better-errors "^2.3.0" npm-normalize-package-bin "^1.0.1" -read-package-json@^4.1.1: +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== @@ -9093,7 +9226,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@^1.0.7, read@~1.0.1, read@~1.0.7: +read@*, read@1, read@^1.0.7, read@~1.0.1: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= @@ -9122,7 +9255,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdir-scoped-modules@^1.1.0: +readdir-scoped-modules@*, readdir-scoped-modules@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== @@ -9323,7 +9456,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@*, rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -9451,18 +9584,18 @@ semver-utils@1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@*, semver@7.3.5, semver@7.x, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -9714,7 +9847,7 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^8.0.0, ssri@^8.0.1: +ssri@*, ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== @@ -9779,14 +9912,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.1 || ^2.0.0", string-width@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -9854,13 +9979,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -"strip-ansi@^3.0.1 || ^4.0.0", strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -9938,7 +10056,7 @@ tar-stream@^2.0.1: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: +tar@*, tar@^6.0.2, tar@^6.1.0, tar@^6.1.2: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== @@ -9988,7 +10106,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@^0.2.0, text-table@~0.2.0: +text-table@*, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -10025,7 +10143,7 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tiny-relative-date@^1.3.0: +tiny-relative-date@*: version "1.3.0" resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== @@ -10100,7 +10218,7 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== -treeverse@^1.0.4: +treeverse@*, treeverse@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== @@ -10287,9 +10405,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.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.3.tgz#c0f25dfea1e8e5323eccf59610be08b6043c15cf" - integrity sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g== + version "3.14.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.4.tgz#68756f17d1b90b9d289341736cb9a567d6882f90" + integrity sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA== unbox-primitive@^1.0.1: version "1.0.1" @@ -10437,7 +10555,7 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: +validate-npm-package-name@*, validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= @@ -10559,6 +10677,13 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which@*, which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -10566,13 +10691,6 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" @@ -10604,7 +10722,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: +write-file-atomic@*, write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -10615,9 +10733,9 @@ 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.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" - integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + version "7.5.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== xml-name-validator@^3.0.0: version "3.0.0" From e4396e8461af3e5e8fe2904a663c3f5bfb1b5e97 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 6 Dec 2021 12:42:23 +0100 Subject: [PATCH 228/248] chore: add schema to renovate.json (#12969) --- renovate.json | 1 + 1 file changed, 1 insertion(+) diff --git a/renovate.json b/renovate.json index c878eaa505fcca..ad17d906890243 100644 --- a/renovate.json +++ b/renovate.json @@ -1,4 +1,5 @@ { + "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": ["github>renovatebot/.github"], "assignees": ["rarkins", "viceice"], "semanticCommitScope": "deps", From fbc6a23519eb8a61efcb0f11057a50b8214f5f27 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 6 Dec 2021 12:42:46 +0100 Subject: [PATCH 229/248] docs: postUpgradeTasks self-hosted only (#12970) --- docs/usage/configuration-options.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index a344273e28de84..803f13b7a26e39 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1751,6 +1751,8 @@ For example, GitHub might automerge a Renovate branch even if it's behind the ba ## postUpgradeTasks +Note: post-upgrade tasks can only be used on self-hosted Renovate instances. + Post-upgrade tasks are commands that are executed by Renovate after a dependency has been updated but before the commit is created. The intention is to run any additional command line tools that would modify existing files or generate new files when a dependency changes. From 97d4c22ef7cf40a09845cb7e43b8512148e3bb1e Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 6 Dec 2021 12:42:58 +0100 Subject: [PATCH 230/248] docs: one sentence per line, fix grammar (#12971) --- docs/usage/configuration-options.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index 803f13b7a26e39..d597344b6d8adf 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -1775,16 +1775,17 @@ The `postUpgradeTasks` configuration consists of three fields: ### commands -A list of commands that are executed after Renovate has updated a dependency but before the commit it made +A list of commands that are executed after Renovate has updated a dependency but before the commit is made. ### fileFilters -A list of glob-style matchers that determine which files will be included in the final commit made by Renovate +A list of glob-style matchers that determine which files will be included in the final commit made by Renovate. ### executionMode -Defaults to `update`, but can also be set to `branch`. This sets the level the postUpgradeTask runs on, if set to `update` the postUpgradeTask -will be executed for every dependency on the branch. If set to `branch` the postUpgradeTask is executed for the whole branch. +Defaults to `update`, but can also be set to `branch`. +This sets the level the postUpgradeTask runs on, if set to `update` the postUpgradeTask will be executed for every dependency on the branch. +If set to `branch` the postUpgradeTask is executed for the whole branch. ## prBodyColumns From 341acf272475ad5c886e14e21575f01c2283e07b Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 6 Dec 2021 12:54:43 +0100 Subject: [PATCH 231/248] docs: hyphenate word third-party (#12967) --- docs/usage/configuration-options.md | 2 +- docs/usage/examples/self-hosting.md | 2 +- docs/usage/getting-started/running.md | 4 ++-- docs/usage/modules/manager.md | 2 +- docs/usage/self-hosted-configuration.md | 4 ++-- lib/config/options/index.ts | 2 +- readme.md | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md index d597344b6d8adf..971d7e46895a3c 100644 --- a/docs/usage/configuration-options.md +++ b/docs/usage/configuration-options.md @@ -392,7 +392,7 @@ Configure this option to `false` if you prefer Renovate to open a new issue when ## constraints -Constraints are used in package managers which use third party tools to update "artifacts" like lock files or checksum files. +Constraints are used in package managers which use third-party tools to update "artifacts" like lock files or checksum files. Typically, the constraint is detected automatically by Renovate from files within the repository and there is no need to manually configure it. Manually specifying constraints is supported for `ruby`, `bundler`, `composer`, `go`, `npm`, `yarn`, `pnpm`, `python`, `pipenv`, and `poetry`. diff --git a/docs/usage/examples/self-hosting.md b/docs/usage/examples/self-hosting.md index 97dc3f7ef80421..d3b37607cf0858 100644 --- a/docs/usage/examples/self-hosting.md +++ b/docs/usage/examples/self-hosting.md @@ -15,7 +15,7 @@ If you want to use these package managers to update your lockfiles, you must ens npm install -g yarn pnpm ``` -The same goes for any other third party binary tool like `gradle` or `poetry` - you need to make sure they are installed and the appropriate version before running Renovate. +The same goes for any other third-party binary tool like `gradle` or `poetry` - you need to make sure it is installed and the appropriate version before running Renovate. ### Docker diff --git a/docs/usage/getting-started/running.md b/docs/usage/getting-started/running.md index 7d125cefaa2530..a19079c12ef5f8 100644 --- a/docs/usage/getting-started/running.md +++ b/docs/usage/getting-started/running.md @@ -22,8 +22,8 @@ Self-hosting Renovate means that you are the "administrator" of the bot, which e Renovate's Open Source CLI is built and distributed as the npm package `renovate`. You can run this directly in any Node.js environment - even via `npx` - and it will process all the repositories it is configured with, before exiting. -When you install Renovate from npm it naturally does not come bundled with any third party tools or languages such as Ruby, Python, Composer, Bundler, Poetry, etc. -Therefore if you need Renovate to support any non-npm lock files like Bundler then you'll need to make sure all required third party tools are pre-installed in the same environment alongside Renovate before you run it. +When you install Renovate from npm it naturally does not come bundled with any third-party tools or languages such as Ruby, Python, Composer, Bundler, Poetry, etc. +Therefore if you need Renovate to support any non-npm lock files like Bundler then you'll need to make sure all required third-party tools are pre-installed in the same environment alongside Renovate before you run it. The `renovate` npm package is compatible with all of Renovate's supported platforms. diff --git a/docs/usage/modules/manager.md b/docs/usage/modules/manager.md index b53c1b2e762ce4..c91d3df65242f2 100644 --- a/docs/usage/modules/manager.md +++ b/docs/usage/modules/manager.md @@ -3,7 +3,7 @@ Renovate is based around the concept of "package managers", or "managers" for short. These range from traditional package managers like npm, Bundler and Composer through to less traditional concepts like CircleCI or Travis config files. -The goal of Renovate is to detect and maintain all third party dependencies in your repositories, through the use of managers. +The goal of Renovate is to detect and maintain all third-party dependencies in your repositories, through the use of managers. ## Supported Managers diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index 6283d86b00310a..294dd221287cb0 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -104,10 +104,10 @@ e.g. ## binarySource -Renovate often needs to use third party binaries in its PRs, e.g. `npm` to update `package-lock.json` or `go` to update `go.sum`. +Renovate often needs to use third-party binaries in its PRs, e.g. `npm` to update `package-lock.json` or `go` to update `go.sum`. By default, Renovate will use a child process to run such tools, so they need to be pre-installed before running Renovate and available in the path. -As an alternative, Renovate can use "sidecar" containers for third party tools. +As an alternative, Renovate can use "sidecar" containers for third-party tools. If configured, Renovate will use `docker run` to create containers such as Node.js or Python to run tools within as-needed. For this to work, `docker` needs to be installed and the Docker socket available to Renovate. diff --git a/lib/config/options/index.ts b/lib/config/options/index.ts index da9e1d713bbeba..230978b66338b2 100644 --- a/lib/config/options/index.ts +++ b/lib/config/options/index.ts @@ -262,7 +262,7 @@ const options: RenovateOptions[] = [ { name: 'binarySource', description: - 'Controls whether third party tools like npm or Gradle are called directly, or via Docker sidecar containers.', + 'Controls whether third-party tools like npm or Gradle are called directly, or via Docker sidecar containers.', globalOnly: true, type: 'string', allowedValues: ['global', 'docker'], diff --git a/readme.md b/readme.md index da0c383773edf5..0b1c0a45475a11 100644 --- a/readme.md +++ b/readme.md @@ -63,7 +63,7 @@ If you are not on github.com or gitlab.com, or you prefer to run your own instan - Install the `renovate` CLI tool from npmjs, run it on a schedule (e.g. using cron) - Run the `renovate/renovate` Docker Hub image (same content/versions as the CLI tool), run it on a schedule -- Run the `renovate/renovate:slim` Docker Hub image if you only use package managers that don't need third party binaries (e.g. JavaScript, Docker, NuGet, pip) +- Run the `renovate/renovate:slim` Docker Hub image if you only use package managers that don't need third-party binaries (e.g. JavaScript, Docker, NuGet, pip) [More details on the self-hosting development](https://github.com/renovatebot/renovate/blob/main/docs/usage/getting-started/running.md). From 2d50969550eb6ee84d1db0264332056fb446db03 Mon Sep 17 00:00:00 2001 From: Rhys Arkins Date: Mon, 6 Dec 2021 13:41:43 +0100 Subject: [PATCH 232/248] chore: fix duplicate types import (#12973) Co-authored-by: Michael Kriese --- lib/util/exec/index.spec.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/util/exec/index.spec.ts b/lib/util/exec/index.spec.ts index a1c7e5a855c98f..556ec654477136 100644 --- a/lib/util/exec/index.spec.ts +++ b/lib/util/exec/index.spec.ts @@ -7,8 +7,7 @@ import { GlobalConfig } from '../../config/global'; import type { RepoGlobalConfig } from '../../config/types'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import * as dockerModule from './docker'; -import type { RawExecOptions, VolumeOption } from './types'; -import type { ExecOptions } from './types'; +import type { ExecOptions, RawExecOptions, VolumeOption } from './types'; import { exec } from '.'; const cpExec: jest.Mock = _cpExec as any; From f0be5ee7ff4360309630ebef0f5cf439c97fdfa6 Mon Sep 17 00:00:00 2001 From: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com> Date: Mon, 6 Dec 2021 15:08:01 +0100 Subject: [PATCH 233/248] chore: add Sergey Vedmak to contributors (#12972) --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index f26b543acc430e..340e76848c1816 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,8 @@ "Sebastian Poxhofer ", "Henry Sachs ", "Arkadiusz Kosmala ", - "Markus Siebert " + "Markus Siebert ", + "Sergey Vedmak " ], "license": "AGPL-3.0", "bugs": { From 597da6ff59e5a3c984c0b7d0db91d13114512b26 Mon Sep 17 00:00:00 2001 From: RahulGautamSingh Date: Mon, 6 Dec 2021 20:50:37 +0545 Subject: [PATCH 234/248] refactor: flagged relevant regex (#12976) --- lib/datasource/npm/npmrc.ts | 4 +++- lib/datasource/packagist/index.ts | 3 ++- lib/datasource/sbt-package/index.ts | 3 +-- lib/manager/dockerfile/extract.ts | 4 ++-- lib/manager/npm/extract/index.ts | 2 +- lib/manager/npm/extract/pnpm.ts | 2 +- lib/util/emoji.ts | 2 +- lib/util/http/gitea.ts | 2 +- lib/util/url.ts | 2 +- lib/versioning/ruby/index.ts | 2 +- 10 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/datasource/npm/npmrc.ts b/lib/datasource/npm/npmrc.ts index cc3cf86f227efb..4c510d76259000 100644 --- a/lib/datasource/npm/npmrc.ts +++ b/lib/datasource/npm/npmrc.ts @@ -9,6 +9,7 @@ import type { OutgoingHttpHeaders } from '../../util/http/types'; import { maskToken } from '../../util/mask'; import { regEx } from '../../util/regex'; import { add } from '../../util/sanitize'; +import { ensureTrailingSlash } from '../../util/url'; import type { Npmrc, PackageResolution } from './types'; let npmrc: Record = {}; @@ -112,7 +113,8 @@ export function resolvePackage(packageName: string): PackageResolution { !authInfo && npmrc && npmrc._authToken && - registryUrl.replace(/\/?$/, '/') === npmrc.registry?.replace(/\/?$/, '/') // TODO #12070 + ensureTrailingSlash(registryUrl) === + ensureTrailingSlash(npmrc?.registry || '') ) { authInfo = { type: 'Bearer', token: npmrc._authToken }; } diff --git a/lib/datasource/packagist/index.ts b/lib/datasource/packagist/index.ts index decb8d894bd545..c515e1c01cae63 100644 --- a/lib/datasource/packagist/index.ts +++ b/lib/datasource/packagist/index.ts @@ -7,6 +7,7 @@ import * as packageCache from '../../util/cache/package'; import * as hostRules from '../../util/host-rules'; import { Http, HttpOptions } from '../../util/http'; import { regEx } from '../../util/regex'; +import { ensureTrailingSlash } from '../../util/url'; import * as composerVersioning from '../../versioning/composer'; import type { GetReleasesConfig, ReleaseResult } from '../types'; import type { @@ -39,7 +40,7 @@ function getHostOpts(url: string): HttpOptions { } async function getRegistryMeta(regUrl: string): Promise { - const url = URL.resolve(regUrl.replace(/\/?$/, '/'), 'packages.json'); // TODO #12070 + const url = URL.resolve(ensureTrailingSlash(regUrl), 'packages.json'); const opts = getHostOpts(url); const res = (await http.getJson(url, opts)).body; const meta: RegistryMeta = { diff --git a/lib/datasource/sbt-package/index.ts b/lib/datasource/sbt-package/index.ts index dc92514efc43b0..bd34c2d1d94cc7 100644 --- a/lib/datasource/sbt-package/index.ts +++ b/lib/datasource/sbt-package/index.ts @@ -1,6 +1,7 @@ import { XmlDocument } from 'xmldoc'; import { logger } from '../../logger'; import { regEx } from '../../util/regex'; +import { ensureTrailingSlash } from '../../util/url'; import * as ivyVersioning from '../../versioning/ivy'; import { compare } from '../../versioning/maven/compare'; import { MAVEN_REPO } from '../maven/common'; @@ -14,8 +15,6 @@ export const defaultRegistryUrls = [MAVEN_REPO]; export const defaultVersioning = ivyVersioning.id; export const registryStrategy = 'hunt'; -const ensureTrailingSlash = (str: string): string => str.replace(/\/?$/, '/'); // TODO #12070 - export async function getArtifactSubdirs( searchRoot: string, artifact: string, diff --git a/lib/manager/dockerfile/extract.ts b/lib/manager/dockerfile/extract.ts index 778e9702efa502..64027d89270656 100644 --- a/lib/manager/dockerfile/extract.ts +++ b/lib/manager/dockerfile/extract.ts @@ -153,7 +153,7 @@ export function extractPackageFile(content: string): PackageFile | null { const stageNames: string[] = []; const fromMatches = content.matchAll( - /^[ \t]*FROM(?:\\\r?\n| |\t|#.*?\r?\n|[ \t]--[a-z]+=\S+?)*[ \t](?\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?\S+))?/gim // TODO #12070 complex for re2 has too many not supported groups + /^[ \t]*FROM(?:\\\r?\n| |\t|#.*?\r?\n|[ \t]--[a-z]+=\S+?)*[ \t](?\S+)(?:(?:\\\r?\n| |\t|#.*\r?\n)+as[ \t]+(?\S+))?/gim // TODO #12875 complex for re2 has too many not supported groups ); for (const fromMatch of fromMatches) { @@ -180,7 +180,7 @@ export function extractPackageFile(content: string): PackageFile | null { } const copyFromMatches = content.matchAll( - /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|[ \t]--[a-z]+=\w+?)*[ \t]--from=(?\S+)/gim // TODO #12070 complex for re2 has too many not supported groups + /^[ \t]*COPY(?:\\\r?\n| |\t|#.*\r?\n|[ \t]--[a-z]+=\w+?)*[ \t]--from=(?\S+)/gim // TODO #12875 complex for re2 has too many not supported groups ); for (const copyFromMatch of copyFromMatches) { diff --git a/lib/manager/npm/extract/index.ts b/lib/manager/npm/extract/index.ts index 4ed11b1940820b..6504c3e49f9aa4 100644 --- a/lib/manager/npm/extract/index.ts +++ b/lib/manager/npm/extract/index.ts @@ -108,7 +108,7 @@ export async function extractPackageFile( } else { npmrc = config.npmrc || ''; if (npmrc.length) { - npmrc = npmrc.replace(/\n?$/, '\n'); // TODO #12070 add \n to front when used with re2 + npmrc = npmrc.replace(/\n?$/, '\n'); // TODO #12875 add \n to front when used with re2 } if (repoNpmrc?.includes('package-lock')) { logger.debug('Stripping package-lock setting from .npmrc'); diff --git a/lib/manager/npm/extract/pnpm.ts b/lib/manager/npm/extract/pnpm.ts index 54be1d398bf686..a19666f83bf387 100644 --- a/lib/manager/npm/extract/pnpm.ts +++ b/lib/manager/npm/extract/pnpm.ts @@ -105,7 +105,7 @@ export async function detectPnpmWorkspaces( packageFilters !== null && matchesAnyPattern( packageFile, - packageFilters.map((filter) => filter.replace(/\/?$/, '/package.json')) // TODO #12070 + packageFilters.map((filter) => filter.replace(/\/?$/, '/package.json')) // TODO #12875 ); if (isPackageInWorkspace) { p.pnpmShrinkwrap = lockFilePath; diff --git a/lib/util/emoji.ts b/lib/util/emoji.ts index d7f1166ed5e36d..ae31076d336133 100644 --- a/lib/util/emoji.ts +++ b/lib/util/emoji.ts @@ -55,7 +55,7 @@ export function emojify(text: string): string { const emojiRegexSrc = [emojibaseEmojiRegex, mathiasBynensEmojiRegex()].map( ({ source }) => source ); -const emojiRegex = new RegExp(`(?:${emojiRegexSrc.join('|')})`, 'g'); // TODO #12070 cannot figure it out +const emojiRegex = new RegExp(`(?:${emojiRegexSrc.join('|')})`, 'g'); // TODO #12875 cannot figure it out const excludedModifiers = new Set([ '20E3', '200D', diff --git a/lib/util/http/gitea.ts b/lib/util/http/gitea.ts index 24d618fdeb2bef..110589be7d7fde 100644 --- a/lib/util/http/gitea.ts +++ b/lib/util/http/gitea.ts @@ -4,7 +4,7 @@ import { Http, HttpOptions, HttpResponse, InternalHttpOptions } from '.'; let baseUrl: string; export const setBaseUrl = (newBaseUrl: string): void => { - baseUrl = newBaseUrl.replace(/\/*$/, '/'); // TODO #12070 + baseUrl = newBaseUrl.replace(/\/*$/, '/'); // TODO #12875 }; export interface GiteaHttpOptions extends InternalHttpOptions { diff --git a/lib/util/url.ts b/lib/util/url.ts index 25a23c31f9d6c5..48ca4fdf141f91 100644 --- a/lib/util/url.ts +++ b/lib/util/url.ts @@ -15,7 +15,7 @@ export function ensurePathPrefix(url: string, prefix: string): string { } export function ensureTrailingSlash(url: string): string { - return url.replace(/\/?$/, '/'); // TODO #12070 adds slash at the front when re2 is used + return url.replace(/\/?$/, '/'); // TODO #12875 adds slash at the front when re2 is used } export function trimTrailingSlash(url: string): string { diff --git a/lib/versioning/ruby/index.ts b/lib/versioning/ruby/index.ts index a1e73b7617abbc..ce03799f00d6f4 100644 --- a/lib/versioning/ruby/index.ts +++ b/lib/versioning/ruby/index.ts @@ -136,7 +136,7 @@ const getNewValue = ({ ) .map( (element) => - element.replace(/(?\s*)$/, `${delimiter}$`) // TODO #12071 #12070 adds ' at front when re2 is used + element.replace(/(?\s*)$/, `${delimiter}$`) // TODO #12071 #12875 adds ' at front when re2 is used ) .join(','); } From 4a2cc3b356153c7a79c713fb8b542fe5d9261069 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 17:26:43 +0000 Subject: [PATCH 235/248] chore(deps): update github/codeql-action action to v1.0.25 (#12979) Co-authored-by: Renovate Bot --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2bf4724246631a..fa4a4c870605a8 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -26,7 +26,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@e095058bfa09de8070f94e98f5dc059531bc6235 # renovate: tag=v1.0.24 + uses: github/codeql-action/init@546b30f35ae5a3db0e0be1843008c2224f71c3b0 # renovate: tag=v1.0.25 with: config-file: ./.github/codeql/codeql-config.yml @@ -36,7 +36,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@e095058bfa09de8070f94e98f5dc059531bc6235 # renovate: tag=v1.0.24 + uses: github/codeql-action/autobuild@546b30f35ae5a3db0e0be1843008c2224f71c3b0 # renovate: tag=v1.0.25 # ℹī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -50,4 +50,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@e095058bfa09de8070f94e98f5dc059531bc6235 # renovate: tag=v1.0.24 + uses: github/codeql-action/analyze@546b30f35ae5a3db0e0be1843008c2224f71c3b0 # renovate: tag=v1.0.25 From 334e48909ad21dabeb512a0f04853f5e6bf6c22a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 19:09:18 +0100 Subject: [PATCH 236/248] chore(deps): update dependency jest-extended to v1.2.0 (#12974) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 340e76848c1816..c9a56f08b13295 100644 --- a/package.json +++ b/package.json @@ -265,7 +265,7 @@ "graphql": "15.7.2", "husky": "7.0.4", "jest": "27.3.1", - "jest-extended": "1.1.0", + "jest-extended": "1.2.0", "jest-github-actions-reporter": "1.0.3", "jest-junit": "13.0.0", "jest-mock-extended": "2.0.4", diff --git a/yarn.lock b/yarn.lock index 3f84d37ca9fd13..917e404831a559 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6769,10 +6769,10 @@ jest-environment-node@^27.4.2: jest-mock "^27.4.2" jest-util "^27.4.2" -jest-extended@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-1.1.0.tgz#85b6f33c3ca53c65087b34663d4118927e728db8" - integrity sha512-rC1U9N4SYSFEiHJP3H0ZSbVAARwnjzBOFoluuFYePATsOJaX7PMMNiM9svS4WTgSNCIIVT3RWlWy+Y4W3zLsjg== +jest-extended@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-1.2.0.tgz#6ef87d806bd9501a0aeae56fe8c7af73777987ed" + integrity sha512-KYc5DgD+/8viJSEKBzb1vRXe/rEEQUxEovBTdNEer9A6lzvHvhuyslM5tQFBz8TbLEkicCmsEcQF+4N7GiPTLg== dependencies: expect "^26.6.2" jest-diff "^27.2.5" From 3725f5be3adc06fc373b95ed6a93a3d04259b426 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 19:20:02 +0000 Subject: [PATCH 237/248] build(deps): update dependency simple-git to v2.47.1 (#12981) 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 c9a56f08b13295..9b93701894c21c 100644 --- a/package.json +++ b/package.json @@ -194,7 +194,7 @@ "semver-stable": "3.0.0", "semver-utils": "1.1.4", "shlex": "2.1.0", - "simple-git": "2.47.0", + "simple-git": "2.47.1", "slugify": "1.6.3", "traverse": "0.6.6", "tslib": "2.3.1", diff --git a/yarn.lock b/yarn.lock index 917e404831a559..1d36afaf29c0eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9684,10 +9684,10 @@ signale@^1.2.1: figures "^2.0.0" pkg-conf "^2.1.0" -simple-git@2.47.0: - version "2.47.0" - resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.47.0.tgz#9693b471de7911901f703b4c403fc3e8774cd9be" - integrity sha512-+HfCpqPBEZTPWiW9fPdbiPJDslM22MLqrktfzNKyI2pWaJa6DhfNVx4Mds04KZzVv5vjC9/ksw3y5gVf8ECWDg== +simple-git@2.47.1: + version "2.47.1" + resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.47.1.tgz#59a5c1af598b30b6234b98c9e22f8c01e5b7e06c" + integrity sha512-DF4rnBr4uzMQsreqxHg8t1wN4Pi3kj/shBVT1OO+aBkBnscCZ02tynKHc9cx3StNPnItHWAaoN31qkRNDhh5Ow== dependencies: "@kwsites/file-exists" "^1.1.1" "@kwsites/promise-deferred" "^1.1.1" From bcecc4cef6b732259b6e3ff4662d5ca88ebc2144 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 21:54:56 +0000 Subject: [PATCH 238/248] chore(deps): update jest monorepo to v27.4.0 (#12978) Co-authored-by: Renovate Bot --- package.json | 8 ++--- yarn.lock | 86 ++++++++++++++++++++++++++-------------------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 9b93701894c21c..ca78495c59c5ae 100644 --- a/package.json +++ b/package.json @@ -209,9 +209,9 @@ "devDependencies": { "@actions/core": "1.6.0", "@aws-sdk/client-s3": "3.41.0", - "@jest/globals": "27.3.1", - "@jest/reporters": "27.3.1", - "@jest/test-result": "27.3.1", + "@jest/globals": "27.4.0", + "@jest/reporters": "27.4.0", + "@jest/test-result": "27.4.0", "@ls-lint/ls-lint": "1.10.0", "@renovate/eslint-plugin": "https://github.com/renovatebot/eslint-plugin#v0.0.4", "@semantic-release/exec": "6.0.2", @@ -264,7 +264,7 @@ "glob": "7.2.0", "graphql": "15.7.2", "husky": "7.0.4", - "jest": "27.3.1", + "jest": "27.4.0", "jest-extended": "1.2.0", "jest-github-actions-reporter": "1.0.3", "jest-junit": "13.0.0", diff --git a/yarn.lock b/yarn.lock index 1d36afaf29c0eb..0de992970ea3c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2242,7 +2242,7 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.3.1", "@jest/console@^27.4.2": +"@jest/console@^27.4.0", "@jest/console@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.2.tgz#7a95612d38c007ddb528ee446fe5e5e785e685ce" integrity sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg== @@ -2254,7 +2254,7 @@ jest-util "^27.4.2" slash "^3.0.0" -"@jest/core@^27.3.1", "@jest/core@^27.4.3": +"@jest/core@^27.4.0", "@jest/core@^27.4.3": version "27.4.3" resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.3.tgz#9b9b34f4e6429a633085f476402aa2e3ce707877" integrity sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ== @@ -2288,7 +2288,7 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.3.1", "@jest/environment@^27.4.2": +"@jest/environment@^27.4.0", "@jest/environment@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.2.tgz#03efabce528dbb09bffd3ec7e39bb0f3f7475cc2" integrity sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw== @@ -2310,14 +2310,14 @@ jest-mock "^27.4.2" jest-util "^27.4.2" -"@jest/globals@27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.3.1.tgz#ce1dfb03d379237a9da6c1b99ecfaca1922a5f9e" - integrity sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg== +"@jest/globals@27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.0.tgz#2daa3ad0cb7e44ae7845b4de053866a6f0e051e8" + integrity sha512-jIkd2RSV18wvOqFx5climVkwONuxqNKD8jHMvIumj8+E0qqWqymBcWymidjbxmJ3L3Zr60l0lAJGKw0BstREeQ== dependencies: - "@jest/environment" "^27.3.1" - "@jest/types" "^27.2.5" - expect "^27.3.1" + "@jest/environment" "^27.4.0" + "@jest/types" "^27.4.0" + expect "^27.4.0" "@jest/globals@^27.4.2": version "27.4.2" @@ -2328,16 +2328,16 @@ "@jest/types" "^27.4.2" expect "^27.4.2" -"@jest/reporters@27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.3.1.tgz#28b5c1f5789481e23788048fa822ed15486430b9" - integrity sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w== +"@jest/reporters@27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.0.tgz#27d93c81f85f118d5fc08c5e7d5bfd5be44aa00e" + integrity sha512-QqIdI9WBH5tBwSHZ81FEZkt3h8fvw+zdV0YQrUtdEbJEBGV/AHgRsIP23sdD/ybLfRFpjZJEyWT+7dM4mxnPYQ== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.3.1" - "@jest/test-result" "^27.3.1" - "@jest/transform" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/console" "^27.4.0" + "@jest/test-result" "^27.4.0" + "@jest/transform" "^27.4.0" + "@jest/types" "^27.4.0" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -2349,10 +2349,10 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.0.2" - jest-haste-map "^27.3.1" - jest-resolve "^27.3.1" - jest-util "^27.3.1" - jest-worker "^27.3.1" + jest-haste-map "^27.4.0" + jest-resolve "^27.4.0" + jest-util "^27.4.0" + jest-worker "^27.4.0" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" @@ -2399,17 +2399,17 @@ graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@27.3.1": - version "27.3.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.3.1.tgz#89adee8b771877c69b3b8d59f52f29dccc300194" - integrity sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg== +"@jest/test-result@27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.0.tgz#5a42153c270e0c3988557c13e72517186a6c7bcb" + integrity sha512-/RiwMUC9pKK1E85CEflPvb4uE4Zo9JK2Iq3RbkbBoj4FkEASb/Zsqta8WGot2J1GxOk3rqdW513tfSDYQQJVpA== dependencies: - "@jest/console" "^27.3.1" - "@jest/types" "^27.2.5" + "@jest/console" "^27.4.0" + "@jest/types" "^27.4.0" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-result@^27.3.1", "@jest/test-result@^27.4.2": +"@jest/test-result@^27.4.0", "@jest/test-result@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.2.tgz#05fd4a5466ec502f3eae0b39dff2b93ea4d5d9ec" integrity sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA== @@ -2429,7 +2429,7 @@ jest-haste-map "^27.4.2" jest-runtime "^27.4.2" -"@jest/transform@^27.3.1", "@jest/transform@^27.4.2": +"@jest/transform@^27.4.0", "@jest/transform@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.2.tgz#459885e96de2e21fc68b8b371e90aa653966dd0d" integrity sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg== @@ -2461,7 +2461,7 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.0.6", "@jest/types@^27.2.5", "@jest/types@^27.4.2": +"@jest/types@^27.0.6", "@jest/types@^27.4.0", "@jest/types@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== @@ -5479,7 +5479,7 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -expect@^27.3.1, expect@^27.4.2: +expect@^27.4.0, expect@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.2.tgz#4429b0f7e307771d176de9bdf23229b101db6ef6" integrity sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg== @@ -6660,7 +6660,7 @@ jest-circus@^27.4.2: stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.3.1: +jest-cli@^27.4.0: version "27.4.3" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.3.tgz#89acba683b9f91c7a5e342e2ea13aa5414836a0d" integrity sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw== @@ -6796,7 +6796,7 @@ jest-github-actions-reporter@1.0.3: dependencies: "@actions/core" "^1.2.0" -jest-haste-map@^27.3.1, jest-haste-map@^27.4.2: +jest-haste-map@^27.4.0, jest-haste-map@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.2.tgz#7fc7d5e568cca704284f4850885b74a0b8b87587" integrity sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA== @@ -6957,7 +6957,7 @@ jest-resolve-dependencies@^27.4.2: jest-regex-util "^27.4.0" jest-snapshot "^27.4.2" -jest-resolve@^27.3.1, jest-resolve@^27.4.2: +jest-resolve@^27.4.0, jest-resolve@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.2.tgz#d3e4cbee7acb4a4f8c8bfc270767bec34d2aefaf" integrity sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg== @@ -7091,7 +7091,7 @@ jest-util@^26.0.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.0.0, jest-util@^27.3.1, jest-util@^27.4.2: +jest-util@^27.0.0, jest-util@^27.4.0, jest-util@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== @@ -7128,7 +7128,7 @@ jest-watcher@^27.4.2: jest-util "^27.4.2" string-length "^4.0.1" -jest-worker@^27.3.1, jest-worker@^27.4.2: +jest-worker@^27.4.0, jest-worker@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.2.tgz#0fb123d50955af1a450267787f340a1bf7e12bc4" integrity sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag== @@ -7137,14 +7137,14 @@ jest-worker@^27.3.1, jest-worker@^27.4.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@27.3.1: - version "27.3.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.3.1.tgz#b5bab64e8f56b6f7e275ba1836898b0d9f1e5c8a" - integrity sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng== +jest@27.4.0: + version "27.4.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.0.tgz#defb188c80e5f99d8f43398d334f97164a9a7aec" + integrity sha512-54SYE6EmGRoHS+9/OCspbb7tAD2WYAvBBXmny2Zp39/QgnNIWZD4KujhAZyRXHWASTBa9/WfXM2oekNBIOFV2A== dependencies: - "@jest/core" "^27.3.1" + "@jest/core" "^27.4.0" import-local "^3.0.2" - jest-cli "^27.3.1" + jest-cli "^27.4.0" js-tokens@^4.0.0: version "4.0.0" From dee805c3b167726a9372f3ba74ed7882ffc82301 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Dec 2021 23:20:40 +0100 Subject: [PATCH 239/248] chore(deps): update linters to v5.5.0 (#12982) Co-authored-by: Renovate Bot --- package.json | 4 +-- yarn.lock | 74 ++++++++++------------------------------------------ 2 files changed, 16 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index ca78495c59c5ae..a05bda89b4731d 100644 --- a/package.json +++ b/package.json @@ -248,8 +248,8 @@ "@types/traverse": "0.6.32", "@types/url-join": "4.0.1", "@types/xmldoc": "1.1.6", - "@typescript-eslint/eslint-plugin": "5.4.0", - "@typescript-eslint/parser": "5.4.0", + "@typescript-eslint/eslint-plugin": "5.5.0", + "@typescript-eslint/parser": "5.5.0", "aws-sdk-client-mock": "0.5.6", "conventional-changelog-conventionalcommits": "4.6.1", "cross-env": "7.0.3", diff --git a/yarn.lock b/yarn.lock index 0de992970ea3c8..9077f8357d87c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3452,13 +3452,13 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.4.0.tgz#05e711a2e7b68342661fde61bccbd1531c19521a" - integrity sha512-9/yPSBlwzsetCsGEn9j24D8vGQgJkOTr4oMLas/w886ZtzKIs1iyoqFrwsX2fqYEeUwsdBpC21gcjRGo57u0eg== +"@typescript-eslint/eslint-plugin@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz#12d5f47f127af089b985f3a205c0e34a812f8fce" + integrity sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA== dependencies: - "@typescript-eslint/experimental-utils" "5.4.0" - "@typescript-eslint/scope-manager" "5.4.0" + "@typescript-eslint/experimental-utils" "5.5.0" + "@typescript-eslint/scope-manager" "5.5.0" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -3466,19 +3466,7 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.4.0.tgz#238a7418d2da3b24874ba35385eb21cc61d2a65e" - integrity sha512-Nz2JDIQUdmIGd6p33A+naQmwfkU5KVTLb/5lTk+tLVTDacZKoGQisj8UCxk7onJcrgjIvr8xWqkYI+DbI3TfXg== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.4.0" - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/typescript-estree" "5.4.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/experimental-utils@^5.0.0": +"@typescript-eslint/experimental-utils@5.5.0", "@typescript-eslint/experimental-utils@^5.0.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz#3fe2514dc2f3cd95562206e4058435ea51df609e" integrity sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A== @@ -3490,24 +3478,16 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.4.0.tgz#3aa83ce349d66e39b84151f6d5464928044ca9e3" - integrity sha512-JoB41EmxiYpaEsRwpZEYAJ9XQURPFer8hpkIW9GiaspVLX8oqbqNM8P4EP8HOZg96yaALiLEVWllA2E8vwsIKw== +"@typescript-eslint/parser@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.5.0.tgz#a38070e225330b771074daa659118238793f7fcd" + integrity sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg== dependencies: - "@typescript-eslint/scope-manager" "5.4.0" - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/typescript-estree" "5.4.0" + "@typescript-eslint/scope-manager" "5.5.0" + "@typescript-eslint/types" "5.5.0" + "@typescript-eslint/typescript-estree" "5.5.0" debug "^4.3.2" -"@typescript-eslint/scope-manager@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.4.0.tgz#aaab08415f4a9cf32b870c7750ae8ba4607126a1" - integrity sha512-pRxFjYwoi8R+n+sibjgF9iUiAELU9ihPBtHzocyW8v8D8G8KeQvXTsW7+CBYIyTYsmhtNk50QPGLE3vrvhM5KA== - dependencies: - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/visitor-keys" "5.4.0" - "@typescript-eslint/scope-manager@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz#2b9f3672fa6cddcb4160e7e8b49ef1fd00f83c09" @@ -3516,29 +3496,11 @@ "@typescript-eslint/types" "5.5.0" "@typescript-eslint/visitor-keys" "5.5.0" -"@typescript-eslint/types@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.4.0.tgz#b1c130f4b381b77bec19696c6e3366f9781ce8f2" - integrity sha512-GjXNpmn+n1LvnttarX+sPD6+S7giO+9LxDIGlRl4wK3a7qMWALOHYuVSZpPTfEIklYjaWuMtfKdeByx0AcaThA== - "@typescript-eslint/types@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.5.0.tgz#fee61ae510e84ed950a53937a2b443e078107003" integrity sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg== -"@typescript-eslint/typescript-estree@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.4.0.tgz#fe524fb308973c68ebeb7428f3b64499a6ba5fc0" - integrity sha512-nhlNoBdhKuwiLMx6GrybPT3SFILm5Gij2YBdPEPFlYNFAXUJWX6QRgvi/lwVoadaQEFsizohs6aFRMqsXI2ewA== - dependencies: - "@typescript-eslint/types" "5.4.0" - "@typescript-eslint/visitor-keys" "5.4.0" - debug "^4.3.2" - globby "^11.0.4" - is-glob "^4.0.3" - semver "^7.3.5" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz#12f422698c1636bd0206086bbec9844c54625ebc" @@ -3552,14 +3514,6 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.4.0.tgz#09bc28efd3621f292fe88c86eef3bf4893364c8c" - integrity sha512-PVbax7MeE7tdLfW5SA0fs8NGVVr+buMPrcj+CWYWPXsZCH8qZ1THufDzbXm1xrZ2b2PA1iENJ0sRq5fuUtvsJg== - dependencies: - "@typescript-eslint/types" "5.4.0" - eslint-visitor-keys "^3.0.0" - "@typescript-eslint/visitor-keys@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz#4787586897b61f26068a3db5c50b3f5d254f9083" From 88d348650c490ef277b30b5ce8247c10fc32843f Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Tue, 7 Dec 2021 18:36:42 +0300 Subject: [PATCH 240/248] fix(github): Log fieldName when shrinking page size (#12990) --- lib/util/http/github.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util/http/github.ts b/lib/util/http/github.ts index 69e6718132c514..fa4bfbe04a87d5 100644 --- a/lib/util/http/github.ts +++ b/lib/util/http/github.ts @@ -365,7 +365,7 @@ export class GithubHttp extends Http { baseUrl === githubBaseUrl ) { logger.debug( - { optimalCount }, + { fieldName, optimalCount }, 'Successful GraphQL query with shrinked pagination size' ); } From a6601c095741c6ba5d208179c91952cd010b946c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Dec 2021 17:12:53 +0000 Subject: [PATCH 241/248] chore(deps): update jest monorepo to v27.4.2 (#12986) Co-authored-by: Renovate Bot --- package.json | 8 ++--- yarn.lock | 90 ++++++++++++---------------------------------------- 2 files changed, 24 insertions(+), 74 deletions(-) diff --git a/package.json b/package.json index a05bda89b4731d..e6cae8457ecb44 100644 --- a/package.json +++ b/package.json @@ -209,9 +209,9 @@ "devDependencies": { "@actions/core": "1.6.0", "@aws-sdk/client-s3": "3.41.0", - "@jest/globals": "27.4.0", - "@jest/reporters": "27.4.0", - "@jest/test-result": "27.4.0", + "@jest/globals": "27.4.2", + "@jest/reporters": "27.4.2", + "@jest/test-result": "27.4.2", "@ls-lint/ls-lint": "1.10.0", "@renovate/eslint-plugin": "https://github.com/renovatebot/eslint-plugin#v0.0.4", "@semantic-release/exec": "6.0.2", @@ -264,7 +264,7 @@ "glob": "7.2.0", "graphql": "15.7.2", "husky": "7.0.4", - "jest": "27.4.0", + "jest": "27.4.2", "jest-extended": "1.2.0", "jest-github-actions-reporter": "1.0.3", "jest-junit": "13.0.0", diff --git a/yarn.lock b/yarn.lock index 9077f8357d87c8..4e89e5fa42891a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2242,7 +2242,7 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.4.0", "@jest/console@^27.4.2": +"@jest/console@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.2.tgz#7a95612d38c007ddb528ee446fe5e5e785e685ce" integrity sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg== @@ -2254,7 +2254,7 @@ jest-util "^27.4.2" slash "^3.0.0" -"@jest/core@^27.4.0", "@jest/core@^27.4.3": +"@jest/core@^27.4.2", "@jest/core@^27.4.3": version "27.4.3" resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.3.tgz#9b9b34f4e6429a633085f476402aa2e3ce707877" integrity sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ== @@ -2288,7 +2288,7 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.4.0", "@jest/environment@^27.4.2": +"@jest/environment@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.2.tgz#03efabce528dbb09bffd3ec7e39bb0f3f7475cc2" integrity sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw== @@ -2310,16 +2310,7 @@ jest-mock "^27.4.2" jest-util "^27.4.2" -"@jest/globals@27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.0.tgz#2daa3ad0cb7e44ae7845b4de053866a6f0e051e8" - integrity sha512-jIkd2RSV18wvOqFx5climVkwONuxqNKD8jHMvIumj8+E0qqWqymBcWymidjbxmJ3L3Zr60l0lAJGKw0BstREeQ== - dependencies: - "@jest/environment" "^27.4.0" - "@jest/types" "^27.4.0" - expect "^27.4.0" - -"@jest/globals@^27.4.2": +"@jest/globals@27.4.2", "@jest/globals@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.2.tgz#56a402c5ebf22eba1d34e900772147f5126ea2d8" integrity sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew== @@ -2328,38 +2319,7 @@ "@jest/types" "^27.4.2" expect "^27.4.2" -"@jest/reporters@27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.0.tgz#27d93c81f85f118d5fc08c5e7d5bfd5be44aa00e" - integrity sha512-QqIdI9WBH5tBwSHZ81FEZkt3h8fvw+zdV0YQrUtdEbJEBGV/AHgRsIP23sdD/ybLfRFpjZJEyWT+7dM4mxnPYQ== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.4.0" - "@jest/test-result" "^27.4.0" - "@jest/transform" "^27.4.0" - "@jest/types" "^27.4.0" - "@types/node" "*" - 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.4.0" - jest-resolve "^27.4.0" - jest-util "^27.4.0" - jest-worker "^27.4.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - -"@jest/reporters@^27.4.2": +"@jest/reporters@27.4.2", "@jest/reporters@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.2.tgz#d3860c5d3f668fa1326ab2bf5989f774e5c03f04" integrity sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w== @@ -2399,17 +2359,7 @@ graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.0.tgz#5a42153c270e0c3988557c13e72517186a6c7bcb" - integrity sha512-/RiwMUC9pKK1E85CEflPvb4uE4Zo9JK2Iq3RbkbBoj4FkEASb/Zsqta8WGot2J1GxOk3rqdW513tfSDYQQJVpA== - dependencies: - "@jest/console" "^27.4.0" - "@jest/types" "^27.4.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-result@^27.4.0", "@jest/test-result@^27.4.2": +"@jest/test-result@27.4.2", "@jest/test-result@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.2.tgz#05fd4a5466ec502f3eae0b39dff2b93ea4d5d9ec" integrity sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA== @@ -2429,7 +2379,7 @@ jest-haste-map "^27.4.2" jest-runtime "^27.4.2" -"@jest/transform@^27.4.0", "@jest/transform@^27.4.2": +"@jest/transform@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.2.tgz#459885e96de2e21fc68b8b371e90aa653966dd0d" integrity sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg== @@ -2461,7 +2411,7 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.0.6", "@jest/types@^27.4.0", "@jest/types@^27.4.2": +"@jest/types@^27.0.6", "@jest/types@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== @@ -5433,7 +5383,7 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" -expect@^27.4.0, expect@^27.4.2: +expect@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.2.tgz#4429b0f7e307771d176de9bdf23229b101db6ef6" integrity sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg== @@ -6614,7 +6564,7 @@ jest-circus@^27.4.2: stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.4.0: +jest-cli@^27.4.2: version "27.4.3" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.3.tgz#89acba683b9f91c7a5e342e2ea13aa5414836a0d" integrity sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw== @@ -6750,7 +6700,7 @@ jest-github-actions-reporter@1.0.3: dependencies: "@actions/core" "^1.2.0" -jest-haste-map@^27.4.0, jest-haste-map@^27.4.2: +jest-haste-map@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.2.tgz#7fc7d5e568cca704284f4850885b74a0b8b87587" integrity sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA== @@ -6911,7 +6861,7 @@ jest-resolve-dependencies@^27.4.2: jest-regex-util "^27.4.0" jest-snapshot "^27.4.2" -jest-resolve@^27.4.0, jest-resolve@^27.4.2: +jest-resolve@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.2.tgz#d3e4cbee7acb4a4f8c8bfc270767bec34d2aefaf" integrity sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg== @@ -7045,7 +6995,7 @@ jest-util@^26.0.0: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.0.0, jest-util@^27.4.0, jest-util@^27.4.2: +jest-util@^27.0.0, jest-util@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== @@ -7082,7 +7032,7 @@ jest-watcher@^27.4.2: jest-util "^27.4.2" string-length "^4.0.1" -jest-worker@^27.4.0, jest-worker@^27.4.2: +jest-worker@^27.4.2: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.2.tgz#0fb123d50955af1a450267787f340a1bf7e12bc4" integrity sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag== @@ -7091,14 +7041,14 @@ jest-worker@^27.4.0, jest-worker@^27.4.2: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.0.tgz#defb188c80e5f99d8f43398d334f97164a9a7aec" - integrity sha512-54SYE6EmGRoHS+9/OCspbb7tAD2WYAvBBXmny2Zp39/QgnNIWZD4KujhAZyRXHWASTBa9/WfXM2oekNBIOFV2A== +jest@27.4.2: + version "27.4.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.2.tgz#4fb1211ad0b9955ef09a11b96684180a90638985" + integrity sha512-TAReynFYCfHNcrL+8Z74WPGafLFLF++bGkrpcsk6cO5G9S2VuJGhu2c44YFForMgF0GlYmtbpmeznkvZpNgTxg== dependencies: - "@jest/core" "^27.4.0" + "@jest/core" "^27.4.2" import-local "^3.0.2" - jest-cli "^27.4.0" + jest-cli "^27.4.2" js-tokens@^4.0.0: version "4.0.0" From 2a910ce18c3b57d96e083361f79179047c6ece00 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Dec 2021 21:22:00 +0100 Subject: [PATCH 242/248] chore(deps): update dependency type-fest to v2.7.0 (#12995) 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 e6cae8457ecb44..b04c4ea8b2690f 100644 --- a/package.json +++ b/package.json @@ -284,7 +284,7 @@ "tmp-promise": "3.0.3", "ts-jest": "27.0.7", "ts-node": "10.4.0", - "type-fest": "2.6.0", + "type-fest": "2.7.0", "typescript": "4.5.2", "unified": "9.2.2" }, diff --git a/yarn.lock b/yarn.lock index 4e89e5fa42891a..c1f3a3d2a880fc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10242,10 +10242,10 @@ type-detect@4.0.8, 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.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.6.0.tgz#e9f1e78c5f746ca97ccbb873c59aa16c3bf6b123" - integrity sha512-XN1FDGGtaSDA6CFsCW5iolTQqFsnJ+ZF6JqSz0SqXoh4F8GY0xqUv5RYnTilpmL+sOH8OH4FX8tf9YyAPM2LDA== +type-fest@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.7.0.tgz#6d58aa78d48f0968110a4ab1f75f563ae6cde572" + integrity sha512-gmfzrsfDuoQUpqteXPE1X8D2GdtEAhP+X9pdXj3xBbg86OO8ZtSTtJ9BVopDyWtdNuwbOXAYdluX4o/O65qebA== type-fest@^0.13.1: version "0.13.1" From 5437ac76af499fe336d3d2e8ef51e3bc4e8bf67f Mon Sep 17 00:00:00 2001 From: Honza Machala Date: Tue, 7 Dec 2021 22:50:57 +0100 Subject: [PATCH 243/248] feat: add @elastic/apm-agent-rum-js monorepo (#12996) --- lib/config/presets/internal/monorepo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index ef0c3460eba727..bc6f0b5c10d528 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -34,6 +34,7 @@ const repoGroups = { deno: 'https://github.com/denoland/deno', 'devextreme-reactive': 'https://github.com/DevExpress/devextreme-reactive', 'dnd-kit': 'https://github.com/clauderic/dnd-kit', + 'elastic-apm-agent-rum-js': 'https://github.com/elastic/apm-agent-rum-js', 'electron-forge': 'https://github.com/electron-userland/electron-forge', 'ember-decorators': 'https://github.com/ember-decorators/ember-decorators', 'graphql-modules': 'https://github.com/Urigo/graphql-modules', From 319223518661f52081c7921f7c8f7e81e9f681e4 Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Wed, 8 Dec 2021 07:18:00 +0300 Subject: [PATCH 244/248] fix(gradle): Handle scala version interpolation (#12989) --- lib/manager/gradle/shallow/parser.spec.ts | 1 + lib/manager/gradle/shallow/parser.ts | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/manager/gradle/shallow/parser.spec.ts b/lib/manager/gradle/shallow/parser.spec.ts index e828da74021093..d3b844772bbf73 100644 --- a/lib/manager/gradle/shallow/parser.spec.ts +++ b/lib/manager/gradle/shallow/parser.spec.ts @@ -50,6 +50,7 @@ describe('manager/gradle/shallow/parser', () => { ${'foo = "1.2.3"'} | ${'"foo:bar:$foo@@@"'} | ${null} ${'baz = "1.2.3"'} | ${'"foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }} ${'foo.bar = "1.2.3"'} | ${'"foo:bar:$foo.bar"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'foo.bar' }} + ${'foo = "1.2.3"'} | ${'"foo:bar_$foo:4.5.6"'} | ${{ depName: 'foo:bar_1.2.3', managerData: { fileReplacePosition: 28 } }} ${''} | ${'foo.bar = "foo:bar:1.2.3"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }} ${'baz = "1.2.3"'} | ${'foobar = "foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }} ${'baz = "1.2.3"'} | ${'group: "foo", name: "bar", version: baz'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }} diff --git a/lib/manager/gradle/shallow/parser.ts b/lib/manager/gradle/shallow/parser.ts index c906e834b8a2ca..f95b2443980fe3 100644 --- a/lib/manager/gradle/shallow/parser.ts +++ b/lib/manager/gradle/shallow/parser.ts @@ -160,6 +160,7 @@ function processDepString({ function processDepInterpolation({ tokenMap, variables, + packageFile: packageFileOrig, }: SyntaxHandlerInput): SyntaxHandlerOutput { const token = tokenMap.depInterpolation as StringInterpolation; const interpolationResult = interpolateString(token.children, variables); @@ -180,8 +181,18 @@ function processDepInterpolation({ } }); if (!dep.managerData) { + const lastToken = token.children[token.children.length - 1]; + if ( + lastToken.type === TokenType.String && + lastToken.value.startsWith(`:${dep.currentValue}`) + ) { + packageFile = packageFileOrig; + fileReplacePosition = lastToken.offset + 1; + delete dep.groupName; + } else { + dep.skipReason = SkipReason.ContainsVariable; + } dep.managerData = { fileReplacePosition, packageFile }; - dep.skipReason = SkipReason.ContainsVariable; } return { deps: [dep] }; } From 3f586efec6ed23d134b146b3e5a6cce638213efd Mon Sep 17 00:00:00 2001 From: Martin Herndl Date: Wed, 8 Dec 2021 09:21:41 +0100 Subject: [PATCH 245/248] feat(composer): support providers without a hash (#13000) --- .../__snapshots__/index.spec.ts.snap | 30 +++++++++++++++++++ lib/datasource/packagist/index.spec.ts | 28 +++++++++++++++++ lib/datasource/packagist/index.ts | 2 +- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/lib/datasource/packagist/__snapshots__/index.spec.ts.snap b/lib/datasource/packagist/__snapshots__/index.spec.ts.snap index 87a2107f708b40..c34ca81ee0da8d 100644 --- a/lib/datasource/packagist/__snapshots__/index.spec.ts.snap +++ b/lib/datasource/packagist/__snapshots__/index.spec.ts.snap @@ -700,3 +700,33 @@ Array [ }, ] `; + +exports[`datasource/packagist/index getReleases supports providers without a hash 1`] = ` +Object { + "homepage": "https://wordpress.org/plugins/1beyt/", + "registryUrl": "https://composer.renovatebot.com", + "releases": Array [ + Object { + "gitRef": "1.0", + "version": "1.0", + }, + Object { + "gitRef": "1.1", + "version": "1.1", + }, + Object { + "gitRef": "1.4", + "version": "1.4", + }, + Object { + "gitRef": "1.5", + "version": "1.5", + }, + Object { + "gitRef": "1.5.1", + "version": "1.5.1", + }, + ], + "sourceUrl": "https://plugins.svn.wordpress.org/1beyt/", +} +`; diff --git a/lib/datasource/packagist/index.spec.ts b/lib/datasource/packagist/index.spec.ts index a4e083e2d71349..edf010c4c9f06b 100644 --- a/lib/datasource/packagist/index.spec.ts +++ b/lib/datasource/packagist/index.spec.ts @@ -305,6 +305,34 @@ describe('datasource/packagist/index', () => { expect(res).not.toBeNull(); expect(httpMock.getTrace()).toMatchSnapshot(); }); + it('supports providers without a hash', async () => { + const packagesJson = { + packages: [], + 'providers-url': '/p/%package%.json', + providers: { + 'wpackagist-plugin/1337-rss-feed-made-for-sharing': { + sha256: null, + }, + 'wpackagist-plugin/1beyt': { + sha256: null, + }, + }, + }; + httpMock + .scope('https://composer.renovatebot.com') + .get('/packages.json') + .reply(200, packagesJson) + .get('/p/wpackagist-plugin/1beyt.json') + .reply(200, beytJson); + const res = await getPkgReleases({ + ...config, + datasource, + versioning, + depName: 'wpackagist-plugin/1beyt', + }); + expect(res).toMatchSnapshot(); + expect(res).not.toBeNull(); + }); it('handles providers miss', async () => { const packagesJson = { packages: [], diff --git a/lib/datasource/packagist/index.ts b/lib/datasource/packagist/index.ts index c515e1c01cae63..605662dcc3efa4 100644 --- a/lib/datasource/packagist/index.ts +++ b/lib/datasource/packagist/index.ts @@ -238,7 +238,7 @@ async function packageLookup( return includesPackages[name]; } let pkgUrl; - if (providerPackages?.[name]) { + if (name in providerPackages) { pkgUrl = URL.resolve( regUrl, providersUrl From 3a5ad66d5e255d7741a3b4b7dd74722ff6afa2de Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 8 Dec 2021 17:38:15 +0700 Subject: [PATCH 246/248] fix(manager/nuget): support package sources with whitespaces in keys (#12882) --- .../with-whitespaces/NuGet.config | 8 ++++++++ .../with-whitespaces/with-whitespaces.csproj | 12 +++++++++++ lib/manager/nuget/artifacts.ts | 3 ++- lib/manager/nuget/extract.spec.ts | 20 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 lib/manager/nuget/__fixtures__/with-whitespaces/NuGet.config create mode 100644 lib/manager/nuget/__fixtures__/with-whitespaces/with-whitespaces.csproj diff --git a/lib/manager/nuget/__fixtures__/with-whitespaces/NuGet.config b/lib/manager/nuget/__fixtures__/with-whitespaces/NuGet.config new file mode 100644 index 00000000000000..cc8abe128eb32c --- /dev/null +++ b/lib/manager/nuget/__fixtures__/with-whitespaces/NuGet.config @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/lib/manager/nuget/__fixtures__/with-whitespaces/with-whitespaces.csproj b/lib/manager/nuget/__fixtures__/with-whitespaces/with-whitespaces.csproj new file mode 100644 index 00000000000000..872e2011797349 --- /dev/null +++ b/lib/manager/nuget/__fixtures__/with-whitespaces/with-whitespaces.csproj @@ -0,0 +1,12 @@ + + + + netcoreapp3.1 + true + + + + + + + diff --git a/lib/manager/nuget/artifacts.ts b/lib/manager/nuget/artifacts.ts index a3b6fdeaab8d33..3ff382af536705 100644 --- a/lib/manager/nuget/artifacts.ts +++ b/lib/manager/nuget/artifacts.ts @@ -1,4 +1,5 @@ import { join } from 'path'; +import { quote } from 'shlex'; import { GlobalConfig } from '../../config/global'; import { TEMPORARY_ERROR } from '../../constants/error-messages'; import { id, parseRegistryUrl } from '../../datasource/nuget'; @@ -45,7 +46,7 @@ async function addSourceCmds( let addSourceCmd = `dotnet nuget add source ${registryInfo.feedUrl} --configfile ${nugetConfigFile}`; if (registry.name) { // Add name for registry, if known. - addSourceCmd += ` --name ${registry.name}`; + addSourceCmd += ` --name ${quote(registry.name)}`; } if (username && password) { // Add registry credentials from host rules, if configured. diff --git a/lib/manager/nuget/extract.spec.ts b/lib/manager/nuget/extract.spec.ts index e12e01825c8af8..d12fc9b4e69adb 100644 --- a/lib/manager/nuget/extract.spec.ts +++ b/lib/manager/nuget/extract.spec.ts @@ -132,6 +132,26 @@ describe('manager/nuget/extract', () => { ], }); }); + + it('handles NuGet.config with whitespaces in package source keys', async () => { + const packageFile = 'with-whitespaces/with-whitespaces.csproj'; + const contents = loadFixture(packageFile); + expect(await extractPackageFile(contents, packageFile, config)).toEqual({ + deps: [ + { + currentValue: '12.0.3', + datasource: 'nuget', + depName: 'Newtonsoft.Json', + depType: 'nuget', + registryUrls: [ + 'https://api.nuget.org/v3/index.json#protocolVersion=3', + 'https://my.myget.org/F/my/auth/guid/api/v3/index.json', + ], + }, + ], + }); + }); + it('ignores local feed in NuGet.config', async () => { const packageFile = 'with-local-feed-in-config-file/with-local-feed-in-config-file.csproj'; From 3fa21fbf8341893852a3e086631f21e667274246 Mon Sep 17 00:00:00 2001 From: Oleg Krivtsov Date: Wed, 8 Dec 2021 19:11:43 +0700 Subject: [PATCH 247/248] feat(workers/global): check git at startup (#12935) --- lib/util/git/index.spec.ts | 7 ++++++ lib/util/git/index.ts | 36 +++++++++++++++++++++++++++ lib/workers/global/initialize.spec.ts | 21 ++++++++++++++++ lib/workers/global/initialize.ts | 9 +++++++ 4 files changed, 73 insertions(+) create mode 100644 lib/workers/global/initialize.spec.ts diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts index 23dfe76acf5a0f..1b4e1282193ee7 100644 --- a/lib/util/git/index.spec.ts +++ b/lib/util/git/index.spec.ts @@ -94,6 +94,13 @@ describe('util/git/index', () => { await base.cleanup(); }); + describe('validateGitVersion()', () => { + it('has a git version greater or equal to the minimum required', async () => { + const res = await git.validateGitVersion(); + expect(res).toBeTrue(); + }); + }); + describe('checkoutBranch(branchName)', () => { it('sets the base branch as master', async () => { await expect(git.checkoutBranch(defaultBranch)).resolves.not.toThrow(); diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts index 58f5450373eef1..c9130d17189973 100644 --- a/lib/util/git/index.ts +++ b/lib/util/git/index.ts @@ -16,6 +16,7 @@ import { import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; import type { GitProtocol } from '../../types/git'; +import { api as semverCoerced } from '../../versioning/semver-coerced'; import { Limit, incLimitedValue } from '../../workers/global/limits'; import { regEx } from '../regex'; import { parseGitAuthor } from './author'; @@ -143,6 +144,41 @@ let gitInitialized: boolean; let privateKeySet = false; +export const GIT_MINIMUM_VERSION = '2.33.0'; // git show-current + +export async function validateGitVersion(): Promise { + let version: string; + const globalGit = Git(); + try { + const raw = await globalGit.raw(['--version']); + for (const section of raw.split(/\s+/)) { + if (semverCoerced.isVersion(section)) { + version = section; + break; + } + } + } catch (err) /* istanbul ignore next */ { + logger.error({ err }, 'Error fetching git version'); + return false; + } + // istanbul ignore if + if ( + !( + version && + (version === GIT_MINIMUM_VERSION || + semverCoerced.isGreaterThan(version, GIT_MINIMUM_VERSION)) + ) + ) { + logger.error( + { detectedVersion: version, minimumVersion: GIT_MINIMUM_VERSION }, + 'Git version needs upgrading' + ); + return false; + } + logger.debug(`Found valid git version: ${version}`); + return true; +} + async function fetchBranchCommits(): Promise { config.branchCommits = {}; const opts = ['ls-remote', '--heads', config.url]; diff --git a/lib/workers/global/initialize.spec.ts b/lib/workers/global/initialize.spec.ts new file mode 100644 index 00000000000000..27df1dca77973a --- /dev/null +++ b/lib/workers/global/initialize.spec.ts @@ -0,0 +1,21 @@ +import { git } from '../../../test/util'; +import type { RenovateConfig } from '../../config/types'; +import { globalInitialize } from './initialize'; + +jest.mock('../../util/git'); + +describe('workers/global/initialize', () => { + describe('checkVersions()', () => { + it('throws if invalid version', async () => { + const config: RenovateConfig = {}; + git.validateGitVersion.mockResolvedValueOnce(false); + await expect(globalInitialize(config)).rejects.toThrow(); + }); + + it('returns if valid git version', async () => { + const config: RenovateConfig = {}; + git.validateGitVersion.mockResolvedValueOnce(true); + await expect(globalInitialize(config)).toResolve(); + }); + }); +}); diff --git a/lib/workers/global/initialize.ts b/lib/workers/global/initialize.ts index c82fc237bbd24c..fa374d1a5ac0bf 100644 --- a/lib/workers/global/initialize.ts +++ b/lib/workers/global/initialize.ts @@ -6,6 +6,7 @@ import { logger } from '../../logger'; import { initPlatform } from '../../platform'; import * as packageCache from '../../util/cache/package'; import { setEmojiConfig } from '../../util/emoji'; +import { validateGitVersion } from '../../util/git'; import { Limit, setMaxLimit } from './limits'; async function setDirectories(input: AllConfig): Promise { @@ -34,10 +35,18 @@ function limitCommitsPerRun(config: RenovateConfig): void { setMaxLimit(Limit.Commits, limit); } +async function checkVersions(): Promise { + const validGitVersion = await validateGitVersion(); + if (!validGitVersion) { + throw new Error('Init: git version needs upgrading'); + } +} + export async function globalInitialize( config_: RenovateConfig ): Promise { let config = config_; + await checkVersions(); config = await initPlatform(config); config = await setDirectories(config); packageCache.init(config); From b7b0d0441fe77b8f29f625c5be4a1dc132ec8f9a Mon Sep 17 00:00:00 2001 From: Sebastian Poxhofer Date: Wed, 8 Dec 2021 13:21:37 +0100 Subject: [PATCH 248/248] feat(presets): add opentelemetry-go monorepo (#13008) Co-authored-by: Rhys Arkins --- lib/config/presets/internal/monorepo.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/config/presets/internal/monorepo.ts b/lib/config/presets/internal/monorepo.ts index bc6f0b5c10d528..191f501cf4f83b 100644 --- a/lib/config/presets/internal/monorepo.ts +++ b/lib/config/presets/internal/monorepo.ts @@ -149,6 +149,7 @@ const repoGroups = { 'opentelemetry-js': 'https://github.com/open-telemetry/opentelemetry-js', 'opentelemetry-dotnet': 'https://github.com/open-telemetry/opentelemetry-dotnet', + 'opentelemetry-go': 'https://github.com/open-telemetry/opentelemetry-go', picassojs: 'https://github.com/qlik-oss/picasso.js', pnpjs: 'https://github.com/pnp/pnpjs', playwright: 'https://github.com/Microsoft/playwright',