1- import { ServerRequestHandler , ResponseError , ErrorCodes } from 'vscode-languageserver' ;
1+ import { ResponseError , ErrorCodes , RequestHandler } from 'vscode-languageserver' ;
22import { TopLevelSection } from '../context/ContextType' ;
33import { getEntityMap } from '../context/SectionContextBuilder' ;
44import { Parameter } from '../context/semantic/Entity' ;
55import { parseIdentifiable } from '../protocol/LspParser' ;
66import { Identifiable } from '../protocol/LspTypes' ;
77import { ServerComponents } from '../server/ServerComponents' ;
88import { LoggerFactory } from '../telemetry/LoggerFactory' ;
9- import { parseTemplateActionParams , parseGetParametersParams } from '../templates/TemplateParser' ;
9+ import { analyzeCapabilities } from '../templates/CapabilityAnalyzer' ;
10+ import { parseTemplateActionParams , parseTemplateMetadataParams } from '../templates/TemplateParser' ;
1011import {
11- GetParametersParams ,
12+ TemplateMetadataParams ,
1213 GetParametersResult ,
14+ GetCapabilitiesResult ,
1315 TemplateActionParams ,
1416 TemplateActionResult ,
1517 TemplateStatusResult ,
@@ -21,12 +23,12 @@ const log = LoggerFactory.getLogger('TemplateHandler');
2123
2224export function templateParametersHandler (
2325 components : ServerComponents ,
24- ) : ServerRequestHandler < GetParametersParams , GetParametersResult , never , void > {
25- return ( rawParams , _token , _workDoneProgress , _resultProgress ) => {
26+ ) : RequestHandler < TemplateMetadataParams , GetParametersResult , void > {
27+ return ( rawParams ) => {
2628 log . debug ( { Handler : 'TemplateParameters' , rawParams } ) ;
2729
2830 try {
29- const params = parseWithPrettyError ( parseGetParametersParams , rawParams ) ;
31+ const params = parseWithPrettyError ( parseTemplateMetadataParams , rawParams ) ;
3032 const syntaxTree = components . syntaxTreeManager . getSyntaxTree ( params . uri ) ;
3133 if ( syntaxTree ) {
3234 const parametersMap = getEntityMap ( syntaxTree , TopLevelSection . Parameters ) ;
@@ -49,7 +51,7 @@ export function templateParametersHandler(
4951
5052export function templateValidationCreateHandler (
5153 components : ServerComponents ,
52- ) : ServerRequestHandler < TemplateActionParams , TemplateActionResult , never , void > {
54+ ) : RequestHandler < TemplateActionParams , TemplateActionResult , void > {
5355 return async ( rawParams ) => {
5456 log . debug ( { Handler : 'TemplateValidationCreate' , rawParams } ) ;
5557
@@ -64,7 +66,7 @@ export function templateValidationCreateHandler(
6466
6567export function templateDeploymentCreateHandler (
6668 components : ServerComponents ,
67- ) : ServerRequestHandler < TemplateActionParams , TemplateActionResult , never , void > {
69+ ) : RequestHandler < TemplateActionParams , TemplateActionResult , void > {
6870 return async ( rawParams ) => {
6971 log . debug ( { Handler : 'TemplateDeploymentCreate' , rawParams } ) ;
7072
@@ -79,7 +81,7 @@ export function templateDeploymentCreateHandler(
7981
8082export function templateValidationStatusHandler (
8183 components : ServerComponents ,
82- ) : ServerRequestHandler < Identifiable , TemplateStatusResult , never , void > {
84+ ) : RequestHandler < Identifiable , TemplateStatusResult , void > {
8385 return ( rawParams ) => {
8486 log . debug ( { Handler : 'TemplateValidationStatus' , rawParams } ) ;
8587
@@ -94,7 +96,7 @@ export function templateValidationStatusHandler(
9496
9597export function templateDeploymentStatusHandler (
9698 components : ServerComponents ,
97- ) : ServerRequestHandler < Identifiable , TemplateStatusResult , never , void > {
99+ ) : RequestHandler < Identifiable , TemplateStatusResult , void > {
98100 return ( rawParams ) => {
99101 log . debug ( { Handler : 'TemplateDeploymentStatus' , rawParams } ) ;
100102
@@ -107,6 +109,28 @@ export function templateDeploymentStatusHandler(
107109 } ;
108110}
109111
112+ export function templateCapabilitiesHandler (
113+ components : ServerComponents ,
114+ ) : RequestHandler < TemplateMetadataParams , GetCapabilitiesResult , void > {
115+ return async ( rawParams ) => {
116+ log . debug ( { Handler : 'TemplateCapabilities' , rawParams } ) ;
117+
118+ try {
119+ const params = parseWithPrettyError ( parseTemplateMetadataParams , rawParams ) ;
120+ const document = components . documentManager . get ( params . uri ) ;
121+ if ( ! document ) {
122+ throw new ResponseError ( ErrorCodes . InvalidRequest , 'Template body document not available' ) ;
123+ }
124+
125+ const capabilities = await analyzeCapabilities ( document , components . cfnService ) ;
126+
127+ return { capabilities } ;
128+ } catch ( error ) {
129+ handleTemplateError ( error , 'Failed to analyze template capabilities' ) ;
130+ }
131+ } ;
132+ }
133+
110134function handleTemplateError ( error : unknown , contextMessage : string ) : never {
111135 if ( error instanceof ResponseError ) {
112136 throw error ;
0 commit comments