diff --git a/packages/upgrade/package.json b/packages/upgrade/package.json index bf1758e4133f..2209c26100f6 100644 --- a/packages/upgrade/package.json +++ b/packages/upgrade/package.json @@ -20,7 +20,8 @@ "build": "astro-scripts build \"src/index.ts\" --bundle && tsc", "build:ci": "astro-scripts build \"src/index.ts\" --bundle", "dev": "astro-scripts dev \"src/**/*.ts\"", - "test": "astro-scripts test \"test/**/*.test.js\"" + "test": "astro-scripts test \"test/**/*.test.ts\"", + "typecheck:tests": "tsc -p tsconfig.test.json" }, "files": [ "dist", diff --git a/packages/upgrade/test/context.test.js b/packages/upgrade/test/context.test.ts similarity index 100% rename from packages/upgrade/test/context.test.js rename to packages/upgrade/test/context.test.ts diff --git a/packages/upgrade/test/install.test.js b/packages/upgrade/test/install.test.ts similarity index 94% rename from packages/upgrade/test/install.test.js rename to packages/upgrade/test/install.test.ts index 23b000758bfc..5a5777b845ae 100644 --- a/packages/upgrade/test/install.test.js +++ b/packages/upgrade/test/install.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os'; import { describe, it, mock } from 'node:test'; import { pathToFileURL } from 'node:url'; import { install } from '../dist/index.js'; -import { setup } from './utils.js'; +import { setup, type ShellFunction } from './utils.ts'; const tmpUrl = pathToFileURL(tmpdir()); @@ -70,7 +70,7 @@ describe('install', () => { prompted = true; return { proceed: false }; }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ @@ -100,7 +100,7 @@ describe('install', () => { prompted = true; return { proceed: true }; }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ @@ -130,7 +130,7 @@ describe('install', () => { prompted = true; return { proceed: true }; }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ @@ -172,7 +172,7 @@ describe('install', () => { prompted = true; return { proceed: true }; }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ @@ -215,7 +215,7 @@ describe('install', () => { }); it('npm peer dependency error retry with legacy-peer-deps', async () => { - const mockShell = mock.fn(async () => { + const mockShell = mock.fn(async () => { if (mockShell.mock.callCount() === 0) { // First call fails with peer dependency error throw new Error('npm ERR! peer dependencies conflict'); @@ -230,7 +230,7 @@ describe('install', () => { dryRun: false, cwd: tmpUrl, packageManager: { name: 'npm', agent: 'npm' }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ @@ -259,7 +259,7 @@ describe('install', () => { }); it('npm non-peer dependency error does not retry', async () => { - const mockShell = mock.fn(async () => { + const mockShell = mock.fn(async () => { throw new Error('npm ERR! some other error'); }); @@ -269,7 +269,7 @@ describe('install', () => { dryRun: false, cwd: tmpUrl, packageManager: { name: 'npm', agent: 'npm' }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ @@ -290,7 +290,7 @@ describe('install', () => { }); it('npm peer dependency error retry fails on second attempt', async () => { - const mockShell = mock.fn(async () => { + const mockShell = mock.fn(async () => { // Both calls fail with peer dependency errors throw new Error('npm ERR! peer dependencies conflict'); }); @@ -301,7 +301,7 @@ describe('install', () => { dryRun: false, cwd: tmpUrl, packageManager: { name: 'npm', agent: 'npm' }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ @@ -331,7 +331,7 @@ describe('install', () => { }); it('pnpm peer dependency error does not retry', async () => { - const mockShell = mock.fn(async () => { + const mockShell = mock.fn(async () => { throw new Error('pnpm ERR! peer dependencies conflict'); }); @@ -341,7 +341,7 @@ describe('install', () => { dryRun: false, cwd: tmpUrl, packageManager: { name: 'pnpm', agent: 'pnpm' }, - exit: (code) => { + exit: (code: number) => { exitCode = code; }, packages: [ diff --git a/packages/upgrade/test/utils.js b/packages/upgrade/test/utils.ts similarity index 68% rename from packages/upgrade/test/utils.js rename to packages/upgrade/test/utils.ts index 20063ec53255..b5aa1c25aabc 100644 --- a/packages/upgrade/test/utils.js +++ b/packages/upgrade/test/utils.ts @@ -2,12 +2,21 @@ import { before, beforeEach } from 'node:test'; import { stripVTControlCharacters } from 'node:util'; import { setStdout } from '../dist/index.js'; +export type ShellFunction = ( + command: string, + flags: string[], +) => Promise<{ + stdout: string; + stderr: string; + exitCode: number; +}>; + export function setup() { - const ctx = { messages: [] }; + const ctx: { messages: string[] } = { messages: [] }; before(() => { setStdout( Object.assign({}, process.stdout, { - write(buf) { + write(buf: string | Uint8Array) { ctx.messages.push(stripVTControlCharacters(String(buf)).trim()); return true; }, @@ -25,7 +34,7 @@ export function setup() { length() { return ctx.messages.length; }, - hasMessage(content) { + hasMessage(content: string) { return !!ctx.messages.find((msg) => msg.includes(content)); }, }; diff --git a/packages/upgrade/test/verify.test.js b/packages/upgrade/test/verify.test.ts similarity index 100% rename from packages/upgrade/test/verify.test.js rename to packages/upgrade/test/verify.test.ts diff --git a/packages/upgrade/tsconfig.test.json b/packages/upgrade/tsconfig.test.json new file mode 100644 index 000000000000..c94db9d8553c --- /dev/null +++ b/packages/upgrade/tsconfig.test.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["test/**/*.ts"], + "exclude": ["test/fixtures/**"], + "compilerOptions": { + "noEmit": true, + "allowJs": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "rewriteRelativeImportExtensions": true + }, + "references": [{ "path": "../astro/tsconfig.test.json" }] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2aba4345a3e3..7867b4d32a99 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1921,18 +1921,6 @@ importers: specifier: ^5.54.0 version: 5.55.3 - packages/astro/test/fixtures/alias-tsconfig-baseurl-only: - dependencies: - '@astrojs/svelte': - specifier: workspace:* - version: link:../../../../integrations/svelte - astro: - specifier: workspace:* - version: link:../../.. - svelte: - specifier: ^5.54.0 - version: 5.55.3 - packages/astro/test/fixtures/alias-tsconfig-no-baseurl: dependencies: astro: @@ -2447,12 +2435,6 @@ importers: specifier: ^4.2.2 version: 4.2.2 - packages/astro/test/fixtures/astro-sitemap-rss: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/astro-slot-with-client: dependencies: '@astrojs/preact': @@ -2637,12 +2619,6 @@ importers: specifier: workspace:* version: link:../../.. - packages/astro/test/fixtures/config-path: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/config-vite: dependencies: astro: @@ -2730,12 +2706,6 @@ importers: specifier: workspace:* version: link:../../.. - packages/astro/test/fixtures/content-collections-cache-invalidation: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/content-collections-empty-dir: dependencies: astro: @@ -2766,12 +2736,6 @@ importers: specifier: ^4.3.6 version: 4.3.6 - packages/astro/test/fixtures/content-collections-same-contents: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/content-collections-type-inference: dependencies: astro: @@ -3191,12 +3155,6 @@ importers: specifier: workspace:* version: link:../../.. - packages/astro/test/fixtures/custom-500-middleware: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/custom-assets-name: dependencies: '@astrojs/node': @@ -3320,12 +3278,6 @@ importers: specifier: workspace:* version: link:../../.. - packages/astro/test/fixtures/feature-support-message-suppresion: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/fetch: dependencies: '@astrojs/preact': @@ -3380,12 +3332,6 @@ importers: specifier: workspace:* version: link:../../.. - packages/astro/test/fixtures/head-injection: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/hmr-markdown: dependencies: astro: @@ -3597,24 +3543,12 @@ importers: specifier: workspace:* version: link:../../.. - packages/astro/test/fixtures/middleware-sequence-request-clone: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/middleware-sequence-rewrite: dependencies: astro: specifier: workspace:* version: link:../../.. - packages/astro/test/fixtures/middleware-ssg: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/middleware-tailwind: dependencies: '@tailwindcss/vite': @@ -3627,12 +3561,6 @@ importers: specifier: ^4.2.2 version: 4.2.2 - packages/astro/test/fixtures/middleware-virtual: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/minification-html: dependencies: astro: @@ -4230,21 +4158,6 @@ importers: specifier: ^10.29.0 version: 10.29.0 - packages/astro/test/fixtures/ssr-split-manifest: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - - packages/astro/test/fixtures/ssr-trailing-slash: - dependencies: - '@astrojs/node': - specifier: workspace:* - version: link:../../../../integrations/node - astro: - specifier: workspace:* - version: link:../../.. - packages/astro/test/fixtures/static-build: dependencies: '@astrojs/preact': @@ -4448,24 +4361,6 @@ importers: specifier: ^3.5.30 version: 3.5.30(typescript@5.9.3) - packages/astro/test/fixtures/with-endpoint-routes: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - - packages/astro/test/fixtures/with-subpath-no-trailing-slash: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - - packages/astro/test/fixtures/without-site-config: - dependencies: - astro: - specifier: workspace:* - version: link:../../.. - packages/create-astro: dependencies: '@astrojs/cli-kit':