Skip to content

Commit 1ea1ff0

Browse files
strip comment only when normal parse failed
1 parent 8c838bc commit 1ea1ff0

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

src/JsonKeyValueAdapter.ts

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)