@blac/react 2.0.0-rc.0 → 2.0.0-rc.3

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/useBloc.js DELETED
@@ -1,175 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@blac/core");
4
- const react_1 = require("react");
5
- /**
6
- * React hook for integrating with Blac state management
7
- */
8
- function useBloc(blocConstructor, options) {
9
- // Create a unique identifier for this hook instance
10
- const renderCount = (0, react_1.useRef)(0);
11
- renderCount.current++;
12
- const componentRef = (0, react_1.useRef)({});
13
- // Get component name for debugging
14
- const componentName = (0, react_1.useRef)('');
15
- if (!componentName.current) {
16
- // Try to get component name from stack trace
17
- try {
18
- const error = new Error();
19
- const stack = error.stack || '';
20
- const lines = stack.split('\n');
21
- // Look for React component in stack - try multiple patterns
22
- for (let i = 2; i < lines.length && i < 15; i++) {
23
- const line = lines[i];
24
- // Pattern 1: "at ComponentName" or "at Object.ComponentName"
25
- let match = line.match(/at\s+(?:Object\.)?([A-Z][a-zA-Z0-9_$]*)/);
26
- // Pattern 2: Look for component files like "ComponentName.tsx"
27
- if (!match) {
28
- match = line.match(/([A-Z][a-zA-Z0-9_$]*)\.tsx/);
29
- }
30
- // Pattern 3: Look for render functions
31
- if (!match) {
32
- match = line.match(/render([A-Z][a-zA-Z0-9_$]*)/);
33
- if (match && match[1]) {
34
- match[1] = match[1]; // Use the part after "render"
35
- }
36
- }
37
- if (match &&
38
- match[1] !== 'Object' &&
39
- !match[1].startsWith('use') &&
40
- !match[1].startsWith('Use')) {
41
- componentName.current = match[1];
42
- break;
43
- }
44
- }
45
- // If still no name, try to get it from the bloc constructor name
46
- if (!componentName.current) {
47
- const blocName = blocConstructor.name;
48
- if (blocName && blocName !== 'Object') {
49
- // Remove 'Cubit' or 'Bloc' suffix to guess component name
50
- componentName.current =
51
- blocName.replace(/(Cubit|Bloc)$/, '') || 'Component';
52
- }
53
- else {
54
- componentName.current = 'Component';
55
- }
56
- }
57
- }
58
- catch (e) {
59
- componentName.current = 'Component';
60
- }
61
- }
62
- // Pass through options
63
- const normalizedOptions = options;
64
- // Generate instance id from static props if needed
65
- const instanceKey = (0, react_1.useMemo)(() => {
66
- if (normalizedOptions?.instanceId) {
67
- return normalizedOptions.instanceId;
68
- }
69
- if (normalizedOptions?.staticProps) {
70
- return (0, core_1.generateInstanceIdFromProps)(normalizedOptions.staticProps) || null;
71
- }
72
- return null;
73
- }, [normalizedOptions?.instanceId, normalizedOptions?.staticProps]);
74
- // Track adapter creation - recreate when instanceId/staticProps change
75
- const adapter = (0, react_1.useMemo)(() => {
76
- const newAdapter = new core_1.BlacAdapter({
77
- componentRef: componentRef,
78
- blocConstructor,
79
- }, {
80
- instanceId: normalizedOptions?.instanceId,
81
- dependencies: normalizedOptions?.dependencies,
82
- staticProps: normalizedOptions?.staticProps,
83
- onMount: normalizedOptions?.onMount,
84
- onUnmount: normalizedOptions?.onUnmount,
85
- });
86
- // Set component name for rerender logging
87
- if (componentName.current) {
88
- newAdapter.setComponentName(componentName.current);
89
- }
90
- return newAdapter;
91
- }, [blocConstructor, instanceKey]); // Recreate adapter when instance key changes
92
- // Reset tracking at the start of each render to ensure we only track
93
- // properties accessed during the current render
94
- adapter.resetTracking();
95
- // Notify plugins about render
96
- adapter.notifyRender();
97
- // Update adapter options when they change (except instanceId/staticProps which recreate the adapter)
98
- const optionsChangeCount = (0, react_1.useRef)(0);
99
- (0, react_1.useEffect)(() => {
100
- optionsChangeCount.current++;
101
- adapter.options = {
102
- instanceId: normalizedOptions?.instanceId,
103
- dependencies: normalizedOptions?.dependencies,
104
- staticProps: normalizedOptions?.staticProps,
105
- onMount: normalizedOptions?.onMount,
106
- onUnmount: normalizedOptions?.onUnmount,
107
- };
108
- }, [
109
- adapter,
110
- normalizedOptions?.dependencies,
111
- normalizedOptions?.onMount,
112
- normalizedOptions?.onUnmount,
113
- ]);
114
- // Register as consumer and handle lifecycle
115
- const mountEffectCount = (0, react_1.useRef)(0);
116
- (0, react_1.useEffect)(() => {
117
- mountEffectCount.current++;
118
- adapter.mount();
119
- return () => {
120
- adapter.unmount();
121
- };
122
- }, [adapter]);
123
- // Subscribe to state changes using useSyncExternalStore
124
- const subscribeMemoCount = (0, react_1.useRef)(0);
125
- const subscribe = (0, react_1.useMemo)(() => {
126
- subscribeMemoCount.current++;
127
- let subscriptionCount = 0;
128
- return (onStoreChange) => {
129
- subscriptionCount++;
130
- const unsubscribe = adapter.createSubscription({
131
- onChange: () => {
132
- onStoreChange();
133
- },
134
- });
135
- return () => {
136
- unsubscribe();
137
- };
138
- };
139
- }, [adapter]);
140
- const snapshotCount = (0, react_1.useRef)(0);
141
- const serverSnapshotCount = (0, react_1.useRef)(0);
142
- const rawState = (0, react_1.useSyncExternalStore)(subscribe,
143
- // Get snapshot
144
- () => {
145
- snapshotCount.current++;
146
- const bloc = adapter.blocInstance;
147
- const state = bloc.state;
148
- return state;
149
- },
150
- // Get server snapshot (same as client for now)
151
- () => {
152
- const bloc = adapter.blocInstance;
153
- serverSnapshotCount.current++;
154
- const state = bloc.state;
155
- return state;
156
- });
157
- // Create proxies for fine-grained tracking (if enabled)
158
- const stateMemoCount = (0, react_1.useRef)(0);
159
- const finalState = (0, react_1.useMemo)(() => {
160
- stateMemoCount.current++;
161
- // Always return the proxy - it will handle whether to actually proxy or not
162
- const proxyState = adapter.getStateProxy();
163
- return proxyState;
164
- }, [rawState, adapter]);
165
- const blocMemoCount = (0, react_1.useRef)(0);
166
- const finalBloc = (0, react_1.useMemo)(() => {
167
- blocMemoCount.current++;
168
- const proxyBloc = adapter.getBlocProxy();
169
- return proxyBloc;
170
- }, [adapter]);
171
- // Log final hook return
172
- return [finalState, finalBloc];
173
- }
174
- exports.default = useBloc;
175
- //# sourceMappingURL=useBloc.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useBloc.js","sourceRoot":"","sources":["../src/useBloc.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- import { BlocBase, BlocConstructor, BlocState } from '@blac/core';
2
- interface ExternalStoreOptions<B extends BlocBase<any>> {
3
- id?: string;
4
- staticProps?: ConstructorParameters<BlocConstructor<B>>[0];
5
- selector?: (currentState: BlocState<B>, previousState: BlocState<B>, instance: B) => any[];
6
- }
7
- interface ExternalStore<T> {
8
- getSnapshot: () => T | undefined;
9
- subscribe: (listener: () => void) => () => void;
10
- getServerSnapshot?: () => T | undefined;
11
- }
12
- interface ExternalBlocStoreResult<B extends BlocBase<any>> {
13
- externalStore: ExternalStore<BlocState<B>>;
14
- instance: {
15
- current: B | null;
16
- };
17
- usedKeys: {
18
- current: Set<string>;
19
- };
20
- usedClassPropKeys: {
21
- current: Set<string>;
22
- };
23
- rid: string;
24
- }
25
- /**
26
- * Hook for using an external bloc store
27
- * Provides low-level access to bloc instances for use with React's useSyncExternalStore
28
- */
29
- export default function useExternalBlocStore<B extends BlocConstructor<BlocBase<any>>>(blocConstructor: B, options?: ExternalStoreOptions<InstanceType<B>>): ExternalBlocStoreResult<InstanceType<B>>;
30
- export {};
31
- //# sourceMappingURL=useExternalBlocStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useExternalBlocStore.d.ts","sourceRoot":"","sources":["../src/useExternalBlocStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,eAAe,EACf,SAAS,EAEV,MAAM,YAAY,CAAC;AAGpB,UAAU,oBAAoB,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,EAAE,CACT,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,EAC1B,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,CAAC,KACR,GAAG,EAAE,CAAC;CACZ;AAED,UAAU,aAAa,CAAC,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CACzC;AAED,UAAU,uBAAuB,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC;IACvD,aAAa,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE;QAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;IAChC,QAAQ,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IACnC,iBAAiB,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IAC5C,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAC1C,CAAC,SAAS,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAExC,eAAe,EAAE,CAAC,EAClB,OAAO,GAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAM,GAClD,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAsG1C"}
@@ -1,93 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = useExternalBlocStore;
4
- const core_1 = require("@blac/core");
5
- const react_1 = require("react");
6
- /**
7
- * Hook for using an external bloc store
8
- * Provides low-level access to bloc instances for use with React's useSyncExternalStore
9
- */
10
- function useExternalBlocStore(blocConstructor, options = {}) {
11
- const ridRef = (0, react_1.useRef)(`external-${(0, core_1.generateUUID)()}`);
12
- const usedKeysRef = (0, react_1.useRef)(new Set());
13
- const usedClassPropKeysRef = (0, react_1.useRef)(new Set());
14
- const instanceRef = (0, react_1.useRef)(null);
15
- // Get or create bloc instance
16
- const bloc = (0, react_1.useMemo)(() => {
17
- const blac = core_1.Blac.getInstance();
18
- const base = blocConstructor;
19
- // For isolated blocs, always create a new instance
20
- if (base.constructor.isolated ||
21
- blocConstructor.isolated) {
22
- const newBloc = new blocConstructor(options?.staticProps);
23
- const uniqueId = options?.id || `${blocConstructor.name}_${(0, core_1.generateUUID)()}`;
24
- newBloc._id = uniqueId;
25
- blac.activateBloc(newBloc);
26
- return newBloc;
27
- }
28
- // For shared blocs, use the existing getBloc logic
29
- return blac.getBloc(blocConstructor, {
30
- id: options?.id,
31
- constructorParams: options?.staticProps,
32
- });
33
- }, [blocConstructor, options?.id]);
34
- // Create external store interface
35
- const externalStore = (0, react_1.useMemo)(() => ({
36
- getSnapshot: () => {
37
- const currentInstance = instanceRef.current;
38
- return currentInstance ? currentInstance.state : undefined;
39
- },
40
- subscribe: (listener) => {
41
- const currentInstance = instanceRef.current;
42
- if (!currentInstance) {
43
- // Return no-op unsubscribe if no instance
44
- return () => { };
45
- }
46
- // Wrap listener to handle errors gracefully
47
- const safeListener = (newState, oldState) => {
48
- try {
49
- // Reset tracking keys on each listener call
50
- usedKeysRef.current.clear();
51
- usedClassPropKeysRef.current.clear();
52
- // Call selector if provided
53
- if (options.selector && currentInstance) {
54
- options.selector(newState, oldState, currentInstance);
55
- }
56
- // Call listener with state if it expects it
57
- if (listener.length > 0) {
58
- listener(newState);
59
- }
60
- else {
61
- listener();
62
- }
63
- }
64
- catch (error) {
65
- console.error('Listener error in useExternalBlocStore:', error);
66
- // Don't rethrow to prevent breaking other listeners
67
- }
68
- };
69
- // Store the previous state for the listener
70
- let previousState = currentInstance.state;
71
- const unsubscribe = currentInstance.subscribe((state) => {
72
- const oldState = previousState;
73
- previousState = state;
74
- safeListener(state, oldState);
75
- });
76
- return unsubscribe;
77
- },
78
- getServerSnapshot: () => {
79
- const currentInstance = instanceRef.current;
80
- return currentInstance ? currentInstance.state : undefined;
81
- },
82
- }), []);
83
- // Update instance ref
84
- instanceRef.current = bloc;
85
- return {
86
- externalStore,
87
- instance: instanceRef,
88
- usedKeys: usedKeysRef,
89
- usedClassPropKeys: usedClassPropKeysRef,
90
- rid: ridRef.current,
91
- };
92
- }
93
- //# sourceMappingURL=useExternalBlocStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useExternalBlocStore.js","sourceRoot":"","sources":["../src/useExternalBlocStore.ts"],"names":[],"mappings":"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"}