diff --git a/packages/npm-dependencies-validation/package.json b/packages/npm-dependencies-validation/package.json index 67d8cd0f..d5ba2c43 100644 --- a/packages/npm-dependencies-validation/package.json +++ b/packages/npm-dependencies-validation/package.json @@ -31,11 +31,11 @@ "dependencies": { "fs-extra": "10.0.0", "lodash": "4.17.21", - "semver": "7.3.5" + "semver": "^7.6.3" }, "devDependencies": { "@types/fs-extra": "^9.0.13", - "@types/semver": "^7.3.9", + "@types/semver": "^7.5.8", "type-fest": "^2.11.1" } } diff --git a/packages/npm-dependencies-validation/src/depIssuesFinder.ts b/packages/npm-dependencies-validation/src/depIssuesFinder.ts index 8b611fc5..6c4c9628 100644 --- a/packages/npm-dependencies-validation/src/depIssuesFinder.ts +++ b/packages/npm-dependencies-validation/src/depIssuesFinder.ts @@ -10,6 +10,7 @@ import { PackageJsonDeps, SemVerRange, } from "./types"; +import { retrieveDistTags } from "./utils/npmUtil"; const NO_ISSUES = undefined; const PKG_JSON_DEFAULT_DEPS: PackageJsonDeps = { @@ -136,11 +137,23 @@ async function validateMismatchDep(opts: { return NO_ISSUES; } - if (!satisfies(actualVersion, opts.expectedVerRange)) { + let expectedVerRange = opts.expectedVerRange; + let isIssie = false; + if (!satisfies(actualVersion, expectedVerRange)) { + // assume it's a disttag, attempt to get the referenced version + expectedVerRange = await retrieveDistTags(opts); + if ( + expectedVerRange === opts.expectedVerRange || + !satisfies(actualVersion, expectedVerRange) + ) { + isIssie = true; + } + } + if (isIssie) { return { type: "mismatch" as "mismatch", name: opts.depName, - expected: opts.expectedVerRange, + expected: expectedVerRange, actual: actualVersion, isDev: opts.isDev, }; diff --git a/packages/npm-dependencies-validation/src/utils/npmUtil.ts b/packages/npm-dependencies-validation/src/utils/npmUtil.ts index c97bd29a..b2dd61ee 100644 --- a/packages/npm-dependencies-validation/src/utils/npmUtil.ts +++ b/packages/npm-dependencies-validation/src/utils/npmUtil.ts @@ -1,6 +1,9 @@ import { ChildProcessWithoutNullStreams, spawn } from "child_process"; -import { NpmCommandConfig, OutputChannel } from "../types"; +import { NpmCommandConfig, OutputChannel, SemVerRange } from "../types"; import { print } from "../logger"; +import { EOL } from "os"; +import { dirname } from "path"; +import { noop } from "lodash"; export function getNPM(): string { return /^win/.test(process.platform) ? "npm.cmd" : "npm"; @@ -43,3 +46,57 @@ function executeSpawn( const { commandArgs, cwd } = config; return spawn(getNPM(), [...commandArgs, ...additionalArgs], { cwd }); } + +function runNpmCommand(args: string[], cwd: string): Promise { + let output = ""; + const outputChannel: Partial = { + appendLine: (data: string) => (output += data), + show: noop, + }; + return invokeNPMCommand( + { commandArgs: args, cwd }, + outputChannel as OutputChannel + ) + .catch(() => output) + .then(() => output); +} + +// this is in memory cache for repo's disttags metadata that used to resolve the expected version range +const distTagsMap = new Map>(); + +export async function retrieveDistTags(opts: { + depPkgJsonPath: string; + depName: string; + expectedVerRange: SemVerRange; +}): Promise { + const { depName, expectedVerRange } = opts; + if (!distTagsMap.has(depName)) { + const output = await runNpmCommand( + ["dist-tags", "ls", depName], + dirname(opts.depPkgJsonPath) + ); + const distTags = new Map(); + distTagsMap.set(depName, distTags); + output + .split(EOL) + .map((line) => line.trim()) + .filter((line) => { + return line.includes(":") && !/npm\s+[warn|err]/i.test(line); + }) + .forEach((line) => { + const [tag, version] = line.split(":"); + distTags.set(tag, version.trim()); + }); + } + return distTagsMap.get(depName)!.get(expectedVerRange) ?? expectedVerRange; +} + +// TODO: consider to uncomment it to clear distTagsMap if it gets too big +// // using a large interval to reduce memory usage +// /* istanbul ignore next -- TCO of testing this setInterval is too high*/ +// setInterval(() => { +// distTagsMap.clear(); +// // without .unref(), the interval would keep the Node.js process alive indefinitely. +// // By calling .unref(), you allow the process to exit naturally if no other events are pending, +// // even if the interval is still set to run periodically. +// }, 15 * 60 * 1000).unref(); diff --git a/packages/npm-dependencies-validation/test/packages-samples/positive/mismatch_deps/node_modules/webpack/package.json b/packages/npm-dependencies-validation/test/packages-samples/positive/mismatch_deps/node_modules/webpack/package.json new file mode 100644 index 00000000..c51f2703 --- /dev/null +++ b/packages/npm-dependencies-validation/test/packages-samples/positive/mismatch_deps/node_modules/webpack/package.json @@ -0,0 +1,5 @@ +{ + "name": "webpack", + "version": "1.15.0" + } + \ No newline at end of file diff --git a/packages/npm-dependencies-validation/test/packages-samples/positive/mismatch_deps/package.json b/packages/npm-dependencies-validation/test/packages-samples/positive/mismatch_deps/package.json index f28f5780..c2aa5e01 100644 --- a/packages/npm-dependencies-validation/test/packages-samples/positive/mismatch_deps/package.json +++ b/packages/npm-dependencies-validation/test/packages-samples/positive/mismatch_deps/package.json @@ -2,7 +2,8 @@ "name": "mismatch-dep", "version": "1.0.0", "dependencies": { - "mismatched": "3.3.3" + "mismatched": "3.3.3", + "webpack": "legacy" }, "devDependencies": { "range-parser": "~1.2.1" diff --git a/packages/npm-dependencies-validation/test/utils/npmUtil.spec.ts b/packages/npm-dependencies-validation/test/utils/npmUtil.spec.ts index 2a0629c0..af18e4fa 100644 --- a/packages/npm-dependencies-validation/test/utils/npmUtil.spec.ts +++ b/packages/npm-dependencies-validation/test/utils/npmUtil.spec.ts @@ -3,7 +3,11 @@ import { resolve } from "path"; import { noop } from "lodash"; import { createSandbox, SinonSpy } from "sinon"; import { OutputChannel } from "../../src/types"; -import { getNPM, invokeNPMCommand } from "../../src/utils/npmUtil"; +import { + getNPM, + invokeNPMCommand, + retrieveDistTags, +} from "../../src/utils/npmUtil"; import { npmSpawnTestTimeout } from "../config"; describe("npmUtil unit test", () => { @@ -67,4 +71,36 @@ describe("npmUtil unit test", () => { expect(getNPM()).to.be.equal("npm"); }); }); + + describe("retrieveDistTags", () => { + it("not cached, disttags found", async () => { + expect( + await retrieveDistTags({ + depPkgJsonPath: __dirname, + depName: "webpack", + expectedVerRange: "legacy", + }) + ).be.equal("1.15.0"); + }); + + it("cached, disttags not found", async () => { + expect( + await retrieveDistTags({ + depPkgJsonPath: __dirname, + depName: "webpack", + expectedVerRange: "webpack-1", + }) + ).be.equal("webpack-1"); + }); + + it("not existed, disttags not found", async () => { + expect( + await retrieveDistTags({ + depPkgJsonPath: __dirname, + depName: "not-existing", + expectedVerRange: "next", + }) + ).be.equal("next"); + }); + }); }); diff --git a/packages/vscode-dependencies-validation/package.json b/packages/vscode-dependencies-validation/package.json index 709c9c2a..69e077bb 100644 --- a/packages/vscode-dependencies-validation/package.json +++ b/packages/vscode-dependencies-validation/package.json @@ -71,7 +71,7 @@ }, "dependencies": { "@sap-devx/npm-dependencies-validation": "^1.8.3", - "@vscode-logging/wrapper": "1.0.1", + "@vscode-logging/wrapper": "2.0.0", "fs-extra": "10.0.0", "jsonc-parser": "3.0.0", "lodash": "^4.17.21", @@ -81,7 +81,7 @@ "devDependencies": { "@types/fs-extra": "^9.0.13", "@types/proxyquire": "^1.3.28", - "@vscode-logging/types": "0.1.4", + "@vscode-logging/types": "2.0.0", "jest-mock-vscode": "^0.1.3", "proxyquire": "2.1.3", "vscode-uri": "^3.0.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3cdca2d2..8247e96f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,15 +312,15 @@ importers: specifier: 4.17.21 version: 4.17.21 semver: - specifier: 7.3.5 - version: 7.3.5 + specifier: ^7.6.3 + version: 7.6.3 devDependencies: '@types/fs-extra': specifier: ^9.0.13 version: 9.0.13 '@types/semver': - specifier: ^7.3.9 - version: 7.3.9 + specifier: ^7.5.8 + version: 7.5.8 type-fest: specifier: ^2.11.1 version: 2.11.1 @@ -331,8 +331,8 @@ importers: specifier: ^1.8.3 version: link:../npm-dependencies-validation '@vscode-logging/wrapper': - specifier: 1.0.1 - version: 1.0.1 + specifier: 2.0.0 + version: 2.0.0 fs-extra: specifier: 10.0.0 version: 10.0.0 @@ -356,8 +356,8 @@ importers: specifier: ^1.3.28 version: 1.3.28 '@vscode-logging/types': - specifier: 0.1.4 - version: 0.1.4 + specifier: 2.0.0 + version: 2.0.0 jest-mock-vscode: specifier: ^0.1.3 version: 0.1.3 @@ -456,7 +456,7 @@ packages: '@babel/traverse': 7.23.6 '@babel/types': 7.16.0 convert-source-map: 1.8.0 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.0 semver: 6.3.0 @@ -682,7 +682,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.6 '@babel/types': 7.23.6 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -1036,7 +1036,7 @@ packages: npm-package-arg: 8.1.5 p-map: 4.0.0 pacote: 11.3.5 - semver: 7.5.2 + semver: 7.6.3 transitivePeerDependencies: - bluebird - supports-color @@ -1067,7 +1067,7 @@ packages: p-map-series: 2.1.0 p-waterfall: 2.1.1 read-package-tree: 5.3.1 - semver: 7.5.2 + semver: 7.6.3 dev: true /@lerna/changed@4.0.0: @@ -1172,7 +1172,7 @@ packages: npm-package-arg: 8.1.5 npmlog: 4.1.2 pify: 5.0.0 - semver: 7.5.2 + semver: 7.6.3 dev: true /@lerna/create-symlink@4.0.0: @@ -1200,7 +1200,7 @@ packages: p-reduce: 2.1.0 pacote: 11.3.5 pify: 5.0.0 - semver: 7.5.2 + semver: 7.6.3 slash: 3.0.0 validate-npm-package-license: 3.0.4 validate-npm-package-name: 3.0.0 @@ -1307,7 +1307,7 @@ packages: engines: {node: '>= 10.18.0'} dependencies: '@lerna/child-process': 4.0.0 - semver: 7.5.2 + semver: 7.6.3 dev: true /@lerna/import@4.0.0: @@ -1479,7 +1479,7 @@ packages: '@lerna/validation-error': 4.0.0 npm-package-arg: 8.1.5 npmlog: 4.1.2 - semver: 7.5.2 + semver: 7.6.3 dev: true /@lerna/package@4.0.0: @@ -1495,7 +1495,7 @@ packages: resolution: {integrity: sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==} engines: {node: '>= 10.18.0'} dependencies: - semver: 7.5.2 + semver: 7.6.3 dev: true /@lerna/profiler@4.0.0: @@ -1564,7 +1564,7 @@ packages: p-map: 4.0.0 p-pipe: 3.1.0 pacote: 11.3.5 - semver: 7.5.2 + semver: 7.6.3 transitivePeerDependencies: - bluebird - supports-color @@ -1695,7 +1695,7 @@ packages: p-pipe: 3.1.0 p-reduce: 2.1.0 p-waterfall: 2.1.1 - semver: 7.5.2 + semver: 7.6.3 slash: 3.0.0 temp-write: 4.0.0 write-json-file: 4.3.0 @@ -1762,7 +1762,7 @@ packages: resolution: {integrity: sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==} dependencies: '@gar/promisify': 1.1.2 - semver: 7.5.2 + semver: 7.6.3 dev: true /@npmcli/git@2.1.0: @@ -1774,7 +1774,7 @@ packages: npm-pick-manifest: 6.1.1 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.5.2 + semver: 7.6.3 which: 2.0.2 transitivePeerDependencies: - bluebird @@ -2189,8 +2189,8 @@ packages: resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==} dev: true - /@types/semver@7.3.9: - resolution: {integrity: sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/send@0.17.1: @@ -2261,7 +2261,7 @@ packages: functional-red-black-tree: 1.0.1 ignore: 5.1.9 regexpp: 3.2.0 - semver: 7.5.2 + semver: 7.6.3 tsutils: 3.21.0(typescript@4.5.2) typescript: 4.5.2 transitivePeerDependencies: @@ -2333,7 +2333,7 @@ packages: debug: 4.3.4 globby: 11.0.4 is-glob: 4.0.3 - semver: 7.5.2 + semver: 7.6.3 tsutils: 3.21.0(typescript@4.5.2) typescript: 4.5.2 transitivePeerDependencies: @@ -2389,7 +2389,6 @@ packages: /@vscode-logging/types@2.0.0: resolution: {integrity: sha512-P42r5SPYeJKgMDYb5Ez9rjPlpnGEZ1eDFVjT0azxueaJ65iE259hpROmvSPUd80HAALn9/59L+CgcGLmwZcCmg==} - dev: false /@vscode-logging/wrapper@1.0.1: resolution: {integrity: sha512-eyi5MdIXC0qO1YMhC+tYH+J8pN5RCwRoGmSUsjxoibqAEk0Cv4esgG5kH2aAh576pvVeGNLlqAaNyThfH86sKg==} @@ -2622,7 +2621,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -2630,7 +2629,7 @@ packages: resolution: {integrity: sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==} engines: {node: '>= 8.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) depd: 1.1.2 humanize-ms: 1.2.1 transitivePeerDependencies: @@ -4359,7 +4358,7 @@ packages: optionator: 0.9.1 progress: 2.0.3 regexpp: 3.2.0 - semver: 7.5.2 + semver: 7.6.3 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 table: 6.7.3 @@ -4836,7 +4835,7 @@ packages: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: false @@ -4845,7 +4844,7 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 @@ -4854,7 +4853,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 @@ -5297,7 +5296,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -5337,7 +5336,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -5462,7 +5461,7 @@ packages: promzard: 0.3.0 read: 1.0.7 read-package-json: 4.1.1 - semver: 7.5.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 validate-npm-package-name: 3.0.0 dev: true @@ -6083,7 +6082,7 @@ packages: normalize-package-data: 3.0.3 npm-package-arg: 8.1.5 npm-registry-fetch: 11.0.0 - semver: 7.5.2 + semver: 7.6.3 ssri: 8.0.1 transitivePeerDependencies: - bluebird @@ -6144,7 +6143,7 @@ packages: resolution: {integrity: sha1-L19Fq5HjMhYjT9U62rZo607AmTs=} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -6154,7 +6153,7 @@ packages: resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 parse-json: 5.2.0 strip-bom: 4.0.0 type-fest: 0.6.0 @@ -6316,7 +6315,7 @@ packages: fecha: 4.2.1 ms: 2.1.3 safe-stable-stringify: 2.4.2 - triple-beam: 1.3.0 + triple-beam: 1.4.1 dev: false /longest@2.0.1: @@ -6814,7 +6813,7 @@ packages: npmlog: 4.1.2 request: 2.88.2 rimraf: 3.0.2 - semver: 7.5.2 + semver: 7.6.3 tar: 6.1.11 which: 2.0.2 dev: true @@ -6865,7 +6864,7 @@ packages: dependencies: hosted-git-info: 4.0.2 is-core-module: 2.8.0 - semver: 7.5.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 dev: true @@ -6895,7 +6894,7 @@ packages: resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} engines: {node: '>=10'} dependencies: - semver: 7.5.2 + semver: 7.6.3 dev: true /npm-lifecycle@3.1.5: @@ -6920,7 +6919,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.0.2 - semver: 7.5.2 + semver: 7.6.3 validate-npm-package-name: 3.0.0 dev: true @@ -6941,7 +6940,7 @@ packages: npm-install-checks: 4.0.0 npm-normalize-package-bin: 1.0.1 npm-package-arg: 8.1.5 - semver: 7.5.2 + semver: 7.6.3 dev: true /npm-registry-fetch@11.0.0: @@ -7310,7 +7309,7 @@ packages: resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 hasha: 5.2.2 lodash.flattendeep: 4.4.0 release-zalgo: 1.0.0 @@ -8077,6 +8076,7 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true /semver@7.5.2: resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} @@ -8084,12 +8084,12 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: false /semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - dev: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -8281,7 +8281,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) socks: 2.6.1 transitivePeerDependencies: - supports-color @@ -8292,7 +8292,7 @@ packages: engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) socks: 2.6.1 transitivePeerDependencies: - supports-color @@ -8339,7 +8339,7 @@ packages: dev: false /source-map@0.5.7: - resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} dev: true @@ -8475,7 +8475,7 @@ packages: deprecated: 2.x is no longer supported. Please upgrade to 3.x or higher. dependencies: date-format: 2.1.0 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -8486,7 +8486,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.4 + debug: 4.3.6(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -8731,7 +8731,7 @@ packages: resolution: {integrity: sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 is-stream: 2.0.1 make-dir: 3.1.0 temp-dir: 1.0.0 @@ -9498,7 +9498,7 @@ packages: dependencies: logform: 2.4.2 readable-stream: 2.3.7 - triple-beam: 1.3.0 + triple-beam: 1.4.1 dev: false /winston-transport@4.5.0: @@ -9618,7 +9618,7 @@ packages: engines: {node: '>=8.3'} dependencies: detect-indent: 6.1.0 - graceful-fs: 4.2.8 + graceful-fs: 4.2.11 is-plain-obj: 2.1.0 make-dir: 3.1.0 sort-keys: 4.2.0