@pravosleva/reactive-engine 2.6.0 → 2.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.
@@ -19,29 +19,47 @@ export type Token<T> = string | symbol | {
19
19
  new (engine: ReactiveEngineCore, ...args: any[]): T;
20
20
  };
21
21
  export type Factory<T> = (engine: ReactiveEngineCore) => T;
22
+ /**
23
+ * ⚛️ БАЗОВЫЙ ИНТЕРФЕЙС-КОНТРАКТ ДЛЯ ЛЮБЫХ СИГНАЛОПОДОБНЫХ УЗЛОВ
24
+ */
25
+ export interface ISignalLike<V> {
26
+ /**
27
+ * Публичный геттер с автоматическим динамическим трекингом зависимостей графа
28
+ */
29
+ readonly value: V;
30
+ /**
31
+ * Безопасное чтение значения из кэша БЕЗ трекинга зависимостей.
32
+ */
33
+ valueWithoutTracking?: V;
34
+ /**
35
+ * Активная Push-подписка на каждое изменение значения узла
36
+ */
37
+ subscribe: (cb: (v: V) => void) => CleanupFn;
38
+ /**
39
+ * Пассивный системный хук подписки на завершение реактивной транзакции.
40
+ */
41
+ __subscribe?: (cb: () => void) => CleanupFn;
42
+ }
22
43
  /**
23
44
  * Интерфейс атомарного Сигнала графа.
45
+ * ⚛️ ТЕПЕРЬ ЯВНО НАСЛЕДУЕТ ISignalLike<T> ДЛЯ ГАРАНТИРОВАННОГО ВЫВОДА ТИПОВ
24
46
  */
25
- export interface Signal<T> {
47
+ export interface Signal<T> extends ISignalLike<T> {
26
48
  value: T;
27
- subscribe: (cb: (val: T) => void) => CleanupFn;
28
49
  destroy: () => void;
29
50
  }
30
51
  /**
31
52
  * Интерфейс синхронно-ленивого Вычисляемого свойства.
53
+ * ⚛️ ТЕПЕРЬ ЯВНО НАСЛЕДУЕТ ISignalLike<T> ДЛЯ КЭШИРОВАНИЯ И ВЫВОДА ТИПОВ
32
54
  */
33
- export interface Computed<T> {
55
+ export interface Computed<T> extends ISignalLike<T> {
34
56
  readonly value: T;
35
- subscribe: (cb: (val: T) => void) => CleanupFn;
36
57
  destroy: () => void;
37
58
  _isDirty?: () => boolean;
38
59
  dependencies?: Set<any>;
39
60
  run?: () => void;
40
61
  type?: any;
41
62
  }
42
- /**
43
- * Интерфейс побочного Эффекта планировщика.
44
- */
45
63
  export interface IEffect {
46
64
  id: number;
47
65
  run: () => void;
@@ -54,48 +72,28 @@ export interface IEffect {
54
72
  fn?: () => void;
55
73
  _node?: any;
56
74
  }
57
- /**
58
- * Опции конфигурации Сигналов.
59
- */
60
75
  export interface SignalOptions<T> {
61
76
  name?: string;
62
77
  validate?: (value: T) => boolean | string;
63
78
  }
64
- /**
65
- * Состояние асинхронного ресурса.
66
- */
67
79
  export interface ResourceState<T> {
68
80
  data: T | null;
69
81
  loading: boolean;
70
82
  error: string | null;
71
83
  isRetrying?: boolean;
72
84
  }
73
- /**
74
- * Контракт асинхронного Ресурса ядра.
75
- */
76
85
  export interface Resource<T> extends ResourceState<T> {
77
86
  refetch: () => void;
78
87
  subscribe: (cb: (val: ResourceState<T>) => void) => CleanupFn;
79
88
  readonly value: ResourceState<T>;
80
89
  destroy: () => void;
81
90
  }
82
- /**
83
- * Настройки конфигурации асинхронного Ресурса.
84
- * Полностью очищены от legacy-параметров ретраев и таймаутов.
85
- */
86
91
  export interface ResourceOptions<T, S = void> {
87
- /** Уникальное имя ресурса для трассировки и логирования */
88
92
  name?: string;
89
- /** Принудительный сброс данных в null при изменении источника (true по умолчанию) */
90
93
  resetDataOnSourceChange?: boolean;
91
- /** Декларативная пре-валидация параметров ДО отправки запроса в сеть */
92
94
  validateBeforeFetch?: (source: S) => boolean | string;
93
- /** Валидация структуры ответа сервера после успешного разрешения промиса */
94
95
  responseValidate?: (data: T) => boolean | string;
95
96
  }
96
- /**
97
- * Параметры продвинутой системы логирования транзакций.
98
- */
99
97
  export interface EngineLoggerOptions {
100
98
  instanceName?: string;
101
99
  isEnabled: boolean;
@@ -133,9 +131,6 @@ export interface ReactiveDetail {
133
131
  oldValue: unknown;
134
132
  newValue: unknown;
135
133
  }
136
- /**
137
- * Карта маппинга категорий логов для безопасной работы метода queueLog.
138
- */
139
134
  export interface LogDetailMap {
140
135
  signal: SignalLogDetail;
141
136
  computed: ComputedLogDetail;
@@ -144,24 +139,4 @@ export interface LogDetailMap {
144
139
  resource: ResourceLogDetail;
145
140
  reactive: ReactiveDetail;
146
141
  }
147
- export interface ISignalLike<V> {
148
- /**
149
- * Публичный геттер с автоматическим динамическим трекингом зависимостей графа
150
- */
151
- value: V;
152
- /**
153
- * Безопасное чтение значения из кэша БЕЗ трекинга зависимостей.
154
- * Предотвращает гонку планировщиков и лишние транзакции во время рендера React/Vue.
155
- */
156
- valueWithoutTracking: V;
157
- /**
158
- * Активная Push-подписка на каждое изменение значения узла
159
- */
160
- subscribe: (cb: (v: V) => void) => CleanupFn;
161
- /**
162
- * Пассивный системный хук подписки на завершение реактивной транзакции.
163
- * Позволяет UI-мостам просыпаться строго один раз за тик, ликвидируя IDLE PULL дубли.
164
- */
165
- __subscribe?: (cb: () => void) => CleanupFn;
166
- }
167
142
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useReactiveValue.cjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useSyncExternalStore, useDebugValue, useMemo, useRef, useState } 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 // Локальный тикет рендеринга для useSyncExternalStore.\n // Это ЕДИНСТВЕННЫЙ детерминированный источник истины для React Concurrent Mode.\n const [ticket, setTicket] = useState(0)\n\n // 🟢 КАНОНИЧЕСКИЙ ВЕРСИОННЫЙ СНАПШOТ useSyncExternalStore С СИНХРOННЫМ ПOДТЯГИВАНИЕМ КЭША\n useSyncExternalStore(\n // 1. Фаза подписки: Доверяем push-уведомлениям Ядра для запуска ререндера React\n useMemo(() => (onStoreChange: () => void) => {\n const triggerStoreRerender = () => {\n setTicket((t) => t + 1)\n onStoreChange()\n }\n\n // Для вычисляемых свойств используем скрытый __subscribe, который ловит markDirty(1)\n if (rawNode.type === 'computed' && typeof (signal as any).__subscribe === 'function') {\n return (signal as any).__subscribe(triggerStoreRerender)\n }\n\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]),\n\n // 2. getSnapshot: Чистая, snapshot-безопасная O(1) операция!\n // Мы СТРОГО возвращаем локальный ticket, изолируя React от бесконечного инкремента engine.epoch.\n // Это намертво защищает от краша \"Maximum update depth exceeded\"!\n () => ticket,\n\n // SSR Снапшот\n () => 0\n )\n\n useDebugValue(ticket)\n\n // ⚛️ ТОПОЛОГИЧЕСКИЙ Pull (Безопасный Рендеринг из O(1) кэша ядра):\n // Вычисляем граф и стягиваем свежее значение непосредственно в теле рендера.\n // Оборачиваем в untrack, чтобы сам рендеринг 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,OAI3C,CAAC,EAAQ,IAAA,EAAA,EAAA,SAAA,CAAsB,CAAC,EAyCtC,OAtCA,EAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,KAEiB,GAA8B,CAC3C,IAAM,MAA6B,CACjC,EAAW,GAAM,EAAI,CAAC,EACtB,EAAc,CAChB,EAWA,OARI,EAAQ,OAAS,YAAc,OAAQ,EAAe,aAAgB,YAItE,EAAQ,OAAS,YAAc,gBAAiB,GAAU,OAAQ,EAAe,aAAgB,WAC3F,EAAe,YAAY,CAAoB,EAGlD,EAAO,UAAU,CAAoB,CAC9C,EAAG,CAAC,EAAQ,CAAO,CAAC,MAKd,MAGA,CACR,GAEA,EAAA,EAAA,cAAA,CAAc,CAAM,EAKhB,GAAU,YAAa,EAClB,EAAO,YAAe,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAAe,EAG3E,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAC7C"}
1
+ {"version":3,"file":"useReactiveValue.cjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useSyncExternalStore, useDebugValue, useMemo, useState } from 'react'\nimport { ISignalLike } from '../../core/types'\n\n/**\n * ⚛️ УЛЬТИМАТИВНЫЙ ХУК ДЛЯ СТЯГИВАНИЯ ДАННЫХ ИЗ ГРАФА В СРЕДУ REACT\n * Автоматически выводит тип внутренней структуры данных (V) из любого сигнала или вычисляемого свойства.\n */\nexport function useReactiveValue<V>(signal: ISignalLike<V>): V;\nexport function useReactiveValue<T extends object>(proxy: T): T;\nexport function useReactiveValue<T>(primitive: T): T;\nexport function useReactiveValue(signal: any): any {\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._node || signal\n const engine = rawNode.engine || signal.engine\n\n // Локальный тикет рендеринга для useSyncExternalStore.\n const [ticket, setTicket] = useState(0)\n\n // 🟢 КАНОНИЧЕСКИЙ ВЕРСИОННЫЙ СНАПШOТ useSyncExternalStore С СИНХРOННЫМ ПOДТЯГИВАНИЕМ КЭША\n useSyncExternalStore(\n useMemo(() => (onStoreChange: () => void) => {\n const triggerStoreRerender = () => {\n setTicket((t) => t + 1)\n onStoreChange()\n }\n\n if (rawNode.type === 'computed' && typeof signal.__subscribe === 'function') {\n return signal.__subscribe(triggerStoreRerender)\n }\n\n if (rawNode.type !== 'computed' && '__subscribe' in signal && typeof signal.__subscribe === 'function') {\n return signal.__subscribe(triggerStoreRerender)\n }\n\n return signal.subscribe(triggerStoreRerender)\n }, [signal, rawNode]),\n\n () => ticket,\n () => 0\n )\n\n useDebugValue(ticket)\n\n // ⚛️ ТОПОЛОГИЧЕСКИЙ Pull: Стягиваем свежее значение в теле рендера под untrack\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":"uBAUA,SAAgB,EAAiB,EAAkB,CACjD,IAAM,EAAU,GAAU,OAAO,GAAW,UAAY,gBAAiB,EAGzE,GAAI,EAFa,GAAU,OAAO,GAAW,UAAY,cAAe,IAEvD,CAAC,EAChB,OAAO,EAGT,IAAM,EAAU,EAAO,OAAS,EAC1B,EAAS,EAAQ,QAAU,EAAO,OAGlC,CAAC,EAAQ,IAAA,EAAA,EAAA,SAAA,CAAsB,CAAC,EAgCtC,OA7BA,EAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,KACiB,GAA8B,CAC3C,IAAM,MAA6B,CACjC,EAAW,GAAM,EAAI,CAAC,EACtB,EAAc,CAChB,EAUA,OARI,EAAQ,OAAS,YAAc,OAAO,EAAO,aAAgB,YAI7D,EAAQ,OAAS,YAAc,gBAAiB,GAAU,OAAO,EAAO,aAAgB,WACnF,EAAO,YAAY,CAAoB,EAGzC,EAAO,UAAU,CAAoB,CAC9C,EAAG,CAAC,EAAQ,CAAO,CAAC,MAEd,MACA,CACR,GAEA,EAAA,EAAA,cAAA,CAAc,CAAM,EAGhB,GAAU,YAAa,EAClB,EAAO,YAAe,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAAe,EAG3E,EAAO,QAAU,IAAA,GAA2B,EAAf,EAAO,KAC7C"}
@@ -1,3 +1,9 @@
1
1
  import { ISignalLike } from '../../core/types';
2
- export declare function useReactiveValue<V>(signal: ISignalLike<V> | any): V;
2
+ /**
3
+ * ⚛️ УЛЬТИМАТИВНЫЙ ХУК ДЛЯ СТЯГИВАНИЯ ДАННЫХ ИЗ ГРАФА В СРЕДУ REACT
4
+ * Автоматически выводит тип внутренней структуры данных (V) из любого сигнала или вычисляемого свойства.
5
+ */
6
+ export declare function useReactiveValue<V>(signal: ISignalLike<V>): V;
7
+ export declare function useReactiveValue<T extends object>(proxy: T): T;
8
+ export declare function useReactiveValue<T>(primitive: T): T;
3
9
  //# sourceMappingURL=useReactiveValue.d.ts.map
@@ -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,CAuDnE"}
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;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/D,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;AAChE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useReactiveValue.mjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useSyncExternalStore, useDebugValue, useMemo, useRef, useState } 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 // Локальный тикет рендеринга для useSyncExternalStore.\n // Это ЕДИНСТВЕННЫЙ детерминированный источник истины для React Concurrent Mode.\n const [ticket, setTicket] = useState(0)\n\n // 🟢 КАНОНИЧЕСКИЙ ВЕРСИОННЫЙ СНАПШOТ useSyncExternalStore С СИНХРOННЫМ ПOДТЯГИВАНИЕМ КЭША\n useSyncExternalStore(\n // 1. Фаза подписки: Доверяем push-уведомлениям Ядра для запуска ререндера React\n useMemo(() => (onStoreChange: () => void) => {\n const triggerStoreRerender = () => {\n setTicket((t) => t + 1)\n onStoreChange()\n }\n\n // Для вычисляемых свойств используем скрытый __subscribe, который ловит markDirty(1)\n if (rawNode.type === 'computed' && typeof (signal as any).__subscribe === 'function') {\n return (signal as any).__subscribe(triggerStoreRerender)\n }\n\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]),\n\n // 2. getSnapshot: Чистая, snapshot-безопасная O(1) операция!\n // Мы СТРОГО возвращаем локальный ticket, изолируя React от бесконечного инкремента engine.epoch.\n // Это намертво защищает от краша \"Maximum update depth exceeded\"!\n () => ticket,\n\n // SSR Снапшот\n () => 0\n )\n\n useDebugValue(ticket)\n\n // ⚛️ ТОПОЛОГИЧЕСКИЙ Pull (Безопасный Рендеринг из O(1) кэша ядра):\n // Вычисляем граф и стягиваем свежее значение непосредственно в теле рендера.\n // Оборачиваем в untrack, чтобы сам рендеринг 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,QAI3C,CAAC,GAAQ,KAAa,EAAS,CAAC;CAyCtC,OAtCA,EAEE,SAAe,MAA8B;EAC3C,IAAM,UAA6B;GAEjC,AADA,GAAW,MAAM,IAAI,CAAC,GACtB,EAAc;EAChB;EAWA,OARI,EAAQ,SAAS,cAAc,OAAQ,EAAe,eAAgB,cAItE,EAAQ,SAAS,cAAc,iBAAiB,KAAU,OAAQ,EAAe,eAAgB,aAC3F,EAAe,YAAY,CAAoB,IAGlD,EAAO,UAAU,CAAoB;CAC9C,GAAG,CAAC,GAAQ,CAAO,CAAC,SAKd,SAGA,CACR,GAEA,EAAc,CAAM,GAKhB,KAAU,aAAa,IAClB,EAAO,cAAe,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO,KAAe,IAG3E,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO;AAC7C"}
1
+ {"version":3,"file":"useReactiveValue.mjs","names":[],"sources":["../../../src/react/hooks/useReactiveValue.ts"],"sourcesContent":["import { useSyncExternalStore, useDebugValue, useMemo, useState } from 'react'\nimport { ISignalLike } from '../../core/types'\n\n/**\n * ⚛️ УЛЬТИМАТИВНЫЙ ХУК ДЛЯ СТЯГИВАНИЯ ДАННЫХ ИЗ ГРАФА В СРЕДУ REACT\n * Автоматически выводит тип внутренней структуры данных (V) из любого сигнала или вычисляемого свойства.\n */\nexport function useReactiveValue<V>(signal: ISignalLike<V>): V;\nexport function useReactiveValue<T extends object>(proxy: T): T;\nexport function useReactiveValue<T>(primitive: T): T;\nexport function useReactiveValue(signal: any): any {\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._node || signal\n const engine = rawNode.engine || signal.engine\n\n // Локальный тикет рендеринга для useSyncExternalStore.\n const [ticket, setTicket] = useState(0)\n\n // 🟢 КАНОНИЧЕСКИЙ ВЕРСИОННЫЙ СНАПШOТ useSyncExternalStore С СИНХРOННЫМ ПOДТЯГИВАНИЕМ КЭША\n useSyncExternalStore(\n useMemo(() => (onStoreChange: () => void) => {\n const triggerStoreRerender = () => {\n setTicket((t) => t + 1)\n onStoreChange()\n }\n\n if (rawNode.type === 'computed' && typeof signal.__subscribe === 'function') {\n return signal.__subscribe(triggerStoreRerender)\n }\n\n if (rawNode.type !== 'computed' && '__subscribe' in signal && typeof signal.__subscribe === 'function') {\n return signal.__subscribe(triggerStoreRerender)\n }\n\n return signal.subscribe(triggerStoreRerender)\n }, [signal, rawNode]),\n\n () => ticket,\n () => 0\n )\n\n useDebugValue(ticket)\n\n // ⚛️ ТОПОЛОГИЧЕСКИЙ Pull: Стягиваем свежее значение в теле рендера под untrack\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":";;AAUA,SAAgB,EAAiB,GAAkB;CACjD,IAAM,IAAU,KAAU,OAAO,KAAW,YAAY,iBAAiB;CAGzE,IAAI,EAFa,KAAU,OAAO,KAAW,YAAY,eAAe,MAEvD,CAAC,GAChB,OAAO;CAGT,IAAM,IAAU,EAAO,SAAS,GAC1B,IAAS,EAAQ,UAAU,EAAO,QAGlC,CAAC,GAAQ,KAAa,EAAS,CAAC;CAgCtC,OA7BA,EACE,SAAe,MAA8B;EAC3C,IAAM,UAA6B;GAEjC,AADA,GAAW,MAAM,IAAI,CAAC,GACtB,EAAc;EAChB;EAUA,OARI,EAAQ,SAAS,cAAc,OAAO,EAAO,eAAgB,cAI7D,EAAQ,SAAS,cAAc,iBAAiB,KAAU,OAAO,EAAO,eAAgB,aACnF,EAAO,YAAY,CAAoB,IAGzC,EAAO,UAAU,CAAoB;CAC9C,GAAG,CAAC,GAAQ,CAAO,CAAC,SAEd,SACA,CACR,GAEA,EAAc,CAAM,GAGhB,KAAU,aAAa,IAClB,EAAO,cAAe,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO,KAAe,IAG3E,EAAO,UAAU,KAAA,IAA2B,IAAf,EAAO;AAC7C"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @pravosleva/reactive-engine v2.6.0
2
+ * @pravosleva/reactive-engine v2.6.1
3
3
  * High-performance transactional reactive engine with microtask batching.
4
4
  *
5
5
  * @license MIT
@@ -1,2 +1,2 @@
1
- let e=require("vue");function t(t){if(typeof t!=`object`||!t)return(0,e.shallowRef)(t);let n=`subscribe`in t&&typeof t.subscribe==`function`,r=(0,e.shallowRef)(n?t.value:t),i=null;if(n)i=t.subscribe(e=>{r.value=e});else if(`__subscribe`in t&&typeof t.__subscribe==`function`){let e=t;i=e.__subscribe(()=>{r.value=Array.isArray(e)?[...e]:{...e}})}return i&&(0,e.onScopeDispose)(()=>{i()}),r}exports.useReactiveValue=t;
1
+ let e=require("vue");function t(t){if(typeof t!=`object`||!t)return(0,e.shallowRef)(t);let n=`subscribe`in t&&typeof t.subscribe==`function`,r=(0,e.shallowRef)(n?t.value:t),i=null;if(n)i=t.subscribe(e=>{r.value=e});else if(`__subscribe`in t){let e=t;typeof e.__subscribe==`function`&&(i=e.__subscribe(()=>{r.value=Array.isArray(t)?[...t]:{...t}}))}return i&&(0,e.onScopeDispose)(()=>{i&&i()}),r}exports.useReactiveValue=t;
2
2
  //# sourceMappingURL=core.vue-adapter.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.vue-adapter.cjs","names":[],"sources":["../../src/vue/core.vue-adapter.ts"],"sourcesContent":["import { shallowRef, onScopeDispose } from 'vue'\nimport { ISignalLike } from '../core/types'\n\ntype CleanupFn = () => void\n\n/**\n * 🟢 REACTIVE ENGINE ADAPTER FOR VUE 3 (v1.9.0)\n *\n * Нативно интегрирует синхронные и асингулярные графы ядра с реактивной системой Vue 3.\n * Исключает десинхронизацию за счет shallowRef-трансляции и триггеров onScopeDispose.\n */\nexport function useReactiveValue<T>(item: T): any {\n // Быстрый выход для примитивов или невалидных объектов, переданных по ошибке\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // Инициализируем реактивный контейнер Vue 3 стартовым снимком из ядра\n const stateRef = shallowRef(isSignal ? (item as any).value : item)\n let unsubscribe: CleanupFn | null = null\n\n // =========================================================================\n // СЦЕНАРИЙ 1: Подписка на Сигналы и Вычисляемые свойства (Computed)\n // =========================================================================\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue: any) => {\n stateRef.value = newValue // Vue 3 автоматически триггерит обновление DOM\n })\n }\n // =========================================================================\n // СЦЕНАРИЙ 2: Подписка на глубокие Proxy-объекты и массивы (reactive)\n // =========================================================================\n else if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const reactiveItem = item as any\n unsubscribe = reactiveItem.__subscribe(() => {\n // Для Proxy-коллекций принудительно создаем shallow-копию ссылки,\n // заставляя ленивый движок Vue 3 безупречно перерисовывать шаблоны .push/.splice мутаций!\n stateRef.value = Array.isArray(reactiveItem) ? [...reactiveItem] : { ...reactiveItem }\n })\n }\n\n // Автоматически освобождаем оперативную память и гасим эффекты ядра\n // при размонтировании Vue-компонента или закрытии EffectScope\n if (unsubscribe) {\n onScopeDispose(() => {\n unsubscribe!()\n })\n }\n\n return stateRef\n}\n"],"mappings":"qBAWA,SAAgB,EAAoB,EAAc,CAEhD,GAA2C,OAAO,GAAS,WAAvD,EACF,OAAA,EAAA,EAAA,WAAA,CAAkB,CAAI,EAGxB,IAAM,EAAW,cAAe,GAAQ,OAAQ,EAAiC,WAAc,WAGzF,GAAA,EAAA,EAAA,WAAA,CAAsB,EAAY,EAAa,MAAQ,CAAI,EAC7D,EAAgC,KAKpC,GAAI,EAEF,EAAc,EAAW,UAAW,GAAkB,CACpD,EAAS,MAAQ,CACnB,CAAC,OAKE,GAAI,gBAAiB,GAAQ,OAAQ,EAAiC,aAAgB,WAAY,CACrG,IAAM,EAAe,EACrB,EAAc,EAAa,gBAAkB,CAG3C,EAAS,MAAQ,MAAM,QAAQ,CAAY,EAAI,CAAC,GAAG,CAAY,EAAI,CAAE,GAAG,CAAa,CACvF,CAAC,CACH,CAUA,OANI,IACF,EAAA,EAAA,eAAA,KAAqB,CACnB,EAAa,CACf,CAAC,EAGI,CACT"}
1
+ {"version":3,"file":"core.vue-adapter.cjs","names":[],"sources":["../../src/vue/core.vue-adapter.ts"],"sourcesContent":["import { shallowRef, onScopeDispose, ShallowRef } from 'vue'\nimport { ISignalLike, CleanupFn } from '../core/types'\n\n/**\n * ⚛️ Расширенный интерфейс для поддержки внутренних методов подписки Proxy-объектов ядра\n */\ninterface IReactiveProxyExtension {\n __subscribe?: (cb: () => void) => CleanupFn;\n}\n\n/**\n * 🟢 REACTIVE ENGINE ADAPTER FOR VUE 3 (v2.6.1)\n *\n * Нативно интегрирует синхронные и асинхронные графы ядра с реактивной системой Vue 3.\n * Автоматически выводит тип внутренней структуры данных и возвращает строго типизированный ShallowRef.\n */\nexport function useReactiveValue<V>(signal: ISignalLike<V>): ShallowRef<V>;\nexport function useReactiveValue<T extends object>(proxy: T): ShallowRef<T>;\nexport function useReactiveValue<T>(primitive: T): ShallowRef<T>;\nexport function useReactiveValue(item: unknown): ShallowRef<unknown> {\n // Быстрый выход для примитивов или невалидных объектов, переданных по ошибке\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // Вычисляем стартовое значение без использования unsafe any\n const getInitialValue = (): unknown => {\n if (isSignal) {\n return (item as ISignalLike<unknown>).value\n }\n return item\n }\n\n // Инициализируем реактивный контейнер Vue 3 стартовым снимком из ядра\n const stateRef = shallowRef(getInitialValue())\n let unsubscribe: CleanupFn | null = null\n\n // =========================================================================\n // СЦЕНАРИЙ 1: Подписка на Сигналы и Вычисляемые свойства (Computed)\n // =========================================================================\n if (isSignal) {\n const signalItem = item as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue) => {\n stateRef.value = newValue // Vue 3 автоматически триггерит обновление DOM\n })\n }\n // =========================================================================\n // СЦЕНАРИЙ 2: Подписка на глубокие Proxy-объекты и массивы (reactive)\n // =========================================================================\n else if ('__subscribe' in item) {\n const potentialProxy = item as IReactiveProxyExtension\n if (typeof potentialProxy.__subscribe === 'function') {\n unsubscribe = potentialProxy.__subscribe(() => {\n // Для Proxy-коллекций принудительно создаем shallow-копию ссылки,\n // заставляя ленивый движок Vue 3 безупречно перерисовывать шаблоны .push/.splice мутаций!\n stateRef.value = Array.isArray(item) ? [...item] : { ...item }\n })\n }\n }\n\n // Автоматически освобождаем оперативную память и гасим эффекты ядра\n // при размонтировании Vue-компонента или закрытии EffectScope\n if (unsubscribe) {\n onScopeDispose(() => {\n if (unsubscribe) unsubscribe()\n })\n }\n\n return stateRef\n}\n"],"mappings":"qBAmBA,SAAgB,EAAiB,EAAoC,CAEnE,GAA2C,OAAO,GAAS,WAAvD,EACF,OAAA,EAAA,EAAA,WAAA,CAAkB,CAAI,EAGxB,IAAM,EAAW,cAAe,GAAQ,OAAQ,EAAiC,WAAc,WAWzF,GAAA,EAAA,EAAA,WAAA,CAPA,EACM,EAA8B,MAEjC,CAIoC,EACzC,EAAgC,KAKpC,GAAI,EAEF,EAAc,EAAW,UAAW,GAAa,CAC/C,EAAS,MAAQ,CACnB,CAAC,OAKE,GAAI,gBAAiB,EAAM,CAC9B,IAAM,EAAiB,EACnB,OAAO,EAAe,aAAgB,aACxC,EAAc,EAAe,gBAAkB,CAG7C,EAAS,MAAQ,MAAM,QAAQ,CAAI,EAAI,CAAC,GAAG,CAAI,EAAI,CAAE,GAAG,CAAK,CAC/D,CAAC,EAEL,CAUA,OANI,IACF,EAAA,EAAA,eAAA,KAAqB,CACf,GAAa,EAAY,CAC/B,CAAC,EAGI,CACT"}
@@ -1,8 +1,12 @@
1
+ import { ShallowRef } from 'vue';
2
+ import { ISignalLike } from '../core/types';
1
3
  /**
2
- * 🟢 REACTIVE ENGINE ADAPTER FOR VUE 3 (v1.9.0)
4
+ * 🟢 REACTIVE ENGINE ADAPTER FOR VUE 3 (v2.6.1)
3
5
  *
4
- * Нативно интегрирует синхронные и асингулярные графы ядра с реактивной системой Vue 3.
5
- * Исключает десинхронизацию за счет shallowRef-трансляции и триггеров onScopeDispose.
6
+ * Нативно интегрирует синхронные и асинхронные графы ядра с реактивной системой Vue 3.
7
+ * Автоматически выводит тип внутренней структуры данных и возвращает строго типизированный ShallowRef.
6
8
  */
7
- export declare function useReactiveValue<T>(item: T): any;
9
+ export declare function useReactiveValue<V>(signal: ISignalLike<V>): ShallowRef<V>;
10
+ export declare function useReactiveValue<T extends object>(proxy: T): ShallowRef<T>;
11
+ export declare function useReactiveValue<T>(primitive: T): ShallowRef<T>;
8
12
  //# sourceMappingURL=core.vue-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.vue-adapter.d.ts","sourceRoot":"","sources":["../../src/vue/core.vue-adapter.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CA0ChD"}
1
+ {"version":3,"file":"core.vue-adapter.d.ts","sourceRoot":"","sources":["../../src/vue/core.vue-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,UAAU,EAAE,MAAM,KAAK,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAa,MAAM,eAAe,CAAA;AAStD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3E,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC"}
@@ -6,14 +6,14 @@ function n(n) {
6
6
  if (r) a = n.subscribe((e) => {
7
7
  i.value = e;
8
8
  });
9
- else if ("__subscribe" in n && typeof n.__subscribe == "function") {
9
+ else if ("__subscribe" in n) {
10
10
  let e = n;
11
- a = e.__subscribe(() => {
12
- i.value = Array.isArray(e) ? [...e] : { ...e };
13
- });
11
+ typeof e.__subscribe == "function" && (a = e.__subscribe(() => {
12
+ i.value = Array.isArray(n) ? [...n] : { ...n };
13
+ }));
14
14
  }
15
15
  return a && e(() => {
16
- a();
16
+ a && a();
17
17
  }), i;
18
18
  }
19
19
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"core.vue-adapter.mjs","names":[],"sources":["../../src/vue/core.vue-adapter.ts"],"sourcesContent":["import { shallowRef, onScopeDispose } from 'vue'\nimport { ISignalLike } from '../core/types'\n\ntype CleanupFn = () => void\n\n/**\n * 🟢 REACTIVE ENGINE ADAPTER FOR VUE 3 (v1.9.0)\n *\n * Нативно интегрирует синхронные и асингулярные графы ядра с реактивной системой Vue 3.\n * Исключает десинхронизацию за счет shallowRef-трансляции и триггеров onScopeDispose.\n */\nexport function useReactiveValue<T>(item: T): any {\n // Быстрый выход для примитивов или невалидных объектов, переданных по ошибке\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // Инициализируем реактивный контейнер Vue 3 стартовым снимком из ядра\n const stateRef = shallowRef(isSignal ? (item as any).value : item)\n let unsubscribe: CleanupFn | null = null\n\n // =========================================================================\n // СЦЕНАРИЙ 1: Подписка на Сигналы и Вычисляемые свойства (Computed)\n // =========================================================================\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue: any) => {\n stateRef.value = newValue // Vue 3 автоматически триггерит обновление DOM\n })\n }\n // =========================================================================\n // СЦЕНАРИЙ 2: Подписка на глубокие Proxy-объекты и массивы (reactive)\n // =========================================================================\n else if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const reactiveItem = item as any\n unsubscribe = reactiveItem.__subscribe(() => {\n // Для Proxy-коллекций принудительно создаем shallow-копию ссылки,\n // заставляя ленивый движок Vue 3 безупречно перерисовывать шаблоны .push/.splice мутаций!\n stateRef.value = Array.isArray(reactiveItem) ? [...reactiveItem] : { ...reactiveItem }\n })\n }\n\n // Автоматически освобождаем оперативную память и гасим эффекты ядра\n // при размонтировании Vue-компонента или закрытии EffectScope\n if (unsubscribe) {\n onScopeDispose(() => {\n unsubscribe!()\n })\n }\n\n return stateRef\n}\n"],"mappings":";;AAWA,SAAgB,EAAoB,GAAc;CAEhD,IAA2C,OAAO,KAAS,aAAvD,GACF,OAAO,EAAW,CAAI;CAGxB,IAAM,IAAW,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAGzF,IAAW,EAAW,IAAY,EAAa,QAAQ,CAAI,GAC7D,IAAgC;CAKpC,IAAI,GAEF,IAAc,EAAW,WAAW,MAAkB;EACpD,EAAS,QAAQ;CACnB,CAAC;MAKE,IAAI,iBAAiB,KAAQ,OAAQ,EAAiC,eAAgB,YAAY;EACrG,IAAM,IAAe;EACrB,IAAc,EAAa,kBAAkB;GAG3C,EAAS,QAAQ,MAAM,QAAQ,CAAY,IAAI,CAAC,GAAG,CAAY,IAAI,EAAE,GAAG,EAAa;EACvF,CAAC;CACH;CAUA,OANI,KACF,QAAqB;EACnB,EAAa;CACf,CAAC,GAGI;AACT"}
1
+ {"version":3,"file":"core.vue-adapter.mjs","names":[],"sources":["../../src/vue/core.vue-adapter.ts"],"sourcesContent":["import { shallowRef, onScopeDispose, ShallowRef } from 'vue'\nimport { ISignalLike, CleanupFn } from '../core/types'\n\n/**\n * ⚛️ Расширенный интерфейс для поддержки внутренних методов подписки Proxy-объектов ядра\n */\ninterface IReactiveProxyExtension {\n __subscribe?: (cb: () => void) => CleanupFn;\n}\n\n/**\n * 🟢 REACTIVE ENGINE ADAPTER FOR VUE 3 (v2.6.1)\n *\n * Нативно интегрирует синхронные и асинхронные графы ядра с реактивной системой Vue 3.\n * Автоматически выводит тип внутренней структуры данных и возвращает строго типизированный ShallowRef.\n */\nexport function useReactiveValue<V>(signal: ISignalLike<V>): ShallowRef<V>;\nexport function useReactiveValue<T extends object>(proxy: T): ShallowRef<T>;\nexport function useReactiveValue<T>(primitive: T): ShallowRef<T>;\nexport function useReactiveValue(item: unknown): ShallowRef<unknown> {\n // Быстрый выход для примитивов или невалидных объектов, переданных по ошибке\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item)\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // Вычисляем стартовое значение без использования unsafe any\n const getInitialValue = (): unknown => {\n if (isSignal) {\n return (item as ISignalLike<unknown>).value\n }\n return item\n }\n\n // Инициализируем реактивный контейнер Vue 3 стартовым снимком из ядра\n const stateRef = shallowRef(getInitialValue())\n let unsubscribe: CleanupFn | null = null\n\n // =========================================================================\n // СЦЕНАРИЙ 1: Подписка на Сигналы и Вычисляемые свойства (Computed)\n // =========================================================================\n if (isSignal) {\n const signalItem = item as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue) => {\n stateRef.value = newValue // Vue 3 автоматически триггерит обновление DOM\n })\n }\n // =========================================================================\n // СЦЕНАРИЙ 2: Подписка на глубокие Proxy-объекты и массивы (reactive)\n // =========================================================================\n else if ('__subscribe' in item) {\n const potentialProxy = item as IReactiveProxyExtension\n if (typeof potentialProxy.__subscribe === 'function') {\n unsubscribe = potentialProxy.__subscribe(() => {\n // Для Proxy-коллекций принудительно создаем shallow-копию ссылки,\n // заставляя ленивый движок Vue 3 безупречно перерисовывать шаблоны .push/.splice мутаций!\n stateRef.value = Array.isArray(item) ? [...item] : { ...item }\n })\n }\n }\n\n // Автоматически освобождаем оперативную память и гасим эффекты ядра\n // при размонтировании Vue-компонента или закрытии EffectScope\n if (unsubscribe) {\n onScopeDispose(() => {\n if (unsubscribe) unsubscribe()\n })\n }\n\n return stateRef\n}\n"],"mappings":";;AAmBA,SAAgB,EAAiB,GAAoC;CAEnE,IAA2C,OAAO,KAAS,aAAvD,GACF,OAAO,EAAW,CAAI;CAGxB,IAAM,IAAW,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAWzF,IAAW,EAPX,IACM,EAA8B,QAEjC,CAIoC,GACzC,IAAgC;CAKpC,IAAI,GAEF,IAAc,EAAW,WAAW,MAAa;EAC/C,EAAS,QAAQ;CACnB,CAAC;MAKE,IAAI,iBAAiB,GAAM;EAC9B,IAAM,IAAiB;EACvB,AAAI,OAAO,EAAe,eAAgB,eACxC,IAAc,EAAe,kBAAkB;GAG7C,EAAS,QAAQ,MAAM,QAAQ,CAAI,IAAI,CAAC,GAAG,CAAI,IAAI,EAAE,GAAG,EAAK;EAC/D,CAAC;CAEL;CAUA,OANI,KACF,QAAqB;EACnB,AAAI,KAAa,EAAY;CAC/B,CAAC,GAGI;AACT"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core.cjs"),t=require("./core.vue-adapter.cjs");let n=require("vue");var r=class extends e.ReactiveEngine{frameworkPrefix=`vue-auto`;reactive(e,t){let n=e=>{if(!(!e||typeof e!=`object`||Symbol.iterator in e)){Reflect.has(e,`__subscribe`)||Object.defineProperty(e,"__subscribe",{get:()=>e=>this.effect(()=>{try{JSON.stringify(r)}catch{Object.values(r)}e()},`vue-proxy-internal-subscription`),configurable:!0,enumerable:!1}),Reflect.has(e,`__v_skip`)||Object.defineProperty(e,"__v_skip",{get:()=>!0,configurable:!0,enumerable:!1});for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&typeof e[t]==`object`&&n(e[t])}};n(e);let r=super.reactive(e,t);return r}use(e){if(typeof e!=`object`||!e)return(0,n.shallowRef)(e);if(`subscribe`in e&&typeof e.subscribe==`function`){let t=e,r=(0,n.shallowRef)(this.untrack(()=>t.value)),i=`__subscribe`in t&&typeof t.__subscribe==`function`?t.__subscribe(()=>{r.value=t.value,(0,n.triggerRef)(r)}):t.subscribe(e=>{r.value=e,(0,n.triggerRef)(r)});return(0,n.getCurrentInstance)()?(0,n.onUnmounted)(()=>i()):(0,n.getCurrentScope)()&&(0,n.onScopeDispose)(()=>i()),r}let t=(0,n.shallowRef)(e);if(`__subscribe`in e&&typeof e.__subscribe==`function`){let r=e.__subscribe(()=>{(0,n.triggerRef)(t)});(0,n.getCurrentInstance)()?(0,n.onUnmounted)(()=>r()):(0,n.getCurrentScope)()&&(0,n.onScopeDispose)(()=>r())}return t}};exports.ReactiveEngine=r,exports.useReactiveValue=t.useReactiveValue;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core.cjs"),t=require("./core.vue-adapter.cjs");let n=require("vue");var r=class extends e.ReactiveEngine{frameworkPrefix=`vue-auto`;reactive(e,t){let n,r=e=>{if(!e||typeof e!=`object`||Symbol.iterator in e)return;let t=e;Reflect.has(t,`__subscribe`)||Object.defineProperty(t,"__subscribe",{get:()=>e=>this.effect(()=>{try{JSON.stringify(n)}catch{Object.values(n)}e()},`vue-proxy-internal-subscription`),configurable:!0,enumerable:!1}),Reflect.has(t,`__v_skip`)||Object.defineProperty(t,"__v_skip",{get:()=>!0,configurable:!0,enumerable:!1});for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let n=t[e];typeof n==`object`&&n&&r(n)}};return r(e),n=super.reactive(e,t),n}use(e){if(typeof e!=`object`||!e)return(0,n.shallowRef)(e);if(`subscribe`in e&&typeof e.subscribe==`function`){let t=e,r=(0,n.shallowRef)(this.untrack(()=>t.value)),i=`__subscribe`in t&&typeof t.__subscribe==`function`&&t.__subscribe?t.__subscribe(()=>{r.value=t.value,(0,n.triggerRef)(r)}):t.subscribe(e=>{r.value=e,(0,n.triggerRef)(r)});return(0,n.getCurrentInstance)()?(0,n.onUnmounted)(()=>i()):(0,n.getCurrentScope)()&&(0,n.onScopeDispose)(()=>i()),r}let t=(0,n.shallowRef)(e),r=e;if(`__subscribe`in r&&typeof r.__subscribe==`function`){let e=r.__subscribe(()=>{(0,n.triggerRef)(t)});(0,n.getCurrentInstance)()?(0,n.onUnmounted)(()=>e()):(0,n.getCurrentScope)()&&(0,n.onScopeDispose)(()=>e())}return t}};exports.ReactiveEngine=r,exports.useReactiveValue=t.useReactiveValue;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../src/vue/index.ts"],"sourcesContent":["import { CleanupFn, ISignalLike } from '../core/types'\nimport { ReactiveEngineAutomatic } from '../core/core'\nimport { getCurrentInstance, getCurrentScope, onScopeDispose, onUnmounted, shallowRef, ShallowRef, triggerRef } from 'vue'\n\nexport { useReactiveValue } from './core.vue-adapter'\n\nclass ExtendedReactiveEngine extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'vue-auto'\n\n public override reactive<T extends object>(target: T, name?: string): T {\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n if (!Reflect.has(obj, '__subscribe')) {\n Object.defineProperty(obj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n if (!Reflect.has(obj, '__v_skip')) {\n Object.defineProperty(obj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] === 'object') {\n injectVueMarkers(obj[key])\n }\n }\n }\n\n injectVueMarkers(target)\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Адаптирует примитивы реактивного ядра во Vue ShallowRef объекты.\n * Полностью изолирует начальное чтение от реактивного контекста ядра (Topological Isolation).\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item) as any\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n \n // ⚛️ КЛЮЧЕВОЙ ФИКС: Чтение стартового значения оборачиваем в untrack(),\n // предотвращая ложные каскадные вызовы Pull-валидатора при инициализации!\n const initialValue = this.untrack(() => signalItem.value)\n const state = shallowRef(initialValue)\n\n // Используем пассивный хук __subscribe, если он доступен (для computed-нод),\n // чтобы избежать спама множественных push-уведомлений посреди транзакции\n const hasHook = '__subscribe' in signalItem && typeof (signalItem as any).__subscribe === 'function'\n \n const unsubscribe = hasHook \n ? (signalItem as any).__subscribe(() => {\n state.value = signalItem.value\n triggerRef(state)\n })\n : signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as any\n }\n\n const state = shallowRef(item)\n\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as any\n }\n}\n\nexport { ExtendedReactiveEngine as ReactiveEngine }\n"],"mappings":"2JAMA,IAAM,EAAN,cAAqC,EAAA,cAAwB,CAC3D,gBAAqC,WAErC,SAA2C,EAAW,EAAkB,CACtE,IAAM,EAAoB,GAAa,CACjC,MAAC,GAAO,OAAO,GAAQ,UAAY,OAAO,YAAY,GAqB1D,CAnBK,QAAQ,IAAI,EAAK,aAAa,GACjC,OAAO,eAAe,EAAK,cAAe,CACxC,QACU,GACC,KAAK,WAAa,CACvB,GAAI,CACF,KAAK,UAAU,CAAa,CAC9B,MAAY,CACV,OAAO,OAAO,CAAwC,CACxD,CACA,EAAG,CACL,EAAG,iCAAiC,EAGxC,aAAc,GACd,WAAY,EACd,CAAC,EAGE,QAAQ,IAAI,EAAK,UAAU,GAC9B,OAAO,eAAe,EAAK,WAAY,CACrC,QAAW,GACX,aAAc,GACd,WAAY,EACd,CAAC,EAGH,IAAK,IAAM,KAAO,EACZ,OAAO,UAAU,eAAe,KAAK,EAAK,CAAG,GAAK,OAAO,EAAI,IAAS,UACxE,EAAiB,EAAI,EAAI,CAL1B,CAQL,EAEA,EAAiB,CAAM,EACvB,IAAM,EAAgB,MAAM,SAAS,EAAQ,CAAI,EACjD,OAAO,CACT,CAMA,IAAc,EAAyE,CACrF,GAA2C,OAAO,GAAS,WAAvD,EACF,OAAA,EAAA,EAAA,WAAA,CAAkB,CAAI,EAKxB,GAFiB,cAAe,GAAQ,OAAQ,EAAiC,WAAc,WAEjF,CACZ,IAAM,EAAc,EAKd,GAAA,EAAA,EAAA,WAAA,CADe,KAAK,YAAc,EAAW,KAC1B,CAAY,EAM/B,EAFU,gBAAiB,GAAc,OAAQ,EAAmB,aAAgB,WAGrF,EAAmB,gBAAkB,CACpC,EAAM,MAAQ,EAAW,OACzB,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,EACD,EAAW,UAAW,GAAa,CACjC,EAAM,MAAQ,GACd,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,EAQL,OANA,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,KAAkB,EAAY,CAAC,GAC1B,EAAA,EAAA,gBAAA,CAAoB,IACzB,EAAA,EAAA,eAAA,KAAqB,EAAY,CAAC,EAG7B,CACT,CAEA,IAAM,GAAA,EAAA,EAAA,WAAA,CAAmB,CAAI,EAE7B,GAAI,gBAAiB,GAAQ,OAAQ,EAAiC,aAAgB,WAAY,CAChG,IAAM,EAAgB,EAAiC,gBAAoD,EACzG,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,GAED,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,KAAkB,EAAY,CAAC,GAC1B,EAAA,EAAA,gBAAA,CAAoB,IACzB,EAAA,EAAA,eAAA,KAAqB,EAAY,CAAC,CAEtC,CAEA,OAAO,CACT,CACF"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../src/vue/index.ts"],"sourcesContent":["import { CleanupFn, ISignalLike } from '../core/types'\nimport { ReactiveEngineAutomatic } from '../core/core'\nimport { getCurrentInstance, getCurrentScope, onScopeDispose, onUnmounted, shallowRef, ShallowRef, triggerRef } from 'vue'\n\nexport { useReactiveValue } from './core.vue-adapter'\n\n/**\n * ⚛️ Расширенный интерфейс для поддержки внутренних маркеров Vue и Ядра на прокси-объектах\n */\ninterface IVueProxyExtensions {\n __subscribe?: (cb: () => void) => CleanupFn;\n __v_skip?: boolean;\n}\n\nclass ExtendedReactiveEngine extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'vue-auto'\n\n public override reactive<T extends object>(target: T, name?: string): T {\n // Внутренний кэш оригинального прокси, который будет доступен в замыкании макрозадачи подписки\n let originalProxy: T\n\n const injectVueMarkers = (obj: unknown): void => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in (obj as object)) return\n\n const targetObj = obj as Record<string, unknown> & IVueProxyExtensions\n\n if (!Reflect.has(targetObj, '__subscribe')) {\n Object.defineProperty(targetObj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n if (!Reflect.has(targetObj, '__v_skip')) {\n Object.defineProperty(targetObj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n for (const key in targetObj) {\n if (Object.prototype.hasOwnProperty.call(targetObj, key)) {\n const value = targetObj[key]\n if (value !== null && typeof value === 'object') {\n injectVueMarkers(value)\n }\n }\n }\n }\n\n injectVueMarkers(target)\n originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Адаптирует примитивы реактивного ядра во Vue ShallowRef объекты.\n * Полностью изолирует начальное чтение от реактивного контекста ядра (Topological Isolation).\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n type ReturnType = T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>\n\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item) as ReturnType\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = item as unknown as ISignalLike<unknown>\n\n // ⚛️ КЛЮЧЕВОЙ ФИКС: Чтение стартового значения оборачиваем в untrack(),\n // предотвращая ложные каскадные вызовы Pull-валидатора при инициализации!\n const initialValue = this.untrack(() => signalItem.value)\n const state = shallowRef(initialValue)\n\n // Используем пассивный системный хук __subscribe, если он доступен (для computed-нод),\n // чтобы избежать спама множественных push-уведомлений посреди транзакции\n const hasHook = '__subscribe' in signalItem && typeof signalItem.__subscribe === 'function'\n\n const unsubscribe = hasHook && signalItem.__subscribe\n ? signalItem.__subscribe(() => {\n state.value = signalItem.value\n triggerRef(state)\n })\n : signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as ReturnType\n }\n\n const state = shallowRef(item)\n const potentialProxy = item as Record<string, unknown> & IVueProxyExtensions\n\n if ('__subscribe' in potentialProxy && typeof potentialProxy.__subscribe === 'function') {\n const unsubscribe = potentialProxy.__subscribe(() => {\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as ReturnType\n }\n}\n\nexport { ExtendedReactiveEngine as ReactiveEngine }\n"],"mappings":"2JAcA,IAAM,EAAN,cAAqC,EAAA,cAAwB,CAC3D,gBAAqC,WAErC,SAA2C,EAAW,EAAkB,CAEtE,IAAI,EAEE,EAAoB,GAAuB,CAC/C,GAAI,CAAC,GAAO,OAAO,GAAQ,UAAY,OAAO,YAAa,EAAgB,OAE3E,IAAM,EAAY,EAEb,QAAQ,IAAI,EAAW,aAAa,GACvC,OAAO,eAAe,EAAW,cAAe,CAC9C,QACU,GACC,KAAK,WAAa,CACvB,GAAI,CACF,KAAK,UAAU,CAAa,CAC9B,MAAY,CACV,OAAO,OAAO,CAAwC,CACxD,CACA,EAAG,CACL,EAAG,iCAAiC,EAGxC,aAAc,GACd,WAAY,EACd,CAAC,EAGE,QAAQ,IAAI,EAAW,UAAU,GACpC,OAAO,eAAe,EAAW,WAAY,CAC3C,QAAW,GACX,aAAc,GACd,WAAY,EACd,CAAC,EAGH,IAAK,IAAM,KAAO,EAChB,GAAI,OAAO,UAAU,eAAe,KAAK,EAAW,CAAG,EAAG,CACxD,IAAM,EAAQ,EAAU,GACF,OAAO,GAAU,UAAnC,GACF,EAAiB,CAAK,CAE1B,CAEJ,EAIA,OAFA,EAAiB,CAAM,EACvB,EAAgB,MAAM,SAAS,EAAQ,CAAI,EACpC,CACT,CAMA,IAAc,EAAyE,CAGrF,GAA2C,OAAO,GAAS,WAAvD,EACF,OAAA,EAAA,EAAA,WAAA,CAAkB,CAAI,EAKxB,GAFiB,cAAe,GAAQ,OAAQ,EAAiC,WAAc,WAEjF,CACZ,IAAM,EAAa,EAKb,GAAA,EAAA,EAAA,WAAA,CADe,KAAK,YAAc,EAAW,KAC1B,CAAY,EAM/B,EAFU,gBAAiB,GAAc,OAAO,EAAW,aAAgB,YAElD,EAAW,YACtC,EAAW,gBAAkB,CAC7B,EAAM,MAAQ,EAAW,OACzB,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,EACC,EAAW,UAAW,GAAa,CACnC,EAAM,MAAQ,GACd,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,EAQH,OANA,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,KAAkB,EAAY,CAAC,GAC1B,EAAA,EAAA,gBAAA,CAAoB,IACzB,EAAA,EAAA,eAAA,KAAqB,EAAY,CAAC,EAG7B,CACT,CAEA,IAAM,GAAA,EAAA,EAAA,WAAA,CAAmB,CAAI,EACvB,EAAiB,EAEvB,GAAI,gBAAiB,GAAkB,OAAO,EAAe,aAAgB,WAAY,CACvF,IAAM,EAAc,EAAe,gBAAkB,EACnD,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,GAED,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,KAAkB,EAAY,CAAC,GAC1B,EAAA,EAAA,gBAAA,CAAoB,IACzB,EAAA,EAAA,eAAA,KAAqB,EAAY,CAAC,CAEtC,CAEA,OAAO,CACT,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAgF,UAAU,EAAc,MAAM,KAAK,CAAA;AAE1H,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,cAAM,sBAAuB,SAAQ,uBAAuB;IAC1D,UAAmB,eAAe,SAAa;IAE/B,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC;IA2CvE;;;OAGG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;CAsDvF;AAED,OAAO,EAAE,sBAAsB,IAAI,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,WAAW,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAgF,UAAU,EAAc,MAAM,KAAK,CAAA;AAE1H,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAUrD,cAAM,sBAAuB,SAAQ,uBAAuB;IAC1D,UAAmB,eAAe,SAAa;IAE/B,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC;IAmDvE;;;OAGG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;CAyDvF;AAED,OAAO,EAAE,sBAAsB,IAAI,cAAc,EAAE,CAAA"}
@@ -5,47 +5,48 @@ import { getCurrentInstance as n, getCurrentScope as r, onScopeDispose as i, onU
5
5
  var c = class extends e {
6
6
  frameworkPrefix = "vue-auto";
7
7
  reactive(e, t) {
8
- let n = (e) => {
9
- if (!(!e || typeof e != "object" || Symbol.iterator in e)) {
10
- Reflect.has(e, "__subscribe") || Object.defineProperty(e, "__subscribe", {
11
- get: () => (e) => this.effect(() => {
12
- try {
13
- JSON.stringify(r);
14
- } catch {
15
- Object.values(r);
16
- }
17
- e();
18
- }, "vue-proxy-internal-subscription"),
19
- configurable: !0,
20
- enumerable: !1
21
- }), Reflect.has(e, "__v_skip") || Object.defineProperty(e, "__v_skip", {
22
- get: () => !0,
23
- configurable: !0,
24
- enumerable: !1
25
- });
26
- for (let t in e) Object.prototype.hasOwnProperty.call(e, t) && typeof e[t] == "object" && n(e[t]);
8
+ let n, r = (e) => {
9
+ if (!e || typeof e != "object" || Symbol.iterator in e) return;
10
+ let t = e;
11
+ Reflect.has(t, "__subscribe") || Object.defineProperty(t, "__subscribe", {
12
+ get: () => (e) => this.effect(() => {
13
+ try {
14
+ JSON.stringify(n);
15
+ } catch {
16
+ Object.values(n);
17
+ }
18
+ e();
19
+ }, "vue-proxy-internal-subscription"),
20
+ configurable: !0,
21
+ enumerable: !1
22
+ }), Reflect.has(t, "__v_skip") || Object.defineProperty(t, "__v_skip", {
23
+ get: () => !0,
24
+ configurable: !0,
25
+ enumerable: !1
26
+ });
27
+ for (let e in t) if (Object.prototype.hasOwnProperty.call(t, e)) {
28
+ let n = t[e];
29
+ typeof n == "object" && n && r(n);
27
30
  }
28
31
  };
29
- n(e);
30
- let r = super.reactive(e, t);
31
- return r;
32
+ return r(e), n = super.reactive(e, t), n;
32
33
  }
33
34
  use(e) {
34
35
  if (typeof e != "object" || !e) return o(e);
35
36
  if ("subscribe" in e && typeof e.subscribe == "function") {
36
- let t = e, c = o(this.untrack(() => t.value)), l = "__subscribe" in t && typeof t.__subscribe == "function" ? t.__subscribe(() => {
37
+ let t = e, c = o(this.untrack(() => t.value)), l = "__subscribe" in t && typeof t.__subscribe == "function" && t.__subscribe ? t.__subscribe(() => {
37
38
  c.value = t.value, s(c);
38
39
  }) : t.subscribe((e) => {
39
40
  c.value = e, s(c);
40
41
  });
41
42
  return n() ? a(() => l()) : r() && i(() => l()), c;
42
43
  }
43
- let t = o(e);
44
- if ("__subscribe" in e && typeof e.__subscribe == "function") {
45
- let o = e.__subscribe(() => {
44
+ let t = o(e), c = e;
45
+ if ("__subscribe" in c && typeof c.__subscribe == "function") {
46
+ let e = c.__subscribe(() => {
46
47
  s(t);
47
48
  });
48
- n() ? a(() => o()) : r() && i(() => o());
49
+ n() ? a(() => e()) : r() && i(() => e());
49
50
  }
50
51
  return t;
51
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/vue/index.ts"],"sourcesContent":["import { CleanupFn, ISignalLike } from '../core/types'\nimport { ReactiveEngineAutomatic } from '../core/core'\nimport { getCurrentInstance, getCurrentScope, onScopeDispose, onUnmounted, shallowRef, ShallowRef, triggerRef } from 'vue'\n\nexport { useReactiveValue } from './core.vue-adapter'\n\nclass ExtendedReactiveEngine extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'vue-auto'\n\n public override reactive<T extends object>(target: T, name?: string): T {\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n if (!Reflect.has(obj, '__subscribe')) {\n Object.defineProperty(obj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n if (!Reflect.has(obj, '__v_skip')) {\n Object.defineProperty(obj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] === 'object') {\n injectVueMarkers(obj[key])\n }\n }\n }\n\n injectVueMarkers(target)\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Адаптирует примитивы реактивного ядра во Vue ShallowRef объекты.\n * Полностью изолирует начальное чтение от реактивного контекста ядра (Topological Isolation).\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item) as any\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n \n // ⚛️ КЛЮЧЕВОЙ ФИКС: Чтение стартового значения оборачиваем в untrack(),\n // предотвращая ложные каскадные вызовы Pull-валидатора при инициализации!\n const initialValue = this.untrack(() => signalItem.value)\n const state = shallowRef(initialValue)\n\n // Используем пассивный хук __subscribe, если он доступен (для computed-нод),\n // чтобы избежать спама множественных push-уведомлений посреди транзакции\n const hasHook = '__subscribe' in signalItem && typeof (signalItem as any).__subscribe === 'function'\n \n const unsubscribe = hasHook \n ? (signalItem as any).__subscribe(() => {\n state.value = signalItem.value\n triggerRef(state)\n })\n : signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as any\n }\n\n const state = shallowRef(item)\n\n if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const unsubscribe = ((item as Record<string, unknown>).__subscribe as (cb: () => void) => CleanupFn)(() => {\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as any\n }\n}\n\nexport { ExtendedReactiveEngine as ReactiveEngine }\n"],"mappings":";;;;AAMA,IAAM,IAAN,cAAqC,EAAwB;CAC3D,kBAAqC;CAErC,SAA2C,GAAW,GAAkB;EACtE,IAAM,KAAoB,MAAa;GACjC,OAAC,KAAO,OAAO,KAAQ,YAAY,OAAO,YAAY,IAqB1D;IAnBK,QAAQ,IAAI,GAAK,aAAa,KACjC,OAAO,eAAe,GAAK,eAAe;KACxC,YACU,MACC,KAAK,aAAa;MACvB,IAAI;OACF,KAAK,UAAU,CAAa;MAC9B,QAAY;OACV,OAAO,OAAO,CAAwC;MACxD;MACA,EAAG;KACL,GAAG,iCAAiC;KAGxC,cAAc;KACd,YAAY;IACd,CAAC,GAGE,QAAQ,IAAI,GAAK,UAAU,KAC9B,OAAO,eAAe,GAAK,YAAY;KACrC,WAAW;KACX,cAAc;KACd,YAAY;IACd,CAAC;IAGH,KAAK,IAAM,KAAO,GAChB,AAAI,OAAO,UAAU,eAAe,KAAK,GAAK,CAAG,KAAK,OAAO,EAAI,MAAS,YACxE,EAAiB,EAAI,EAAI;GAL1B;EAQL;EAEA,EAAiB,CAAM;EACvB,IAAM,IAAgB,MAAM,SAAS,GAAQ,CAAI;EACjD,OAAO;CACT;CAMA,IAAc,GAAyE;EACrF,IAA2C,OAAO,KAAS,aAAvD,GACF,OAAO,EAAW,CAAI;EAKxB,IAFiB,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAEjF;GACZ,IAAM,IAAc,GAKd,IAAQ,EADO,KAAK,cAAc,EAAW,KAC1B,CAAY,GAM/B,IAFU,iBAAiB,KAAc,OAAQ,EAAmB,eAAgB,aAGrF,EAAmB,kBAAkB;IAEpC,AADA,EAAM,QAAQ,EAAW,OACzB,EAAW,CAAK;GAClB,CAAC,IACD,EAAW,WAAW,MAAa;IAEjC,AADA,EAAM,QAAQ,GACd,EAAW,CAAK;GAClB,CAAC;GAQL,OANI,EAAmB,IACrB,QAAkB,EAAY,CAAC,IACtB,EAAgB,KACzB,QAAqB,EAAY,CAAC,GAG7B;EACT;EAEA,IAAM,IAAQ,EAAW,CAAI;EAE7B,IAAI,iBAAiB,KAAQ,OAAQ,EAAiC,eAAgB,YAAY;GAChG,IAAM,IAAgB,EAAiC,kBAAoD;IACzG,EAAW,CAAK;GAClB,CAAC;GAED,AAAI,EAAmB,IACrB,QAAkB,EAAY,CAAC,IACtB,EAAgB,KACzB,QAAqB,EAAY,CAAC;EAEtC;EAEA,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/vue/index.ts"],"sourcesContent":["import { CleanupFn, ISignalLike } from '../core/types'\nimport { ReactiveEngineAutomatic } from '../core/core'\nimport { getCurrentInstance, getCurrentScope, onScopeDispose, onUnmounted, shallowRef, ShallowRef, triggerRef } from 'vue'\n\nexport { useReactiveValue } from './core.vue-adapter'\n\n/**\n * ⚛️ Расширенный интерфейс для поддержки внутренних маркеров Vue и Ядра на прокси-объектах\n */\ninterface IVueProxyExtensions {\n __subscribe?: (cb: () => void) => CleanupFn;\n __v_skip?: boolean;\n}\n\nclass ExtendedReactiveEngine extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'vue-auto'\n\n public override reactive<T extends object>(target: T, name?: string): T {\n // Внутренний кэш оригинального прокси, который будет доступен в замыкании макрозадачи подписки\n let originalProxy: T\n\n const injectVueMarkers = (obj: unknown): void => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in (obj as object)) return\n\n const targetObj = obj as Record<string, unknown> & IVueProxyExtensions\n\n if (!Reflect.has(targetObj, '__subscribe')) {\n Object.defineProperty(targetObj, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n return this.effect(() => {\n try {\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb()\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false\n })\n }\n\n if (!Reflect.has(targetObj, '__v_skip')) {\n Object.defineProperty(targetObj, '__v_skip', {\n get: () => true,\n configurable: true,\n enumerable: false\n })\n }\n\n for (const key in targetObj) {\n if (Object.prototype.hasOwnProperty.call(targetObj, key)) {\n const value = targetObj[key]\n if (value !== null && typeof value === 'object') {\n injectVueMarkers(value)\n }\n }\n }\n }\n\n injectVueMarkers(target)\n originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Адаптирует примитивы реактивного ядра во Vue ShallowRef объекты.\n * Полностью изолирует начальное чтение от реактивного контекста ядра (Topological Isolation).\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n type ReturnType = T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>\n\n if (item === null || item === undefined || typeof item !== 'object') {\n return shallowRef(item) as ReturnType\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n if (isSignal) {\n const signalItem = item as unknown as ISignalLike<unknown>\n\n // ⚛️ КЛЮЧЕВОЙ ФИКС: Чтение стартового значения оборачиваем в untrack(),\n // предотвращая ложные каскадные вызовы Pull-валидатора при инициализации!\n const initialValue = this.untrack(() => signalItem.value)\n const state = shallowRef(initialValue)\n\n // Используем пассивный системный хук __subscribe, если он доступен (для computed-нод),\n // чтобы избежать спама множественных push-уведомлений посреди транзакции\n const hasHook = '__subscribe' in signalItem && typeof signalItem.__subscribe === 'function'\n\n const unsubscribe = hasHook && signalItem.__subscribe\n ? signalItem.__subscribe(() => {\n state.value = signalItem.value\n triggerRef(state)\n })\n : signalItem.subscribe((newValue) => {\n state.value = newValue\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n\n return state as ReturnType\n }\n\n const state = shallowRef(item)\n const potentialProxy = item as Record<string, unknown> & IVueProxyExtensions\n\n if ('__subscribe' in potentialProxy && typeof potentialProxy.__subscribe === 'function') {\n const unsubscribe = potentialProxy.__subscribe(() => {\n triggerRef(state)\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as ReturnType\n }\n}\n\nexport { ExtendedReactiveEngine as ReactiveEngine }\n"],"mappings":";;;;AAcA,IAAM,IAAN,cAAqC,EAAwB;CAC3D,kBAAqC;CAErC,SAA2C,GAAW,GAAkB;EAEtE,IAAI,GAEE,KAAoB,MAAuB;GAC/C,IAAI,CAAC,KAAO,OAAO,KAAQ,YAAY,OAAO,YAAa,GAAgB;GAE3E,IAAM,IAAY;GAqBlB,AAnBK,QAAQ,IAAI,GAAW,aAAa,KACvC,OAAO,eAAe,GAAW,eAAe;IAC9C,YACU,MACC,KAAK,aAAa;KACvB,IAAI;MACF,KAAK,UAAU,CAAa;KAC9B,QAAY;MACV,OAAO,OAAO,CAAwC;KACxD;KACA,EAAG;IACL,GAAG,iCAAiC;IAGxC,cAAc;IACd,YAAY;GACd,CAAC,GAGE,QAAQ,IAAI,GAAW,UAAU,KACpC,OAAO,eAAe,GAAW,YAAY;IAC3C,WAAW;IACX,cAAc;IACd,YAAY;GACd,CAAC;GAGH,KAAK,IAAM,KAAO,GAChB,IAAI,OAAO,UAAU,eAAe,KAAK,GAAW,CAAG,GAAG;IACxD,IAAM,IAAQ,EAAU;IACxB,AAAsB,OAAO,KAAU,YAAnC,KACF,EAAiB,CAAK;GAE1B;EAEJ;EAIA,OAFA,EAAiB,CAAM,GACvB,IAAgB,MAAM,SAAS,GAAQ,CAAI,GACpC;CACT;CAMA,IAAc,GAAyE;EAGrF,IAA2C,OAAO,KAAS,aAAvD,GACF,OAAO,EAAW,CAAI;EAKxB,IAFiB,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAEjF;GACZ,IAAM,IAAa,GAKb,IAAQ,EADO,KAAK,cAAc,EAAW,KAC1B,CAAY,GAM/B,IAFU,iBAAiB,KAAc,OAAO,EAAW,eAAgB,cAElD,EAAW,cACtC,EAAW,kBAAkB;IAE7B,AADA,EAAM,QAAQ,EAAW,OACzB,EAAW,CAAK;GAClB,CAAC,IACC,EAAW,WAAW,MAAa;IAEnC,AADA,EAAM,QAAQ,GACd,EAAW,CAAK;GAClB,CAAC;GAQH,OANI,EAAmB,IACrB,QAAkB,EAAY,CAAC,IACtB,EAAgB,KACzB,QAAqB,EAAY,CAAC,GAG7B;EACT;EAEA,IAAM,IAAQ,EAAW,CAAI,GACvB,IAAiB;EAEvB,IAAI,iBAAiB,KAAkB,OAAO,EAAe,eAAgB,YAAY;GACvF,IAAM,IAAc,EAAe,kBAAkB;IACnD,EAAW,CAAK;GAClB,CAAC;GAED,AAAI,EAAmB,IACrB,QAAkB,EAAY,CAAC,IACtB,EAAgB,KACzB,QAAqB,EAAY,CAAC;EAEtC;EAEA,OAAO;CACT;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pravosleva/reactive-engine",
3
- "version": "2.6.0",
3
+ "version": "2.6.1",
4
4
  "engines": {
5
5
  "node": ">=22.20.0"
6
6
  },