From 4c89de48b437c25542bf949c728133953de874f2 Mon Sep 17 00:00:00 2001 From: "Micael Levi L. Cavalcante" Date: Tue, 6 Feb 2024 14:22:33 -0400 Subject: [PATCH] feat: check only the major slice on nestjs dep mismatch --- actions/info.action.ts | 35 ++++++++++++++++---------------- test/actions/info.action.spec.ts | 21 +++++++++---------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/actions/info.action.ts b/actions/info.action.ts index b6d458883..d38bfcb84 100644 --- a/actions/info.action.ts +++ b/actions/info.action.ts @@ -30,7 +30,7 @@ interface NestDependencyWarnings { export class InfoAction extends AbstractAction { private manager!: AbstractPackageManager; - // Nest dependencies whitelist used to compare minor version + // Nest dependencies whitelist used to compare the major version private warningMessageDependenciesWhiteList = [ '@nestjs/core', '@nestjs/common', @@ -131,15 +131,15 @@ export class InfoAction extends AbstractAction { displayWarningMessage(nestDependencies: NestDependency[]) { try { const warnings = this.buildNestVersionsWarningMessage(nestDependencies); - const minorVersions = Object.keys(warnings); - if (minorVersions.length > 0) { + const majorVersions = Object.keys(warnings); + if (majorVersions.length > 0) { console.info('\r'); console.info(chalk.yellow('[Warnings]')); console.info( - 'The following packages are not in the same minor version', + 'The following packages are not in the same major version', ); console.info('This could lead to runtime errors'); - minorVersions.forEach((version) => { + majorVersions.forEach((version) => { console.info(chalk.bold(`* Under version ${version}`)); warnings[version].forEach(({ packageName, value }) => { console.info(`- ${packageName} ${value}`); @@ -161,24 +161,23 @@ export class InfoAction extends AbstractAction { buildNestVersionsWarningMessage( nestDependencies: NestDependency[], ): NestDependencyWarnings { - const unsortedWarnings: NestDependencyWarnings = - nestDependencies.reduce( - (acc, { name, packageName, value }) => { + const unsortedWarnings = + nestDependencies.reduce( + (depWarningsGroup, { name, packageName, value }) => { if (!this.warningMessageDependenciesWhiteList.includes(packageName)) { - return acc; + return depWarningsGroup; } - const cleanedValue = value.replace(/[^\d.]/g, ''); - const [major, minor] = cleanedValue.split('.'); - const minorVersion = `${major}.${minor}`; - acc[minorVersion] = [ - ...(acc[minorVersion] || []), + const [major,] = value.replace(/[^\d.]/g, '').split('.', 1); + const minimumVersion = major; + depWarningsGroup[minimumVersion] = [ + ...(depWarningsGroup[minimumVersion] || []), { name, packageName, value }, ]; - return acc; + return depWarningsGroup; }, - {}, + Object.create(null) as NestDependencyWarnings, ); const unsortedMinorVersions = Object.keys(unsortedWarnings); @@ -201,12 +200,12 @@ export class InfoAction extends AbstractAction { }, ); - return sortedMinorVersions.reduce( + return sortedMinorVersions.reduce( (warnings, minorVersion) => { warnings[minorVersion] = unsortedWarnings[minorVersion]; return warnings; }, - {}, + Object.create(null) as NestDependencyWarnings, ); } diff --git a/test/actions/info.action.spec.ts b/test/actions/info.action.spec.ts index 259a4090f..e5ff61077 100644 --- a/test/actions/info.action.spec.ts +++ b/test/actions/info.action.spec.ts @@ -69,7 +69,7 @@ describe('InfoAction', () => { ]; const result = infoAction.buildNestVersionsWarningMessage(dependencies); const expected = { - '1.2': [ + '1': [ { packageName: '@nestjs/core', name: 'core', value: '1.2.3' }, { packageName: '@nestjs/common', name: 'common', value: '1.2.4' }, { @@ -93,7 +93,7 @@ describe('InfoAction', () => { value: '1.2.4', }, ], - '2.1': [ + '2': [ { packageName: '@nestjs/platform-ws', name: 'platform-ws', @@ -131,21 +131,22 @@ describe('InfoAction', () => { name: 'platform-socket.io', value: '1.2$$.4', }, - { - name: 'platform-socket.io', - packageName: '@nestjs/platform-socket.io', - value: '2.0.1', - }, { packageName: '@nestjs/websockets', name: 'websockets', value: '^2.*&1.0', }, + + { + name: 'platform-socket.io', + packageName: '@nestjs/platform-socket.io', + value: '2.0.1', + }, ]; const result = infoAction.buildNestVersionsWarningMessage(dependencies); const expected = { - '2.1': [ + '2': [ { name: 'platform-fastify', packageName: '@nestjs/platform-fastify', @@ -156,15 +157,13 @@ describe('InfoAction', () => { name: 'websockets', value: '^2.*&1.0', }, - ], - '2.0': [ { name: 'platform-socket.io', packageName: '@nestjs/platform-socket.io', value: '2.0.1', }, ], - '1.2': [ + '1': [ { name: 'schematics', packageName: '@nestjs/schematics',