@incanta/config 0.3.0 → 0.4.0

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.
@@ -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;IAmEpC,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;IAkEtC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAShC,OAAO,IAAI,GAAG;IAId,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"}
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;IAqFpC,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;IAuEtC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAShC,OAAO,IAAI,GAAG;IAId,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
@@ -36,18 +36,22 @@ class Config {
36
36
  (process.env["NODE_CONFIG_DIR"] &&
37
37
  path_1.default.relative(process.cwd(), process.env["NODE_CONFIG_DIR"])) ||
38
38
  path_1.default.join(process.cwd(), defaultConfigDir);
39
- const defaultValues = loader_1.Loader.load(path_1.default.join(this.configDir, "default"));
40
- let envValues = {};
41
39
  const configEnvDir = options?.configEnv || process.env["NODE_CONFIG_ENV"] || defaultConfigEnv;
40
+ const configFolderOptions = loader_1.Loader.readConfigSettings(path_1.default.join(this.configDir, configEnvDir));
41
+ const defaultValues = loader_1.Loader.loadRoot(path_1.default.join(this.configDir, "default"), {
42
+ ...configFolderOptions,
43
+ parentNames: [],
44
+ });
45
+ let envValues = {};
42
46
  if (configEnvDir) {
43
47
  if (fs_1.default.existsSync(path_1.default.join(this.configDir, configEnvDir))) {
44
- envValues = loader_1.Loader.load(path_1.default.join(this.configDir, configEnvDir));
48
+ envValues = loader_1.Loader.loadRoot(path_1.default.join(this.configDir, configEnvDir), configFolderOptions);
45
49
  }
46
50
  else {
47
51
  console.log(`Cannot use environment deployment value of ${configEnvDir} because ${path_1.default.join(this.configDir, configEnvDir)} doesn't exist`);
48
52
  }
49
53
  }
50
- const overrideValues = loader_1.Loader.loadFile(path_1.default.join(this.configDir, "override.json"));
54
+ const overrideValues = loader_1.Loader.loadFile(path_1.default.join(this.configDir, "override.json"), {});
51
55
  (0, lodash_merge_1.default)(this.values, defaultValues, envValues, overrideValues);
52
56
  // load the environment variables that are configured to be injected
53
57
  // using config-env
@@ -55,7 +59,7 @@ class Config {
55
59
  this.envVarConfig = {};
56
60
  for (const file of dirContents) {
57
61
  if (file.startsWith("environment.")) {
58
- this.envVarConfig = loader_1.Loader.loadFile(path_1.default.join(this.configDir, file));
62
+ this.envVarConfig = loader_1.Loader.loadFile(path_1.default.join(this.configDir, file), {});
59
63
  break;
60
64
  }
61
65
  }
@@ -83,10 +87,14 @@ class Config {
83
87
  }
84
88
  let obj = this.values;
85
89
  for (const part of keyParts) {
86
- if (typeof obj[part] === "undefined") {
90
+ // convert to camelCase first
91
+ const newPart = part.replace(/-([a-zA-Z0-9])/g, function (_, match) {
92
+ return match.toUpperCase();
93
+ });
94
+ if (typeof obj[newPart] === "undefined") {
87
95
  throw new Error(`Could not find value for key ${keyParts.join(".")}`);
88
96
  }
89
- obj = obj[part];
97
+ obj = obj[newPart];
90
98
  }
91
99
  const variableRegex = /\$\{[a-zA-Z\-_0-9./]+\}/g;
92
100
  const replaceValue = (value) => {
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
@@ -1,9 +1,12 @@
1
- export interface IConfigOptions {
1
+ export interface IConfigFolderOptions {
2
+ variableCasing?: "original" | "camel" | "both";
2
3
  parentNames?: string[];
3
4
  }
4
5
  export declare class Loader {
5
- static convertKebabToCamelCase(obj: any): any;
6
- static loadFile(filePath: string): any;
7
- static load(folder: string): any;
6
+ static readConfigSettings(folder: string): IConfigFolderOptions;
7
+ static convertKebabToCamelCase(obj: any, options: IConfigFolderOptions): any;
8
+ static loadFile(filePath: string, options: IConfigFolderOptions): any;
9
+ static loadRoot(folder: string, options: IConfigFolderOptions): any;
10
+ static load(folder: string, options: IConfigFolderOptions): any;
8
11
  }
9
12
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,MAAM;WAEH,uBAAuB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;WAsCtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;WAuC/B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG;CAkGxC"}
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
@@ -11,21 +11,54 @@ const json5_1 = __importDefault(require("json5"));
11
11
  const js_yaml_1 = __importDefault(require("js-yaml"));
12
12
  const lodash_merge_1 = __importDefault(require("lodash.merge"));
13
13
  class Loader {
14
+ static readConfigSettings(folder) {
15
+ let options = {};
16
+ const configFiles = ["_config.json", "config.json"];
17
+ for (const configFile of configFiles) {
18
+ if (fs_1.default.existsSync(path_1.default.join(folder, configFile))) {
19
+ try {
20
+ options = JSON.parse(fs_1.default.readFileSync(path_1.default.join(folder, configFile), {
21
+ encoding: "utf-8",
22
+ }));
23
+ break;
24
+ }
25
+ catch (e) {
26
+ console.error(`Invalid JSON in ${path_1.default.join(folder, configFile)} file; skipping configuration`);
27
+ break;
28
+ }
29
+ }
30
+ }
31
+ return options;
32
+ }
14
33
  // add additional camelCase keys for any kebab-case keys (without overwriting existing keys)
15
- static convertKebabToCamelCase(obj) {
34
+ static convertKebabToCamelCase(obj, options) {
16
35
  const newObj = {};
36
+ const objectOptions = {
37
+ ...options,
38
+ };
39
+ if (typeof obj.variableCasing === "string") {
40
+ objectOptions.variableCasing = obj.variableCasing;
41
+ }
17
42
  for (const key of Object.keys(obj)) {
43
+ const newKey = key.replace(/-([a-zA-Z0-9])/g, function (_, match) {
44
+ return match.toUpperCase();
45
+ });
46
+ if (typeof obj[newKey] !== "undefined" && newKey !== key) {
47
+ console.error(`Key ${newKey} already exists in object, but ${key} was also defined, skipping ${key}`);
48
+ continue;
49
+ }
50
+ let newSubObj = {};
18
51
  if (typeof obj[key] === "object" &&
19
52
  !Array.isArray(obj[key]) &&
20
53
  obj[key] !== null) {
21
- newObj[key] = Loader.convertKebabToCamelCase(obj[key]);
54
+ newSubObj = Loader.convertKebabToCamelCase(obj[key], objectOptions);
22
55
  }
23
56
  else if (Array.isArray(obj[key])) {
24
- newObj[key] = obj[key].map((item) => {
57
+ newSubObj = obj[key].map((item) => {
25
58
  if (typeof item === "object" &&
26
59
  !Array.isArray(item) &&
27
60
  item !== null) {
28
- return Loader.convertKebabToCamelCase(item);
61
+ return Loader.convertKebabToCamelCase(item, objectOptions);
29
62
  }
30
63
  else {
31
64
  return item;
@@ -33,18 +66,23 @@ class Loader {
33
66
  });
34
67
  }
35
68
  else {
36
- newObj[key] = obj[key];
69
+ newSubObj = obj[key];
37
70
  }
38
- const newKey = key.replace(/-([a-zA-Z0-9])/g, function (_, match) {
39
- return match.toUpperCase();
40
- });
41
- if (newKey !== key) {
42
- newObj[newKey] = newObj[key];
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)) {
80
+ newObj[key] = newSubObj;
43
81
  }
44
82
  }
45
83
  return newObj;
46
84
  }
47
- static loadFile(filePath) {
85
+ static loadFile(filePath, options) {
48
86
  if (!fs_1.default.existsSync(filePath)) {
49
87
  return {};
50
88
  }
@@ -75,39 +113,29 @@ class Loader {
75
113
  obj = {};
76
114
  }
77
115
  if (typeof obj === "object" && obj !== null && !Array.isArray(obj)) {
78
- obj = Loader.convertKebabToCamelCase(obj);
116
+ obj = Loader.convertKebabToCamelCase(obj, options);
79
117
  }
80
118
  return obj;
81
119
  }
82
- static load(folder) {
83
- if (!fs_1.default.existsSync(folder)) {
84
- return {};
85
- }
120
+ static loadRoot(folder, options) {
86
121
  const baseObj = {};
87
- const configFiles = ["_config.json", "config.json"];
88
- for (const configFile of configFiles) {
89
- if (fs_1.default.existsSync(path_1.default.join(folder, configFile))) {
90
- try {
91
- const folderConfig = JSON.parse(fs_1.default.readFileSync(path_1.default.join(folder, configFile), {
92
- encoding: "utf-8",
93
- }));
94
- if (folderConfig.parentNames) {
95
- for (const parentName of folderConfig.parentNames) {
96
- if (parentName === "default") {
97
- // skip explicitly stated default parents; they're already loaded
98
- continue;
99
- }
100
- (0, lodash_merge_1.default)(baseObj, Loader.load(path_1.default.join(folder, "..", parentName)));
101
- }
102
- }
103
- break;
104
- }
105
- catch (e) {
106
- console.error(`Invalid JSON in ${path_1.default.join(folder, configFile)} file; skipping configuration`);
107
- break;
122
+ if (options.parentNames) {
123
+ for (const parentName of options.parentNames) {
124
+ if (parentName === "default") {
125
+ // skip explicitly stated default parents; they're already loaded
126
+ continue;
108
127
  }
128
+ (0, lodash_merge_1.default)(baseObj, Loader.load(path_1.default.join(folder, "..", parentName), options));
109
129
  }
110
130
  }
131
+ (0, lodash_merge_1.default)(baseObj, Loader.load(folder, options));
132
+ return baseObj;
133
+ }
134
+ static load(folder, options) {
135
+ if (!fs_1.default.existsSync(folder)) {
136
+ return {};
137
+ }
138
+ const baseObj = {};
111
139
  const contents = fs_1.default.readdirSync(folder, {
112
140
  encoding: "utf-8",
113
141
  withFileTypes: true,
@@ -115,7 +143,7 @@ class Loader {
115
143
  // first load the index file
116
144
  for (const content of contents) {
117
145
  if (!content.isDirectory() && /^_?index\./.exec(content.name) !== null) {
118
- (0, lodash_merge_1.default)(baseObj, Loader.loadFile(path_1.default.join(folder, content.name)));
146
+ (0, lodash_merge_1.default)(baseObj, Loader.loadFile(path_1.default.join(folder, content.name), options));
119
147
  }
120
148
  }
121
149
  // then load other files
@@ -129,7 +157,7 @@ class Loader {
129
157
  if (typeof baseObj[key] === "undefined") {
130
158
  baseObj[key] = {};
131
159
  }
132
- const obj = Loader.load(path_1.default.join(folder, content.name));
160
+ const obj = Loader.load(path_1.default.join(folder, content.name), options);
133
161
  (0, lodash_merge_1.default)(baseObj[key], obj);
134
162
  }
135
163
  else {
@@ -143,7 +171,7 @@ class Loader {
143
171
  if (typeof baseObj[key] === "undefined") {
144
172
  baseObj[key] = {};
145
173
  }
146
- const obj = Loader.loadFile(path_1.default.join(folder, content.name));
174
+ const obj = Loader.loadFile(path_1.default.join(folder, content.name), options);
147
175
  (0, lodash_merge_1.default)(baseObj[key], obj);
148
176
  }
149
177
  else {
package/lib/loader.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incanta/config",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "main": "lib/index.js",
5
5
  "exports": {
6
6
  ".": "./lib/index.js",
package/src/config.ts CHANGED
@@ -51,14 +51,28 @@ export default class Config {
51
51
  path.relative(process.cwd(), process.env["NODE_CONFIG_DIR"])) ||
52
52
  path.join(process.cwd(), defaultConfigDir);
53
53
 
54
- const defaultValues = Loader.load(path.join(this.configDir, "default"));
55
-
56
- let envValues: any = {};
57
54
  const configEnvDir =
58
55
  options?.configEnv || process.env["NODE_CONFIG_ENV"] || defaultConfigEnv;
56
+
57
+ const configFolderOptions = Loader.readConfigSettings(
58
+ path.join(this.configDir, configEnvDir)
59
+ );
60
+
61
+ const defaultValues = Loader.loadRoot(
62
+ path.join(this.configDir, "default"),
63
+ {
64
+ ...configFolderOptions,
65
+ parentNames: [],
66
+ }
67
+ );
68
+
69
+ let envValues: any = {};
59
70
  if (configEnvDir) {
60
71
  if (fs.existsSync(path.join(this.configDir, configEnvDir))) {
61
- envValues = Loader.load(path.join(this.configDir, configEnvDir));
72
+ envValues = Loader.loadRoot(
73
+ path.join(this.configDir, configEnvDir),
74
+ configFolderOptions
75
+ );
62
76
  } else {
63
77
  console.log(
64
78
  `Cannot use environment deployment value of ${configEnvDir} because ${path.join(
@@ -70,7 +84,8 @@ export default class Config {
70
84
  }
71
85
 
72
86
  const overrideValues = Loader.loadFile(
73
- path.join(this.configDir, "override.json")
87
+ path.join(this.configDir, "override.json"),
88
+ {}
74
89
  );
75
90
 
76
91
  merge(this.values, defaultValues, envValues, overrideValues);
@@ -81,7 +96,10 @@ export default class Config {
81
96
  this.envVarConfig = {};
82
97
  for (const file of dirContents) {
83
98
  if (file.startsWith("environment.")) {
84
- this.envVarConfig = Loader.loadFile(path.join(this.configDir, file));
99
+ this.envVarConfig = Loader.loadFile(
100
+ path.join(this.configDir, file),
101
+ {}
102
+ );
85
103
  break;
86
104
  }
87
105
  }
@@ -119,11 +137,16 @@ export default class Config {
119
137
  let obj = this.values;
120
138
 
121
139
  for (const part of keyParts) {
122
- if (typeof obj[part] === "undefined") {
140
+ // convert to camelCase first
141
+ const newPart = part.replace(/-([a-zA-Z0-9])/g, function (_, match) {
142
+ return match.toUpperCase();
143
+ });
144
+
145
+ if (typeof obj[newPart] === "undefined") {
123
146
  throw new Error(`Could not find value for key ${keyParts.join(".")}`);
124
147
  }
125
148
 
126
- obj = obj[part];
149
+ obj = obj[newPart];
127
150
  }
128
151
 
129
152
  const variableRegex = /\$\{[a-zA-Z\-_0-9./]+\}/g;
package/src/loader.ts CHANGED
@@ -5,51 +5,112 @@ import JSON5 from "json5";
5
5
  import YAML from "js-yaml";
6
6
  import merge from "lodash.merge";
7
7
 
8
- export interface IConfigOptions {
8
+ export interface IConfigFolderOptions {
9
+ variableCasing?: "original" | "camel" | "both";
9
10
  parentNames?: string[];
10
11
  }
11
12
 
12
13
  export class Loader {
14
+ public static readConfigSettings(folder: string): IConfigFolderOptions {
15
+ let options: IConfigFolderOptions = {};
16
+ const configFiles = ["_config.json", "config.json"];
17
+ for (const configFile of configFiles) {
18
+ if (fs.existsSync(path.join(folder, configFile))) {
19
+ try {
20
+ options = JSON.parse(
21
+ fs.readFileSync(path.join(folder, configFile), {
22
+ encoding: "utf-8",
23
+ })
24
+ );
25
+
26
+ break;
27
+ } catch (e: any) {
28
+ console.error(
29
+ `Invalid JSON in ${path.join(
30
+ folder,
31
+ configFile
32
+ )} file; skipping configuration`
33
+ );
34
+
35
+ break;
36
+ }
37
+ }
38
+ }
39
+
40
+ return options;
41
+ }
42
+
13
43
  // add additional camelCase keys for any kebab-case keys (without overwriting existing keys)
14
- public static convertKebabToCamelCase(obj: any): any {
44
+ public static convertKebabToCamelCase(
45
+ obj: any,
46
+ options: IConfigFolderOptions
47
+ ): any {
15
48
  const newObj: any = {};
16
49
 
50
+ const objectOptions: IConfigFolderOptions = {
51
+ ...options,
52
+ };
53
+
54
+ if (typeof obj.variableCasing === "string") {
55
+ objectOptions.variableCasing = obj.variableCasing;
56
+ }
57
+
17
58
  for (const key of Object.keys(obj)) {
59
+ const newKey = key.replace(/-([a-zA-Z0-9])/g, function (_, match) {
60
+ return match.toUpperCase();
61
+ });
62
+
63
+ if (typeof obj[newKey] !== "undefined" && newKey !== key) {
64
+ console.error(
65
+ `Key ${newKey} already exists in object, but ${key} was also defined, skipping ${key}`
66
+ );
67
+ continue;
68
+ }
69
+
70
+ let newSubObj: any = {};
18
71
  if (
19
72
  typeof obj[key] === "object" &&
20
73
  !Array.isArray(obj[key]) &&
21
74
  obj[key] !== null
22
75
  ) {
23
- newObj[key] = Loader.convertKebabToCamelCase(obj[key]);
76
+ newSubObj = Loader.convertKebabToCamelCase(obj[key], objectOptions);
24
77
  } else if (Array.isArray(obj[key])) {
25
- newObj[key] = obj[key].map((item: any) => {
78
+ newSubObj = obj[key].map((item: any) => {
26
79
  if (
27
80
  typeof item === "object" &&
28
81
  !Array.isArray(item) &&
29
82
  item !== null
30
83
  ) {
31
- return Loader.convertKebabToCamelCase(item);
84
+ return Loader.convertKebabToCamelCase(item, objectOptions);
32
85
  } else {
33
86
  return item;
34
87
  }
35
88
  });
36
89
  } else {
37
- newObj[key] = obj[key];
90
+ newSubObj = obj[key];
38
91
  }
39
92
 
40
- const newKey = key.replace(/-([a-zA-Z0-9])/g, function (_, match) {
41
- return match.toUpperCase();
42
- });
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
+ }
43
104
 
44
- if (newKey !== key) {
45
- newObj[newKey] = newObj[key];
105
+ if (keepOriginal && ((keepCamel && newKey !== key) || !keepCamel)) {
106
+ newObj[key] = newSubObj;
46
107
  }
47
108
  }
48
109
 
49
110
  return newObj;
50
111
  }
51
112
 
52
- public static loadFile(filePath: string): any {
113
+ public static loadFile(filePath: string, options: IConfigFolderOptions): any {
53
114
  if (!fs.existsSync(filePath)) {
54
115
  return {};
55
116
  }
@@ -82,53 +143,40 @@ export class Loader {
82
143
  }
83
144
 
84
145
  if (typeof obj === "object" && obj !== null && !Array.isArray(obj)) {
85
- obj = Loader.convertKebabToCamelCase(obj);
146
+ obj = Loader.convertKebabToCamelCase(obj, options);
86
147
  }
87
148
 
88
149
  return obj;
89
150
  }
90
151
 
91
- public static load(folder: string): any {
92
- if (!fs.existsSync(folder)) {
93
- return {};
94
- }
95
-
152
+ public static loadRoot(folder: string, options: IConfigFolderOptions): any {
96
153
  const baseObj: any = {};
97
154
 
98
- const configFiles = ["_config.json", "config.json"];
99
- for (const configFile of configFiles) {
100
- if (fs.existsSync(path.join(folder, configFile))) {
101
- try {
102
- const folderConfig: IConfigOptions = JSON.parse(
103
- fs.readFileSync(path.join(folder, configFile), {
104
- encoding: "utf-8",
105
- })
106
- );
155
+ if (options.parentNames) {
156
+ for (const parentName of options.parentNames) {
157
+ if (parentName === "default") {
158
+ // skip explicitly stated default parents; they're already loaded
159
+ continue;
160
+ }
161
+ merge(
162
+ baseObj,
163
+ Loader.load(path.join(folder, "..", parentName), options)
164
+ );
165
+ }
166
+ }
107
167
 
108
- if (folderConfig.parentNames) {
109
- for (const parentName of folderConfig.parentNames) {
110
- if (parentName === "default") {
111
- // skip explicitly stated default parents; they're already loaded
112
- continue;
113
- }
114
- merge(baseObj, Loader.load(path.join(folder, "..", parentName)));
115
- }
116
- }
168
+ merge(baseObj, Loader.load(folder, options));
117
169
 
118
- break;
119
- } catch (e: any) {
120
- console.error(
121
- `Invalid JSON in ${path.join(
122
- folder,
123
- configFile
124
- )} file; skipping configuration`
125
- );
170
+ return baseObj;
171
+ }
126
172
 
127
- break;
128
- }
129
- }
173
+ public static load(folder: string, options: IConfigFolderOptions): any {
174
+ if (!fs.existsSync(folder)) {
175
+ return {};
130
176
  }
131
177
 
178
+ const baseObj: any = {};
179
+
132
180
  const contents = fs.readdirSync(folder, {
133
181
  encoding: "utf-8",
134
182
  withFileTypes: true,
@@ -137,7 +185,10 @@ export class Loader {
137
185
  // first load the index file
138
186
  for (const content of contents) {
139
187
  if (!content.isDirectory() && /^_?index\./.exec(content.name) !== null) {
140
- merge(baseObj, Loader.loadFile(path.join(folder, content.name)));
188
+ merge(
189
+ baseObj,
190
+ Loader.loadFile(path.join(folder, content.name), options)
191
+ );
141
192
  }
142
193
  }
143
194
 
@@ -155,7 +206,7 @@ export class Loader {
155
206
  baseObj[key] = {};
156
207
  }
157
208
 
158
- const obj = Loader.load(path.join(folder, content.name));
209
+ const obj = Loader.load(path.join(folder, content.name), options);
159
210
 
160
211
  merge(baseObj[key], obj);
161
212
  } else {
@@ -172,7 +223,7 @@ export class Loader {
172
223
  baseObj[key] = {};
173
224
  }
174
225
 
175
- const obj = Loader.loadFile(path.join(folder, content.name));
226
+ const obj = Loader.loadFile(path.join(folder, content.name), options);
176
227
 
177
228
  merge(baseObj[key], obj);
178
229
  } else {