@@ -26,27 +26,35 @@ export class JsonKeyValueAdapter implements IKeyValueAdapter {
2626 async processKeyValue ( setting : ConfigurationSetting ) : Promise < [ string , unknown ] > {
2727 let parsedValue : unknown ;
2828 if ( setting . value !== undefined ) {
29- try {
30- let rawJsonValue = setting . value ;
31- if ( setting . value ) {
32- rawJsonValue = stripComments ( setting . value ) ;
33- }
34- parsedValue = JSON . parse ( rawJsonValue ) ;
35- } catch ( error ) {
36- if ( error instanceof SyntaxError ) {
37- parsedValue = setting . value ;
29+ const parseResult = this . #tryParseJson( setting . value ) ;
30+ if ( parseResult . success ) {
31+ parsedValue = parseResult . result ;
32+ } else {
33+ // Try parsing with comments stripped
34+ const parseWithoutCommentsResult = this . #tryParseJson( stripComments ( setting . value ) ) ;
35+ if ( parseWithoutCommentsResult . success ) {
36+ parsedValue = parseWithoutCommentsResult . result ;
3837 } else {
39- // If the error is not a SyntaxError, rethrow it
40- throw error ;
38+ // If still not valid JSON, return the original value
39+ parsedValue = setting . value ;
4140 }
4241 }
43- } else {
44- parsedValue = setting . value ;
4542 }
4643 return [ setting . key , parsedValue ] ;
4744 }
4845
4946 async onChangeDetected ( ) : Promise < void > {
5047 return ;
5148 }
49+
50+ #tryParseJson( value : string ) : { success : true ; result : unknown } | { success : false } {
51+ try {
52+ return { success : true , result : JSON . parse ( value ) } ;
53+ } catch ( error ) {
54+ if ( error instanceof SyntaxError ) {
55+ return { success : false } ;
56+ }
57+ throw error ;
58+ }
59+ }
5260}
0 commit comments