@hg-ts/config-loader 0.0.15

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.
Files changed (88) hide show
  1. package/.eslintcache +1 -0
  2. package/.eslintrc.json +3 -0
  3. package/.mocharc.cjs +1 -0
  4. package/README.md +106 -0
  5. package/dist/config-loader.d.ts +18 -0
  6. package/dist/config-loader.d.ts.map +1 -0
  7. package/dist/config-loader.js +75 -0
  8. package/dist/config-loader.js.map +1 -0
  9. package/dist/decorators/enforce-env.decorator.d.ts +2 -0
  10. package/dist/decorators/enforce-env.decorator.d.ts.map +1 -0
  11. package/dist/decorators/enforce-env.decorator.js +9 -0
  12. package/dist/decorators/enforce-env.decorator.js.map +1 -0
  13. package/dist/decorators/index.d.ts +2 -0
  14. package/dist/decorators/index.d.ts.map +1 -0
  15. package/dist/decorators/index.js +5 -0
  16. package/dist/decorators/index.js.map +1 -0
  17. package/dist/exceptions/index.d.ts +2 -0
  18. package/dist/exceptions/index.d.ts.map +1 -0
  19. package/dist/exceptions/index.js +5 -0
  20. package/dist/exceptions/index.js.map +1 -0
  21. package/dist/exceptions/no-base-config.exception.d.ts +5 -0
  22. package/dist/exceptions/no-base-config.exception.d.ts.map +1 -0
  23. package/dist/exceptions/no-base-config.exception.js +11 -0
  24. package/dist/exceptions/no-base-config.exception.js.map +1 -0
  25. package/dist/index.d.ts +4 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +7 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/path-builder.d.ts +22 -0
  30. package/dist/path-builder.d.ts.map +1 -0
  31. package/dist/path-builder.js +79 -0
  32. package/dist/path-builder.js.map +1 -0
  33. package/dist/tests/config-loader.test-suite.d.ts +7 -0
  34. package/dist/tests/config-loader.test-suite.d.ts.map +1 -0
  35. package/dist/tests/config-loader.test-suite.js +94 -0
  36. package/dist/tests/config-loader.test-suite.js.map +1 -0
  37. package/dist/tests/path-builder.test-suite.d.ts +15 -0
  38. package/dist/tests/path-builder.test-suite.d.ts.map +1 -0
  39. package/dist/tests/path-builder.test-suite.js +155 -0
  40. package/dist/tests/path-builder.test-suite.js.map +1 -0
  41. package/dist-esm/config-loader.d.ts +18 -0
  42. package/dist-esm/config-loader.d.ts.map +1 -0
  43. package/dist-esm/config-loader.js +70 -0
  44. package/dist-esm/config-loader.js.map +1 -0
  45. package/dist-esm/decorators/enforce-env.decorator.d.ts +2 -0
  46. package/dist-esm/decorators/enforce-env.decorator.d.ts.map +1 -0
  47. package/dist-esm/decorators/enforce-env.decorator.js +5 -0
  48. package/dist-esm/decorators/enforce-env.decorator.js.map +1 -0
  49. package/dist-esm/decorators/index.d.ts +2 -0
  50. package/dist-esm/decorators/index.d.ts.map +1 -0
  51. package/dist-esm/decorators/index.js +2 -0
  52. package/dist-esm/decorators/index.js.map +1 -0
  53. package/dist-esm/exceptions/index.d.ts +2 -0
  54. package/dist-esm/exceptions/index.d.ts.map +1 -0
  55. package/dist-esm/exceptions/index.js +2 -0
  56. package/dist-esm/exceptions/index.js.map +1 -0
  57. package/dist-esm/exceptions/no-base-config.exception.d.ts +5 -0
  58. package/dist-esm/exceptions/no-base-config.exception.d.ts.map +1 -0
  59. package/dist-esm/exceptions/no-base-config.exception.js +7 -0
  60. package/dist-esm/exceptions/no-base-config.exception.js.map +1 -0
  61. package/dist-esm/index.d.ts +4 -0
  62. package/dist-esm/index.d.ts.map +1 -0
  63. package/dist-esm/index.js +4 -0
  64. package/dist-esm/index.js.map +1 -0
  65. package/dist-esm/path-builder.d.ts +22 -0
  66. package/dist-esm/path-builder.d.ts.map +1 -0
  67. package/dist-esm/path-builder.js +75 -0
  68. package/dist-esm/path-builder.js.map +1 -0
  69. package/dist-esm/tests/config-loader.test-suite.d.ts +7 -0
  70. package/dist-esm/tests/config-loader.test-suite.d.ts.map +1 -0
  71. package/dist-esm/tests/config-loader.test-suite.js +91 -0
  72. package/dist-esm/tests/config-loader.test-suite.js.map +1 -0
  73. package/dist-esm/tests/path-builder.test-suite.d.ts +15 -0
  74. package/dist-esm/tests/path-builder.test-suite.d.ts.map +1 -0
  75. package/dist-esm/tests/path-builder.test-suite.js +152 -0
  76. package/dist-esm/tests/path-builder.test-suite.js.map +1 -0
  77. package/package.json +45 -0
  78. package/src/config-loader.ts +103 -0
  79. package/src/decorators/enforce-env.decorator.ts +5 -0
  80. package/src/decorators/index.ts +1 -0
  81. package/src/exceptions/index.ts +1 -0
  82. package/src/exceptions/no-base-config.exception.ts +7 -0
  83. package/src/index.ts +4 -0
  84. package/src/path-builder.ts +158 -0
  85. package/src/tests/config-loader.test-suite.ts +87 -0
  86. package/src/tests/path-builder.test-suite.ts +133 -0
  87. package/tsconfig.esm.json +10 -0
  88. package/tsconfig.json +11 -0
package/.eslintcache ADDED
@@ -0,0 +1 @@
1
+ [{"/Volumes/Work/ts/hg/framework/packages/execution-mode/src/index.ts":"1","/Volumes/Work/ts/hg/framework/packages/config-loader/src/config-loader.ts":"2","/Volumes/Work/ts/hg/framework/packages/config-loader/src/decorators/enforce-env.decorator.ts":"3","/Volumes/Work/ts/hg/framework/packages/config-loader/src/decorators/index.ts":"4","/Volumes/Work/ts/hg/framework/packages/config-loader/src/exceptions/index.ts":"5","/Volumes/Work/ts/hg/framework/packages/config-loader/src/exceptions/no-base-config.exception.ts":"6","/Volumes/Work/ts/hg/framework/packages/config-loader/src/index.ts":"7","/Volumes/Work/ts/hg/framework/packages/config-loader/src/path-builder.ts":"8","/Volumes/Work/ts/hg/framework/packages/config-loader/src/tests/config-loader.test-suite.ts":"9","/Volumes/Work/ts/hg/framework/packages/config-loader/src/tests/path-builder.test-suite.ts":"10"},{"size":64,"mtime":1660865486194,"results":"11","hashOfConfig":"12"},{"size":2864,"mtime":1665231303609,"results":"13","hashOfConfig":"14"},{"size":174,"mtime":1665301649524,"results":"15","hashOfConfig":"14"},{"size":41,"mtime":1664831211487,"results":"16","hashOfConfig":"14"},{"size":44,"mtime":1664831211489,"results":"17","hashOfConfig":"14"},{"size":215,"mtime":1664831211490,"results":"18","hashOfConfig":"14"},{"size":84,"mtime":1665300013452,"results":"19","hashOfConfig":"14"},{"size":3437,"mtime":1665148294534,"results":"20","hashOfConfig":"14"},{"size":1807,"mtime":1665301650636,"results":"21","hashOfConfig":"14"},{"size":4026,"mtime":1665299715530,"results":"22","hashOfConfig":"14"},{"filePath":"23","messages":"24","suppressedMessages":"25","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"qbxc86",{"filePath":"26","messages":"27","suppressedMessages":"28","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1143ti9",{"filePath":"29","messages":"30","suppressedMessages":"31","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"32","messages":"33","suppressedMessages":"34","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"35","messages":"36","suppressedMessages":"37","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38","messages":"39","suppressedMessages":"40","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"41","messages":"42","suppressedMessages":"43","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"44","messages":"45","suppressedMessages":"46","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"47","messages":"48","suppressedMessages":"49","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"50","messages":"51","suppressedMessages":"52","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Volumes/Work/ts/hg/framework/packages/execution-mode/src/index.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/config-loader.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/decorators/enforce-env.decorator.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/decorators/index.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/exceptions/index.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/exceptions/no-base-config.exception.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/index.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/path-builder.ts",[],[],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/tests/config-loader.test-suite.ts",[],["53","54"],"/Volumes/Work/ts/hg/framework/packages/config-loader/src/tests/path-builder.test-suite.ts",[],[],{"ruleId":"55","severity":2,"message":"56","line":2,"column":1,"nodeType":"57","messageId":"58","endLine":88,"endColumn":1,"suppressions":"59"},{"ruleId":"60","severity":2,"message":"61","line":73,"column":31,"nodeType":"62","messageId":"63","endLine":73,"endColumn":90,"suppressions":"64"},"max-classes-per-file","File has too many classes (2). Maximum allowed is 1.","Program","maximumExceeded",["65"],"no-nested-ternary","Do not nest ternary expressions.","ConditionalExpression","noNestedTernary",["66"],{"kind":"67","justification":"68"},{"kind":"67","justification":"68"},"directive",""]
package/.eslintrc.json ADDED
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "@hg-ts-config/eslint-config/.eslintrc.json"
3
+ }
package/.mocharc.cjs ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('@hg-ts/tests/config/common.cjs');
package/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # @hg-ts/config-loader
2
+
3
+ ## Examples
4
+
5
+ Example config (env DATABASE_HOST not defined by default)
6
+ If config loader not found config file (or base/first config file) it will throw exception
7
+ If config loader found multiple config files it will merge them
8
+ ```ts
9
+ import { ConfigLoader, EnforceEnv } from '@hg-ts/config-loader';
10
+ import {
11
+ IsPositive,
12
+ IsString,
13
+ } from 'class-validator';
14
+
15
+ class DatabaseConfig {
16
+ @IsString()
17
+ @EnforceEnv('DATABASE_HOST')
18
+ public host: string;
19
+
20
+ @IsInt()
21
+ @IsPositive()
22
+ public port: number;
23
+ }
24
+ ```
25
+
26
+ ### Load config file from package root (process.cwd())
27
+
28
+ ```ts
29
+ import { ConfigLoader } from '@hg-ts/config-loader';
30
+
31
+ const loader = new ConfigLoader();
32
+
33
+ // Will load `${process.cwd()}/database.json`
34
+ const config = loader.load('database', DatabaseConfig);
35
+ ```
36
+
37
+ ### Load config file from config directory in package root
38
+
39
+ ```ts
40
+ import { ConfigLoader } from '@hg-ts/config-loader';
41
+
42
+ const loader = new ConfigLoader({ configDir: 'config' });
43
+
44
+ // Will load `${process.cwd()}/config/database.json`
45
+ const config = loader.load('database', DatabaseConfig);
46
+ ```
47
+
48
+ ### Load config file from package root to / recursive
49
+
50
+ ```ts
51
+ import { ConfigLoader } from '@hg-ts/config-loader';
52
+
53
+ const loader = new ConfigLoader({ recursive: true });
54
+ // process.cwd() === /opt/app/service-name
55
+
56
+ /*
57
+ Will load
58
+ `/opt/app/service-name/database.json`
59
+ `/opt/app/database.json`
60
+ `/opt/database.json` -- { root: true }
61
+ `/database.json` -- will not be loaded cause /opt/database.json is root of this config
62
+ */
63
+ const config = loader.load('database', DatabaseConfig);
64
+ ```
65
+
66
+ ### Load config file from config directory in package root with config builder
67
+
68
+ ```ts
69
+ import { ConfigLoader } from '@hg-ts/config-loader';
70
+
71
+ const loader = new ConfigLoader({ configDir: 'config', envBuilder: true });
72
+
73
+ // Add config/local to .gitignore
74
+ /*
75
+ Will load
76
+ `${process.cwd()}/config/base/database.json`
77
+ `${process.cwd()}/config/local/database.json`
78
+ */
79
+ const config = loader.load('database', DatabaseConfig);
80
+ ```
81
+
82
+ ### Load config file from config directory in package root with config builder with env
83
+
84
+ ```ts
85
+ import { ConfigLoader } from '@hg-ts/config-loader';
86
+ import { ExecutionMode, ExecutionModeVariants } from '@hg-ts/execution-mode'
87
+
88
+ const loader = new ConfigLoader({ configDir: 'config', envBuilder: true });
89
+ const env = new ExecutionMode('HG', ExecutionModeVariants.PROD)
90
+ // Add config/local to .gitignore
91
+ /*
92
+ Will load:
93
+ `${process.cwd()}/config/base/database.json`
94
+ `${process.cwd()}/config/prod/database.json`
95
+ `${process.cwd()}/config/local/database.json`
96
+ */
97
+
98
+ /*
99
+ Will load if process.env.HG_ENV === 'dev'
100
+ `${process.cwd()}/config/base/database.json`
101
+ `${process.cwd()}/config/dev/database.json`
102
+ `${process.cwd()}/config/local/database.json`
103
+ */
104
+
105
+ const config = loader.load('database', DatabaseConfig);
106
+ ```
@@ -0,0 +1,18 @@
1
+ import { PathBuilderOptions } from './path-builder';
2
+ export declare type ConfigLoaderOptions = PathBuilderOptions & {
3
+ recursive?: boolean;
4
+ cache?: boolean;
5
+ };
6
+ export declare class ConfigLoader {
7
+ private readonly pathBuilder;
8
+ private readonly options;
9
+ private readonly cacheMap;
10
+ constructor(options?: ConfigLoaderOptions);
11
+ load<ConfigType extends object>(ctor: Class<ConfigType>, name: string): Promise<ConfigType>;
12
+ private loadRawConfig;
13
+ private mergeConfigs;
14
+ private transform;
15
+ private validate;
16
+ private loadConfigFile;
17
+ }
18
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAOA,OAAO,EAAe,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEjE,oBAAY,mBAAmB,GAAG,kBAAkB,GAAG;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAOF,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;gBAEtC,OAAO,GAAE,mBAAwB;IAKvC,IAAI,CAAC,UAAU,SAAS,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAsB1F,aAAa;IAW3B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,SAAS;YAIH,QAAQ;YAYR,cAAc;CAS5B"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigLoader = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const promises_1 = tslib_1.__importDefault(require("node:fs/promises"));
6
+ const strict_1 = tslib_1.__importDefault(require("node:assert/strict"));
7
+ const class_validator_1 = require("class-validator");
8
+ const class_transformer_1 = require("class-transformer");
9
+ const exceptions_1 = require("./exceptions");
10
+ const path_builder_1 = require("./path-builder");
11
+ class ConfigLoader {
12
+ pathBuilder;
13
+ options;
14
+ cacheMap = new Map();
15
+ constructor(options = {}) {
16
+ this.pathBuilder = new path_builder_1.PathBuilder(options);
17
+ this.options = this.pathBuilder.options;
18
+ }
19
+ async load(ctor, name) {
20
+ if (this.options.cache && this.cacheMap.has(name)) {
21
+ const cacheItem = this.cacheMap.get(name);
22
+ strict_1.default.ok(cacheItem.ctor === ctor, `cached instance of config "${name}" has another dto class`);
23
+ return cacheItem.config;
24
+ }
25
+ const rawConfig = await this.loadRawConfig(name);
26
+ const config = this.transform(rawConfig, ctor);
27
+ await this.validate(config);
28
+ if (this.options.cache) {
29
+ this.cacheMap.set(name, { ctor, config });
30
+ }
31
+ return config;
32
+ }
33
+ async loadRawConfig(name) {
34
+ const paths = this.pathBuilder.build(name);
35
+ const configs = await Promise.all(paths.map(async (path) => this.loadConfigFile(path)));
36
+ if (!configs[0]) {
37
+ throw new exceptions_1.NoBaseConfigException(name);
38
+ }
39
+ return this.mergeConfigs(configs);
40
+ }
41
+ mergeConfigs(configs) {
42
+ return configs
43
+ .filter(config => config !== null)
44
+ .filter((config) => typeof config === 'object')
45
+ .reduce((merged, next) => {
46
+ if (merged['root'] === true && this.options.recursive) {
47
+ return merged;
48
+ }
49
+ return {
50
+ ...merged,
51
+ ...next,
52
+ };
53
+ });
54
+ }
55
+ transform(rawConfig, ctor) {
56
+ return (0, class_transformer_1.plainToInstance)(ctor, rawConfig);
57
+ }
58
+ async validate(config) {
59
+ const validationErrors = await (0, class_validator_1.validate)(config);
60
+ if (validationErrors.length > 0) {
61
+ throw new AggregateError(validationErrors, 'Config validation error');
62
+ }
63
+ }
64
+ async loadConfigFile(path) {
65
+ try {
66
+ const content = await promises_1.default.readFile(path, { encoding: 'utf-8' });
67
+ return JSON.parse(content);
68
+ }
69
+ catch (error) {
70
+ return null;
71
+ }
72
+ }
73
+ }
74
+ exports.ConfigLoader = ConfigLoader;
75
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function EnforceEnv(name: string): PropertyDecorator;
2
+ //# sourceMappingURL=enforce-env.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-env.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/enforce-env.decorator.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAE1D"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnforceEnv = void 0;
4
+ const class_transformer_1 = require("class-transformer");
5
+ function EnforceEnv(name) {
6
+ return (0, class_transformer_1.Transform)(({ value }) => process.env[name] ?? value);
7
+ }
8
+ exports.EnforceEnv = EnforceEnv;
9
+ //# sourceMappingURL=enforce-env.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforce-env.decorator.js","sourceRoot":"","sources":["../../src/decorators/enforce-env.decorator.ts"],"names":[],"mappings":";;;AAAA,yDAA8C;AAE9C,SAAgB,UAAU,CAAC,IAAY;IACtC,OAAO,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AAC7D,CAAC;AAFD,gCAEC"}
@@ -0,0 +1,2 @@
1
+ export * from './enforce-env.decorator';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./enforce-env.decorator"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":";;;AAAA,kEAAwC"}
@@ -0,0 +1,2 @@
1
+ export * from './no-base-config.exception';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./no-base-config.exception"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C"}
@@ -0,0 +1,5 @@
1
+ import { BaseException } from '@hg-ts/exception';
2
+ export declare class NoBaseConfigException extends BaseException {
3
+ constructor(configName: string);
4
+ }
5
+ //# sourceMappingURL=no-base-config.exception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-base-config.exception.d.ts","sourceRoot":"","sources":["../../src/exceptions/no-base-config.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,qBAAsB,SAAQ,aAAa;gBACpC,UAAU,EAAE,MAAM;CAGrC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoBaseConfigException = void 0;
4
+ const exception_1 = require("@hg-ts/exception");
5
+ class NoBaseConfigException extends exception_1.BaseException {
6
+ constructor(configName) {
7
+ super(`Base config with name ${configName} not found`);
8
+ }
9
+ }
10
+ exports.NoBaseConfigException = NoBaseConfigException;
11
+ //# sourceMappingURL=no-base-config.exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-base-config.exception.js","sourceRoot":"","sources":["../../src/exceptions/no-base-config.exception.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AAEjD,MAAa,qBAAsB,SAAQ,yBAAa;IACvD,YAAmB,UAAkB;QACpC,KAAK,CAAC,yBAAyB,UAAU,YAAY,CAAC,CAAC;IACxD,CAAC;CACD;AAJD,sDAIC"}
@@ -0,0 +1,4 @@
1
+ import '@hg-ts/types';
2
+ import 'reflect-metadata';
3
+ export * from './config-loader';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,kBAAkB,CAAC;AAE1B,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ require("@hg-ts/types");
5
+ require("reflect-metadata");
6
+ tslib_1.__exportStar(require("./config-loader"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wBAAsB;AACtB,4BAA0B;AAE1B,0DAAgC"}
@@ -0,0 +1,22 @@
1
+ import type { ExecutionMode } from '@hg-ts/execution-mode';
2
+ export declare type PathBuilderOptions = {
3
+ appPath?: string;
4
+ configDir?: Nullable<string>;
5
+ envBuilder?: boolean;
6
+ overrideEnv?: Nullable<ExecutionMode>;
7
+ basePostfix?: Nullable<string>;
8
+ overridePostfix?: Nullable<string>;
9
+ recursive?: boolean;
10
+ };
11
+ export declare class PathBuilder {
12
+ readonly options: Required<PathBuilderOptions>;
13
+ private paths;
14
+ constructor(options?: PathBuilderOptions);
15
+ build(name: string): string[];
16
+ protected prepareBasePaths(): this;
17
+ protected addEnvFolders(): this;
18
+ protected addConfigName(configName: string): this;
19
+ private mergePaths;
20
+ private buildPathToConfig;
21
+ }
22
+ //# sourceMappingURL=path-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-builder.d.ts","sourceRoot":"","sources":["../src/path-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAM3D,oBAAY,kBAAkB,GAAG;IAOhC,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAQ7B,UAAU,CAAC,EAAE,OAAO,CAAC;IAOrB,WAAW,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;IAQtC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAY/B,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAOnC,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,WAAW;IACvB,SAAgB,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAW;gBAEL,OAAO,GAAE,kBAAuB;IAc5C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAOpC,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAuBlC,SAAS,CAAC,aAAa,IAAI,IAAI;IAmB/B,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAcjD,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,iBAAiB;CAKzB"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PathBuilder = void 0;
4
+ const path_1 = require("path");
5
+ class PathBuilder {
6
+ options;
7
+ paths;
8
+ constructor(options = {}) {
9
+ this.options = {
10
+ appPath: process.cwd(),
11
+ configDir: null,
12
+ envBuilder: false,
13
+ overrideEnv: null,
14
+ overridePostfix: null,
15
+ basePostfix: null,
16
+ recursive: false,
17
+ ...options,
18
+ };
19
+ this.paths = [];
20
+ }
21
+ build(name) {
22
+ return this.prepareBasePaths()
23
+ .addEnvFolders()
24
+ .addConfigName(name)
25
+ .paths;
26
+ }
27
+ prepareBasePaths() {
28
+ const { appPath, configDir, recursive } = this.options;
29
+ if (recursive) {
30
+ let nextPath = appPath;
31
+ const basePaths = [appPath];
32
+ while (nextPath !== '/') {
33
+ nextPath = (0, path_1.dirname)(nextPath);
34
+ basePaths.push(nextPath);
35
+ }
36
+ this.paths = basePaths;
37
+ if (configDir) {
38
+ this.mergePaths([configDir]);
39
+ }
40
+ }
41
+ else {
42
+ this.paths = [this.buildPathToConfig([appPath, configDir])];
43
+ }
44
+ return this;
45
+ }
46
+ addEnvFolders() {
47
+ const { envBuilder, overrideEnv } = this.options;
48
+ const envFolders = [];
49
+ if (!envBuilder) {
50
+ return this;
51
+ }
52
+ envFolders.push('base');
53
+ if (overrideEnv) {
54
+ envFolders.push(overrideEnv.getValue());
55
+ }
56
+ envFolders.push('local');
57
+ return this.mergePaths(envFolders);
58
+ }
59
+ addConfigName(configName) {
60
+ const { overridePostfix, basePostfix } = this.options;
61
+ const baseName = basePostfix ? `${configName}.${basePostfix}.json` : `${configName}.json`;
62
+ const overrideName = overridePostfix ? `${configName}.${overridePostfix}.json` : null;
63
+ const names = [baseName];
64
+ if (overrideName) {
65
+ names.push(overrideName);
66
+ }
67
+ return this.mergePaths(names);
68
+ }
69
+ mergePaths(additionalParts) {
70
+ this.paths = this.paths.flatMap(path => additionalParts.map(part => this.buildPathToConfig([path, part])));
71
+ return this;
72
+ }
73
+ buildPathToConfig(parts) {
74
+ const filteredParts = parts.filter((part) => part !== null);
75
+ return (0, path_1.resolve)(...filteredParts);
76
+ }
77
+ }
78
+ exports.PathBuilder = PathBuilder;
79
+ //# sourceMappingURL=path-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-builder.js","sourceRoot":"","sources":["../src/path-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { TestSuite } from '@hg-ts/tests';
2
+ export declare class ConfigLoaderTestSuite extends TestSuite {
3
+ simple(): Promise<void>;
4
+ recursive(): Promise<void>;
5
+ enforceEnv(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=config-loader.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.test-suite.d.ts","sourceRoot":"","sources":["../../src/tests/config-loader.test-suite.ts"],"names":[],"mappings":"AAGA,OAAO,EAIN,SAAS,EACT,MAAM,cAAc,CAAC;AAKtB,qBACa,qBAAsB,SAAQ,SAAS;IAEtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAwBxC"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigLoaderTestSuite = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const class_transformer_1 = require("class-transformer");
6
+ const tests_1 = require("@hg-ts/tests");
7
+ const config_loader_1 = require("../config-loader");
8
+ const decorators_1 = require("../decorators");
9
+ let ConfigLoaderTestSuite = class ConfigLoaderTestSuite extends tests_1.TestSuite {
10
+ async simple() {
11
+ const loader = new config_loader_1.ConfigLoader();
12
+ const merged = loader['mergeConfigs']([
13
+ {
14
+ a: 'a',
15
+ b: 'b',
16
+ },
17
+ {
18
+ a: 'aa',
19
+ c: 'c',
20
+ },
21
+ ]);
22
+ (0, tests_1.expect)(merged['a']).toBe('aa');
23
+ (0, tests_1.expect)(merged['b']).toBe('b');
24
+ (0, tests_1.expect)(merged['c']).toBe('c');
25
+ }
26
+ async recursive() {
27
+ const loader = new config_loader_1.ConfigLoader({ recursive: true });
28
+ const merged = loader['mergeConfigs']([
29
+ {
30
+ a: 'a',
31
+ b: 'b',
32
+ },
33
+ {
34
+ a: 'aa',
35
+ c: 'c',
36
+ root: true,
37
+ },
38
+ {
39
+ a: 'aaa',
40
+ b: 'bbb',
41
+ c: 'ccc',
42
+ },
43
+ ]);
44
+ (0, tests_1.expect)(merged['a']).toBe('aa');
45
+ (0, tests_1.expect)(merged['b']).toBe('b');
46
+ (0, tests_1.expect)(merged['c']).toBe('c');
47
+ }
48
+ async enforceEnv() {
49
+ const loader = new config_loader_1.ConfigLoader();
50
+ class Config {
51
+ number;
52
+ bool;
53
+ }
54
+ tslib_1.__decorate([
55
+ (0, decorators_1.EnforceEnv)('SOME_NUMERIC_ENV'),
56
+ (0, class_transformer_1.Transform)(({ value }) => (Number.isNaN(Number(value)) ? value : Number(value))),
57
+ tslib_1.__metadata("design:type", Number)
58
+ ], Config.prototype, "number", void 0);
59
+ tslib_1.__decorate([
60
+ (0, decorators_1.EnforceEnv)('SOME_BOOLEAN_ENV'),
61
+ (0, class_transformer_1.Transform)(({ value }) => (value === 'true' ? true : value === 'false' ? false : value)),
62
+ tslib_1.__metadata("design:type", Boolean)
63
+ ], Config.prototype, "bool", void 0);
64
+ process.env['SOME_NUMERIC_ENV'] = '10';
65
+ process.env['SOME_BOOLEAN_ENV'] = 'false';
66
+ const config = { number: '1', bool: true };
67
+ const transformed = loader['transform'](config, Config);
68
+ (0, tests_1.expect)(transformed.number).toBe(10);
69
+ (0, tests_1.expect)(transformed.bool).toBe(false);
70
+ }
71
+ };
72
+ tslib_1.__decorate([
73
+ (0, tests_1.Test)(),
74
+ tslib_1.__metadata("design:type", Function),
75
+ tslib_1.__metadata("design:paramtypes", []),
76
+ tslib_1.__metadata("design:returntype", Promise)
77
+ ], ConfigLoaderTestSuite.prototype, "simple", null);
78
+ tslib_1.__decorate([
79
+ (0, tests_1.Test)(),
80
+ tslib_1.__metadata("design:type", Function),
81
+ tslib_1.__metadata("design:paramtypes", []),
82
+ tslib_1.__metadata("design:returntype", Promise)
83
+ ], ConfigLoaderTestSuite.prototype, "recursive", null);
84
+ tslib_1.__decorate([
85
+ (0, tests_1.Test)(),
86
+ tslib_1.__metadata("design:type", Function),
87
+ tslib_1.__metadata("design:paramtypes", []),
88
+ tslib_1.__metadata("design:returntype", Promise)
89
+ ], ConfigLoaderTestSuite.prototype, "enforceEnv", null);
90
+ ConfigLoaderTestSuite = tslib_1.__decorate([
91
+ (0, tests_1.Describe)()
92
+ ], ConfigLoaderTestSuite);
93
+ exports.ConfigLoaderTestSuite = ConfigLoaderTestSuite;
94
+ //# sourceMappingURL=config-loader.test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.test-suite.js","sourceRoot":"","sources":["../../src/tests/config-loader.test-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { TestSuite } from '@hg-ts/tests';
2
+ export declare class PathBuilderTestSuite extends TestSuite {
3
+ simple(): Promise<void>;
4
+ recursive(): Promise<void>;
5
+ full(): Promise<void>;
6
+ configDir(): Promise<void>;
7
+ envBuilder(): Promise<void>;
8
+ envBuilderWithOverrideProd(): Promise<void>;
9
+ envBuilderWithOverrideDev(): Promise<void>;
10
+ basePostfix(): Promise<void>;
11
+ basePostfixWithOverridePostfix(): Promise<void>;
12
+ overridePostfix(): Promise<void>;
13
+ private getPaths;
14
+ }
15
+ //# sourceMappingURL=path-builder.test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-builder.test-suite.d.ts","sourceRoot":"","sources":["../../src/tests/path-builder.test-suite.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,SAAS,EACT,MAAM,cAAc,CAAC;AAWtB,qBACa,oBAAqB,SAAQ,SAAS;IAErC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAS1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BrB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3C,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAU1C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,8BAA8B,IAAI,OAAO,CAAC,IAAI,CAAC;IAS/C,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7C,OAAO,CAAC,QAAQ;CAKhB"}