@pravosleva/reactive-engine 2.6.0-beta.4 → 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.
@@ -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-beta.4",
3
+ "version": "2.6.1",
4
4
  "engines": {
5
5
  "node": ">=22.20.0"
6
6
  },