gjendje 1.2.1 → 1.3.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.
@@ -4,7 +4,14 @@
4
4
  var globalConfig = {};
5
5
  var PERSISTENT_SCOPES = /* @__PURE__ */ new Set(["local", "session", "bucket"]);
6
6
  function configure(config) {
7
- globalConfig = { ...globalConfig, ...config };
7
+ for (const key of Object.keys(config)) {
8
+ const value = config[key];
9
+ if (value === void 0) {
10
+ delete globalConfig[key];
11
+ } else {
12
+ globalConfig[key] = value;
13
+ }
14
+ }
8
15
  if (globalConfig.registry === false && globalConfig.scope && PERSISTENT_SCOPES.has(globalConfig.scope)) {
9
16
  log(
10
17
  "warn",
@@ -12,6 +19,9 @@ function configure(config) {
12
19
  );
13
20
  }
14
21
  }
22
+ function resetConfig() {
23
+ globalConfig = {};
24
+ }
15
25
  function getConfig() {
16
26
  return globalConfig;
17
27
  }
@@ -24,7 +34,55 @@ function log(level, message) {
24
34
  }
25
35
  }
26
36
  function reportError(key, scope, error) {
27
- globalConfig.onError?.({ key, scope, error });
37
+ if (globalConfig.onError === void 0) return;
38
+ try {
39
+ globalConfig.onError({ key, scope, error });
40
+ } catch (err) {
41
+ console.error("[gjendje] onError callback threw:", err);
42
+ }
43
+ }
44
+
45
+ // src/listeners.ts
46
+ function safeCall(listener, value) {
47
+ try {
48
+ listener(value);
49
+ } catch (err) {
50
+ console.error("[gjendje] Listener threw:", err);
51
+ }
52
+ }
53
+ function safeCallChange(handler, next, prev) {
54
+ try {
55
+ handler(next, prev);
56
+ } catch (err) {
57
+ console.error("[gjendje] Change handler threw:", err);
58
+ }
59
+ }
60
+ function safeCallConfig(fn, arg) {
61
+ if (fn === void 0) return;
62
+ try {
63
+ fn(arg);
64
+ } catch (err) {
65
+ console.error("[gjendje] Config callback threw:", err);
66
+ }
67
+ }
68
+ function createListeners() {
69
+ const set = /* @__PURE__ */ new Set();
70
+ return {
71
+ notify(value) {
72
+ for (const listener of set) {
73
+ safeCall(listener, value);
74
+ }
75
+ },
76
+ subscribe(listener) {
77
+ set.add(listener);
78
+ return () => {
79
+ set.delete(listener);
80
+ };
81
+ },
82
+ clear() {
83
+ set.clear();
84
+ }
85
+ };
28
86
  }
29
87
 
30
88
  // src/registry.ts
@@ -46,7 +104,7 @@ function registerNew(rKey, key, scope, instance, config, existing) {
46
104
  );
47
105
  }
48
106
  registry.set(rKey, instance);
49
- config.onRegister?.({ key, scope });
107
+ safeCallConfig(config.onRegister, { key, scope });
50
108
  }
51
109
  function unregisterByKey(rKey) {
52
110
  registry.delete(rKey);
@@ -54,14 +112,29 @@ function unregisterByKey(rKey) {
54
112
  function getRegistry() {
55
113
  return registry;
56
114
  }
115
+ function destroyAll() {
116
+ const instances = [...registry.values()];
117
+ for (const instance of instances) {
118
+ if (!instance.isDestroyed) {
119
+ instance.destroy();
120
+ }
121
+ }
122
+ registry.clear();
123
+ }
57
124
 
58
125
  exports.PERSISTENT_SCOPES = PERSISTENT_SCOPES;
59
126
  exports.configure = configure;
127
+ exports.createListeners = createListeners;
128
+ exports.destroyAll = destroyAll;
60
129
  exports.getConfig = getConfig;
61
130
  exports.getRegistered = getRegistered;
62
131
  exports.getRegistry = getRegistry;
63
132
  exports.log = log;
64
133
  exports.registerNew = registerNew;
65
134
  exports.reportError = reportError;
135
+ exports.resetConfig = resetConfig;
136
+ exports.safeCall = safeCall;
137
+ exports.safeCallChange = safeCallChange;
138
+ exports.safeCallConfig = safeCallConfig;
66
139
  exports.scopedKey = scopedKey;
67
140
  exports.unregisterByKey = unregisterByKey;