@blac/react 2.0.0-rc.1 → 2.0.0-rc.4

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,173 +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
- // keep as-is; no additional processing
34
- }
35
- if (match &&
36
- match[1] !== 'Object' &&
37
- !match[1].startsWith('use') &&
38
- !match[1].startsWith('Use')) {
39
- componentName.current = match[1];
40
- break;
41
- }
42
- }
43
- // If still no name, try to get it from the bloc constructor name
44
- if (!componentName.current) {
45
- const blocName = blocConstructor.name;
46
- if (blocName && blocName !== 'Object') {
47
- // Remove 'Cubit' or 'Bloc' suffix to guess component name
48
- componentName.current =
49
- blocName.replace(/(Cubit|Bloc)$/, '') || 'Component';
50
- }
51
- else {
52
- componentName.current = 'Component';
53
- }
54
- }
55
- }
56
- catch {
57
- componentName.current = 'Component';
58
- }
59
- }
60
- // Pass through options
61
- const normalizedOptions = options;
62
- // Generate instance id from static props if needed
63
- const instanceKey = (0, react_1.useMemo)(() => {
64
- if (normalizedOptions?.instanceId) {
65
- return normalizedOptions.instanceId;
66
- }
67
- if (normalizedOptions?.staticProps) {
68
- return (0, core_1.generateInstanceIdFromProps)(normalizedOptions.staticProps) || null;
69
- }
70
- return null;
71
- }, [normalizedOptions?.instanceId, normalizedOptions?.staticProps]);
72
- // Track adapter creation - recreate when instanceId/staticProps change
73
- const adapter = (0, react_1.useMemo)(() => {
74
- const newAdapter = new core_1.BlacAdapter({
75
- componentRef: componentRef,
76
- blocConstructor,
77
- }, {
78
- instanceId: normalizedOptions?.instanceId,
79
- dependencies: normalizedOptions?.dependencies,
80
- staticProps: normalizedOptions?.staticProps,
81
- onMount: normalizedOptions?.onMount,
82
- onUnmount: normalizedOptions?.onUnmount,
83
- });
84
- // Set component name for rerender logging
85
- if (componentName.current) {
86
- newAdapter.setComponentName(componentName.current);
87
- }
88
- return newAdapter;
89
- }, [blocConstructor, instanceKey]); // Recreate adapter when instance key changes
90
- // Reset tracking at the start of each render to ensure we only track
91
- // properties accessed during the current render
92
- adapter.resetTracking();
93
- // Notify plugins about render
94
- adapter.notifyRender();
95
- // Update adapter options when they change (except instanceId/staticProps which recreate the adapter)
96
- const optionsChangeCount = (0, react_1.useRef)(0);
97
- (0, react_1.useEffect)(() => {
98
- optionsChangeCount.current++;
99
- adapter.options = {
100
- instanceId: normalizedOptions?.instanceId,
101
- dependencies: normalizedOptions?.dependencies,
102
- staticProps: normalizedOptions?.staticProps,
103
- onMount: normalizedOptions?.onMount,
104
- onUnmount: normalizedOptions?.onUnmount,
105
- };
106
- }, [
107
- adapter,
108
- normalizedOptions?.dependencies,
109
- normalizedOptions?.onMount,
110
- normalizedOptions?.onUnmount,
111
- ]);
112
- // Register as consumer and handle lifecycle
113
- const mountEffectCount = (0, react_1.useRef)(0);
114
- (0, react_1.useEffect)(() => {
115
- mountEffectCount.current++;
116
- adapter.mount();
117
- return () => {
118
- adapter.unmount();
119
- };
120
- }, [adapter]);
121
- // Subscribe to state changes using useSyncExternalStore
122
- const subscribeMemoCount = (0, react_1.useRef)(0);
123
- const subscribe = (0, react_1.useMemo)(() => {
124
- subscribeMemoCount.current++;
125
- let _subscriptionCount = 0;
126
- return (onStoreChange) => {
127
- _subscriptionCount++;
128
- const unsubscribe = adapter.createSubscription({
129
- onChange: () => {
130
- onStoreChange();
131
- },
132
- });
133
- return () => {
134
- unsubscribe();
135
- };
136
- };
137
- }, [adapter]);
138
- const snapshotCount = (0, react_1.useRef)(0);
139
- const serverSnapshotCount = (0, react_1.useRef)(0);
140
- const rawState = (0, react_1.useSyncExternalStore)(subscribe,
141
- // Get snapshot
142
- () => {
143
- snapshotCount.current++;
144
- const bloc = adapter.blocInstance;
145
- const state = bloc.state;
146
- return state;
147
- },
148
- // Get server snapshot (same as client for now)
149
- () => {
150
- const bloc = adapter.blocInstance;
151
- serverSnapshotCount.current++;
152
- const state = bloc.state;
153
- return state;
154
- });
155
- // Create proxies for fine-grained tracking (if enabled)
156
- const stateMemoCount = (0, react_1.useRef)(0);
157
- const finalState = (0, react_1.useMemo)(() => {
158
- stateMemoCount.current++;
159
- // Always return the proxy - it will handle whether to actually proxy or not
160
- const proxyState = adapter.getStateProxy();
161
- return proxyState;
162
- }, [rawState, adapter]);
163
- const blocMemoCount = (0, react_1.useRef)(0);
164
- const finalBloc = (0, react_1.useMemo)(() => {
165
- blocMemoCount.current++;
166
- const proxyBloc = adapter.getBlocProxy();
167
- return proxyBloc;
168
- }, [adapter]);
169
- // Log final hook return
170
- return [finalState, finalBloc];
171
- }
172
- exports.default = useBloc;
173
- //# 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":";;AAqCA,uCA2GC;AAhJD,qCAMoB;AACpB,iCAAwC;AA0BxC;;;GAGG;AACH,SAAwB,oBAAoB,CAG1C,eAAkB,EAClB,UAAiD,EAAE;IAEnD,MAAM,MAAM,GAAG,IAAA,cAAM,EAAS,YAAY,IAAA,mBAAY,GAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAA,cAAM,EAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IACnD,MAAM,oBAAoB,GAAG,IAAA,cAAM,EAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAA,cAAM,EAAyB,IAAI,CAAC,CAAC;IAEzD,8BAA8B;IAC9B,MAAM,IAAI,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACxB,MAAM,IAAI,GAAG,WAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,eAA2C,CAAC;QAEzD,mDAAmD;QACnD,IACG,IAAI,CAAC,WAAmB,CAAC,QAAQ;YACjC,eAAuB,CAAC,QAAQ,EACjC,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,eAAe,CACjC,OAAO,EAAE,WAAW,CACF,CAAC;YACrB,MAAM,QAAQ,GACZ,OAAO,EAAE,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,IAAI,IAAA,mBAAY,GAAE,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,mDAAmD;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YACnC,EAAE,EAAE,OAAO,EAAE,EAAE;YACf,iBAAiB,EAAE,OAAO,EAAE,WAAW;SACxC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnC,kCAAkC;IAClC,MAAM,aAAa,GAAG,IAAA,eAAO,EAC3B,GAAG,EAAE,CAAC,CAAC;QACL,WAAW,EAAE,GAAG,EAAE;YAChB,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC;YAC5C,OAAO,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,CAAC;QACD,SAAS,EAAE,CAAC,QAAoB,EAAE,EAAE;YAClC,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,0CAA0C;gBAC1C,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAClB,CAAC;YAED,4CAA4C;YAC5C,MAAM,YAAY,GAAG,CACnB,QAAoC,EACpC,QAAoC,EACpC,EAAE;gBACF,IAAI,CAAC;oBACH,4CAA4C;oBAC5C,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC5B,oBAAoB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBAErC,4BAA4B;oBAC5B,IAAI,OAAO,CAAC,QAAQ,IAAI,eAAe,EAAE,CAAC;wBACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;oBACxD,CAAC;oBAED,4CAA4C;oBAC5C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,QAAgB,CAAC,QAAQ,CAAC,CAAC;oBAC9B,CAAC;yBAAM,CAAC;wBACN,QAAQ,EAAE,CAAC;oBACb,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;oBAChE,oDAAoD;gBACtD,CAAC;YACH,CAAC,CAAC;YAEF,4CAA4C;YAC5C,IAAI,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC;YAE1C,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtD,MAAM,QAAQ,GAAG,aAAa,CAAC;gBAC/B,aAAa,GAAG,KAAK,CAAC;gBACtB,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YACH,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,iBAAiB,EAAE,GAAG,EAAE;YACtB,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC;YAC5C,OAAO,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,CAAC;KACF,CAAC,EACF,EAAE,CACH,CAAC;IAEF,sBAAsB;IACtB,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;IAE3B,OAAO;QACL,aAAa;QACb,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,WAAW;QACrB,iBAAiB,EAAE,oBAAoB;QACvC,GAAG,EAAE,MAAM,CAAC,OAAO;KACpB,CAAC;AACJ,CAAC"}