@pristine-ts/configuration 2.0.4 → 2.0.6

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 (43) hide show
  1. package/dist/lib/cjs/configuration.module.js +1 -0
  2. package/dist/lib/cjs/configuration.module.js.map +1 -1
  3. package/dist/lib/cjs/errors/configuration-definition-already-exists.error.js +2 -6
  4. package/dist/lib/cjs/errors/configuration-definition-already-exists.error.js.map +1 -1
  5. package/dist/lib/cjs/errors/configuration-resolver.error.js +5 -9
  6. package/dist/lib/cjs/errors/configuration-resolver.error.js.map +1 -1
  7. package/dist/lib/cjs/errors/configuration-validation.error.js +1 -5
  8. package/dist/lib/cjs/errors/configuration-validation.error.js.map +1 -1
  9. package/dist/lib/cjs/loaders/loaders.js +19 -0
  10. package/dist/lib/cjs/loaders/loaders.js.map +1 -0
  11. package/dist/lib/cjs/loaders/pristine-config-file.interface.js +3 -0
  12. package/dist/lib/cjs/loaders/pristine-config-file.interface.js.map +1 -0
  13. package/dist/lib/cjs/loaders/pristine-config-file.loader.js +130 -0
  14. package/dist/lib/cjs/loaders/pristine-config-file.loader.js.map +1 -0
  15. package/dist/lib/cjs/managers/configuration.manager.js +82 -14
  16. package/dist/lib/cjs/managers/configuration.manager.js.map +1 -1
  17. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  18. package/dist/lib/esm/configuration.module.js +1 -0
  19. package/dist/lib/esm/configuration.module.js.map +1 -1
  20. package/dist/lib/esm/errors/configuration-definition-already-exists.error.js +3 -7
  21. package/dist/lib/esm/errors/configuration-definition-already-exists.error.js.map +1 -1
  22. package/dist/lib/esm/errors/configuration-resolver.error.js +6 -10
  23. package/dist/lib/esm/errors/configuration-resolver.error.js.map +1 -1
  24. package/dist/lib/esm/errors/configuration-validation.error.js +2 -6
  25. package/dist/lib/esm/errors/configuration-validation.error.js.map +1 -1
  26. package/dist/lib/esm/loaders/loaders.js +3 -0
  27. package/dist/lib/esm/loaders/loaders.js.map +1 -0
  28. package/dist/lib/esm/loaders/pristine-config-file.interface.js +2 -0
  29. package/dist/lib/esm/loaders/pristine-config-file.interface.js.map +1 -0
  30. package/dist/lib/esm/loaders/pristine-config-file.loader.js +124 -0
  31. package/dist/lib/esm/loaders/pristine-config-file.loader.js.map +1 -0
  32. package/dist/lib/esm/managers/configuration.manager.js +82 -14
  33. package/dist/lib/esm/managers/configuration.manager.js.map +1 -1
  34. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
  35. package/dist/types/configuration.module.d.ts +1 -0
  36. package/dist/types/errors/configuration-definition-already-exists.error.d.ts +2 -2
  37. package/dist/types/errors/configuration-resolver.error.d.ts +2 -2
  38. package/dist/types/errors/configuration-validation.error.d.ts +2 -2
  39. package/dist/types/loaders/loaders.d.ts +2 -0
  40. package/dist/types/loaders/pristine-config-file.interface.d.ts +15 -0
  41. package/dist/types/loaders/pristine-config-file.loader.d.ts +47 -0
  42. package/dist/types/managers/configuration.manager.d.ts +34 -8
  43. package/package.json +3 -3
@@ -2,12 +2,14 @@ import { DependencyContainer } from "tsyringe";
2
2
  import { ModuleConfigurationValue } from "../types/module-configuration.value";
3
3
  import { ConfigurationParser } from "../parsers/configuration.parser";
4
4
  import { ConfigurationDefinition } from "@pristine-ts/common";
5
+ import { PristineConfigFileLoader } from "../loaders/pristine-config-file.loader";
5
6
  export declare class ConfigurationManager {
6
7
  private readonly configurationParser;
8
+ private readonly pristineConfigFileLoader;
7
9
  configurationDefinitions: {
8
10
  [key: string]: ConfigurationDefinition;
9
11
  };
10
- constructor(configurationParser: ConfigurationParser);
12
+ constructor(configurationParser: ConfigurationParser, pristineConfigFileLoader: PristineConfigFileLoader);
11
13
  /**
12
14
  * This method registers the configuration definition that a module has defined. This method will be called for each
13
15
  * configuration definition defined in each module.
@@ -16,18 +18,35 @@ export declare class ConfigurationManager {
16
18
  */
17
19
  register(configurationDefinition: ConfigurationDefinition): void;
18
20
  /**
19
- * This method loads the configuration values passed dynamically when instantiating the Kernel. This method
20
- * will verify that a corresponding configurationDefinition exists and if it does, it will resolve the value.
21
+ * Loads configuration values into the container using the precedence chain:
21
22
  *
22
- * This method will also check to make sure that all the expected values are being passed. For example, if a module expects
23
- * a configuration value to be passed, this method will throw if none are passed.
23
+ * 1. `moduleConfigurationValues` explicit overrides passed to `kernel.start()`.
24
+ * Highest precedence; wins all conflicts.
25
+ * 2. `pristine.config.ts:config` — values from the user-authored config file.
26
+ * Beats `configDefaults` and the resolver chain.
27
+ * 3. `configDefaults` — merged from every module's `ModuleInterface.configDefaults`.
28
+ * Beats the resolver chain.
29
+ * 4. `configurationDefinition.defaultResolvers` — per-key resolver list (env vars,
30
+ * secrets manager, etc.). First successful resolver wins.
31
+ * 5. `configurationDefinition.defaultValue` — hard fallback.
24
32
  *
25
- * @param moduleConfigurationValues
26
- * @param container
33
+ * Conflicts:
34
+ * - **Same key in `moduleConfigurationValues` and the file** → stderr warning naming
35
+ * both sources (never the value, which may be a secret); the overrides win.
36
+ * - **Unknown key** in any of the explicit sources (overrides / file / configDefaults)
37
+ * → validation error; throws at end of `load`.
38
+ * - **Two modules' `configDefaults` disagree** — handled by the kernel before this
39
+ * method runs (throws at registration). The merged `configDefaults` reaching this
40
+ * method is already conflict-free.
41
+ *
42
+ * @param moduleConfigurationValues Explicit overrides from `kernel.start()`.
43
+ * @param container The DI container to register resolved values into.
44
+ * @param configDefaults Merged `ModuleInterface.configDefaults` from every module in the
45
+ * graph. Optional; defaults to empty.
27
46
  */
28
47
  load(moduleConfigurationValues: {
29
48
  [key: string]: ModuleConfigurationValue;
30
- }, container: DependencyContainer): Promise<void>;
49
+ }, container: DependencyContainer, configDefaults?: Record<string, unknown>): Promise<void>;
31
50
  /**
32
51
  * Returns the registered required parameters that are missing a value, without mutating state and without
33
52
  * invoking default resolvers (which would require a container and could throw). A parameter is reported as
@@ -49,4 +68,11 @@ export declare class ConfigurationManager {
49
68
  * @param container
50
69
  */
51
70
  registerConfigurationValue(configurationKey: string, value: boolean | number | string, container: DependencyContainer): void;
71
+ /**
72
+ * Reads the `config:` block from `pristine.config.{ts,js}` (if present). The file is
73
+ * optional — its absence is not an error, just produces an empty map. Failures to
74
+ * parse a present file are also swallowed (and reported via stderr) so misconfigured
75
+ * config files don't take down the whole boot.
76
+ */
77
+ private readFileConfigSafely;
52
78
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pristine-ts/configuration",
3
- "version": "2.0.4",
3
+ "version": "2.0.6",
4
4
  "description": "",
5
5
  "module": "dist/lib/esm/configuration.module.js",
6
6
  "main": "dist/lib/cjs/configuration.module.js",
@@ -15,7 +15,7 @@
15
15
  "dist"
16
16
  ],
17
17
  "dependencies": {
18
- "@pristine-ts/common": "^2.0.4"
18
+ "@pristine-ts/common": "^2.0.6"
19
19
  },
20
20
  "author": "",
21
21
  "license": "ISC",
@@ -56,7 +56,7 @@
56
56
  "src/*.{js,ts}"
57
57
  ]
58
58
  },
59
- "gitHead": "f376d34e13c1b17b7764c0b47708148e4e51390b",
59
+ "gitHead": "539029d624372f9bb1e22e09da7152eabb95c105",
60
60
  "repository": {
61
61
  "type": "git",
62
62
  "url": "https://github.com/magieno/pristine-ts.git",