@blac/core 2.0.0-rc.6 → 2.0.0-rc.8
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/adapter/framework-adapter.d.ts +114 -0
- package/dist/adapter/framework-adapter.d.ts.map +1 -0
- package/dist/adapter/index.d.ts +8 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/constants.d.ts +82 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/core/Cubit.d.ts +82 -0
- package/dist/core/Cubit.d.ts.map +1 -0
- package/dist/core/StateContainer.d.ts +200 -0
- package/dist/core/StateContainer.d.ts.map +1 -0
- package/dist/core/StateContainerRegistry.d.ts +176 -0
- package/dist/core/StateContainerRegistry.d.ts.map +1 -0
- package/dist/core/Vertex.d.ts +113 -0
- package/dist/core/Vertex.d.ts.map +1 -0
- package/dist/index.cjs +1158 -326
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -885
- package/dist/index.d.ts +19 -884
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1122 -327
- package/dist/index.js.map +1 -1
- package/dist/logging/Logger.d.ts +57 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/plugin/BlacPlugin.d.ts +115 -0
- package/dist/plugin/BlacPlugin.d.ts.map +1 -0
- package/dist/plugin/PluginManager.d.ts +63 -0
- package/dist/plugin/PluginManager.d.ts.map +1 -0
- package/dist/proxy/ProxyTracker.d.ts +71 -0
- package/dist/proxy/ProxyTracker.d.ts.map +1 -0
- package/dist/registry/index.d.ts +20 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/test-utils/index.d.ts +43 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/tracking/dependency-tracker.d.ts +21 -0
- package/dist/tracking/dependency-tracker.d.ts.map +1 -0
- package/dist/tracking/getter-tracker.d.ts +31 -0
- package/dist/tracking/getter-tracker.d.ts.map +1 -0
- package/dist/tracking/index.d.ts +38 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/path-utils.d.ts +39 -0
- package/dist/tracking/path-utils.d.ts.map +1 -0
- package/dist/tracking/proxy-tracker.d.ts +88 -0
- package/dist/tracking/proxy-tracker.d.ts.map +1 -0
- package/dist/types/branded.d.ts +9 -0
- package/dist/types/branded.d.ts.map +1 -0
- package/dist/types/events.d.ts +13 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/utilities.d.ts +18 -0
- package/dist/types/utilities.d.ts.map +1 -0
- package/dist/utils/equality.d.ts +9 -0
- package/dist/utils/equality.d.ts.map +1 -0
- package/dist/utils/idGenerator.d.ts +76 -0
- package/dist/utils/idGenerator.d.ts.map +1 -0
- package/dist/utils/immutable.d.ts +16 -0
- package/dist/utils/immutable.d.ts.map +1 -0
- package/dist/utils/stack-trace.d.ts +19 -0
- package/dist/utils/stack-trace.d.ts.map +1 -0
- package/dist/utils/static-props.d.ts +29 -0
- package/dist/utils/static-props.d.ts.map +1 -0
- package/package.json +17 -4
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlacPlugin - Plugin system for BlaC state management
|
|
3
|
+
*
|
|
4
|
+
* Provides a safe and powerful API for plugins to observe and interact with
|
|
5
|
+
* StateContainer instances without coupling to the core.
|
|
6
|
+
*/
|
|
7
|
+
import type { StateContainer } from '../core/StateContainer';
|
|
8
|
+
import type { Vertex } from '../core/Vertex';
|
|
9
|
+
import type { BaseEvent } from '../types/events';
|
|
10
|
+
/**
|
|
11
|
+
* Instance metadata exposed to plugins
|
|
12
|
+
*/
|
|
13
|
+
export interface InstanceMetadata {
|
|
14
|
+
/** Unique instance ID */
|
|
15
|
+
id: string;
|
|
16
|
+
/** Class name (e.g., 'CounterCubit') */
|
|
17
|
+
className: string;
|
|
18
|
+
isDisposed: boolean;
|
|
19
|
+
/** Custom name if provided */
|
|
20
|
+
name: string;
|
|
21
|
+
lastStateChangeTimestamp: number;
|
|
22
|
+
state: any;
|
|
23
|
+
createdAt: number;
|
|
24
|
+
/** Whether this is an isolated instance */
|
|
25
|
+
isIsolated: boolean;
|
|
26
|
+
/** Call stack for state update (optional, for DevTools) */
|
|
27
|
+
callstack?: string;
|
|
28
|
+
/** Previous state (optional, for state change events) */
|
|
29
|
+
previousState?: any;
|
|
30
|
+
/** Current state (optional, for state change events) */
|
|
31
|
+
currentState?: any;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Plugin context - provides safe access to BlaC internals
|
|
35
|
+
*/
|
|
36
|
+
export interface PluginContext {
|
|
37
|
+
/**
|
|
38
|
+
* Get metadata for an instance
|
|
39
|
+
*/
|
|
40
|
+
getInstanceMetadata(instance: StateContainer<any>): InstanceMetadata;
|
|
41
|
+
/**
|
|
42
|
+
* Get current state of an instance
|
|
43
|
+
*/
|
|
44
|
+
getState<S>(instance: StateContainer<S>): S;
|
|
45
|
+
/**
|
|
46
|
+
* Query all instances of a specific type
|
|
47
|
+
*/
|
|
48
|
+
queryInstances<T extends StateContainer<any>>(typeClass: new (...args: any[]) => T): T[];
|
|
49
|
+
/**
|
|
50
|
+
* Query all registered types
|
|
51
|
+
*/
|
|
52
|
+
getAllTypes(): Array<new (...args: any[]) => StateContainer<any>>;
|
|
53
|
+
/**
|
|
54
|
+
* Get registry statistics
|
|
55
|
+
*/
|
|
56
|
+
getStats(): {
|
|
57
|
+
registeredTypes: number;
|
|
58
|
+
totalInstances: number;
|
|
59
|
+
typeBreakdown: Record<string, number>;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Base plugin interface
|
|
64
|
+
*/
|
|
65
|
+
export interface BlacPlugin {
|
|
66
|
+
/** Plugin name for identification */
|
|
67
|
+
readonly name: string;
|
|
68
|
+
/** Plugin version */
|
|
69
|
+
readonly version: string;
|
|
70
|
+
/**
|
|
71
|
+
* Called when plugin is installed
|
|
72
|
+
* @param context - Plugin context for safe access to BlaC internals
|
|
73
|
+
*/
|
|
74
|
+
onInstall?(context: PluginContext): void;
|
|
75
|
+
/**
|
|
76
|
+
* Called when plugin is uninstalled
|
|
77
|
+
*/
|
|
78
|
+
onUninstall?(): void;
|
|
79
|
+
/**
|
|
80
|
+
* Called when a StateContainer instance is created
|
|
81
|
+
*/
|
|
82
|
+
onInstanceCreated?(instance: StateContainer<any>, context: PluginContext): void;
|
|
83
|
+
/**
|
|
84
|
+
* Called when state changes
|
|
85
|
+
*/
|
|
86
|
+
onStateChanged?<S>(instance: StateContainer<S>, previousState: S, currentState: S, callstack: string | undefined, context: PluginContext): void;
|
|
87
|
+
/**
|
|
88
|
+
* Called when an event is added (Vertex only)
|
|
89
|
+
*/
|
|
90
|
+
onEventAdded?<E extends BaseEvent>(vertex: Vertex<any, E>, event: E, context: PluginContext): void;
|
|
91
|
+
/**
|
|
92
|
+
* Called when an instance is disposed
|
|
93
|
+
*/
|
|
94
|
+
onInstanceDisposed?(instance: StateContainer<any>, context: PluginContext): void;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Plugin with initialization hook
|
|
98
|
+
*/
|
|
99
|
+
export interface BlacPluginWithInit extends BlacPlugin {
|
|
100
|
+
onInstall(context: PluginContext): void;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Plugin configuration options
|
|
104
|
+
*/
|
|
105
|
+
export interface PluginConfig {
|
|
106
|
+
/** Whether plugin is enabled */
|
|
107
|
+
enabled?: boolean;
|
|
108
|
+
/** Environment filter (e.g., only run in development) */
|
|
109
|
+
environment?: 'development' | 'production' | 'test' | 'all';
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Type guard for plugins with init
|
|
113
|
+
*/
|
|
114
|
+
export declare function hasInitHook(plugin: BlacPlugin): plugin is BlacPluginWithInit;
|
|
115
|
+
//# sourceMappingURL=BlacPlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlacPlugin.d.ts","sourceRoot":"","sources":["../../src/plugin/BlacPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluginManager - Manages plugins and provides plugin context
|
|
3
|
+
* TESTS ARE FOR AN OLDER VERSION AND NEED TO BE REWRITTEN
|
|
4
|
+
*/
|
|
5
|
+
import type { StateContainerRegistry } from '../core/StateContainerRegistry';
|
|
6
|
+
import type { BlacPlugin, PluginConfig } from './BlacPlugin';
|
|
7
|
+
/**
|
|
8
|
+
* Plugin manager for registering and coordinating plugins
|
|
9
|
+
*/
|
|
10
|
+
export declare class PluginManager {
|
|
11
|
+
private plugins;
|
|
12
|
+
private registry;
|
|
13
|
+
constructor(registry: StateContainerRegistry);
|
|
14
|
+
/**
|
|
15
|
+
* Install a plugin
|
|
16
|
+
*/
|
|
17
|
+
install(plugin: BlacPlugin, config?: PluginConfig): void;
|
|
18
|
+
/**
|
|
19
|
+
* Uninstall a plugin
|
|
20
|
+
*/
|
|
21
|
+
uninstall(pluginName: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get installed plugin
|
|
24
|
+
*/
|
|
25
|
+
getPlugin(pluginName: string): BlacPlugin | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Get all installed plugins
|
|
28
|
+
*/
|
|
29
|
+
getAllPlugins(): BlacPlugin[];
|
|
30
|
+
/**
|
|
31
|
+
* Check if plugin is installed
|
|
32
|
+
*/
|
|
33
|
+
hasPlugin(pluginName: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Clear all plugins (for testing)
|
|
36
|
+
*/
|
|
37
|
+
clear(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Setup lifecycle hooks to notify plugins
|
|
40
|
+
*/
|
|
41
|
+
private setupLifecycleHooks;
|
|
42
|
+
/**
|
|
43
|
+
* Notify all plugins of a lifecycle event
|
|
44
|
+
*/
|
|
45
|
+
private notifyPlugins;
|
|
46
|
+
/**
|
|
47
|
+
* Create plugin context with safe API access
|
|
48
|
+
*/
|
|
49
|
+
private createPluginContext;
|
|
50
|
+
/**
|
|
51
|
+
* Check if plugin should be enabled based on environment
|
|
52
|
+
*/
|
|
53
|
+
private shouldEnablePlugin;
|
|
54
|
+
/**
|
|
55
|
+
* Get current environment
|
|
56
|
+
*/
|
|
57
|
+
private getCurrentEnvironment;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a plugin manager instance
|
|
61
|
+
*/
|
|
62
|
+
export declare function createPluginManager(registry: StateContainerRegistry): PluginManager;
|
|
63
|
+
//# sourceMappingURL=PluginManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../src/plugin/PluginManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,KAAK,EACV,UAAU,EAEV,YAAY,EAEb,MAAM,cAAc,CAAC;AAQtB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,QAAQ,EAAE,sBAAsB;IAK5C;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,GAAE,YAAiB,GAAG,IAAI;IA8C5D;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAsBnC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIrD;;OAEG;IACH,aAAa,IAAI,UAAU,EAAE;IAI7B;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAQ9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,sBAAsB,GAC/B,aAAa,CAEf"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProxyTracker - Automatic dependency tracking through Proxies
|
|
3
|
+
*
|
|
4
|
+
* Tracks property access on state objects to automatically determine
|
|
5
|
+
* which parts of the state a component depends on.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Tracks property access on state objects
|
|
9
|
+
*/
|
|
10
|
+
export declare class ProxyTracker<T> {
|
|
11
|
+
private trackedPaths;
|
|
12
|
+
private isTracking;
|
|
13
|
+
private proxyCache;
|
|
14
|
+
private maxDepth;
|
|
15
|
+
/**
|
|
16
|
+
* Create a proxy that tracks property access
|
|
17
|
+
*/
|
|
18
|
+
createProxy(target: T, path?: string, depth?: number): T;
|
|
19
|
+
/**
|
|
20
|
+
* Create a proxy for arrays with special handling
|
|
21
|
+
*/
|
|
22
|
+
private createArrayProxy;
|
|
23
|
+
/**
|
|
24
|
+
* Start tracking property access
|
|
25
|
+
*/
|
|
26
|
+
startTracking(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Stop tracking and return tracked paths
|
|
29
|
+
*/
|
|
30
|
+
stopTracking(): Set<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Get currently tracked paths
|
|
33
|
+
*/
|
|
34
|
+
getTrackedPaths(): ReadonlySet<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if currently tracking
|
|
37
|
+
*/
|
|
38
|
+
isCurrentlyTracking(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Clear proxy cache (useful for memory management)
|
|
41
|
+
*/
|
|
42
|
+
clearCache(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Set maximum tracking depth
|
|
45
|
+
*/
|
|
46
|
+
setMaxDepth(depth: number): void;
|
|
47
|
+
/**
|
|
48
|
+
* Add a path manually (useful for forcing dependencies)
|
|
49
|
+
*/
|
|
50
|
+
addPath(path: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Remove a path manually
|
|
53
|
+
*/
|
|
54
|
+
removePath(path: string): void;
|
|
55
|
+
/**
|
|
56
|
+
* Clear all tracked paths
|
|
57
|
+
*/
|
|
58
|
+
clearPaths(): void;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Global proxy tracker instance for convenience
|
|
62
|
+
*/
|
|
63
|
+
export declare const globalProxyTracker: ProxyTracker<unknown>;
|
|
64
|
+
/**
|
|
65
|
+
* Utility function to track property access in a callback
|
|
66
|
+
*/
|
|
67
|
+
export declare function trackAccess<T, R>(state: T, callback: (proxiedState: T) => R): {
|
|
68
|
+
result: R;
|
|
69
|
+
trackedPaths: Set<string>;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=ProxyTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProxyTracker.d.ts","sourceRoot":"","sources":["../../src/proxy/ProxyTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,QAAQ,CAAM;IAEtB;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,GAAE,MAAW,EAAE,KAAK,GAAE,MAAU,GAAG,CAAC;IA6F/D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8DxB;;OAEG;IACH,aAAa,IAAI,IAAI;IAMrB;;OAEG;IACH,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC;IAS3B;;OAEG;IACH,eAAe,IAAI,WAAW,CAAC,MAAM,CAAC;IAItC;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,uBAAqB,CAAC;AAErD;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAC9B,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAC/B;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,CAS1C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry module (deprecated)
|
|
3
|
+
*
|
|
4
|
+
* Registry functionality has been consolidated into StateContainer.
|
|
5
|
+
* Use StateContainer static methods instead:
|
|
6
|
+
*
|
|
7
|
+
* - StateContainer.register() - Register a type
|
|
8
|
+
* - StateContainer.getOrCreate() - Get or create instance
|
|
9
|
+
* - StateContainer.isRegistered() - Check if type is registered
|
|
10
|
+
* - StateContainer.hasInstance() - Check if instance exists
|
|
11
|
+
* - StateContainer.removeInstance() - Remove instance
|
|
12
|
+
* - StateContainer.getAll() - Get all instances of a type
|
|
13
|
+
* - StateContainer.clear() - Clear all instances of a type
|
|
14
|
+
* - StateContainer.clearAllInstances() - Clear all instances
|
|
15
|
+
* - StateContainer.unregister() - Unregister a type
|
|
16
|
+
* - StateContainer.getStats() - Get statistics
|
|
17
|
+
*/
|
|
18
|
+
export { type BlocConstructor } from '../types/utilities';
|
|
19
|
+
export { type InstanceId, instanceId as createInstanceId, } from '../types/branded';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,KAAK,UAAU,EACf,UAAU,IAAI,gBAAgB,GAC/B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test utilities and fixtures
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Create a test state object
|
|
6
|
+
*/
|
|
7
|
+
export declare function createTestState<T extends Record<string, unknown>>(overrides?: Partial<T>): T;
|
|
8
|
+
/**
|
|
9
|
+
* Wait for a condition to be true
|
|
10
|
+
*/
|
|
11
|
+
export declare function waitFor(condition: () => boolean, timeout?: number, interval?: number): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Create a mock subscription notify function
|
|
14
|
+
*/
|
|
15
|
+
export declare function createMockNotify<T = unknown>(): {
|
|
16
|
+
fn: import("vitest").Mock<(state: T) => void>;
|
|
17
|
+
calls: T[];
|
|
18
|
+
callCount: () => number;
|
|
19
|
+
lastCall: () => T;
|
|
20
|
+
reset: () => void;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Memory usage tracker for tests
|
|
24
|
+
*/
|
|
25
|
+
export declare class MemoryTracker {
|
|
26
|
+
private baseline;
|
|
27
|
+
start(): void;
|
|
28
|
+
getUsage(): number;
|
|
29
|
+
getMB(): number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Performance timer for benchmarking
|
|
33
|
+
*/
|
|
34
|
+
export declare class PerfTimer {
|
|
35
|
+
private start;
|
|
36
|
+
private marks;
|
|
37
|
+
begin(): void;
|
|
38
|
+
mark(label: string): void;
|
|
39
|
+
end(): number;
|
|
40
|
+
getMark(label: string): number | undefined;
|
|
41
|
+
getAllMarks(): Record<string, number>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACrB,CAAC,CAUH;AAED;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,OAAO,EACxB,OAAO,SAAO,EACd,QAAQ,SAAK,GACZ,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO;sCAEjB,CAAC;;;;;EAa3B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAa;IAE7B,KAAK,IAAI,IAAI;IAOb,QAAQ,IAAI,MAAM;IAOlB,KAAK,IAAI,MAAM;CAGhB;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,KAAK,CAAkC;IAE/C,KAAK,IAAI,IAAI;IAIb,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB,GAAG,IAAI,MAAM;IAIb,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK1C,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAOtC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ProxyTrackerState } from './proxy-tracker';
|
|
2
|
+
export interface PathInfo {
|
|
3
|
+
segments: string[];
|
|
4
|
+
value: any;
|
|
5
|
+
}
|
|
6
|
+
export interface TrackerState<T> {
|
|
7
|
+
proxyTrackerState: ProxyTrackerState<T>;
|
|
8
|
+
previousRenderPaths: Set<string>;
|
|
9
|
+
currentRenderPaths: Set<string>;
|
|
10
|
+
pathCache: Map<string, PathInfo>;
|
|
11
|
+
lastCheckedState: T | null;
|
|
12
|
+
lastCheckedValues: Map<string, any>;
|
|
13
|
+
}
|
|
14
|
+
export declare function optimizeTrackedPaths(paths: Set<string>): Set<string>;
|
|
15
|
+
export declare function createTrackerState<T>(): TrackerState<T>;
|
|
16
|
+
export declare function startTracking<T>(tracker: TrackerState<T>): void;
|
|
17
|
+
export declare function createProxy<T>(tracker: TrackerState<T>, state: T): T;
|
|
18
|
+
export declare function captureTrackedPaths<T>(tracker: TrackerState<T>, state: T): void;
|
|
19
|
+
export declare function hasChanges<T>(tracker: TrackerState<T>, state: T): boolean;
|
|
20
|
+
export declare function hasTrackedData<T>(tracker: TrackerState<T>): boolean;
|
|
21
|
+
//# sourceMappingURL=dependency-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-tracker.d.ts","sourceRoot":"","sources":["../../src/tracking/dependency-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACxC,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACrC;AA8BD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAkDpE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CASvD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAE/D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAEpE;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,KAAK,EAAE,CAAC,GACP,IAAI,CAwCN;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAmBzE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAMnE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { StateContainer } from '../core/StateContainer';
|
|
2
|
+
export interface GetterTrackerState {
|
|
3
|
+
trackedValues: Map<string | symbol, unknown>;
|
|
4
|
+
currentlyAccessing: Set<string | symbol>;
|
|
5
|
+
trackedGetters: Set<string | symbol>;
|
|
6
|
+
isTracking: boolean;
|
|
7
|
+
renderCache: Map<string | symbol, unknown>;
|
|
8
|
+
cacheValid: boolean;
|
|
9
|
+
externalDependencies: Set<StateContainer<any>>;
|
|
10
|
+
}
|
|
11
|
+
interface GetterExecutionContext {
|
|
12
|
+
tracker: GetterTrackerState | null;
|
|
13
|
+
currentBloc: StateContainer<any> | null;
|
|
14
|
+
depth: number;
|
|
15
|
+
visitedBlocs: Set<StateContainer<any>>;
|
|
16
|
+
}
|
|
17
|
+
export declare function getGetterExecutionContext(): GetterExecutionContext;
|
|
18
|
+
export declare function getDescriptor(obj: any, prop: string | symbol): PropertyDescriptor | undefined;
|
|
19
|
+
export declare function isGetter(obj: any, prop: string | symbol): boolean;
|
|
20
|
+
export declare function createGetterTracker(): GetterTrackerState;
|
|
21
|
+
export declare function setActiveTracker<TBloc extends StateContainer<any>>(bloc: TBloc, tracker: GetterTrackerState): void;
|
|
22
|
+
export declare function clearActiveTracker<TBloc extends StateContainer<any>>(bloc: TBloc): void;
|
|
23
|
+
export declare function getActiveTracker<TBloc extends StateContainer<any>>(bloc: TBloc): GetterTrackerState | undefined;
|
|
24
|
+
export declare function commitTrackedGetters(tracker: GetterTrackerState): void;
|
|
25
|
+
export declare function createBlocProxy<TBloc extends StateContainer<any>>(bloc: TBloc): TBloc;
|
|
26
|
+
export declare function hasGetterChanges<TBloc extends StateContainer<any>>(bloc: TBloc, tracker: GetterTrackerState | null): boolean;
|
|
27
|
+
export declare function invalidateRenderCache(tracker: GetterTrackerState): void;
|
|
28
|
+
export declare function clearExternalDependencies(tracker: GetterTrackerState): void;
|
|
29
|
+
export declare function resetGetterTracker(tracker: GetterTrackerState): void;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=getter-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getter-tracker.d.ts","sourceRoot":"","sources":["../../src/tracking/getter-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,kBAAkB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACzC,cAAc,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;CAChD;AAaD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;CACxC;AAaD,wBAAgB,yBAAyB,IAAI,sBAAsB,CAElE;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,MAAM,GAAG,MAAM,GACpB,kBAAkB,GAAG,SAAS,CA6BhC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAGjE;AAED,wBAAgB,mBAAmB,IAAI,kBAAkB,CAUxD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC,EAChE,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAEN;AAED,wBAAgB,kBAAkB,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC,EAClE,IAAI,EAAE,KAAK,GACV,IAAI,CAEN;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC,EAChE,IAAI,EAAE,KAAK,GACV,kBAAkB,GAAG,SAAS,CAEhC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAKtE;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC,EAC/D,IAAI,EAAE,KAAK,GACV,KAAK,CA+EP;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC,EAChE,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,kBAAkB,GAAG,IAAI,GACjC,OAAO,CAwDT;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAEvE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAE3E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAQpE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Tracking
|
|
3
|
+
*
|
|
4
|
+
* Framework-agnostic dependency tracking utilities for automatic reactivity.
|
|
5
|
+
* These utilities can be used by any framework integration (React, Vue, Angular, etc.)
|
|
6
|
+
* to track property accesses and detect changes.
|
|
7
|
+
*
|
|
8
|
+
* ## Usage
|
|
9
|
+
*
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import {
|
|
12
|
+
* createTrackerState,
|
|
13
|
+
* startTracking,
|
|
14
|
+
* createProxy,
|
|
15
|
+
* captureTrackedPaths,
|
|
16
|
+
* hasChanges
|
|
17
|
+
* } from '@blac/core';
|
|
18
|
+
*
|
|
19
|
+
* // Create tracker state
|
|
20
|
+
* const tracker = createTrackerState<MyState>();
|
|
21
|
+
*
|
|
22
|
+
* // During render:
|
|
23
|
+
* startTracking(tracker);
|
|
24
|
+
* const proxy = createProxy(tracker, state);
|
|
25
|
+
* // ... render with proxy ...
|
|
26
|
+
* captureTrackedPaths(tracker, state);
|
|
27
|
+
*
|
|
28
|
+
* // On state change:
|
|
29
|
+
* if (hasChanges(tracker, newState)) {
|
|
30
|
+
* // Trigger re-render
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export { type TrackerState, type PathInfo, createTrackerState, startTracking, createProxy, captureTrackedPaths, hasChanges, hasTrackedData, } from './dependency-tracker';
|
|
35
|
+
export { type ProxyTrackerState, createProxyTrackerState, startProxyTracking, stopProxyTracking, createProxyInternal, createArrayProxy, createProxyForTarget, isProxyable, } from './proxy-tracker';
|
|
36
|
+
export { parsePath, getValueAtPath, shallowEqual } from './path-utils';
|
|
37
|
+
export { type GetterTrackerState, createGetterTracker, createBlocProxy, hasGetterChanges, isGetter, getDescriptor, setActiveTracker, clearActiveTracker, getActiveTracker, commitTrackedGetters, invalidateRenderCache, resetGetterTracker, clearExternalDependencies, getGetterExecutionContext, } from './getter-tracker';
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracking/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,EACL,KAAK,kBAAkB,EACvB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path utilities for dependency tracking
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for parsing property paths and extracting values
|
|
5
|
+
* from nested objects using path strings.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Parse a property path string into an array of segments
|
|
9
|
+
*
|
|
10
|
+
* Handles both dot notation (a.b.c) and bracket notation (a[0].b)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* parsePath('user.name') // ['user', 'name']
|
|
14
|
+
* parsePath('items[0].name') // ['items', '0', 'name']
|
|
15
|
+
* parsePath('data.users[2].address.city') // ['data', 'users', '2', 'address', 'city']
|
|
16
|
+
*/
|
|
17
|
+
export declare function parsePath(path: string): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Get a value from an object using a path of segments
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const obj = { user: { name: 'Alice', age: 30 } }
|
|
23
|
+
* getValueAtPath(obj, ['user', 'name']) // 'Alice'
|
|
24
|
+
* getValueAtPath(obj, ['user', 'age']) // 30
|
|
25
|
+
* getValueAtPath(obj, ['user', 'missing']) // undefined
|
|
26
|
+
*/
|
|
27
|
+
export declare function getValueAtPath(obj: any, segments: string[]): any;
|
|
28
|
+
/**
|
|
29
|
+
* Shallow equality comparison for arrays
|
|
30
|
+
*
|
|
31
|
+
* Compares two arrays element-by-element using Object.is
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* shallowEqual([1, 2, 3], [1, 2, 3]) // true
|
|
35
|
+
* shallowEqual([1, 2, 3], [1, 2, 4]) // false
|
|
36
|
+
* shallowEqual([1, 2], [1, 2, 3]) // false
|
|
37
|
+
*/
|
|
38
|
+
export declare function shallowEqual(arr1: unknown[], arr2: unknown[]): boolean;
|
|
39
|
+
//# sourceMappingURL=path-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/tracking/path-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAShE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAMtE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Functional proxy tracker for automatic dependency tracking
|
|
3
|
+
*
|
|
4
|
+
* This module provides a functional approach to proxy-based dependency tracking.
|
|
5
|
+
* Unlike the class-based ProxyTracker, this uses a state object pattern that's
|
|
6
|
+
* easier to integrate with functional programming patterns and framework hooks.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Check if a value can be proxied
|
|
10
|
+
*
|
|
11
|
+
* Returns true for plain objects and arrays only.
|
|
12
|
+
* Excludes built-in objects like Date, Map, Set, etc.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isProxyable(value: unknown): value is object;
|
|
15
|
+
/**
|
|
16
|
+
* State container for proxy tracking
|
|
17
|
+
*/
|
|
18
|
+
export interface ProxyTrackerState<T> {
|
|
19
|
+
/** Set of all tracked property paths */
|
|
20
|
+
trackedPaths: Set<string>;
|
|
21
|
+
/** Whether tracking is currently active */
|
|
22
|
+
isTracking: boolean;
|
|
23
|
+
/** Cache of created proxies to avoid duplicates */
|
|
24
|
+
proxyCache: WeakMap<object, any>;
|
|
25
|
+
/** Cache of bound functions to maintain referential equality */
|
|
26
|
+
boundFunctionsCache: WeakMap<Function, Function> | null;
|
|
27
|
+
/** Last state object that was proxied (for cache invalidation) */
|
|
28
|
+
lastProxiedState: T | null;
|
|
29
|
+
/** Last proxy created (for cache reuse) */
|
|
30
|
+
lastProxy: T | null;
|
|
31
|
+
/** Maximum depth for nested proxy creation */
|
|
32
|
+
maxDepth: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a new proxy tracker state
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* const state = createProxyTrackerState<MyState>();
|
|
39
|
+
* startProxyTracking(state);
|
|
40
|
+
* const proxy = createProxyForTarget(state, myObject);
|
|
41
|
+
* // ... use proxy ...
|
|
42
|
+
* const paths = stopProxyTracking(state);
|
|
43
|
+
*/
|
|
44
|
+
export declare function createProxyTrackerState<T>(): ProxyTrackerState<T>;
|
|
45
|
+
/**
|
|
46
|
+
* Start tracking property accesses
|
|
47
|
+
*
|
|
48
|
+
* Clears previous tracked paths and enables tracking mode.
|
|
49
|
+
*/
|
|
50
|
+
export declare function startProxyTracking<T>(state: ProxyTrackerState<T>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Stop tracking and return the tracked paths
|
|
53
|
+
*
|
|
54
|
+
* Returns a new Set containing all tracked paths.
|
|
55
|
+
*/
|
|
56
|
+
export declare function stopProxyTracking<T>(state: ProxyTrackerState<T>): Set<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Create a proxy for an array with property access tracking
|
|
59
|
+
*
|
|
60
|
+
* Tracks:
|
|
61
|
+
* - Array element access (arr[0])
|
|
62
|
+
* - Length access (arr.length)
|
|
63
|
+
* - Array method calls (arr.map, arr.filter, etc.)
|
|
64
|
+
*/
|
|
65
|
+
export declare function createArrayProxy<T, U>(state: ProxyTrackerState<T>, target: U[], path: string, depth?: number): U[];
|
|
66
|
+
/**
|
|
67
|
+
* Create a proxy for an object with property access tracking
|
|
68
|
+
*
|
|
69
|
+
* This is the core proxy creation function that recursively creates proxies
|
|
70
|
+
* for nested objects and arrays.
|
|
71
|
+
*
|
|
72
|
+
* Tracks:
|
|
73
|
+
* - Property access (obj.prop)
|
|
74
|
+
* - Nested property access (obj.nested.prop)
|
|
75
|
+
* - 'in' operator usage ('prop' in obj)
|
|
76
|
+
* - Object.keys, Object.entries, etc.
|
|
77
|
+
*/
|
|
78
|
+
export declare function createProxyInternal<T>(state: ProxyTrackerState<T>, target: T, path?: string, depth?: number): T;
|
|
79
|
+
/**
|
|
80
|
+
* Create a proxy for a target with caching
|
|
81
|
+
*
|
|
82
|
+
* If the target hasn't changed since the last call, returns the cached proxy.
|
|
83
|
+
* Otherwise, creates a new proxy and caches it.
|
|
84
|
+
*
|
|
85
|
+
* This is the main entry point for creating tracked proxies.
|
|
86
|
+
*/
|
|
87
|
+
export declare function createProxyForTarget<T>(state: ProxyTrackerState<T>, target: T): T;
|
|
88
|
+
//# sourceMappingURL=proxy-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-tracker.d.ts","sourceRoot":"","sources":["../../src/tracking/proxy-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAI3D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,wCAAwC;IACxC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,2CAA2C;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,gEAAgE;IAEhE,mBAAmB,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IACxD,kEAAkE;IAClE,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC;IAC3B,2CAA2C;IAC3C,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAUjE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAG7E;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EACnC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,EAAE,EACX,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAU,GAChB,CAAC,EAAE,CA4DL;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,EACT,IAAI,GAAE,MAAW,EACjB,KAAK,GAAE,MAAU,GAChB,CAAC,CAsFH;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,GACR,CAAC,CAcH"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
declare const brand: unique symbol;
|
|
2
|
+
export type Brand<T, B> = T & {
|
|
3
|
+
[brand]: B;
|
|
4
|
+
};
|
|
5
|
+
export type BrandedId<B> = Brand<string, B>;
|
|
6
|
+
export type InstanceId = Brand<string, 'InstanceId'>;
|
|
7
|
+
export declare function instanceId(id: string): InstanceId;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=branded.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branded.d.ts","sourceRoot":"","sources":["../../src/types/branded.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAC;AAEnC,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAC7C,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAErD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAEjD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base event interface for type-safe event system
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Base event interface
|
|
6
|
+
* Used by Vertex for event-driven state management
|
|
7
|
+
*/
|
|
8
|
+
export interface BaseEvent {
|
|
9
|
+
readonly type: string;
|
|
10
|
+
readonly timestamp: number;
|
|
11
|
+
readonly source?: string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StateContainer } from '../core/StateContainer';
|
|
2
|
+
export type ExtractState<T> = T extends StateContainer<infer S> ? S : never;
|
|
3
|
+
export type ExtractConstructorArgs<T> = T extends new (...args: infer P) => any ? P : never[];
|
|
4
|
+
export type BlocConstructor<TBloc extends StateContainer<any>> = (new (...args: any[]) => TBloc) & {
|
|
5
|
+
resolve(instanceKey?: string, ...args: any[]): TBloc;
|
|
6
|
+
get(instanceKey?: string): TBloc;
|
|
7
|
+
getSafe(instanceKey?: string): {
|
|
8
|
+
error: Error;
|
|
9
|
+
instance: null;
|
|
10
|
+
} | {
|
|
11
|
+
error: null;
|
|
12
|
+
instance: TBloc;
|
|
13
|
+
};
|
|
14
|
+
release(instanceKey?: string): void;
|
|
15
|
+
isolated?: boolean;
|
|
16
|
+
keepAlive?: boolean;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/types/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE5E,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAC3E,CAAC,GACD,KAAK,EAAE,CAAC;AAEZ,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAChE,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,KAAK,CAAC,GAAG;IACZ,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IACrD,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,OAAO,CACL,WAAW,CAAC,EAAE,MAAM,GACnB;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAA;KAAE,CAAC;IACvE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep equality check with circular reference handling
|
|
3
|
+
*/
|
|
4
|
+
export declare function deepEqual<T>(a: T, b: T, seen?: WeakMap<WeakKey, any>): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Shallow equality check (more performant for simple cases)
|
|
7
|
+
*/
|
|
8
|
+
export declare function shallowEqual<T>(a: T, b: T): boolean;
|
|
9
|
+
//# sourceMappingURL=equality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equality.d.ts","sourceRoot":"","sources":["../../src/utils/equality.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,wBAAgB,GAAG,OAAO,CA4DtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,OAAO,CAWnD"}
|