@@ -15,6 +15,7 @@ import * as os from 'node:os';
1515import * as path from 'node:path' ;
1616import { pathToFileURL } from 'node:url' ;
1717import { promisify } from 'node:util' ;
18+ import yaml from 'yaml' ;
1819
1920import rootPackageJson from '../../../package.json' ;
2021
@@ -26,7 +27,8 @@ interface PackageJSON {
2627 private ?: boolean ;
2728}
2829
29- const PACKAGES_DIR = path . resolve ( __dirname , '..' , '..' ) ;
30+ const ROOT_DIR = path . resolve ( __dirname , '..' , '..' , '..' ) ;
31+ const PACKAGES_DIR = path . resolve ( ROOT_DIR , 'packages' ) ;
3032
3133const INTEGRATION_TEST_DIR = path . join (
3234 os . tmpdir ( ) || os . homedir ( ) ,
@@ -107,11 +109,13 @@ export const setup = async (project: TestProject): Promise<void> => {
107109 ) . filter ( e => e != null ) ,
108110 ) ;
109111
112+ const PNPM_CATALOG = await getPnpmCatalog ( ) ;
113+
110114 const BASE_DEPENDENCIES : PackageJSON [ 'devDependencies' ] = {
111115 ...tseslintPackages ,
112- eslint : rootPackageJson . devDependencies . eslint ,
113- typescript : rootPackageJson . devDependencies . typescript ,
114- vitest : rootPackageJson . devDependencies . vitest ,
116+ eslint : PNPM_CATALOG . eslint ,
117+ typescript : PNPM_CATALOG . typescript ,
118+ vitest : PNPM_CATALOG . vitest ,
115119 } ;
116120
117121 const temp = await fs . mkdtemp ( path . join ( INTEGRATION_TEST_DIR , 'temp' ) , {
@@ -222,3 +226,26 @@ export const teardown = async (): Promise<void> => {
222226 await fs . rm ( INTEGRATION_TEST_DIR , { recursive : true } ) ;
223227 }
224228} ;
229+
230+ interface PnpmWorkspace {
231+ catalog : Record < string , string > ;
232+ }
233+
234+ async function getPnpmCatalog ( ) {
235+ const pnpmWorkspace = await fs . readFile (
236+ path . join ( ROOT_DIR , 'pnpm-workspace.yaml' ) ,
237+ { encoding : 'utf-8' } ,
238+ ) ;
239+
240+ const parsed : PnpmWorkspace = yaml . parse ( pnpmWorkspace ) ;
241+
242+ const expectedPackages = [ 'eslint' , 'typescript' , 'vitest' ] ;
243+
244+ for ( const packageName of expectedPackages ) {
245+ if ( ! ( packageName in parsed . catalog ) ) {
246+ throw new Error ( `Package ${ packageName } not found in pnpm catalog` ) ;
247+ }
248+ }
249+
250+ return parsed . catalog ;
251+ }
0 commit comments