@@ -9,8 +9,11 @@ import * as uuid from 'uuid';
99import { CliIoHost } from './io-host' ;
1010import type { Configuration } from './user-configuration' ;
1111import { PROJECT_CONFIG } from './user-configuration' ;
12+ import type { ToolkitAction } from '../../../@aws-cdk/tmp-toolkit-helpers/src/api' ;
1213import { ToolkitError } from '../../../@aws-cdk/tmp-toolkit-helpers/src/api' ;
1314import { asIoHelper } from '../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private' ;
15+ import type { ToolkitOptions } from '../../../@aws-cdk/toolkit-lib/lib/toolkit' ;
16+ import { Toolkit } from '../../../@aws-cdk/toolkit-lib/lib/toolkit' ;
1417import { DEFAULT_TOOLKIT_STACK_NAME } from '../api' ;
1518import type { SdkProvider } from '../api/aws-auth' ;
1619import type { BootstrapEnvironmentOptions } from '../api/bootstrap' ;
@@ -139,6 +142,22 @@ export enum AssetBuildTime {
139142 JUST_IN_TIME = 'just-in-time' ,
140143}
141144
145+ class InternalToolkit extends Toolkit {
146+ private readonly _sdkProvider : SdkProvider ;
147+ public constructor ( sdkProvider : SdkProvider , options : ToolkitOptions ) {
148+ super ( options ) ;
149+ this . _sdkProvider = sdkProvider ;
150+ }
151+
152+ /**
153+ * Access to the AWS SDK
154+ * @internal
155+ */
156+ protected override async sdkProvider ( _action : ToolkitAction ) : Promise < SdkProvider > {
157+ return this . _sdkProvider ;
158+ }
159+ }
160+
142161/**
143162 * Toolkit logic
144163 *
@@ -148,10 +167,21 @@ export enum AssetBuildTime {
148167export class CdkToolkit {
149168 private ioHost : CliIoHost ;
150169 private toolkitStackName : string ;
170+ private toolkit : InternalToolkit ;
151171
152172 constructor ( private readonly props : CdkToolkitProps ) {
153173 this . ioHost = props . ioHost ?? CliIoHost . instance ( ) ;
154174 this . toolkitStackName = props . toolkitStackName ?? DEFAULT_TOOLKIT_STACK_NAME ;
175+
176+ this . toolkit = new InternalToolkit ( props . sdkProvider , {
177+ assemblyFailureAt : this . validateMetadataFailAt ( ) ,
178+ color : true ,
179+ emojis : true ,
180+ ioHost : this . ioHost ,
181+ sdkConfig : { } ,
182+ toolkitStackName : this . toolkitStackName ,
183+ } ) ;
184+ this . toolkit ; // aritifical use of this.toolkit to satisfy TS, we want to prepare usage of the new toolkit without using it just yet
155185 }
156186
157187 public async metadata ( stackName : string , json : boolean ) {
@@ -1250,6 +1280,11 @@ export class CdkToolkit {
12501280 * Validate the stacks for errors and warnings according to the CLI's current settings
12511281 */
12521282 private async validateStacks ( stacks : StackCollection ) {
1283+ const failAt = this . validateMetadataFailAt ( ) ;
1284+ await stacks . validateMetadata ( failAt , stackMetadataLogger ( this . props . verbose ) ) ;
1285+ }
1286+
1287+ private validateMetadataFailAt ( ) : 'warn' | 'error' | 'none' {
12531288 let failAt : 'warn' | 'error' | 'none' = 'error' ;
12541289 if ( this . props . ignoreErrors ) {
12551290 failAt = 'none' ;
@@ -1258,7 +1293,7 @@ export class CdkToolkit {
12581293 failAt = 'warn' ;
12591294 }
12601295
1261- await stacks . validateMetadata ( failAt , stackMetadataLogger ( this . props . verbose ) ) ;
1296+ return failAt ;
12621297 }
12631298
12641299 /**
0 commit comments