@@ -2,6 +2,7 @@ import * as childProcess from 'child_process';
2
2
import * as path from 'path' ;
3
3
import * as chalk from 'chalk' ;
4
4
import * as fs from 'fs-extra' ;
5
+ import { versionNumber } from './cli/version' ;
5
6
import { invokeBuiltinHooks } from './init-hooks' ;
6
7
import { error , info , warning } from './logging' ;
7
8
import { ToolkitError } from './toolkit/error' ;
@@ -141,18 +142,18 @@ export class InitTemplate {
141
142
for ( const fileName of fileNames ) {
142
143
const fullPath = path . join ( targetDirectory , fileName ) ;
143
144
const template = await fs . readFile ( fullPath , { encoding : 'utf-8' } ) ;
144
- await fs . writeFile ( fullPath , this . expand ( template , language , projectInfo ) ) ;
145
+ await fs . writeFile ( fullPath , expandPlaceholders ( template , language , projectInfo ) ) ;
145
146
}
146
147
} ,
147
- placeholder : ( ph : string ) => this . expand ( `%${ ph } %` , language , projectInfo ) ,
148
+ placeholder : ( ph : string ) => expandPlaceholders ( `%${ ph } %` , language , projectInfo ) ,
148
149
} ,
149
150
) ;
150
151
}
151
152
152
153
private async installFiles ( sourceDirectory : string , targetDirectory : string , language : string , project : ProjectInfo ) {
153
154
for ( const file of await fs . readdir ( sourceDirectory ) ) {
154
155
const fromFile = path . join ( sourceDirectory , file ) ;
155
- const toFile = path . join ( targetDirectory , this . expand ( file , language , project ) ) ;
156
+ const toFile = path . join ( targetDirectory , expandPlaceholders ( file , language , project ) ) ;
156
157
if ( ( await fs . stat ( fromFile ) ) . isDirectory ( ) ) {
157
158
await fs . mkdir ( toFile ) ;
158
159
await this . installFiles ( fromFile , toFile , language , project ) ;
@@ -171,42 +172,7 @@ export class InitTemplate {
171
172
172
173
private async installProcessed ( templatePath : string , toFile : string , language : string , project : ProjectInfo ) {
173
174
const template = await fs . readFile ( templatePath , { encoding : 'utf-8' } ) ;
174
- await fs . writeFile ( toFile , this . expand ( template , language , project ) ) ;
175
- }
176
-
177
- private expand ( template : string , language : string , project : ProjectInfo ) {
178
- const cdkVersion = project . versions [ 'aws-cdk-lib' ] ;
179
- let constructsVersion = project . versions . constructs ;
180
-
181
- switch ( language ) {
182
- case 'java' :
183
- case 'csharp' :
184
- case 'fsharp' :
185
- constructsVersion = rangeFromSemver ( constructsVersion , 'bracket' ) ;
186
- break ;
187
- case 'python' :
188
- constructsVersion = rangeFromSemver ( constructsVersion , 'pep' ) ;
189
- break ;
190
- }
191
- return template
192
- . replace ( / % n a m e % / g, project . name )
193
- . replace ( / % s t a c k n a m e % / , project . stackName ?? '%name.PascalCased%Stack' )
194
- . replace (
195
- / % P a s c a l N a m e S p a c e % / ,
196
- project . stackName ? camelCase ( project . stackName + 'Stack' , { pascalCase : true } ) : '%name.PascalCased%' ,
197
- )
198
- . replace (
199
- / % P a s c a l S t a c k P r o p s % / ,
200
- project . stackName ? camelCase ( project . stackName , { pascalCase : true } ) + 'StackProps' : 'StackProps' ,
201
- )
202
- . replace ( / % n a m e \. c a m e l C a s e d % / g, camelCase ( project . name ) )
203
- . replace ( / % n a m e \. P a s c a l C a s e d % / g, camelCase ( project . name , { pascalCase : true } ) )
204
- . replace ( / % c d k - v e r s i o n % / g, cdkVersion )
205
- . replace ( / % c o n s t r u c t s - v e r s i o n % / g, constructsVersion )
206
- . replace ( / % c d k - h o m e % / g, cdkHomeDir ( ) )
207
- . replace ( / % n a m e \. P y t h o n M o d u l e % / g, project . name . replace ( / - / g, '_' ) )
208
- . replace ( / % p y t h o n - e x e c u t a b l e % / g, pythonExecutable ( ) )
209
- . replace ( / % n a m e \. S t a c k N a m e % / g, project . name . replace ( / [ ^ A - Z a - z 0 - 9 - ] / g, '-' ) ) ;
175
+ await fs . writeFile ( toFile , expandPlaceholders ( template , language , project ) ) ;
210
176
}
211
177
212
178
/**
@@ -244,6 +210,43 @@ export class InitTemplate {
244
210
}
245
211
}
246
212
213
+ export function expandPlaceholders ( template : string , language : string , project : ProjectInfo ) {
214
+ const cdkVersion = project . versions [ 'aws-cdk-lib' ] ;
215
+ const cdkCliVersion = project . versions [ 'aws-cdk' ] ;
216
+ let constructsVersion = project . versions . constructs ;
217
+
218
+ switch ( language ) {
219
+ case 'java' :
220
+ case 'csharp' :
221
+ case 'fsharp' :
222
+ constructsVersion = rangeFromSemver ( constructsVersion , 'bracket' ) ;
223
+ break ;
224
+ case 'python' :
225
+ constructsVersion = rangeFromSemver ( constructsVersion , 'pep' ) ;
226
+ break ;
227
+ }
228
+ return template
229
+ . replace ( / % n a m e % / g, project . name )
230
+ . replace ( / % s t a c k n a m e % / , project . stackName ?? '%name.PascalCased%Stack' )
231
+ . replace (
232
+ / % P a s c a l N a m e S p a c e % / ,
233
+ project . stackName ? camelCase ( project . stackName + 'Stack' , { pascalCase : true } ) : '%name.PascalCased%' ,
234
+ )
235
+ . replace (
236
+ / % P a s c a l S t a c k P r o p s % / ,
237
+ project . stackName ? camelCase ( project . stackName , { pascalCase : true } ) + 'StackProps' : 'StackProps' ,
238
+ )
239
+ . replace ( / % n a m e \. c a m e l C a s e d % / g, camelCase ( project . name ) )
240
+ . replace ( / % n a m e \. P a s c a l C a s e d % / g, camelCase ( project . name , { pascalCase : true } ) )
241
+ . replace ( / % c d k - v e r s i o n % / g, cdkVersion )
242
+ . replace ( / % c d k - c l i - v e r s i o n % / g, cdkCliVersion )
243
+ . replace ( / % c o n s t r u c t s - v e r s i o n % / g, constructsVersion )
244
+ . replace ( / % c d k - h o m e % / g, cdkHomeDir ( ) )
245
+ . replace ( / % n a m e \. P y t h o n M o d u l e % / g, project . name . replace ( / - / g, '_' ) )
246
+ . replace ( / % p y t h o n - e x e c u t a b l e % / g, pythonExecutable ( ) )
247
+ . replace ( / % n a m e \. S t a c k N a m e % / g, project . name . replace ( / [ ^ A - Z a - z 0 - 9 - ] / g, '-' ) ) ;
248
+ }
249
+
247
250
interface ProjectInfo {
248
251
/** The value used for %name% */
249
252
readonly name : string ;
@@ -267,6 +270,7 @@ export async function availableInitTemplates(): Promise<InitTemplate[]> {
267
270
}
268
271
} ) ;
269
272
}
273
+
270
274
export async function availableInitLanguages ( ) : Promise < string [ ] > {
271
275
return new Promise ( async ( resolve ) => {
272
276
const templates = await availableInitTemplates ( ) ;
@@ -475,6 +479,7 @@ async function execute(cmd: string, args: string[], { cwd }: { cwd: string }) {
475
479
}
476
480
477
481
interface Versions {
482
+ [ 'aws-cdk' ] : string ;
478
483
[ 'aws-cdk-lib' ] : string ;
479
484
constructs : string ;
480
485
}
@@ -491,6 +496,7 @@ async function loadInitVersions(): Promise<Versions> {
491
496
const ret = {
492
497
'aws-cdk-lib' : contents [ 'aws-cdk-lib' ] ,
493
498
'constructs' : contents . constructs ,
499
+ 'aws-cdk' : versionNumber ( ) ,
494
500
} ;
495
501
for ( const [ key , value ] of Object . entries ( ret ) ) {
496
502
/* istanbul ignore next */
0 commit comments