@pravosleva/reactive-engine 2.1.1 → 2.1.2

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,2 +1,2 @@
1
- let e=require("react");function t(t){let n=t&&typeof t==`object`&&`__subscribe`in t;if(!(t&&typeof t==`object`&&`subscribe`in t)&&!n)return t;let r=(t._node||t).engine||t.engine,[i,a]=(0,e.useState)(()=>r&&`untrack`in r?r.untrack(()=>t.value===void 0?t:t.value):t.value===void 0?t:t.value);return(0,e.useEffect)(()=>{let e=`__subscribe`in t&&typeof t.__subscribe==`function`?t.__subscribe(()=>{let e=t.value===void 0?t:t.value;a(e)}):t.subscribe(e=>a(e));return()=>e()},[t]),(0,e.useDebugValue)(i),i}exports.useReactiveValue=t;
1
+ let e=require("react");function t(t){let n=t&&typeof t==`object`&&`__subscribe`in t;if(!(t&&typeof t==`object`&&`subscribe`in t)&&!n)return t;let r=t._node||t,i=r.engine||t.engine,[a,o]=(0,e.useState)(0);return(0,e.useSyncExternalStore)((0,e.useMemo)(()=>e=>{let n=()=>{o(e=>e+1),e()};return r.type!==`computed`&&`__subscribe`in t&&typeof t.__subscribe==`function`?t.__subscribe(n):t.subscribe(n)},[t,r,i]),()=>a,()=>0),(0,e.useDebugValue)(a),i&&`untrack`in i?i.untrack(()=>t.value===void 0?t:t.value):t.value===void 0?t:t.value}exports.useReactiveValue=t;
2
2
  //# sourceMappingURL=useReactiveValue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useReactiveValue.cjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useState, useEffect, useDebugValue } from 'react'\nimport { ISignalLike } from '../../core/types'\n\nexport function useReactiveValue<V>(signal: ISignalLike<V> | any): V {\n const isProxy = signal && typeof signal === 'object' && '__subscribe' in signal\n const isSignal = signal && typeof signal === 'object' && 'subscribe' in signal\n\n if (!isSignal && !isProxy) {\n return signal\n }\n\n // Находим корневой инстанс ядра реактивности фреймворка\n const rawNode = (signal as any)._node || signal\n const engine = rawNode.engine || (signal as any).engine\n\n // РЕАКТИВНЫЙ БУФЕР ДЛЯ REACT 18 CONCURRENT MODE\n // Инициализируем локальный стейт React строго актуальным значением из кэша.\n // Использование engine.untrack() защищает стартовый рендер в StrictMode от утечки контекста!\n const [localState, setLocalState] = useState(() => {\n if (engine && 'untrack' in engine) {\n return engine.untrack(() => (signal.value !== undefined ? signal.value : signal))\n }\n return signal.value !== undefined ? signal.value : signal\n })\n\n useEffect(() => {\n // Выбираем пассивный системный хук __subscribe для computed и proxy,\n // чтобы просыпаться строго один раз в конце транзакции, убирая дубли из консоли\n const hasHook = '__subscribe' in signal && typeof (signal as any).__subscribe === 'function'\n\n const triggerStoreUpdate = () => {\n // Актуализируем ленивое значение кэша строго на этапе закрытия транзакции ядра\n const freshValue = signal.value !== undefined ? signal.value : signal\n\n // Проталкиваем изменения в локальный стейт React.\n // Если это массив, React зафиксирует новую ссылку и сделает ровно 1 ререндер!\n setLocalState(freshValue)\n }\n\n const unsubscribe = hasHook\n ? (signal as any).__subscribe(triggerStoreUpdate)\n : signal.subscribe((newValue: any) => setLocalState(newValue))\n\n return () => unsubscribe()\n }, [signal])\n\n useDebugValue(localState)\n\n // Возвращаем локальный изолированный стейт. Во время фазы рендера React\n // хук больше не дергает внутренние геттеры ядра, полностью блокируя Render Loop\n // и гарантируя 100% стабильность ссылочных типов данных в renderHook!\n return localState\n}\n"],"mappings":"uBAGA,SAAgB,EAAoB,EAAiC,CACnE,IAAM,EAAU,GAAU,OAAO,GAAW,UAAY,gBAAiB,EAGzE,GAAI,EAFa,GAAU,OAAO,GAAW,UAAY,cAAe,IAEvD,CAAC,EAChB,OAAO,EAKT,IAAM,GADW,EAAe,OAAS,EAAA,CAClB,QAAW,EAAe,OAK3C,CAAC,EAAY,IAAA,EAAA,EAAA,SAAA,KACb,GAAU,YAAa,EAClB,EAAO,YAAe,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAAe,EAE3E,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAC5C,EA4BD,OA1BA,EAAA,EAAA,UAAA,KAAgB,CAcd,IAAM,EAXU,gBAAiB,GAAU,OAAQ,EAAe,aAAgB,WAY7E,EAAe,gBAVa,CAE/B,IAAM,EAAa,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,MAIvD,EAAc,CAAU,CAC1B,CAGkD,EAC9C,EAAO,UAAW,GAAkB,EAAc,CAAQ,CAAC,EAE/D,UAAa,EAAY,CAC3B,EAAG,CAAC,CAAM,CAAC,GAEX,EAAA,EAAA,cAAA,CAAc,CAAU,EAKjB,CACT"}
1
+ {"version":3,"file":"useReactiveValue.cjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useSyncExternalStore, useDebugValue, useState, useMemo } from 'react'\nimport { ISignalLike } from '../../core/types'\n\nexport function useReactiveValue<V>(signal: ISignalLike<V> | any): V {\n const isProxy = signal && typeof signal === 'object' && '__subscribe' in signal\n const isSignal = signal && typeof signal === 'object' && 'subscribe' in signal\n\n if (!isSignal && !isProxy) {\n return signal\n }\n\n const rawNode = (signal as any)._node || signal\n const engine = rawNode.engine || (signal as any).engine\n\n // Использование локального стейта-счетчика версий гарантирует,\n // что Object.is() внутри React 18 Concurrent Mode взведется в false \n // для любых ссылочных типов, массивов и примитивов вычислений!\n const [localVersion, setLocalVersion] = useState(0)\n\n // 🟢 КАНОНИЧЕСКИЙ АКТИВНЫЙ ВЕРСИОННЫЙ МОСТ (Идемпотентный Snap)\n useSyncExternalStore(\n // Фаза подписки: Изумительно будит ленивые computed-ноды за счет \n // вызова оригинального метода .subscribe(), который вешает активный эффект ядра!\n useMemo(() => (onStoreChange: () => void) => {\n const triggerStoreRerender = () => {\n // Синхронно инкрементируем локальную версию хука\n setLocalVersion((v) => v + 1)\n onStoreChange()\n }\n\n // Для Proxy-объектов используем пассивный хук транзакций,\n // но для Сигналов и Computed — строго честный, активный .subscribe()!\n if (rawNode.type !== 'computed' && '__subscribe' in signal && typeof (signal as any).__subscribe === 'function') {\n return (signal as any).__subscribe(triggerStoreRerender)\n }\n \n return signal.subscribe(triggerStoreRerender)\n }, [signal, rawNode, engine]),\n \n // getSnapshot: Кристально чистая, детерминированная O(1) операция!\n // Возвращает примитивное число локальной версии. Никаких деструктивных вызовов \n // .run() или геттеров внутри снапшота — абсолютная защита от Render Loop!\n () => localVersion,\n \n // Снапшот для сервера (SSR)\n () => 0\n )\n\n useDebugValue(localVersion)\n\n // ⚛️ ТОПОЛОГИЧЕСКАЯ АКТУАЛИЗАЦИЯ И ИЗОЛЯЦИЯ ФАЗЫ РЕНДЕРА (Topological Pull):\n // В теле рендера компонента React мы вызываем оригинальный публичный геттер .value.\n // Но делаем это строго внутри engine.untrack(), полностью исключая появление \n // избыточных транзакций ядра, зацикливаний и холостых логов во время рендера React!\n if (engine && 'untrack' in engine) {\n return engine.untrack(() => (signal.value !== undefined ? signal.value : signal))\n }\n\n return signal.value !== undefined ? signal.value : signal\n}\n"],"mappings":"uBAGA,SAAgB,EAAoB,EAAiC,CACnE,IAAM,EAAU,GAAU,OAAO,GAAW,UAAY,gBAAiB,EAGzE,GAAI,EAFa,GAAU,OAAO,GAAW,UAAY,cAAe,IAEvD,CAAC,EAChB,OAAO,EAGT,IAAM,EAAW,EAAe,OAAS,EACnC,EAAS,EAAQ,QAAW,EAAe,OAK3C,CAAC,EAAc,IAAA,EAAA,EAAA,SAAA,CAA4B,CAAC,EAyClD,OAtCA,EAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,KAGiB,GAA8B,CAC3C,IAAM,MAA6B,CAEjC,EAAiB,GAAM,EAAI,CAAC,EAC5B,EAAc,CAChB,EAQA,OAJI,EAAQ,OAAS,YAAc,gBAAiB,GAAU,OAAQ,EAAe,aAAgB,WAC3F,EAAe,YAAY,CAAoB,EAGlD,EAAO,UAAU,CAAoB,CAC9C,EAAG,CAAC,EAAQ,EAAS,CAAM,CAAC,MAKtB,MAGA,CACR,GAEA,EAAA,EAAA,cAAA,CAAc,CAAY,EAMtB,GAAU,YAAa,EAClB,EAAO,YAAe,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAAe,EAG3E,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAC7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"useReactiveValue.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useReactiveValue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAiDnE"}
1
+ {"version":3,"file":"useReactiveValue.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useReactiveValue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAwDnE"}
@@ -1,18 +1,21 @@
1
- import { useDebugValue as e, useEffect as t, useState as n } from "react";
1
+ import { useDebugValue as e, useMemo as t, useState as n, useSyncExternalStore as r } from "react";
2
2
  //#region src/react/hooks/useReactiveValue.ts
3
- function r(r) {
4
- let i = r && typeof r == "object" && "__subscribe" in r;
5
- if (!(r && typeof r == "object" && "subscribe" in r) && !i) return r;
6
- let a = (r._node || r).engine || r.engine, [o, s] = n(() => a && "untrack" in a ? a.untrack(() => r.value === void 0 ? r : r.value) : r.value === void 0 ? r : r.value);
7
- return t(() => {
8
- let e = "__subscribe" in r && typeof r.__subscribe == "function" ? r.__subscribe(() => {
9
- let e = r.value === void 0 ? r : r.value;
10
- s(e);
11
- }) : r.subscribe((e) => s(e));
12
- return () => e();
13
- }, [r]), e(o), o;
3
+ function i(i) {
4
+ let a = i && typeof i == "object" && "__subscribe" in i;
5
+ if (!(i && typeof i == "object" && "subscribe" in i) && !a) return i;
6
+ let o = i._node || i, s = o.engine || i.engine, [c, l] = n(0);
7
+ return r(t(() => (e) => {
8
+ let t = () => {
9
+ l((e) => e + 1), e();
10
+ };
11
+ return o.type !== "computed" && "__subscribe" in i && typeof i.__subscribe == "function" ? i.__subscribe(t) : i.subscribe(t);
12
+ }, [
13
+ i,
14
+ o,
15
+ s
16
+ ]), () => c, () => 0), e(c), s && "untrack" in s ? s.untrack(() => i.value === void 0 ? i : i.value) : i.value === void 0 ? i : i.value;
14
17
  }
15
18
  //#endregion
16
- export { r as useReactiveValue };
19
+ export { i as useReactiveValue };
17
20
 
18
21
  //# sourceMappingURL=useReactiveValue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useReactiveValue.mjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useState, useEffect, useDebugValue } from 'react'\nimport { ISignalLike } from '../../core/types'\n\nexport function useReactiveValue<V>(signal: ISignalLike<V> | any): V {\n const isProxy = signal && typeof signal === 'object' && '__subscribe' in signal\n const isSignal = signal && typeof signal === 'object' && 'subscribe' in signal\n\n if (!isSignal && !isProxy) {\n return signal\n }\n\n // Находим корневой инстанс ядра реактивности фреймворка\n const rawNode = (signal as any)._node || signal\n const engine = rawNode.engine || (signal as any).engine\n\n // РЕАКТИВНЫЙ БУФЕР ДЛЯ REACT 18 CONCURRENT MODE\n // Инициализируем локальный стейт React строго актуальным значением из кэша.\n // Использование engine.untrack() защищает стартовый рендер в StrictMode от утечки контекста!\n const [localState, setLocalState] = useState(() => {\n if (engine && 'untrack' in engine) {\n return engine.untrack(() => (signal.value !== undefined ? signal.value : signal))\n }\n return signal.value !== undefined ? signal.value : signal\n })\n\n useEffect(() => {\n // Выбираем пассивный системный хук __subscribe для computed и proxy,\n // чтобы просыпаться строго один раз в конце транзакции, убирая дубли из консоли\n const hasHook = '__subscribe' in signal && typeof (signal as any).__subscribe === 'function'\n\n const triggerStoreUpdate = () => {\n // Актуализируем ленивое значение кэша строго на этапе закрытия транзакции ядра\n const freshValue = signal.value !== undefined ? signal.value : signal\n\n // Проталкиваем изменения в локальный стейт React.\n // Если это массив, React зафиксирует новую ссылку и сделает ровно 1 ререндер!\n setLocalState(freshValue)\n }\n\n const unsubscribe = hasHook\n ? (signal as any).__subscribe(triggerStoreUpdate)\n : signal.subscribe((newValue: any) => setLocalState(newValue))\n\n return () => unsubscribe()\n }, [signal])\n\n useDebugValue(localState)\n\n // Возвращаем локальный изолированный стейт. Во время фазы рендера React\n // хук больше не дергает внутренние геттеры ядра, полностью блокируя Render Loop\n // и гарантируя 100% стабильность ссылочных типов данных в renderHook!\n return localState\n}\n"],"mappings":";;AAGA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,IAAU,KAAU,OAAO,KAAW,YAAY,iBAAiB;CAGzE,IAAI,EAFa,KAAU,OAAO,KAAW,YAAY,eAAe,MAEvD,CAAC,GAChB,OAAO;CAKT,IAAM,KADW,EAAe,SAAS,EAAA,CAClB,UAAW,EAAe,QAK3C,CAAC,GAAY,KAAiB,QAC9B,KAAU,aAAa,IAClB,EAAO,cAAe,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO,KAAe,IAE3E,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO,KAC5C;CA4BD,OA1BA,QAAgB;EAcd,IAAM,IAXU,iBAAiB,KAAU,OAAQ,EAAe,eAAgB,aAY7E,EAAe,kBAVa;GAE/B,IAAM,IAAa,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO;GAIvD,EAAc,CAAU;EAC1B,CAGkD,IAC9C,EAAO,WAAW,MAAkB,EAAc,CAAQ,CAAC;EAE/D,aAAa,EAAY;CAC3B,GAAG,CAAC,CAAM,CAAC,GAEX,EAAc,CAAU,GAKjB;AACT"}
1
+ {"version":3,"file":"useReactiveValue.mjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useSyncExternalStore, useDebugValue, useState, useMemo } from 'react'\nimport { ISignalLike } from '../../core/types'\n\nexport function useReactiveValue<V>(signal: ISignalLike<V> | any): V {\n const isProxy = signal && typeof signal === 'object' && '__subscribe' in signal\n const isSignal = signal && typeof signal === 'object' && 'subscribe' in signal\n\n if (!isSignal && !isProxy) {\n return signal\n }\n\n const rawNode = (signal as any)._node || signal\n const engine = rawNode.engine || (signal as any).engine\n\n // Использование локального стейта-счетчика версий гарантирует,\n // что Object.is() внутри React 18 Concurrent Mode взведется в false \n // для любых ссылочных типов, массивов и примитивов вычислений!\n const [localVersion, setLocalVersion] = useState(0)\n\n // 🟢 КАНОНИЧЕСКИЙ АКТИВНЫЙ ВЕРСИОННЫЙ МОСТ (Идемпотентный Snap)\n useSyncExternalStore(\n // Фаза подписки: Изумительно будит ленивые computed-ноды за счет \n // вызова оригинального метода .subscribe(), который вешает активный эффект ядра!\n useMemo(() => (onStoreChange: () => void) => {\n const triggerStoreRerender = () => {\n // Синхронно инкрементируем локальную версию хука\n setLocalVersion((v) => v + 1)\n onStoreChange()\n }\n\n // Для Proxy-объектов используем пассивный хук транзакций,\n // но для Сигналов и Computed — строго честный, активный .subscribe()!\n if (rawNode.type !== 'computed' && '__subscribe' in signal && typeof (signal as any).__subscribe === 'function') {\n return (signal as any).__subscribe(triggerStoreRerender)\n }\n \n return signal.subscribe(triggerStoreRerender)\n }, [signal, rawNode, engine]),\n \n // getSnapshot: Кристально чистая, детерминированная O(1) операция!\n // Возвращает примитивное число локальной версии. Никаких деструктивных вызовов \n // .run() или геттеров внутри снапшота — абсолютная защита от Render Loop!\n () => localVersion,\n \n // Снапшот для сервера (SSR)\n () => 0\n )\n\n useDebugValue(localVersion)\n\n // ⚛️ ТОПОЛОГИЧЕСКАЯ АКТУАЛИЗАЦИЯ И ИЗОЛЯЦИЯ ФАЗЫ РЕНДЕРА (Topological Pull):\n // В теле рендера компонента React мы вызываем оригинальный публичный геттер .value.\n // Но делаем это строго внутри engine.untrack(), полностью исключая появление \n // избыточных транзакций ядра, зацикливаний и холостых логов во время рендера React!\n if (engine && 'untrack' in engine) {\n return engine.untrack(() => (signal.value !== undefined ? signal.value : signal))\n }\n\n return signal.value !== undefined ? signal.value : signal\n}\n"],"mappings":";;AAGA,SAAgB,EAAoB,GAAiC;CACnE,IAAM,IAAU,KAAU,OAAO,KAAW,YAAY,iBAAiB;CAGzE,IAAI,EAFa,KAAU,OAAO,KAAW,YAAY,eAAe,MAEvD,CAAC,GAChB,OAAO;CAGT,IAAM,IAAW,EAAe,SAAS,GACnC,IAAS,EAAQ,UAAW,EAAe,QAK3C,CAAC,GAAc,KAAmB,EAAS,CAAC;CAyClD,OAtCA,EAGE,SAAe,MAA8B;EAC3C,IAAM,UAA6B;GAGjC,AADA,GAAiB,MAAM,IAAI,CAAC,GAC5B,EAAc;EAChB;EAQA,OAJI,EAAQ,SAAS,cAAc,iBAAiB,KAAU,OAAQ,EAAe,eAAgB,aAC3F,EAAe,YAAY,CAAoB,IAGlD,EAAO,UAAU,CAAoB;CAC9C,GAAG;EAAC;EAAQ;EAAS;CAAM,CAAC,SAKtB,SAGA,CACR,GAEA,EAAc,CAAY,GAMtB,KAAU,aAAa,IAClB,EAAO,cAAe,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO,KAAe,IAG3E,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO;AAC7C"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core.cjs"),t=require("./hooks/useReactiveValue.cjs"),n=require("./hooks/useReactiveSubscription.cjs");var r=class extends e.ReactiveEngine{use(e){return t.useReactiveValue(e)}};exports.ReactiveEngine=r,exports.use=t.useReactiveValue,exports.useReactiveValue=t.useReactiveValue,exports.useReactiveSubscription=n.useReactiveSubscription;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core.cjs"),t=require("./hooks/useReactiveValue.cjs"),n=require("./hooks/useReactiveSubscription.cjs");var r=t.useReactiveValue,i=class extends e.ReactiveEngine{use(e){return t.useReactiveValue(e)}};exports.ReactiveEngine=i,exports.use=r,exports.useReactiveSubscription=n.useReactiveSubscription,exports.useReactiveValue=t.useReactiveValue;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../src/react/index.ts"],"sourcesContent":["// Точка входа субпакета \"@pravosleva/reactive-engine/react\"\nimport { ReactiveEngineCore } from '../core/core'\nimport { useReactiveValue } from './hooks/useReactiveValue'\nimport { ISignalLike } from '../core/types'\n\nclass ExtendedReactiveEngine extends ReactiveEngineCore {\n /**\n * Сценарий 1: На вход подан легитимный реактивный примитив (Signal или Computed)\n */\n public use<V>(item: ISignalLike<V>): V;\n\n /**\n * Сценарий 2: На вход подан Proxy-объект, массив или обычный примитив\n */\n public use<T>(item: T): T;\n\n /**\n * Исполняемая сигнатура метода\n */\n public use(item: any): any {\n return useReactiveValue(item)\n }\n}\n\nexport { ExtendedReactiveEngine as ReactiveEngine, useReactiveValue as use }\nexport { useReactiveValue }\nexport { useReactiveSubscription } from './hooks/useReactiveSubscription'\n"],"mappings":"6LAKA,IAAM,EAAN,cAAqC,EAAA,cAAmB,CActD,IAAW,EAAgB,CACzB,OAAO,EAAA,iBAAiB,CAAI,CAC9B,CACF"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../src/react/index.ts"],"sourcesContent":["// Точка входа субпакета \"@pravosleva/reactive-engine/react\"\nimport { ReactiveEngineCore } from '../core/core'\nimport { useReactiveValue } from './hooks/useReactiveValue'\nimport { ISignalLike } from '../core/types'\n\n/**\n * 🟢 КАНОНИЧЕСКИЙ ИНТЕРФЕЙС ПЕРЕГРУЗОК ТИПОВ ДЛЯ СВОБОДНОЙ ФУНКЦИИ-ХУКА\n * Гарантирует автовыведение типов (V или T) в тестах и компонентах без кастов к any!\n */\nexport interface IUseReactiveHook {\n <V>(item: ISignalLike<V>): V;\n <T>(item: T): T;\n}\n\n/**\n * Экспортируем хук под именем use с жестким сохранением перегрузок типов дженерика\n */\nexport const use: IUseReactiveHook = useReactiveValue as any;\n\n/**\n * Расширенная версия движка ядра для ООП/DI паттернов в React-среде\n */\nexport class ReactiveEngine extends ReactiveEngineCore {\n /**\n * Сценарий 1: На вход подан легитимный реактивный примитив (Signal или Computed)\n */\n public use<V>(item: ISignalLike<V>): V;\n\n /**\n * Сценарий 2: На вход подан Proxy-объект, массив или обычный примитив\n */\n public use<T>(item: T): T;\n\n /**\n * Исполняемая сигнатура метода экземпляра класса движка\n */\n public use(item: any): any {\n return useReactiveValue(item)\n }\n}\n\n// Сохраняем остальные экспорты пакета\nexport { useReactiveValue }\nexport { useReactiveSubscription } from './hooks/useReactiveSubscription'\n"],"mappings":"6LAiBA,IAAa,EAAwB,EAAA,iBAKxB,EAAb,cAAoC,EAAA,cAAmB,CAcrD,IAAW,EAAgB,CACzB,OAAO,EAAA,iBAAiB,CAAI,CAC9B,CACF"}
@@ -1,7 +1,22 @@
1
1
  import { ReactiveEngineCore } from '../core/core';
2
2
  import { useReactiveValue } from './hooks/useReactiveValue';
3
3
  import { ISignalLike } from '../core/types';
4
- declare class ExtendedReactiveEngine extends ReactiveEngineCore {
4
+ /**
5
+ * 🟢 КАНОНИЧЕСКИЙ ИНТЕРФЕЙС ПЕРЕГРУЗОК ТИПОВ ДЛЯ СВОБОДНОЙ ФУНКЦИИ-ХУКА
6
+ * Гарантирует автовыведение типов (V или T) в тестах и компонентах без кастов к any!
7
+ */
8
+ export interface IUseReactiveHook {
9
+ <V>(item: ISignalLike<V>): V;
10
+ <T>(item: T): T;
11
+ }
12
+ /**
13
+ * Экспортируем хук под именем use с жестким сохранением перегрузок типов дженерика
14
+ */
15
+ export declare const use: IUseReactiveHook;
16
+ /**
17
+ * Расширенная версия движка ядра для ООП/DI паттернов в React-среде
18
+ */
19
+ export declare class ReactiveEngine extends ReactiveEngineCore {
5
20
  /**
6
21
  * Сценарий 1: На вход подан легитимный реактивный примитив (Signal или Computed)
7
22
  */
@@ -11,7 +26,6 @@ declare class ExtendedReactiveEngine extends ReactiveEngineCore {
11
26
  */
12
27
  use<T>(item: T): T;
13
28
  }
14
- export { ExtendedReactiveEngine as ReactiveEngine, useReactiveValue as use };
15
29
  export { useReactiveValue };
16
30
  export { useReactiveSubscription } from './hooks/useReactiveSubscription';
17
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,cAAM,sBAAuB,SAAQ,kBAAkB;IACrD;;OAEG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAEtC;;OAEG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;CAQ1B;AAED,OAAO,EAAE,sBAAsB,IAAI,cAAc,EAAE,gBAAgB,IAAI,GAAG,EAAE,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,GAAG,EAAE,gBAA0C,CAAC;AAE7D;;GAEG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;IACpD;;OAEG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAEtC;;OAEG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;CAQ1B;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA"}
@@ -2,12 +2,12 @@ import { ReactiveEngine as e } from "../core.mjs";
2
2
  import { useReactiveValue as t } from "./hooks/useReactiveValue.mjs";
3
3
  import { useReactiveSubscription as n } from "./hooks/useReactiveSubscription.mjs";
4
4
  //#region src/react/index.ts
5
- var r = class extends e {
5
+ var r = t, i = class extends e {
6
6
  use(e) {
7
7
  return t(e);
8
8
  }
9
9
  };
10
10
  //#endregion
11
- export { r as ReactiveEngine, t as use, t as useReactiveValue, n as useReactiveSubscription };
11
+ export { i as ReactiveEngine, r as use, n as useReactiveSubscription, t as useReactiveValue };
12
12
 
13
13
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/react/index.ts"],"sourcesContent":["// Точка входа субпакета \"@pravosleva/reactive-engine/react\"\nimport { ReactiveEngineCore } from '../core/core'\nimport { useReactiveValue } from './hooks/useReactiveValue'\nimport { ISignalLike } from '../core/types'\n\nclass ExtendedReactiveEngine extends ReactiveEngineCore {\n /**\n * Сценарий 1: На вход подан легитимный реактивный примитив (Signal или Computed)\n */\n public use<V>(item: ISignalLike<V>): V;\n\n /**\n * Сценарий 2: На вход подан Proxy-объект, массив или обычный примитив\n */\n public use<T>(item: T): T;\n\n /**\n * Исполняемая сигнатура метода\n */\n public use(item: any): any {\n return useReactiveValue(item)\n }\n}\n\nexport { ExtendedReactiveEngine as ReactiveEngine, useReactiveValue as use }\nexport { useReactiveValue }\nexport { useReactiveSubscription } from './hooks/useReactiveSubscription'\n"],"mappings":";;;;AAKA,IAAM,IAAN,cAAqC,EAAmB;CActD,IAAW,GAAgB;EACzB,OAAO,EAAiB,CAAI;CAC9B;AACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/react/index.ts"],"sourcesContent":["// Точка входа субпакета \"@pravosleva/reactive-engine/react\"\nimport { ReactiveEngineCore } from '../core/core'\nimport { useReactiveValue } from './hooks/useReactiveValue'\nimport { ISignalLike } from '../core/types'\n\n/**\n * 🟢 КАНОНИЧЕСКИЙ ИНТЕРФЕЙС ПЕРЕГРУЗОК ТИПОВ ДЛЯ СВОБОДНОЙ ФУНКЦИИ-ХУКА\n * Гарантирует автовыведение типов (V или T) в тестах и компонентах без кастов к any!\n */\nexport interface IUseReactiveHook {\n <V>(item: ISignalLike<V>): V;\n <T>(item: T): T;\n}\n\n/**\n * Экспортируем хук под именем use с жестким сохранением перегрузок типов дженерика\n */\nexport const use: IUseReactiveHook = useReactiveValue as any;\n\n/**\n * Расширенная версия движка ядра для ООП/DI паттернов в React-среде\n */\nexport class ReactiveEngine extends ReactiveEngineCore {\n /**\n * Сценарий 1: На вход подан легитимный реактивный примитив (Signal или Computed)\n */\n public use<V>(item: ISignalLike<V>): V;\n\n /**\n * Сценарий 2: На вход подан Proxy-объект, массив или обычный примитив\n */\n public use<T>(item: T): T;\n\n /**\n * Исполняемая сигнатура метода экземпляра класса движка\n */\n public use(item: any): any {\n return useReactiveValue(item)\n }\n}\n\n// Сохраняем остальные экспорты пакета\nexport { useReactiveValue }\nexport { useReactiveSubscription } from './hooks/useReactiveSubscription'\n"],"mappings":";;;;AAiBA,IAAa,IAAwB,GAKxB,IAAb,cAAoC,EAAmB;CAcrD,IAAW,GAAgB;EACzB,OAAO,EAAiB,CAAI;CAC9B;AACF"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pravosleva/reactive-engine v2.1.1
2
+ * @pravosleva/reactive-engine v2.1.2
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": "2.1.1",
3
+ "version": "2.1.2",
4
4
  "engines": {
5
5
  "node": ">=22.20.0"
6
6
  },