@incanta/config 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/config.d.ts +3 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +63 -40
- package/lib/config.js.map +1 -1
- package/lib/loader.d.ts +1 -1
- package/lib/loader.d.ts.map +1 -1
- package/lib/loader.js +17 -4
- package/lib/loader.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +72 -41
- package/src/loader.ts +23 -5
package/lib/config.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface IConfigOptions {
|
|
|
5
5
|
export default class Config {
|
|
6
6
|
private configDir;
|
|
7
7
|
private values;
|
|
8
|
+
private normalizedValues;
|
|
8
9
|
private customValues;
|
|
9
10
|
private envVarConfig;
|
|
10
11
|
constructor(options?: IConfigOptions);
|
|
@@ -13,6 +14,8 @@ export default class Config {
|
|
|
13
14
|
getConfiguredEnv(): any;
|
|
14
15
|
get<T>(key: string): T;
|
|
15
16
|
getWithParts<T>(keyParts: string[]): T;
|
|
17
|
+
normalizeString(value: string, currentPath: string[]): string;
|
|
18
|
+
normalizeObject(obj: any, currentPath: string[]): any;
|
|
16
19
|
tryGet<T>(key: string): T | null;
|
|
17
20
|
getJson(): any;
|
|
18
21
|
set<T>(key: string, value: T): void;
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAAM;gBAEP,OAAO,CAAC,EAAE,cAAc;IAIpC,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,SAAS,CAAc;IAE/B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAAM;gBAEP,OAAO,CAAC,EAAE,cAAc;IAIpC,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAuFpC,GAAG,IAAI,MAAM;IAIb,gBAAgB,IAAI,GAAG;IAevB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAKtB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC;IAuBtC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IA8C7D,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG;IA4BrD,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAShC,OAAO,IAAI,GAAG;IAMd,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAKnC,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAe7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAMnC"}
|
package/lib/config.js
CHANGED
|
@@ -10,6 +10,7 @@ const loader_1 = require("./loader");
|
|
|
10
10
|
class Config {
|
|
11
11
|
configDir = "";
|
|
12
12
|
values;
|
|
13
|
+
normalizedValues;
|
|
13
14
|
customValues;
|
|
14
15
|
envVarConfig;
|
|
15
16
|
constructor(options) {
|
|
@@ -17,6 +18,7 @@ class Config {
|
|
|
17
18
|
}
|
|
18
19
|
init(options) {
|
|
19
20
|
this.values = {};
|
|
21
|
+
this.normalizedValues = {};
|
|
20
22
|
this.customValues = {};
|
|
21
23
|
let defaultConfigDir = "config";
|
|
22
24
|
let defaultConfigEnv = "default";
|
|
@@ -53,6 +55,7 @@ class Config {
|
|
|
53
55
|
}
|
|
54
56
|
const overrideValues = loader_1.Loader.loadFile(path_1.default.join(this.configDir, "override.json"), {});
|
|
55
57
|
(0, lodash_merge_1.default)(this.values, defaultValues, envValues, overrideValues);
|
|
58
|
+
this.normalizedValues = this.normalizeObject(this.values, []);
|
|
56
59
|
// load the environment variables that are configured to be injected
|
|
57
60
|
// using config-env
|
|
58
61
|
const dirContents = fs_1.default.readdirSync(this.configDir, { encoding: "utf-8" });
|
|
@@ -85,7 +88,7 @@ class Config {
|
|
|
85
88
|
if (keyParts.length === 0) {
|
|
86
89
|
throw new Error("Cannot use an empty key");
|
|
87
90
|
}
|
|
88
|
-
let obj = this.
|
|
91
|
+
let obj = (0, lodash_merge_1.default)({}, this.normalizedValues);
|
|
89
92
|
for (const part of keyParts) {
|
|
90
93
|
// convert to camelCase first
|
|
91
94
|
const newPart = part.replace(/-([a-zA-Z0-9])/g, function (_, match) {
|
|
@@ -96,52 +99,71 @@ class Config {
|
|
|
96
99
|
}
|
|
97
100
|
obj = obj[newPart];
|
|
98
101
|
}
|
|
102
|
+
return obj;
|
|
103
|
+
}
|
|
104
|
+
normalizeString(value, currentPath) {
|
|
105
|
+
let result = value;
|
|
99
106
|
const variableRegex = /\$\{[a-zA-Z\-_0-9./]+\}/g;
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
const regexResult = value.matchAll(variableRegex);
|
|
108
|
+
for (const match of regexResult) {
|
|
109
|
+
const key = match[0].slice(2, match[0].length - 1);
|
|
110
|
+
let keyToFetchValue;
|
|
111
|
+
if (key.startsWith(".")) {
|
|
112
|
+
keyToFetchValue = path_1.default
|
|
113
|
+
.normalize(`${currentPath.join("/")}/${key}`)
|
|
114
|
+
.replaceAll("\\", "/")
|
|
115
|
+
.replaceAll("/", ".");
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
keyToFetchValue = key;
|
|
119
|
+
}
|
|
120
|
+
let obj = (0, lodash_merge_1.default)({}, this.values);
|
|
121
|
+
const keyParts = keyToFetchValue.split(".");
|
|
122
|
+
for (const part of keyParts) {
|
|
123
|
+
// convert to camelCase first
|
|
124
|
+
const newPart = part.replace(/-([a-zA-Z0-9])/g, function (_, match) {
|
|
125
|
+
return match.toUpperCase();
|
|
126
|
+
});
|
|
127
|
+
if (typeof obj[newPart] === "undefined") {
|
|
128
|
+
throw new Error(`Could not find value for key ${keyParts.join(".")}`);
|
|
110
129
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
130
|
+
obj = obj[newPart];
|
|
131
|
+
}
|
|
132
|
+
if (obj !== null) {
|
|
133
|
+
if (typeof obj === "string" && obj.match(variableRegex) !== null) {
|
|
134
|
+
obj = this.normalizeString(obj, keyParts.slice(0, -1));
|
|
114
135
|
}
|
|
136
|
+
result = result.replace(match[0], `${obj}`);
|
|
115
137
|
}
|
|
116
|
-
return result;
|
|
117
|
-
};
|
|
118
|
-
// replace all ${value} with the value from the config
|
|
119
|
-
if (typeof obj === "string") {
|
|
120
|
-
obj = replaceValue(obj);
|
|
121
138
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
normalizeObject(obj, currentPath) {
|
|
142
|
+
if (typeof obj !== "object" || obj === null) {
|
|
143
|
+
return obj;
|
|
144
|
+
}
|
|
145
|
+
const newObj = (0, lodash_merge_1.default)({}, obj);
|
|
146
|
+
for (const property of Object.keys(newObj)) {
|
|
147
|
+
const value = newObj[property];
|
|
148
|
+
if (typeof value === "string") {
|
|
149
|
+
newObj[property] = this.normalizeString(value, currentPath);
|
|
150
|
+
}
|
|
151
|
+
else if (typeof value === "object") {
|
|
152
|
+
if (value === null) {
|
|
153
|
+
newObj[property] = null;
|
|
154
|
+
}
|
|
155
|
+
else if (Array.isArray(value)) {
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
newObj[property] = this.normalizeObject(value, [
|
|
160
|
+
...currentPath,
|
|
161
|
+
property,
|
|
162
|
+
]);
|
|
138
163
|
}
|
|
139
|
-
};
|
|
140
|
-
if (obj !== null) {
|
|
141
|
-
walkObject(obj);
|
|
142
164
|
}
|
|
143
165
|
}
|
|
144
|
-
return
|
|
166
|
+
return newObj;
|
|
145
167
|
}
|
|
146
168
|
tryGet(key) {
|
|
147
169
|
try {
|
|
@@ -153,7 +175,8 @@ class Config {
|
|
|
153
175
|
}
|
|
154
176
|
}
|
|
155
177
|
getJson() {
|
|
156
|
-
|
|
178
|
+
const values = (0, lodash_merge_1.default)({}, this.normalizedValues);
|
|
179
|
+
return values;
|
|
157
180
|
}
|
|
158
181
|
set(key, value) {
|
|
159
182
|
const parts = key.split(".");
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/loader.d.ts
CHANGED
package/lib/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,MAAM;WACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB;WA8BxD,uBAAuB,CACnC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,oBAAoB,GAC5B,GAAG;WAkEQ,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,GAAG;WAuC9D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,GAAG;WAqB5D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,GAAG,GAAG;CAmEvE"}
|
package/lib/loader.js
CHANGED
|
@@ -33,6 +33,12 @@ class Loader {
|
|
|
33
33
|
// add additional camelCase keys for any kebab-case keys (without overwriting existing keys)
|
|
34
34
|
static convertKebabToCamelCase(obj, options) {
|
|
35
35
|
const newObj = {};
|
|
36
|
+
const objectOptions = {
|
|
37
|
+
...options,
|
|
38
|
+
};
|
|
39
|
+
if (typeof obj.variableCasing === "string") {
|
|
40
|
+
objectOptions.variableCasing = obj.variableCasing;
|
|
41
|
+
}
|
|
36
42
|
for (const key of Object.keys(obj)) {
|
|
37
43
|
const newKey = key.replace(/-([a-zA-Z0-9])/g, function (_, match) {
|
|
38
44
|
return match.toUpperCase();
|
|
@@ -45,14 +51,14 @@ class Loader {
|
|
|
45
51
|
if (typeof obj[key] === "object" &&
|
|
46
52
|
!Array.isArray(obj[key]) &&
|
|
47
53
|
obj[key] !== null) {
|
|
48
|
-
newSubObj = Loader.convertKebabToCamelCase(obj[key],
|
|
54
|
+
newSubObj = Loader.convertKebabToCamelCase(obj[key], objectOptions);
|
|
49
55
|
}
|
|
50
56
|
else if (Array.isArray(obj[key])) {
|
|
51
57
|
newSubObj = obj[key].map((item) => {
|
|
52
58
|
if (typeof item === "object" &&
|
|
53
59
|
!Array.isArray(item) &&
|
|
54
60
|
item !== null) {
|
|
55
|
-
return Loader.convertKebabToCamelCase(item,
|
|
61
|
+
return Loader.convertKebabToCamelCase(item, objectOptions);
|
|
56
62
|
}
|
|
57
63
|
else {
|
|
58
64
|
return item;
|
|
@@ -62,8 +68,15 @@ class Loader {
|
|
|
62
68
|
else {
|
|
63
69
|
newSubObj = obj[key];
|
|
64
70
|
}
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
const keepCamel = typeof objectOptions.variableCasing === "undefined" ||
|
|
72
|
+
objectOptions.variableCasing === "camel" ||
|
|
73
|
+
objectOptions.variableCasing === "both";
|
|
74
|
+
const keepOriginal = objectOptions.variableCasing === "original" ||
|
|
75
|
+
objectOptions.variableCasing === "both";
|
|
76
|
+
if (keepCamel) {
|
|
77
|
+
newObj[newKey] = newSubObj;
|
|
78
|
+
}
|
|
79
|
+
if (keepOriginal && ((keepCamel && newKey !== key) || !keepCamel)) {
|
|
67
80
|
newObj[key] = newSubObj;
|
|
68
81
|
}
|
|
69
82
|
}
|
package/lib/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,+CAAmD;AACnD,kDAA0B;AAC1B,sDAA2B;AAC3B,gEAAiC;AAOjC,MAAa,MAAM;IACV,MAAM,CAAC,kBAAkB,CAAC,MAAc;QAC7C,IAAI,OAAO,GAAyB,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QACpD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;YACpC,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE;gBAChD,IAAI;oBACF,OAAO,GAAG,IAAI,CAAC,KAAK,CAClB,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;wBAC7C,QAAQ,EAAE,OAAO;qBAClB,CAAC,CACH,CAAC;oBAEF,MAAM;iBACP;gBAAC,OAAO,CAAM,EAAE;oBACf,OAAO,CAAC,KAAK,CACX,mBAAmB,cAAI,CAAC,IAAI,CAC1B,MAAM,EACN,UAAU,CACX,+BAA+B,CACjC,CAAC;oBAEF,MAAM;iBACP;aACF;SACF;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4FAA4F;IACrF,MAAM,CAAC,uBAAuB,CACnC,GAAQ,EACR,OAA6B;QAE7B,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE,KAAK;gBAC9D,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,WAAW,IAAI,MAAM,KAAK,GAAG,EAAE;gBACxD,OAAO,CAAC,KAAK,CACX,OAAO,MAAM,kCAAkC,GAAG,+BAA+B,GAAG,EAAE,CACvF,CAAC;gBACF,SAAS;aACV;YAED,IAAI,SAAS,GAAQ,EAAE,CAAC;YACxB,IACE,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EACjB;gBACA,SAAS,GAAG,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -12,6 +12,7 @@ export default class Config {
|
|
|
12
12
|
private configDir: string = "";
|
|
13
13
|
|
|
14
14
|
private values: any;
|
|
15
|
+
private normalizedValues: any;
|
|
15
16
|
private customValues: any;
|
|
16
17
|
|
|
17
18
|
private envVarConfig: any;
|
|
@@ -22,6 +23,7 @@ export default class Config {
|
|
|
22
23
|
|
|
23
24
|
public init(options?: IConfigOptions): void {
|
|
24
25
|
this.values = {};
|
|
26
|
+
this.normalizedValues = {};
|
|
25
27
|
this.customValues = {};
|
|
26
28
|
|
|
27
29
|
let defaultConfigDir = "config";
|
|
@@ -89,6 +91,7 @@ export default class Config {
|
|
|
89
91
|
);
|
|
90
92
|
|
|
91
93
|
merge(this.values, defaultValues, envValues, overrideValues);
|
|
94
|
+
this.normalizedValues = this.normalizeObject(this.values, []);
|
|
92
95
|
|
|
93
96
|
// load the environment variables that are configured to be injected
|
|
94
97
|
// using config-env
|
|
@@ -134,7 +137,7 @@ export default class Config {
|
|
|
134
137
|
throw new Error("Cannot use an empty key");
|
|
135
138
|
}
|
|
136
139
|
|
|
137
|
-
let obj = this.
|
|
140
|
+
let obj = merge({}, this.normalizedValues);
|
|
138
141
|
|
|
139
142
|
for (const part of keyParts) {
|
|
140
143
|
// convert to camelCase first
|
|
@@ -149,55 +152,81 @@ export default class Config {
|
|
|
149
152
|
obj = obj[newPart];
|
|
150
153
|
}
|
|
151
154
|
|
|
155
|
+
return obj as T;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
public normalizeString(value: string, currentPath: string[]): string {
|
|
159
|
+
let result = value;
|
|
160
|
+
|
|
152
161
|
const variableRegex = /\$\{[a-zA-Z\-_0-9./]+\}/g;
|
|
162
|
+
const regexResult = value.matchAll(variableRegex);
|
|
163
|
+
for (const match of regexResult) {
|
|
164
|
+
const key = match[0].slice(2, match[0].length - 1);
|
|
165
|
+
|
|
166
|
+
let keyToFetchValue: string;
|
|
167
|
+
if (key.startsWith(".")) {
|
|
168
|
+
keyToFetchValue = path
|
|
169
|
+
.normalize(`${currentPath.join("/")}/${key}`)
|
|
170
|
+
.replaceAll("\\", "/")
|
|
171
|
+
.replaceAll("/", ".");
|
|
172
|
+
} else {
|
|
173
|
+
keyToFetchValue = key;
|
|
174
|
+
}
|
|
153
175
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
const newValue = this.tryGet<string | number | boolean>(keyToReplace);
|
|
167
|
-
if (newValue !== null) {
|
|
168
|
-
result = result.replace(match[0], `${newValue}`);
|
|
176
|
+
let obj = merge({}, this.values);
|
|
177
|
+
|
|
178
|
+
const keyParts = keyToFetchValue.split(".");
|
|
179
|
+
for (const part of keyParts) {
|
|
180
|
+
// convert to camelCase first
|
|
181
|
+
const newPart = part.replace(/-([a-zA-Z0-9])/g, function (_, match) {
|
|
182
|
+
return match.toUpperCase();
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
if (typeof obj[newPart] === "undefined") {
|
|
186
|
+
throw new Error(`Could not find value for key ${keyParts.join(".")}`);
|
|
169
187
|
}
|
|
188
|
+
|
|
189
|
+
obj = obj[newPart];
|
|
170
190
|
}
|
|
171
191
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
// replace all ${value} with the value from the config
|
|
176
|
-
if (typeof obj === "string") {
|
|
177
|
-
obj = replaceValue(obj);
|
|
178
|
-
} else if (typeof obj === "object") {
|
|
179
|
-
// walk the object and replace all strings with the value from the config
|
|
180
|
-
const walkObject = (curObj: any): void => {
|
|
181
|
-
for (const property of Object.keys(curObj)) {
|
|
182
|
-
const value = curObj[property];
|
|
183
|
-
if (typeof value === "string") {
|
|
184
|
-
curObj[property] = replaceValue(value);
|
|
185
|
-
} else if (typeof value === "object") {
|
|
186
|
-
if (value === null) {
|
|
187
|
-
curObj[property] = null;
|
|
188
|
-
} else {
|
|
189
|
-
walkObject(value);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
+
if (obj !== null) {
|
|
193
|
+
if (typeof obj === "string" && obj.match(variableRegex) !== null) {
|
|
194
|
+
obj = this.normalizeString(obj, keyParts.slice(0, -1));
|
|
192
195
|
}
|
|
193
|
-
};
|
|
194
196
|
|
|
195
|
-
|
|
196
|
-
walkObject(obj);
|
|
197
|
+
result = result.replace(match[0], `${obj}`);
|
|
197
198
|
}
|
|
198
199
|
}
|
|
199
200
|
|
|
200
|
-
return
|
|
201
|
+
return result;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
public normalizeObject(obj: any, currentPath: string[]): any {
|
|
205
|
+
if (typeof obj !== "object" || obj === null) {
|
|
206
|
+
return obj;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const newObj = merge({}, obj);
|
|
210
|
+
|
|
211
|
+
for (const property of Object.keys(newObj)) {
|
|
212
|
+
const value = newObj[property];
|
|
213
|
+
if (typeof value === "string") {
|
|
214
|
+
newObj[property] = this.normalizeString(value, currentPath);
|
|
215
|
+
} else if (typeof value === "object") {
|
|
216
|
+
if (value === null) {
|
|
217
|
+
newObj[property] = null;
|
|
218
|
+
} else if (Array.isArray(value)) {
|
|
219
|
+
continue;
|
|
220
|
+
} else {
|
|
221
|
+
newObj[property] = this.normalizeObject(value, [
|
|
222
|
+
...currentPath,
|
|
223
|
+
property,
|
|
224
|
+
]);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return newObj;
|
|
201
230
|
}
|
|
202
231
|
|
|
203
232
|
public tryGet<T>(key: string): T | null {
|
|
@@ -210,7 +239,9 @@ export default class Config {
|
|
|
210
239
|
}
|
|
211
240
|
|
|
212
241
|
public getJson(): any {
|
|
213
|
-
|
|
242
|
+
const values = merge({}, this.normalizedValues);
|
|
243
|
+
|
|
244
|
+
return values;
|
|
214
245
|
}
|
|
215
246
|
|
|
216
247
|
public set<T>(key: string, value: T): void {
|
package/src/loader.ts
CHANGED
|
@@ -6,7 +6,7 @@ import YAML from "js-yaml";
|
|
|
6
6
|
import merge from "lodash.merge";
|
|
7
7
|
|
|
8
8
|
export interface IConfigFolderOptions {
|
|
9
|
-
|
|
9
|
+
variableCasing?: "original" | "camel" | "both";
|
|
10
10
|
parentNames?: string[];
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -47,6 +47,14 @@ export class Loader {
|
|
|
47
47
|
): any {
|
|
48
48
|
const newObj: any = {};
|
|
49
49
|
|
|
50
|
+
const objectOptions: IConfigFolderOptions = {
|
|
51
|
+
...options,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
if (typeof obj.variableCasing === "string") {
|
|
55
|
+
objectOptions.variableCasing = obj.variableCasing;
|
|
56
|
+
}
|
|
57
|
+
|
|
50
58
|
for (const key of Object.keys(obj)) {
|
|
51
59
|
const newKey = key.replace(/-([a-zA-Z0-9])/g, function (_, match) {
|
|
52
60
|
return match.toUpperCase();
|
|
@@ -65,7 +73,7 @@ export class Loader {
|
|
|
65
73
|
!Array.isArray(obj[key]) &&
|
|
66
74
|
obj[key] !== null
|
|
67
75
|
) {
|
|
68
|
-
newSubObj = Loader.convertKebabToCamelCase(obj[key],
|
|
76
|
+
newSubObj = Loader.convertKebabToCamelCase(obj[key], objectOptions);
|
|
69
77
|
} else if (Array.isArray(obj[key])) {
|
|
70
78
|
newSubObj = obj[key].map((item: any) => {
|
|
71
79
|
if (
|
|
@@ -73,7 +81,7 @@ export class Loader {
|
|
|
73
81
|
!Array.isArray(item) &&
|
|
74
82
|
item !== null
|
|
75
83
|
) {
|
|
76
|
-
return Loader.convertKebabToCamelCase(item,
|
|
84
|
+
return Loader.convertKebabToCamelCase(item, objectOptions);
|
|
77
85
|
} else {
|
|
78
86
|
return item;
|
|
79
87
|
}
|
|
@@ -82,9 +90,19 @@ export class Loader {
|
|
|
82
90
|
newSubObj = obj[key];
|
|
83
91
|
}
|
|
84
92
|
|
|
85
|
-
|
|
93
|
+
const keepCamel =
|
|
94
|
+
typeof objectOptions.variableCasing === "undefined" ||
|
|
95
|
+
objectOptions.variableCasing === "camel" ||
|
|
96
|
+
objectOptions.variableCasing === "both";
|
|
97
|
+
const keepOriginal =
|
|
98
|
+
objectOptions.variableCasing === "original" ||
|
|
99
|
+
objectOptions.variableCasing === "both";
|
|
100
|
+
|
|
101
|
+
if (keepCamel) {
|
|
102
|
+
newObj[newKey] = newSubObj;
|
|
103
|
+
}
|
|
86
104
|
|
|
87
|
-
if (
|
|
105
|
+
if (keepOriginal && ((keepCamel && newKey !== key) || !keepCamel)) {
|
|
88
106
|
newObj[key] = newSubObj;
|
|
89
107
|
}
|
|
90
108
|
}
|