@blac/core 2.0.0-rc.1 → 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 +31 -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 -624
  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 -67
  51. package/dist/adapter/BlacAdapter.d.ts.map +0 -1
  52. package/dist/adapter/BlacAdapter.js +0 -263
  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 -33
  120. package/dist/testing.d.ts.map +0 -1
  121. package/dist/testing.js +0 -68
  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
@@ -1,103 +0,0 @@
1
- import { BlocBase } from '../BlocBase';
2
- import { Bloc } from '../Bloc';
3
- /**
4
- * Error context provided to error handlers
5
- */
6
- export interface ErrorContext {
7
- readonly phase: 'initialization' | 'state-change' | 'event-processing' | 'disposal';
8
- readonly operation: string;
9
- readonly metadata?: Record<string, unknown>;
10
- }
11
- /**
12
- * Plugin capabilities for security model
13
- */
14
- export interface PluginCapabilities {
15
- readonly readState: boolean;
16
- readonly transformState: boolean;
17
- readonly interceptEvents: boolean;
18
- readonly persistData: boolean;
19
- readonly accessMetadata: boolean;
20
- }
21
- /**
22
- * Base interface for all plugins
23
- */
24
- export interface Plugin {
25
- readonly name: string;
26
- readonly version: string;
27
- readonly capabilities?: PluginCapabilities;
28
- }
29
- /**
30
- * Adapter metadata provided to plugins
31
- */
32
- export interface AdapterMetadata {
33
- componentName?: string;
34
- blocInstance: BlocBase<any>;
35
- renderCount: number;
36
- trackedPaths?: string[];
37
- isUsingDependencies?: boolean;
38
- lastState?: any;
39
- lastDependencyValues?: any[];
40
- currentDependencyValues?: any[];
41
- }
42
- /**
43
- * System-wide plugin that observes all blocs
44
- */
45
- export interface BlacPlugin extends Plugin {
46
- beforeBootstrap?(): void;
47
- afterBootstrap?(): void;
48
- beforeShutdown?(): void;
49
- afterShutdown?(): void;
50
- onBlocCreated?(bloc: BlocBase<any>): void;
51
- onBlocDisposed?(bloc: BlocBase<any>): void;
52
- onStateChanged?(bloc: BlocBase<any>, previousState: any, currentState: any): void;
53
- onEventAdded?(bloc: Bloc<any, any>, event: any): void;
54
- onError?(error: Error, bloc: BlocBase<unknown>, context: ErrorContext): void;
55
- onAdapterCreated?(adapter: any, metadata: AdapterMetadata): void;
56
- onAdapterMount?(adapter: any, metadata: AdapterMetadata): void;
57
- onAdapterUnmount?(adapter: any, metadata: AdapterMetadata): void;
58
- onAdapterRender?(adapter: any, metadata: AdapterMetadata): void;
59
- onAdapterDisposed?(adapter: any, metadata: AdapterMetadata): void;
60
- }
61
- /**
62
- * Bloc-specific plugin that can transform behavior
63
- */
64
- export interface BlocPlugin<TState = any, TEvent = never> extends Plugin {
65
- transformState?(previousState: TState, nextState: TState): TState;
66
- transformEvent?(event: TEvent): TEvent | null;
67
- onAttach?(bloc: BlocBase<TState>): void;
68
- onDetach?(): void;
69
- onStateChange?(previousState: TState, currentState: TState): void;
70
- onEvent?(event: TEvent): void;
71
- onError?(error: Error, context: ErrorContext): void;
72
- }
73
- /**
74
- * Plugin execution context for performance monitoring
75
- */
76
- export interface PluginExecutionContext {
77
- readonly pluginName: string;
78
- readonly hookName: string;
79
- readonly startTime: number;
80
- readonly blocName?: string;
81
- readonly blocId?: string;
82
- }
83
- /**
84
- * Plugin metrics for monitoring
85
- */
86
- export interface PluginMetrics {
87
- readonly executionTime: number;
88
- readonly executionCount: number;
89
- readonly errorCount: number;
90
- readonly lastError?: Error;
91
- readonly lastExecutionTime?: number;
92
- }
93
- /**
94
- * Plugin registry interface
95
- */
96
- export interface PluginRegistry<T extends Plugin> {
97
- add(plugin: T): void;
98
- remove(pluginName: string): boolean;
99
- get(pluginName: string): T | undefined;
100
- getAll(): ReadonlyArray<T>;
101
- clear(): void;
102
- }
103
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":""}
@@ -1,67 +0,0 @@
1
- import { BlocBase } from '../BlocBase';
2
- import { Subscription, SubscriptionOptions, SubscriptionManagerStats } from './types';
3
- /**
4
- * Unified subscription manager that replaces the dual consumer/observer system.
5
- * Handles all state change subscriptions with a single, consistent interface.
6
- */
7
- export declare class SubscriptionManager<S = unknown> {
8
- private bloc;
9
- private subscriptions;
10
- private pathToSubscriptions;
11
- private weakRefCleanupScheduled;
12
- private totalNotifications;
13
- constructor(bloc: BlocBase<S>);
14
- /**
15
- * Subscribe to state changes
16
- */
17
- subscribe(options: SubscriptionOptions<S>): () => void;
18
- /**
19
- * Unsubscribe by ID
20
- */
21
- unsubscribe(id: string): void;
22
- /**
23
- * Notify all subscriptions of state change
24
- */
25
- notify(newState: S, oldState: S, action?: unknown): void;
26
- /**
27
- * Track a path access for a subscription
28
- */
29
- trackAccess(subscriptionId: string, path: string, _value?: unknown): void;
30
- /**
31
- * Get the paths that changed between two states
32
- */
33
- private getChangedPaths;
34
- /**
35
- * Check if a subscription should be notified based on changed paths
36
- */
37
- shouldNotifyForPaths(subscriptionId: string, changedPaths: Set<string>): boolean;
38
- /**
39
- * Get statistics about subscriptions
40
- */
41
- getStats(): SubscriptionManagerStats;
42
- /**
43
- * Clear all subscriptions
44
- */
45
- clear(): void;
46
- /**
47
- * Get subscription by ID
48
- */
49
- getSubscription(id: string): Subscription<S> | undefined;
50
- /**
51
- * Check if there are any active subscriptions
52
- */
53
- get hasSubscriptions(): boolean;
54
- /**
55
- * Get count of active subscriptions
56
- */
57
- get size(): number;
58
- /**
59
- * Clean up subscriptions with dead weak references
60
- */
61
- private cleanupDeadReferences;
62
- /**
63
- * Schedule weak reference cleanup for next tick
64
- */
65
- private scheduleWeakRefCleanup;
66
- }
67
- //# sourceMappingURL=SubscriptionManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SubscriptionManager.d.ts","sourceRoot":"","sources":["../../src/subscription/SubscriptionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAM9B,OAAO,CAAC,IAAI;IALxB,OAAO,CAAC,aAAa,CAAsC;IAC3D,OAAO,CAAC,mBAAmB,CAAkC;IAC7D,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,kBAAkB,CAAK;gBAEX,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IA6CtD;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IA2B7B;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAsFxD;;OAEG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IA0BzE;;OAEG;IACH,OAAO,CAAC,eAAe;IAsDvB;;OAEG;IACH,oBAAoB,CAClB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,OAAO;IAkCV;;OAEG;IACH,QAAQ,IAAI,wBAAwB;IAkBpC;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS;IAIxD;;OAEG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAM/B"}
@@ -1,317 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SubscriptionManager = void 0;
4
- const Blac_1 = require("../Blac");
5
- const uuid_1 = require("../utils/uuid");
6
- /**
7
- * Unified subscription manager that replaces the dual consumer/observer system.
8
- * Handles all state change subscriptions with a single, consistent interface.
9
- */
10
- class SubscriptionManager {
11
- bloc;
12
- subscriptions = new Map();
13
- pathToSubscriptions = new Map();
14
- weakRefCleanupScheduled = false;
15
- totalNotifications = 0;
16
- constructor(bloc) {
17
- this.bloc = bloc;
18
- }
19
- /**
20
- * Subscribe to state changes
21
- */
22
- subscribe(options) {
23
- const id = `${options.type}-${(0, uuid_1.generateUUID)()}`;
24
- const subscription = {
25
- id,
26
- type: options.type,
27
- selector: options.selector,
28
- equalityFn: options.equalityFn || Object.is,
29
- notify: options.notify,
30
- priority: options.priority ?? 0,
31
- weakRef: options.weakRef,
32
- dependencies: new Set(),
33
- metadata: {
34
- lastNotified: Date.now(),
35
- hasRendered: false,
36
- accessCount: 0,
37
- firstAccessTime: Date.now(),
38
- },
39
- };
40
- // Initialize selector value if provided
41
- if (subscription.selector) {
42
- try {
43
- subscription.lastValue = subscription.selector(this.bloc.state, this.bloc);
44
- }
45
- catch (error) {
46
- Blac_1.Blac.error(`SubscriptionManager: Error in selector for ${id}:`, error);
47
- }
48
- }
49
- this.subscriptions.set(id, subscription);
50
- Blac_1.Blac.log(`[${this.bloc._name}:${this.bloc._id}] Subscription added: ${id}. Total: ${this.subscriptions.size}`);
51
- // Cancel disposal if bloc is in disposal_requested state
52
- this.bloc._cancelDisposalIfRequested();
53
- // Return unsubscribe function
54
- return () => this.unsubscribe(id);
55
- }
56
- /**
57
- * Unsubscribe by ID
58
- */
59
- unsubscribe(id) {
60
- const subscription = this.subscriptions.get(id);
61
- if (!subscription)
62
- return;
63
- // Remove from path dependencies
64
- if (subscription.dependencies) {
65
- for (const path of subscription.dependencies) {
66
- const subs = this.pathToSubscriptions.get(path);
67
- if (subs) {
68
- subs.delete(id);
69
- if (subs.size === 0) {
70
- this.pathToSubscriptions.delete(path);
71
- }
72
- }
73
- }
74
- }
75
- this.subscriptions.delete(id);
76
- Blac_1.Blac.log(`[${this.bloc._name}:${this.bloc._id}] Subscription removed: ${id}. Remaining: ${this.subscriptions.size}`);
77
- // Check if bloc should be disposed
78
- this.bloc.checkDisposal();
79
- }
80
- /**
81
- * Notify all subscriptions of state change
82
- */
83
- notify(newState, oldState, action) {
84
- // Clean up dead weak references if needed
85
- this.cleanupDeadReferences();
86
- // Sort subscriptions by priority (descending)
87
- const sortedSubscriptions = Array.from(this.subscriptions.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
88
- for (const subscription of sortedSubscriptions) {
89
- // Check if WeakRef is still alive
90
- if (subscription.weakRef && !subscription.weakRef.deref()) {
91
- this.scheduleWeakRefCleanup();
92
- continue;
93
- }
94
- let shouldNotify = false;
95
- let newValue;
96
- let oldValue;
97
- if (subscription.selector) {
98
- // Use selector to determine if notification is needed
99
- try {
100
- newValue = subscription.selector(newState, this.bloc);
101
- oldValue = subscription.lastValue;
102
- const equalityFn = subscription.equalityFn || Object.is;
103
- shouldNotify = !equalityFn(oldValue, newValue);
104
- if (shouldNotify) {
105
- subscription.lastValue = newValue;
106
- }
107
- }
108
- catch (error) {
109
- Blac_1.Blac.error(`SubscriptionManager: Error in selector for ${subscription.id}:`, error);
110
- continue;
111
- }
112
- }
113
- else {
114
- // No selector - check if tracked dependencies changed
115
- if (subscription.dependencies && subscription.dependencies.size > 0) {
116
- // Check which paths changed between old and new state
117
- const changedPaths = this.getChangedPaths(oldState, newState);
118
- shouldNotify = this.shouldNotifyForPaths(subscription.id, changedPaths);
119
- if (Blac_1.Blac.config.logLevel === 'debug') {
120
- Blac_1.Blac.log(`[SubscriptionManager] Subscription ${subscription.id} dependencies:`, Array.from(subscription.dependencies));
121
- Blac_1.Blac.log(`[SubscriptionManager] Changed paths:`, Array.from(changedPaths));
122
- Blac_1.Blac.log(`[SubscriptionManager] Should notify:`, shouldNotify);
123
- }
124
- }
125
- else {
126
- // No tracked dependencies, always notify
127
- shouldNotify = true;
128
- }
129
- newValue = newState;
130
- oldValue = oldState;
131
- }
132
- if (shouldNotify) {
133
- try {
134
- subscription.notify(newValue, oldValue, action);
135
- this.totalNotifications++;
136
- if (subscription.metadata) {
137
- subscription.metadata.lastNotified = Date.now();
138
- subscription.metadata.hasRendered = true;
139
- }
140
- }
141
- catch (error) {
142
- Blac_1.Blac.error(`SubscriptionManager: Error in notify for ${subscription.id}:`, error);
143
- }
144
- }
145
- }
146
- }
147
- /**
148
- * Track a path access for a subscription
149
- */
150
- trackAccess(subscriptionId, path, _value) {
151
- const subscription = this.subscriptions.get(subscriptionId);
152
- if (!subscription)
153
- return;
154
- // Update dependencies
155
- if (!subscription.dependencies) {
156
- subscription.dependencies = new Set();
157
- }
158
- subscription.dependencies.add(path);
159
- // Update path-to-subscription mapping
160
- let subs = this.pathToSubscriptions.get(path);
161
- if (!subs) {
162
- subs = new Set();
163
- this.pathToSubscriptions.set(path, subs);
164
- }
165
- subs.add(subscriptionId);
166
- // Update metadata
167
- if (subscription.metadata) {
168
- subscription.metadata.accessCount =
169
- (subscription.metadata.accessCount || 0) + 1;
170
- subscription.metadata.lastAccessTime = Date.now();
171
- }
172
- }
173
- /**
174
- * Get the paths that changed between two states
175
- */
176
- getChangedPaths(oldState, newState, path = '') {
177
- const changedPaths = new Set();
178
- if (oldState === newState)
179
- return changedPaths;
180
- // Handle primitives
181
- if (typeof oldState !== 'object' ||
182
- typeof newState !== 'object' ||
183
- oldState === null ||
184
- newState === null) {
185
- if (path)
186
- changedPaths.add(path);
187
- return changedPaths;
188
- }
189
- // Get all keys from both objects
190
- const allKeys = new Set([
191
- ...Object.keys(oldState),
192
- ...Object.keys(newState),
193
- ]);
194
- for (const key of allKeys) {
195
- const fullPath = path ? `${path}.${key}` : key;
196
- const oldValue = oldState[key];
197
- const newValue = newState[key];
198
- if (oldValue !== newValue) {
199
- changedPaths.add(fullPath);
200
- // For nested objects, get all nested changed paths
201
- if (typeof oldValue === 'object' &&
202
- typeof newValue === 'object' &&
203
- oldValue !== null &&
204
- newValue !== null) {
205
- const nestedChanges = this.getChangedPaths(oldValue, newValue, fullPath);
206
- nestedChanges.forEach((p) => changedPaths.add(p));
207
- }
208
- }
209
- }
210
- return changedPaths;
211
- }
212
- /**
213
- * Check if a subscription should be notified based on changed paths
214
- */
215
- shouldNotifyForPaths(subscriptionId, changedPaths) {
216
- const subscription = this.subscriptions.get(subscriptionId);
217
- if (!subscription || !subscription.dependencies)
218
- return true;
219
- // Check if any tracked dependencies match changed paths
220
- for (const trackedPath of subscription.dependencies) {
221
- // Handle class getter dependencies (_class.propertyName)
222
- if (trackedPath.startsWith('_class.')) {
223
- // For class getters, we need to notify on any state change
224
- // since we can't determine which state properties the getter depends on
225
- // This is conservative but ensures correctness
226
- if (changedPaths.size > 0) {
227
- return true;
228
- }
229
- continue;
230
- }
231
- // Check direct path matches
232
- if (changedPaths.has(trackedPath))
233
- return true;
234
- // Check nested paths
235
- for (const changedPath of changedPaths) {
236
- if (changedPath.startsWith(trackedPath + '.') ||
237
- trackedPath.startsWith(changedPath + '.')) {
238
- return true;
239
- }
240
- }
241
- }
242
- return false;
243
- }
244
- /**
245
- * Get statistics about subscriptions
246
- */
247
- getStats() {
248
- let consumerCount = 0;
249
- let observerCount = 0;
250
- for (const sub of this.subscriptions.values()) {
251
- if (sub.type === 'consumer')
252
- consumerCount++;
253
- else
254
- observerCount++;
255
- }
256
- return {
257
- activeSubscriptions: this.subscriptions.size,
258
- consumerCount,
259
- observerCount,
260
- totalNotifications: this.totalNotifications,
261
- trackedDependencies: this.pathToSubscriptions.size,
262
- };
263
- }
264
- /**
265
- * Clear all subscriptions
266
- */
267
- clear() {
268
- this.subscriptions.clear();
269
- this.pathToSubscriptions.clear();
270
- }
271
- /**
272
- * Get subscription by ID
273
- */
274
- getSubscription(id) {
275
- return this.subscriptions.get(id);
276
- }
277
- /**
278
- * Check if there are any active subscriptions
279
- */
280
- get hasSubscriptions() {
281
- return this.subscriptions.size > 0;
282
- }
283
- /**
284
- * Get count of active subscriptions
285
- */
286
- get size() {
287
- return this.subscriptions.size;
288
- }
289
- /**
290
- * Clean up subscriptions with dead weak references
291
- */
292
- cleanupDeadReferences() {
293
- if (!this.weakRefCleanupScheduled)
294
- return;
295
- const deadIds = [];
296
- for (const [id, subscription] of this.subscriptions) {
297
- if (subscription.weakRef && !subscription.weakRef.deref()) {
298
- deadIds.push(id);
299
- }
300
- }
301
- for (const id of deadIds) {
302
- this.unsubscribe(id);
303
- }
304
- this.weakRefCleanupScheduled = false;
305
- }
306
- /**
307
- * Schedule weak reference cleanup for next tick
308
- */
309
- scheduleWeakRefCleanup() {
310
- if (this.weakRefCleanupScheduled)
311
- return;
312
- this.weakRefCleanupScheduled = true;
313
- queueMicrotask(() => this.cleanupDeadReferences());
314
- }
315
- }
316
- exports.SubscriptionManager = SubscriptionManager;
317
- //# sourceMappingURL=SubscriptionManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SubscriptionManager.js","sourceRoot":"","sources":["../../src/subscription/SubscriptionManager.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export * from './types';
2
- export * from './SubscriptionManager';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/subscription/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC"}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./types"), exports);
18
- __exportStar(require("./SubscriptionManager"), exports);
19
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subscription/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,wDAAsC"}
@@ -1,65 +0,0 @@
1
- import { BlocBase } from '../BlocBase';
2
- /**
3
- * Unified subscription interface that replaces the dual consumer/observer system
4
- */
5
- export interface Subscription<S = unknown> {
6
- /** Unique identifier for the subscription */
7
- id: string;
8
- /** Type of subscription for backward compatibility */
9
- type: 'consumer' | 'observer';
10
- /** Optional selector function to derive values from state */
11
- selector?: (state: S, bloc?: BlocBase<S>) => unknown;
12
- /** Custom equality function for selector results (defaults to Object.is) */
13
- equalityFn?: (prev: unknown, next: unknown) => boolean;
14
- /** Notification callback when state changes */
15
- notify: (value: unknown, oldValue?: unknown, action?: unknown) => void;
16
- /** Priority for notification order (higher = earlier) */
17
- priority?: number;
18
- /** WeakRef to the subscriber for automatic cleanup (React components) */
19
- weakRef?: WeakRef<object>;
20
- /** Last computed selector value for comparison */
21
- lastValue?: unknown;
22
- /** Tracked state path dependencies */
23
- dependencies?: Set<string>;
24
- /** Metadata for tracking and debugging */
25
- metadata?: SubscriptionMetadata;
26
- }
27
- export interface SubscriptionMetadata {
28
- /** Timestamp of last notification */
29
- lastNotified?: number;
30
- /** Whether the subscriber has rendered (React-specific) */
31
- hasRendered?: boolean;
32
- /** Number of times this subscription accessed state */
33
- accessCount?: number;
34
- /** First access timestamp */
35
- firstAccessTime?: number;
36
- /** Last access timestamp */
37
- lastAccessTime?: number;
38
- }
39
- export interface SubscriptionOptions<S> {
40
- /** Type of subscription */
41
- type: 'consumer' | 'observer';
42
- /** Optional selector function */
43
- selector?: (state: S, bloc?: BlocBase<S>) => unknown;
44
- /** Custom equality function */
45
- equalityFn?: (prev: unknown, next: unknown) => boolean;
46
- /** Notification callback */
47
- notify: (value: unknown, oldValue?: unknown, action?: unknown) => void;
48
- /** Priority for notifications */
49
- priority?: number;
50
- /** WeakRef to subscriber */
51
- weakRef?: WeakRef<object>;
52
- }
53
- export interface SubscriptionManagerStats {
54
- /** Total number of active subscriptions */
55
- activeSubscriptions: number;
56
- /** Number of consumer subscriptions */
57
- consumerCount: number;
58
- /** Number of observer subscriptions */
59
- observerCount: number;
60
- /** Total notifications sent */
61
- totalNotifications: number;
62
- /** Number of tracked dependencies */
63
- trackedDependencies: number;
64
- }
65
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/subscription/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IAEX,sDAAsD;IACtD,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IAE9B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAErD,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAEvD,+CAA+C;IAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvE,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1B,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,sCAAsC;IACtC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE3B,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,6BAA6B;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,2BAA2B;IAC3B,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IAE9B,iCAAiC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAErD,+BAA+B;IAC/B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAEvD,4BAA4B;IAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvE,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,mBAAmB,EAAE,MAAM,CAAC;IAE5B,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IAEtB,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAE3B,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;CAC7B"}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/subscription/types.ts"],"names":[],"mappings":""}