@blac/core 2.0.0-rc-14 → 2.0.0-rc.0
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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/Blac.d.ts +246 -0
- package/dist/Blac.d.ts.map +1 -0
- package/dist/Blac.js +625 -0
- package/dist/Blac.js.map +1 -0
- package/dist/Bloc.d.ts +41 -0
- package/dist/Bloc.d.ts.map +1 -0
- package/dist/Bloc.js +140 -0
- package/dist/Bloc.js.map +1 -0
- package/dist/BlocBase.d.ts +110 -0
- package/dist/BlocBase.d.ts.map +1 -0
- package/dist/BlocBase.js +287 -0
- package/dist/BlocBase.js.map +1 -0
- package/dist/Cubit.d.ts +25 -0
- package/dist/Cubit.d.ts.map +1 -0
- package/dist/Cubit.js +64 -0
- package/dist/Cubit.js.map +1 -0
- package/dist/adapter/BlacAdapter.d.ts +71 -0
- package/dist/adapter/BlacAdapter.d.ts.map +1 -0
- package/dist/adapter/BlacAdapter.js +373 -0
- package/dist/adapter/BlacAdapter.js.map +1 -0
- package/dist/adapter/ProxyFactory.d.ts +50 -0
- package/dist/adapter/ProxyFactory.d.ts.map +1 -0
- package/dist/adapter/ProxyFactory.js +150 -0
- package/dist/adapter/ProxyFactory.js.map +1 -0
- package/{src/adapter/index.ts → dist/adapter/index.d.ts} +1 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +19 -0
- package/dist/adapter/index.js.map +1 -0
- package/dist/errors/BlacError.d.ts +38 -0
- package/dist/errors/BlacError.d.ts.map +1 -0
- package/dist/errors/BlacError.js +55 -0
- package/dist/errors/BlacError.js.map +1 -0
- package/dist/errors/ErrorManager.d.ts +39 -0
- package/dist/errors/ErrorManager.d.ts.map +1 -0
- package/dist/errors/ErrorManager.js +91 -0
- package/dist/errors/ErrorManager.js.map +1 -0
- package/dist/errors/handleError.d.ts +24 -0
- package/dist/errors/handleError.d.ts.map +1 -0
- package/dist/errors/handleError.js +62 -0
- package/dist/errors/handleError.js.map +1 -0
- package/dist/errors/index.d.ts +5 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +13 -0
- package/dist/errors/index.js.map +1 -0
- package/{src/events.ts → dist/events.d.ts} +4 -2
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +17 -0
- package/dist/events.js.map +1 -0
- package/dist/index.cjs +38 -0
- package/dist/index.d.ts +17 -1303
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle/BlocLifecycle.d.ts +51 -0
- package/dist/lifecycle/BlocLifecycle.d.ts.map +1 -0
- package/dist/lifecycle/BlocLifecycle.js +123 -0
- package/dist/lifecycle/BlocLifecycle.js.map +1 -0
- package/dist/lifecycle/index.d.ts +2 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +18 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/plugins/BlocPluginRegistry.d.ts +58 -0
- package/dist/plugins/BlocPluginRegistry.d.ts.map +1 -0
- package/dist/plugins/BlocPluginRegistry.js +201 -0
- package/dist/plugins/BlocPluginRegistry.js.map +1 -0
- package/dist/plugins/SystemPluginRegistry.d.ts +79 -0
- package/dist/plugins/SystemPluginRegistry.d.ts.map +1 -0
- package/dist/plugins/SystemPluginRegistry.js +184 -0
- package/dist/plugins/SystemPluginRegistry.js.map +1 -0
- package/{src/plugins/index.ts → dist/plugins/index.d.ts} +1 -5
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +26 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/types.d.ts +103 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +3 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/subscription/SubscriptionManager.d.ts +67 -0
- package/dist/subscription/SubscriptionManager.d.ts.map +1 -0
- package/dist/subscription/SubscriptionManager.js +317 -0
- package/dist/subscription/SubscriptionManager.js.map +1 -0
- package/{src/subscription/index.ts → dist/subscription/index.d.ts} +1 -0
- package/dist/subscription/index.d.ts.map +1 -0
- package/dist/subscription/index.js +19 -0
- package/dist/subscription/index.js.map +1 -0
- package/dist/subscription/types.d.ts +65 -0
- package/dist/subscription/types.d.ts.map +1 -0
- package/dist/subscription/types.js +3 -0
- package/dist/subscription/types.js.map +1 -0
- package/dist/testing.d.ts +85 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +186 -0
- package/dist/testing.js.map +1 -0
- package/{src/types.ts → dist/types.d.ts} +11 -28
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/BatchingManager.d.ts +28 -0
- package/dist/utils/BatchingManager.d.ts.map +1 -0
- package/dist/utils/BatchingManager.js +48 -0
- package/dist/utils/BatchingManager.js.map +1 -0
- package/dist/utils/RerenderLogger.d.ts +60 -0
- package/dist/utils/RerenderLogger.d.ts.map +1 -0
- package/dist/utils/RerenderLogger.js +205 -0
- package/dist/utils/RerenderLogger.js.map +1 -0
- package/dist/utils/generateInstanceId.d.ts +11 -0
- package/dist/utils/generateInstanceId.d.ts.map +1 -0
- package/dist/utils/generateInstanceId.js +50 -0
- package/dist/utils/generateInstanceId.js.map +1 -0
- package/dist/utils/shallowEqual.d.ts +9 -0
- package/dist/utils/shallowEqual.d.ts.map +1 -0
- package/dist/utils/shallowEqual.js +35 -0
- package/dist/utils/shallowEqual.js.map +1 -0
- package/dist/utils/uuid.d.ts +10 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +24 -0
- package/dist/utils/uuid.js.map +1 -0
- package/package.json +17 -10
- package/dist/index.cjs.js +0 -11
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.es.js +0 -2275
- package/dist/index.es.js.map +0 -1
- package/src/Blac.ts +0 -802
- package/src/Bloc.ts +0 -180
- package/src/BlocBase.ts +0 -398
- package/src/Cubit.ts +0 -68
- package/src/__tests__/Blac.config.test.ts +0 -79
- package/src/__tests__/Bloc.event.test.ts +0 -394
- package/src/__tests__/BlocBase.subscription.test.ts +0 -349
- package/src/__tests__/Cubit.test.ts +0 -462
- package/src/__tests__/memory-leaks.test.ts +0 -383
- package/src/__tests__/plugins.test.ts +0 -464
- package/src/adapter/BlacAdapter.ts +0 -467
- package/src/adapter/ProxyFactory.ts +0 -249
- package/src/adapter/__tests__/BlacAdapter.test.ts +0 -555
- package/src/adapter/__tests__/ProxyFactory.test.ts +0 -655
- package/src/errors/BlacError.ts +0 -69
- package/src/errors/ErrorManager.ts +0 -101
- package/src/errors/handleError.ts +0 -114
- package/src/errors/index.ts +0 -13
- package/src/index.ts +0 -26
- package/src/lifecycle/BlocLifecycle.ts +0 -156
- package/src/lifecycle/index.ts +0 -1
- package/src/plugins/BlocPluginRegistry.ts +0 -240
- package/src/plugins/SystemPluginRegistry.ts +0 -242
- package/src/plugins/__tests__/BlocPluginRegistry.test.ts +0 -450
- package/src/plugins/__tests__/SystemPluginRegistry.test.ts +0 -404
- package/src/plugins/types.ts +0 -129
- package/src/subscription/README.md +0 -132
- package/src/subscription/SubscriptionManager.ts +0 -395
- package/src/subscription/__tests__/SubscriptionManager.test.ts +0 -355
- package/src/subscription/types.ts +0 -90
- package/src/testing.ts +0 -246
- package/src/utils/BatchingManager.ts +0 -59
- package/src/utils/RerenderLogger.ts +0 -265
- package/src/utils/__tests__/generateInstanceId.test.ts +0 -104
- package/src/utils/__tests__/shallowEqual.test.ts +0 -171
- package/src/utils/__tests__/uuid.test.ts +0 -144
- package/src/utils/generateInstanceId.ts +0 -54
- package/src/utils/shallowEqual.ts +0 -40
- package/src/utils/uuid.ts +0 -22
package/dist/testing.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MemoryLeakDetector = exports.MockCubit = exports.MockBloc = exports.BlocTest = void 0;
|
|
4
|
+
const Blac_1 = require("./Blac");
|
|
5
|
+
const Bloc_1 = require("./Bloc");
|
|
6
|
+
const Cubit_1 = require("./Cubit");
|
|
7
|
+
/**
|
|
8
|
+
* Test utilities for Blac state management
|
|
9
|
+
*/
|
|
10
|
+
class BlocTest {
|
|
11
|
+
static originalInstance;
|
|
12
|
+
/**
|
|
13
|
+
* Sets up a clean test environment
|
|
14
|
+
*/
|
|
15
|
+
static setUp() {
|
|
16
|
+
this.originalInstance = Blac_1.Blac.instance;
|
|
17
|
+
Blac_1.Blac.resetInstance();
|
|
18
|
+
Blac_1.Blac.enableLog = false; // Disable logging in tests by default
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Tears down the test environment and restores original state
|
|
22
|
+
*/
|
|
23
|
+
static tearDown() {
|
|
24
|
+
Blac_1.Blac.resetInstance();
|
|
25
|
+
// Note: Cannot restore original instance due to singleton pattern
|
|
26
|
+
// Tests should use setUp/tearDown properly to manage state
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a test bloc with automatic cleanup
|
|
30
|
+
*/
|
|
31
|
+
static createBloc(BlocClass, ...args) {
|
|
32
|
+
const bloc = new BlocClass(...args);
|
|
33
|
+
Blac_1.Blac.activateBloc(bloc);
|
|
34
|
+
return bloc;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Waits for a bloc to emit a specific state
|
|
38
|
+
*/
|
|
39
|
+
static async waitForState(bloc, predicate, timeout = 5000) {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
const timeoutId = setTimeout(() => {
|
|
42
|
+
reject(new Error(`Timeout waiting for state matching predicate after ${timeout}ms`));
|
|
43
|
+
}, timeout);
|
|
44
|
+
const unsubscribe = bloc.subscribe((newState) => {
|
|
45
|
+
if (predicate(newState)) {
|
|
46
|
+
clearTimeout(timeoutId);
|
|
47
|
+
unsubscribe();
|
|
48
|
+
resolve(newState);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
// Check current state immediately
|
|
52
|
+
if (predicate(bloc.state)) {
|
|
53
|
+
clearTimeout(timeoutId);
|
|
54
|
+
unsubscribe();
|
|
55
|
+
resolve(bloc.state);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Expects a bloc to emit specific states in order
|
|
61
|
+
*/
|
|
62
|
+
static async expectStates(bloc, expectedStates, timeout = 5000) {
|
|
63
|
+
const receivedStates = [];
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
const timeoutId = setTimeout(() => {
|
|
66
|
+
reject(new Error(`Timeout waiting for states. Expected: ${JSON.stringify(expectedStates)}, ` +
|
|
67
|
+
`Received: ${JSON.stringify(receivedStates)}`));
|
|
68
|
+
}, timeout);
|
|
69
|
+
const unsubscribe = bloc.subscribe((newState) => {
|
|
70
|
+
receivedStates.push(newState);
|
|
71
|
+
// Check if we have all expected states
|
|
72
|
+
if (receivedStates.length === expectedStates.length) {
|
|
73
|
+
clearTimeout(timeoutId);
|
|
74
|
+
unsubscribe();
|
|
75
|
+
// Verify all states match using deep equality
|
|
76
|
+
for (let i = 0; i < expectedStates.length; i++) {
|
|
77
|
+
const expected = expectedStates[i];
|
|
78
|
+
const received = receivedStates[i];
|
|
79
|
+
// Use JSON comparison for deep equality
|
|
80
|
+
if (JSON.stringify(expected) !== JSON.stringify(received)) {
|
|
81
|
+
reject(new Error(`State mismatch at index ${i}. Expected: ${JSON.stringify(expected)}, ` +
|
|
82
|
+
`Received: ${JSON.stringify(received)}`));
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
resolve();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.BlocTest = BlocTest;
|
|
93
|
+
/**
|
|
94
|
+
* Mock Bloc for testing
|
|
95
|
+
*/
|
|
96
|
+
class MockBloc extends Bloc_1.Bloc {
|
|
97
|
+
mockHandlers = new Map();
|
|
98
|
+
constructor(initialState) {
|
|
99
|
+
super(initialState);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Mock an event handler for testing
|
|
103
|
+
*/
|
|
104
|
+
mockEventHandler(eventConstructor, handler) {
|
|
105
|
+
// Use the on method to register the mock handler
|
|
106
|
+
this.on(eventConstructor, handler);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get the number of registered handlers
|
|
110
|
+
*/
|
|
111
|
+
getHandlerCount() {
|
|
112
|
+
return this.eventHandlers.size;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if a handler is registered for an event type
|
|
116
|
+
*/
|
|
117
|
+
hasHandler(eventConstructor) {
|
|
118
|
+
return this.eventHandlers.has(eventConstructor);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.MockBloc = MockBloc;
|
|
122
|
+
/**
|
|
123
|
+
* Mock Cubit for testing
|
|
124
|
+
*/
|
|
125
|
+
class MockCubit extends Cubit_1.Cubit {
|
|
126
|
+
stateHistory = [];
|
|
127
|
+
constructor(initialState) {
|
|
128
|
+
super(initialState);
|
|
129
|
+
this.stateHistory.push(initialState);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Override emit to track state history
|
|
133
|
+
*/
|
|
134
|
+
emit(newState) {
|
|
135
|
+
this.stateHistory.push(newState);
|
|
136
|
+
super.emit(newState);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get the history of all states
|
|
140
|
+
*/
|
|
141
|
+
getStateHistory() {
|
|
142
|
+
return [...this.stateHistory];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Clear state history
|
|
146
|
+
*/
|
|
147
|
+
clearStateHistory() {
|
|
148
|
+
this.stateHistory = [this.state];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.MockCubit = MockCubit;
|
|
152
|
+
/**
|
|
153
|
+
* Memory leak detector for tests
|
|
154
|
+
*/
|
|
155
|
+
class MemoryLeakDetector {
|
|
156
|
+
initialStats;
|
|
157
|
+
constructor() {
|
|
158
|
+
this.initialStats = Blac_1.Blac.getMemoryStats();
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check for memory leaks and return a report
|
|
162
|
+
*/
|
|
163
|
+
checkForLeaks() {
|
|
164
|
+
const currentStats = Blac_1.Blac.getMemoryStats();
|
|
165
|
+
const hasLeaks = currentStats.registeredBlocs > this.initialStats.registeredBlocs ||
|
|
166
|
+
currentStats.isolatedBlocs > this.initialStats.isolatedBlocs ||
|
|
167
|
+
currentStats.keepAliveBlocs > this.initialStats.keepAliveBlocs;
|
|
168
|
+
const report = `
|
|
169
|
+
Memory Leak Detection Report:
|
|
170
|
+
- Initial registered blocs: ${this.initialStats.registeredBlocs}
|
|
171
|
+
- Current registered blocs: ${currentStats.registeredBlocs}
|
|
172
|
+
- Initial isolated blocs: ${this.initialStats.isolatedBlocs}
|
|
173
|
+
- Current isolated blocs: ${currentStats.isolatedBlocs}
|
|
174
|
+
- Initial keep-alive blocs: ${this.initialStats.keepAliveBlocs}
|
|
175
|
+
- Current keep-alive blocs: ${currentStats.keepAliveBlocs}
|
|
176
|
+
- Potential leaks detected: ${hasLeaks ? 'YES' : 'NO'}
|
|
177
|
+
`.trim();
|
|
178
|
+
return {
|
|
179
|
+
hasLeaks,
|
|
180
|
+
report,
|
|
181
|
+
stats: currentStats,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.MemoryLeakDetector = MemoryLeakDetector;
|
|
186
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,62 +1,48 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
1
|
import { Bloc } from './Bloc';
|
|
3
2
|
import { BlocBase } from './BlocBase';
|
|
4
3
|
import { Cubit } from './Cubit';
|
|
5
|
-
|
|
6
4
|
/**
|
|
7
5
|
* Represents a constructor type for a Bloc that takes no parameters
|
|
8
6
|
* @template B - The type of the Bloc instance
|
|
9
7
|
*/
|
|
10
8
|
export type BlocClassNoParams<B> = new (args: never[]) => B;
|
|
11
|
-
|
|
12
9
|
/**
|
|
13
10
|
* Represents the abstract base types for Bloc and Cubit
|
|
14
11
|
*/
|
|
15
12
|
export type BlocBaseAbstract = typeof Bloc<any, any> | typeof Cubit<any>;
|
|
16
|
-
|
|
17
13
|
/**
|
|
18
14
|
* Represents a constructor type for a Bloc that can take any parameters
|
|
19
15
|
* @template B - The type of the Bloc instance
|
|
20
16
|
*/
|
|
21
17
|
export type BlocConstructor<B> = (new (...args: any) => B) & {
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
isolated?: boolean;
|
|
19
|
+
keepAlive?: boolean;
|
|
24
20
|
};
|
|
25
|
-
|
|
26
|
-
export type BlocConstructorParams<B extends BlocConstructor<BlocBase<any>>> =
|
|
27
|
-
ConstructorParameters<B>[0];
|
|
28
|
-
|
|
21
|
+
export type BlocConstructorParams<B extends BlocConstructor<BlocBase<any>>> = ConstructorParameters<B>[0];
|
|
29
22
|
/**
|
|
30
23
|
* Extracts the state type from a BlocBase instance
|
|
31
24
|
* @template B - The BlocBase type to extract the state from
|
|
32
25
|
*/
|
|
33
|
-
export type ValueType<B extends BlocBase<any>> =
|
|
34
|
-
B extends BlocBase<infer U> ? U : never;
|
|
35
|
-
|
|
26
|
+
export type ValueType<B extends BlocBase<any>> = B extends BlocBase<infer U> ? U : never;
|
|
36
27
|
/**
|
|
37
28
|
* Extracts the state type from either a Bloc or Cubit
|
|
38
29
|
* @template T - The Bloc or Cubit type to extract the state from
|
|
39
30
|
*/
|
|
40
31
|
export type BlocState<T> = T extends BlocBase<infer S> ? S : never;
|
|
41
|
-
|
|
42
32
|
/**
|
|
43
33
|
* Enhanced constraint for Bloc events - must be objects with proper constructor
|
|
44
34
|
*/
|
|
45
35
|
export type BlocEventConstraint = object;
|
|
46
|
-
|
|
47
36
|
/**
|
|
48
37
|
* Error boundary interface for Bloc error handling
|
|
49
38
|
*/
|
|
50
39
|
export interface BlocErrorBoundary<S, A extends BlocEventConstraint> {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
) => void | Promise<void>;
|
|
57
|
-
shouldRethrow?: (error: Error, event: A) => boolean;
|
|
40
|
+
onError: (error: Error, event: A, currentState: S, bloc: {
|
|
41
|
+
name: string;
|
|
42
|
+
id: string;
|
|
43
|
+
}) => void | Promise<void>;
|
|
44
|
+
shouldRethrow?: (error: Error, event: A) => boolean;
|
|
58
45
|
}
|
|
59
|
-
|
|
60
46
|
/**
|
|
61
47
|
* Function type for determining dependencies that trigger re-renders
|
|
62
48
|
* Similar to React's useEffect dependency array - if any dependency changes, a re-render is triggered
|
|
@@ -67,8 +53,5 @@ export interface BlocErrorBoundary<S, A extends BlocEventConstraint> {
|
|
|
67
53
|
* @param instance The bloc instance
|
|
68
54
|
* @returns Array of dependencies - if any dependency changes, a re-render is triggered
|
|
69
55
|
*/
|
|
70
|
-
export type BlocHookDependencyArrayFn<S, I = any> = (
|
|
71
|
-
|
|
72
|
-
previousState: S | undefined,
|
|
73
|
-
instance: I,
|
|
74
|
-
) => unknown[];
|
|
56
|
+
export type BlocHookDependencyArrayFn<S, I = any> = (currentState: S, previousState: S | undefined, instance: I) => unknown[];
|
|
57
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC;;;GAGG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IACxE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9B;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,IAC3C,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE1C;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEnE;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,mBAAmB;IACjE,OAAO,EAAE,CACP,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,CAAC,EACR,YAAY,EAAE,CAAC,EACf,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAC/B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC;CACrD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,yBAAyB,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAClD,YAAY,EAAE,CAAC,EACf,aAAa,EAAE,CAAC,GAAG,SAAS,EAC5B,QAAQ,EAAE,CAAC,KACR,OAAO,EAAE,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages batching of state updates to optimize performance
|
|
3
|
+
*/
|
|
4
|
+
export declare class BatchingManager<S> {
|
|
5
|
+
private pendingUpdates;
|
|
6
|
+
private isBatching;
|
|
7
|
+
/**
|
|
8
|
+
* Execute a callback with batched updates
|
|
9
|
+
*/
|
|
10
|
+
batchUpdates(callback: () => void, onFlush: (finalUpdate: {
|
|
11
|
+
newState: S;
|
|
12
|
+
oldState: S;
|
|
13
|
+
action?: unknown;
|
|
14
|
+
}) => void): void;
|
|
15
|
+
/**
|
|
16
|
+
* Add an update to the batch
|
|
17
|
+
*/
|
|
18
|
+
addUpdate(update: {
|
|
19
|
+
newState: S;
|
|
20
|
+
oldState: S;
|
|
21
|
+
action?: unknown;
|
|
22
|
+
}): void;
|
|
23
|
+
/**
|
|
24
|
+
* Check if currently batching
|
|
25
|
+
*/
|
|
26
|
+
get isCurrentlyBatching(): boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=BatchingManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchingManager.d.ts","sourceRoot":"","sources":["../../src/utils/BatchingManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC;IAC5B,OAAO,CAAC,cAAc,CAId;IACR,OAAO,CAAC,UAAU,CAAS;IAE3B;;OAEG;IACH,YAAY,CACV,QAAQ,EAAE,MAAM,IAAI,EACpB,OAAO,EAAE,CAAC,WAAW,EAAE;QACrB,QAAQ,EAAE,CAAC,CAAC;QACZ,QAAQ,EAAE,CAAC,CAAC;QACZ,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,KAAK,IAAI,GACT,IAAI;IAsBP;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAMvE;;OAEG;IACH,IAAI,mBAAmB,IAAI,OAAO,CAEjC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BatchingManager = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Manages batching of state updates to optimize performance
|
|
6
|
+
*/
|
|
7
|
+
class BatchingManager {
|
|
8
|
+
pendingUpdates = [];
|
|
9
|
+
isBatching = false;
|
|
10
|
+
/**
|
|
11
|
+
* Execute a callback with batched updates
|
|
12
|
+
*/
|
|
13
|
+
batchUpdates(callback, onFlush) {
|
|
14
|
+
if (this.isBatching) {
|
|
15
|
+
callback();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this.isBatching = true;
|
|
19
|
+
this.pendingUpdates = [];
|
|
20
|
+
try {
|
|
21
|
+
callback();
|
|
22
|
+
if (this.pendingUpdates.length > 0) {
|
|
23
|
+
const finalUpdate = this.pendingUpdates[this.pendingUpdates.length - 1];
|
|
24
|
+
onFlush(finalUpdate);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
this.isBatching = false;
|
|
29
|
+
this.pendingUpdates = [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Add an update to the batch
|
|
34
|
+
*/
|
|
35
|
+
addUpdate(update) {
|
|
36
|
+
if (this.isBatching) {
|
|
37
|
+
this.pendingUpdates.push(update);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if currently batching
|
|
42
|
+
*/
|
|
43
|
+
get isCurrentlyBatching() {
|
|
44
|
+
return this.isBatching;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.BatchingManager = BatchingManager;
|
|
48
|
+
//# sourceMappingURL=BatchingManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BatchingManager.js","sourceRoot":"","sources":["../../src/utils/BatchingManager.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,eAAe;IAClB,cAAc,GAIjB,EAAE,CAAC;IACA,UAAU,GAAG,KAAK,CAAC;IAE3B;;OAEG;IACH,YAAY,CACV,QAAoB,EACpB,OAIU;QAEV,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,QAAQ,EAAE,CAAC;YAEX,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxE,OAAO,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAsD;QAC9D,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF;AAvDD,0CAuDC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export interface RerenderInfo {
|
|
2
|
+
componentName: string;
|
|
3
|
+
blocName: string;
|
|
4
|
+
blocId: string;
|
|
5
|
+
renderCount: number;
|
|
6
|
+
reason: RerenderReason;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
duration?: number;
|
|
9
|
+
stackTrace?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface RerenderReason {
|
|
12
|
+
type: 'state-change' | 'dependency-change' | 'mount' | 'props-change' | 'unknown';
|
|
13
|
+
changedPaths?: string[];
|
|
14
|
+
oldValues?: Record<string, any>;
|
|
15
|
+
newValues?: Record<string, any>;
|
|
16
|
+
dependencies?: string[];
|
|
17
|
+
description?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Utility class for logging component rerenders with detailed debugging information
|
|
21
|
+
*/
|
|
22
|
+
export declare class RerenderLogger {
|
|
23
|
+
private static componentRenderCounts;
|
|
24
|
+
private static lastRenderTimestamps;
|
|
25
|
+
private static groupedLogs;
|
|
26
|
+
private static groupTimeouts;
|
|
27
|
+
/**
|
|
28
|
+
* Log a component rerender with detailed information
|
|
29
|
+
*/
|
|
30
|
+
static logRerender(info: RerenderInfo): void;
|
|
31
|
+
/**
|
|
32
|
+
* Parse the logging configuration
|
|
33
|
+
*/
|
|
34
|
+
private static parseConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Log immediately without grouping
|
|
37
|
+
*/
|
|
38
|
+
private static logImmediate;
|
|
39
|
+
/**
|
|
40
|
+
* Log with grouping (batch multiple rerenders)
|
|
41
|
+
*/
|
|
42
|
+
private static logGrouped;
|
|
43
|
+
/**
|
|
44
|
+
* Format the log message based on level
|
|
45
|
+
*/
|
|
46
|
+
private static formatMessage;
|
|
47
|
+
/**
|
|
48
|
+
* Get emoji for reason type
|
|
49
|
+
*/
|
|
50
|
+
private static getReasonEmoji;
|
|
51
|
+
/**
|
|
52
|
+
* Clear all tracking data
|
|
53
|
+
*/
|
|
54
|
+
static clear(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Get render count for a component
|
|
57
|
+
*/
|
|
58
|
+
static getRenderCount(componentName: string, blocId: string): number;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=RerenderLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RerenderLogger.d.ts","sourceRoot":"","sources":["../../src/utils/RerenderLogger.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EACA,cAAc,GACd,mBAAmB,GACnB,OAAO,GACP,cAAc,GACd,SAAS,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA6B;IACjE,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAA6B;IAChE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAqC;IAC/D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAqC;IAEjE;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IA+C5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAoB1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAiB3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAwCzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAqD5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAe7B;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;IAQpB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;CAGrE"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RerenderLogger = void 0;
|
|
4
|
+
const Blac_1 = require("../Blac");
|
|
5
|
+
/**
|
|
6
|
+
* Utility class for logging component rerenders with detailed debugging information
|
|
7
|
+
*/
|
|
8
|
+
class RerenderLogger {
|
|
9
|
+
static componentRenderCounts = new Map();
|
|
10
|
+
static lastRenderTimestamps = new Map();
|
|
11
|
+
static groupedLogs = new Map();
|
|
12
|
+
static groupTimeouts = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Log a component rerender with detailed information
|
|
15
|
+
*/
|
|
16
|
+
static logRerender(info) {
|
|
17
|
+
// RerenderLogger is now controlled by the RenderLoggingPlugin
|
|
18
|
+
// This method is called by the plugin which already handles configuration
|
|
19
|
+
const config = Blac_1.Blac._config?.rerenderLogging;
|
|
20
|
+
if (!config)
|
|
21
|
+
return;
|
|
22
|
+
// Parse config
|
|
23
|
+
const loggingConfig = this.parseConfig(config);
|
|
24
|
+
if (!loggingConfig.enabled)
|
|
25
|
+
return;
|
|
26
|
+
// Apply filter if provided
|
|
27
|
+
if (loggingConfig.filter &&
|
|
28
|
+
!loggingConfig.filter({
|
|
29
|
+
componentName: info.componentName,
|
|
30
|
+
blocName: info.blocName,
|
|
31
|
+
})) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// Track render count
|
|
35
|
+
const key = `${info.componentName}-${info.blocId}`;
|
|
36
|
+
const currentCount = this.componentRenderCounts.get(key) || 0;
|
|
37
|
+
this.componentRenderCounts.set(key, currentCount + 1);
|
|
38
|
+
info.renderCount = currentCount + 1;
|
|
39
|
+
// Calculate duration if possible
|
|
40
|
+
const lastTimestamp = this.lastRenderTimestamps.get(key);
|
|
41
|
+
if (lastTimestamp) {
|
|
42
|
+
info.duration = info.timestamp - lastTimestamp;
|
|
43
|
+
}
|
|
44
|
+
this.lastRenderTimestamps.set(key, info.timestamp);
|
|
45
|
+
// Add stack trace if requested
|
|
46
|
+
if (loggingConfig.includeStackTrace && loggingConfig.level === 'detailed') {
|
|
47
|
+
info.stackTrace = new Error().stack;
|
|
48
|
+
}
|
|
49
|
+
// Handle grouping
|
|
50
|
+
if (loggingConfig.groupRerenders) {
|
|
51
|
+
this.logGrouped(info, loggingConfig);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.logImmediate(info, loggingConfig);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse the logging configuration
|
|
59
|
+
*/
|
|
60
|
+
static parseConfig(config) {
|
|
61
|
+
if (config === true) {
|
|
62
|
+
return { enabled: true, level: 'normal' };
|
|
63
|
+
}
|
|
64
|
+
if (typeof config === 'string') {
|
|
65
|
+
return {
|
|
66
|
+
enabled: true,
|
|
67
|
+
level: config === 'minimal' ? 'minimal' : 'detailed',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
enabled: config.enabled,
|
|
72
|
+
level: config.level || 'normal',
|
|
73
|
+
filter: config.filter,
|
|
74
|
+
includeStackTrace: config.includeStackTrace,
|
|
75
|
+
groupRerenders: config.groupRerenders,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Log immediately without grouping
|
|
80
|
+
*/
|
|
81
|
+
static logImmediate(info, config) {
|
|
82
|
+
const message = this.formatMessage(info, config.level);
|
|
83
|
+
if (config.level === 'detailed') {
|
|
84
|
+
console.group(message.header);
|
|
85
|
+
if (message.details)
|
|
86
|
+
console.log(message.details);
|
|
87
|
+
if (message.values)
|
|
88
|
+
console.table(message.values);
|
|
89
|
+
if (info.stackTrace)
|
|
90
|
+
console.log('Stack trace:', info.stackTrace);
|
|
91
|
+
console.groupEnd();
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.log(message.header, message.details || '');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Log with grouping (batch multiple rerenders)
|
|
99
|
+
*/
|
|
100
|
+
static logGrouped(info, config) {
|
|
101
|
+
const groupKey = `${info.componentName}-${info.blocId}`;
|
|
102
|
+
// Clear existing timeout
|
|
103
|
+
const existingTimeout = this.groupTimeouts.get(groupKey);
|
|
104
|
+
if (existingTimeout) {
|
|
105
|
+
clearTimeout(existingTimeout);
|
|
106
|
+
}
|
|
107
|
+
// Add to group
|
|
108
|
+
const group = this.groupedLogs.get(groupKey) || [];
|
|
109
|
+
group.push(info);
|
|
110
|
+
this.groupedLogs.set(groupKey, group);
|
|
111
|
+
// Set new timeout
|
|
112
|
+
const timeout = setTimeout(() => {
|
|
113
|
+
const logs = this.groupedLogs.get(groupKey) || [];
|
|
114
|
+
this.groupedLogs.delete(groupKey);
|
|
115
|
+
this.groupTimeouts.delete(groupKey);
|
|
116
|
+
if (logs.length === 1) {
|
|
117
|
+
this.logImmediate(logs[0], config);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
console.group(`🔄 ${info.componentName} rendered ${logs.length} times (${info.blocName})`);
|
|
121
|
+
logs.forEach((log, index) => {
|
|
122
|
+
const message = this.formatMessage(log, config.level);
|
|
123
|
+
console.log(` ${index + 1}. ${message.details || message.header}`);
|
|
124
|
+
});
|
|
125
|
+
console.groupEnd();
|
|
126
|
+
}
|
|
127
|
+
}, 50); // 50ms debounce
|
|
128
|
+
this.groupTimeouts.set(groupKey, timeout);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Format the log message based on level
|
|
132
|
+
*/
|
|
133
|
+
static formatMessage(info, level) {
|
|
134
|
+
const emoji = this.getReasonEmoji(info.reason.type);
|
|
135
|
+
if (level === 'minimal') {
|
|
136
|
+
return {
|
|
137
|
+
header: `${emoji} ${info.componentName} #${info.renderCount}`,
|
|
138
|
+
details: null,
|
|
139
|
+
values: null,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const header = `${emoji} ${info.componentName} rerender #${info.renderCount} (${info.blocName})`;
|
|
143
|
+
let details = `Reason: ${info.reason.description || info.reason.type}`;
|
|
144
|
+
if (info.duration !== undefined) {
|
|
145
|
+
details += ` | Time since last: ${info.duration}ms`;
|
|
146
|
+
}
|
|
147
|
+
if (level === 'normal' &&
|
|
148
|
+
info.reason.changedPaths &&
|
|
149
|
+
info.reason.changedPaths.length > 0) {
|
|
150
|
+
details += ` | Changed: ${info.reason.changedPaths.join(', ')}`;
|
|
151
|
+
}
|
|
152
|
+
let values = null;
|
|
153
|
+
if (level === 'detailed' &&
|
|
154
|
+
info.reason.changedPaths &&
|
|
155
|
+
info.reason.changedPaths.length > 0) {
|
|
156
|
+
values = {};
|
|
157
|
+
info.reason.changedPaths.forEach((path) => {
|
|
158
|
+
values[path] = {
|
|
159
|
+
old: info.reason.oldValues?.[path],
|
|
160
|
+
new: info.reason.newValues?.[path],
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
// If we have values to show in detailed mode, ensure they're not empty
|
|
164
|
+
if (Object.keys(values).length === 0) {
|
|
165
|
+
values = null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return { header, details, values };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get emoji for reason type
|
|
172
|
+
*/
|
|
173
|
+
static getReasonEmoji(type) {
|
|
174
|
+
switch (type) {
|
|
175
|
+
case 'state-change':
|
|
176
|
+
return '📊';
|
|
177
|
+
case 'dependency-change':
|
|
178
|
+
return '🔗';
|
|
179
|
+
case 'mount':
|
|
180
|
+
return '🚀';
|
|
181
|
+
case 'props-change':
|
|
182
|
+
return '📦';
|
|
183
|
+
default:
|
|
184
|
+
return '🔄';
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Clear all tracking data
|
|
189
|
+
*/
|
|
190
|
+
static clear() {
|
|
191
|
+
this.componentRenderCounts.clear();
|
|
192
|
+
this.lastRenderTimestamps.clear();
|
|
193
|
+
this.groupedLogs.clear();
|
|
194
|
+
this.groupTimeouts.forEach((timeout) => clearTimeout(timeout));
|
|
195
|
+
this.groupTimeouts.clear();
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Get render count for a component
|
|
199
|
+
*/
|
|
200
|
+
static getRenderCount(componentName, blocId) {
|
|
201
|
+
return this.componentRenderCounts.get(`${componentName}-${blocId}`) || 0;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.RerenderLogger = RerenderLogger;
|
|
205
|
+
//# sourceMappingURL=RerenderLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RerenderLogger.js","sourceRoot":"","sources":["../../src/utils/RerenderLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a deterministic instance ID from static props by extracting primitive values
|
|
3
|
+
*
|
|
4
|
+
* Rules:
|
|
5
|
+
* 1. Only considers primitive types: string, number, boolean, null, undefined
|
|
6
|
+
* 2. Ignores complex types: objects, arrays, functions, symbols
|
|
7
|
+
* 3. Sorts keys alphabetically for deterministic output
|
|
8
|
+
* 4. Returns undefined if no primitives found (caller should use default ID)
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateInstanceIdFromProps(props: unknown): string | undefined;
|
|
11
|
+
//# sourceMappingURL=generateInstanceId.d.ts.map
|