11/**********************************************************************
2- * Copyright (c) 2024 Red Hat, Inc.
2+ * Copyright (c) 2024-2025 Red Hat, Inc.
33 *
44 * This program and the accompanying materials are made
55 * available under the terms of the Eclipse Public License 2.0
@@ -91,16 +91,29 @@ export class EditorConfigurations {
9191 private async configureExtensions ( configmap : k8s . V1ConfigMap ) : Promise < void > {
9292 const configmapContent = configmap . data ! [ EditorConfigs . Extensions ] ;
9393 if ( ! configmapContent ) {
94+ console . log ( ` > Configmap does not contain ${ EditorConfigs . Extensions } . Skip this step.` ) ;
9495 return ;
9596 }
9697
9798 console . log ( ' > Configure workspace extensions...' ) ;
9899
99100 try {
100- const extensionsFromConfigmap = parseJSON ( configmapContent , {
101+ const parsedConfigmapContent = parseJSON ( configmapContent , {
101102 errorMessage : 'Configmap content is not valid.' ,
102103 } ) ;
103104
105+ const configMapExtensions = parsedConfigmapContent ?. recommendations ;
106+ if ( ! Array . isArray ( configMapExtensions ) || configMapExtensions . length < 1 ) {
107+ console . log (
108+ ` > ${ EditorConfigs . Extensions } section of Configmap does not contain recomendations. Skip this step.`
109+ ) ;
110+ return ;
111+ } else {
112+ console . log (
113+ ` > ${ EditorConfigs . Extensions } section of Configmap contains ${ configMapExtensions . length } extensions.`
114+ ) ;
115+ }
116+
104117 if ( ! this . workspaceFilePath ) {
105118 console . log ( ' > Missing workspace file. Skip this step.' ) ;
106119 return ;
@@ -118,10 +131,12 @@ export class EditorConfigurations {
118131 errorMessage : 'Workspace file is not valid.' ,
119132 } ) ;
120133
121- workspaceConfigData [ 'extensions' ] = {
122- ...( workspaceConfigData [ 'extensions' ] || { } ) ,
123- ...extensionsFromConfigmap ,
124- } ;
134+ const workspaceFileExtensions = workspaceConfigData ?. extensions ?. recommendations || [ ] ;
135+ console . log ( ` > Workspace file contains ${ workspaceFileExtensions . length } extensions.` ) ;
136+
137+ const combinedExtensions = Array . from ( new Set ( [ ...configMapExtensions , ...workspaceFileExtensions ] ) ) ;
138+ workspaceConfigData . extensions = workspaceConfigData . extensions ?? { } ;
139+ workspaceConfigData . extensions . recommendations = combinedExtensions ;
125140
126141 const json = JSON . stringify ( workspaceConfigData , null , '\t' ) ;
127142 await fs . writeFile ( this . workspaceFilePath , json ) ;
0 commit comments