@holo-js/config 0.2.6 → 0.3.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.
@@ -0,0 +1,62 @@
1
+ // src/registry.ts
2
+ var configNormalizerRuntime = globalThis;
3
+ configNormalizerRuntime.__holoConfigNormalizers__ ??= /* @__PURE__ */ new Map();
4
+ var configNormalizers = configNormalizerRuntime.__holoConfigNormalizers__;
5
+ function registerConfigNormalizer(normalizer) {
6
+ const name = normalizer.name.trim();
7
+ if (!name) {
8
+ throw new TypeError("Holo config normalizer names must be non-empty strings.");
9
+ }
10
+ const registered = Object.freeze({
11
+ ...normalizer,
12
+ name,
13
+ dependencies: Object.freeze([...new Set(normalizer.dependencies ?? [])])
14
+ });
15
+ configNormalizers.set(name, registered);
16
+ return () => {
17
+ if (configNormalizers.get(name) === registered) {
18
+ configNormalizers.delete(name);
19
+ }
20
+ };
21
+ }
22
+ function composeRegisteredConfig(rawConfig, initialValues) {
23
+ const values = { ...initialValues };
24
+ const remaining = new Map(configNormalizers);
25
+ const context = Object.freeze({
26
+ get(name) {
27
+ return values[name];
28
+ },
29
+ has(name) {
30
+ return Object.hasOwn(rawConfig, name);
31
+ },
32
+ get values() {
33
+ return Object.freeze({ ...values });
34
+ }
35
+ });
36
+ while (remaining.size > 0) {
37
+ const ready = [...remaining.values()].filter((normalizer) => normalizer.dependencies.every((dependency) => dependency in values)).sort((left, right) => left.name.localeCompare(right.name));
38
+ if (ready.length === 0) {
39
+ throw new Error(`Holo config normalizers have unresolved dependencies: ${[...remaining.keys()].sort().join(", ")}.`);
40
+ }
41
+ for (const normalizer of ready) {
42
+ values[normalizer.name] = normalizer.normalize(rawConfig[normalizer.name], context);
43
+ remaining.delete(normalizer.name);
44
+ }
45
+ }
46
+ return Object.freeze(values);
47
+ }
48
+ function resetConfigNormalizers() {
49
+ configNormalizers.clear();
50
+ }
51
+ var configRegistryInternals = {
52
+ getRegisteredNames() {
53
+ return Object.freeze([...configNormalizers.keys()].sort());
54
+ }
55
+ };
56
+
57
+ export {
58
+ registerConfigNormalizer,
59
+ composeRegisteredConfig,
60
+ resetConfigNormalizers,
61
+ configRegistryInternals
62
+ };