@zudojs/config 0.0.1

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 (140) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/configEntry/configEntry.type.d.ts +77 -0
  5. package/dist/configEntry/configEntry.type.d.ts.map +1 -0
  6. package/dist/configEntry/configEntry.type.js +149 -0
  7. package/dist/configEntry/configEntry.type.js.map +1 -0
  8. package/dist/configEntry/index.d.ts +7 -0
  9. package/dist/configEntry/index.d.ts.map +1 -0
  10. package/dist/configEntry/index.js +7 -0
  11. package/dist/configEntry/index.js.map +1 -0
  12. package/dist/configFactory/configFactory.core.d.ts +54 -0
  13. package/dist/configFactory/configFactory.core.d.ts.map +1 -0
  14. package/dist/configFactory/configFactory.core.js +69 -0
  15. package/dist/configFactory/configFactory.core.js.map +1 -0
  16. package/dist/configFactory/index.d.ts +7 -0
  17. package/dist/configFactory/index.d.ts.map +1 -0
  18. package/dist/configFactory/index.js +7 -0
  19. package/dist/configFactory/index.js.map +1 -0
  20. package/dist/configLoader/configLoader.core.d.ts +121 -0
  21. package/dist/configLoader/configLoader.core.d.ts.map +1 -0
  22. package/dist/configLoader/configLoader.core.js +292 -0
  23. package/dist/configLoader/configLoader.core.js.map +1 -0
  24. package/dist/configLoader/index.d.ts +7 -0
  25. package/dist/configLoader/index.d.ts.map +1 -0
  26. package/dist/configLoader/index.js +7 -0
  27. package/dist/configLoader/index.js.map +1 -0
  28. package/dist/configManager/configManager.core.d.ts +165 -0
  29. package/dist/configManager/configManager.core.d.ts.map +1 -0
  30. package/dist/configManager/configManager.core.js +328 -0
  31. package/dist/configManager/configManager.core.js.map +1 -0
  32. package/dist/configManager/configManager.error.d.ts +18 -0
  33. package/dist/configManager/configManager.error.d.ts.map +1 -0
  34. package/dist/configManager/configManager.error.js +24 -0
  35. package/dist/configManager/configManager.error.js.map +1 -0
  36. package/dist/configManager/configManager.factory.d.ts +11 -0
  37. package/dist/configManager/configManager.factory.d.ts.map +1 -0
  38. package/dist/configManager/configManager.factory.js +22 -0
  39. package/dist/configManager/configManager.factory.js.map +1 -0
  40. package/dist/configManager/configManager.type.d.ts +48 -0
  41. package/dist/configManager/configManager.type.d.ts.map +1 -0
  42. package/dist/configManager/configManager.type.js +13 -0
  43. package/dist/configManager/configManager.type.js.map +1 -0
  44. package/dist/configManager/index.d.ts +10 -0
  45. package/dist/configManager/index.d.ts.map +1 -0
  46. package/dist/configManager/index.js +10 -0
  47. package/dist/configManager/index.js.map +1 -0
  48. package/dist/configResolver/accessors/configResolver.accessors.d.ts +19 -0
  49. package/dist/configResolver/accessors/configResolver.accessors.d.ts.map +1 -0
  50. package/dist/configResolver/accessors/configResolver.accessors.js +237 -0
  51. package/dist/configResolver/accessors/configResolver.accessors.js.map +1 -0
  52. package/dist/configResolver/accessors/configResolver.scoped.d.ts +28 -0
  53. package/dist/configResolver/accessors/configResolver.scoped.d.ts.map +1 -0
  54. package/dist/configResolver/accessors/configResolver.scoped.js +54 -0
  55. package/dist/configResolver/accessors/configResolver.scoped.js.map +1 -0
  56. package/dist/configResolver/accessors/index.d.ts +8 -0
  57. package/dist/configResolver/accessors/index.d.ts.map +1 -0
  58. package/dist/configResolver/accessors/index.js +8 -0
  59. package/dist/configResolver/accessors/index.js.map +1 -0
  60. package/dist/configResolver/core/configResolver.core.d.ts +100 -0
  61. package/dist/configResolver/core/configResolver.core.d.ts.map +1 -0
  62. package/dist/configResolver/core/configResolver.core.js +347 -0
  63. package/dist/configResolver/core/configResolver.core.js.map +1 -0
  64. package/dist/configResolver/core/configResolver.error.d.ts +8 -0
  65. package/dist/configResolver/core/configResolver.error.d.ts.map +1 -0
  66. package/dist/configResolver/core/configResolver.error.js +8 -0
  67. package/dist/configResolver/core/configResolver.error.js.map +1 -0
  68. package/dist/configResolver/core/configResolver.factory.d.ts +8 -0
  69. package/dist/configResolver/core/configResolver.factory.d.ts.map +1 -0
  70. package/dist/configResolver/core/configResolver.factory.js +8 -0
  71. package/dist/configResolver/core/configResolver.factory.js.map +1 -0
  72. package/dist/configResolver/core/configResolver.type.d.ts +20 -0
  73. package/dist/configResolver/core/configResolver.type.d.ts.map +1 -0
  74. package/dist/configResolver/core/configResolver.type.js +2 -0
  75. package/dist/configResolver/core/configResolver.type.js.map +1 -0
  76. package/dist/configResolver/core/index.d.ts +10 -0
  77. package/dist/configResolver/core/index.d.ts.map +1 -0
  78. package/dist/configResolver/core/index.js +10 -0
  79. package/dist/configResolver/core/index.js.map +1 -0
  80. package/dist/configResolver/index.d.ts +8 -0
  81. package/dist/configResolver/index.d.ts.map +1 -0
  82. package/dist/configResolver/index.js +8 -0
  83. package/dist/configResolver/index.js.map +1 -0
  84. package/dist/configSchema/configSchema.core.d.ts +8 -0
  85. package/dist/configSchema/configSchema.core.d.ts.map +1 -0
  86. package/dist/configSchema/configSchema.core.js +8 -0
  87. package/dist/configSchema/configSchema.core.js.map +1 -0
  88. package/dist/configSchema/configSchema.rules.d.ts +18 -0
  89. package/dist/configSchema/configSchema.rules.d.ts.map +1 -0
  90. package/dist/configSchema/configSchema.rules.js +108 -0
  91. package/dist/configSchema/configSchema.rules.js.map +1 -0
  92. package/dist/configSchema/configSchema.type.d.ts +115 -0
  93. package/dist/configSchema/configSchema.type.d.ts.map +1 -0
  94. package/dist/configSchema/configSchema.type.js +24 -0
  95. package/dist/configSchema/configSchema.type.js.map +1 -0
  96. package/dist/configSchema/configSchema.validator.d.ts +37 -0
  97. package/dist/configSchema/configSchema.validator.d.ts.map +1 -0
  98. package/dist/configSchema/configSchema.validator.js +340 -0
  99. package/dist/configSchema/configSchema.validator.js.map +1 -0
  100. package/dist/configSchema/index.d.ts +8 -0
  101. package/dist/configSchema/index.d.ts.map +1 -0
  102. package/dist/configSchema/index.js +8 -0
  103. package/dist/configSchema/index.js.map +1 -0
  104. package/dist/configSource/configSource.core.d.ts +131 -0
  105. package/dist/configSource/configSource.core.d.ts.map +1 -0
  106. package/dist/configSource/configSource.core.js +195 -0
  107. package/dist/configSource/configSource.core.js.map +1 -0
  108. package/dist/configSource/index.d.ts +7 -0
  109. package/dist/configSource/index.d.ts.map +1 -0
  110. package/dist/configSource/index.js +7 -0
  111. package/dist/configSource/index.js.map +1 -0
  112. package/dist/configStore/configStore.core.d.ts +124 -0
  113. package/dist/configStore/configStore.core.d.ts.map +1 -0
  114. package/dist/configStore/configStore.core.js +306 -0
  115. package/dist/configStore/configStore.core.js.map +1 -0
  116. package/dist/configStore/configStore.factory.d.ts +13 -0
  117. package/dist/configStore/configStore.factory.d.ts.map +1 -0
  118. package/dist/configStore/configStore.factory.js +14 -0
  119. package/dist/configStore/configStore.factory.js.map +1 -0
  120. package/dist/configStore/configStore.type.d.ts +24 -0
  121. package/dist/configStore/configStore.type.d.ts.map +1 -0
  122. package/dist/configStore/configStore.type.js +2 -0
  123. package/dist/configStore/configStore.type.js.map +1 -0
  124. package/dist/configStore/index.d.ts +9 -0
  125. package/dist/configStore/index.d.ts.map +1 -0
  126. package/dist/configStore/index.js +9 -0
  127. package/dist/configStore/index.js.map +1 -0
  128. package/dist/configValue/configValue.core.d.ts +97 -0
  129. package/dist/configValue/configValue.core.d.ts.map +1 -0
  130. package/dist/configValue/configValue.core.js +293 -0
  131. package/dist/configValue/configValue.core.js.map +1 -0
  132. package/dist/configValue/index.d.ts +7 -0
  133. package/dist/configValue/index.d.ts.map +1 -0
  134. package/dist/configValue/index.js +7 -0
  135. package/dist/configValue/index.js.map +1 -0
  136. package/dist/index.d.ts +15 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +15 -0
  139. package/dist/index.js.map +1 -0
  140. package/package.json +51 -0
@@ -0,0 +1,292 @@
1
+ import { cloneConfigValue } from "../configValue/configValue.core.js";
2
+ import { createConfigEntry } from "../configEntry/configEntry.type.js";
3
+ import { loadConfigSources, sortConfigSources, } from "../configSource/configSource.core.js";
4
+ import { createConfigStore } from "../configStore/configStore.factory.js";
5
+ /**
6
+ * Configuration loader.
7
+ *
8
+ * Sources are loaded in priority order and their values are resolved
9
+ * into a single ConfigStore. Higher-priority sources win.
10
+ */
11
+ export class ConfigLoader {
12
+ sources;
13
+ context;
14
+ store;
15
+ onSourceLoaded;
16
+ onSourceError;
17
+ clearStore;
18
+ loading = false;
19
+ loaded = false;
20
+ disposed = false;
21
+ lastResult;
22
+ constructor(options = {}) {
23
+ this.sources = [...(options.sources ?? [])];
24
+ this.context = options.context ?? {};
25
+ this.store =
26
+ options.store ??
27
+ createConfigStore({
28
+ freeze: options.freeze ?? true,
29
+ });
30
+ this.onSourceLoaded = options.onSourceLoaded;
31
+ this.onSourceError = options.onSourceError;
32
+ this.clearStore = options.clearStore ?? true;
33
+ }
34
+ /**
35
+ * Returns the underlying configuration store.
36
+ */
37
+ getStore() {
38
+ this.assertActive();
39
+ return this.store;
40
+ }
41
+ /**
42
+ * Returns the configured sources.
43
+ */
44
+ getSources() {
45
+ this.assertActive();
46
+ return [...this.sources];
47
+ }
48
+ /**
49
+ * Returns whether configuration has been loaded.
50
+ */
51
+ get isLoaded() {
52
+ return this.loaded && !this.disposed;
53
+ }
54
+ /**
55
+ * Returns whether configuration is currently loading.
56
+ */
57
+ get isLoading() {
58
+ return this.loading;
59
+ }
60
+ /**
61
+ * Returns the previous load result.
62
+ */
63
+ get lastLoadResult() {
64
+ return this.lastResult;
65
+ }
66
+ /**
67
+ * Loads all configured sources.
68
+ */
69
+ async load() {
70
+ this.assertActive();
71
+ if (this.loading) {
72
+ throw new Error("Configuration is already being loaded.");
73
+ }
74
+ this.loading = true;
75
+ try {
76
+ if (this.clearStore) {
77
+ this.store.clear();
78
+ }
79
+ const sortedSources = sortConfigSources(this.sources);
80
+ const results = [];
81
+ for (const source of sortedSources) {
82
+ try {
83
+ const result = await loadSingleSource(source, this.context);
84
+ if (!result) {
85
+ continue;
86
+ }
87
+ results.push(result);
88
+ this.applySource(source, result);
89
+ if (this.onSourceLoaded) {
90
+ await this.onSourceLoaded(source, result);
91
+ }
92
+ }
93
+ catch (error) {
94
+ if (this.onSourceError) {
95
+ await this.onSourceError(source, error);
96
+ }
97
+ if (!source.optional) {
98
+ throw error;
99
+ }
100
+ }
101
+ }
102
+ const result = {
103
+ store: this.store,
104
+ entries: this.store.getEntries(),
105
+ sources: results,
106
+ loadedAt: Date.now(),
107
+ };
108
+ this.lastResult = result;
109
+ this.loaded = true;
110
+ return result;
111
+ }
112
+ finally {
113
+ this.loading = false;
114
+ }
115
+ }
116
+ /**
117
+ * Reloads configuration.
118
+ *
119
+ * The current store is replaced with freshly loaded values.
120
+ */
121
+ async reload() {
122
+ this.assertActive();
123
+ this.loaded = false;
124
+ return this.load();
125
+ }
126
+ /**
127
+ * Loads only selected sources.
128
+ */
129
+ async loadSources(sources) {
130
+ this.assertActive();
131
+ const temporaryLoader = new ConfigLoader({
132
+ sources,
133
+ context: this.context,
134
+ store: this.store,
135
+ clearStore: this.clearStore,
136
+ });
137
+ const result = await temporaryLoader.load();
138
+ temporaryLoader.detach();
139
+ return result;
140
+ }
141
+ /**
142
+ * Adds a source to the loader.
143
+ */
144
+ addSource(source) {
145
+ this.assertActive();
146
+ if (this.sources.some((existing) => existing.name === source.name)) {
147
+ throw new Error(`Configuration source "${source.name}" is already registered.`);
148
+ }
149
+ this.sources.push(source);
150
+ }
151
+ /**
152
+ * Removes a source by name.
153
+ */
154
+ removeSource(name) {
155
+ this.assertActive();
156
+ const index = this.sources.findIndex((source) => source.name === name);
157
+ if (index === -1) {
158
+ return false;
159
+ }
160
+ this.sources.splice(index, 1);
161
+ return true;
162
+ }
163
+ /**
164
+ * Finds a source by name.
165
+ */
166
+ getSource(name) {
167
+ this.assertActive();
168
+ return this.sources.find((source) => source.name === name);
169
+ }
170
+ /**
171
+ * Disposes the loader and its source resources.
172
+ */
173
+ async dispose() {
174
+ if (this.disposed) {
175
+ return;
176
+ }
177
+ this.disposed = true;
178
+ this.loaded = false;
179
+ for (const source of this.sources) {
180
+ if (!source.close) {
181
+ continue;
182
+ }
183
+ try {
184
+ await source.close();
185
+ }
186
+ catch {
187
+ // Continue closing remaining sources.
188
+ }
189
+ }
190
+ this.sources.length = 0;
191
+ this.lastResult = undefined;
192
+ }
193
+ /**
194
+ * Detaches this loader from its source lifecycle.
195
+ *
196
+ * Useful for temporary loaders sharing an existing store.
197
+ */
198
+ detach() {
199
+ this.sources.length = 0;
200
+ this.lastResult = undefined;
201
+ this.disposed = true;
202
+ }
203
+ /**
204
+ * Applies one source to the configuration store.
205
+ *
206
+ * Sources are processed from highest to lowest priority. Existing
207
+ * values are therefore retained when a lower-priority source
208
+ * attempts to replace them.
209
+ */
210
+ applySource(source, result) {
211
+ const priority = source.priority;
212
+ for (const [key, value] of Object.entries(result.values)) {
213
+ const existing = this.store.getEntry(key);
214
+ if (existing && existing.priority > priority) {
215
+ continue;
216
+ }
217
+ this.store.set(key, cloneConfigValue(value), {
218
+ source: source.name,
219
+ sourceType: source.type,
220
+ priority,
221
+ sensitive: existing?.sensitive ?? false,
222
+ resolved: true,
223
+ });
224
+ }
225
+ }
226
+ assertActive() {
227
+ if (this.disposed) {
228
+ throw new Error("ConfigLoader has been disposed.");
229
+ }
230
+ }
231
+ }
232
+ /**
233
+ * Loads one source while preserving the source lifecycle contract.
234
+ */
235
+ async function loadSingleSource(source, context) {
236
+ if (source.isAvailable) {
237
+ const available = await source.isAvailable(context);
238
+ if (!available) {
239
+ if (source.optional) {
240
+ return undefined;
241
+ }
242
+ throw new Error(`Configuration source "${source.name}" is unavailable.`);
243
+ }
244
+ }
245
+ const result = await source.load(context);
246
+ if (!result || typeof result !== "object") {
247
+ throw new Error(`Configuration source "${source.name}" returned an invalid result.`);
248
+ }
249
+ return result;
250
+ }
251
+ /**
252
+ * Creates a configuration loader.
253
+ */
254
+ export function createConfigLoader(options = {}) {
255
+ return new ConfigLoader(options);
256
+ }
257
+ /**
258
+ * Loads configuration directly from a collection of sources.
259
+ */
260
+ export async function loadConfiguration(sources, options = {}) {
261
+ const loader = createConfigLoader({
262
+ ...options,
263
+ sources,
264
+ });
265
+ try {
266
+ return await loader.load();
267
+ }
268
+ finally {
269
+ await loader.dispose();
270
+ }
271
+ }
272
+ /**
273
+ * Converts loaded source results into configuration entries.
274
+ */
275
+ export function sourceResultsToEntries(results, sources) {
276
+ const sourceMap = new Map(sources.map((source) => [source.name, source]));
277
+ const entries = [];
278
+ for (const result of results) {
279
+ const source = sourceMap.get(result.source);
280
+ for (const [key, value] of Object.entries(result.values)) {
281
+ entries.push(createConfigEntry({
282
+ key,
283
+ value,
284
+ source: result.source,
285
+ sourceType: result.type,
286
+ priority: source?.priority ?? 0,
287
+ }));
288
+ }
289
+ }
290
+ return entries;
291
+ }
292
+ //# sourceMappingURL=configLoader.core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configLoader.core.js","sourceRoot":"","sources":["../../src/configLoader/configLoader.core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/config/configLoader
3
+ *
4
+ * Configuration loading from sources and caching.
5
+ */
6
+ export * from "./configLoader.core.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configLoader/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/config/configLoader
3
+ *
4
+ * Configuration loading from sources and caching.
5
+ */
6
+ export * from "./configLoader.core.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/configLoader/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,165 @@
1
+ import type { ConfigValue } from "../configValue/configValue.core.js";
2
+ import type { ConfigSchema } from "../configSchema/configSchema.core.js";
3
+ import type { ConfigSource } from "../configSource/configSource.core.js";
4
+ import type { ConfigEntry } from "../configEntry/configEntry.type.js";
5
+ import type { ConfigLoader, ConfigLoadResult } from "../configLoader/configLoader.core.js";
6
+ import type { ConfigStore } from "../configStore/configStore.core.js";
7
+ import type { ConfigResolver } from "../configResolver/core/configResolver.core.js";
8
+ import type { ScopedConfigResolver } from "../configResolver/accessors/configResolver.scoped.js";
9
+ import type { ConfigManagerOptions, ConfigManagerStatus, ConfigManagerListener } from "./configManager.type.js";
10
+ import { ConfigManagerState } from "./configManager.type.js";
11
+ /**
12
+ * Central configuration lifecycle manager.
13
+ *
14
+ * ConfigManager coordinates the store, loader and resolver while
15
+ * keeping their responsibilities separate.
16
+ */
17
+ export declare class ConfigManager {
18
+ private readonly store;
19
+ private readonly loader;
20
+ private readonly resolver;
21
+ private readonly listeners;
22
+ private state;
23
+ private lastLoadedAt?;
24
+ private lastError?;
25
+ private disposed;
26
+ constructor(options?: ConfigManagerOptions);
27
+ /**
28
+ * Returns the current lifecycle state.
29
+ */
30
+ getState(): ConfigManagerState;
31
+ /**
32
+ * Returns whether the manager is ready.
33
+ */
34
+ get isReady(): boolean;
35
+ /**
36
+ * Returns whether configuration is currently loading.
37
+ */
38
+ get isLoading(): boolean;
39
+ /**
40
+ * Returns the configuration store.
41
+ */
42
+ getStore(): ConfigStore;
43
+ /**
44
+ * Returns the configuration loader.
45
+ */
46
+ getLoader(): ConfigLoader;
47
+ /**
48
+ * Returns the configuration resolver.
49
+ */
50
+ getResolver(): ConfigResolver;
51
+ /**
52
+ * Returns a scoped resolver.
53
+ */
54
+ scoped(prefix: string): ScopedConfigResolver;
55
+ /**
56
+ * Loads configuration.
57
+ */
58
+ load(): Promise<ConfigLoadResult>;
59
+ /**
60
+ * Reloads configuration.
61
+ */
62
+ reload(): Promise<ConfigLoadResult>;
63
+ /**
64
+ * Loads a schema and validates the complete configuration.
65
+ */
66
+ validate<T extends ConfigValue>(schema: {
67
+ readonly properties: Readonly<Record<string, ConfigSchema>>;
68
+ readonly additionalProperties?: boolean | ConfigSchema;
69
+ }): T;
70
+ /**
71
+ * Gets a raw configuration value.
72
+ */
73
+ get<T extends ConfigValue = ConfigValue>(key: string): T | undefined;
74
+ /**
75
+ * Gets a required configuration value.
76
+ */
77
+ required<T extends ConfigValue = ConfigValue>(key: string): T;
78
+ /**
79
+ * Gets a configuration value with schema validation.
80
+ */
81
+ resolve<T extends ConfigValue>(key: string, schema: ConfigSchema<T>): T | undefined;
82
+ /**
83
+ * Gets a string value.
84
+ */
85
+ string(key: string, fallback?: string): string | undefined;
86
+ /**
87
+ * Gets a number value.
88
+ */
89
+ number(key: string, fallback?: number): number | undefined;
90
+ /**
91
+ * Gets a boolean value.
92
+ */
93
+ boolean(key: string, fallback?: boolean): boolean | undefined;
94
+ /**
95
+ * Gets a bigint value.
96
+ */
97
+ bigint(key: string, fallback?: bigint): bigint | undefined;
98
+ /**
99
+ * Gets a Date value.
100
+ */
101
+ date(key: string, fallback?: Date): Date | undefined;
102
+ /**
103
+ * Gets an object value.
104
+ */
105
+ object<T extends ConfigValue = ConfigValue>(key: string, fallback?: T): T | undefined;
106
+ /**
107
+ * Gets an array value.
108
+ */
109
+ array<T extends ConfigValue = ConfigValue>(key: string, fallback?: readonly T[]): readonly T[] | undefined;
110
+ /**
111
+ * Sets a runtime configuration value.
112
+ */
113
+ set<T extends ConfigValue>(key: string, value: T, options?: {
114
+ readonly source?: string;
115
+ readonly priority?: number;
116
+ readonly sensitive?: boolean;
117
+ }): ConfigEntry<T>;
118
+ /**
119
+ * Removes a configuration value.
120
+ */
121
+ delete(key: string): boolean;
122
+ /**
123
+ * Returns the complete configuration object.
124
+ */
125
+ toObject(): Readonly<Record<string, ConfigValue>>;
126
+ /**
127
+ * Returns a manager status snapshot.
128
+ */
129
+ getStatus(): ConfigManagerStatus;
130
+ /**
131
+ * Subscribes to lifecycle state changes.
132
+ */
133
+ subscribe(listener: ConfigManagerListener): () => void;
134
+ /**
135
+ * Adds a configuration source.
136
+ */
137
+ addSource(source: ConfigSource): void;
138
+ /**
139
+ * Creates and adds a custom source.
140
+ */
141
+ addSourceLoader(name: string, loader: (context: {
142
+ readonly environment?: string;
143
+ readonly namespace?: string;
144
+ readonly signal?: AbortSignal;
145
+ }) => {
146
+ readonly values: Readonly<Record<string, ConfigValue>>;
147
+ readonly source: string;
148
+ readonly type: import("../configSource/configSource.core.js").ConfigSourceType;
149
+ } | Promise<{
150
+ readonly values: Readonly<Record<string, ConfigValue>>;
151
+ readonly source: string;
152
+ readonly type: import("../configSource/configSource.core.js").ConfigSourceType;
153
+ }>): ConfigSource;
154
+ /**
155
+ * Removes a source.
156
+ */
157
+ removeSource(name: string): boolean;
158
+ /**
159
+ * Marks the manager as disposed.
160
+ */
161
+ dispose(): Promise<void>;
162
+ private setState;
163
+ private assertActive;
164
+ }
165
+ //# sourceMappingURL=configManager.core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configManager.core.d.ts","sourceRoot":"","sources":["../../src/configManager/configManager.core.ts"],"names":[],"mappings":"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"}