@pravosleva/reactive-engine 1.4.2-beta → 1.5.3-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.
- package/dist/AbstractService.cjs.map +1 -1
- package/dist/AbstractService.mjs.map +1 -1
- package/dist/BaseREServiceEnhanced.cjs.map +1 -1
- package/dist/BaseREServiceEnhanced.mjs.map +1 -1
- package/dist/_react-bindings.d.ts.map +1 -1
- package/dist/angular/ReactiveEngine4Angular.cjs.map +1 -1
- package/dist/angular/ReactiveEngine4Angular.d.ts.map +1 -1
- package/dist/angular/ReactiveEngine4Angular.mjs.map +1 -1
- package/dist/angular/rxjs-interop.d.ts.map +1 -1
- package/dist/core/AbstractService.d.ts.map +1 -1
- package/dist/core/BaseREServiceEnhanced.d.ts.map +1 -1
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.mjs +22 -6
- package/dist/core.mjs.map +1 -1
- package/dist/decorators/withCache/withCache.d.ts.map +1 -1
- package/dist/decorators/withDebounce/withDebounce.d.ts.map +1 -1
- package/dist/decorators/withLongPolling/withLongPolling.d.ts.map +1 -1
- package/dist/decorators/withThrottle/withThrottle.d.ts.map +1 -1
- package/dist/decorators/withThrottleAndCache/withThrottleAndCache.d.ts.map +1 -1
- package/dist/decorators/withThrottleComputed/withThrottleComputed.d.ts.map +1 -1
- package/dist/react/ReactiveEngine4React.cjs.map +1 -1
- package/dist/react/ReactiveEngine4React.d.ts.map +1 -1
- package/dist/react/ReactiveEngine4React.mjs.map +1 -1
- package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs.map +1 -1
- package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs.map +1 -1
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs.map +1 -1
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs.map +1 -1
- package/dist/utils/getExtractedValues.cjs.map +1 -1
- package/dist/utils/getExtractedValues.d.ts.map +1 -1
- package/dist/utils/getExtractedValues.mjs.map +1 -1
- package/dist/vue/ReactiveEngine4Vue.cjs +1 -1
- package/dist/vue/ReactiveEngine4Vue.cjs.map +1 -1
- package/dist/vue/ReactiveEngine4Vue.d.ts +1 -0
- package/dist/vue/ReactiveEngine4Vue.d.ts.map +1 -1
- package/dist/vue/ReactiveEngine4Vue.mjs +1 -0
- package/dist/vue/ReactiveEngine4Vue.mjs.map +1 -1
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue0.cjs","names":[],"sources":["../../../../src/react/hooks/useReactiveValue0/useReactiveValue0.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react'\nimport { CleanupFn } from '../../../core'\n\ninterface ObservableItem<T> {\n readonly value: T\n subscribe: (cb: (val: T) => void) => CleanupFn\n destroy?: () => void\n}\n\ntype ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>)\n\n/**\n * Изоморфный фоллбэк-хук для извлечения текущего значения из реактивных примитивов ядра\n * (Signal, Computed, Resource) и управления подпиской в окружениях **React 16.8+ и React 17**.\n *\n * В отличие от современной версии `useReactiveValue`, данный хук спроектирован на базе классической\n * связки `useState` + `useEffect`. Он содержит встроенный механизм упреждающей синхронизации\n * (Pre-emptive Synchronization Pattern), предотвращающий рассинхронизацию данных (Tearing) и мерцание UI\n * во время асинхронных микрозадач планировщика React.\n *\n * ### Особенности управления памятью:\n * 1. **Глобальные сигналы (Сервисы/Синглтоны):** При размонтировании компонента хук выполняет\n * только стандартную отписку от обновлений. Метод `.destroy()` **не вызывается**,\n * что сохраняет глобальное состояние системы в безопасности.\n * 2. **Локальные фабрики (`() => engine.computed(...)`):** Если в качестве аргумента передана\n * функция-фабрика, хук понимает, что вычисление создано локально для этого экрана.\n * При анмаунте компонента хук автоматически вызовет `.destroy()`, предотвращая утечки памяти в ядре.\n *\n * @template T - Тип данных, инкапсулированных внутри реактивного элемента.\n * @param {ReactiveInput<T>} input - Готовый реактивный элемент ядра или ленивая функция-фабрика, возвращающая его.\n * @returns {T} Актуальное синхронизированное значение реактивного элемента.\n *\n * @example\n * ```tsx\n * import { useReactiveValue0 } from '@pravosleva/reactive-engine/react';\n * import { userInfoService } from '~/store';\n *\n * // Сценарий 1: Прямая подписка на долгоживущий сигнал сервиса в legacy-компоненте\n * export const LegacyCounterDisplay = () => {\n * const counter = useReactiveValue0(userInfoService.counter);\n * return <span>Значение: {counter}</span>;\n * };\n *\n * // Сценарий 2: Использование ленивой фабрики во React 17 проектах (авто-очистка ядра при анмаунте)\n * export const LegacyFilteredList = ({ query }: { query: string }) => {\n * const filteredData = useReactiveValue0(() =>\n * engine.computed(() => userInfoService.list.value.filter(item => item.includes(query)))\n * );\n * return <ul>{filteredData.map(item => <li key={item}>{item}</li>)}</ul>;\n * };\n * ```\n */\nexport const useReactiveValue0 = <T>(input: ReactiveInput<T>): T => {\n const isFactory = typeof input === 'function'
|
|
1
|
+
{"version":3,"file":"useReactiveValue0.cjs","names":[],"sources":["../../../../src/react/hooks/useReactiveValue0/useReactiveValue0.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react'\nimport { CleanupFn } from '../../../core'\n\ninterface ObservableItem<T> {\n readonly value: T\n subscribe: (cb: (val: T) => void) => CleanupFn\n destroy?: () => void\n}\n\ntype ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>)\n\n/**\n * Изоморфный фоллбэк-хук для извлечения текущего значения из реактивных примитивов ядра\n * (Signal, Computed, Resource) и управления подпиской в окружениях **React 16.8+ и React 17**.\n *\n * В отличие от современной версии `useReactiveValue`, данный хук спроектирован на базе классической\n * связки `useState` + `useEffect`. Он содержит встроенный механизм упреждающей синхронизации\n * (Pre-emptive Synchronization Pattern), предотвращающий рассинхронизацию данных (Tearing) и мерцание UI\n * во время асинхронных микрозадач планировщика React.\n *\n * ### Особенности управления памятью:\n * 1. **Глобальные сигналы (Сервисы/Синглтоны):** При размонтировании компонента хук выполняет\n * только стандартную отписку от обновлений. Метод `.destroy()` **не вызывается**,\n * что сохраняет глобальное состояние системы в безопасности.\n * 2. **Локальные фабрики (`() => engine.computed(...)`):** Если в качестве аргумента передана\n * функция-фабрика, хук понимает, что вычисление создано локально для этого экрана.\n * При анмаунте компонента хук автоматически вызовет `.destroy()`, предотвращая утечки памяти в ядре.\n *\n * @template T - Тип данных, инкапсулированных внутри реактивного элемента.\n * @param {ReactiveInput<T>} input - Готовый реактивный элемент ядра или ленивая функция-фабрика, возвращающая его.\n * @returns {T} Актуальное синхронизированное значение реактивного элемента.\n *\n * @example\n * ```tsx\n * import { useReactiveValue0 } from '@pravosleva/reactive-engine/react';\n * import { userInfoService } from '~/store';\n *\n * // Сценарий 1: Прямая подписка на долгоживущий сигнал сервиса в legacy-компоненте\n * export const LegacyCounterDisplay = () => {\n * const counter = useReactiveValue0(userInfoService.counter);\n * return <span>Значение: {counter}</span>;\n * };\n *\n * // Сценарий 2: Использование ленивой фабрики во React 17 проектах (авто-очистка ядра при анмаунте)\n * export const LegacyFilteredList = ({ query }: { query: string }) => {\n * const filteredData = useReactiveValue0(() =>\n * engine.computed(() => userInfoService.list.value.filter(item => item.includes(query)))\n * );\n * return <ul>{filteredData.map(item => <li key={item}>{item}</li>)}</ul>;\n * };\n * ```\n */\nexport const useReactiveValue0 = <T>(input: ReactiveInput<T>): T => {\n const isFactory = typeof input === 'function'\n\n // NOTE: СТАБИЛИЗАЦИЯ ИНПУТА: защищает от бесконечных циклов при инлайн-стрелочных фабриках\n const factoryRef = useRef(input)\n useEffect(() => {\n factoryRef.current = input\n }, [input])\n\n // Вычисляем элемент строго 1 раз при монтировании, либо при смене ссылки на готовый сигнал\n const reactiveItem = useMemo(() => {\n if (typeof input === 'function') {\n return input() // Ленивый вызов фабрики ровно один раз за жизнь компонента\n }\n return input\n }, [isFactory ? undefined : input]) // Игнорируем ссылки инлайн-функций\n\n const [state, setState] = useState<T>(reactiveItem.value)\n const setStateRef = useRef(setState)\n\n // Держим ссылку на setState всегда актуальной для безопасных асинхронных вызовов\n useEffect(() => {\n setStateRef.current = setState\n }, [setState])\n\n // NOTE: СИНХРОНИЗАЦИЯ НА ОПЕРЕЖЕНИЕ (Теккущее значение):\n // Если между фазой рендера и выполнением useEffect значение в ядре библиотеки успело измениться,\n // мы синхронно подтягиваем актуальный стейт, исключая \"слепые пятна\" и мерцание UI.\n if (state !== reactiveItem.value) {\n setState(reactiveItem.value)\n }\n\n useEffect(() => {\n // Привязываем подписку ядра к триггеру обновлений React\n const unsubscribe = reactiveItem.subscribe((newValue) => {\n setStateRef.current(newValue)\n })\n\n return () => {\n unsubscribe()\n\n // NOTE: БЕЗОПАСНАЯ ОЧИСТКА ПАМЯТИ:\n // Метод .destroy() вызывается СТРОГО если объект был порожден локальной фабрикой.\n // Глобальные сигналы сервисов остаются в безопасности и не стираются из движка!\n if (isFactory && reactiveItem && typeof reactiveItem.destroy === 'function') {\n reactiveItem.destroy()\n }\n }\n }, [reactiveItem, isFactory])\n\n return state\n}\n"],"mappings":"uBAoDA,IAAa,EAAwB,GAA+B,CAClE,IAAM,EAAY,OAAO,GAAU,WAG7B,GAAA,EAAA,EAAA,OAAA,CAAoB,CAAK,GAC/B,EAAA,EAAA,UAAA,KAAgB,CACd,EAAW,QAAU,CACvB,EAAG,CAAC,CAAK,CAAC,EAGV,IAAM,GAAA,EAAA,EAAA,QAAA,KACA,OAAO,GAAU,WACZ,EAAM,EAER,EACN,CAAC,EAAY,IAAA,GAAY,CAAK,CAAC,EAE5B,CAAC,EAAO,IAAA,EAAA,EAAA,SAAA,CAAwB,EAAa,KAAK,EAClD,GAAA,EAAA,EAAA,OAAA,CAAqB,CAAQ,EAgCnC,OA7BA,EAAA,EAAA,UAAA,KAAgB,CACd,EAAY,QAAU,CACxB,EAAG,CAAC,CAAQ,CAAC,EAKT,IAAU,EAAa,OACzB,EAAS,EAAa,KAAK,GAG7B,EAAA,EAAA,UAAA,KAAgB,CAEd,IAAM,EAAc,EAAa,UAAW,GAAa,CACvD,EAAY,QAAQ,CAAQ,CAC9B,CAAC,EAED,UAAa,CACX,EAAY,EAKR,GAAa,GAAgB,OAAO,EAAa,SAAY,YAC/D,EAAa,QAAQ,CAEzB,CACF,EAAG,CAAC,EAAc,CAAS,CAAC,EAErB,CACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReactiveValue0.mjs","names":[],"sources":["../../../../src/react/hooks/useReactiveValue0/useReactiveValue0.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react'\nimport { CleanupFn } from '../../../core'\n\ninterface ObservableItem<T> {\n readonly value: T\n subscribe: (cb: (val: T) => void) => CleanupFn\n destroy?: () => void\n}\n\ntype ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>)\n\n/**\n * Изоморфный фоллбэк-хук для извлечения текущего значения из реактивных примитивов ядра\n * (Signal, Computed, Resource) и управления подпиской в окружениях **React 16.8+ и React 17**.\n *\n * В отличие от современной версии `useReactiveValue`, данный хук спроектирован на базе классической\n * связки `useState` + `useEffect`. Он содержит встроенный механизм упреждающей синхронизации\n * (Pre-emptive Synchronization Pattern), предотвращающий рассинхронизацию данных (Tearing) и мерцание UI\n * во время асинхронных микрозадач планировщика React.\n *\n * ### Особенности управления памятью:\n * 1. **Глобальные сигналы (Сервисы/Синглтоны):** При размонтировании компонента хук выполняет\n * только стандартную отписку от обновлений. Метод `.destroy()` **не вызывается**,\n * что сохраняет глобальное состояние системы в безопасности.\n * 2. **Локальные фабрики (`() => engine.computed(...)`):** Если в качестве аргумента передана\n * функция-фабрика, хук понимает, что вычисление создано локально для этого экрана.\n * При анмаунте компонента хук автоматически вызовет `.destroy()`, предотвращая утечки памяти в ядре.\n *\n * @template T - Тип данных, инкапсулированных внутри реактивного элемента.\n * @param {ReactiveInput<T>} input - Готовый реактивный элемент ядра или ленивая функция-фабрика, возвращающая его.\n * @returns {T} Актуальное синхронизированное значение реактивного элемента.\n *\n * @example\n * ```tsx\n * import { useReactiveValue0 } from '@pravosleva/reactive-engine/react';\n * import { userInfoService } from '~/store';\n *\n * // Сценарий 1: Прямая подписка на долгоживущий сигнал сервиса в legacy-компоненте\n * export const LegacyCounterDisplay = () => {\n * const counter = useReactiveValue0(userInfoService.counter);\n * return <span>Значение: {counter}</span>;\n * };\n *\n * // Сценарий 2: Использование ленивой фабрики во React 17 проектах (авто-очистка ядра при анмаунте)\n * export const LegacyFilteredList = ({ query }: { query: string }) => {\n * const filteredData = useReactiveValue0(() =>\n * engine.computed(() => userInfoService.list.value.filter(item => item.includes(query)))\n * );\n * return <ul>{filteredData.map(item => <li key={item}>{item}</li>)}</ul>;\n * };\n * ```\n */\nexport const useReactiveValue0 = <T>(input: ReactiveInput<T>): T => {\n const isFactory = typeof input === 'function'
|
|
1
|
+
{"version":3,"file":"useReactiveValue0.mjs","names":[],"sources":["../../../../src/react/hooks/useReactiveValue0/useReactiveValue0.ts"],"sourcesContent":["import { useState, useEffect, useRef, useMemo } from 'react'\nimport { CleanupFn } from '../../../core'\n\ninterface ObservableItem<T> {\n readonly value: T\n subscribe: (cb: (val: T) => void) => CleanupFn\n destroy?: () => void\n}\n\ntype ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>)\n\n/**\n * Изоморфный фоллбэк-хук для извлечения текущего значения из реактивных примитивов ядра\n * (Signal, Computed, Resource) и управления подпиской в окружениях **React 16.8+ и React 17**.\n *\n * В отличие от современной версии `useReactiveValue`, данный хук спроектирован на базе классической\n * связки `useState` + `useEffect`. Он содержит встроенный механизм упреждающей синхронизации\n * (Pre-emptive Synchronization Pattern), предотвращающий рассинхронизацию данных (Tearing) и мерцание UI\n * во время асинхронных микрозадач планировщика React.\n *\n * ### Особенности управления памятью:\n * 1. **Глобальные сигналы (Сервисы/Синглтоны):** При размонтировании компонента хук выполняет\n * только стандартную отписку от обновлений. Метод `.destroy()` **не вызывается**,\n * что сохраняет глобальное состояние системы в безопасности.\n * 2. **Локальные фабрики (`() => engine.computed(...)`):** Если в качестве аргумента передана\n * функция-фабрика, хук понимает, что вычисление создано локально для этого экрана.\n * При анмаунте компонента хук автоматически вызовет `.destroy()`, предотвращая утечки памяти в ядре.\n *\n * @template T - Тип данных, инкапсулированных внутри реактивного элемента.\n * @param {ReactiveInput<T>} input - Готовый реактивный элемент ядра или ленивая функция-фабрика, возвращающая его.\n * @returns {T} Актуальное синхронизированное значение реактивного элемента.\n *\n * @example\n * ```tsx\n * import { useReactiveValue0 } from '@pravosleva/reactive-engine/react';\n * import { userInfoService } from '~/store';\n *\n * // Сценарий 1: Прямая подписка на долгоживущий сигнал сервиса в legacy-компоненте\n * export const LegacyCounterDisplay = () => {\n * const counter = useReactiveValue0(userInfoService.counter);\n * return <span>Значение: {counter}</span>;\n * };\n *\n * // Сценарий 2: Использование ленивой фабрики во React 17 проектах (авто-очистка ядра при анмаунте)\n * export const LegacyFilteredList = ({ query }: { query: string }) => {\n * const filteredData = useReactiveValue0(() =>\n * engine.computed(() => userInfoService.list.value.filter(item => item.includes(query)))\n * );\n * return <ul>{filteredData.map(item => <li key={item}>{item}</li>)}</ul>;\n * };\n * ```\n */\nexport const useReactiveValue0 = <T>(input: ReactiveInput<T>): T => {\n const isFactory = typeof input === 'function'\n\n // NOTE: СТАБИЛИЗАЦИЯ ИНПУТА: защищает от бесконечных циклов при инлайн-стрелочных фабриках\n const factoryRef = useRef(input)\n useEffect(() => {\n factoryRef.current = input\n }, [input])\n\n // Вычисляем элемент строго 1 раз при монтировании, либо при смене ссылки на готовый сигнал\n const reactiveItem = useMemo(() => {\n if (typeof input === 'function') {\n return input() // Ленивый вызов фабрики ровно один раз за жизнь компонента\n }\n return input\n }, [isFactory ? undefined : input]) // Игнорируем ссылки инлайн-функций\n\n const [state, setState] = useState<T>(reactiveItem.value)\n const setStateRef = useRef(setState)\n\n // Держим ссылку на setState всегда актуальной для безопасных асинхронных вызовов\n useEffect(() => {\n setStateRef.current = setState\n }, [setState])\n\n // NOTE: СИНХРОНИЗАЦИЯ НА ОПЕРЕЖЕНИЕ (Теккущее значение):\n // Если между фазой рендера и выполнением useEffect значение в ядре библиотеки успело измениться,\n // мы синхронно подтягиваем актуальный стейт, исключая \"слепые пятна\" и мерцание UI.\n if (state !== reactiveItem.value) {\n setState(reactiveItem.value)\n }\n\n useEffect(() => {\n // Привязываем подписку ядра к триггеру обновлений React\n const unsubscribe = reactiveItem.subscribe((newValue) => {\n setStateRef.current(newValue)\n })\n\n return () => {\n unsubscribe()\n\n // NOTE: БЕЗОПАСНАЯ ОЧИСТКА ПАМЯТИ:\n // Метод .destroy() вызывается СТРОГО если объект был порожден локальной фабрикой.\n // Глобальные сигналы сервисов остаются в безопасности и не стираются из движка!\n if (isFactory && reactiveItem && typeof reactiveItem.destroy === 'function') {\n reactiveItem.destroy()\n }\n }\n }, [reactiveItem, isFactory])\n\n return state\n}\n"],"mappings":";;AAoDA,IAAa,KAAwB,MAA+B;CAClE,IAAM,IAAY,OAAO,KAAU,YAG7B,IAAa,EAAO,CAAK;CAC/B,QAAgB;EACd,EAAW,UAAU;CACvB,GAAG,CAAC,CAAK,CAAC;CAGV,IAAM,IAAe,QACf,OAAO,KAAU,aACZ,EAAM,IAER,GACN,CAAC,IAAY,KAAA,IAAY,CAAK,CAAC,GAE5B,CAAC,GAAO,KAAY,EAAY,EAAa,KAAK,GAClD,IAAc,EAAO,CAAQ;CAgCnC,OA7BA,QAAgB;EACd,EAAY,UAAU;CACxB,GAAG,CAAC,CAAQ,CAAC,GAKT,MAAU,EAAa,SACzB,EAAS,EAAa,KAAK,GAG7B,QAAgB;EAEd,IAAM,IAAc,EAAa,WAAW,MAAa;GACvD,EAAY,QAAQ,CAAQ;EAC9B,CAAC;EAED,aAAa;GAMX,AALA,EAAY,GAKR,KAAa,KAAgB,OAAO,EAAa,WAAY,cAC/D,EAAa,QAAQ;EAEzB;CACF,GAAG,CAAC,GAAc,CAAS,CAAC,GAErB;AACT"}
|
|
@@ -1 +1 @@
|
|
|
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[] = []
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getExtractedValues.d.ts","sourceRoot":"","sources":["../../src/utils/getExtractedValues.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,oCAEhC;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC,KAAG,MAAM,EAwBT,
|
|
1
|
+
{"version":3,"file":"getExtractedValues.d.ts","sourceRoot":"","sources":["../../src/utils/getExtractedValues.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,oCAEhC;IACD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC,KAAG,MAAM,EAwBT,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
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[] = []
|
|
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 +1,2 @@
|
|
|
1
|
-
const e=require("../core.cjs");let t=require("vue");var n=class extends e.ReactiveEngine{use(e){let n=(0,t.shallowRef)(e.value),r=e.subscribe(e=>{n.value=e,(0,t.triggerRef)(n)});return(0,t.getCurrentInstance)()?(0,t.onUnmounted)(()=>{r()}):(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>{r()}),n}};exports.ReactiveEngine4Vue=n;
|
|
1
|
+
const e=require("../core.cjs");let t=require("vue");var n=class extends e.ReactiveEngine{frameworkPrefix=`vue`;use(e){let n=(0,t.shallowRef)(e.value),r=e.subscribe(e=>{n.value=e,(0,t.triggerRef)(n)});return(0,t.getCurrentInstance)()?(0,t.onUnmounted)(()=>{r()}):(0,t.getCurrentScope)()&&(0,t.onScopeDispose)(()=>{r()}),n}};exports.ReactiveEngine4Vue=n;
|
|
2
2
|
//# sourceMappingURL=ReactiveEngine4Vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveEngine4Vue.cjs","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 class ReactiveEngine4Vue extends OriginalReactiveEngine {\n /**\n * Использование реактивного значения в Vue компоненте или EffectScope.\n * Нативно поддерживает сигналы (Push) и ленивые вычисляемые свойства (Pull).\n */\n public use<T>(item: { value: T; subscribe: (cb: (v: T) => void) => CleanupFn }): ShallowRef<T> {\n // Создаем локальную Vue-реактивную обертку со стартовым значением сигнала/computed\n const state = shallowRef(item.value)\n\n // Подписываемся на изменения реактивного элемента ядра\n const unsubscribe = item.subscribe((newValue) => {\n state.value = newValue // Обновляем Vue-реактивную переменную\n triggerRef(state) //
|
|
1
|
+
{"version":3,"file":"ReactiveEngine4Vue.cjs","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 class ReactiveEngine4Vue extends OriginalReactiveEngine {\n protected override frameworkPrefix = 'vue'\n\n /**\n * Использование реактивного значения в Vue компоненте или EffectScope.\n * Нативно поддерживает сигналы (Push) и ленивые вычисляемые свойства (Pull).\n */\n public use<T>(item: { value: T; subscribe: (cb: (v: T) => void) => CleanupFn }): ShallowRef<T> {\n // Создаем локальную Vue-реактивную обертку со стартовым значением сигнала/computed\n const state = shallowRef(item.value)\n\n // Подписываемся на изменения реактивного элемента ядра\n const unsubscribe = item.subscribe((newValue) => {\n state.value = newValue // Обновляем Vue-реактивную переменную\n triggerRef(state) // ПРИНУДИТЕЛЬНО заставляем Vue перерисовать шаблон\n })\n\n // Автоматическое управление жизненным циклом подписок во Vue\n if (getCurrentInstance()) {\n onUnmounted(() => {\n unsubscribe()\n })\n } else if (getCurrentScope()) {\n onScopeDispose(() => {\n unsubscribe()\n })\n }\n\n return state\n }\n}\n"],"mappings":"oDAGA,IAAa,EAAb,cAAwC,EAAA,cAAuB,CAC7D,gBAAqC,MAMrC,IAAc,EAAiF,CAE7F,IAAM,GAAA,EAAA,EAAA,WAAA,CAAmB,EAAK,KAAK,EAG7B,EAAc,EAAK,UAAW,GAAa,CAC/C,EAAM,MAAQ,GACd,EAAA,EAAA,WAAA,CAAW,CAAK,CAClB,CAAC,EAaD,OAVA,EAAA,EAAA,mBAAA,CAAuB,GACrB,EAAA,EAAA,YAAA,KAAkB,CAChB,EAAY,CACd,CAAC,GACI,EAAA,EAAA,gBAAA,CAAoB,IACzB,EAAA,EAAA,eAAA,KAAqB,CACnB,EAAY,CACd,CAAC,EAGI,CACT,CACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ShallowRef } from 'vue';
|
|
2
2
|
import { ReactiveEngine as OriginalReactiveEngine, CleanupFn } from '../core/core';
|
|
3
3
|
export declare class ReactiveEngine4Vue extends OriginalReactiveEngine {
|
|
4
|
+
protected frameworkPrefix: string;
|
|
4
5
|
/**
|
|
5
6
|
* Использование реактивного значения в Vue компоненте или EffectScope.
|
|
6
7
|
* Нативно поддерживает сигналы (Push) и ленивые вычисляемые свойства (Pull).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactiveEngine4Vue.d.ts","sourceRoot":"","sources":["../../src/vue/ReactiveEngine4Vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4F,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAC/H,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAEvF,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D;;;OAGG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,CAAA;KAAE,GAAG,UAAU,CAAC,CAAC,CAAC;CAuB/F"}
|
|
1
|
+
{"version":3,"file":"ReactiveEngine4Vue.d.ts","sourceRoot":"","sources":["../../src/vue/ReactiveEngine4Vue.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4F,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAC/H,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAEvF,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,UAAmB,eAAe,SAAQ;IAE1C;;;OAGG;IACI,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,KAAK,SAAS,CAAA;KAAE,GAAG,UAAU,CAAC,CAAC,CAAC;CAuB/F"}
|
|
@@ -2,6 +2,7 @@ import { ReactiveEngine 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
6
|
use(e) {
|
|
6
7
|
let s = a(e.value), c = e.subscribe((e) => {
|
|
7
8
|
s.value = e, o(s);
|
|
@@ -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 class ReactiveEngine4Vue extends OriginalReactiveEngine {\n /**\n * Использование реактивного значения в Vue компоненте или EffectScope.\n * Нативно поддерживает сигналы (Push) и ленивые вычисляемые свойства (Pull).\n */\n public use<T>(item: { value: T; subscribe: (cb: (v: T) => void) => CleanupFn }): ShallowRef<T> {\n // Создаем локальную Vue-реактивную обертку со стартовым значением сигнала/computed\n const state = shallowRef(item.value)\n\n // Подписываемся на изменения реактивного элемента ядра\n const unsubscribe = item.subscribe((newValue) => {\n state.value = newValue // Обновляем Vue-реактивную переменную\n triggerRef(state) //
|
|
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 class ReactiveEngine4Vue extends OriginalReactiveEngine {\n protected override frameworkPrefix = 'vue'\n\n /**\n * Использование реактивного значения в Vue компоненте или EffectScope.\n * Нативно поддерживает сигналы (Push) и ленивые вычисляемые свойства (Pull).\n */\n public use<T>(item: { value: T; subscribe: (cb: (v: T) => void) => CleanupFn }): ShallowRef<T> {\n // Создаем локальную Vue-реактивную обертку со стартовым значением сигнала/computed\n const state = shallowRef(item.value)\n\n // Подписываемся на изменения реактивного элемента ядра\n const unsubscribe = item.subscribe((newValue) => {\n state.value = newValue // Обновляем Vue-реактивную переменную\n triggerRef(state) // ПРИНУДИТЕЛЬНО заставляем Vue перерисовать шаблон\n })\n\n // Автоматическое управление жизненным циклом подписок во Vue\n if (getCurrentInstance()) {\n onUnmounted(() => {\n unsubscribe()\n })\n } else if (getCurrentScope()) {\n onScopeDispose(() => {\n unsubscribe()\n })\n }\n\n return state\n }\n}\n"],"mappings":";;;AAGA,IAAa,IAAb,cAAwC,EAAuB;CAC7D,kBAAqC;CAMrC,IAAc,GAAiF;EAE7F,IAAM,IAAQ,EAAW,EAAK,KAAK,GAG7B,IAAc,EAAK,WAAW,MAAa;GAE/C,AADA,EAAM,QAAQ,GACd,EAAW,CAAK;EAClB,CAAC;EAaD,OAVI,EAAmB,IACrB,QAAkB;GAChB,EAAY;EACd,CAAC,IACQ,EAAgB,KACzB,QAAqB;GACnB,EAAY;EACd,CAAC,GAGI;CACT;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pravosleva/reactive-engine",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.3-beta",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=22.20.0"
|
|
6
6
|
},
|
|
@@ -96,6 +96,8 @@
|
|
|
96
96
|
"@types/react": "^19.2.1",
|
|
97
97
|
"@types/react-dom": "^19.2.0",
|
|
98
98
|
"@types/three": "^0.185.1",
|
|
99
|
+
"@typescript-eslint/eslint-plugin": "^8.67.0",
|
|
100
|
+
"@typescript-eslint/parser": "^8.67.0",
|
|
99
101
|
"@vitejs/plugin-react": "^5.0.4",
|
|
100
102
|
"@vitejs/plugin-vue": "^6.0.8",
|
|
101
103
|
"@vitest/ui": "^4.1.10",
|
|
@@ -103,6 +105,7 @@
|
|
|
103
105
|
"@vue/test-utils": "^2.4.11",
|
|
104
106
|
"@yandex/ymaps3-clusterer": "^0.0.12",
|
|
105
107
|
"clsx": "^2.1.1",
|
|
108
|
+
"eslint": "^10.8.1",
|
|
106
109
|
"eslint-plugin-import-x": "^4.17.1",
|
|
107
110
|
"jsdom": "^29.1.1",
|
|
108
111
|
"kaplay": "^3001.0.19",
|