Skip to content

Commit 22ebe3d

Browse files
committed
feat: update
1 parent 2870fad commit 22ebe3d

File tree

8 files changed

+47
-9
lines changed

8 files changed

+47
-9
lines changed

packages/aws-cdk/lib/cli/cli-config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as cdk_from_cfn from 'cdk-from-cfn';
55
import { StackActivityProgress } from '../commands/deploy';
66
import { availableInitLanguages } from '../commands/init';
77
import { getLanguageAlias } from '../commands/language';
8+
import { JS_PACKAGE_MANAGERS } from '../commands/init/package-manager';
89

910
export const YARGS_HELPERS = new CliHelpers('./util/yargs-helpers');
1011

@@ -407,7 +408,7 @@ export async function makeConfig(): Promise<CliConfig> {
407408
'lib-version': { type: 'string', alias: 'V', default: undefined, desc: 'The version of the CDK library (aws-cdk-lib) to initialize built-in templates with. Defaults to the version that was current when this CLI was built.' },
408409
'from-path': { type: 'string', desc: 'Path to a local custom template directory or multi-template repository', requiresArg: true, conflicts: ['lib-version'] },
409410
'template-path': { type: 'string', desc: 'Path to a specific template within a multi-template repository', requiresArg: true },
410-
'package-manager': { type: 'string', desc: 'The package manager to use to install dependencies. Only applicable for TypeScript and JavaScript projects.', choices: ['npm', 'yarn', 'pnpm'] },
411+
'package-manager': { type: 'string', desc: 'The package manager to use to install dependencies. Only applicable for TypeScript and JavaScript projects.', choices: JS_PACKAGE_MANAGERS },
411412
},
412413
implies: { 'template-path': 'from-path' },
413414
},

packages/aws-cdk/lib/cli/cli-type-registry.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -903,6 +903,15 @@
903903
"type": "string",
904904
"desc": "Path to a specific template within a multi-template repository",
905905
"requiresArg": true
906+
},
907+
"package-manager": {
908+
"type": "string",
909+
"desc": "The package manager to use to install dependencies. Only applicable for TypeScript and JavaScript projects.",
910+
"choices": [
911+
"npm",
912+
"yarn",
913+
"pnpm"
914+
]
906915
}
907916
},
908917
"implies": {

packages/aws-cdk/lib/cli/cli.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ export async function exec(args: string[], synthesizer?: Synthesizer): Promise<n
565565
libVersion: args.libVersion,
566566
fromPath: args['from-path'],
567567
templatePath: args['template-path'],
568+
packageManager: args['package-manager'],
568569
});
569570
}
570571
case 'migrate':

packages/aws-cdk/lib/cli/convert-to-user-input.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ export function convertYargsToUserInput(args: any): UserInput {
250250
libVersion: args.libVersion,
251251
fromPath: args.fromPath,
252252
templatePath: args.templatePath,
253+
packageManager: args.packageManager,
253254
TEMPLATE: args.TEMPLATE,
254255
};
255256
break;
@@ -493,6 +494,7 @@ export function convertConfigToUserInput(config: any): UserInput {
493494
libVersion: config.init?.libVersion,
494495
fromPath: config.init?.fromPath,
495496
templatePath: config.init?.templatePath,
497+
packageManager: config.init?.packageManager,
496498
};
497499
const migrateOptions = {
498500
stackName: config.migrate?.stackName,

packages/aws-cdk/lib/cli/parse-command-line-arguments.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,12 @@ export function parseCommandLineArguments(args: Array<string>): any {
894894
type: 'string',
895895
desc: 'Path to a specific template within a multi-template repository',
896896
requiresArg: true,
897+
})
898+
.option('package-manager', {
899+
default: undefined,
900+
type: 'string',
901+
desc: 'The package manager to use to install dependencies. Only applicable for TypeScript and JavaScript projects.',
902+
choices: ['npm', 'yarn', 'pnpm'],
897903
}),
898904
)
899905
.command('migrate', 'Migrate existing AWS resources into a CDK app', (yargs: Argv) =>

packages/aws-cdk/lib/cli/user-input.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,6 +1408,13 @@ export interface InitOptions {
14081408
*/
14091409
readonly templatePath?: string;
14101410

1411+
/**
1412+
* The package manager to use to install dependencies. Only applicable for TypeScript and JavaScript projects.
1413+
*
1414+
* @default - undefined
1415+
*/
1416+
readonly packageManager?: string;
1417+
14111418
/**
14121419
* Positional argument for init
14131420
*/

packages/aws-cdk/lib/commands/init/init.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { versionNumber } from '../../cli/version';
1010
import { cdkHomeDir, formatErrorMessage, rangeFromSemver } from '../../util';
1111
import type { LanguageInfo } from '../language';
1212
import { getLanguageAlias, getLanguageExtensions, SUPPORTED_LANGUAGES } from '../language';
13+
import { JsPackageManager } from './package-manager';
1314

1415
/* eslint-disable @typescript-eslint/no-var-requires */ // Packages don't have @types module
1516
// eslint-disable-next-line @typescript-eslint/no-require-imports
@@ -76,6 +77,13 @@ export interface CliInitOptions {
7677
*/
7778
readonly templatePath?: string;
7879

80+
/**
81+
* The package manager to use for installing dependencies.
82+
* Only applicable for TypeScript and JavaScript projects.
83+
* @default undefined
84+
*/
85+
readonly packageManager?: JsPackageManager;
86+
7987
readonly ioHelper: IoHelper;
8088
}
8189

@@ -653,6 +661,7 @@ async function initializeProject(
653661
stackName?: string,
654662
migrate?: boolean,
655663
cdkVersion?: string,
664+
packageManager?: JsPackageManager,
656665
) {
657666
// Step 1: Ensure target directory is empty
658667
await assertIsEmptyDirectory(workDir);
@@ -675,7 +684,7 @@ async function initializeProject(
675684
await initializeGitRepository(ioHelper, workDir);
676685

677686
// Step 4: Post-install steps
678-
await postInstall(ioHelper, language, canUseNetwork, workDir);
687+
await postInstall(ioHelper, language, canUseNetwork, workDir, packageManager);
679688
}
680689

681690
await ioHelper.defaults.info('✅ All done!');
@@ -728,12 +737,12 @@ async function initializeGitRepository(ioHelper: IoHelper, workDir: string) {
728737
}
729738
}
730739

731-
async function postInstall(ioHelper: IoHelper, language: string, canUseNetwork: boolean, workDir: string) {
740+
async function postInstall(ioHelper: IoHelper, language: string, canUseNetwork: boolean, workDir: string, packageManager?: JsPackageManager) {
732741
switch (language) {
733742
case 'javascript':
734-
return postInstallJavascript(ioHelper, canUseNetwork, workDir);
743+
return postInstallJavascript(ioHelper, canUseNetwork, workDir, packageManager);
735744
case 'typescript':
736-
return postInstallTypescript(ioHelper, canUseNetwork, workDir);
745+
return postInstallTypescript(ioHelper, canUseNetwork, workDir, packageManager);
737746
case 'java':
738747
return postInstallJava(ioHelper, canUseNetwork, workDir);
739748
case 'python':
@@ -747,12 +756,12 @@ async function postInstall(ioHelper: IoHelper, language: string, canUseNetwork:
747756
}
748757
}
749758

750-
async function postInstallJavascript(ioHelper: IoHelper, canUseNetwork: boolean, cwd: string) {
751-
return postInstallTypescript(ioHelper, canUseNetwork, cwd);
759+
async function postInstallJavascript(ioHelper: IoHelper, canUseNetwork: boolean, cwd: string, packageManager?: JsPackageManager) {
760+
return postInstallTypescript(ioHelper, canUseNetwork, cwd, packageManager);
752761
}
753762

754-
async function postInstallTypescript(ioHelper: IoHelper, canUseNetwork: boolean, cwd: string) {
755-
const command = 'npm';
763+
async function postInstallTypescript(ioHelper: IoHelper, canUseNetwork: boolean, cwd: string, packageManager?: JsPackageManager) {
764+
const command = packageManager ?? 'npm';
756765

757766
if (!canUseNetwork) {
758767
await ioHelper.defaults.warn(`Please run '${command} install'!`);
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const JS_PACKAGE_MANAGERS = ['npm', 'yarn', 'pnpm'] as const;
2+
3+
export type JsPackageManager = typeof JS_PACKAGE_MANAGERS[number];

0 commit comments

Comments
 (0)