Skip to content

Commit d274366

Browse files
support comment in json key value
1 parent d59f8cf commit d274366

File tree

5 files changed

+327
-18
lines changed

5 files changed

+327
-18
lines changed

package-lock.json

Lines changed: 185 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"dependencies": {
5858
"@azure/app-configuration": "^1.6.1",
5959
"@azure/identity": "^4.2.1",
60-
"@azure/keyvault-secrets": "^4.7.0"
60+
"@azure/keyvault-secrets": "^4.7.0",
61+
"jsonc-parser": "^3.3.1"
6162
}
6263
}

rollup.config.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export default [
1111
"@azure/identity",
1212
"crypto",
1313
"dns/promises",
14+
"jsonc-parser",
1415
"@microsoft/feature-management"
1516
],
1617
input: "src/index.ts",

src/JsonKeyValueAdapter.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Licensed under the MIT license.
33

44
import { ConfigurationSetting, featureFlagContentType, secretReferenceContentType } from "@azure/app-configuration";
5+
import { stripComments } from "jsonc-parser";
56
import { parseContentType, isJsonContentType } from "./common/contentType.js";
67
import { IKeyValueAdapter } from "./IKeyValueAdapter.js";
78

@@ -26,9 +27,18 @@ export class JsonKeyValueAdapter implements IKeyValueAdapter {
2627
let parsedValue: unknown;
2728
if (setting.value !== undefined) {
2829
try {
29-
parsedValue = JSON.parse(setting.value);
30+
let cleanJsonValue = setting.value;
31+
if (setting.value) {
32+
cleanJsonValue = stripComments(setting.value);
33+
}
34+
parsedValue = JSON.parse(cleanJsonValue);
3035
} catch (error) {
31-
parsedValue = setting.value;
36+
if (error instanceof SyntaxError) {
37+
parsedValue = setting.value;
38+
} else {
39+
// If the error is not a SyntaxError, rethrow it
40+
throw error;
41+
}
3242
}
3343
} else {
3444
parsedValue = setting.value;

0 commit comments

Comments
 (0)