@pravosleva/reactive-engine 1.6.0 → 1.6.1

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.
@@ -1,6 +1,5 @@
1
- const e=require("../core.cjs");let t=require("react");var n=class extends e.ReactiveEngine{frameworkPrefix=`react`;reactAdapters={useState:t.useState,useEffect:t.useEffect};setReactAdapters(e,t){this.reactAdapters={useState:e,useEffect:t}}use(e){if(!this.reactAdapters)throw Error(`[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).`);if(!e||typeof e.subscribe!=`function`){let t=`
2
- [Reactive Error]: engine.use() получил некорректный объект!
3
- Скорее всего, вы пытаетесь подписаться на свойство сервиса, которое не было инициализировано.
4
- Проверьте, что в классе написано: public mySignal = this.engine.signal(...)
5
- `;throw console.error(t,{item:e}),Error(t)}let[t,n]=this.reactAdapters.useState(e.value);return this.reactAdapters.useEffect(()=>e.subscribe(n),[e]),t}};exports.ReactiveEngine4React=n;
1
+ const e=require("../core.cjs");let t=require("react");var n=class extends e.ReactiveEngine{frameworkPrefix=`react`;reactAdapters={useState:t.useState,useEffect:t.useEffect};setReactAdapters(e,t){this.reactAdapters={useState:e,useEffect:t}}use(e){if(!this.reactAdapters)throw Error(`[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).`);if(e&&typeof e==`object`&&`subscribe`in e&&typeof e.subscribe==`function`){let t=e,[n,r]=this.reactAdapters.useState(t.value);return this.reactAdapters.useEffect(()=>t.subscribe(r),[t]),n}if(e&&typeof e==`object`){let[,t]=this.reactAdapters.useState([]);return this.reactAdapters.useEffect(()=>{let n=this.effect(()=>{try{JSON.stringify(e)}catch{Object.values(e)}t([])},`react-use-reactive-proxy`);return()=>n()},[e]),e}let t=`
2
+ [Reactive Error]: engine.use() получил некорректный объект!
3
+ Проверьте, что передаваемый инстанс является Сигналом или создан через engine.reactive().
4
+ `;throw console.error(t,{item:e}),Error(t)}};exports.ReactiveEngine4React=n;
6
5
  //# sourceMappingURL=ReactiveEngine4React.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReactiveEngine4React.cjs","names":[],"sources":["../../src/react/ReactiveEngine4React.ts"],"sourcesContent":["import { useState as useStateFromReact, useEffect as useEffectFromReact } from 'react'\nimport { ReactiveEngine as OriginalReactiveEngine, CleanupFn } from '../core/core'\n\n/**\n * Класс адаптера для интеграции реактивного движка с React.\n * Наследует функциональность оригинального реактивного движка и предоставляет специализированные методы для работы с React.\n */\nexport class ReactiveEngine4React extends OriginalReactiveEngine {\n protected override frameworkPrefix = 'react'\n\n // Описываем строгие типы для адаптеров React, чтобы не ломать встроенные типы React.\n private reactAdapters: {\n useState: typeof useStateFromReact;\n useEffect: typeof useEffectFromReact;\n } = {\n useState: useStateFromReact,\n useEffect: useEffectFromReact,\n }\n\n /**\n * Установка адаптеров React.\n * @function setReactAdapters\n * @param {Function} useState - Функция useState из React.\n * @param {Function} useEffect - Функция useEffect из React.\n * @returns {void}\n * @source\n */\n public setReactAdapters(\n useState: typeof useStateFromReact,\n useEffect: typeof useEffectFromReact\n ): void {\n this.reactAdapters = { useState, useEffect }\n }\n\n /**\n * Использование реактивного значения в React компоненте.\n * @template T\n * @function use\n * @param {{ value: T; subscribe: (cb: (v: T) => void) => CleanupFn }} item - Реактивный объект.\n * @returns {T} - Значение реактивного объекта.\n * @source\n */\n public use<T>(item: { value: T; subscribe: (cb: (v: T) => void) => CleanupFn }): T {\n if (!this.reactAdapters) {\n throw new Error(\"[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).\")\n }\n\n // NOTE: (защита) проверяем, что нам передали объект сигнала\n if (!item || typeof item.subscribe !== 'function') {\n const errorMsg = `\n [Reactive Error]: engine.use() получил некорректный объект!\n Скорее всего, вы пытаетесь подписаться на свойство сервиса, которое не было инициализировано.\n Проверьте, что в классе написано: public mySignal = this.engine.signal(...)\n `\n console.error(errorMsg, { item })\n throw new Error(errorMsg)\n }\n const [val, setVal] = this.reactAdapters.useState(item.value)\n\n this.reactAdapters.useEffect(\n () => {\n return item.subscribe(setVal)\n },\n [item]\n )\n\n return val\n }\n}\n"],"mappings":"sDAOA,IAAa,EAAb,cAA0C,EAAA,cAAuB,CAC/D,gBAAqC,QAGrC,cAGI,CACA,SAAU,EAAA,SACV,UAAW,EAAA,SACb,EAUF,iBACE,EACA,EACM,CACN,KAAK,cAAgB,CAAE,WAAU,WAAU,CAC7C,CAUA,IAAc,EAAqE,CACjF,GAAI,CAAC,KAAK,cACR,MAAU,MAAM,sGAAsG,EAIxH,GAAI,CAAC,GAAQ,OAAO,EAAK,WAAc,WAAY,CACjD,IAAM,EAAW;;;;QAMjB,MADA,QAAQ,MAAM,EAAU,CAAE,MAAK,CAAC,EACtB,MAAM,CAAQ,CAC1B,CACA,GAAM,CAAC,EAAK,GAAU,KAAK,cAAc,SAAS,EAAK,KAAK,EAS5D,OAPA,KAAK,cAAc,cAER,EAAK,UAAU,CAAM,EAE9B,CAAC,CAAI,CACP,EAEO,CACT,CACF"}
1
+ {"version":3,"file":"ReactiveEngine4React.cjs","names":[],"sources":["../../src/react/ReactiveEngine4React.ts"],"sourcesContent":["import { useState as useStateFromReact, useEffect as useEffectFromReact } from 'react'\nimport { ReactiveEngine as OriginalReactiveEngine, CleanupFn } from '../core/core'\n\n// 1. Описываем строгий контракт для примитивных Сигналов/Computed\nexport interface ISignalLike<V> {\n value: V;\n subscribe: (cb: (v: V) => void) => CleanupFn;\n}\n\n/**\n * Класс адаптера для интеграции реактивного движка с React.\n */\nexport class ReactiveEngine4React extends OriginalReactiveEngine {\n protected override frameworkPrefix = 'react'\n\n private reactAdapters: {\n useState: typeof useStateFromReact;\n useEffect: typeof useEffectFromReact;\n } = {\n useState: useStateFromReact,\n useEffect: useEffectFromReact,\n }\n\n public setReactAdapters(\n useState: typeof useStateFromReact,\n useEffect: typeof useEffectFromReact\n ): void {\n this.reactAdapters = { useState, useEffect }\n }\n\n /**\n * Использование реактивного значения в React-компоненте.\n * Поддерживает как атомарные Сигналы/Computed, так и глубокие реактивные Proxy-объекты.\n *\n * @template T\n * @param {T} item - Реактивный объект (сигнал или прокси)\n * @returns {T extends ISignalLike<infer V> ? V : T} - Развернутое значение или сам прокси-объект\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? V : T {\n if (!this.reactAdapters) {\n throw new Error(\"[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).\")\n }\n\n const isSignal = item &&\n typeof item === 'object' &&\n 'subscribe' in item &&\n typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // 1. Сценарий А: Передан примитивный Сигнал или Computed\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n const [val, setVal] = this.reactAdapters.useState<unknown>(signalItem.value)\n\n this.reactAdapters.useEffect(\n () => {\n return signalItem.subscribe(setVal)\n },\n [signalItem]\n )\n\n return val as (T extends ISignalLike<infer V> ? V : T)\n }\n\n // 2. Сценарий Б: Передан Proxy-объект из метода reactive()\n if (item && typeof item === 'object') {\n const [, forceUpdate] = this.reactAdapters.useState<unknown[]>([])\n\n // Используем useEffect для безопасного создания подписки вне фазы рендера React,\n // но внутри эффекта мы ПРИНУДИТЕЛЬНО запускаем глубокое считывание\n // свойств объекта (прогрев графа), чтобы ядро зацепило зависимости!\n this.reactAdapters.useEffect(() => {\n const unsubscribe = this.effect(() => {\n // Ленивый глубокий проход по свойствам объекта первого уровня,\n // чтобы Proxy-геттеры (строка 618 в core.ts) гарантированно перехватили\n // этот эффект и добавили его в propsSubscribers!\n try {\n // Рекурсивно или плоско считываем ключи\n JSON.stringify(item)\n } catch (e) {\n // Защита от круговых ссылок, просто считываем ключи первого уровня\n Object.values(item as Record<string, unknown>)\n }\n\n // При изменении любого из этих ключей триггерим ререндер React\n forceUpdate([])\n }, 'react-use-reactive-proxy')\n\n return () => unsubscribe()\n }, [item])\n\n // Возвращаем сам прокси-объект. При чтении в JSX он будет работать нативно.\n return item as (T extends ISignalLike<infer V> ? V : T)\n }\n\n const errorMsg = `\n [Reactive Error]: engine.use() получил некорректный объект!\n Проверьте, что передаваемый инстанс является Сигналом или создан через engine.reactive().\n `\n console.error(errorMsg, { item })\n throw new Error(errorMsg)\n }\n\n}\n"],"mappings":"sDAYA,IAAa,EAAb,cAA0C,EAAA,cAAuB,CAC/D,gBAAqC,QAErC,cAGI,CACA,SAAU,EAAA,SACV,UAAW,EAAA,SACb,EAEF,iBACE,EACA,EACM,CACN,KAAK,cAAgB,CAAE,WAAU,WAAU,CAC7C,CAUA,IAAc,EAAiD,CAC7D,GAAI,CAAC,KAAK,cACR,MAAU,MAAM,sGAAsG,EASxH,GANiB,GACA,OAAO,GAAS,UAChB,cAAe,GACf,OAAQ,EAAiC,WAAc,WAG1D,CACZ,IAAM,EAAc,EACd,CAAC,EAAK,GAAU,KAAK,cAAc,SAAkB,EAAW,KAAK,EAS3E,OAPA,KAAK,cAAc,cAER,EAAW,UAAU,CAAM,EAEpC,CAAC,CAAU,CACb,EAEO,CACT,CAGA,GAAI,GAAQ,OAAO,GAAS,SAAU,CACpC,GAAM,EAAG,GAAe,KAAK,cAAc,SAAoB,CAAC,CAAC,EA0BjE,OArBA,KAAK,cAAc,cAAgB,CACjC,IAAM,EAAc,KAAK,WAAa,CAIpC,GAAI,CAEF,KAAK,UAAU,CAAI,CACrB,MAAY,CAEV,OAAO,OAAO,CAA+B,CAC/C,CAGA,EAAY,CAAC,CAAC,CAChB,EAAG,0BAA0B,EAE7B,UAAa,EAAY,CAC3B,EAAG,CAAC,CAAI,CAAC,EAGF,CACT,CAEA,IAAM,EAAW;;;MAKjB,MADA,QAAQ,MAAM,EAAU,CAAE,MAAK,CAAC,EACtB,MAAM,CAAQ,CAC1B,CAEF"}
@@ -1,32 +1,24 @@
1
1
  import { useState as useStateFromReact, useEffect as useEffectFromReact } from 'react';
2
2
  import { ReactiveEngine as OriginalReactiveEngine, CleanupFn } from '../core/core';
3
+ export interface ISignalLike<V> {
4
+ value: V;
5
+ subscribe: (cb: (v: V) => void) => CleanupFn;
6
+ }
3
7
  /**
4
8
  * Класс адаптера для интеграции реактивного движка с React.
5
- * Наследует функциональность оригинального реактивного движка и предоставляет специализированные методы для работы с React.
6
9
  */
7
10
  export declare class ReactiveEngine4React extends OriginalReactiveEngine {
8
11
  protected frameworkPrefix: string;
9
12
  private reactAdapters;
10
- /**
11
- * Установка адаптеров React.
12
- * @function setReactAdapters
13
- * @param {Function} useState - Функция useState из React.
14
- * @param {Function} useEffect - Функция useEffect из React.
15
- * @returns {void}
16
- * @source
17
- */
18
13
  setReactAdapters(useState: typeof useStateFromReact, useEffect: typeof useEffectFromReact): void;
19
14
  /**
20
- * Использование реактивного значения в React компоненте.
15
+ * Использование реактивного значения в React-компоненте.
16
+ * Поддерживает как атомарные Сигналы/Computed, так и глубокие реактивные Proxy-объекты.
17
+ *
21
18
  * @template T
22
- * @function use
23
- * @param {{ value: T; subscribe: (cb: (v: T) => void) => CleanupFn }} item - Реактивный объект.
24
- * @returns {T} - Значение реактивного объекта.
25
- * @source
19
+ * @param {T} item - Реактивный объект (сигнал или прокси)
20
+ * @returns {T extends ISignalLike<infer V> ? V : T} - Развернутое значение или сам прокси-объект
26
21
  */
27
- use<T>(item: {
28
- value: T;
29
- subscribe: (cb: (v: T) => void) => CleanupFn;
30
- }): T;
22
+ use<T>(item: T): T extends ISignalLike<infer V> ? V : T;
31
23
  }
32
24
  //# sourceMappingURL=ReactiveEngine4React.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReactiveEngine4React.d.ts","sourceRoot":"","sources":["../../src/react/ReactiveEngine4React.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,OAAO,CAAA;AACtF,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAElF;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,UAAmB,eAAe,SAAU;IAG5C,OAAO,CAAC,aAAa,CAMlB;IAEH;;;;;;;OAOG;IACI,gBAAgB,CACrB,QAAQ,EAAE,OAAO,iBAAiB,EAClC,SAAS,EAAE,OAAO,kBAAkB,GACnC,IAAI;IAIP;;;;;;;OAOG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,CAAA;KAAE,GAAG,CAAC;CA0BnF"}
1
+ {"version":3,"file":"ReactiveEngine4React.d.ts","sourceRoot":"","sources":["../../src/react/ReactiveEngine4React.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,OAAO,CAAA;AACtF,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGlF,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,CAAC;CAC9C;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,sBAAsB;IAC9D,UAAmB,eAAe,SAAU;IAE5C,OAAO,CAAC,aAAa,CAMlB;IAEI,gBAAgB,CACrB,QAAQ,EAAE,OAAO,iBAAiB,EAClC,SAAS,EAAE,OAAO,kBAAkB,GACnC,IAAI;IAIP;;;;;;;OAOG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CAgE/D"}
@@ -15,12 +15,26 @@ var r = class extends e {
15
15
  }
16
16
  use(e) {
17
17
  if (!this.reactAdapters) throw Error("[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).");
18
- if (!e || typeof e.subscribe != "function") {
19
- let t = "\n [Reactive Error]: engine.use() получил некорректный объект!\n Скорее всего, вы пытаетесь подписаться на свойство сервиса, которое не было инициализировано.\n Проверьте, что в классе написано: public mySignal = this.engine.signal(...)\n ";
20
- throw console.error(t, { item: e }), Error(t);
18
+ if (e && typeof e == "object" && "subscribe" in e && typeof e.subscribe == "function") {
19
+ let t = e, [n, r] = this.reactAdapters.useState(t.value);
20
+ return this.reactAdapters.useEffect(() => t.subscribe(r), [t]), n;
21
21
  }
22
- let [t, n] = this.reactAdapters.useState(e.value);
23
- return this.reactAdapters.useEffect(() => e.subscribe(n), [e]), t;
22
+ if (e && typeof e == "object") {
23
+ let [, t] = this.reactAdapters.useState([]);
24
+ return this.reactAdapters.useEffect(() => {
25
+ let n = this.effect(() => {
26
+ try {
27
+ JSON.stringify(e);
28
+ } catch {
29
+ Object.values(e);
30
+ }
31
+ t([]);
32
+ }, "react-use-reactive-proxy");
33
+ return () => n();
34
+ }, [e]), e;
35
+ }
36
+ let t = "\n [Reactive Error]: engine.use() получил некорректный объект!\n Проверьте, что передаваемый инстанс является Сигналом или создан через engine.reactive().\n ";
37
+ throw console.error(t, { item: e }), Error(t);
24
38
  }
25
39
  };
26
40
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ReactiveEngine4React.mjs","names":[],"sources":["../../src/react/ReactiveEngine4React.ts"],"sourcesContent":["import { useState as useStateFromReact, useEffect as useEffectFromReact } from 'react'\nimport { ReactiveEngine as OriginalReactiveEngine, CleanupFn } from '../core/core'\n\n/**\n * Класс адаптера для интеграции реактивного движка с React.\n * Наследует функциональность оригинального реактивного движка и предоставляет специализированные методы для работы с React.\n */\nexport class ReactiveEngine4React extends OriginalReactiveEngine {\n protected override frameworkPrefix = 'react'\n\n // Описываем строгие типы для адаптеров React, чтобы не ломать встроенные типы React.\n private reactAdapters: {\n useState: typeof useStateFromReact;\n useEffect: typeof useEffectFromReact;\n } = {\n useState: useStateFromReact,\n useEffect: useEffectFromReact,\n }\n\n /**\n * Установка адаптеров React.\n * @function setReactAdapters\n * @param {Function} useState - Функция useState из React.\n * @param {Function} useEffect - Функция useEffect из React.\n * @returns {void}\n * @source\n */\n public setReactAdapters(\n useState: typeof useStateFromReact,\n useEffect: typeof useEffectFromReact\n ): void {\n this.reactAdapters = { useState, useEffect }\n }\n\n /**\n * Использование реактивного значения в React компоненте.\n * @template T\n * @function use\n * @param {{ value: T; subscribe: (cb: (v: T) => void) => CleanupFn }} item - Реактивный объект.\n * @returns {T} - Значение реактивного объекта.\n * @source\n */\n public use<T>(item: { value: T; subscribe: (cb: (v: T) => void) => CleanupFn }): T {\n if (!this.reactAdapters) {\n throw new Error(\"[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).\")\n }\n\n // NOTE: (защита) проверяем, что нам передали объект сигнала\n if (!item || typeof item.subscribe !== 'function') {\n const errorMsg = `\n [Reactive Error]: engine.use() получил некорректный объект!\n Скорее всего, вы пытаетесь подписаться на свойство сервиса, которое не было инициализировано.\n Проверьте, что в классе написано: public mySignal = this.engine.signal(...)\n `\n console.error(errorMsg, { item })\n throw new Error(errorMsg)\n }\n const [val, setVal] = this.reactAdapters.useState(item.value)\n\n this.reactAdapters.useEffect(\n () => {\n return item.subscribe(setVal)\n },\n [item]\n )\n\n return val\n }\n}\n"],"mappings":";;;AAOA,IAAa,IAAb,cAA0C,EAAuB;CAC/D,kBAAqC;CAGrC,gBAGI;EACU;EACC;CACb;CAUF,iBACE,GACA,GACM;EACN,KAAK,gBAAgB;GAAE;GAAU;EAAU;CAC7C;CAUA,IAAc,GAAqE;EACjF,IAAI,CAAC,KAAK,eACR,MAAU,MAAM,sGAAsG;EAIxH,IAAI,CAAC,KAAQ,OAAO,EAAK,aAAc,YAAY;GACjD,IAAM,IAAW;GAMjB,MADA,QAAQ,MAAM,GAAU,EAAE,QAAK,CAAC,GACtB,MAAM,CAAQ;EAC1B;EACA,IAAM,CAAC,GAAK,KAAU,KAAK,cAAc,SAAS,EAAK,KAAK;EAS5D,OAPA,KAAK,cAAc,gBAER,EAAK,UAAU,CAAM,GAE9B,CAAC,CAAI,CACP,GAEO;CACT;AACF"}
1
+ {"version":3,"file":"ReactiveEngine4React.mjs","names":[],"sources":["../../src/react/ReactiveEngine4React.ts"],"sourcesContent":["import { useState as useStateFromReact, useEffect as useEffectFromReact } from 'react'\nimport { ReactiveEngine as OriginalReactiveEngine, CleanupFn } from '../core/core'\n\n// 1. Описываем строгий контракт для примитивных Сигналов/Computed\nexport interface ISignalLike<V> {\n value: V;\n subscribe: (cb: (v: V) => void) => CleanupFn;\n}\n\n/**\n * Класс адаптера для интеграции реактивного движка с React.\n */\nexport class ReactiveEngine4React extends OriginalReactiveEngine {\n protected override frameworkPrefix = 'react'\n\n private reactAdapters: {\n useState: typeof useStateFromReact;\n useEffect: typeof useEffectFromReact;\n } = {\n useState: useStateFromReact,\n useEffect: useEffectFromReact,\n }\n\n public setReactAdapters(\n useState: typeof useStateFromReact,\n useEffect: typeof useEffectFromReact\n ): void {\n this.reactAdapters = { useState, useEffect }\n }\n\n /**\n * Использование реактивного значения в React-компоненте.\n * Поддерживает как атомарные Сигналы/Computed, так и глубокие реактивные Proxy-объекты.\n *\n * @template T\n * @param {T} item - Реактивный объект (сигнал или прокси)\n * @returns {T extends ISignalLike<infer V> ? V : T} - Развернутое значение или сам прокси-объект\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? V : T {\n if (!this.reactAdapters) {\n throw new Error(\"[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).\")\n }\n\n const isSignal = item &&\n typeof item === 'object' &&\n 'subscribe' in item &&\n typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // 1. Сценарий А: Передан примитивный Сигнал или Computed\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n const [val, setVal] = this.reactAdapters.useState<unknown>(signalItem.value)\n\n this.reactAdapters.useEffect(\n () => {\n return signalItem.subscribe(setVal)\n },\n [signalItem]\n )\n\n return val as (T extends ISignalLike<infer V> ? V : T)\n }\n\n // 2. Сценарий Б: Передан Proxy-объект из метода reactive()\n if (item && typeof item === 'object') {\n const [, forceUpdate] = this.reactAdapters.useState<unknown[]>([])\n\n // Используем useEffect для безопасного создания подписки вне фазы рендера React,\n // но внутри эффекта мы ПРИНУДИТЕЛЬНО запускаем глубокое считывание\n // свойств объекта (прогрев графа), чтобы ядро зацепило зависимости!\n this.reactAdapters.useEffect(() => {\n const unsubscribe = this.effect(() => {\n // Ленивый глубокий проход по свойствам объекта первого уровня,\n // чтобы Proxy-геттеры (строка 618 в core.ts) гарантированно перехватили\n // этот эффект и добавили его в propsSubscribers!\n try {\n // Рекурсивно или плоско считываем ключи\n JSON.stringify(item)\n } catch (e) {\n // Защита от круговых ссылок, просто считываем ключи первого уровня\n Object.values(item as Record<string, unknown>)\n }\n\n // При изменении любого из этих ключей триггерим ререндер React\n forceUpdate([])\n }, 'react-use-reactive-proxy')\n\n return () => unsubscribe()\n }, [item])\n\n // Возвращаем сам прокси-объект. При чтении в JSX он будет работать нативно.\n return item as (T extends ISignalLike<infer V> ? V : T)\n }\n\n const errorMsg = `\n [Reactive Error]: engine.use() получил некорректный объект!\n Проверьте, что передаваемый инстанс является Сигналом или создан через engine.reactive().\n `\n console.error(errorMsg, { item })\n throw new Error(errorMsg)\n }\n\n}\n"],"mappings":";;;AAYA,IAAa,IAAb,cAA0C,EAAuB;CAC/D,kBAAqC;CAErC,gBAGI;EACU;EACC;CACb;CAEF,iBACE,GACA,GACM;EACN,KAAK,gBAAgB;GAAE;GAAU;EAAU;CAC7C;CAUA,IAAc,GAAiD;EAC7D,IAAI,CAAC,KAAK,eACR,MAAU,MAAM,sGAAsG;EASxH,IANiB,KACA,OAAO,KAAS,YAChB,eAAe,KACf,OAAQ,EAAiC,aAAc,YAG1D;GACZ,IAAM,IAAc,GACd,CAAC,GAAK,KAAU,KAAK,cAAc,SAAkB,EAAW,KAAK;GAS3E,OAPA,KAAK,cAAc,gBAER,EAAW,UAAU,CAAM,GAEpC,CAAC,CAAU,CACb,GAEO;EACT;EAGA,IAAI,KAAQ,OAAO,KAAS,UAAU;GACpC,IAAM,GAAG,KAAe,KAAK,cAAc,SAAoB,CAAC,CAAC;GA0BjE,OArBA,KAAK,cAAc,gBAAgB;IACjC,IAAM,IAAc,KAAK,aAAa;KAIpC,IAAI;MAEF,KAAK,UAAU,CAAI;KACrB,QAAY;MAEV,OAAO,OAAO,CAA+B;KAC/C;KAGA,EAAY,CAAC,CAAC;IAChB,GAAG,0BAA0B;IAE7B,aAAa,EAAY;GAC3B,GAAG,CAAC,CAAI,CAAC,GAGF;EACT;EAEA,IAAM,IAAW;EAKjB,MADA,QAAQ,MAAM,GAAU,EAAE,QAAK,CAAC,GACtB,MAAM,CAAQ;CAC1B;AAEF"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pravosleva/reactive-engine v1.6.0
2
+ * @pravosleva/reactive-engine v1.6.1
3
3
  * High-performance transactional reactive engine with microtask batching.
4
4
  *
5
5
  * @license MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pravosleva/reactive-engine",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "engines": {
5
5
  "node": ">=22.20.0"
6
6
  },