From 2f93f220973c32e4188986463787fe9acb9b03eb Mon Sep 17 00:00:00 2001 From: Alan Schio <6757777+schirrel@users.noreply.github.com> Date: Wed, 19 Mar 2025 17:13:00 -0400 Subject: [PATCH 1/8] fix(cli): module add install full version based on major only --- packages/nuxi/src/commands/module/add.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/nuxi/src/commands/module/add.ts b/packages/nuxi/src/commands/module/add.ts index 2086604df..409111858 100644 --- a/packages/nuxi/src/commands/module/add.ts +++ b/packages/nuxi/src/commands/module/add.ts @@ -305,6 +305,11 @@ async function resolveModule(moduleName: string, cwd: string): Promise version.startsWith(pkgVersion as string)) || pkgVersion; + } + const pkg = pkgDetails.versions[pkgVersion] const pkgDependencies = Object.assign( From 402c25df8b99ddf6cb968930186f5075e2cfec5a Mon Sep 17 00:00:00 2001 From: Alan Schio <6757777+schirrel@users.noreply.github.com> Date: Wed, 19 Mar 2025 17:13:53 -0400 Subject: [PATCH 2/8] test(cli): add test for module add install full version based on major only --- .../test/unit/commands/module/add.spec.ts | 53 +++++++++++++++++-- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/packages/nuxi/test/unit/commands/module/add.spec.ts b/packages/nuxi/test/unit/commands/module/add.spec.ts index 12f7199c0..b75036137 100644 --- a/packages/nuxi/test/unit/commands/module/add.spec.ts +++ b/packages/nuxi/test/unit/commands/module/add.spec.ts @@ -6,6 +6,7 @@ import * as runCommands from '../../../../src/run' const updateConfig = vi.fn(() => Promise.resolve()) const addDependency = vi.fn(() => Promise.resolve()) +let v3 = '3.0.0' interface CommandsType { subCommands: { // biome-ignore lint/correctness/noEmptyPattern: @@ -36,13 +37,41 @@ function applyMocks() { }, } }) + vi.mock('ofetch', async () => { + return { + $fetch: vi.fn(() => Promise.resolve({ + 'name': '@nuxt/content', + 'npm': '@nuxt/content', + devDependencies: { + nuxt: v3 + }, + 'dist-tags': { latest: v3 }, + versions: { + [v3]: { + devDependencies: { + nuxt: v3 + } + }, + '2.9.0':{ + devDependencies: { + nuxt: v3 + }, + }, + '2.13.1' :{ + devDependencies: { + nuxt: v3 + } + } + } + })) + } + }) } describe('module add', () => { - let v3: string beforeAll(async () => { - v3 = await fetch('https://registry.npmjs.org/@nuxt/content') - .then(r => r.json()) - .then(r => r['dist-tags'].latest) + const response = await fetch('https://registry.npmjs.org/@nuxt/content'); + const json = await response.json(); + v3 = json['dist-tags'].latest; }) applyMocks() vi.spyOn(runCommands, 'runCommand').mockImplementation(vi.fn()) @@ -105,4 +134,20 @@ describe('module add', () => { installPeerDependencies: true, }) }) + + it('should convert major onlly version to full semver', async () => { + const addCommand = await (commands as CommandsType).subCommands.add() + await addCommand.setup({ + args: { + cwd: '/fake-dir', + _: ['content@2'], + }, + }) + + expect(addDependency).toHaveBeenCalledWith(['@nuxt/content@2.13.1'], { + cwd: '/fake-dir', + dev: true, + installPeerDependencies: true, + }) + }) }) From 1bde08c87b08ecd3889b6b06b66af817c0a27c09 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 19 Mar 2025 21:22:48 +0000 Subject: [PATCH 3/8] [autofix.ci] apply automated fixes --- packages/nuxi/src/commands/module/add.ts | 8 ++-- .../test/unit/commands/module/add.spec.ts | 40 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/nuxi/src/commands/module/add.ts b/packages/nuxi/src/commands/module/add.ts index 409111858..68eeceb8b 100644 --- a/packages/nuxi/src/commands/module/add.ts +++ b/packages/nuxi/src/commands/module/add.ts @@ -306,10 +306,10 @@ async function resolveModule(moduleName: string, cwd: string): Promise version.startsWith(pkgVersion as string)) || pkgVersion; - } - + if (pkgVersion && pkgVersion.length === 1) { + pkgVersion = Object.keys(pkgDetails.versions)?.findLast(version => version.startsWith(pkgVersion as string)) || pkgVersion + } + const pkg = pkgDetails.versions[pkgVersion] const pkgDependencies = Object.assign( diff --git a/packages/nuxi/test/unit/commands/module/add.spec.ts b/packages/nuxi/test/unit/commands/module/add.spec.ts index b75036137..448adb285 100644 --- a/packages/nuxi/test/unit/commands/module/add.spec.ts +++ b/packages/nuxi/test/unit/commands/module/add.spec.ts @@ -42,36 +42,36 @@ function applyMocks() { $fetch: vi.fn(() => Promise.resolve({ 'name': '@nuxt/content', 'npm': '@nuxt/content', - devDependencies: { - nuxt: v3 + 'devDependencies': { + nuxt: v3, }, 'dist-tags': { latest: v3 }, - versions: { + 'versions': { [v3]: { - devDependencies: { - nuxt: v3 - } - }, - '2.9.0':{ - devDependencies: { - nuxt: v3 + devDependencies: { + nuxt: v3, + }, + }, + '2.9.0': { + devDependencies: { + nuxt: v3, + }, + }, + '2.13.1': { + devDependencies: { + nuxt: v3, + }, }, }, - '2.13.1' :{ - devDependencies: { - nuxt: v3 - } - } - } - })) + })), } }) } describe('module add', () => { beforeAll(async () => { - const response = await fetch('https://registry.npmjs.org/@nuxt/content'); - const json = await response.json(); - v3 = json['dist-tags'].latest; + const response = await fetch('https://registry.npmjs.org/@nuxt/content') + const json = await response.json() + v3 = json['dist-tags'].latest }) applyMocks() vi.spyOn(runCommands, 'runCommand').mockImplementation(vi.fn()) From c734d48482935e3de64cc3e603c1a311344fabf9 Mon Sep 17 00:00:00 2001 From: Alan Schio <6757777+schirrel@users.noreply.github.com> Date: Thu, 20 Mar 2025 06:58:16 -0400 Subject: [PATCH 4/8] fix(cli): update to handle not full semver instead of only major --- packages/nuxi/src/commands/module/add.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/nuxi/src/commands/module/add.ts b/packages/nuxi/src/commands/module/add.ts index 68eeceb8b..0b56a1dcb 100644 --- a/packages/nuxi/src/commands/module/add.ts +++ b/packages/nuxi/src/commands/module/add.ts @@ -305,10 +305,10 @@ async function resolveModule(moduleName: string, cwd: string): Promise version.startsWith(pkgVersion as string)) || pkgVersion - } + // if not a full x.y.z version is provided, search for the latest version that starts with that version + if(pkgVersion && pkgVersion.split('.').length < 3) { + pkgVersion = Object.keys(pkgDetails.versions)?.findLast(version => version.startsWith(pkgVersion as string)) || pkgVersion; + } const pkg = pkgDetails.versions[pkgVersion] From fe3cfb251a688c745ebb044a7fe394d663d9535e Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 10:58:45 +0000 Subject: [PATCH 5/8] [autofix.ci] apply automated fixes --- packages/nuxi/src/commands/module/add.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/nuxi/src/commands/module/add.ts b/packages/nuxi/src/commands/module/add.ts index 0b56a1dcb..3f51a1f06 100644 --- a/packages/nuxi/src/commands/module/add.ts +++ b/packages/nuxi/src/commands/module/add.ts @@ -306,9 +306,9 @@ async function resolveModule(moduleName: string, cwd: string): Promise version.startsWith(pkgVersion as string)) || pkgVersion; - } + if (pkgVersion && pkgVersion.split('.').length < 3) { + pkgVersion = Object.keys(pkgDetails.versions)?.findLast(version => version.startsWith(pkgVersion as string)) || pkgVersion + } const pkg = pkgDetails.versions[pkgVersion] From 9e30ed84394dcba7e0cfdf7efe840722e6251b37 Mon Sep 17 00:00:00 2001 From: Alan Schio <6757777+schirrel@users.noreply.github.com> Date: Thu, 20 Mar 2025 06:58:53 -0400 Subject: [PATCH 6/8] test(cli): update test to handle not semver to semver conversion --- .../test/unit/commands/module/add.spec.ts | 63 ++++++++++++------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/packages/nuxi/test/unit/commands/module/add.spec.ts b/packages/nuxi/test/unit/commands/module/add.spec.ts index 448adb285..b42e2f344 100644 --- a/packages/nuxi/test/unit/commands/module/add.spec.ts +++ b/packages/nuxi/test/unit/commands/module/add.spec.ts @@ -42,36 +42,41 @@ function applyMocks() { $fetch: vi.fn(() => Promise.resolve({ 'name': '@nuxt/content', 'npm': '@nuxt/content', - 'devDependencies': { - nuxt: v3, + devDependencies: { + nuxt: v3 }, 'dist-tags': { latest: v3 }, - 'versions': { + versions: { [v3]: { - devDependencies: { - nuxt: v3, - }, - }, - '2.9.0': { - devDependencies: { - nuxt: v3, - }, + devDependencies: { + nuxt: v3 + } + }, + '3.1.1':{ + devDependencies: { + nuxt: v3 }, - '2.13.1': { - devDependencies: { - nuxt: v3, - }, + }, + '2.9.0':{ + devDependencies: { + nuxt: v3 }, }, - })), + '2.13.1' :{ + devDependencies: { + nuxt: v3 + } + } + } + })) } }) } describe('module add', () => { beforeAll(async () => { - const response = await fetch('https://registry.npmjs.org/@nuxt/content') - const json = await response.json() - v3 = json['dist-tags'].latest + const response = await fetch('https://registry.npmjs.org/@nuxt/content'); + const json = await response.json(); + v3 = json['dist-tags'].latest; }) applyMocks() vi.spyOn(runCommands, 'runCommand').mockImplementation(vi.fn()) @@ -135,7 +140,7 @@ describe('module add', () => { }) }) - it('should convert major onlly version to full semver', async () => { + it('should convert major only version to full semver', async () => { const addCommand = await (commands as CommandsType).subCommands.add() await addCommand.setup({ args: { @@ -149,5 +154,21 @@ describe('module add', () => { dev: true, installPeerDependencies: true, }) - }) + }); + + it('should convert not full version to full semver', async () => { + const addCommand = await (commands as CommandsType).subCommands.add() + await addCommand.setup({ + args: { + cwd: '/fake-dir', + _: ['content@3.1'], + }, + }) + + expect(addDependency).toHaveBeenCalledWith(['@nuxt/content@3.1.1'], { + cwd: '/fake-dir', + dev: true, + installPeerDependencies: true, + }) + }); }) From 02f2987401760d66283515cd8fa59668666c3f74 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 10:59:27 +0000 Subject: [PATCH 7/8] [autofix.ci] apply automated fixes --- .../test/unit/commands/module/add.spec.ts | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/nuxi/test/unit/commands/module/add.spec.ts b/packages/nuxi/test/unit/commands/module/add.spec.ts index b42e2f344..c40d06058 100644 --- a/packages/nuxi/test/unit/commands/module/add.spec.ts +++ b/packages/nuxi/test/unit/commands/module/add.spec.ts @@ -42,41 +42,41 @@ function applyMocks() { $fetch: vi.fn(() => Promise.resolve({ 'name': '@nuxt/content', 'npm': '@nuxt/content', - devDependencies: { - nuxt: v3 + 'devDependencies': { + nuxt: v3, }, 'dist-tags': { latest: v3 }, - versions: { + 'versions': { [v3]: { - devDependencies: { - nuxt: v3 - } - }, - '3.1.1':{ - devDependencies: { - nuxt: v3 + devDependencies: { + nuxt: v3, + }, }, - }, - '2.9.0':{ - devDependencies: { - nuxt: v3 + '3.1.1': { + devDependencies: { + nuxt: v3, + }, + }, + '2.9.0': { + devDependencies: { + nuxt: v3, + }, + }, + '2.13.1': { + devDependencies: { + nuxt: v3, + }, }, }, - '2.13.1' :{ - devDependencies: { - nuxt: v3 - } - } - } - })) + })), } }) } describe('module add', () => { beforeAll(async () => { - const response = await fetch('https://registry.npmjs.org/@nuxt/content'); - const json = await response.json(); - v3 = json['dist-tags'].latest; + const response = await fetch('https://registry.npmjs.org/@nuxt/content') + const json = await response.json() + v3 = json['dist-tags'].latest }) applyMocks() vi.spyOn(runCommands, 'runCommand').mockImplementation(vi.fn()) @@ -154,7 +154,7 @@ describe('module add', () => { dev: true, installPeerDependencies: true, }) - }); + }) it('should convert not full version to full semver', async () => { const addCommand = await (commands as CommandsType).subCommands.add() @@ -170,5 +170,5 @@ describe('module add', () => { dev: true, installPeerDependencies: true, }) - }); + }) }) From 6544184ef173a6db4adf850f5be97703a5291748 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Fri, 21 Mar 2025 13:41:46 +0000 Subject: [PATCH 8/8] refactor: use `semver` to resolve version --- packages/nuxi/src/commands/module/add.ts | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/packages/nuxi/src/commands/module/add.ts b/packages/nuxi/src/commands/module/add.ts index 3f51a1f06..16a52953c 100644 --- a/packages/nuxi/src/commands/module/add.ts +++ b/packages/nuxi/src/commands/module/add.ts @@ -289,7 +289,7 @@ async function resolveModule(moduleName: string, cwd: string): Promise version.startsWith(pkgVersion as string)) || pkgVersion + // fully resolve the version + if (pkgDetails['dist-tags']?.[version]) { + version = pkgDetails['dist-tags'][version] + } + else { + version = Object.keys(pkgDetails.versions)?.findLast(v => satisfies(v, version)) || version } - const pkg = pkgDetails.versions[pkgVersion] + const pkg = pkgDetails.versions[version!] const pkgDependencies = Object.assign( pkg.dependencies || {}, @@ -337,9 +335,9 @@ async function resolveModule(moduleName: string, cwd: string): Promise