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