@pravosleva/reactive-engine 1.7.0-beta → 1.8.0-beta

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.
Files changed (76) hide show
  1. package/dist/angular/ReactiveEngine4Angular.cjs +1 -1
  2. package/dist/angular/ReactiveEngine4Angular.cjs.map +1 -1
  3. package/dist/angular/ReactiveEngine4Angular.d.ts +16 -7
  4. package/dist/angular/ReactiveEngine4Angular.d.ts.map +1 -1
  5. package/dist/angular/ReactiveEngine4Angular.mjs +4 -4
  6. package/dist/angular/ReactiveEngine4Angular.mjs.map +1 -1
  7. package/dist/angular/core.angular.auto.test.d.ts +2 -0
  8. package/dist/angular/core.angular.auto.test.d.ts.map +1 -0
  9. package/dist/angular/core.angular.test.d.ts +2 -0
  10. package/dist/angular/core.angular.test.d.ts.map +1 -0
  11. package/dist/angular/index.cjs +1 -1
  12. package/dist/angular/index.d.ts +2 -2
  13. package/dist/angular/index.d.ts.map +1 -1
  14. package/dist/angular/index.mjs +1 -1
  15. package/dist/angular/rxjs-interop.d.ts +1 -1
  16. package/dist/angular/rxjs-interop.d.ts.map +1 -1
  17. package/dist/core/AbstractService.d.ts +3 -3
  18. package/dist/core/core.auto.test.d.ts +2 -0
  19. package/dist/core/core.auto.test.d.ts.map +1 -0
  20. package/dist/core/core.d.ts +105 -366
  21. package/dist/core/core.d.ts.map +1 -1
  22. package/dist/core/types.d.ts +102 -72
  23. package/dist/core/types.d.ts.map +1 -1
  24. package/dist/core.cjs +1 -1
  25. package/dist/core.cjs.map +1 -1
  26. package/dist/core.mjs +497 -414
  27. package/dist/core.mjs.map +1 -1
  28. package/dist/index.cjs +1 -1
  29. package/dist/index.mjs +11 -11
  30. package/dist/react/ReactiveEngine4React.cjs +1 -1
  31. package/dist/react/ReactiveEngine4React.cjs.map +1 -1
  32. package/dist/react/ReactiveEngine4React.d.ts +16 -8
  33. package/dist/react/ReactiveEngine4React.d.ts.map +1 -1
  34. package/dist/react/ReactiveEngine4React.mjs +5 -5
  35. package/dist/react/ReactiveEngine4React.mjs.map +1 -1
  36. package/dist/react/core.react.auto.test.d.ts +2 -0
  37. package/dist/react/core.react.auto.test.d.ts.map +1 -0
  38. package/dist/react/hooks/FilteredCatalog.auto.test.d.ts +2 -0
  39. package/dist/react/hooks/FilteredCatalog.auto.test.d.ts.map +1 -0
  40. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts +2 -0
  41. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts.map +1 -0
  42. package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts +2 -0
  43. package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts.map +1 -0
  44. package/dist/react/index.cjs +1 -1
  45. package/dist/react/index.d.ts +2 -2
  46. package/dist/react/index.d.ts.map +1 -1
  47. package/dist/react/index.mjs +1 -1
  48. package/dist/reactive-engine.umd.js +2 -2
  49. package/dist/reactive-engine.umd.js.map +1 -1
  50. package/dist/vue/ReactiveEngine4Vue.cjs +1 -1
  51. package/dist/vue/ReactiveEngine4Vue.cjs.map +1 -1
  52. package/dist/vue/ReactiveEngine4Vue.d.ts +21 -13
  53. package/dist/vue/ReactiveEngine4Vue.d.ts.map +1 -1
  54. package/dist/vue/ReactiveEngine4Vue.mjs +27 -17
  55. package/dist/vue/ReactiveEngine4Vue.mjs.map +1 -1
  56. package/dist/vue/composables/useReactiveValue.auto.test.d.ts +2 -0
  57. package/dist/vue/composables/useReactiveValue.auto.test.d.ts.map +1 -0
  58. package/dist/vue/core.vue.auto.test.d.ts +2 -0
  59. package/dist/vue/core.vue.auto.test.d.ts.map +1 -0
  60. package/dist/vue/core.vue.test.d.ts +2 -0
  61. package/dist/vue/core.vue.test.d.ts.map +1 -0
  62. package/dist/vue/index.cjs +1 -1
  63. package/dist/vue/index.d.ts +1 -1
  64. package/dist/vue/index.d.ts.map +1 -1
  65. package/dist/vue/index.mjs +1 -1
  66. package/package.json +1 -1
  67. package/dist/angular/ReactiveEngine4Angular.test.d.ts +0 -2
  68. package/dist/angular/ReactiveEngine4Angular.test.d.ts.map +0 -1
  69. package/dist/decorators/withThrottleComputed/_withThrottleComputed.d.ts +0 -22
  70. package/dist/decorators/withThrottleComputed/_withThrottleComputed.d.ts.map +0 -1
  71. package/dist/utils/getExtractedValues.cjs +0 -2
  72. package/dist/utils/getExtractedValues.cjs.map +0 -1
  73. package/dist/utils/getExtractedValues.mjs +0 -24
  74. package/dist/utils/getExtractedValues.mjs.map +0 -1
  75. package/dist/vue/ReactiveEngine4Vue.test.d.ts +0 -2
  76. package/dist/vue/ReactiveEngine4Vue.test.d.ts.map +0 -1
@@ -1,23 +1,33 @@
1
- import { ReactiveEngine as e } from "../core.mjs";
1
+ import { ReactiveEngineAutomatic as e } from "../core.mjs";
2
2
  import { getCurrentInstance as t, getCurrentScope as n, onScopeDispose as r, onUnmounted as i, shallowRef as a, triggerRef as o } from "vue";
3
3
  //#region src/vue/ReactiveEngine4Vue.ts
4
4
  var s = class extends e {
5
- frameworkPrefix = "vue";
5
+ frameworkPrefix = "vue-auto";
6
6
  reactive(e, t) {
7
- Reflect.has(e, "__subscribe") || Object.defineProperty(e, "__subscribe", {
8
- get: () => (e) => this.effect(() => {
9
- try {
10
- JSON.stringify(n);
11
- } catch {
12
- Object.values(n);
13
- }
14
- e();
15
- }, "vue-proxy-internal-subscription"),
16
- configurable: !0,
17
- enumerable: !1
18
- });
19
- let n = super.reactive(e, t);
20
- return n;
7
+ let n = (e) => {
8
+ if (!(!e || typeof e != "object" || Symbol.iterator in e)) {
9
+ Reflect.has(e, "__subscribe") || Object.defineProperty(e, "__subscribe", {
10
+ get: () => (e) => this.effect(() => {
11
+ try {
12
+ JSON.stringify(r);
13
+ } catch {
14
+ Object.values(r);
15
+ }
16
+ e();
17
+ }, "vue-proxy-internal-subscription"),
18
+ configurable: !0,
19
+ enumerable: !1
20
+ }), Reflect.has(e, "__v_skip") || Object.defineProperty(e, "__v_skip", {
21
+ get: () => !0,
22
+ configurable: !0,
23
+ enumerable: !1
24
+ });
25
+ for (let t in e) Object.prototype.hasOwnProperty.call(e, t) && typeof e[t] == "object" && n(e[t]);
26
+ }
27
+ };
28
+ n(e);
29
+ let r = super.reactive(e, t);
30
+ return r;
21
31
  }
22
32
  use(e) {
23
33
  if (typeof e != "object" || !e) return a(e);
@@ -38,6 +48,6 @@ var s = class extends e {
38
48
  }
39
49
  };
40
50
  //#endregion
41
- export { s as ReactiveEngine4Vue };
51
+ export { s as ReactiveEngine4VueAutomatic };
42
52
 
43
53
  //# sourceMappingURL=ReactiveEngine4Vue.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReactiveEngine4Vue.mjs","names":[],"sources":["../../src/vue/ReactiveEngine4Vue.ts"],"sourcesContent":["import { shallowRef, onUnmounted, getCurrentInstance, getCurrentScope, onScopeDispose, triggerRef, type ShallowRef } from 'vue'\nimport { ReactiveEngine as OriginalReactiveEngine, type CleanupFn } from '../core/core'\n\nexport interface ISignalLike<V> {\n value: V;\n subscribe: (cb: (v: V) => void) => CleanupFn;\n}\n\nexport class ReactiveEngine4Vue extends OriginalReactiveEngine {\n protected override frameworkPrefix = 'vue'\n\n /**\n * Переопределяем метод создания реактивных объектов для Vue-версии движка.\n * Безопасно внедряет скрытое свойство __subscribe в оригинальный граф без double-proxying.\n *\n * @template T\n * @param {T} target - Исходный объект/массив\n * @param {string} [name] - Имя сущности для логирования\n * @returns {T} - Строго типизированный оригинальный Proxy-объект ядра\n */\n public override reactive<T extends object>(target: T, name?: string): T {\n // Внедряем геттер __subscribe непосредственно в целевой target ДО передачи его в super.reactive()\n if (!Reflect.has(target, '__subscribe')) {\n Object.defineProperty(target, '__subscribe', {\n get: () => {\n return (cb: () => void) => {\n // Создаем честный эффект ядра на оригинальном инстансе адаптера Vue\n return this.effect(() => {\n try {\n // Вызываем глубокий прогрев Proxy-геттеров ядра core.ts на оригинальном Proxy\n JSON.stringify(originalProxy)\n } catch (e) {\n Object.values(originalProxy as Record<string, unknown>)\n }\n cb() // Пинаем триггер обновления Vue\n }, 'vue-proxy-internal-subscription')\n }\n },\n configurable: true,\n enumerable: false // Скрываем из логов и переборов, чтобы не спамить в JSON\n })\n }\n\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Использование реактивного значения во Vue-компоненте или EffectScope.\n * Полиморфно поддерживает как атомарные Сигналы/Computed, так и глубокие реактивные Proxy-объекты.\n *\n * @template T\n * @param {T} item - Реактивный объект ядра (сигнал или прокси)\n * @returns {T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>} - Обертка ShallowRef\n */\n public use<T>(item: T): T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T> {\n // Безопасная проверка на пустые значения рантайма\n if (item === null || item === undefined || typeof item !== 'object') {\n const state = shallowRef(item)\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n // Проверяем, реализует ли переданный объект интерфейс Сигнала (наличие метода subscribe)\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // ------------------------------------------------====\n // СЦЕНАРИЙ А: Передан примитивный Сигнал или Computed\n // ------------------------------------------------====\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n const state = shallowRef(signalItem.value)\n\n const unsubscribe = 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 // Честное strict-приведение к целевому условному типу дженерика\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n\n // ------------------------------------------------====\n // СЦЕНАРИЙ Б: Передан Proxy-объект из метода reactive()\n // ------------------------------------------------====\n const state = shallowRef(item)\n\n // Если объект создан через наш переопределенный метод reactive(), у него гарантированно будет геттер `__subscribe`\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) // Нативно прогоняем автобатчинг ядра прямо во Vue Реф!\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n}\n"],"mappings":";;;AAQA,IAAa,IAAb,cAAwC,EAAuB;CAC7D,kBAAqC;CAWrC,SAA2C,GAAW,GAAkB;EAEtE,AAAK,QAAQ,IAAI,GAAQ,aAAa,KACpC,OAAO,eAAe,GAAQ,eAAe;GAC3C,YACU,MAEC,KAAK,aAAa;IACvB,IAAI;KAEF,KAAK,UAAU,CAAa;IAC9B,QAAY;KACV,OAAO,OAAO,CAAwC;IACxD;IACA,EAAG;GACL,GAAG,iCAAiC;GAGxC,cAAc;GACd,YAAY;EACd,CAAC;EAGH,IAAM,IAAgB,MAAM,SAAS,GAAQ,CAAI;EACjD,OAAO;CACT;CAUA,IAAc,GAAyE;EAErF,IAA2C,OAAO,KAAS,aAAvD,GAEF,OADc,EAAW,CAClB;EAST,IALiB,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAKjF;GACZ,IAAM,IAAc,GACd,IAAQ,EAAW,EAAW,KAAK,GAEnC,IAAc,EAAW,WAAW,MAAa;IAErD,AADA,EAAM,QAAQ,GACd,EAAW,CAAK;GAClB,CAAC;GASD,OAPI,EAAmB,IACrB,QAAkB,EAAY,CAAC,IACtB,EAAgB,KACzB,QAAqB,EAAY,CAAC,GAI7B;EACT;EAKA,IAAM,IAAQ,EAAW,CAAI;EAG7B,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":"ReactiveEngine4Vue.mjs","names":[],"sources":["../../src/vue/ReactiveEngine4Vue.ts"],"sourcesContent":["import { shallowRef, onUnmounted, getCurrentInstance, getCurrentScope, onScopeDispose, triggerRef, type ShallowRef } from 'vue'\nimport { ReactiveEngine, ReactiveEngineAutomatic } from '../core/core'\nimport { CleanupFn } from '../core/types'\n\nexport interface ISignalLike<V> {\n value: V;\n subscribe: (cb: (v: V) => void) => CleanupFn;\n}\n\n/**\n * 💚 1. СИНХРОННЫЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3\n * Базируется на плоском синхронном Push/Pull графе ядра.\n */\nexport class ReactiveEngine4Vue extends ReactiveEngine {\n protected override frameworkPrefix = 'vue'\n\n /**\n * Переопределяем метод создания реактивных объектов для Vue-версии движка.\n * Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.\n */\n public override reactive<T extends object>(target: T, name?: string): T {\n // Вспомогательная функция для глубокого рекурсивного внедрения маркеров фреймворка\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n // 1. Внедряем мост подписки __subscribe\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 // 2. Внедряем маркер __v_skip непосредственно в target\n // Благодаря Reflect.get в ядре, этот маркер будет возвращаться для ВСЕХ уровней вложенности графа!\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 // Рекурсивно обходим все дочерние свойства, чтобы застраховать вложенные массивы и объекты\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 // Запускаем глубокую инжекцию маркеров во все узлы дерева target\n injectVueMarkers(target)\n\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\n\n /**\n * Использование реактивного значения во Vue-компоненте или EffectScope.\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 const state = shallowRef(item)\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\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 const state = shallowRef(signalItem.value)\n\n const unsubscribe = 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 (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\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 (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n}\n\n/**\n * 🤖 2. АВТОМАТИЧЕСКИЙ РЕАКТИВНЫЙ АДАПТЕР ДЛЯ VUE 3 (АСИНХРОННЫЙ ШЕДУЛЕР)\n * Наследует ReactiveEngineAutomatic и аппаратно склеивает цепочки мутаций в микрозадачи.\n */\nexport class ReactiveEngine4VueAutomatic extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'vue-auto'\n\n /**\n * Переопределяем метод создания реактивных объектов для Vue-версии движка.\n * Рекурсивно внедряет свойства __subscribe и __v_skip в target, защищая глубокие структуры от Vue 3.\n */\n public override reactive<T extends object>(target: T, name?: string): T {\n // Вспомогательная функция для глубокого рекурсивного внедрения маркеров фреймворка\n const injectVueMarkers = (obj: any) => {\n if (!obj || typeof obj !== 'object' || Symbol.iterator in obj) return\n\n // 1. Внедряем мост подписки __subscribe\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 // 2. Внедряем маркер __v_skip непосредственно в target\n // Благодаря Reflect.get в ядре, этот маркер будет возвращаться для ВСЕХ уровней вложенности графа!\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 // Рекурсивно обходим все дочерние свойства, чтобы застраховать вложенные массивы и объекты\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 // Запускаем глубокую инжекцию маркеров во все узлы дерева target\n injectVueMarkers(target)\n\n const originalProxy = super.reactive(target, name)\n return originalProxy\n }\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 const state = shallowRef(item)\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\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 const state = shallowRef(signalItem.value)\n\n const unsubscribe = 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 (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\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) // triggerRef теперь будет вызван строго 1 раз на выходе в Event Loop\n })\n\n if (getCurrentInstance()) {\n onUnmounted(() => unsubscribe())\n } else if (getCurrentScope()) {\n onScopeDispose(() => unsubscribe())\n }\n }\n\n return state as (T extends ISignalLike<infer V> ? ShallowRef<V> : ShallowRef<T>)\n }\n}\n"],"mappings":";;;AAyHA,IAAa,IAAb,cAAiD,EAAwB;CACvE,kBAAqC;CAMrC,SAA2C,GAAW,GAAkB;EAEtE,IAAM,KAAoB,MAAa;GACjC,OAAC,KAAO,OAAO,KAAQ,YAAY,OAAO,YAAY,IAwB1D;IArBK,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,GAKE,QAAQ,IAAI,GAAK,UAAU,KAC9B,OAAO,eAAe,GAAK,YAAY;KACrC,WAAW;KACX,cAAc;KACd,YAAY;IACd,CAAC;IAIH,KAAK,IAAM,KAAO,GAChB,AAAI,OAAO,UAAU,eAAe,KAAK,GAAK,CAAG,KAAK,OAAO,EAAI,MAAS,YACxE,EAAiB,EAAI,EAAI;GAN1B;EASL;EAGA,EAAiB,CAAM;EAEvB,IAAM,IAAgB,MAAM,SAAS,GAAQ,CAAI;EACjD,OAAO;CACT;CAEA,IAAc,GAAyE;EACrF,IAA2C,OAAO,KAAS,aAAvD,GAEF,OADc,EAAW,CAClB;EAKT,IAFiB,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAEjF;GACZ,IAAM,IAAc,GACd,IAAQ,EAAW,EAAW,KAAK,GAEnC,IAAc,EAAW,WAAW,MAAa;IAErD,AADA,EAAM,QAAQ,GACd,EAAW,CAAK;GAClB,CAAC;GAQD,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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useReactiveValue.auto.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReactiveValue.auto.test.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useReactiveValue.auto.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.vue.auto.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.vue.auto.test.d.ts","sourceRoot":"","sources":["../../src/vue/core.vue.auto.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.vue.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.vue.test.d.ts","sourceRoot":"","sources":["../../src/vue/core.vue.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ReactiveEngine4Vue.cjs"),t=require("./composables/useReactiveValue.cjs");exports.ReactiveEngine=e.ReactiveEngine4Vue,exports.useReactiveValue=t.useReactiveValue;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ReactiveEngine4Vue.cjs"),t=require("./composables/useReactiveValue.cjs");exports.ReactiveEngine=e.ReactiveEngine4VueAutomatic,exports.useReactiveValue=t.useReactiveValue;
@@ -1,3 +1,3 @@
1
- export { ReactiveEngine4Vue as ReactiveEngine } from './ReactiveEngine4Vue';
1
+ export { ReactiveEngine4VueAutomatic as ReactiveEngine } from './ReactiveEngine4Vue';
2
2
  export { useReactiveValue } from './composables/useReactiveValue';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAEpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA"}
@@ -1,3 +1,3 @@
1
- import { ReactiveEngine4Vue as e } from "./ReactiveEngine4Vue.mjs";
1
+ import { ReactiveEngine4VueAutomatic as e } from "./ReactiveEngine4Vue.mjs";
2
2
  import { useReactiveValue as t } from "./composables/useReactiveValue.mjs";
3
3
  export { e as ReactiveEngine, t as useReactiveValue };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pravosleva/reactive-engine",
3
- "version": "1.7.0-beta",
3
+ "version": "1.8.0-beta",
4
4
  "engines": {
5
5
  "node": ">=22.20.0"
6
6
  },
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ReactiveEngine4Angular.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReactiveEngine4Angular.test.d.ts","sourceRoot":"","sources":["../../src/angular/ReactiveEngine4Angular.test.ts"],"names":[],"mappings":""}
@@ -1,22 +0,0 @@
1
- import { ReactiveEngine } from '../../core';
2
- interface ThrottleComputedOptions {
3
- /** Лимит троттлинга в миллисекундах */
4
- limit: number;
5
- }
6
- /**
7
- * Специализированный декоратор для создания затроттленных вычисляемых свойств (computed).
8
- * Ограничивает частоту обновления значения сигнала, предотвращая "дребезг" и высокую частоту тиков
9
- * при спаме входных данных (например, при движении мыши, скролле или вводе текста).
10
- *
11
- * @param engine Экземпляр реактивного движка для создания сигналов
12
- * @param getter Чистая функция вычисления значения
13
- * @param options Настройки троттлинга (limit в мс)
14
- * @param signalName Необязательное имя для логгера
15
- */
16
- export declare const withThrottleComputed: <T>(engine: ReactiveEngine, getter: () => T, options: ThrottleComputedOptions, signalName?: string) => {
17
- readonly value: T;
18
- subscribe: (cb: (val: T) => void) => import('../..').CleanupFn;
19
- destroy: () => void;
20
- };
21
- export {};
22
- //# sourceMappingURL=_withThrottleComputed.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_withThrottleComputed.d.ts","sourceRoot":"","sources":["../../../src/decorators/withThrottleComputed/_withThrottleComputed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,UAAU,uBAAuB;IAC/B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,EACpC,QAAQ,cAAc,EACtB,QAAQ,MAAM,CAAC,EACf,SAAS,uBAAuB,EAChC,aAAa,MAAM;oBA8DJ,CAAC;oBAGE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI;;CAGnC,CAAC"}
@@ -1,2 +0,0 @@
1
- var e=({tested:e,expectedKey:t,valueType:n})=>{let r=[];if(!e||!Array.isArray(e))return r;for(let i=0,a=e.length;i<a;i++){let a=e[i];if(typeof a!=`string`)continue;let o;switch(n){case`number`:o=RegExp(`\\[${t}=(?<value>\\d+)\\]`,`g`);break;default:o=RegExp(`\\[${t}=(?<value>.*?)\\]`,`g`);break}for(let e of a.matchAll(o))e?.groups&&r.push(e.groups.value)}return r};exports.getExtractedValues=e;
2
- //# sourceMappingURL=getExtractedValues.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getExtractedValues.cjs","names":[],"sources":["../../src/utils/getExtractedValues.ts"],"sourcesContent":["export const getExtractedValues = ({\n tested, expectedKey, valueType\n}: {\n tested: string[];\n expectedKey: string;\n valueType: 'number' | 'string';\n}): string[] => {\n const results: string[] = []\n if (!tested || !Array.isArray(tested)) return results // Предохранитель от пустых массивов\n\n for (let i = 0, max = tested.length; i < max; i++) {\n const t = tested[i]\n if (typeof t !== 'string') continue // ЗАЩИТА: Пропускаем всё, что не является валидной строкой\n\n let regex\n switch (valueType) {\n case 'number':\n regex = new RegExp(`\\\\[${expectedKey}=(?<value>\\\\d+)\\\\]`, 'g')\n break\n case 'string':\n default:\n regex = new RegExp(`\\\\[${expectedKey}=(?<value>.*?)\\\\]`, 'g')\n break\n }\n\n for (const n of t.matchAll(regex)) {\n if (n?.groups) { results.push(n.groups.value) }\n }\n }\n return results\n}\n"],"mappings":"AAAA,IAAa,GAAsB,CACjC,SAAQ,cAAa,eAKP,CACd,IAAM,EAAoB,CAAC,EAC3B,GAAI,CAAC,GAAU,CAAC,MAAM,QAAQ,CAAM,EAAG,OAAO,EAE9C,IAAK,IAAI,EAAI,EAAG,EAAM,EAAO,OAAQ,EAAI,EAAK,IAAK,CACjD,IAAM,EAAI,EAAO,GACjB,GAAI,OAAO,GAAM,SAAU,SAE3B,IAAI,EACJ,OAAQ,EAAR,CACA,IAAK,SACH,EAAY,OAAO,MAAM,EAAY,oBAAqB,GAAG,EAC7D,MAEF,QACE,EAAY,OAAO,MAAM,EAAY,mBAAoB,GAAG,EAC5D,KACF,CAEA,IAAK,IAAM,KAAK,EAAE,SAAS,CAAK,EAC1B,GAAG,QAAU,EAAQ,KAAK,EAAE,OAAO,KAAK,CAEhD,CACA,OAAO,CACT"}
@@ -1,24 +0,0 @@
1
- //#region src/utils/getExtractedValues.ts
2
- var e = ({ tested: e, expectedKey: t, valueType: n }) => {
3
- let r = [];
4
- if (!e || !Array.isArray(e)) return r;
5
- for (let i = 0, a = e.length; i < a; i++) {
6
- let a = e[i];
7
- if (typeof a != "string") continue;
8
- let o;
9
- switch (n) {
10
- case "number":
11
- o = RegExp(`\\[${t}=(?<value>\\d+)\\]`, "g");
12
- break;
13
- default:
14
- o = RegExp(`\\[${t}=(?<value>.*?)\\]`, "g");
15
- break;
16
- }
17
- for (let e of a.matchAll(o)) e?.groups && r.push(e.groups.value);
18
- }
19
- return r;
20
- };
21
- //#endregion
22
- export { e as getExtractedValues };
23
-
24
- //# sourceMappingURL=getExtractedValues.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getExtractedValues.mjs","names":[],"sources":["../../src/utils/getExtractedValues.ts"],"sourcesContent":["export const getExtractedValues = ({\n tested, expectedKey, valueType\n}: {\n tested: string[];\n expectedKey: string;\n valueType: 'number' | 'string';\n}): string[] => {\n const results: string[] = []\n if (!tested || !Array.isArray(tested)) return results // Предохранитель от пустых массивов\n\n for (let i = 0, max = tested.length; i < max; i++) {\n const t = tested[i]\n if (typeof t !== 'string') continue // ЗАЩИТА: Пропускаем всё, что не является валидной строкой\n\n let regex\n switch (valueType) {\n case 'number':\n regex = new RegExp(`\\\\[${expectedKey}=(?<value>\\\\d+)\\\\]`, 'g')\n break\n case 'string':\n default:\n regex = new RegExp(`\\\\[${expectedKey}=(?<value>.*?)\\\\]`, 'g')\n break\n }\n\n for (const n of t.matchAll(regex)) {\n if (n?.groups) { results.push(n.groups.value) }\n }\n }\n return results\n}\n"],"mappings":";AAAA,IAAa,KAAsB,EACjC,WAAQ,gBAAa,mBAKP;CACd,IAAM,IAAoB,CAAC;CAC3B,IAAI,CAAC,KAAU,CAAC,MAAM,QAAQ,CAAM,GAAG,OAAO;CAE9C,KAAK,IAAI,IAAI,GAAG,IAAM,EAAO,QAAQ,IAAI,GAAK,KAAK;EACjD,IAAM,IAAI,EAAO;EACjB,IAAI,OAAO,KAAM,UAAU;EAE3B,IAAI;EACJ,QAAQ,GAAR;GACA,KAAK;IACH,IAAY,OAAO,MAAM,EAAY,qBAAqB,GAAG;IAC7D;GAEF;IACE,IAAY,OAAO,MAAM,EAAY,oBAAoB,GAAG;IAC5D;EACF;EAEA,KAAK,IAAM,KAAK,EAAE,SAAS,CAAK,GAC9B,AAAI,GAAG,UAAU,EAAQ,KAAK,EAAE,OAAO,KAAK;CAEhD;CACA,OAAO;AACT"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ReactiveEngine4Vue.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ReactiveEngine4Vue.test.d.ts","sourceRoot":"","sources":["../../src/vue/ReactiveEngine4Vue.test.ts"],"names":[],"mappings":""}