@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.
- package/.eslintcache +1 -0
- package/.eslintrc.json +3 -0
- package/.mocharc.cjs +1 -0
- package/README.md +106 -0
- package/dist/config-loader.d.ts +18 -0
- package/dist/config-loader.d.ts.map +1 -0
- package/dist/config-loader.js +75 -0
- package/dist/config-loader.js.map +1 -0
- package/dist/decorators/enforce-env.decorator.d.ts +2 -0
- package/dist/decorators/enforce-env.decorator.d.ts.map +1 -0
- package/dist/decorators/enforce-env.decorator.js +9 -0
- package/dist/decorators/enforce-env.decorator.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +5 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/exceptions/index.d.ts +2 -0
- package/dist/exceptions/index.d.ts.map +1 -0
- package/dist/exceptions/index.js +5 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/exceptions/no-base-config.exception.d.ts +5 -0
- package/dist/exceptions/no-base-config.exception.d.ts.map +1 -0
- package/dist/exceptions/no-base-config.exception.js +11 -0
- package/dist/exceptions/no-base-config.exception.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/path-builder.d.ts +22 -0
- package/dist/path-builder.d.ts.map +1 -0
- package/dist/path-builder.js +79 -0
- package/dist/path-builder.js.map +1 -0
- package/dist/tests/config-loader.test-suite.d.ts +7 -0
- package/dist/tests/config-loader.test-suite.d.ts.map +1 -0
- package/dist/tests/config-loader.test-suite.js +94 -0
- package/dist/tests/config-loader.test-suite.js.map +1 -0
- package/dist/tests/path-builder.test-suite.d.ts +15 -0
- package/dist/tests/path-builder.test-suite.d.ts.map +1 -0
- package/dist/tests/path-builder.test-suite.js +155 -0
- package/dist/tests/path-builder.test-suite.js.map +1 -0
- package/dist-esm/config-loader.d.ts +18 -0
- package/dist-esm/config-loader.d.ts.map +1 -0
- package/dist-esm/config-loader.js +70 -0
- package/dist-esm/config-loader.js.map +1 -0
- package/dist-esm/decorators/enforce-env.decorator.d.ts +2 -0
- package/dist-esm/decorators/enforce-env.decorator.d.ts.map +1 -0
- package/dist-esm/decorators/enforce-env.decorator.js +5 -0
- package/dist-esm/decorators/enforce-env.decorator.js.map +1 -0
- package/dist-esm/decorators/index.d.ts +2 -0
- package/dist-esm/decorators/index.d.ts.map +1 -0
- package/dist-esm/decorators/index.js +2 -0
- package/dist-esm/decorators/index.js.map +1 -0
- package/dist-esm/exceptions/index.d.ts +2 -0
- package/dist-esm/exceptions/index.d.ts.map +1 -0
- package/dist-esm/exceptions/index.js +2 -0
- package/dist-esm/exceptions/index.js.map +1 -0
- package/dist-esm/exceptions/no-base-config.exception.d.ts +5 -0
- package/dist-esm/exceptions/no-base-config.exception.d.ts.map +1 -0
- package/dist-esm/exceptions/no-base-config.exception.js +7 -0
- package/dist-esm/exceptions/no-base-config.exception.js.map +1 -0
- package/dist-esm/index.d.ts +4 -0
- package/dist-esm/index.d.ts.map +1 -0
- package/dist-esm/index.js +4 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/path-builder.d.ts +22 -0
- package/dist-esm/path-builder.d.ts.map +1 -0
- package/dist-esm/path-builder.js +75 -0
- package/dist-esm/path-builder.js.map +1 -0
- package/dist-esm/tests/config-loader.test-suite.d.ts +7 -0
- package/dist-esm/tests/config-loader.test-suite.d.ts.map +1 -0
- package/dist-esm/tests/config-loader.test-suite.js +91 -0
- package/dist-esm/tests/config-loader.test-suite.js.map +1 -0
- package/dist-esm/tests/path-builder.test-suite.d.ts +15 -0
- package/dist-esm/tests/path-builder.test-suite.d.ts.map +1 -0
- package/dist-esm/tests/path-builder.test-suite.js +152 -0
- package/dist-esm/tests/path-builder.test-suite.js.map +1 -0
- package/package.json +45 -0
- package/src/config-loader.ts +103 -0
- package/src/decorators/enforce-env.decorator.ts +5 -0
- package/src/decorators/index.ts +1 -0
- package/src/exceptions/index.ts +1 -0
- package/src/exceptions/no-base-config.exception.ts +7 -0
- package/src/index.ts +4 -0
- package/src/path-builder.ts +158 -0
- package/src/tests/config-loader.test-suite.ts +87 -0
- package/src/tests/path-builder.test-suite.ts +133 -0
- package/tsconfig.esm.json +10 -0
- package/tsconfig.json +11 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PathBuilderTestSuite = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const tests_1 = require("@hg-ts/tests");
|
|
6
|
+
const execution_mode_1 = require("@hg-ts/execution-mode");
|
|
7
|
+
const path_builder_1 = require("../path-builder");
|
|
8
|
+
let PathBuilderTestSuite = class PathBuilderTestSuite extends tests_1.TestSuite {
|
|
9
|
+
async simple() {
|
|
10
|
+
const paths = this.getPaths();
|
|
11
|
+
(0, tests_1.expect)(paths).toHaveLength(1);
|
|
12
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/example.json');
|
|
13
|
+
}
|
|
14
|
+
async recursive() {
|
|
15
|
+
const paths = this.getPaths({ recursive: true });
|
|
16
|
+
(0, tests_1.expect)(paths).toHaveLength(2);
|
|
17
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/example.json');
|
|
18
|
+
(0, tests_1.expect)(paths[1]).toBe('/example.json');
|
|
19
|
+
}
|
|
20
|
+
async full() {
|
|
21
|
+
const paths = this.getPaths({
|
|
22
|
+
recursive: true,
|
|
23
|
+
overridePostfix: 'override',
|
|
24
|
+
basePostfix: 'config',
|
|
25
|
+
envBuilder: true,
|
|
26
|
+
overrideEnv: new execution_mode_1.MockExecutionMode(execution_mode_1.ExecutionModeVariants.DEMO),
|
|
27
|
+
configDir: 'config',
|
|
28
|
+
});
|
|
29
|
+
let index = 0;
|
|
30
|
+
(0, tests_1.expect)(paths).toHaveLength(12);
|
|
31
|
+
(0, tests_1.expect)(paths[index++]).toBe('/tmp/config/base/example.config.json');
|
|
32
|
+
(0, tests_1.expect)(paths[index++]).toBe('/tmp/config/base/example.override.json');
|
|
33
|
+
(0, tests_1.expect)(paths[index++]).toBe('/tmp/config/demo/example.config.json');
|
|
34
|
+
(0, tests_1.expect)(paths[index++]).toBe('/tmp/config/demo/example.override.json');
|
|
35
|
+
(0, tests_1.expect)(paths[index++]).toBe('/tmp/config/local/example.config.json');
|
|
36
|
+
(0, tests_1.expect)(paths[index++]).toBe('/tmp/config/local/example.override.json');
|
|
37
|
+
(0, tests_1.expect)(paths[index++]).toBe('/config/base/example.config.json');
|
|
38
|
+
(0, tests_1.expect)(paths[index++]).toBe('/config/base/example.override.json');
|
|
39
|
+
(0, tests_1.expect)(paths[index++]).toBe('/config/demo/example.config.json');
|
|
40
|
+
(0, tests_1.expect)(paths[index++]).toBe('/config/demo/example.override.json');
|
|
41
|
+
(0, tests_1.expect)(paths[index++]).toBe('/config/local/example.config.json');
|
|
42
|
+
(0, tests_1.expect)(paths[index++]).toBe('/config/local/example.override.json');
|
|
43
|
+
}
|
|
44
|
+
async configDir() {
|
|
45
|
+
const paths = this.getPaths({ configDir: 'config' });
|
|
46
|
+
(0, tests_1.expect)(paths).toHaveLength(1);
|
|
47
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/config/example.json');
|
|
48
|
+
}
|
|
49
|
+
async envBuilder() {
|
|
50
|
+
const paths = this.getPaths({ envBuilder: true });
|
|
51
|
+
(0, tests_1.expect)(paths).toHaveLength(2);
|
|
52
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/base/example.json');
|
|
53
|
+
(0, tests_1.expect)(paths[1]).toBe('/tmp/local/example.json');
|
|
54
|
+
}
|
|
55
|
+
async envBuilderWithOverrideProd() {
|
|
56
|
+
const paths = this.getPaths({ envBuilder: true, overrideEnv: new execution_mode_1.MockExecutionMode(execution_mode_1.ExecutionModeVariants.PROD) });
|
|
57
|
+
(0, tests_1.expect)(paths).toHaveLength(3);
|
|
58
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/base/example.json');
|
|
59
|
+
(0, tests_1.expect)(paths[1]).toBe('/tmp/prod/example.json');
|
|
60
|
+
(0, tests_1.expect)(paths[2]).toBe('/tmp/local/example.json');
|
|
61
|
+
}
|
|
62
|
+
async envBuilderWithOverrideDev() {
|
|
63
|
+
const paths = this.getPaths({ envBuilder: true, overrideEnv: new execution_mode_1.MockExecutionMode(execution_mode_1.ExecutionModeVariants.DEV) });
|
|
64
|
+
(0, tests_1.expect)(paths).toHaveLength(3);
|
|
65
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/base/example.json');
|
|
66
|
+
(0, tests_1.expect)(paths[1]).toBe('/tmp/dev/example.json');
|
|
67
|
+
(0, tests_1.expect)(paths[2]).toBe('/tmp/local/example.json');
|
|
68
|
+
}
|
|
69
|
+
async basePostfix() {
|
|
70
|
+
const paths = this.getPaths({ basePostfix: 'config' });
|
|
71
|
+
(0, tests_1.expect)(paths).toHaveLength(1);
|
|
72
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/example.config.json');
|
|
73
|
+
}
|
|
74
|
+
async basePostfixWithOverridePostfix() {
|
|
75
|
+
const paths = this.getPaths({ basePostfix: 'config', overridePostfix: 'override' });
|
|
76
|
+
(0, tests_1.expect)(paths).toHaveLength(2);
|
|
77
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/example.config.json');
|
|
78
|
+
(0, tests_1.expect)(paths[1]).toBe('/tmp/example.override.json');
|
|
79
|
+
}
|
|
80
|
+
async overridePostfix() {
|
|
81
|
+
const paths = this.getPaths({ overridePostfix: 'override' });
|
|
82
|
+
(0, tests_1.expect)(paths).toHaveLength(2);
|
|
83
|
+
(0, tests_1.expect)(paths[0]).toBe('/tmp/example.json');
|
|
84
|
+
(0, tests_1.expect)(paths[1]).toBe('/tmp/example.override.json');
|
|
85
|
+
}
|
|
86
|
+
getPaths(options = {}) {
|
|
87
|
+
const builder = new path_builder_1.PathBuilder({ appPath: '/tmp', ...options });
|
|
88
|
+
return builder.build('example');
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
tslib_1.__decorate([
|
|
92
|
+
(0, tests_1.Test)(),
|
|
93
|
+
tslib_1.__metadata("design:type", Function),
|
|
94
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
95
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
96
|
+
], PathBuilderTestSuite.prototype, "simple", null);
|
|
97
|
+
tslib_1.__decorate([
|
|
98
|
+
(0, tests_1.Test)(),
|
|
99
|
+
tslib_1.__metadata("design:type", Function),
|
|
100
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
101
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
102
|
+
], PathBuilderTestSuite.prototype, "recursive", null);
|
|
103
|
+
tslib_1.__decorate([
|
|
104
|
+
(0, tests_1.Test)(),
|
|
105
|
+
tslib_1.__metadata("design:type", Function),
|
|
106
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
107
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
108
|
+
], PathBuilderTestSuite.prototype, "full", null);
|
|
109
|
+
tslib_1.__decorate([
|
|
110
|
+
(0, tests_1.Test)(),
|
|
111
|
+
tslib_1.__metadata("design:type", Function),
|
|
112
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
113
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
114
|
+
], PathBuilderTestSuite.prototype, "configDir", null);
|
|
115
|
+
tslib_1.__decorate([
|
|
116
|
+
(0, tests_1.Test)(),
|
|
117
|
+
tslib_1.__metadata("design:type", Function),
|
|
118
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
119
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
120
|
+
], PathBuilderTestSuite.prototype, "envBuilder", null);
|
|
121
|
+
tslib_1.__decorate([
|
|
122
|
+
(0, tests_1.Test)(),
|
|
123
|
+
tslib_1.__metadata("design:type", Function),
|
|
124
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
125
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
126
|
+
], PathBuilderTestSuite.prototype, "envBuilderWithOverrideProd", null);
|
|
127
|
+
tslib_1.__decorate([
|
|
128
|
+
(0, tests_1.Test)(),
|
|
129
|
+
tslib_1.__metadata("design:type", Function),
|
|
130
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
131
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
132
|
+
], PathBuilderTestSuite.prototype, "envBuilderWithOverrideDev", null);
|
|
133
|
+
tslib_1.__decorate([
|
|
134
|
+
(0, tests_1.Test)(),
|
|
135
|
+
tslib_1.__metadata("design:type", Function),
|
|
136
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
137
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
138
|
+
], PathBuilderTestSuite.prototype, "basePostfix", null);
|
|
139
|
+
tslib_1.__decorate([
|
|
140
|
+
(0, tests_1.Test)(),
|
|
141
|
+
tslib_1.__metadata("design:type", Function),
|
|
142
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
143
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
144
|
+
], PathBuilderTestSuite.prototype, "basePostfixWithOverridePostfix", null);
|
|
145
|
+
tslib_1.__decorate([
|
|
146
|
+
(0, tests_1.Test)(),
|
|
147
|
+
tslib_1.__metadata("design:type", Function),
|
|
148
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
149
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
150
|
+
], PathBuilderTestSuite.prototype, "overridePostfix", null);
|
|
151
|
+
PathBuilderTestSuite = tslib_1.__decorate([
|
|
152
|
+
(0, tests_1.Describe)()
|
|
153
|
+
], PathBuilderTestSuite);
|
|
154
|
+
exports.PathBuilderTestSuite = PathBuilderTestSuite;
|
|
155
|
+
//# sourceMappingURL=path-builder.test-suite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-builder.test-suite.js","sourceRoot":"","sources":["../../src/tests/path-builder.test-suite.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,70 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { plainToInstance } from 'class-transformer';
|
|
5
|
+
import { NoBaseConfigException } from './exceptions';
|
|
6
|
+
import { PathBuilder } from './path-builder';
|
|
7
|
+
export class ConfigLoader {
|
|
8
|
+
pathBuilder;
|
|
9
|
+
options;
|
|
10
|
+
cacheMap = new Map();
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
this.pathBuilder = new PathBuilder(options);
|
|
13
|
+
this.options = this.pathBuilder.options;
|
|
14
|
+
}
|
|
15
|
+
async load(ctor, name) {
|
|
16
|
+
if (this.options.cache && this.cacheMap.has(name)) {
|
|
17
|
+
const cacheItem = this.cacheMap.get(name);
|
|
18
|
+
assert.ok(cacheItem.ctor === ctor, `cached instance of config "${name}" has another dto class`);
|
|
19
|
+
return cacheItem.config;
|
|
20
|
+
}
|
|
21
|
+
const rawConfig = await this.loadRawConfig(name);
|
|
22
|
+
const config = this.transform(rawConfig, ctor);
|
|
23
|
+
await this.validate(config);
|
|
24
|
+
if (this.options.cache) {
|
|
25
|
+
this.cacheMap.set(name, { ctor, config });
|
|
26
|
+
}
|
|
27
|
+
return config;
|
|
28
|
+
}
|
|
29
|
+
async loadRawConfig(name) {
|
|
30
|
+
const paths = this.pathBuilder.build(name);
|
|
31
|
+
const configs = await Promise.all(paths.map(async (path) => this.loadConfigFile(path)));
|
|
32
|
+
if (!configs[0]) {
|
|
33
|
+
throw new NoBaseConfigException(name);
|
|
34
|
+
}
|
|
35
|
+
return this.mergeConfigs(configs);
|
|
36
|
+
}
|
|
37
|
+
mergeConfigs(configs) {
|
|
38
|
+
return configs
|
|
39
|
+
.filter(config => config !== null)
|
|
40
|
+
.filter((config) => typeof config === 'object')
|
|
41
|
+
.reduce((merged, next) => {
|
|
42
|
+
if (merged['root'] === true && this.options.recursive) {
|
|
43
|
+
return merged;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
...merged,
|
|
47
|
+
...next,
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
transform(rawConfig, ctor) {
|
|
52
|
+
return plainToInstance(ctor, rawConfig);
|
|
53
|
+
}
|
|
54
|
+
async validate(config) {
|
|
55
|
+
const validationErrors = await validate(config);
|
|
56
|
+
if (validationErrors.length > 0) {
|
|
57
|
+
throw new AggregateError(validationErrors, 'Config validation error');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async loadConfigFile(path) {
|
|
61
|
+
try {
|
|
62
|
+
const content = await fs.readFile(path, { encoding: 'utf-8' });
|
|
63
|
+
return JSON.parse(content);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# 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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"enforce-env.decorator.js","sourceRoot":"","sources":["../../src/decorators/enforce-env.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,OAAO,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"no-base-config.exception.js","sourceRoot":"","sources":["../../src/exceptions/no-base-config.exception.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACvD,YAAmB,UAAkB;QACpC,KAAK,CAAC,yBAAyB,UAAU,YAAY,CAAC,CAAC;IACxD,CAAC;CACD"}
|
|
@@ -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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AACtB,OAAO,kBAAkB,CAAC;AAE1B,cAAc,iBAAiB,CAAC"}
|
|
@@ -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,75 @@
|
|
|
1
|
+
import { dirname, resolve, } from 'path';
|
|
2
|
+
export class PathBuilder {
|
|
3
|
+
options;
|
|
4
|
+
paths;
|
|
5
|
+
constructor(options = {}) {
|
|
6
|
+
this.options = {
|
|
7
|
+
appPath: process.cwd(),
|
|
8
|
+
configDir: null,
|
|
9
|
+
envBuilder: false,
|
|
10
|
+
overrideEnv: null,
|
|
11
|
+
overridePostfix: null,
|
|
12
|
+
basePostfix: null,
|
|
13
|
+
recursive: false,
|
|
14
|
+
...options,
|
|
15
|
+
};
|
|
16
|
+
this.paths = [];
|
|
17
|
+
}
|
|
18
|
+
build(name) {
|
|
19
|
+
return this.prepareBasePaths()
|
|
20
|
+
.addEnvFolders()
|
|
21
|
+
.addConfigName(name)
|
|
22
|
+
.paths;
|
|
23
|
+
}
|
|
24
|
+
prepareBasePaths() {
|
|
25
|
+
const { appPath, configDir, recursive } = this.options;
|
|
26
|
+
if (recursive) {
|
|
27
|
+
let nextPath = appPath;
|
|
28
|
+
const basePaths = [appPath];
|
|
29
|
+
while (nextPath !== '/') {
|
|
30
|
+
nextPath = dirname(nextPath);
|
|
31
|
+
basePaths.push(nextPath);
|
|
32
|
+
}
|
|
33
|
+
this.paths = basePaths;
|
|
34
|
+
if (configDir) {
|
|
35
|
+
this.mergePaths([configDir]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.paths = [this.buildPathToConfig([appPath, configDir])];
|
|
40
|
+
}
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
addEnvFolders() {
|
|
44
|
+
const { envBuilder, overrideEnv } = this.options;
|
|
45
|
+
const envFolders = [];
|
|
46
|
+
if (!envBuilder) {
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
envFolders.push('base');
|
|
50
|
+
if (overrideEnv) {
|
|
51
|
+
envFolders.push(overrideEnv.getValue());
|
|
52
|
+
}
|
|
53
|
+
envFolders.push('local');
|
|
54
|
+
return this.mergePaths(envFolders);
|
|
55
|
+
}
|
|
56
|
+
addConfigName(configName) {
|
|
57
|
+
const { overridePostfix, basePostfix } = this.options;
|
|
58
|
+
const baseName = basePostfix ? `${configName}.${basePostfix}.json` : `${configName}.json`;
|
|
59
|
+
const overrideName = overridePostfix ? `${configName}.${overridePostfix}.json` : null;
|
|
60
|
+
const names = [baseName];
|
|
61
|
+
if (overrideName) {
|
|
62
|
+
names.push(overrideName);
|
|
63
|
+
}
|
|
64
|
+
return this.mergePaths(names);
|
|
65
|
+
}
|
|
66
|
+
mergePaths(additionalParts) {
|
|
67
|
+
this.paths = this.paths.flatMap(path => additionalParts.map(part => this.buildPathToConfig([path, part])));
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
buildPathToConfig(parts) {
|
|
71
|
+
const filteredParts = parts.filter((part) => part !== null);
|
|
72
|
+
return resolve(...filteredParts);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# 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 @@
|
|
|
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,91 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Transform } from 'class-transformer';
|
|
3
|
+
import { Describe, expect, Test, TestSuite, } from '@hg-ts/tests';
|
|
4
|
+
import { ConfigLoader } from '../config-loader';
|
|
5
|
+
import { EnforceEnv } from '../decorators';
|
|
6
|
+
let ConfigLoaderTestSuite = class ConfigLoaderTestSuite extends TestSuite {
|
|
7
|
+
async simple() {
|
|
8
|
+
const loader = new ConfigLoader();
|
|
9
|
+
const merged = loader['mergeConfigs']([
|
|
10
|
+
{
|
|
11
|
+
a: 'a',
|
|
12
|
+
b: 'b',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
a: 'aa',
|
|
16
|
+
c: 'c',
|
|
17
|
+
},
|
|
18
|
+
]);
|
|
19
|
+
expect(merged['a']).toBe('aa');
|
|
20
|
+
expect(merged['b']).toBe('b');
|
|
21
|
+
expect(merged['c']).toBe('c');
|
|
22
|
+
}
|
|
23
|
+
async recursive() {
|
|
24
|
+
const loader = new ConfigLoader({ recursive: true });
|
|
25
|
+
const merged = loader['mergeConfigs']([
|
|
26
|
+
{
|
|
27
|
+
a: 'a',
|
|
28
|
+
b: 'b',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
a: 'aa',
|
|
32
|
+
c: 'c',
|
|
33
|
+
root: true,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
a: 'aaa',
|
|
37
|
+
b: 'bbb',
|
|
38
|
+
c: 'ccc',
|
|
39
|
+
},
|
|
40
|
+
]);
|
|
41
|
+
expect(merged['a']).toBe('aa');
|
|
42
|
+
expect(merged['b']).toBe('b');
|
|
43
|
+
expect(merged['c']).toBe('c');
|
|
44
|
+
}
|
|
45
|
+
async enforceEnv() {
|
|
46
|
+
const loader = new ConfigLoader();
|
|
47
|
+
class Config {
|
|
48
|
+
number;
|
|
49
|
+
bool;
|
|
50
|
+
}
|
|
51
|
+
__decorate([
|
|
52
|
+
EnforceEnv('SOME_NUMERIC_ENV'),
|
|
53
|
+
Transform(({ value }) => (Number.isNaN(Number(value)) ? value : Number(value))),
|
|
54
|
+
__metadata("design:type", Number)
|
|
55
|
+
], Config.prototype, "number", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
EnforceEnv('SOME_BOOLEAN_ENV'),
|
|
58
|
+
Transform(({ value }) => (value === 'true' ? true : value === 'false' ? false : value)),
|
|
59
|
+
__metadata("design:type", Boolean)
|
|
60
|
+
], Config.prototype, "bool", void 0);
|
|
61
|
+
process.env['SOME_NUMERIC_ENV'] = '10';
|
|
62
|
+
process.env['SOME_BOOLEAN_ENV'] = 'false';
|
|
63
|
+
const config = { number: '1', bool: true };
|
|
64
|
+
const transformed = loader['transform'](config, Config);
|
|
65
|
+
expect(transformed.number).toBe(10);
|
|
66
|
+
expect(transformed.bool).toBe(false);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
__decorate([
|
|
70
|
+
Test(),
|
|
71
|
+
__metadata("design:type", Function),
|
|
72
|
+
__metadata("design:paramtypes", []),
|
|
73
|
+
__metadata("design:returntype", Promise)
|
|
74
|
+
], ConfigLoaderTestSuite.prototype, "simple", null);
|
|
75
|
+
__decorate([
|
|
76
|
+
Test(),
|
|
77
|
+
__metadata("design:type", Function),
|
|
78
|
+
__metadata("design:paramtypes", []),
|
|
79
|
+
__metadata("design:returntype", Promise)
|
|
80
|
+
], ConfigLoaderTestSuite.prototype, "recursive", null);
|
|
81
|
+
__decorate([
|
|
82
|
+
Test(),
|
|
83
|
+
__metadata("design:type", Function),
|
|
84
|
+
__metadata("design:paramtypes", []),
|
|
85
|
+
__metadata("design:returntype", Promise)
|
|
86
|
+
], ConfigLoaderTestSuite.prototype, "enforceEnv", null);
|
|
87
|
+
ConfigLoaderTestSuite = __decorate([
|
|
88
|
+
Describe()
|
|
89
|
+
], ConfigLoaderTestSuite);
|
|
90
|
+
export { ConfigLoaderTestSuite };
|
|
91
|
+
//# 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"}
|