@rsdk/core 1.0.12 → 2.0.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.
Files changed (248) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/app/platform.app.d.ts +1 -1
  3. package/dist/app/platform.app.js +3 -25
  4. package/dist/app/platform.app.js.map +1 -1
  5. package/dist/app-metadata/app-metadata.module.js.map +1 -1
  6. package/dist/app-metadata/exceptions/app-name-validation.exception.js.map +1 -1
  7. package/dist/config/additional-source/additional-source.initializer.d.ts +6 -2
  8. package/dist/config/additional-source/additional-source.initializer.js +24 -18
  9. package/dist/config/additional-source/additional-source.initializer.js.map +1 -1
  10. package/dist/config/additional-source/additional-source.module.d.ts +1 -1
  11. package/dist/config/additional-source/additional-source.module.js +3 -1
  12. package/dist/config/additional-source/additional-source.module.js.map +1 -1
  13. package/dist/config/config-reload.indicator.d.ts +3 -2
  14. package/dist/config/config-reload.indicator.js +4 -3
  15. package/dist/config/config-reload.indicator.js.map +1 -1
  16. package/dist/config/config.abstract.d.ts +3 -2
  17. package/dist/config/config.abstract.js +3 -3
  18. package/dist/config/config.abstract.js.map +1 -1
  19. package/dist/config/config.module.d.ts +0 -81
  20. package/dist/config/config.module.js +26 -203
  21. package/dist/config/config.module.js.map +1 -1
  22. package/dist/config/context/config.context.d.ts +75 -0
  23. package/dist/config/context/config.context.js +159 -0
  24. package/dist/config/context/config.context.js.map +1 -0
  25. package/dist/config/context/module.d.ts +5 -0
  26. package/dist/config/context/module.js +26 -0
  27. package/dist/config/context/module.js.map +1 -0
  28. package/dist/config/exceptions/config-not-bootstrapped.exception.js.map +1 -1
  29. package/dist/config/exceptions/property.exception.d.ts +9 -2
  30. package/dist/config/exceptions/property.exception.js +4 -6
  31. package/dist/config/exceptions/property.exception.js.map +1 -1
  32. package/dist/config/index.d.ts +1 -0
  33. package/dist/config/index.js +3 -1
  34. package/dist/config/index.js.map +1 -1
  35. package/dist/config/metadata/config-metadata.provider.d.ts +21 -0
  36. package/dist/config/metadata/config-metadata.provider.js +37 -0
  37. package/dist/config/metadata/config-metadata.provider.js.map +1 -0
  38. package/dist/config/metadata/config-metadata.registry.d.ts +1 -9
  39. package/dist/config/metadata/config-metadata.registry.js +9 -28
  40. package/dist/config/metadata/config-metadata.registry.js.map +1 -1
  41. package/dist/config/metadata/constants.d.ts +3 -0
  42. package/dist/config/metadata/constants.js +7 -0
  43. package/dist/config/metadata/constants.js.map +1 -0
  44. package/dist/config/metadata/decorators/declare-property.decorator.js +2 -2
  45. package/dist/config/metadata/decorators/declare-property.decorator.js.map +1 -1
  46. package/dist/config/metadata/decorators/inject-property.decorator.d.ts +1 -1
  47. package/dist/config/metadata/decorators/inject-property.decorator.js +1 -1
  48. package/dist/config/metadata/exceptions/duplicate-property.exception.js.map +1 -1
  49. package/dist/config/metadata/exceptions/duplicate-section.exception.js.map +1 -1
  50. package/dist/config/metadata/exceptions/duplicate-source.exception.js.map +1 -1
  51. package/dist/config/metadata/types.d.ts +16 -0
  52. package/dist/config/metadata/types.js +3 -0
  53. package/dist/config/metadata/types.js.map +1 -0
  54. package/dist/config/reload/config-reload.events.d.ts +0 -2
  55. package/dist/config/reload/config-reload.events.js +0 -8
  56. package/dist/config/reload/config-reload.events.js.map +1 -1
  57. package/dist/config/sources/base/reloadable-config-source.abstract.d.ts +3 -2
  58. package/dist/config/sources/base/reloadable-config-source.abstract.js +3 -3
  59. package/dist/config/sources/base/reloadable-config-source.abstract.js.map +1 -1
  60. package/dist/config/sources/exceptions/config-source-di.exception.js.map +1 -1
  61. package/dist/config/sources/implementations/json-file.source.js.map +1 -1
  62. package/dist/config/sources/implementations/relodable-json-file.source.d.ts +3 -1
  63. package/dist/config/sources/implementations/relodable-json-file.source.js +6 -3
  64. package/dist/config/sources/implementations/relodable-json-file.source.js.map +1 -1
  65. package/dist/config/vars.class.d.ts +1 -1
  66. package/dist/config/vars.class.js +6 -6
  67. package/dist/config/vars.class.js.map +1 -1
  68. package/dist/context.aggregator.d.ts +21 -0
  69. package/dist/context.aggregator.js +53 -0
  70. package/dist/context.aggregator.js.map +1 -0
  71. package/dist/exceptions/base/platform-exception.absract.d.ts +2 -2
  72. package/dist/exceptions/base/platform-exception.absract.js +4 -1
  73. package/dist/exceptions/base/platform-exception.absract.js.map +1 -1
  74. package/dist/exceptions/implementations/bootstrap/double-init.exception.js.map +1 -1
  75. package/dist/exceptions/implementations/bootstrap/duplicate-protocol.exception.js.map +1 -1
  76. package/dist/exceptions/implementations/bootstrap/no-http.exception.js.map +1 -1
  77. package/dist/exceptions/implementations/bootstrap/no-init.exception.js.map +1 -1
  78. package/dist/exceptions/implementations/bootstrap/no-matching-transport.exception.js.map +1 -1
  79. package/dist/exceptions/implementations/bootstrap/sequence.exception.js.map +1 -1
  80. package/dist/exceptions/implementations/bootstrap/symbol-key-decoration.exception.js.map +1 -1
  81. package/dist/exceptions/implementations/bootstrap/unknown-bootstrap.exception.js.map +1 -1
  82. package/dist/exceptions/implementations/pipeline/authentication.exception.js.map +1 -1
  83. package/dist/exceptions/implementations/pipeline/conflict.exception.js.map +1 -1
  84. package/dist/exceptions/implementations/pipeline/duplicate-entity.exception.js.map +1 -1
  85. package/dist/exceptions/implementations/pipeline/input.exception.js.map +1 -1
  86. package/dist/exceptions/implementations/pipeline/internal.exception.js.map +1 -1
  87. package/dist/exceptions/implementations/pipeline/not-allowed.exception.js.map +1 -1
  88. package/dist/exceptions/implementations/pipeline/not-found.exception.js.map +1 -1
  89. package/dist/exceptions/implementations/pipeline/timeout.exception.js.map +1 -1
  90. package/dist/exceptions.handling/global-exceptions.config.js.map +1 -1
  91. package/dist/exceptions.handling/global-exceptions.filter.js.map +1 -1
  92. package/dist/exceptions.handling/global-exceptions.module.js.map +1 -1
  93. package/dist/health/autodoc/heath.autodoc-resolver.d.ts +5 -15
  94. package/dist/health/autodoc/heath.autodoc-resolver.js +11 -13
  95. package/dist/health/autodoc/heath.autodoc-resolver.js.map +1 -1
  96. package/dist/health/exceptions/health-check.exception.js.map +1 -1
  97. package/dist/health/health.const.d.ts +1 -0
  98. package/dist/health/health.const.js +2 -1
  99. package/dist/health/health.const.js.map +1 -1
  100. package/dist/health/health.module.js.map +1 -1
  101. package/dist/health/health.service.d.ts +6 -2
  102. package/dist/health/health.service.js +19 -6
  103. package/dist/health/health.service.js.map +1 -1
  104. package/dist/health/metadata/constants.d.ts +1 -0
  105. package/dist/health/metadata/constants.js +5 -0
  106. package/dist/health/metadata/constants.js.map +1 -0
  107. package/dist/health/metadata/indicator.decorator.js +2 -12
  108. package/dist/health/metadata/indicator.decorator.js.map +1 -1
  109. package/dist/health/metadata/indicators.registry.d.ts +0 -7
  110. package/dist/health/metadata/indicators.registry.js +6 -14
  111. package/dist/health/metadata/indicators.registry.js.map +1 -1
  112. package/dist/health/metadata/types.d.ts +7 -0
  113. package/dist/health/metadata/types.js +3 -0
  114. package/dist/health/metadata/types.js.map +1 -0
  115. package/dist/index.d.ts +8 -1
  116. package/dist/index.js +13 -7
  117. package/dist/index.js.map +1 -1
  118. package/dist/logging/decorators/inject-logger.decorator.js +5 -3
  119. package/dist/logging/decorators/inject-logger.decorator.js.map +1 -1
  120. package/dist/logging/global-logger-provider.generator.d.ts +7 -0
  121. package/dist/logging/global-logger-provider.generator.js +22 -0
  122. package/dist/logging/global-logger-provider.generator.js.map +1 -0
  123. package/dist/logging/index.d.ts +2 -0
  124. package/dist/logging/index.js +3 -0
  125. package/dist/logging/index.js.map +1 -1
  126. package/dist/logging/logging.config.js +1 -1
  127. package/dist/logging/logging.config.js.map +1 -1
  128. package/dist/logging/logging.module.d.ts +5 -3
  129. package/dist/logging/logging.module.js +25 -13
  130. package/dist/logging/logging.module.js.map +1 -1
  131. package/dist/logging/metadata/constants.d.ts +1 -0
  132. package/dist/logging/metadata/constants.js +5 -0
  133. package/dist/logging/metadata/constants.js.map +1 -0
  134. package/dist/logging/types.d.ts +6 -2
  135. package/dist/metrics/index.d.ts +1 -1
  136. package/dist/metrics/index.js +3 -3
  137. package/dist/metrics/index.js.map +1 -1
  138. package/dist/metrics/metadata/autodoc/metrics.autodoc-resolver.d.ts +6 -7
  139. package/dist/metrics/metadata/autodoc/metrics.autodoc-resolver.js +8 -11
  140. package/dist/metrics/metadata/autodoc/metrics.autodoc-resolver.js.map +1 -1
  141. package/dist/metrics/metadata/constants.d.ts +1 -0
  142. package/dist/metrics/metadata/constants.js +5 -0
  143. package/dist/metrics/metadata/constants.js.map +1 -0
  144. package/dist/metrics/metadata/index.d.ts +0 -1
  145. package/dist/metrics/metadata/index.js +0 -3
  146. package/dist/metrics/metadata/index.js.map +1 -1
  147. package/dist/metrics/metadata/metrics.registry.d.ts +0 -3
  148. package/dist/metrics/metadata/metrics.registry.js +9 -16
  149. package/dist/metrics/metadata/metrics.registry.js.map +1 -1
  150. package/dist/metrics/metadata/types.d.ts +2 -4
  151. package/dist/metrics/metric.storage.d.ts +8 -0
  152. package/dist/metrics/metric.storage.js +11 -0
  153. package/dist/metrics/metric.storage.js.map +1 -0
  154. package/dist/metrics/metrics.config.js.map +1 -1
  155. package/dist/metrics/metrics.module.d.ts +1 -1
  156. package/dist/metrics/metrics.module.js +27 -21
  157. package/dist/metrics/metrics.module.js.map +1 -1
  158. package/dist/platform.context.d.ts +5 -3
  159. package/dist/platform.context.js +20 -19
  160. package/dist/platform.context.js.map +1 -1
  161. package/dist/platform.module.d.ts +5 -4
  162. package/dist/platform.module.js +24 -13
  163. package/dist/platform.module.js.map +1 -1
  164. package/dist/rsdk-metadata/constants.d.ts +3 -0
  165. package/dist/rsdk-metadata/constants.js +5 -0
  166. package/dist/rsdk-metadata/constants.js.map +1 -0
  167. package/dist/rsdk-metadata/rsdk-metadata.global-module.d.ts +6 -0
  168. package/dist/rsdk-metadata/rsdk-metadata.global-module.js +31 -0
  169. package/dist/rsdk-metadata/rsdk-metadata.global-module.js.map +1 -0
  170. package/dist/tracing/services/instrumentation.service.js.map +1 -1
  171. package/dist/tracing/services/metadata.scanner.js.map +1 -1
  172. package/dist/tracing/tracing.config.js.map +1 -1
  173. package/dist/tracing/tracing.module.js.map +1 -1
  174. package/dist/transport/transport.module.d.ts +1 -0
  175. package/dist/transport/transport.module.js +8 -2
  176. package/dist/transport/transport.module.js.map +1 -1
  177. package/dist/types/context-aggregated.d.ts +8 -0
  178. package/dist/types/context-aggregated.js +3 -0
  179. package/dist/types/context-aggregated.js.map +1 -0
  180. package/dist/types/options.d.ts +6 -6
  181. package/dist/types/transports.d.ts +10 -3
  182. package/dist/types/transports.js.map +1 -1
  183. package/dist/unhandled-rejection.handler.d.ts +1 -0
  184. package/dist/unhandled-rejection.handler.js +24 -0
  185. package/dist/unhandled-rejection.handler.js.map +1 -0
  186. package/package.json +8 -7
  187. package/src/app/platform.app.ts +6 -32
  188. package/src/config/additional-source/additional-source.initializer.ts +34 -25
  189. package/src/config/additional-source/additional-source.module.ts +5 -2
  190. package/src/config/config-reload.indicator.ts +3 -3
  191. package/src/config/config.abstract.ts +2 -3
  192. package/src/config/config.module.ts +23 -225
  193. package/src/config/context/config.context.ts +209 -0
  194. package/src/config/context/module.ts +25 -0
  195. package/src/config/exceptions/property.exception.ts +11 -6
  196. package/src/config/index.ts +1 -0
  197. package/src/config/metadata/config-metadata.provider.ts +79 -0
  198. package/src/config/metadata/config-metadata.registry.ts +36 -41
  199. package/src/config/metadata/constants.ts +6 -0
  200. package/src/config/metadata/decorators/declare-property.decorator.ts +2 -2
  201. package/src/config/metadata/decorators/inject-property.decorator.ts +1 -1
  202. package/src/config/metadata/types.ts +22 -0
  203. package/src/config/reload/config-reload.events.ts +1 -13
  204. package/src/config/sources/base/reloadable-config-source.abstract.ts +2 -3
  205. package/src/config/sources/implementations/relodable-json-file.source.ts +6 -2
  206. package/src/config/vars.class.ts +9 -7
  207. package/src/context.aggregator.ts +62 -0
  208. package/src/exceptions/base/platform-exception.absract.ts +8 -3
  209. package/src/health/autodoc/heath.autodoc-resolver.ts +15 -18
  210. package/src/health/health.const.ts +2 -0
  211. package/src/health/health.service.ts +23 -4
  212. package/src/health/metadata/constants.ts +1 -0
  213. package/src/health/metadata/indicator.decorator.ts +2 -18
  214. package/src/health/metadata/indicators.registry.ts +16 -23
  215. package/src/health/metadata/types.ts +9 -0
  216. package/src/index.ts +29 -12
  217. package/src/logging/decorators/inject-logger.decorator.ts +5 -4
  218. package/src/logging/global-logger-provider.generator.ts +28 -0
  219. package/src/logging/index.ts +2 -0
  220. package/src/logging/logging.config.ts +2 -1
  221. package/src/logging/logging.module.ts +42 -16
  222. package/src/logging/metadata/constants.ts +1 -0
  223. package/src/logging/types.ts +6 -2
  224. package/src/metrics/index.ts +1 -1
  225. package/src/metrics/metadata/autodoc/metrics.autodoc-resolver.ts +13 -9
  226. package/src/metrics/metadata/constants.ts +1 -0
  227. package/src/metrics/metadata/index.ts +0 -1
  228. package/src/metrics/metadata/metrics.registry.ts +19 -23
  229. package/src/metrics/metadata/types.ts +2 -5
  230. package/src/metrics/metric.storage.ts +10 -0
  231. package/src/metrics/metrics.module.ts +32 -31
  232. package/src/platform.context.ts +32 -20
  233. package/src/platform.module.ts +18 -20
  234. package/src/rsdk-metadata/constants.ts +5 -0
  235. package/src/rsdk-metadata/rsdk-metadata.global-module.ts +34 -0
  236. package/src/transport/transport.module.ts +13 -1
  237. package/src/types/context-aggregated.ts +10 -0
  238. package/src/types/options.ts +6 -5
  239. package/src/types/transports.ts +15 -3
  240. package/src/unhandled-rejection.handler.ts +29 -0
  241. package/dist/health/index.d.ts +0 -7
  242. package/dist/health/index.js +0 -26
  243. package/dist/health/index.js.map +0 -1
  244. package/dist/health/metadata/index.d.ts +0 -2
  245. package/dist/health/metadata/index.js +0 -19
  246. package/dist/health/metadata/index.js.map +0 -1
  247. package/src/health/index.ts +0 -7
  248. package/src/health/metadata/index.ts +0 -2
@@ -1,111 +1,11 @@
1
1
  "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var PlatformConfigModule_1;
9
2
  Object.defineProperty(exports, "__esModule", { value: true });
10
3
  exports.PlatformConfigModule = void 0;
11
- const common_1 = require("@nestjs/common");
12
- const common_2 = require("@rsdk/common");
13
- const logging_1 = require("@rsdk/logging");
14
- const exceptions_1 = require("../exceptions");
15
4
  const additional_source_initializer_1 = require("./additional-source/additional-source.initializer");
16
5
  const additional_source_module_1 = require("./additional-source/additional-source.module");
17
- const exceptions_2 = require("./exceptions");
6
+ const config_context_1 = require("./context/config.context");
18
7
  const metadata_1 = require("./metadata");
19
- const reload_1 = require("./reload");
20
- const vars_class_1 = require("./vars.class");
21
- /**
22
- * Configuration is loaded in predictable order. You should take
23
- * into account chat all repeating keys will be overwritten on each step:
24
- *
25
- * 1. .env file if there is any
26
- * 2. process environment
27
- * 3. динамические source'ы (если сделать последовательно - то в порядке указания)
28
- */
29
- let PlatformConfigModule = PlatformConfigModule_1 = class PlatformConfigModule {
30
- static isBootstrapped = false;
31
- static events = reload_1.ReloadEvents.getInstance();
32
- static vars;
33
- static prefix;
34
- /**
35
- * Проинициализированные секции конфигов
36
- * @private
37
- */
38
- static initializedConfigs = new Map();
39
- /**
40
- * undefined является валидным значением по умолчанию (`defaultValue`)
41
- * @private
42
- */
43
- static properties = new Map();
44
- /**
45
- * We don't use class as context here because it is undefined if
46
- * tsc target is ES2022
47
- */
48
- static logger = logging_1.LoggerFactory.create('PlatformConfigModule');
49
- /**
50
- * Метадата о необходимых приложению значениях конфигурации
51
- * Зачем храним?
52
- * Потому что пайплайн такой:
53
- * 1. Собираем данные о том какие поля нам нужны
54
- * 2. Приложение запрашивает поле из конфигурации
55
- * 3. Ищем метаданные
56
- * 4. По метаданным вытягиваем значение
57
- * 5. Отдаём значение
58
- *
59
- * Это важно так как позволяет прозрачным образом контролировать этот процесс и инициализировать поля в тот момент когда они потребуются
60
- * А не в тот момент когда их объявили
61
- * Основной кейс, где это применяется - тесты
62
- * @private
63
- */
64
- static propertyMetadata = new Map();
65
- /**
66
- * This method should be invoked BEFORE bootstrapping nest application.
67
- *
68
- * It takes 2 main actions:
69
- * - load environment variables
70
- *
71
- * - instantiates all configuration initializedConfig (classes marked with
72
- * @ConfigSection() decorator) and adds them into internal storage
73
- *
74
- * If any of these actions fails - application should exit.
75
- *
76
- * NOTE: This method should be invoked before any other interaction
77
- * with ConfigurationModule
78
- *
79
- * ATTENTION: not load values from additional source
80
- */
81
- static bootstrap(options) {
82
- if (this.isBootstrapped) {
83
- throw new exceptions_1.SequenceException("Can't bootstrap ConfigurationModule twice");
84
- }
85
- this.prefix = options?.appName ?? '';
86
- if (this.prefix) {
87
- this.logger.info('Setting configuration keys prefix', {
88
- prefix: this.prefix,
89
- });
90
- }
91
- this.vars = new vars_class_1.Vars(this.prefix);
92
- this.readEnvironment();
93
- /**
94
- * Reading and validating standalone properties from env.
95
- *
96
- * NOTE: Splitting extraction if standalone properties into 2 phases
97
- * is necessary, some configuration sources can need something
98
- * from env to be instatiated.
99
- */
100
- const { properties } = metadata_1.ConfigMetadataRegistry.getMetadata();
101
- this.extractStandaloneProperties(properties, 'expectedInEnv');
102
- /**
103
- * NOTE: That properties from .env already loaded.
104
- * Now loading ones from other sources
105
- */
106
- this.extractStandaloneProperties(properties, 'others');
107
- this.isBootstrapped = true;
108
- }
8
+ class PlatformConfigModule {
109
9
  /**
110
10
  * Use this method to imports specific configuration property
111
11
  * into given module
@@ -121,7 +21,7 @@ let PlatformConfigModule = PlatformConfigModule_1 = class PlatformConfigModule {
121
21
  const token = (0, metadata_1.getPropertyToken)(alias);
122
22
  const provider = this.getPropertyProvider(token);
123
23
  return {
124
- module: PlatformConfigModule_1,
24
+ module: PlatformConfigModule,
125
25
  providers: [provider],
126
26
  exports: [provider],
127
27
  };
@@ -138,18 +38,26 @@ let PlatformConfigModule = PlatformConfigModule_1 = class PlatformConfigModule {
138
38
  * forFeature() is executed Config instances don't yet exist
139
39
  */
140
40
  const provider = {
141
- inject: [{ optional: true, token: additional_source_initializer_1.AdditionalSourceInitializer }],
41
+ inject: [
42
+ config_context_1.ConfigContext,
43
+ { optional: true, token: additional_source_initializer_1.AdditionalSourceInitializer },
44
+ ],
142
45
  provide: ctor,
143
- useFactory: async (additionalSourceModuleInitializer) => {
46
+ useFactory: async (configContext, additionalSourceModuleInitializer) => {
144
47
  /**
145
48
  * Да, каждый раз вызываем метод `initialize` более подробно почему так - смотри в `JSDoc` метода
146
49
  */
147
50
  await additionalSourceModuleInitializer?.initialize();
148
- return this.resolve(ctor);
51
+ return configContext.resolve(ctor);
149
52
  },
150
53
  };
151
54
  return {
152
- module: PlatformConfigModule_1,
55
+ /**
56
+ * Если использовать существующий PlatformConfigModule,
57
+ * то появляются коллизии при резолве зависимостей, а сам Nest падает
58
+ * TODO [@nestjs/core@>9.4]: проверить работоспособность, может быть исправлено
59
+ */
60
+ module: PlatformConfigModule,
153
61
  providers: [provider],
154
62
  exports: [provider],
155
63
  };
@@ -158,114 +66,29 @@ let PlatformConfigModule = PlatformConfigModule_1 = class PlatformConfigModule {
158
66
  const providers = [];
159
67
  const imports = [];
160
68
  if (options.config?.sources) {
161
- imports.push(
162
- // TODO: Эти опции в идеале добавить в сам контейнер и использовать их везде
163
- additional_source_module_1.AdditionalSourceModule.forRoot({
164
- sources: options.config?.sources,
165
- logger: this.logger,
166
- properties: this.properties,
167
- vars: this.vars,
168
- events: this.events,
169
- prefix: this.prefix,
170
- propertyMetadata: this.propertyMetadata,
171
- }));
69
+ imports.push(additional_source_module_1.AdditionalSourceModule.forRoot(options.config?.sources));
172
70
  }
173
71
  return {
72
+ global: true,
174
73
  imports,
175
- module: PlatformConfigModule_1,
74
+ module: PlatformConfigModule,
176
75
  providers,
76
+ exports: providers,
177
77
  };
178
78
  }
179
- /**
180
- * Extracting specific instance of configuration section by
181
- * its class reference. Throws error if called before .bootstrap()
182
- *
183
- * ATTENTION: Конфиг будет разрешен с доступными на данный момент переменными,
184
- * то есть если дополнительные источники конфигурации ещё не были проинициализированы,
185
- * они не будут учтены в разрешении конфигурации.
186
- *
187
- * @param ctor Pass constructor of configuration section class
188
- * @returns T
189
- */
190
- static resolve(ctor) {
191
- /**
192
- * Автор уверен, что здесь не стоит делать bootstrap так как это разные зоны ответственности
193
- */
194
- if (!this.isBootstrapped) {
195
- throw new exceptions_2.ConfigNotBootstrappedException();
196
- }
197
- const instance = this.initializedConfigs.get(ctor);
198
- if (!instance) {
199
- const instantiateSection = this.instantiateSection(ctor);
200
- this.initializedConfigs.set(ctor, instantiateSection);
201
- return instantiateSection;
202
- }
203
- // We know exactly it is T
204
- return instance;
205
- }
206
79
  static getPropertyProvider(token) {
207
80
  return {
208
- inject: [{ optional: true, token: additional_source_initializer_1.AdditionalSourceInitializer }],
81
+ inject: [
82
+ config_context_1.ConfigContext,
83
+ { optional: true, token: additional_source_initializer_1.AdditionalSourceInitializer },
84
+ ],
209
85
  provide: token,
210
- useFactory: async (additionalSourceModuleInitializer) => {
86
+ useFactory: async (configContext, additionalSourceModuleInitializer) => {
211
87
  await additionalSourceModuleInitializer?.initialize();
212
- if (this.properties.has(token)) {
213
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
214
- return this.properties.get(token);
215
- }
216
- const propMeta = this.propertyMetadata.get(token);
217
- if (!propMeta) {
218
- throw new exceptions_2.ConfigPropertyMetadataNotFound(token);
219
- }
220
- const value = this.vars.extract(propMeta);
221
- this.properties.set(token, value);
222
- return value;
88
+ return configContext.resolveProperty(token);
223
89
  },
224
90
  };
225
91
  }
226
- static readEnvironment() {
227
- this.logger.info('Loading variables from .env file if exists');
228
- common_2.dotenv.config();
229
- this.logger.info('Initializing raw parameters storage');
230
- /**
231
- * Copying parameters from process.env, skipping entries
232
- * for which value is undefined (not sure it's possible,
233
- * but @types/node says it is).
234
- */
235
- for (const [key, value] of Object.entries(process.env)) {
236
- if (value !== undefined) {
237
- this.vars.set(key, value);
238
- }
239
- }
240
- }
241
- static extractStandaloneProperties(properties, subset) {
242
- for (const [alias, metadata] of properties.entries()) {
243
- if (subset === 'expectedInEnv' && !metadata.expectedInEnv) {
244
- continue;
245
- }
246
- this.propertyMetadata.set((0, metadata_1.getPropertyToken)(alias), metadata);
247
- }
248
- }
249
- /**
250
- * Инициализирует инстанс секции конфига
251
- * ATTENTION: не проверяет есть ли ещё проинициализированные, будьте внимательны во избежание неожиданного поведение
252
- * @param ctor
253
- * @private
254
- */
255
- static instantiateSection(ctor) {
256
- const instance = new ctor();
257
- this.logger.debug('Initializing configuration section instance', {
258
- ctor: ctor.name,
259
- });
260
- this.events.on('merge', () => {
261
- instance.tryUpdate(this.vars);
262
- });
263
- instance.read(this.vars);
264
- return instance;
265
- }
266
- };
267
- PlatformConfigModule = PlatformConfigModule_1 = __decorate([
268
- (0, common_1.Module)({})
269
- ], PlatformConfigModule);
92
+ }
270
93
  exports.PlatformConfigModule = PlatformConfigModule;
271
94
  //# sourceMappingURL=config.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.module.js","sourceRoot":"","sources":["../../src/config/config.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.module.js","sourceRoot":"","sources":["../../src/config/config.module.ts"],"names":[],"mappings":";;;AAKA,qGAAgG;AAChG,2FAAsF;AACtF,6DAAyD;AAEzD,yCAA8C;AAkB9C,MAAa,oBAAoB;IAC/B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,WAAW,CAAC,KAAa;QAC9B,MAAM,KAAK,GAAG,IAAA,2BAAgB,EAAC,KAAK,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEjD,OAAO;YACL,MAAM,EAAE,oBAAoB;YAC5B,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,QAAQ,CAAC;SACpB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,IAAyB;QACzC;;;WAGG;QACH,MAAM,QAAQ,GAAoB;YAChC,MAAM,EAAE;gBACN,8BAAa;gBACb,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,2DAA2B,EAAE;aACvD;YACD,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,KAAK,EACf,aAA4B,EAC5B,iCAA+D,EAC/D,EAAE;gBACF;;mBAEG;gBACH,MAAM,iCAAiC,EAAE,UAAU,EAAE,CAAC;gBACtD,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;SACF,CAAC;QAEF,OAAO;YACL;;;;eAIG;YACH,MAAM,EAAE,oBAAoB;YAC5B,SAAS,EAAE,CAAC,QAAQ,CAAC;YAErB,OAAO,EAAE,CAAC,QAAQ,CAAC;SACpB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,OAAwB;QACrC,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,OAAO,GAA+C,EAAE,CAAC;QAE/D,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;YAC3B,OAAO,CAAC,IAAI,CAAC,iDAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SACvE;QAED,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,OAAO;YACP,MAAM,EAAE,oBAAoB;YAC5B,SAAS;YACT,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAChC,KAA6C;QAE7C,OAAO;YACL,MAAM,EAAE;gBACN,8BAAa;gBACb,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,2DAA2B,EAAE;aACvD;YACD,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,KAAK,EACf,aAA4B,EAC5B,iCAA+D,EAC7B,EAAE;gBACpC,MAAM,iCAAiC,EAAE,UAAU,EAAE,CAAC;gBACtD,OAAO,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AApGD,oDAoGC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Configuration is loaded in predictable order. You should take
3
+ * into account chat all repeating keys will be overwritten on each step:
4
+ *
5
+ * 1. .env file if there is any
6
+ * 2. process environment
7
+ * 3. динамические source'ы (если сделать последовательно - то в порядке указания)
8
+ */
9
+ import type { Constructor } from '@rsdk/common';
10
+ import type { RsdkMetadataProvider } from '@rsdk/metadata';
11
+ import type { Config } from '../config.abstract';
12
+ import type { ConfigModuleOptions } from '../config.module';
13
+ import { ReloadEvents } from '../reload';
14
+ import type { ConfigValue, PropertyMetadata } from '../types';
15
+ import { Vars } from '../vars.class';
16
+ export declare class ConfigContext {
17
+ readonly events: ReloadEvents;
18
+ readonly vars: Vars;
19
+ readonly prefix: string;
20
+ /**
21
+ * Метадата о необходимых приложению значениях конфигурации
22
+ * Зачем храним?
23
+ * Потому что пайплайн такой:
24
+ * 1. Собираем данные о том какие поля нам нужны
25
+ * 2. Приложение запрашивает поле из конфигурации
26
+ * 3. Ищем метаданные
27
+ * 4. По метаданным вытягиваем значение
28
+ * 5. Отдаём значение
29
+
30
+ *
31
+ * Это важно так как позволяет прозрачным образом контролировать этот процесс и инициализировать поля в тот момент когда они потребуются
32
+ * А не в тот момент когда их объявили
33
+ * Основной кейс, где это применяется - тесты
34
+ * @private
35
+ */
36
+ readonly standalonePropertyMetadata: Map<string, PropertyMetadata<ConfigValue>>;
37
+ /**
38
+ * Проинициализированные секции конфигов
39
+ * @private
40
+ */
41
+ private readonly initializedConfigs;
42
+ /**
43
+ * undefined является валидным значением по умолчанию (`defaultValue`)
44
+ * @private
45
+ */
46
+ private readonly properties;
47
+ /**
48
+ * We don't use class as context here because it is undefined if
49
+ * tsc target is ES2022
50
+ */
51
+ private readonly logger;
52
+ constructor(rsdkMetadataProvider: RsdkMetadataProvider, options?: ConfigModuleOptions);
53
+ /**
54
+ * Extracting specific instance of configuration section by
55
+ * its class reference. Throws error if called before .bootstrap()
56
+ *
57
+ * ATTENTION: Конфиг будет разрешен с доступными на данный момент переменными,
58
+ * то есть если дополнительные источники конфигурации ещё не были проинициализированы,
59
+ * они не будут учтены в разрешении конфигурации.
60
+ *
61
+ * @param ctor Pass constructor of configuration section class
62
+ * @returns T
63
+ */
64
+ resolve<T extends Config>(ctor: Constructor<T>): T;
65
+ resolveProperty(token: `STANDALONE_CONFIG_PROPERTY_${string}`): ConfigValue | undefined;
66
+ private readEnvironment;
67
+ private extractStandaloneProperties;
68
+ /**
69
+ * Инициализирует инстанс секции конфига
70
+ * ATTENTION: не проверяет есть ли ещё проинициализированные, будьте внимательны во избежание неожиданного поведение
71
+ * @param ctor
72
+ * @private
73
+ */
74
+ private instantiateSection;
75
+ }
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigContext = void 0;
4
+ const common_1 = require("@rsdk/common");
5
+ const logging_1 = require("@rsdk/logging");
6
+ const exceptions_1 = require("../exceptions");
7
+ const metadata_1 = require("../metadata");
8
+ const config_metadata_provider_1 = require("../metadata/config-metadata.provider");
9
+ const reload_1 = require("../reload");
10
+ const vars_class_1 = require("../vars.class");
11
+ class ConfigContext {
12
+ events = new reload_1.ReloadEvents();
13
+ vars;
14
+ prefix;
15
+ /**
16
+ * Метадата о необходимых приложению значениях конфигурации
17
+ * Зачем храним?
18
+ * Потому что пайплайн такой:
19
+ * 1. Собираем данные о том какие поля нам нужны
20
+ * 2. Приложение запрашивает поле из конфигурации
21
+ * 3. Ищем метаданные
22
+ * 4. По метаданным вытягиваем значение
23
+ * 5. Отдаём значение
24
+
25
+ *
26
+ * Это важно так как позволяет прозрачным образом контролировать этот процесс и инициализировать поля в тот момент когда они потребуются
27
+ * А не в тот момент когда их объявили
28
+ * Основной кейс, где это применяется - тесты
29
+ * @private
30
+ */
31
+ standalonePropertyMetadata = new Map();
32
+ /**
33
+ * Проинициализированные секции конфигов
34
+ * @private
35
+ */
36
+ initializedConfigs = new Map();
37
+ /**
38
+ * undefined является валидным значением по умолчанию (`defaultValue`)
39
+ * @private
40
+ */
41
+ properties = new Map();
42
+ /**
43
+ * We don't use class as context here because it is undefined if
44
+ * tsc target is ES2022
45
+ */
46
+ logger = logging_1.LoggerFactory.create('PlatformConfigModule');
47
+ constructor(rsdkMetadataProvider, options) {
48
+ /**
49
+ * Should be invoked BEFORE bootstrapping nest application.
50
+ *
51
+ * It takes 2 main actions:
52
+ * - load environment variables
53
+ *
54
+ * - initialize storage from options and rsdkMetadataProvider
55
+ *
56
+ * If any of these actions fails - application should exit.
57
+ *
58
+ * ATTENTION: not load values from additional source
59
+ */
60
+ this.prefix = options?.appName ?? '';
61
+ if (this.prefix) {
62
+ this.logger.info('Setting configuration keys prefix', {
63
+ prefix: this.prefix,
64
+ });
65
+ }
66
+ this.vars = new vars_class_1.Vars(this.prefix);
67
+ this.readEnvironment();
68
+ const properties = new config_metadata_provider_1.ConfigMetadataProvider(rsdkMetadataProvider).getPropertiesMap();
69
+ /**
70
+ * Reading and validating standalone properties from env.
71
+ *
72
+ * NOTE: Splitting extraction if standalone properties into 2 phases
73
+ * is necessary, some configuration sources can need something
74
+ * from env to be instatiated.
75
+ */
76
+ this.extractStandaloneProperties(properties, 'expectedInEnv');
77
+ /**
78
+ * NOTE: That properties from .env already loaded.
79
+ * Now loading ones from other sources
80
+ */
81
+ this.extractStandaloneProperties(properties, 'others');
82
+ }
83
+ /**
84
+ * Extracting specific instance of configuration section by
85
+ * its class reference. Throws error if called before .bootstrap()
86
+ *
87
+ * ATTENTION: Конфиг будет разрешен с доступными на данный момент переменными,
88
+ * то есть если дополнительные источники конфигурации ещё не были проинициализированы,
89
+ * они не будут учтены в разрешении конфигурации.
90
+ *
91
+ * @param ctor Pass constructor of configuration section class
92
+ * @returns T
93
+ */
94
+ resolve(ctor) {
95
+ const instance = this.initializedConfigs.get(ctor);
96
+ if (!instance) {
97
+ const instantiateSection = this.instantiateSection(ctor);
98
+ this.initializedConfigs.set(ctor, instantiateSection);
99
+ return instantiateSection;
100
+ }
101
+ // We know exactly it is T
102
+ return instance;
103
+ }
104
+ resolveProperty(token) {
105
+ if (this.properties.has(token)) {
106
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
107
+ return this.properties.get(token);
108
+ }
109
+ const propMeta = this.standalonePropertyMetadata.get(token);
110
+ if (!propMeta) {
111
+ throw new exceptions_1.ConfigPropertyMetadataNotFound(token);
112
+ }
113
+ const value = this.vars.extract(propMeta);
114
+ this.properties.set(token, value);
115
+ return value;
116
+ }
117
+ readEnvironment() {
118
+ this.logger.info('Loading variables from .env file if exists');
119
+ common_1.dotenv.config();
120
+ this.logger.info('Initializing raw parameters storage');
121
+ /**
122
+ * Copying parameters from process.env, skipping entries
123
+ * for which value is undefined (not sure it's possible,
124
+ * but @types/node says it is).
125
+ */
126
+ for (const [key, value] of Object.entries(process.env)) {
127
+ if (value !== undefined) {
128
+ this.vars.set(key, value);
129
+ }
130
+ }
131
+ }
132
+ extractStandaloneProperties(properties, subset) {
133
+ for (const [alias, metadata] of properties.entries()) {
134
+ if (subset === 'expectedInEnv' && !metadata.expectedInEnv) {
135
+ continue;
136
+ }
137
+ this.standalonePropertyMetadata.set((0, metadata_1.getPropertyToken)(alias), metadata);
138
+ }
139
+ }
140
+ /**
141
+ * Инициализирует инстанс секции конфига
142
+ * ATTENTION: не проверяет есть ли ещё проинициализированные, будьте внимательны во избежание неожиданного поведение
143
+ * @param ctor
144
+ * @private
145
+ */
146
+ instantiateSection(ctor) {
147
+ const instance = new ctor(this.events);
148
+ this.logger.debug('Initializing configuration section instance', {
149
+ ctor: ctor.name,
150
+ });
151
+ this.events.on('merge', () => {
152
+ instance.tryUpdate(this.vars);
153
+ });
154
+ instance.read(this.vars);
155
+ return instance;
156
+ }
157
+ }
158
+ exports.ConfigContext = ConfigContext;
159
+ //# sourceMappingURL=config.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.context.js","sourceRoot":"","sources":["../../../src/config/context/config.context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DynamicModule } from '@nestjs/common';
2
+ import { ConfigContext } from './config.context';
3
+ export declare class ConfigContextModule {
4
+ static forRoot(configContext: ConfigContext): DynamicModule;
5
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigContextModule = void 0;
4
+ const reload_1 = require("../reload");
5
+ const config_context_1 = require("./config.context");
6
+ class ConfigContextModule {
7
+ static forRoot(configContext) {
8
+ return {
9
+ global: true,
10
+ module: ConfigContextModule,
11
+ providers: [
12
+ {
13
+ provide: config_context_1.ConfigContext,
14
+ useValue: configContext,
15
+ },
16
+ {
17
+ provide: reload_1.ReloadEvents,
18
+ useValue: configContext.events,
19
+ },
20
+ ],
21
+ exports: [config_context_1.ConfigContext],
22
+ };
23
+ }
24
+ }
25
+ exports.ConfigContextModule = ConfigContextModule;
26
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/config/context/module.ts"],"names":[],"mappings":";;;AAEA,sCAAyC;AAEzC,qDAAiD;AAEjD,MAAa,mBAAmB;IAC9B,MAAM,CAAC,OAAO,CAAC,aAA4B;QACzC,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,mBAAmB;YAC3B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,8BAAa;oBACtB,QAAQ,EAAE,aAAa;iBACxB;gBACD;oBACE,OAAO,EAAE,qBAAY;oBACrB,QAAQ,EAAE,aAAa,CAAC,MAAM;iBAC/B;aACF;YACD,OAAO,EAAE,CAAC,8BAAa,CAAC;SACzB,CAAC;IACJ,CAAC;CACF;AAlBD,kDAkBC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-not-bootstrapped.exception.js","sourceRoot":"","sources":["../../../src/config/exceptions/config-not-bootstrapped.exception.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAoC;AAEpC,iDAAiE;AAQ1D,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,+BAAkB;IACpE;QACE,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAJY,8BAA8B;IAN1C,IAAA,sBAAS,EAAC;QACT,WAAW,EAAE,IAAA,aAAI,EAAA;;;GAGhB;KACF,CAAC;;GACW,8BAA8B,CAI1C;AAJY,wEAA8B"}
1
+ {"version":3,"file":"config-not-bootstrapped.exception.js","sourceRoot":"","sources":["../../../src/config/exceptions/config-not-bootstrapped.exception.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAAoC;AAEpC,iDAAiE;AAEjE,IAMa,8BAA8B,GAN3C,MAMa,8BAA+B,SAAQ,+BAAkB;IACpE;QACE,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACrD,CAAC;CACF,CAAA;AAJY,8BAA8B;IAN1C,IAAA,sBAAS,EAAC;QACT,WAAW,EAAE,IAAA,aAAI,EAAA;;;GAGhB;KACF,CAAC;;GACW,8BAA8B,CAI1C;AAJY,wEAA8B"}
@@ -1,5 +1,12 @@
1
1
  import { PlatformException } from '../../exceptions';
2
+ import type { PropertyMetadata } from '../types';
2
3
  export declare class PropertyException extends PlatformException {
3
- constructor(property: string, msg: string);
4
- static fromError(err: any, key: string): PropertyException;
4
+ constructor(msg: string, details: {
5
+ propertyMetadata: PropertyMetadata;
6
+ preparedKey: string;
7
+ });
8
+ static fromError(err: any, details: {
9
+ propertyMetadata: PropertyMetadata;
10
+ preparedKey: string;
11
+ }): PropertyException;
5
12
  }
@@ -3,15 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PropertyException = void 0;
4
4
  const exceptions_1 = require("../../exceptions");
5
5
  class PropertyException extends exceptions_1.PlatformException {
6
- constructor(property, msg) {
6
+ constructor(msg, details) {
7
7
  super('CONFIG:PROPERTY', msg, {
8
- details: {
9
- property,
10
- },
8
+ details,
11
9
  });
12
10
  }
13
- static fromError(err, key) {
14
- return new PropertyException(key, err.message || 'UNKNOWN ERROR');
11
+ static fromError(err, details) {
12
+ return new PropertyException(err.message || 'UNKNOWN ERROR', details);
15
13
  }
16
14
  }
17
15
  exports.PropertyException = PropertyException;
@@ -1 +1 @@
1
- {"version":3,"file":"property.exception.js","sourceRoot":"","sources":["../../../src/config/exceptions/property.exception.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAErD,MAAa,iBAAkB,SAAQ,8BAAiB;IACtD,YAAY,QAAgB,EAAE,GAAW;QACvC,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC5B,OAAO,EAAE;gBACP,QAAQ;aACT;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,GAAQ,EAAE,GAAW;QACpC,OAAO,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC,CAAC;IACpE,CAAC;CACF;AAZD,8CAYC"}
1
+ {"version":3,"file":"property.exception.js","sourceRoot":"","sources":["../../../src/config/exceptions/property.exception.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAGrD,MAAa,iBAAkB,SAAQ,8BAAiB;IACtD,YACE,GAAW,EACX,OAAoE;QAEpE,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC5B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CACd,GAAQ,EACR,OAAoE;QAEpE,OAAO,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,IAAI,eAAe,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF;AAhBD,8CAgBC"}
@@ -8,3 +8,4 @@ export * from './reload';
8
8
  export { AdditionalSourceModule } from './additional-source/additional-source.module';
9
9
  export { AdditionalSourceOptions } from './additional-source/additional-source.module';
10
10
  export { ConfigPropertyMetadataNotFound } from './exceptions';
11
+ export { ConfigContext } from './context/config.context';
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ConfigPropertyMetadataNotFound = exports.AdditionalSourceModule = void 0;
17
+ exports.ConfigContext = exports.ConfigPropertyMetadataNotFound = exports.AdditionalSourceModule = void 0;
18
18
  __exportStar(require("./parsers"), exports);
19
19
  __exportStar(require("./config.module"), exports);
20
20
  __exportStar(require("./sources"), exports);
@@ -26,4 +26,6 @@ var additional_source_module_1 = require("./additional-source/additional-source.
26
26
  Object.defineProperty(exports, "AdditionalSourceModule", { enumerable: true, get: function () { return additional_source_module_1.AdditionalSourceModule; } });
27
27
  var exceptions_1 = require("./exceptions");
28
28
  Object.defineProperty(exports, "ConfigPropertyMetadataNotFound", { enumerable: true, get: function () { return exceptions_1.ConfigPropertyMetadataNotFound; } });
29
+ var config_context_1 = require("./context/config.context");
30
+ Object.defineProperty(exports, "ConfigContext", { enumerable: true, get: function () { return config_context_1.ConfigContext; } });
29
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,kDAAgC;AAChC,4CAA0B;AAC1B,oDAAkC;AAClC,6CAA2B;AAC3B,0CAAwB;AACxB,2CAAyB;AACzB,yFAAsF;AAA7E,kIAAA,sBAAsB,OAAA;AAE/B,2CAA8D;AAArD,4HAAA,8BAA8B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,kDAAgC;AAChC,4CAA0B;AAC1B,oDAAkC;AAClC,6CAA2B;AAC3B,0CAAwB;AACxB,2CAAyB;AACzB,yFAAsF;AAA7E,kIAAA,sBAAsB,OAAA;AAE/B,2CAA8D;AAArD,4HAAA,8BAA8B,OAAA;AACvC,2DAAyD;AAAhD,+GAAA,aAAa,OAAA"}