@@ -49,11 +49,13 @@ import {
4949 DescribeChangeSetParams ,
5050 DescribeChangeSetResult ,
5151} from '../stacks/StackRequestType' ;
52+ import { LoggerFactory } from '../telemetry/LoggerFactory' ;
5253import { TelemetryService } from '../telemetry/TelemetryService' ;
5354import { handleLspError } from '../utils/Errors' ;
54- import { withOnlineFeatures } from '../utils/OnlineFeatureWrapper' ;
5555import { parseWithPrettyError } from '../utils/ZodErrorWrapper' ;
5656
57+ const log = LoggerFactory . getLogger ( 'StackHandler' ) ;
58+
5759export function getParametersHandler (
5860 components : ServerComponents ,
5961) : RequestHandler < TemplateUri , GetParametersResult , void > {
@@ -112,10 +114,12 @@ export function createValidationHandler(
112114) : RequestHandler < CreateValidationParams , CreateStackActionResult , void > {
113115 return async ( rawParams ) => {
114116 return await TelemetryService . instance . get ( 'StackHandler' ) . measureAsync ( 'createValidation' , async ( ) => {
115- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
117+ try {
116118 const params = parseWithPrettyError ( parseCreateValidationParams , rawParams ) ;
117119 return await components . validationWorkflowService . start ( params ) ;
118- } ) ;
120+ } catch ( error ) {
121+ handleLspError ( error , 'Failed to start validation workflow' ) ;
122+ }
119123 } ) ;
120124 } ;
121125}
@@ -125,10 +129,12 @@ export function createDeploymentHandler(
125129) : RequestHandler < CreateDeploymentParams , CreateStackActionResult , void > {
126130 return async ( rawParams ) => {
127131 return await TelemetryService . instance . get ( 'StackHandler' ) . measureAsync ( 'createDeployment' , async ( ) => {
128- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
132+ try {
129133 const params = parseWithPrettyError ( parseCreateDeploymentParams , rawParams ) ;
130134 return await components . deploymentWorkflowService . start ( params ) ;
131- } ) ;
135+ } catch ( error ) {
136+ handleLspError ( error , 'Failed to start deployment workflow' ) ;
137+ }
132138 } ) ;
133139 } ;
134140}
@@ -190,10 +196,12 @@ export function deleteChangeSetHandler(
190196) : RequestHandler < DeleteChangeSetParams , CreateStackActionResult , void > {
191197 return async ( rawParams ) => {
192198 return await TelemetryService . instance . get ( 'StackHandler' ) . measureAsync ( 'deleteChangeSet' , async ( ) => {
193- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
199+ try {
194200 const params = parseWithPrettyError ( parseDeleteChangeSetParams , rawParams ) ;
195201 return await components . changeSetDeletionWorkflowService . start ( params ) ;
196- } ) ;
202+ } catch ( error ) {
203+ handleLspError ( error , 'Failed to start change set deletion workflow' ) ;
204+ }
197205 } ) ;
198206 } ;
199207}
@@ -229,7 +237,7 @@ export function getCapabilitiesHandler(
229237) : RequestHandler < TemplateUri , GetCapabilitiesResult , void > {
230238 return async ( rawParams ) => {
231239 return await TelemetryService . instance . get ( 'StackHandler' ) . measureAsync ( 'getCapabilities' , async ( ) => {
232- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
240+ try {
233241 const params = parseWithPrettyError ( parseTemplateUriParams , rawParams ) ;
234242 const document = components . documentManager . get ( params ) ;
235243 if ( ! document ) {
@@ -240,8 +248,11 @@ export function getCapabilitiesHandler(
240248 }
241249
242250 const capabilities = await analyzeCapabilities ( document , components . cfnService ) ;
251+
243252 return { capabilities } ;
244- } ) ;
253+ } catch ( error ) {
254+ handleLspError ( error , 'Failed to analyze template capabilities' ) ;
255+ }
245256 } ) ;
246257 } ;
247258}
@@ -315,7 +326,7 @@ export function listStacksHandler(
315326) : RequestHandler < ListStacksParams , ListStacksResult , void > {
316327 return async ( params : ListStacksParams ) : Promise < ListStacksResult > => {
317328 return await TelemetryService . instance . get ( 'StackHandler' ) . measureAsync ( 'listStacks' , async ( ) => {
318- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
329+ try {
319330 if ( params . statusToInclude ?. length && params . statusToExclude ?. length ) {
320331 throw new Error ( 'Cannot specify both statusToInclude and statusToExclude' ) ;
321332 }
@@ -324,7 +335,10 @@ export function listStacksHandler(
324335 params . statusToExclude ,
325336 params . loadMore ,
326337 ) ;
327- } ) ;
338+ } catch ( error ) {
339+ log . error ( error , 'Error listing stacks' ) ;
340+ return { stacks : [ ] , nextToken : undefined } ;
341+ }
328342 } ) ;
329343 } ;
330344}
@@ -334,7 +348,7 @@ export function listChangeSetsHandler(
334348) : RequestHandler < ListChangeSetParams , ListChangeSetResult , void > {
335349 return async ( params : ListChangeSetParams ) : Promise < ListChangeSetResult > => {
336350 return await TelemetryService . instance . get ( 'StackHandler' ) . measureAsync ( 'listChangeSets' , async ( ) => {
337- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
351+ try {
338352 const result = await components . cfnService . listChangeSets ( params . stackName , params . nextToken ) ;
339353 return {
340354 changeSets : result . changeSets . map ( ( cs ) => ( {
@@ -345,7 +359,9 @@ export function listChangeSetsHandler(
345359 } ) ) ,
346360 nextToken : result . nextToken ,
347361 } ;
348- } ) ;
362+ } catch {
363+ return { changeSets : [ ] } ;
364+ }
349365 } ) ;
350366 } ;
351367}
@@ -354,7 +370,7 @@ export function listStackResourcesHandler(
354370 components : ServerComponents ,
355371) : RequestHandler < ListStackResourcesParams , ListStackResourcesResult , void > {
356372 return async ( rawParams ) : Promise < ListStackResourcesResult > => {
357- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
373+ try {
358374 const params = parseWithPrettyError ( parseListStackResourcesParams , rawParams ) ;
359375 const response = await components . cfnService . listStackResources ( {
360376 StackName : params . stackName ,
@@ -364,47 +380,50 @@ export function listStackResourcesHandler(
364380 resources : response . StackResourceSummaries ?? [ ] ,
365381 nextToken : response . NextToken ,
366382 } ;
367- } ) ;
383+ } catch ( error ) {
384+ log . error ( error , 'Error listing stack resources' ) ;
385+ return { resources : [ ] } ;
386+ }
368387 } ;
369388}
370389
371390export function describeChangeSetHandler (
372391 components : ServerComponents ,
373392) : RequestHandler < DescribeChangeSetParams , DescribeChangeSetResult , void > {
374393 return async ( rawParams : DescribeChangeSetParams ) : Promise < DescribeChangeSetResult > => {
375- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
376- const params = parseWithPrettyError ( parseDescribeChangeSetParams , rawParams ) ;
394+ const params = parseWithPrettyError ( parseDescribeChangeSetParams , rawParams ) ;
377395
378- const result = await components . cfnService . describeChangeSet ( {
379- ChangeSetName : params . changeSetName ,
380- IncludePropertyValues : true ,
381- StackName : params . stackName ,
382- } ) ;
383-
384- return {
385- changeSetName : params . changeSetName ,
386- stackName : params . stackName ,
387- status : result . Status ?? '' ,
388- creationTime : result . CreationTime ?. toISOString ( ) ,
389- description : result . Description ,
390- changes : mapChangesToStackChanges ( result . Changes ) ,
391- } ;
396+ const result = await components . cfnService . describeChangeSet ( {
397+ ChangeSetName : params . changeSetName ,
398+ IncludePropertyValues : true ,
399+ StackName : params . stackName ,
392400 } ) ;
401+
402+ return {
403+ changeSetName : params . changeSetName ,
404+ stackName : params . stackName ,
405+ status : result . Status ?? '' ,
406+ creationTime : result . CreationTime ?. toISOString ( ) ,
407+ description : result . Description ,
408+ changes : mapChangesToStackChanges ( result . Changes ) ,
409+ } ;
393410 } ;
394411}
395412
396413export function getStackEventsHandler (
397414 components : ServerComponents ,
398415) : RequestHandler < GetStackEventsParams , GetStackEventsResult , void > {
399416 return async ( rawParams ) : Promise < GetStackEventsResult > => {
400- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
417+ try {
401418 const params = parseWithPrettyError ( parseGetStackEventsParams , rawParams ) ;
402419 if ( params . refresh ) {
403420 const result = await components . stackEventManager . refresh ( params . stackName ) ;
404421 return { events : result . events , nextToken : undefined , gapDetected : result . gapDetected } ;
405422 }
406423 return await components . stackEventManager . fetchEvents ( params . stackName , params . nextToken ) ;
407- } ) ;
424+ } catch ( error ) {
425+ handleLspError ( error , 'Failed to get stack events' ) ;
426+ }
408427 } ;
409428}
410429
@@ -425,11 +444,13 @@ export function describeStackHandler(
425444 components : ServerComponents ,
426445) : RequestHandler < DescribeStackParams , DescribeStackResult , void > {
427446 return async ( rawParams ) : Promise < DescribeStackResult > => {
428- return await withOnlineFeatures ( components . onlineFeatureGuard , async ( ) => {
447+ try {
429448 const params = parseWithPrettyError ( parseDescribeStackParams , rawParams ) ;
430449 const response = await components . cfnService . describeStacks ( { StackName : params . stackName } ) ;
431450 const stack = response . Stacks ?. [ 0 ] ;
432451 return { stack } ;
433- } ) ;
452+ } catch ( error ) {
453+ handleLspError ( error , 'Failed to describe stack' ) ;
454+ }
434455 } ;
435456}
0 commit comments