@incanta/config 0.1.9 → 0.1.11
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.map +1 -1
- package/lib/config.js +9 -8
- package/lib/config.js.map +1 -1
- package/lib/loader.d.ts +8 -0
- package/lib/loader.d.ts.map +1 -1
- package/lib/loader.js +26 -9
- package/lib/loader.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +12 -10
- package/src/loader.ts +44 -17
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,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAAM;gBAEP,OAAO,CAAC,EAAE,cAAc;
|
|
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,qBAAa,MAAM;IACjB,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,YAAY,CAAM;gBAEP,OAAO,CAAC,EAAE,cAAc;IA6CpC,GAAG,IAAI,MAAM;IAIpB,OAAO,CAAC,kBAAkB;IAkBnB,gBAAgB,IAAI,GAAG;IAsBvB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC;IAKtB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC;IAsDtC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAShC,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
|
@@ -32,9 +32,8 @@ class Config {
|
|
|
32
32
|
console.log(`Cannot use environment deployment value of ${configEnvDir} because ${path_1.default.join(this.configDir, configEnvDir)} doesn't exist`);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
const localValues = loader_1.Loader.load(path_1.default.join(this.configDir, "local"));
|
|
36
35
|
const overrideValues = loader_1.Loader.loadFile(path_1.default.join(this.configDir, "override.json"));
|
|
37
|
-
(0, lodash_merge_1.default)(this.values, defaultValues, envValues,
|
|
36
|
+
(0, lodash_merge_1.default)(this.values, defaultValues, envValues, overrideValues);
|
|
38
37
|
// load the environment variables that are configured to be injected
|
|
39
38
|
// using config-env
|
|
40
39
|
const dirContents = fs_1.default.readdirSync(this.configDir, { encoding: "utf-8" });
|
|
@@ -100,25 +99,27 @@ class Config {
|
|
|
100
99
|
const variableRegex = /\$\{[a-zA-Z\-_0-9.]+\}/g;
|
|
101
100
|
const replaceValue = (value) => {
|
|
102
101
|
const regexResult = value.matchAll(variableRegex);
|
|
102
|
+
let result = value;
|
|
103
103
|
for (const match of regexResult) {
|
|
104
104
|
const keyToReplace = match[0].slice(2, match[0].length - 1);
|
|
105
|
-
const
|
|
106
|
-
if (
|
|
107
|
-
|
|
105
|
+
const newValue = this.tryGet(keyToReplace);
|
|
106
|
+
if (newValue !== null) {
|
|
107
|
+
result = result.replace(match[0], `${newValue}`);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
+
return result;
|
|
110
111
|
};
|
|
111
112
|
// replace all ${value} with the value from the config
|
|
112
113
|
if (typeof obj === "string") {
|
|
113
|
-
replaceValue(obj);
|
|
114
|
+
obj = replaceValue(obj);
|
|
114
115
|
}
|
|
115
116
|
else if (typeof obj === "object") {
|
|
116
117
|
// walk the object and replace all strings with the value from the config
|
|
117
118
|
const walkObject = (curObj) => {
|
|
118
119
|
for (const property of Object.keys(curObj)) {
|
|
119
120
|
const value = curObj[property];
|
|
120
|
-
if (typeof value === "string") {
|
|
121
|
-
replaceValue(value);
|
|
121
|
+
if (typeof value === "string" && property !== "format") {
|
|
122
|
+
curObj[property] = replaceValue(value);
|
|
122
123
|
}
|
|
123
124
|
else if (typeof value === "object") {
|
|
124
125
|
walkObject(value);
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAiC;AACjC,gDAAwB;AACxB,4CAAoB;AACpB,qCAAkC;AAOlC,MAAa,MAAM;IACT,SAAS,CAAS;IAElB,MAAM,CAAM;IACZ,YAAY,CAAM;IAElB,YAAY,CAAM;IAE1B,YAAmB,OAAwB;QACzC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,CAAC,SAAS;YACZ,OAAO,EAAE,SAAS;gBAClB,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;oBAC7B,cAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC/D,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAErC,MAAM,aAAa,GAAG,eAAM,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAExE,IAAI,SAAS,GAAQ,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,OAAO,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC1E,IAAI,YAAY,EAAE;YAChB,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE;gBAC1D,SAAS,GAAG,eAAM,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;aAClE;iBAAM;gBACL,OAAO,CAAC,GAAG,CACT,8CAA8C,YAAY,YAAY,cAAI,CAAC,IAAI,CAC7E,IAAI,CAAC,SAAS,EACd,YAAY,CACb,gBAAgB,CAClB,CAAC;aACH;SACF;QAED,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/lib/loader.d.ts
ADDED
package/lib/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAOA,qBAAa,MAAM;WACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;WAgC/B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,MAAM;WACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;WAgC/B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG;CAyFxC"}
|
package/lib/loader.js
CHANGED
|
@@ -45,11 +45,30 @@ class Loader {
|
|
|
45
45
|
if (!fs_1.default.existsSync(folder)) {
|
|
46
46
|
return {};
|
|
47
47
|
}
|
|
48
|
+
const baseObj = {};
|
|
49
|
+
const configFiles = ["_config.json", "config.json"];
|
|
50
|
+
for (const configFile of configFiles) {
|
|
51
|
+
if (fs_1.default.existsSync(path_1.default.join(folder, configFile))) {
|
|
52
|
+
try {
|
|
53
|
+
const folderConfig = JSON.parse(fs_1.default.readFileSync(path_1.default.join(folder, configFile), {
|
|
54
|
+
encoding: "utf-8",
|
|
55
|
+
}));
|
|
56
|
+
if (folderConfig.parentName) {
|
|
57
|
+
console.log(`Loading parent config ${folderConfig.parentName}`);
|
|
58
|
+
(0, lodash_merge_1.default)(baseObj, Loader.load(path_1.default.join(folder, "..", folderConfig.parentName)));
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
console.error(`Invalid JSON in ${path_1.default.join(folder, configFile)} file; skipping configuration`);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
48
68
|
const contents = fs_1.default.readdirSync(folder, {
|
|
49
69
|
encoding: "utf-8",
|
|
50
70
|
withFileTypes: true,
|
|
51
71
|
});
|
|
52
|
-
const baseObj = {};
|
|
53
72
|
for (const content of contents) {
|
|
54
73
|
if (!content.isDirectory() && /^_?index\./.exec(content.name) !== null) {
|
|
55
74
|
(0, lodash_merge_1.default)(baseObj, Loader.loadFile(path_1.default.join(folder, content.name)));
|
|
@@ -58,12 +77,11 @@ class Loader {
|
|
|
58
77
|
for (const content of contents) {
|
|
59
78
|
if (content.isDirectory()) {
|
|
60
79
|
const key = content.name;
|
|
61
|
-
if (typeof baseObj[key]
|
|
62
|
-
|
|
63
|
-
continue;
|
|
80
|
+
if (typeof baseObj[key] === "undefined") {
|
|
81
|
+
baseObj[key] = {};
|
|
64
82
|
}
|
|
65
83
|
const obj = Loader.load(path_1.default.join(folder, content.name));
|
|
66
|
-
baseObj[key]
|
|
84
|
+
(0, lodash_merge_1.default)(baseObj[key], obj);
|
|
67
85
|
}
|
|
68
86
|
else {
|
|
69
87
|
if (/^_?index\./.exec(content.name) !== null) {
|
|
@@ -73,12 +91,11 @@ class Loader {
|
|
|
73
91
|
const fileParts = content.name.split(".");
|
|
74
92
|
if (fileParts.length === 2) {
|
|
75
93
|
const key = fileParts[0];
|
|
76
|
-
if (typeof baseObj[key]
|
|
77
|
-
|
|
78
|
-
continue;
|
|
94
|
+
if (typeof baseObj[key] === "undefined") {
|
|
95
|
+
baseObj[key] = {};
|
|
79
96
|
}
|
|
80
97
|
const obj = Loader.loadFile(path_1.default.join(folder, content.name));
|
|
81
|
-
baseObj[key]
|
|
98
|
+
(0, lodash_merge_1.default)(baseObj[key], obj);
|
|
82
99
|
}
|
|
83
100
|
else {
|
|
84
101
|
console.log(`Invalid file name ${content.name}. Config files must have a supported extension and contain no extra periods in the file name`);
|
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;
|
|
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
|
@@ -43,13 +43,11 @@ export class Config {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
const localValues = Loader.load(path.join(this.configDir, "local"));
|
|
47
|
-
|
|
48
46
|
const overrideValues = Loader.loadFile(
|
|
49
47
|
path.join(this.configDir, "override.json")
|
|
50
48
|
);
|
|
51
49
|
|
|
52
|
-
merge(this.values, defaultValues, envValues,
|
|
50
|
+
merge(this.values, defaultValues, envValues, overrideValues);
|
|
53
51
|
|
|
54
52
|
// load the environment variables that are configured to be injected
|
|
55
53
|
// using config-env
|
|
@@ -129,27 +127,31 @@ export class Config {
|
|
|
129
127
|
|
|
130
128
|
const variableRegex = /\$\{[a-zA-Z\-_0-9.]+\}/g;
|
|
131
129
|
|
|
132
|
-
const replaceValue = (value: string):
|
|
130
|
+
const replaceValue = (value: string): string => {
|
|
133
131
|
const regexResult = value.matchAll(variableRegex);
|
|
132
|
+
let result = value;
|
|
133
|
+
|
|
134
134
|
for (const match of regexResult) {
|
|
135
135
|
const keyToReplace = match[0].slice(2, match[0].length - 1);
|
|
136
|
-
const
|
|
137
|
-
if (
|
|
138
|
-
|
|
136
|
+
const newValue = this.tryGet<string | number | boolean>(keyToReplace);
|
|
137
|
+
if (newValue !== null) {
|
|
138
|
+
result = result.replace(match[0], `${newValue}`);
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
|
+
|
|
142
|
+
return result;
|
|
141
143
|
};
|
|
142
144
|
|
|
143
145
|
// replace all ${value} with the value from the config
|
|
144
146
|
if (typeof obj === "string") {
|
|
145
|
-
replaceValue(obj);
|
|
147
|
+
obj = replaceValue(obj);
|
|
146
148
|
} else if (typeof obj === "object") {
|
|
147
149
|
// walk the object and replace all strings with the value from the config
|
|
148
150
|
const walkObject = (curObj: any): void => {
|
|
149
151
|
for (const property of Object.keys(curObj)) {
|
|
150
152
|
const value = curObj[property];
|
|
151
|
-
if (typeof value === "string") {
|
|
152
|
-
replaceValue(value);
|
|
153
|
+
if (typeof value === "string" && property !== "format") {
|
|
154
|
+
curObj[property] = replaceValue(value);
|
|
153
155
|
} else if (typeof value === "object") {
|
|
154
156
|
walkObject(value);
|
|
155
157
|
}
|
package/src/loader.ts
CHANGED
|
@@ -5,6 +5,10 @@ import JSON5 from "json5";
|
|
|
5
5
|
import YAML from "js-yaml";
|
|
6
6
|
import merge from "lodash.merge";
|
|
7
7
|
|
|
8
|
+
export interface IConfigOptions {
|
|
9
|
+
parentName?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
8
12
|
export class Loader {
|
|
9
13
|
public static loadFile(filePath: string): any {
|
|
10
14
|
if (!fs.existsSync(filePath)) {
|
|
@@ -43,13 +47,45 @@ export class Loader {
|
|
|
43
47
|
return {};
|
|
44
48
|
}
|
|
45
49
|
|
|
50
|
+
const baseObj: any = {};
|
|
51
|
+
|
|
52
|
+
const configFiles = ["_config.json", "config.json"];
|
|
53
|
+
for (const configFile of configFiles) {
|
|
54
|
+
if (fs.existsSync(path.join(folder, configFile))) {
|
|
55
|
+
try {
|
|
56
|
+
const folderConfig: IConfigOptions = JSON.parse(
|
|
57
|
+
fs.readFileSync(path.join(folder, configFile), {
|
|
58
|
+
encoding: "utf-8",
|
|
59
|
+
})
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
if (folderConfig.parentName) {
|
|
63
|
+
console.log(`Loading parent config ${folderConfig.parentName}`);
|
|
64
|
+
merge(
|
|
65
|
+
baseObj,
|
|
66
|
+
Loader.load(path.join(folder, "..", folderConfig.parentName))
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
break;
|
|
71
|
+
} catch (e: any) {
|
|
72
|
+
console.error(
|
|
73
|
+
`Invalid JSON in ${path.join(
|
|
74
|
+
folder,
|
|
75
|
+
configFile
|
|
76
|
+
)} file; skipping configuration`
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
46
84
|
const contents = fs.readdirSync(folder, {
|
|
47
85
|
encoding: "utf-8",
|
|
48
86
|
withFileTypes: true,
|
|
49
87
|
});
|
|
50
88
|
|
|
51
|
-
const baseObj: any = {};
|
|
52
|
-
|
|
53
89
|
for (const content of contents) {
|
|
54
90
|
if (!content.isDirectory() && /^_?index\./.exec(content.name) !== null) {
|
|
55
91
|
merge(baseObj, Loader.loadFile(path.join(folder, content.name)));
|
|
@@ -60,16 +96,13 @@ export class Loader {
|
|
|
60
96
|
if (content.isDirectory()) {
|
|
61
97
|
const key = content.name;
|
|
62
98
|
|
|
63
|
-
if (typeof baseObj[key]
|
|
64
|
-
|
|
65
|
-
`Could not load the directory ${key} because we already loaded a config for a file with the same name`
|
|
66
|
-
);
|
|
67
|
-
continue;
|
|
99
|
+
if (typeof baseObj[key] === "undefined") {
|
|
100
|
+
baseObj[key] = {};
|
|
68
101
|
}
|
|
69
102
|
|
|
70
103
|
const obj = Loader.load(path.join(folder, content.name));
|
|
71
104
|
|
|
72
|
-
baseObj[key]
|
|
105
|
+
merge(baseObj[key], obj);
|
|
73
106
|
} else {
|
|
74
107
|
if (/^_?index\./.exec(content.name) !== null) {
|
|
75
108
|
// we already loaded this to be be in the base config
|
|
@@ -80,19 +113,13 @@ export class Loader {
|
|
|
80
113
|
if (fileParts.length === 2) {
|
|
81
114
|
const key = fileParts[0];
|
|
82
115
|
|
|
83
|
-
if (typeof baseObj[key]
|
|
84
|
-
|
|
85
|
-
`Could not load the file ${path.join(
|
|
86
|
-
folder,
|
|
87
|
-
content.name
|
|
88
|
-
)} because we already loaded a config for a folder with the same name`
|
|
89
|
-
);
|
|
90
|
-
continue;
|
|
116
|
+
if (typeof baseObj[key] === "undefined") {
|
|
117
|
+
baseObj[key] = {};
|
|
91
118
|
}
|
|
92
119
|
|
|
93
120
|
const obj = Loader.loadFile(path.join(folder, content.name));
|
|
94
121
|
|
|
95
|
-
baseObj[key]
|
|
122
|
+
merge(baseObj[key], obj);
|
|
96
123
|
} else {
|
|
97
124
|
console.log(
|
|
98
125
|
`Invalid file name ${content.name}. Config files must have a supported extension and contain no extra periods in the file name`
|