@@ -4,7 +4,7 @@ import * as path from 'path';
44import * as cxapi from '@aws-cdk/cx-api' ;
55import * as fs from 'fs-extra' ;
66import { availableInitLanguages , availableInitTemplates , cliInit , currentlyRecommendedAwsCdkLibFlags , expandPlaceholders , printAvailableTemplates } from '../../lib/commands/init' ;
7- import type { JsPackageManager } from '../../lib/commands/init/package-manager' ;
7+ import { type JsPackageManager } from '../../lib/commands/init/package-manager' ;
88import { createSingleLanguageTemplate , createMultiLanguageTemplate , createMultiTemplateRepository } from '../_fixtures/init-templates/template-helpers' ;
99import { TestIoHost } from '../_helpers/io-host' ;
1010
@@ -1370,15 +1370,15 @@ describe('constructs version', () => {
13701370 } ) ;
13711371
13721372 test . each ( [
1373- { language : 'typescript' , packageManager : 'npm' } ,
1374- { language : 'typescript' , packageManager : 'yarn' } ,
1375- { language : 'typescript' , packageManager : 'pnpm' } ,
1376- { language : 'typescript' , packageManager : 'bun' } ,
1377- { language : 'javascript' , packageManager : 'npm' } ,
1378- { language : 'javascript' , packageManager : 'yarn' } ,
1379- { language : 'javascript' , packageManager : 'pnpm' } ,
1380- { language : 'javascript' , packageManager : 'bun' } ,
1381- ] ) ( 'uses $packageManager for $language project' , async ( { language, packageManager } ) => {
1373+ { language : 'typescript' , packageManager : 'npm' , pmCmdPrefix : 'npm run' } ,
1374+ { language : 'typescript' , packageManager : 'yarn' , pmCmdPrefix : 'yarn' } ,
1375+ { language : 'typescript' , packageManager : 'pnpm' , pmCmdPrefix : 'pnpm' } ,
1376+ { language : 'typescript' , packageManager : 'bun' , pmCmdPrefix : 'bun run' } ,
1377+ { language : 'javascript' , packageManager : 'npm' , pmCmdPrefix : 'npm run' } ,
1378+ { language : 'javascript' , packageManager : 'yarn' , pmCmdPrefix : 'yarn' } ,
1379+ { language : 'javascript' , packageManager : 'pnpm' , pmCmdPrefix : 'pnpm' } ,
1380+ { language : 'javascript' , packageManager : 'bun' , pmCmdPrefix : 'bun run' } ,
1381+ ] ) ( 'uses $packageManager for $language project' , async ( { language, packageManager, pmCmdPrefix } ) => {
13821382 await withTempDir ( async ( workDir ) => {
13831383 await cliInit ( {
13841384 ioHelper,
@@ -1388,39 +1388,101 @@ describe('constructs version', () => {
13881388 workDir,
13891389 } ) ;
13901390
1391+ const readme = await fs . readFile ( path . join ( workDir , 'README.md' ) , 'utf-8' ) ;
13911392 const installCalls = spawnSpy . mock . calls . filter (
13921393 ( [ cmd , args ] ) => cmd === packageManager && args . includes ( 'install' ) ,
13931394 ) ;
1395+
1396+ expect ( installCalls . length ) . toBeGreaterThan ( 0 ) ;
1397+ expect ( readme ) . toContain ( pmCmdPrefix ) ;
1398+ } ) ;
1399+ } ) ;
1400+
1401+ cliTest ( 'init type `lib` also respects package manager option' , async ( ) => {
1402+ const packageManager = 'pnpm' ;
1403+ const pmCmdPrefix = 'pnpm' ;
1404+
1405+ await withTempDir ( async ( workDir ) => {
1406+ await cliInit ( {
1407+ ioHelper,
1408+ type : 'app' ,
1409+ language : 'typescript' ,
1410+ packageManager : packageManager as JsPackageManager ,
1411+ workDir,
1412+ } ) ;
1413+
1414+ const readme = await fs . readFile ( path . join ( workDir , 'README.md' ) , 'utf-8' ) ;
1415+ const installCalls = spawnSpy . mock . calls . filter (
1416+ ( [ cmd , args ] ) => cmd === packageManager && args . includes ( 'install' ) ,
1417+ ) ;
1418+
1419+ expect ( installCalls . length ) . toBeGreaterThan ( 0 ) ;
1420+ expect ( readme ) . toContain ( pmCmdPrefix ) ;
1421+ } ) ;
1422+ } ) ;
1423+
1424+ cliTest ( 'init type `sample-app` also respects package manager option' , async ( ) => {
1425+ const packageManager = 'pnpm' ;
1426+ const pmCmdPrefix = 'pnpm' ;
1427+
1428+ await withTempDir ( async ( workDir ) => {
1429+ await cliInit ( {
1430+ ioHelper,
1431+ type : 'sample-app' ,
1432+ language : 'typescript' ,
1433+ packageManager : packageManager as JsPackageManager ,
1434+ workDir,
1435+ } ) ;
1436+
1437+ const readme = await fs . readFile ( path . join ( workDir , 'README.md' ) , 'utf-8' ) ;
1438+ const installCalls = spawnSpy . mock . calls . filter (
1439+ ( [ cmd , args ] ) => cmd === packageManager && args . includes ( 'install' ) ,
1440+ ) ;
1441+
13941442 expect ( installCalls . length ) . toBeGreaterThan ( 0 ) ;
1443+ expect ( readme ) . toContain ( pmCmdPrefix ) ;
13951444 } ) ;
13961445 } ) ;
13971446
13981447 cliTest ( 'uses npm as default when package manager not specified' , async ( workDir ) => {
1448+ const defaultPackageManager = 'npm' ;
1449+ const pmCmdPrefix = 'npm run' ;
1450+
13991451 await cliInit ( {
14001452 ioHelper,
14011453 type : 'app' ,
14021454 language : 'typescript' ,
14031455 workDir,
14041456 } ) ;
14051457
1458+ const readme = await fs . readFile ( path . join ( workDir , 'README.md' ) , 'utf-8' ) ;
14061459 const installCalls = spawnSpy . mock . calls . filter (
1407- ( [ cmd , args ] ) => cmd === 'npm' && args . includes ( 'install' ) ,
1460+ ( [ cmd , args ] ) => cmd === defaultPackageManager && args . includes ( 'install' ) ,
14081461 ) ;
1462+
14091463 expect ( installCalls . length ) . toBeGreaterThan ( 0 ) ;
1464+ expect ( readme ) . toContain ( pmCmdPrefix ) ;
14101465 } ) ;
14111466
14121467 cliTest ( 'ignores package manager option for non-JavaScript languages' , async ( workDir ) => {
1468+ const packageManager = 'yarn' ;
1469+ const pmCmdPrefix = 'yarn' ;
1470+
14131471 await cliInit ( {
14141472 ioHelper,
14151473 type : 'app' ,
14161474 language : 'python' ,
1417- packageManager : 'yarn' ,
1475+ packageManager,
14181476 canUseNetwork : false ,
14191477 generateOnly : true ,
14201478 workDir,
14211479 } ) ;
14221480
1423- expect ( await fs . pathExists ( path . join ( workDir , 'requirements.txt' ) ) ) . toBeTruthy ( ) ;
1481+ const requirementsExists = await fs . pathExists ( path . join ( workDir , 'requirements.txt' ) ) ;
1482+ const readme = await fs . readFile ( path . join ( workDir , 'README.md' ) , 'utf-8' ) ;
1483+
1484+ expect ( requirementsExists ) . toBeTruthy ( ) ;
1485+ expect ( readme ) . not . toContain ( pmCmdPrefix ) ;
14241486 } ) ;
14251487 } ) ;
14261488
0 commit comments