@blac/core 2.0.0-rc.0 → 2.0.0-rc.10

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 (146) hide show
  1. package/dist/adapter/framework-adapter.d.ts +33 -0
  2. package/dist/adapter/index.d.ts +7 -2
  3. package/dist/constants.d.ts +82 -0
  4. package/dist/core/Cubit.d.ts +40 -0
  5. package/dist/core/StateContainer.d.ts +78 -0
  6. package/dist/core/StateContainerRegistry.d.ts +119 -0
  7. package/dist/core/Vertex.d.ts +74 -0
  8. package/dist/decorators/blac.d.ts +31 -0
  9. package/dist/decorators/index.d.ts +2 -0
  10. package/dist/index.cjs +1870 -38
  11. package/dist/index.d.cts +21 -0
  12. package/dist/index.d.ts +19 -15
  13. package/dist/index.js +1789 -37
  14. package/dist/logging/Logger.d.ts +57 -0
  15. package/dist/plugin/BlacPlugin.d.ts +46 -0
  16. package/dist/plugin/PluginManager.d.ts +38 -0
  17. package/dist/registry/index.d.ts +20 -0
  18. package/dist/test-utils/index.d.ts +43 -0
  19. package/dist/tracking/dependency-tracker.d.ts +21 -0
  20. package/dist/tracking/getter-tracker.d.ts +31 -0
  21. package/dist/tracking/index.d.ts +38 -0
  22. package/dist/tracking/path-utils.d.ts +39 -0
  23. package/dist/tracking/proxy-tracker.d.ts +88 -0
  24. package/dist/types/branded.d.ts +9 -0
  25. package/dist/types/events.d.ts +13 -0
  26. package/dist/types/utilities.d.ts +19 -0
  27. package/dist/utils/equality.d.ts +9 -0
  28. package/dist/utils/idGenerator.d.ts +76 -0
  29. package/dist/utils/immutable.d.ts +16 -0
  30. package/dist/utils/stack-trace.d.ts +19 -0
  31. package/dist/utils/static-props.d.ts +29 -0
  32. package/package.json +33 -13
  33. package/dist/.tsbuildinfo +0 -1
  34. package/dist/Blac.d.ts +0 -246
  35. package/dist/Blac.d.ts.map +0 -1
  36. package/dist/Blac.js +0 -625
  37. package/dist/Blac.js.map +0 -1
  38. package/dist/Bloc.d.ts +0 -41
  39. package/dist/Bloc.d.ts.map +0 -1
  40. package/dist/Bloc.js +0 -140
  41. package/dist/Bloc.js.map +0 -1
  42. package/dist/BlocBase.d.ts +0 -110
  43. package/dist/BlocBase.d.ts.map +0 -1
  44. package/dist/BlocBase.js +0 -287
  45. package/dist/BlocBase.js.map +0 -1
  46. package/dist/Cubit.d.ts +0 -25
  47. package/dist/Cubit.d.ts.map +0 -1
  48. package/dist/Cubit.js +0 -64
  49. package/dist/Cubit.js.map +0 -1
  50. package/dist/adapter/BlacAdapter.d.ts +0 -71
  51. package/dist/adapter/BlacAdapter.d.ts.map +0 -1
  52. package/dist/adapter/BlacAdapter.js +0 -373
  53. package/dist/adapter/BlacAdapter.js.map +0 -1
  54. package/dist/adapter/ProxyFactory.d.ts +0 -50
  55. package/dist/adapter/ProxyFactory.d.ts.map +0 -1
  56. package/dist/adapter/ProxyFactory.js +0 -150
  57. package/dist/adapter/ProxyFactory.js.map +0 -1
  58. package/dist/adapter/index.d.ts.map +0 -1
  59. package/dist/adapter/index.js +0 -19
  60. package/dist/adapter/index.js.map +0 -1
  61. package/dist/errors/BlacError.d.ts +0 -38
  62. package/dist/errors/BlacError.d.ts.map +0 -1
  63. package/dist/errors/BlacError.js +0 -55
  64. package/dist/errors/BlacError.js.map +0 -1
  65. package/dist/errors/ErrorManager.d.ts +0 -39
  66. package/dist/errors/ErrorManager.d.ts.map +0 -1
  67. package/dist/errors/ErrorManager.js +0 -91
  68. package/dist/errors/ErrorManager.js.map +0 -1
  69. package/dist/errors/handleError.d.ts +0 -24
  70. package/dist/errors/handleError.d.ts.map +0 -1
  71. package/dist/errors/handleError.js +0 -62
  72. package/dist/errors/handleError.js.map +0 -1
  73. package/dist/errors/index.d.ts +0 -5
  74. package/dist/errors/index.d.ts.map +0 -1
  75. package/dist/errors/index.js +0 -13
  76. package/dist/errors/index.js.map +0 -1
  77. package/dist/events.d.ts +0 -11
  78. package/dist/events.d.ts.map +0 -1
  79. package/dist/events.js +0 -17
  80. package/dist/events.js.map +0 -1
  81. package/dist/index.d.ts.map +0 -1
  82. package/dist/index.js.map +0 -1
  83. package/dist/lifecycle/BlocLifecycle.d.ts +0 -51
  84. package/dist/lifecycle/BlocLifecycle.d.ts.map +0 -1
  85. package/dist/lifecycle/BlocLifecycle.js +0 -123
  86. package/dist/lifecycle/BlocLifecycle.js.map +0 -1
  87. package/dist/lifecycle/index.d.ts +0 -2
  88. package/dist/lifecycle/index.d.ts.map +0 -1
  89. package/dist/lifecycle/index.js +0 -18
  90. package/dist/lifecycle/index.js.map +0 -1
  91. package/dist/plugins/BlocPluginRegistry.d.ts +0 -58
  92. package/dist/plugins/BlocPluginRegistry.d.ts.map +0 -1
  93. package/dist/plugins/BlocPluginRegistry.js +0 -201
  94. package/dist/plugins/BlocPluginRegistry.js.map +0 -1
  95. package/dist/plugins/SystemPluginRegistry.d.ts +0 -79
  96. package/dist/plugins/SystemPluginRegistry.d.ts.map +0 -1
  97. package/dist/plugins/SystemPluginRegistry.js +0 -184
  98. package/dist/plugins/SystemPluginRegistry.js.map +0 -1
  99. package/dist/plugins/index.d.ts +0 -4
  100. package/dist/plugins/index.d.ts.map +0 -1
  101. package/dist/plugins/index.js +0 -26
  102. package/dist/plugins/index.js.map +0 -1
  103. package/dist/plugins/types.d.ts +0 -103
  104. package/dist/plugins/types.d.ts.map +0 -1
  105. package/dist/plugins/types.js +0 -3
  106. package/dist/plugins/types.js.map +0 -1
  107. package/dist/subscription/SubscriptionManager.d.ts +0 -67
  108. package/dist/subscription/SubscriptionManager.d.ts.map +0 -1
  109. package/dist/subscription/SubscriptionManager.js +0 -317
  110. package/dist/subscription/SubscriptionManager.js.map +0 -1
  111. package/dist/subscription/index.d.ts +0 -3
  112. package/dist/subscription/index.d.ts.map +0 -1
  113. package/dist/subscription/index.js +0 -19
  114. package/dist/subscription/index.js.map +0 -1
  115. package/dist/subscription/types.d.ts +0 -65
  116. package/dist/subscription/types.d.ts.map +0 -1
  117. package/dist/subscription/types.js +0 -3
  118. package/dist/subscription/types.js.map +0 -1
  119. package/dist/testing.d.ts +0 -85
  120. package/dist/testing.d.ts.map +0 -1
  121. package/dist/testing.js +0 -186
  122. package/dist/testing.js.map +0 -1
  123. package/dist/types.d.ts +0 -57
  124. package/dist/types.d.ts.map +0 -1
  125. package/dist/types.js +0 -3
  126. package/dist/types.js.map +0 -1
  127. package/dist/utils/BatchingManager.d.ts +0 -28
  128. package/dist/utils/BatchingManager.d.ts.map +0 -1
  129. package/dist/utils/BatchingManager.js +0 -48
  130. package/dist/utils/BatchingManager.js.map +0 -1
  131. package/dist/utils/RerenderLogger.d.ts +0 -60
  132. package/dist/utils/RerenderLogger.d.ts.map +0 -1
  133. package/dist/utils/RerenderLogger.js +0 -205
  134. package/dist/utils/RerenderLogger.js.map +0 -1
  135. package/dist/utils/generateInstanceId.d.ts +0 -11
  136. package/dist/utils/generateInstanceId.d.ts.map +0 -1
  137. package/dist/utils/generateInstanceId.js +0 -50
  138. package/dist/utils/generateInstanceId.js.map +0 -1
  139. package/dist/utils/shallowEqual.d.ts +0 -9
  140. package/dist/utils/shallowEqual.d.ts.map +0 -1
  141. package/dist/utils/shallowEqual.js +0 -35
  142. package/dist/utils/shallowEqual.js.map +0 -1
  143. package/dist/utils/uuid.d.ts +0 -10
  144. package/dist/utils/uuid.d.ts.map +0 -1
  145. package/dist/utils/uuid.js +0 -24
  146. package/dist/utils/uuid.js.map +0 -1
package/dist/Blac.js DELETED
@@ -1,625 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Blac = void 0;
4
- exports.setBlacInstanceManager = setBlacInstanceManager;
5
- const BlocLifecycle_1 = require("./lifecycle/BlocLifecycle");
6
- const SystemPluginRegistry_1 = require("./plugins/SystemPluginRegistry");
7
- const BlacError_1 = require("./errors/BlacError");
8
- const ErrorManager_1 = require("./errors/ErrorManager");
9
- /**
10
- * Default singleton implementation of BlacInstanceManager
11
- */
12
- class SingletonBlacManager {
13
- static _instance;
14
- getInstance() {
15
- if (!SingletonBlacManager._instance) {
16
- SingletonBlacManager._instance = new Blac({
17
- __unsafe_ignore_singleton: true,
18
- });
19
- }
20
- return SingletonBlacManager._instance;
21
- }
22
- setInstance(instance) {
23
- SingletonBlacManager._instance = instance;
24
- }
25
- resetInstance() {
26
- const oldInstance = SingletonBlacManager._instance;
27
- SingletonBlacManager._instance = new Blac({
28
- __unsafe_ignore_singleton: true,
29
- });
30
- // Transfer any keep-alive blocs to the new instance
31
- if (oldInstance) {
32
- for (const bloc of oldInstance.keepAliveBlocs) {
33
- SingletonBlacManager._instance.keepAliveBlocs.add(bloc);
34
- SingletonBlacManager._instance.uidRegistry.set(bloc.uid, bloc);
35
- }
36
- }
37
- }
38
- }
39
- /**
40
- * Global instance manager (can be replaced for testing or different patterns)
41
- */
42
- let instanceManager = new SingletonBlacManager();
43
- /**
44
- * Sets a custom instance manager (useful for testing or advanced patterns)
45
- */
46
- function setBlacInstanceManager(manager) {
47
- instanceManager = manager;
48
- }
49
- /**
50
- * Main Blac class that manages the state management system.
51
- * Can work with singleton pattern or dependency injection.
52
- * Handles bloc lifecycle, and instance tracking.
53
- *
54
- * Key responsibilities:
55
- * - Managing bloc instances (creation, disposal, lookup)
56
- * - Handling isolated and non-isolated blocs
57
- * - Providing logging and debugging capabilities
58
- */
59
- class Blac {
60
- static get instance() {
61
- return instanceManager.getInstance();
62
- }
63
- /** Timestamp when the instance was created */
64
- createdAt = Date.now();
65
- errorManager = ErrorManager_1.ErrorManager.getInstance();
66
- static get getAllBlocs() {
67
- return Blac.instance.getAllBlocs;
68
- }
69
- /** Private static configuration */
70
- static _config = {
71
- proxyDependencyTracking: true,
72
- };
73
- /** Get current configuration */
74
- static get config() {
75
- return { ...this._config };
76
- }
77
- /**
78
- * Set or update Blac configuration
79
- * @param config - Partial configuration to merge with existing config
80
- * @throws Error if configuration is invalid
81
- */
82
- static setConfig(config) {
83
- // Validate config
84
- if (config.proxyDependencyTracking !== undefined &&
85
- typeof config.proxyDependencyTracking !== 'boolean') {
86
- const error = new BlacError_1.BlacError('BlacConfig.proxyDependencyTracking must be a boolean', BlacError_1.ErrorCategory.VALIDATION, BlacError_1.ErrorSeverity.FATAL);
87
- this.instance.errorManager.handle(error);
88
- }
89
- // Merge with existing config
90
- this._config = {
91
- ...this._config,
92
- ...config,
93
- };
94
- // Log config update if logging is enabled
95
- if (this.enableLog) {
96
- this.instance.log('Blac config updated:', this._config);
97
- }
98
- }
99
- /** Map storing all registered bloc instances by their class name and ID */
100
- blocInstanceMap = new Map();
101
- /** Map storing isolated bloc instances grouped by their constructor */
102
- // Using BlocConstructor<BlocBase<unknown>> would break type inference when storing
103
- // different bloc types in the same map. The 'any' allows proper polymorphic storage
104
- // while maintaining type safety at usage sites through the BlocConstructor constraint.
105
- isolatedBlocMap = new Map();
106
- /** Map for O(1) lookup of isolated blocs by UID */
107
- isolatedBlocIndex = new Map();
108
- /** Map tracking UIDs to prevent memory leaks */
109
- uidRegistry = new Map();
110
- /** Set of keep-alive blocs for controlled cleanup */
111
- keepAliveBlocs = new Set();
112
- /** Flag to control whether changes should be posted to document */
113
- postChangesToDocument = false;
114
- /** System plugin registry */
115
- plugins = new SystemPluginRegistry_1.SystemPluginRegistry();
116
- /**
117
- * Creates a new Blac instance.
118
- * @param options - Configuration options including singleton control
119
- */
120
- constructor(options = {}) {
121
- const { __unsafe_ignore_singleton = false } = options;
122
- if (!__unsafe_ignore_singleton) {
123
- return Blac.instance;
124
- }
125
- instanceManager.setInstance(this);
126
- // Bootstrap plugins on creation
127
- this.plugins.bootstrap();
128
- }
129
- /** Flag to enable/disable logging */
130
- static enableLog = false;
131
- static logLevel = 'warn';
132
- static logSpy = null;
133
- /**
134
- * Logs messages to console when logging is enabled
135
- * @param args - Arguments to log
136
- */
137
- log = (...args) => {
138
- if (Blac.logSpy) {
139
- Blac.logSpy(args);
140
- }
141
- if (Blac.enableLog && Blac.logLevel === 'warn') {
142
- // Logging disabled - console.warn removed
143
- }
144
- if (Blac.enableLog && Blac.logLevel === 'log') {
145
- // Logging disabled - console.log removed
146
- }
147
- };
148
- static get log() {
149
- return Blac.instance.log;
150
- }
151
- /**
152
- * Gets the current Blac instance
153
- * @returns The Blac instance
154
- */
155
- static getInstance() {
156
- return instanceManager.getInstance();
157
- }
158
- /**
159
- * Logs a warning message
160
- * @param message - Warning message
161
- * @param args - Additional arguments
162
- */
163
- warn = (message, ...args) => {
164
- console.warn(message, ...args);
165
- };
166
- static get warn() {
167
- return Blac.instance.warn;
168
- }
169
- /**
170
- * Logs an error message
171
- * @param message - Error message
172
- * @param args - Additional arguments
173
- */
174
- error = (message, ...args) => {
175
- if (Blac.enableLog) {
176
- console.error(message, ...args);
177
- }
178
- };
179
- static get error() {
180
- return Blac.instance.error;
181
- }
182
- /**
183
- * Resets the Blac instance to a new one, disposing non-keepAlive blocs
184
- * from the old instance.
185
- */
186
- resetInstance = () => {
187
- this.log('Reset Blac instance');
188
- // Create snapshots to avoid concurrent modification issues
189
- const oldBlocInstanceMap = new Map(this.blocInstanceMap);
190
- const oldIsolatedBlocMap = new Map(this.isolatedBlocMap);
191
- // Dispose non-keepAlive blocs from the current instance
192
- // Use disposeBloc method to ensure proper cleanup
193
- oldBlocInstanceMap.forEach((bloc) => {
194
- // TODO: Type assertion for private property access (see explanation above)
195
- if (!bloc._keepAlive &&
196
- bloc._disposalState === BlocLifecycle_1.BlocLifecycleState.ACTIVE) {
197
- this.disposeBloc(bloc);
198
- }
199
- });
200
- oldIsolatedBlocMap.forEach((blocArray) => {
201
- blocArray.forEach((bloc) => {
202
- // TODO: Type assertion for private property access (see explanation above)
203
- if (!bloc._keepAlive &&
204
- bloc._disposalState === BlocLifecycle_1.BlocLifecycleState.ACTIVE) {
205
- this.disposeBloc(bloc);
206
- }
207
- });
208
- });
209
- // Clear registries (keep-alive blocs will be re-added by instance manager)
210
- this.blocInstanceMap.clear();
211
- this.isolatedBlocMap.clear();
212
- this.isolatedBlocIndex.clear();
213
- // Use instance manager to reset
214
- instanceManager.resetInstance();
215
- };
216
- static resetInstance = () => {
217
- instanceManager.resetInstance();
218
- };
219
- /**
220
- * Disposes of a bloc instance by removing it from the appropriate registry
221
- * @param bloc - The bloc instance to dispose
222
- */
223
- disposeBloc = (bloc) => {
224
- // Check if bloc is already disposed to prevent double disposal
225
- // TODO: Type assertion needed to access private _disposalState property from external class.
226
- // This is safe because we know BlocBase has this property, but TypeScript can't verify
227
- // private property access across class boundaries. Alternative would be to make
228
- // _disposalState protected, but that would expose internal implementation details.
229
- const currentState = bloc._disposalState;
230
- const validStatesForDisposal = [
231
- BlocLifecycle_1.BlocLifecycleState.ACTIVE,
232
- BlocLifecycle_1.BlocLifecycleState.DISPOSAL_REQUESTED,
233
- ];
234
- if (!validStatesForDisposal.includes(currentState)) {
235
- this.log(`[${bloc._name}:${String(bloc._id)}] disposeBloc called on bloc in invalid state: ${currentState}`);
236
- return;
237
- }
238
- const base = bloc.constructor;
239
- const key = this.createBlocInstanceMapKey(bloc._name, bloc._id);
240
- this.log(`[${bloc._name}:${String(bloc._id)}] disposeBloc called. Isolated: ${String(base.isolated)}`);
241
- // First dispose the bloc to prevent further operations
242
- bloc.dispose();
243
- // Notify plugins of bloc disposal
244
- this.plugins.notifyBlocDisposed(bloc);
245
- // Then clean up from registries
246
- if (base.isolated) {
247
- this.unregisterIsolatedBlocInstance(bloc);
248
- this.blocInstanceMap.delete(key);
249
- }
250
- else {
251
- this.unregisterBlocInstance(bloc);
252
- }
253
- this.log('dispatched bloc', bloc);
254
- };
255
- static get disposeBloc() {
256
- return Blac.instance.disposeBloc;
257
- }
258
- /**
259
- * Creates a unique key for a bloc instance in the map based on the bloc class name and instance ID
260
- * @param blocClassName - The name of the bloc class
261
- * @param id - The instance ID
262
- * @returns A unique key string in the format "className:id"
263
- */
264
- createBlocInstanceMapKey(blocClassName, id) {
265
- return `${blocClassName}:${String(id)}`;
266
- }
267
- /**
268
- * Unregister a bloc instance from the main registry
269
- * @param bloc - The bloc instance to unregister
270
- */
271
- unregisterBlocInstance(bloc) {
272
- const key = this.createBlocInstanceMapKey(bloc._name, bloc._id);
273
- this.blocInstanceMap.delete(key);
274
- // Clean up UID tracking
275
- this.uidRegistry.delete(bloc.uid);
276
- // Remove from keep-alive set
277
- this.keepAliveBlocs.delete(bloc);
278
- }
279
- /**
280
- * Registers a bloc instance in the main registry
281
- * @param bloc - The bloc instance to register
282
- */
283
- registerBlocInstance(bloc) {
284
- const key = this.createBlocInstanceMapKey(bloc._name, bloc._id);
285
- this.blocInstanceMap.set(key, bloc);
286
- // Track UID for cleanup
287
- this.uidRegistry.set(bloc.uid, bloc);
288
- // Track keep-alive blocs
289
- if (bloc._keepAlive) {
290
- this.keepAliveBlocs.add(bloc);
291
- }
292
- }
293
- /**
294
- * Finds a registered bloc instance by its class and ID
295
- * @param blocClass - The bloc class to search for
296
- * @param id - The instance ID
297
- * @returns The found bloc instance or undefined if not found
298
- */
299
- findRegisteredBlocInstance(blocClass, id) {
300
- const base = blocClass;
301
- if (base.isolated)
302
- return undefined;
303
- const key = this.createBlocInstanceMapKey(blocClass.name, id);
304
- const found = this.blocInstanceMap.get(key);
305
- // Don't return disposed blocs
306
- if (found && found.isDisposed) {
307
- return undefined;
308
- }
309
- return found;
310
- }
311
- /**
312
- * Registers an isolated bloc instance in the isolated registry
313
- * @param bloc - The isolated bloc instance to register
314
- */
315
- registerIsolatedBlocInstance(bloc) {
316
- const blocClass = bloc.constructor;
317
- const blocs = this.isolatedBlocMap.get(blocClass);
318
- if (blocs) {
319
- blocs.push(bloc);
320
- }
321
- else {
322
- this.isolatedBlocMap.set(blocClass, [bloc]);
323
- }
324
- // Add to isolated index for O(1) lookups
325
- this.isolatedBlocIndex.set(bloc.uid, bloc);
326
- // Track UID for cleanup
327
- this.uidRegistry.set(bloc.uid, bloc);
328
- // Track keep-alive blocs
329
- if (bloc._keepAlive) {
330
- this.keepAliveBlocs.add(bloc);
331
- }
332
- }
333
- /**
334
- * Unregister an isolated bloc instance from the isolated registry
335
- * @param bloc - The isolated bloc instance to unregister
336
- */
337
- unregisterIsolatedBlocInstance(bloc) {
338
- const blocClass = bloc.constructor;
339
- const blocs = this.isolatedBlocMap.get(blocClass);
340
- // Ensure both data structures are synchronized
341
- let wasRemoved = false;
342
- if (blocs) {
343
- const index = blocs.findIndex((b) => b.uid === bloc.uid);
344
- if (index !== -1) {
345
- blocs.splice(index, 1);
346
- wasRemoved = true;
347
- }
348
- if (blocs.length === 0) {
349
- this.isolatedBlocMap.delete(blocClass);
350
- }
351
- }
352
- // Always try to remove from isolated index, even if not found in map
353
- const wasInIndex = this.isolatedBlocIndex.delete(bloc.uid);
354
- // Clean up UID tracking
355
- this.uidRegistry.delete(bloc.uid);
356
- // Remove from keep-alive set
357
- this.keepAliveBlocs.delete(bloc);
358
- // Log inconsistency for debugging
359
- if (wasRemoved !== wasInIndex) {
360
- this.warn(`[Blac] Inconsistent state detected during isolated bloc cleanup for ${bloc._name}:${bloc.uid}. ` +
361
- `Map removal: ${wasRemoved}, Index removal: ${wasInIndex}`);
362
- }
363
- }
364
- /**
365
- * Finds an isolated bloc instance by its class and ID (O(n) lookup)
366
- */
367
- findIsolatedBlocInstance(blocClass, id) {
368
- const base = blocClass;
369
- if (!base.isolated)
370
- return undefined;
371
- const blocs = this.isolatedBlocMap.get(blocClass);
372
- if (!blocs) {
373
- return undefined;
374
- }
375
- // Find the specific bloc by ID within the isolated array
376
- const found = blocs.find((b) => b._id === id && !b.isDisposed);
377
- return found;
378
- }
379
- /**
380
- * Finds an isolated bloc instance by UID (O(1) lookup)
381
- */
382
- findIsolatedBlocInstanceByUid(uid) {
383
- return this.isolatedBlocIndex.get(uid);
384
- }
385
- /**
386
- * Creates a new bloc instance and registers it in the appropriate registry
387
- * @param blocClass - The bloc class to instantiate
388
- * @param id - The instance ID
389
- * @param props - Properties to pass to the bloc constructor
390
- * @param instanceRef - Optional reference string for the instance
391
- * @returns The newly created bloc instance
392
- */
393
- createNewBlocInstance(blocClass, id, options = {}) {
394
- const { constructorParams, instanceRef } = options;
395
- const newBloc = new blocClass(constructorParams);
396
- newBloc.blacInstance = this;
397
- newBloc._instanceRef = instanceRef;
398
- newBloc._id = id;
399
- // Set up disposal handler to break circular dependency
400
- newBloc.setDisposalHandler((bloc) => this.disposeBloc(bloc));
401
- if (newBloc.isIsolated) {
402
- this.registerIsolatedBlocInstance(newBloc);
403
- }
404
- else {
405
- this.registerBlocInstance(newBloc);
406
- }
407
- // Plugins are activated in constructor
408
- // Notify system plugins of bloc creation
409
- this.plugins.notifyBlocCreated(newBloc);
410
- return newBloc;
411
- }
412
- activateBloc = (bloc) => {
413
- // Don't activate disposed blocs
414
- if (bloc._disposalState !== BlocLifecycle_1.BlocLifecycleState.ACTIVE) {
415
- this.log(`[${bloc._name}:${String(bloc._id)}] activateBloc called on disposed bloc. Ignoring.`);
416
- return;
417
- }
418
- const base = bloc.constructor;
419
- const isIsolated = bloc.isIsolated;
420
- let found = isIsolated
421
- ? this.findIsolatedBlocInstance(base, bloc._id)
422
- : this.findRegisteredBlocInstance(base, bloc._id);
423
- if (found) {
424
- return;
425
- }
426
- this.log(`[${bloc._name}:${String(bloc._id)}] activateBloc called. Isolated: ${String(bloc.isIsolated)}`);
427
- if (bloc.isIsolated) {
428
- this.registerIsolatedBlocInstance(bloc);
429
- }
430
- else {
431
- this.registerBlocInstance(bloc);
432
- }
433
- };
434
- static get activateBloc() {
435
- return Blac.instance.activateBloc;
436
- }
437
- /**
438
- * Gets or creates a bloc instance based on the provided class and options.
439
- * If a bloc with the given ID exists, it will be returned. Otherwise, a new instance will be created.
440
- *
441
- * @param blocClass - The bloc class to get or create
442
- * @param options - Options including:
443
- * - id: The instance ID (defaults to class name if not provided)
444
- * - props: Properties to pass to the bloc constructor
445
- * - instanceRef: Optional reference string for the instance
446
- * @returns The bloc instance
447
- */
448
- getBloc = (blocClass, options = {}) => {
449
- const { id, forceNewInstance } = options;
450
- const base = blocClass;
451
- const blocId = id ?? blocClass.name;
452
- this.log(`[${blocClass.name}:${String(blocId)}] (getBloc) Called:`, {
453
- options,
454
- base,
455
- });
456
- // Skip instance lookup if forceNewInstance is true for isolated blocs
457
- if (!forceNewInstance) {
458
- if (base.isolated) {
459
- const isolatedBloc = this.findIsolatedBlocInstance(blocClass, options.instanceRef ?? blocId);
460
- if (isolatedBloc) {
461
- return isolatedBloc;
462
- }
463
- else {
464
- if (options.throwIfNotFound) {
465
- throw new Error(`Isolated bloc ${blocClass.name} not found`);
466
- }
467
- }
468
- }
469
- else {
470
- const registeredBloc = this.findRegisteredBlocInstance(blocClass, blocId);
471
- if (registeredBloc) {
472
- return registeredBloc;
473
- }
474
- else {
475
- if (options.throwIfNotFound) {
476
- throw new Error(`Registered bloc ${blocClass.name} not found`);
477
- }
478
- }
479
- }
480
- }
481
- const bloc = this.createNewBlocInstance(blocClass, blocId, options);
482
- this.log(`[${blocClass.name}:${String(blocId)}] (getBloc) No existing instance found. Creating new one.`, options, bloc);
483
- if (!bloc) {
484
- throw new Error(`[getBloc] Failed to create bloc instance for ${blocClass.name}. This should never happen.`);
485
- }
486
- return bloc;
487
- };
488
- static get getBloc() {
489
- return Blac.instance.getBloc;
490
- }
491
- /**
492
- * Gets all instances of a specific bloc class
493
- * @param blocClass - The bloc class to search for
494
- * @param options - Options including:
495
- * - searchIsolated: Whether to search in isolated blocs (defaults to bloc's isolated property)
496
- * @returns Array of matching bloc instances
497
- */
498
- getAllBlocs = (blocClass, options = {}) => {
499
- const results = [];
500
- // Search non-isolated blocs
501
- this.blocInstanceMap.forEach((blocInstance) => {
502
- if (blocInstance.constructor === blocClass) {
503
- // Strict constructor check
504
- results.push(blocInstance);
505
- }
506
- });
507
- // Optionally search isolated blocs
508
- if (options.searchIsolated !== false) {
509
- const isolatedBlocs = this.isolatedBlocMap.get(blocClass);
510
- if (isolatedBlocs) {
511
- results.push(...isolatedBlocs.map((bloc) => bloc));
512
- }
513
- }
514
- return results;
515
- };
516
- /**
517
- * Disposes all keep-alive blocs of a specific type
518
- * @param blocClass - The bloc class to dispose
519
- */
520
- disposeKeepAliveBlocs = (blocClass) => {
521
- const toDispose = [];
522
- for (const bloc of this.keepAliveBlocs) {
523
- if (!blocClass || bloc.constructor === blocClass) {
524
- toDispose.push(bloc);
525
- }
526
- }
527
- toDispose.forEach((bloc) => bloc.dispose());
528
- };
529
- static get disposeKeepAliveBlocs() {
530
- return Blac.instance.disposeKeepAliveBlocs;
531
- }
532
- /**
533
- * Disposes all blocs matching a pattern
534
- * @param predicate - Function to test each bloc for disposal
535
- */
536
- disposeBlocs = (predicate) => {
537
- const toDispose = [];
538
- // Check registered blocs
539
- for (const bloc of this.blocInstanceMap.values()) {
540
- if (predicate(bloc)) {
541
- toDispose.push(bloc);
542
- }
543
- }
544
- // Check isolated blocs
545
- for (const blocs of this.isolatedBlocMap.values()) {
546
- for (const bloc of blocs) {
547
- if (predicate(bloc)) {
548
- toDispose.push(bloc);
549
- }
550
- }
551
- }
552
- toDispose.forEach((bloc) => bloc.dispose());
553
- };
554
- static get disposeBlocs() {
555
- return Blac.instance.disposeBlocs;
556
- }
557
- /**
558
- * Gets memory usage statistics for debugging
559
- */
560
- getMemoryStats = () => {
561
- return {
562
- totalBlocs: this.uidRegistry.size,
563
- registeredBlocs: this.blocInstanceMap.size,
564
- isolatedBlocs: Array.from(this.isolatedBlocMap.values()).reduce((sum, arr) => sum + arr.length, 0),
565
- keepAliveBlocs: this.keepAliveBlocs.size,
566
- isolatedBlocTypes: this.isolatedBlocMap.size,
567
- };
568
- };
569
- static get getMemoryStats() {
570
- return Blac.instance.getMemoryStats;
571
- }
572
- /**
573
- * Validates subscription references and cleans up orphaned blocs
574
- */
575
- validateConsumers = () => {
576
- for (const bloc of this.uidRegistry.values()) {
577
- // Check if bloc should be disposed after validation
578
- // TODO: Type assertion for private property access (see explanation above)
579
- if (bloc.subscriptionCount === 0 &&
580
- !bloc._keepAlive &&
581
- bloc._disposalState === BlocLifecycle_1.BlocLifecycleState.ACTIVE) {
582
- // Schedule disposal for blocs with no subscriptions
583
- setTimeout(() => {
584
- // Double-check conditions before disposal
585
- // TODO: Type assertion for private property access (see explanation above)
586
- if (bloc.subscriptionCount === 0 &&
587
- !bloc._keepAlive &&
588
- bloc._disposalState === BlocLifecycle_1.BlocLifecycleState.ACTIVE) {
589
- this.disposeBloc(bloc);
590
- }
591
- }, 1000); // Give a grace period
592
- }
593
- }
594
- };
595
- static get validateConsumers() {
596
- return Blac.instance.validateConsumers;
597
- }
598
- /**
599
- * Bootstrap the Blac instance and all plugins
600
- */
601
- bootstrap() {
602
- this.plugins.bootstrap();
603
- }
604
- /**
605
- * Shutdown the Blac instance and all plugins
606
- */
607
- shutdown() {
608
- this.plugins.shutdown();
609
- // Dispose all non-keepAlive blocs
610
- for (const bloc of this.blocInstanceMap.values()) {
611
- if (!bloc._keepAlive) {
612
- this.disposeBloc(bloc);
613
- }
614
- }
615
- for (const blocs of this.isolatedBlocMap.values()) {
616
- for (const bloc of blocs) {
617
- if (!bloc._keepAlive) {
618
- this.disposeBloc(bloc);
619
- }
620
- }
621
- }
622
- }
623
- }
624
- exports.Blac = Blac;
625
- //# sourceMappingURL=Blac.js.map
package/dist/Blac.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Blac.js","sourceRoot":"","sources":["../src/Blac.ts"],"names":[],"mappings":"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"}