@blac/core 2.0.11 → 2.0.12

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 (202) hide show
  1. package/dist/Cubit-9jal5zdZ.cjs +390 -0
  2. package/dist/Cubit-9jal5zdZ.cjs.map +1 -0
  3. package/dist/Cubit-BAUPiUF7.cjs +307 -0
  4. package/dist/Cubit-BAUPiUF7.cjs.map +1 -0
  5. package/dist/Cubit-BOgUZva7.js +284 -0
  6. package/dist/Cubit-BOgUZva7.js.map +1 -0
  7. package/dist/Cubit-BTznt8zg.js +370 -0
  8. package/dist/Cubit-BTznt8zg.js.map +1 -0
  9. package/dist/Cubit-CZaf_fp4.cjs +367 -292
  10. package/dist/Cubit-C_dUEUdd.cjs +307 -0
  11. package/dist/Cubit-C_dUEUdd.cjs.map +1 -0
  12. package/dist/Cubit-D2vQ6nMb.js +284 -0
  13. package/dist/Cubit-D2vQ6nMb.js.map +1 -0
  14. package/dist/Cubit-D7jOZCoZ.js +284 -0
  15. package/dist/Cubit-D7jOZCoZ.js.map +1 -0
  16. package/dist/Cubit-DP5DXPUK.js +284 -0
  17. package/dist/Cubit-DP5DXPUK.js.map +1 -0
  18. package/dist/Cubit-DbnhTUaZ.cjs +307 -0
  19. package/dist/Cubit-DbnhTUaZ.cjs.map +1 -0
  20. package/dist/Cubit-Dw_kFBgc.js +372 -0
  21. package/dist/Cubit-Dw_kFBgc.js.map +1 -0
  22. package/dist/Cubit-KiXZCubP.cjs +392 -0
  23. package/dist/Cubit-KiXZCubP.cjs.map +1 -0
  24. package/dist/Cubit-Ksj7G4uR.js +284 -0
  25. package/dist/Cubit-Ksj7G4uR.js.map +1 -0
  26. package/dist/Cubit-MkjbpcPf.cjs +307 -0
  27. package/dist/Cubit-MkjbpcPf.cjs.map +1 -0
  28. package/dist/Cubit-PMTXxI_u.js +350 -272
  29. package/dist/Cubit-kU5_4jgC.cjs +307 -0
  30. package/dist/Cubit-kU5_4jgC.cjs.map +1 -0
  31. package/dist/StateContainerRegistry-BhcnG0DF.js +602 -0
  32. package/dist/StateContainerRegistry-BhcnG0DF.js.map +1 -0
  33. package/dist/StateContainerRegistry-BsMIpllP.cjs +612 -560
  34. package/dist/StateContainerRegistry-Ck2-XmT_.js +567 -0
  35. package/dist/StateContainerRegistry-Ck2-XmT_.js.map +1 -0
  36. package/dist/StateContainerRegistry-DC4N73O6.js +609 -0
  37. package/dist/StateContainerRegistry-DC4N73O6.js.map +1 -0
  38. package/dist/StateContainerRegistry-DOkDGng-.js +586 -526
  39. package/dist/StateContainerRegistry-DOuGI-l5.js +622 -0
  40. package/dist/StateContainerRegistry-DOuGI-l5.js.map +1 -0
  41. package/dist/StateContainerRegistry-DT66lr3I.cjs +643 -0
  42. package/dist/StateContainerRegistry-DT66lr3I.cjs.map +1 -0
  43. package/dist/StateContainerRegistry-Yph6UCA_.js +610 -0
  44. package/dist/StateContainerRegistry-Yph6UCA_.js.map +1 -0
  45. package/dist/StateContainerRegistry-mseeTqSA.cjs +663 -0
  46. package/dist/StateContainerRegistry-mseeTqSA.cjs.map +1 -0
  47. package/dist/StateContainerRegistry-pRNxHNFD.cjs +650 -0
  48. package/dist/StateContainerRegistry-pRNxHNFD.cjs.map +1 -0
  49. package/dist/StateContainerRegistry-vXMWtG7J.cjs +608 -0
  50. package/dist/StateContainerRegistry-vXMWtG7J.cjs.map +1 -0
  51. package/dist/StateContainerRegistry-v_prqMcI.cjs +651 -0
  52. package/dist/StateContainerRegistry-v_prqMcI.cjs.map +1 -0
  53. package/dist/branded-BSeA_mZO.cjs +18 -0
  54. package/dist/branded-BSeA_mZO.cjs.map +1 -0
  55. package/dist/branded-DwtzSsg0.js +13 -0
  56. package/dist/branded-DwtzSsg0.js.map +1 -0
  57. package/dist/config-BKoaAlmb.js +16 -0
  58. package/dist/config-BKoaAlmb.js.map +1 -0
  59. package/dist/config-CCUhIYIF.js +16 -0
  60. package/dist/config-CCUhIYIF.js.map +1 -0
  61. package/dist/config-CR_Bz7RD.js +16 -0
  62. package/dist/config-CR_Bz7RD.js.map +1 -0
  63. package/dist/config-CTOa-yPN.cjs +32 -0
  64. package/dist/config-CTOa-yPN.cjs.map +1 -0
  65. package/dist/config-D3jisfdj.cjs +32 -0
  66. package/dist/config-D3jisfdj.cjs.map +1 -0
  67. package/dist/config-D4GifZQ4.js +16 -0
  68. package/dist/config-D4GifZQ4.js.map +1 -0
  69. package/dist/config-DDrSQGpQ.cjs +32 -0
  70. package/dist/config-DDrSQGpQ.cjs.map +1 -0
  71. package/dist/config-DLzmy2rZ.cjs +20 -20
  72. package/dist/config-DMNZ2YLV.cjs +32 -0
  73. package/dist/config-DMNZ2YLV.cjs.map +1 -0
  74. package/dist/config-DokTzpr8.cjs +32 -0
  75. package/dist/config-DokTzpr8.cjs.map +1 -0
  76. package/dist/config-DslYBm4Z.js +16 -0
  77. package/dist/config-DslYBm4Z.js.map +1 -0
  78. package/dist/config-XQua95Xz.js +5 -5
  79. package/dist/core/StateContainer.d.ts +1 -1
  80. package/dist/core/StateContainerRegistry.d.ts +29 -17
  81. package/dist/debug.cjs +4 -3
  82. package/dist/debug.d.cts +5 -6
  83. package/dist/debug.d.ts +5 -6
  84. package/dist/debug.js +4 -4
  85. package/dist/ensure-9VEq5H0L.js +9 -0
  86. package/dist/ensure-9VEq5H0L.js.map +1 -0
  87. package/dist/ensure-BNDfTzqg.cjs +14 -0
  88. package/dist/ensure-BNDfTzqg.cjs.map +1 -0
  89. package/dist/ensure-BVCnjU7r.js +289 -0
  90. package/dist/ensure-BVCnjU7r.js.map +1 -0
  91. package/dist/ensure-BbzGXjep.cjs +14 -0
  92. package/dist/ensure-BbzGXjep.cjs.map +1 -0
  93. package/dist/ensure-C5I1xp2C.js +3 -3
  94. package/dist/ensure-CJZL7bcA.cjs +318 -0
  95. package/dist/ensure-CJZL7bcA.cjs.map +1 -0
  96. package/dist/ensure-CSHYjIeH.cjs +8 -8
  97. package/dist/ensure-CU-B1ywv.js +9 -0
  98. package/dist/ensure-CU-B1ywv.js.map +1 -0
  99. package/dist/ensure-D63lEMUK.cjs +14 -0
  100. package/dist/ensure-D63lEMUK.cjs.map +1 -0
  101. package/dist/ensure-DamKOP6q.cjs +14 -0
  102. package/dist/ensure-DamKOP6q.cjs.map +1 -0
  103. package/dist/ensure-Def-EBWG.js +9 -0
  104. package/dist/ensure-Def-EBWG.js.map +1 -0
  105. package/dist/ensure-Sb92MCXu.js +9 -0
  106. package/dist/ensure-Sb92MCXu.js.map +1 -0
  107. package/dist/ensure-n80crSlX.js +9 -0
  108. package/dist/ensure-n80crSlX.js.map +1 -0
  109. package/dist/ensure-vS71MV4q.cjs +14 -0
  110. package/dist/ensure-vS71MV4q.cjs.map +1 -0
  111. package/dist/index.cjs +12 -10
  112. package/dist/index.cjs.map +1 -1
  113. package/dist/index.d.cts +1 -1
  114. package/dist/index.d.ts +1 -1
  115. package/dist/index.js +12 -11
  116. package/dist/index.js.map +1 -1
  117. package/dist/management-Bg652agq.js +32 -0
  118. package/dist/management-Bg652agq.js.map +1 -0
  119. package/dist/management-C-wBdpho.js +18 -10
  120. package/dist/management-CU_V3LIP.js +32 -0
  121. package/dist/management-CU_V3LIP.js.map +1 -0
  122. package/dist/management-CaqiyNzB.js +32 -0
  123. package/dist/management-CaqiyNzB.js.map +1 -0
  124. package/dist/management-Cin-JvYe.js +32 -0
  125. package/dist/management-Cin-JvYe.js.map +1 -0
  126. package/dist/management-ClaXym0F.cjs +79 -0
  127. package/dist/management-ClaXym0F.cjs.map +1 -0
  128. package/dist/management-Dag9u4t6.cjs +79 -0
  129. package/dist/management-Dag9u4t6.cjs.map +1 -0
  130. package/dist/management-DbMRdDBo.cjs +79 -0
  131. package/dist/management-DbMRdDBo.cjs.map +1 -0
  132. package/dist/management-ZU2YzOkr.js +29 -0
  133. package/dist/management-ZU2YzOkr.js.map +1 -0
  134. package/dist/management-baPDwA9n.cjs +79 -0
  135. package/dist/management-baPDwA9n.cjs.map +1 -0
  136. package/dist/management-jQGCvZNN.cjs +70 -0
  137. package/dist/management-jQGCvZNN.cjs.map +1 -0
  138. package/dist/management-xoZ7w3bI.cjs +44 -44
  139. package/dist/plugin/BlacPlugin.d.ts +15 -0
  140. package/dist/plugins.cjs +1 -1
  141. package/dist/plugins.js +1 -1
  142. package/dist/registry/acquire.d.ts +1 -1
  143. package/dist/registry/index.d.ts +1 -1
  144. package/dist/registry/queries.d.ts +1 -0
  145. package/dist/registry/release.d.ts +1 -1
  146. package/dist/resolve-dependencies-BA3u06uC.js +643 -561
  147. package/dist/resolve-dependencies-BFZQq60Y.cjs +774 -0
  148. package/dist/resolve-dependencies-BFZQq60Y.cjs.map +1 -0
  149. package/dist/resolve-dependencies-BGafS3Ww.js +649 -0
  150. package/dist/resolve-dependencies-BGafS3Ww.js.map +1 -0
  151. package/dist/resolve-dependencies-BHd34gS3.cjs +774 -0
  152. package/dist/resolve-dependencies-BHd34gS3.cjs.map +1 -0
  153. package/dist/resolve-dependencies-BT6TU2HF.cjs +724 -666
  154. package/dist/resolve-dependencies-BiWkW2eS.js +649 -0
  155. package/dist/resolve-dependencies-BiWkW2eS.js.map +1 -0
  156. package/dist/resolve-dependencies-CTzV1txG.js +649 -0
  157. package/dist/resolve-dependencies-CTzV1txG.js.map +1 -0
  158. package/dist/resolve-dependencies-D0vTzZgs.js +649 -0
  159. package/dist/resolve-dependencies-D0vTzZgs.js.map +1 -0
  160. package/dist/resolve-dependencies-D2WnZMF-.cjs +774 -0
  161. package/dist/resolve-dependencies-D2WnZMF-.cjs.map +1 -0
  162. package/dist/resolve-dependencies-DSQNXvnV.cjs +774 -0
  163. package/dist/resolve-dependencies-DSQNXvnV.cjs.map +1 -0
  164. package/dist/resolve-dependencies-DcUUva2P.cjs +774 -0
  165. package/dist/resolve-dependencies-DcUUva2P.cjs.map +1 -0
  166. package/dist/resolve-dependencies-f-QUqYiL.js +649 -0
  167. package/dist/resolve-dependencies-f-QUqYiL.js.map +1 -0
  168. package/dist/testing.cjs +5 -5
  169. package/dist/testing.cjs.map +1 -1
  170. package/dist/testing.js +5 -5
  171. package/dist/testing.js.map +1 -1
  172. package/dist/tracked-B77j2g9M.js +177 -0
  173. package/dist/tracked-B77j2g9M.js.map +1 -0
  174. package/dist/tracked-BDVi2LKM.cjs +206 -0
  175. package/dist/tracked-BDVi2LKM.cjs.map +1 -0
  176. package/dist/tracked-BH-gX4T1.cjs +206 -0
  177. package/dist/tracked-BH-gX4T1.cjs.map +1 -0
  178. package/dist/tracked-BTHok3Dl.cjs +206 -0
  179. package/dist/tracked-BTHok3Dl.cjs.map +1 -0
  180. package/dist/tracked-CoAlC8fs.js +177 -0
  181. package/dist/tracked-CoAlC8fs.js.map +1 -0
  182. package/dist/tracked-DBn-bs_G.js +177 -0
  183. package/dist/tracked-DBn-bs_G.js.map +1 -0
  184. package/dist/tracked-DCfBaYjL.cjs +196 -175
  185. package/dist/tracked-DKduNLgI.js +171 -151
  186. package/dist/tracked-DMBTDF0P.js +177 -0
  187. package/dist/tracked-DMBTDF0P.js.map +1 -0
  188. package/dist/tracked-Dcu6EATB.js +177 -0
  189. package/dist/tracked-Dcu6EATB.js.map +1 -0
  190. package/dist/tracked-GvAJQVAI.cjs +240 -0
  191. package/dist/tracked-GvAJQVAI.cjs.map +1 -0
  192. package/dist/tracked-WF6aXuAo.js +199 -0
  193. package/dist/tracked-WF6aXuAo.js.map +1 -0
  194. package/dist/tracked-d_sQWU3c.cjs +206 -0
  195. package/dist/tracked-d_sQWU3c.cjs.map +1 -0
  196. package/dist/tracked-n9TMK-30.cjs +206 -0
  197. package/dist/tracked-n9TMK-30.cjs.map +1 -0
  198. package/dist/tracking.cjs +1 -1
  199. package/dist/tracking.js +1 -1
  200. package/dist/watch-entry.cjs +1 -1
  201. package/dist/watch-entry.js +1 -1
  202. package/package.json +1 -1
@@ -1,290 +1,368 @@
1
- import { a as BLAC_DEFAULTS } from "./StateContainerRegistry-DOkDGng-.js";
2
- import { t as getRegistry } from "./config-XQua95Xz.js";
1
+ import { a as BLAC_DEFAULTS } from './StateContainerRegistry-DOkDGng-.js';
2
+ import { t as getRegistry } from './config-XQua95Xz.js';
3
3
  //#region src/utils/idGenerator.ts
4
4
  /**
5
- * Generate simple ID with timestamp and random (no counter tracking)
6
- *
7
- * Format: `${prefix}:${timestamp}_${random}`
8
- *
9
- * @param prefix - Prefix for the ID
10
- * @returns Branded ID string
11
- *
12
- * @example
13
- * ```ts
14
- * const id = generateSimpleId('CounterBloc');
15
- * // Returns: "CounterBloc:1698765432100_a3k9d7f2q"
16
- * ```
17
- */
5
+ * Generate simple ID with timestamp and random (no counter tracking)
6
+ *
7
+ * Format: `${prefix}:${timestamp}_${random}`
8
+ *
9
+ * @param prefix - Prefix for the ID
10
+ * @returns Branded ID string
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const id = generateSimpleId('CounterBloc');
15
+ * // Returns: "CounterBloc:1698765432100_a3k9d7f2q"
16
+ * ```
17
+ */
18
18
  function generateSimpleId(prefix, affix) {
19
- if (affix) return `${prefix}:${affix}`;
20
- return `${prefix}:${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
19
+ if (affix) return `${prefix}:${affix}`;
20
+ return `${prefix}:${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
21
21
  }
22
22
  //#endregion
23
23
  //#region src/core/symbols.ts
24
- const EMIT = Symbol("blac.emit");
25
- const UPDATE = Symbol("blac.update");
24
+ const EMIT = Symbol('blac.emit');
25
+ const UPDATE = Symbol('blac.update');
26
26
  //#endregion
27
27
  //#region src/core/StateContainer.ts
28
28
  const EMPTY_DEPS = /* @__PURE__ */ new Map();
29
29
  var StateContainer = class StateContainer {
30
- static {
31
- this.__excludeFromDevTools = false;
32
- }
33
- static {
34
- this.enableStackTrace = true;
35
- }
36
- get dependencies() {
37
- return this._dependencies ?? EMPTY_DEPS;
38
- }
39
- depend(Type, instanceKey) {
40
- if (!this._dependencies) this._dependencies = /* @__PURE__ */ new Map();
41
- this._dependencies.set(Type, instanceKey ?? BLAC_DEFAULTS.DEFAULT_INSTANCE_KEY);
42
- return () => getRegistry().ensure(Type, instanceKey);
43
- }
44
- constructor(initialState) {
45
- this._listeners = /* @__PURE__ */ new Set();
46
- this._disposed = false;
47
- this._hydrationStatus = "idle";
48
- this._changedWhileHydrating = false;
49
- this._hydrationPromise = null;
50
- this._hydrationPromiseSettled = false;
51
- this._config = {};
52
- this._systemEventHandlers = /* @__PURE__ */ new Map();
53
- this._dependencies = null;
54
- this.name = this.constructor.name;
55
- this.debug = false;
56
- this.instanceId = generateSimpleId(this.constructor.name, "main");
57
- this.createdAt = Date.now();
58
- this.lastUpdateTimestamp = Date.now();
59
- this.onSystemEvent = (event, handler) => {
60
- let handlers = this._systemEventHandlers.get(event);
61
- if (!handlers) {
62
- handlers = /* @__PURE__ */ new Set();
63
- this._systemEventHandlers.set(event, handlers);
64
- }
65
- handlers.add(handler);
66
- return () => {
67
- handlers?.delete(handler);
68
- };
69
- };
70
- this._state = initialState;
71
- }
72
- initConfig(config) {
73
- this._config = { ...config };
74
- this.name = this._config.name || this.constructor.name;
75
- this.debug = this._config.debug ?? false;
76
- this.instanceId = generateSimpleId(this.constructor.name, this._config.instanceId);
77
- getRegistry().emit("created", this);
78
- }
79
- get state() {
80
- return this._state;
81
- }
82
- get isDisposed() {
83
- return this._disposed;
84
- }
85
- get hydrationStatus() {
86
- return this._hydrationStatus;
87
- }
88
- get hydrationError() {
89
- return this._hydrationError;
90
- }
91
- get isHydrated() {
92
- return this._hydrationStatus === "hydrated";
93
- }
94
- get changedWhileHydrating() {
95
- return this._changedWhileHydrating;
96
- }
97
- subscribe(listener) {
98
- if (this._disposed) throw new Error(`Cannot subscribe to disposed container ${this.name}`);
99
- this._listeners.add(listener);
100
- return () => this._listeners.delete(listener);
101
- }
102
- dispose() {
103
- if (this._disposed) return;
104
- if (this.debug) console.log(`[${this.name}] Disposing...`);
105
- this._disposed = true;
106
- if (this._hydrationStatus === "hydrating") this.failHydration(/* @__PURE__ */ new Error(`Hydration cancelled because ${this.name} was disposed`));
107
- this.emitSystemEvent("dispose", void 0);
108
- this._listeners.clear();
109
- this._systemEventHandlers.clear();
110
- getRegistry().emit("disposed", this);
111
- if (this.debug) console.log(`[${this.name}] Disposed successfully`);
112
- }
113
- [EMIT](newState) {
114
- this.applyState(newState, "default");
115
- }
116
- [UPDATE](updater) {
117
- if (this._disposed) throw new Error(`Cannot update state from disposed container ${this.name}`);
118
- this[EMIT](updater(this._state));
119
- }
120
- beginHydration() {
121
- if (this._disposed) throw new Error(`Cannot begin hydration for disposed container ${this.name}`);
122
- this._changedWhileHydrating = false;
123
- this._hydrationError = void 0;
124
- this._hydrationPromise = null;
125
- this._resolveHydrationPromise = void 0;
126
- this._rejectHydrationPromise = void 0;
127
- this._hydrationPromiseSettled = false;
128
- this.ensureHydrationPromise();
129
- this.setHydrationStatus("hydrating");
130
- }
131
- applyHydratedState(newState) {
132
- if (this._disposed) return false;
133
- if (this._hydrationStatus !== "hydrating" || this._changedWhileHydrating) return false;
134
- this.applyState(newState, "hydration");
135
- return true;
136
- }
137
- finishHydration() {
138
- if (this._hydrationStatus !== "hydrating") {
139
- if (this._hydrationStatus === "hydrated") return;
140
- if (this._hydrationStatus === "error") this.ensureHydrationPromise();
141
- }
142
- this.setHydrationStatus("hydrated");
143
- this.resolveHydration();
144
- }
145
- failHydration(error) {
146
- const err = error instanceof Error ? error : /* @__PURE__ */ new Error(`Hydration failed: ${String(error)}`);
147
- this._hydrationError = err;
148
- this.setHydrationStatus("error", err);
149
- this.rejectHydration(err);
150
- }
151
- waitForHydration() {
152
- if (this._hydrationStatus === "idle" || this._hydrationStatus === "hydrated") return Promise.resolve();
153
- if (this._hydrationStatus === "error") return Promise.reject(this._hydrationError ?? /* @__PURE__ */ new Error(`Hydration failed for container ${this.name}`));
154
- return this.ensureHydrationPromise();
155
- }
156
- captureStackTrace() {
157
- if (!StateContainer.enableStackTrace || typeof process !== "undefined" && process.env?.NODE_ENV === "production") return "";
158
- try {
159
- const relevantLines = ((/* @__PURE__ */ new Error()).stack || "").split("\n").slice(1);
160
- const formattedLines = [];
161
- for (const line of relevantLines) {
162
- if (!line.trim()) continue;
163
- if (line.includes("StateContainer.emit") || line.includes("StateContainer.update") || line.includes("StateContainer.captureStackTrace") || line.includes("[blac.emit]") || line.includes("[blac.update]") || line.includes("Cubit.patch") || line.includes("/blac-core/dist/") || line.includes("@blac/core/")) continue;
164
- if (line.includes("node_modules") || line.includes("react-dom") || line.includes("react_jsx") || line.includes(".vite/deps") || line.includes("executeDispatch") || line.includes("runWithFiber") || line.includes("invokeGuarded") || line.includes("callCallback") || line.includes("processDispatchQueue") || line.includes("dispatchEvent") || line.includes("batchedUpdates")) continue;
165
- const formatted = this.formatStackLine(line);
166
- if (formatted) formattedLines.push(formatted);
167
- }
168
- return formattedLines.join("\n");
169
- } catch {
170
- return "";
171
- }
172
- }
173
- formatStackLine(line) {
174
- const match = line.match(/at\s+(.+?)\s+\((.+?):(\d+):(\d+)\)/);
175
- if (!match) {
176
- const simpleMatch = line.match(/at\s+(.+?):(\d+):(\d+)/);
177
- if (simpleMatch) {
178
- const [, url, lineNum, col] = simpleMatch;
179
- return ` at ${this.cleanFilePath(url)}:${lineNum}:${col}`;
180
- }
181
- return null;
182
- }
183
- const [, functionName, url, lineNum, col] = match;
184
- return ` at ${functionName} (${this.cleanFilePath(url)}:${lineNum}:${col})`;
185
- }
186
- cleanFilePath(url) {
187
- let path = url.replace(/http:\/\/localhost:\d+\/@fs/, "").replace(/http:\/\/localhost:\d+\//, "").replace(/\?t=\d+/, "").replace(/\?v=[a-f0-9]+/, "");
188
- const projectMatch = path.match(/\/Projects\/blac\/(.+)/);
189
- if (projectMatch) path = projectMatch[1];
190
- const segments = path.split("/");
191
- if (segments.length > 3) path = segments.slice(-3).join("/");
192
- return path;
193
- }
194
- applyState(newState, source) {
195
- if (this._disposed) throw new Error(`Cannot emit state from disposed container ${this.name}`);
196
- if (this._state === newState) return;
197
- if (this._hydrationStatus === "hydrating" && source !== "hydration") this._changedWhileHydrating = true;
198
- const previousState = this._state;
199
- this._state = newState;
200
- this.emitSystemEvent("stateChanged", {
201
- state: newState,
202
- previousState
203
- });
204
- const listeners = Array.from(this._listeners);
205
- for (const listener of listeners) try {
206
- listener(newState);
207
- } catch (error) {
208
- console.error(`[${this.name}] Error in listener:`, error);
209
- }
210
- const stackTrace = this.captureStackTrace();
211
- getRegistry().emit("stateChanged", this, previousState, newState, stackTrace);
212
- this.lastUpdateTimestamp = Date.now();
213
- }
214
- setHydrationStatus(status, error) {
215
- const previousStatus = this._hydrationStatus;
216
- this._hydrationStatus = status;
217
- this._hydrationError = error;
218
- this.emitSystemEvent("hydrationChanged", {
219
- status,
220
- previousStatus,
221
- error,
222
- changedWhileHydrating: this._changedWhileHydrating
223
- });
224
- }
225
- ensureHydrationPromise() {
226
- if (!this._hydrationPromise || this._hydrationPromiseSettled) {
227
- this._hydrationPromiseSettled = false;
228
- this._hydrationPromise = new Promise((resolve, reject) => {
229
- this._resolveHydrationPromise = () => {
230
- if (this._hydrationPromiseSettled) return;
231
- this._hydrationPromiseSettled = true;
232
- resolve();
233
- };
234
- this._rejectHydrationPromise = (error) => {
235
- if (this._hydrationPromiseSettled) return;
236
- this._hydrationPromiseSettled = true;
237
- reject(error);
238
- };
239
- });
240
- this._hydrationPromise.catch(() => {});
241
- }
242
- return this._hydrationPromise;
243
- }
244
- resolveHydration() {
245
- this._resolveHydrationPromise?.();
246
- }
247
- rejectHydration(error) {
248
- this.ensureHydrationPromise();
249
- this._rejectHydrationPromise?.(error);
250
- }
251
- emitSystemEvent(event, payload) {
252
- const handlers = this._systemEventHandlers.get(event);
253
- if (!handlers) return;
254
- for (const handler of handlers) try {
255
- handler(payload);
256
- } catch (error) {
257
- console.error(`[${this.name}] Error in system event handler:`, error);
258
- }
259
- }
30
+ static {
31
+ this.__excludeFromDevTools = false;
32
+ }
33
+ static {
34
+ this.enableStackTrace = true;
35
+ }
36
+ get dependencies() {
37
+ return this._dependencies ?? EMPTY_DEPS;
38
+ }
39
+ depend(Type, instanceKey) {
40
+ if (!this._dependencies) this._dependencies = /* @__PURE__ */ new Map();
41
+ this._dependencies.set(
42
+ Type,
43
+ instanceKey ?? BLAC_DEFAULTS.DEFAULT_INSTANCE_KEY,
44
+ );
45
+ return () => getRegistry().ensure(Type, instanceKey);
46
+ }
47
+ constructor(initialState) {
48
+ this._listeners = /* @__PURE__ */ new Set();
49
+ this._disposed = false;
50
+ this._hydrationStatus = 'idle';
51
+ this._changedWhileHydrating = false;
52
+ this._hydrationPromise = null;
53
+ this._hydrationPromiseSettled = false;
54
+ this._config = {};
55
+ this._systemEventHandlers = /* @__PURE__ */ new Map();
56
+ this._dependencies = null;
57
+ this.name = this.constructor.name;
58
+ this.debug = false;
59
+ this.instanceId = generateSimpleId(this.constructor.name, 'main');
60
+ this.createdAt = Date.now();
61
+ this.lastUpdateTimestamp = Date.now();
62
+ this.onSystemEvent = (event, handler) => {
63
+ let handlers = this._systemEventHandlers.get(event);
64
+ if (!handlers) {
65
+ handlers = /* @__PURE__ */ new Set();
66
+ this._systemEventHandlers.set(event, handlers);
67
+ }
68
+ handlers.add(handler);
69
+ return () => {
70
+ handlers?.delete(handler);
71
+ };
72
+ };
73
+ this._state = initialState;
74
+ }
75
+ initConfig(config) {
76
+ this._config = { ...config };
77
+ this.name = this._config.name || this.constructor.name;
78
+ this.debug = this._config.debug ?? false;
79
+ this.instanceId = generateSimpleId(
80
+ this.constructor.name,
81
+ this._config.instanceId,
82
+ );
83
+ getRegistry().emit('created', this);
84
+ }
85
+ get state() {
86
+ return this._state;
87
+ }
88
+ get isDisposed() {
89
+ return this._disposed;
90
+ }
91
+ get hydrationStatus() {
92
+ return this._hydrationStatus;
93
+ }
94
+ get hydrationError() {
95
+ return this._hydrationError;
96
+ }
97
+ get isHydrated() {
98
+ return this._hydrationStatus === 'hydrated';
99
+ }
100
+ get changedWhileHydrating() {
101
+ return this._changedWhileHydrating;
102
+ }
103
+ subscribe(listener) {
104
+ if (this._disposed)
105
+ throw new Error(`Cannot subscribe to disposed container ${this.name}`);
106
+ this._listeners.add(listener);
107
+ return () => this._listeners.delete(listener);
108
+ }
109
+ dispose() {
110
+ if (this._disposed) return;
111
+ if (this.debug) console.log(`[${this.name}] Disposing...`);
112
+ this._disposed = true;
113
+ if (this._hydrationStatus === 'hydrating')
114
+ this.failHydration(
115
+ /* @__PURE__ */ new Error(
116
+ `Hydration cancelled because ${this.name} was disposed`,
117
+ ),
118
+ );
119
+ this.emitSystemEvent('dispose', void 0);
120
+ this._listeners.clear();
121
+ this._systemEventHandlers.clear();
122
+ getRegistry().emit('disposed', this);
123
+ if (this.debug) console.log(`[${this.name}] Disposed successfully`);
124
+ }
125
+ [EMIT](newState) {
126
+ this.applyState(newState, 'default');
127
+ }
128
+ [UPDATE](updater) {
129
+ if (this._disposed)
130
+ throw new Error(
131
+ `Cannot update state from disposed container ${this.name}`,
132
+ );
133
+ this[EMIT](updater(this._state));
134
+ }
135
+ beginHydration() {
136
+ if (this._disposed)
137
+ throw new Error(
138
+ `Cannot begin hydration for disposed container ${this.name}`,
139
+ );
140
+ this._changedWhileHydrating = false;
141
+ this._hydrationError = void 0;
142
+ this._hydrationPromise = null;
143
+ this._resolveHydrationPromise = void 0;
144
+ this._rejectHydrationPromise = void 0;
145
+ this._hydrationPromiseSettled = false;
146
+ this.ensureHydrationPromise();
147
+ this.setHydrationStatus('hydrating');
148
+ }
149
+ applyHydratedState(newState) {
150
+ if (this._disposed) return false;
151
+ if (this._hydrationStatus !== 'hydrating' || this._changedWhileHydrating)
152
+ return false;
153
+ this.applyState(newState, 'hydration');
154
+ return true;
155
+ }
156
+ finishHydration() {
157
+ if (this._hydrationStatus !== 'hydrating') {
158
+ if (this._hydrationStatus === 'hydrated') return;
159
+ if (this._hydrationStatus === 'error') this.ensureHydrationPromise();
160
+ }
161
+ this.setHydrationStatus('hydrated');
162
+ this.resolveHydration();
163
+ }
164
+ failHydration(error) {
165
+ const err =
166
+ error instanceof Error
167
+ ? error
168
+ : /* @__PURE__ */ new Error(`Hydration failed: ${String(error)}`);
169
+ this._hydrationError = err;
170
+ this.setHydrationStatus('error', err);
171
+ this.rejectHydration(err);
172
+ }
173
+ waitForHydration() {
174
+ if (
175
+ this._hydrationStatus === 'idle' ||
176
+ this._hydrationStatus === 'hydrated'
177
+ )
178
+ return Promise.resolve();
179
+ if (this._hydrationStatus === 'error')
180
+ return Promise.reject(
181
+ this._hydrationError ??
182
+ /* @__PURE__ */ new Error(
183
+ `Hydration failed for container ${this.name}`,
184
+ ),
185
+ );
186
+ return this.ensureHydrationPromise();
187
+ }
188
+ captureStackTrace() {
189
+ if (
190
+ !StateContainer.enableStackTrace ||
191
+ (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production')
192
+ )
193
+ return '';
194
+ try {
195
+ const relevantLines = (/* @__PURE__ */ new Error().stack || '')
196
+ .split('\n')
197
+ .slice(1);
198
+ const formattedLines = [];
199
+ for (const line of relevantLines) {
200
+ if (!line.trim()) continue;
201
+ if (
202
+ line.includes('StateContainer.emit') ||
203
+ line.includes('StateContainer.update') ||
204
+ line.includes('StateContainer.captureStackTrace') ||
205
+ line.includes('[blac.emit]') ||
206
+ line.includes('[blac.update]') ||
207
+ line.includes('Cubit.patch') ||
208
+ line.includes('/blac-core/dist/') ||
209
+ line.includes('@blac/core/')
210
+ )
211
+ continue;
212
+ if (
213
+ line.includes('node_modules') ||
214
+ line.includes('react-dom') ||
215
+ line.includes('react_jsx') ||
216
+ line.includes('.vite/deps') ||
217
+ line.includes('executeDispatch') ||
218
+ line.includes('runWithFiber') ||
219
+ line.includes('invokeGuarded') ||
220
+ line.includes('callCallback') ||
221
+ line.includes('processDispatchQueue') ||
222
+ line.includes('dispatchEvent') ||
223
+ line.includes('batchedUpdates')
224
+ )
225
+ continue;
226
+ const formatted = this.formatStackLine(line);
227
+ if (formatted) formattedLines.push(formatted);
228
+ }
229
+ return formattedLines.join('\n');
230
+ } catch {
231
+ return '';
232
+ }
233
+ }
234
+ formatStackLine(line) {
235
+ const match = line.match(/at\s+(.+?)\s+\((.+?):(\d+):(\d+)\)/);
236
+ if (!match) {
237
+ const simpleMatch = line.match(/at\s+(.+?):(\d+):(\d+)/);
238
+ if (simpleMatch) {
239
+ const [, url, lineNum, col] = simpleMatch;
240
+ return ` at ${this.cleanFilePath(url)}:${lineNum}:${col}`;
241
+ }
242
+ return null;
243
+ }
244
+ const [, functionName, url, lineNum, col] = match;
245
+ return ` at ${functionName} (${this.cleanFilePath(url)}:${lineNum}:${col})`;
246
+ }
247
+ cleanFilePath(url) {
248
+ let path = url
249
+ .replace(/http:\/\/localhost:\d+\/@fs/, '')
250
+ .replace(/http:\/\/localhost:\d+\//, '')
251
+ .replace(/\?t=\d+/, '')
252
+ .replace(/\?v=[a-f0-9]+/, '');
253
+ const projectMatch = path.match(/\/Projects\/blac\/(.+)/);
254
+ if (projectMatch) path = projectMatch[1];
255
+ const segments = path.split('/');
256
+ if (segments.length > 3) path = segments.slice(-3).join('/');
257
+ return path;
258
+ }
259
+ applyState(newState, source) {
260
+ if (this._disposed)
261
+ throw new Error(`Cannot emit state from disposed container ${this.name}`);
262
+ if (this._state === newState) return;
263
+ if (this._hydrationStatus === 'hydrating' && source !== 'hydration')
264
+ this._changedWhileHydrating = true;
265
+ const previousState = this._state;
266
+ this._state = newState;
267
+ this.emitSystemEvent('stateChanged', {
268
+ state: newState,
269
+ previousState,
270
+ });
271
+ const listeners = Array.from(this._listeners);
272
+ for (const listener of listeners)
273
+ try {
274
+ listener(newState);
275
+ } catch (error) {
276
+ console.error(`[${this.name}] Error in listener:`, error);
277
+ }
278
+ const stackTrace = this.captureStackTrace();
279
+ getRegistry().emit(
280
+ 'stateChanged',
281
+ this,
282
+ previousState,
283
+ newState,
284
+ stackTrace,
285
+ );
286
+ this.lastUpdateTimestamp = Date.now();
287
+ }
288
+ setHydrationStatus(status, error) {
289
+ const previousStatus = this._hydrationStatus;
290
+ this._hydrationStatus = status;
291
+ this._hydrationError = error;
292
+ this.emitSystemEvent('hydrationChanged', {
293
+ status,
294
+ previousStatus,
295
+ error,
296
+ changedWhileHydrating: this._changedWhileHydrating,
297
+ });
298
+ }
299
+ ensureHydrationPromise() {
300
+ if (!this._hydrationPromise || this._hydrationPromiseSettled) {
301
+ this._hydrationPromiseSettled = false;
302
+ this._hydrationPromise = new Promise((resolve, reject) => {
303
+ this._resolveHydrationPromise = () => {
304
+ if (this._hydrationPromiseSettled) return;
305
+ this._hydrationPromiseSettled = true;
306
+ resolve();
307
+ };
308
+ this._rejectHydrationPromise = (error) => {
309
+ if (this._hydrationPromiseSettled) return;
310
+ this._hydrationPromiseSettled = true;
311
+ reject(error);
312
+ };
313
+ });
314
+ this._hydrationPromise.catch(() => {});
315
+ }
316
+ return this._hydrationPromise;
317
+ }
318
+ resolveHydration() {
319
+ this._resolveHydrationPromise?.();
320
+ }
321
+ rejectHydration(error) {
322
+ this.ensureHydrationPromise();
323
+ this._rejectHydrationPromise?.(error);
324
+ }
325
+ emitSystemEvent(event, payload) {
326
+ const handlers = this._systemEventHandlers.get(event);
327
+ if (!handlers) return;
328
+ for (const handler of handlers)
329
+ try {
330
+ handler(payload);
331
+ } catch (error) {
332
+ console.error(`[${this.name}] Error in system event handler:`, error);
333
+ }
334
+ }
260
335
  };
261
336
  //#endregion
262
337
  //#region src/core/Cubit.ts
263
338
  var Cubit = class extends StateContainer {
264
- constructor(initialState) {
265
- super(initialState);
266
- this.patch = ((partial) => {
267
- if (typeof this.state !== "object" || this.state === null) throw new Error("patch() is only available for object state types");
268
- const current = this.state;
269
- let hasChanges = false;
270
- for (const key in partial) if (!Object.is(current[key], partial[key])) {
271
- hasChanges = true;
272
- break;
273
- }
274
- if (hasChanges) this.update((c) => ({
275
- ...c,
276
- ...partial
277
- }));
278
- });
279
- }
280
- emit(newState) {
281
- this[EMIT](newState);
282
- }
283
- update(updater) {
284
- this[UPDATE](updater);
285
- }
339
+ constructor(initialState) {
340
+ super(initialState);
341
+ this.patch = (partial) => {
342
+ if (typeof this.state !== 'object' || this.state === null)
343
+ throw new Error('patch() is only available for object state types');
344
+ const current = this.state;
345
+ let hasChanges = false;
346
+ for (const key in partial)
347
+ if (!Object.is(current[key], partial[key])) {
348
+ hasChanges = true;
349
+ break;
350
+ }
351
+ if (hasChanges)
352
+ this.update((c) => ({
353
+ ...c,
354
+ ...partial,
355
+ }));
356
+ };
357
+ }
358
+ emit(newState) {
359
+ this[EMIT](newState);
360
+ }
361
+ update(updater) {
362
+ this[UPDATE](updater);
363
+ }
286
364
  };
287
365
  //#endregion
288
366
  export { UPDATE as i, StateContainer as n, EMIT as r, Cubit as t };
289
367
 
290
- //# sourceMappingURL=Cubit-PMTXxI_u.js.map
368
+ //# sourceMappingURL=Cubit-PMTXxI_u.js.map