From 51655007fba450a6e64e36576dfbc262ea672f96 Mon Sep 17 00:00:00 2001 From: ocavue Date: Tue, 28 Apr 2026 00:36:12 +1000 Subject: [PATCH 1/3] fix(upgrade): fix incorrect typings --- packages/upgrade/tsconfig.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/upgrade/tsconfig.json b/packages/upgrade/tsconfig.json index 2341647f4266..5ce0f1d88e0d 100644 --- a/packages/upgrade/tsconfig.json +++ b/packages/upgrade/tsconfig.json @@ -5,11 +5,10 @@ "rootDir": "./src", "allowJs": true, "emitDeclarationOnly": false, - "noEmit": true, "target": "ES2022", "module": "ES2022", "moduleResolution": "Bundler", "outDir": "./dist", - "declarationDir": "./dist/types" + "declarationDir": "./dist", } } From 6e83814f3c4bab4ae6d574faf8bb4a17fed847b0 Mon Sep 17 00:00:00 2001 From: ocavue Date: Tue, 28 Apr 2026 00:42:51 +1000 Subject: [PATCH 2/3] fix files --- packages/upgrade/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/upgrade/package.json b/packages/upgrade/package.json index ba827c9e01e4..83ba51656496 100644 --- a/packages/upgrade/package.json +++ b/packages/upgrade/package.json @@ -24,8 +24,9 @@ "typecheck:tests": "tsc --build tsconfig.test.json" }, "files": [ - "dist", - "upgrade.js" + "dist/**/*.js", + "dist/**/*.mjs", + "upgrade.mjs" ], "//a": "MOST PACKAGES SHOULD GO IN DEV_DEPENDENCIES! THEY WILL BE BUNDLED.", "//b": "DEPENDENCIES IS FOR UNBUNDLED PACKAGES", From 47915d17a5fcef2370a187789ab733c54b120d03 Mon Sep 17 00:00:00 2001 From: ocavue Date: Tue, 28 Apr 2026 01:17:17 +1000 Subject: [PATCH 3/3] Fix the type --- packages/upgrade/test/install.test.ts | 88 ++++++++++++++++----------- packages/upgrade/tsconfig.json | 2 +- 2 files changed, 55 insertions(+), 35 deletions(-) diff --git a/packages/upgrade/test/install.test.ts b/packages/upgrade/test/install.test.ts index 2e2a661fa2de..d9168db0e28e 100644 --- a/packages/upgrade/test/install.test.ts +++ b/packages/upgrade/test/install.test.ts @@ -7,17 +7,25 @@ import { setup, type ShellFunction } from './test-utils.ts'; const tmpUrl = pathToFileURL(tmpdir()); +type Context = Parameters[0]; + describe('install', () => { const fixture = setup(); - const ctx = { - cwd: '', + const ctx: Context = { + cwd: tmpUrl, version: 'latest', - packageManager: 'npm', + packageManager: { name: 'npm', agent: 'npm' }, dryRun: true, + // @ts-expect-error: fake `prompt` callback for testing + prompt: async () => ({ proceed: true }), + exit: (): never => { + return undefined as never; + }, + packages: [], }; it('up to date', async () => { - const context = { + const context: Context = { ...ctx, packages: [ { @@ -32,7 +40,7 @@ describe('install', () => { }); it('patch', async () => { - const context = { + const context: Context = { ...ctx, packages: [ { @@ -47,7 +55,7 @@ describe('install', () => { }); it('minor', async () => { - const context = { + const context: Context = { ...ctx, packages: [ { @@ -63,15 +71,17 @@ describe('install', () => { it('major (reject)', async () => { let prompted = false; - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, - prompt: () => { + // @ts-expect-error: fake `prompt` callback for testing + prompt: async () => { prompted = true; return { proceed: false }; }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { @@ -93,15 +103,17 @@ describe('install', () => { it('major (accept)', async () => { let prompted = false; - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, - prompt: () => { + // @ts-expect-error: fake `prompt` callback for testing + prompt: async () => { prompted = true; return { proceed: true }; }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { @@ -123,15 +135,17 @@ describe('install', () => { it('multiple major', async () => { let prompted = false; - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, - prompt: () => { + // @ts-expect-error: fake `prompt` callback for testing + prompt: async () => { prompted = true; return { proceed: true }; }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { @@ -165,15 +179,17 @@ describe('install', () => { it('current patch minor major', async () => { let prompted = false; - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, - prompt: () => { + // @ts-expect-error: fake `prompt` callback for testing + prompt: async () => { prompted = true; return { proceed: true }; }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { @@ -224,14 +240,15 @@ describe('install', () => { return { stdout: '', stderr: '', exitCode: 0 }; }); - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, dryRun: false, cwd: tmpUrl, packageManager: { name: 'npm', agent: 'npm' }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { @@ -263,14 +280,15 @@ describe('install', () => { throw new Error('npm ERR! some other error'); }); - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, dryRun: false, cwd: tmpUrl, packageManager: { name: 'npm', agent: 'npm' }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { @@ -295,14 +313,15 @@ describe('install', () => { throw new Error('npm ERR! peer dependencies conflict'); }); - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, dryRun: false, cwd: tmpUrl, packageManager: { name: 'npm', agent: 'npm' }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { @@ -335,14 +354,15 @@ describe('install', () => { throw new Error('pnpm ERR! peer dependencies conflict'); }); - let exitCode; - const context = { + let exitCode: number | undefined; + const context: Context = { ...ctx, dryRun: false, cwd: tmpUrl, packageManager: { name: 'pnpm', agent: 'pnpm' }, - exit: (code: number) => { + exit: (code: number): never => { exitCode = code; + return undefined as never; }, packages: [ { diff --git a/packages/upgrade/tsconfig.json b/packages/upgrade/tsconfig.json index 5ce0f1d88e0d..d2a92ae5b3e5 100644 --- a/packages/upgrade/tsconfig.json +++ b/packages/upgrade/tsconfig.json @@ -9,6 +9,6 @@ "module": "ES2022", "moduleResolution": "Bundler", "outDir": "./dist", - "declarationDir": "./dist", + "declarationDir": "./dist" } }