@pravosleva/reactive-engine 2.6.4-alpha.9 → 2.7.0-beta.0
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/README.md +8 -8
- package/dist/core/core.d.ts +161 -0
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core/core.effect.test.d.ts +2 -0
- package/dist/core/core.effect.test.d.ts.map +1 -0
- package/dist/core/core.method.computed.d.ts.map +1 -1
- package/dist/core/core.method.effect.d.ts.map +1 -1
- package/dist/core/core.method.signal.d.ts.map +1 -1
- package/dist/core.method.computed.mjs +3 -2
- package/dist/core.method.computed.mjs.map +1 -1
- package/dist/core.method.effect.mjs +65 -45
- package/dist/core.method.effect.mjs.map +1 -1
- package/dist/core.method.resource.mjs +3 -1
- package/dist/core.method.resource.mjs.map +1 -1
- package/dist/core.method.signal.mjs +4 -2
- package/dist/core.method.signal.mjs.map +1 -1
- package/dist/core.mjs +1 -0
- package/dist/core.mjs.map +1 -1
- package/dist/decorators/withValidation/withValidation.d.ts +2 -2
- package/dist/decorators/withValidation/withValidation.d.ts.map +1 -1
- package/dist/decorators/withValidation/withValidation.mjs +1 -1
- package/dist/decorators/withValidation/withValidation.mjs.map +1 -1
- package/dist/decorators/withValidation/withValidation.test.d.ts +2 -0
- package/dist/decorators/withValidation/withValidation.test.d.ts.map +1 -0
- package/dist/index.mjs +2 -2
- package/dist/reactive-engine.umd.js +2 -2
- package/dist/reactive-engine.umd.js.map +1 -1
- package/package.json +8 -11
- package/dist/AbstractService.cjs +0 -2
- package/dist/AbstractService.cjs.map +0 -1
- package/dist/BaseREServiceEnhanced.cjs +0 -2
- package/dist/BaseREServiceEnhanced.cjs.map +0 -1
- package/dist/angular/core.angular-adapter.cjs +0 -2
- package/dist/angular/core.angular-adapter.cjs.map +0 -1
- package/dist/angular/index.cjs +0 -2
- package/dist/angular/index.cjs.map +0 -1
- package/dist/core.autolog.cjs +0 -2
- package/dist/core.autolog.cjs.map +0 -1
- package/dist/core.automatic.cjs +0 -2
- package/dist/core.automatic.cjs.map +0 -1
- package/dist/core.cjs +0 -2
- package/dist/core.cjs.map +0 -1
- package/dist/core.global.cjs +0 -2
- package/dist/core.global.cjs.map +0 -1
- package/dist/core.logger.cjs +0 -2
- package/dist/core.logger.cjs.map +0 -1
- package/dist/core.method.computed.cjs +0 -2
- package/dist/core.method.computed.cjs.map +0 -1
- package/dist/core.method.effect.cjs +0 -2
- package/dist/core.method.effect.cjs.map +0 -1
- package/dist/core.method.reactive.cjs +0 -2
- package/dist/core.method.reactive.cjs.map +0 -1
- package/dist/core.method.resource.cjs +0 -2
- package/dist/core.method.resource.cjs.map +0 -1
- package/dist/core.method.signal.cjs +0 -2
- package/dist/core.method.signal.cjs.map +0 -1
- package/dist/core.method.untrack.cjs +0 -2
- package/dist/core.method.untrack.cjs.map +0 -1
- package/dist/decorators/withCache/withCache.cjs +0 -2
- package/dist/decorators/withCache/withCache.cjs.map +0 -1
- package/dist/decorators/withDebounce/withDebounce.cjs +0 -2
- package/dist/decorators/withDebounce/withDebounce.cjs.map +0 -1
- package/dist/decorators/withLongPolling/withLongPolling.cjs +0 -2
- package/dist/decorators/withLongPolling/withLongPolling.cjs.map +0 -1
- package/dist/decorators/withStaleWhileRevalidate/withStaleWhileRevalidate.cjs +0 -2
- package/dist/decorators/withStaleWhileRevalidate/withStaleWhileRevalidate.cjs.map +0 -1
- package/dist/decorators/withThrottle/withThrottle.cjs +0 -2
- package/dist/decorators/withThrottle/withThrottle.cjs.map +0 -1
- package/dist/decorators/withThrottleAndCache/withThrottleAndCache.cjs +0 -2
- package/dist/decorators/withThrottleAndCache/withThrottleAndCache.cjs.map +0 -1
- package/dist/decorators/withThrottleComputed/withThrottleComputed.cjs +0 -2
- package/dist/decorators/withThrottleComputed/withThrottleComputed.cjs.map +0 -1
- package/dist/decorators/withValidation/withValidation.cjs +0 -2
- package/dist/decorators/withValidation/withValidation.cjs.map +0 -1
- package/dist/index.cjs +0 -1
- package/dist/index2.cjs +0 -1
- package/dist/react/hooks/useReactiveSubscription.cjs +0 -2
- package/dist/react/hooks/useReactiveSubscription.cjs.map +0 -1
- package/dist/react/hooks/useReactiveValue.cjs +0 -2
- package/dist/react/hooks/useReactiveValue.cjs.map +0 -1
- package/dist/react/index.cjs +0 -2
- package/dist/react/index.cjs.map +0 -1
- package/dist/utils/getExtractedValues.cjs +0 -2
- package/dist/utils/getExtractedValues.cjs.map +0 -1
- package/dist/vue/core.vue-adapter.cjs +0 -2
- package/dist/vue/core.vue-adapter.cjs.map +0 -1
- package/dist/vue/index.cjs +0 -2
- package/dist/vue/index.cjs.map +0 -1
|
@@ -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,2 +0,0 @@
|
|
|
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
|
-
//# sourceMappingURL=core.vue-adapter.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/vue/index.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
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
|
-
//# sourceMappingURL=index.cjs.map
|
package/dist/vue/index.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|