@pravosleva/reactive-engine 0.4.1-beta → 1.0.1-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 (141) hide show
  1. package/README.md +33 -2
  2. package/dist/AbstractService.cjs +2 -0
  3. package/dist/AbstractService.cjs.map +1 -0
  4. package/dist/AbstractService.mjs +24 -0
  5. package/dist/AbstractService.mjs.map +1 -0
  6. package/dist/BaseREServiceEnhanced.cjs +2 -0
  7. package/dist/BaseREServiceEnhanced.cjs.map +1 -0
  8. package/dist/BaseREServiceEnhanced.mjs +12 -0
  9. package/dist/BaseREServiceEnhanced.mjs.map +1 -0
  10. package/dist/_react-bindings.d.ts +17 -0
  11. package/dist/_react-bindings.d.ts.map +1 -0
  12. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  13. package/dist/core/AbstractService.d.ts +11 -0
  14. package/dist/core/AbstractService.d.ts.map +1 -0
  15. package/dist/core/BaseREServiceEnhanced.d.ts +7 -0
  16. package/dist/core/BaseREServiceEnhanced.d.ts.map +1 -0
  17. package/dist/core/core.d.ts +282 -0
  18. package/dist/core/core.d.ts.map +1 -0
  19. package/dist/core/core.test.d.ts +2 -0
  20. package/dist/core/core.test.d.ts.map +1 -0
  21. package/dist/core/index.d.ts +5 -0
  22. package/dist/core/index.d.ts.map +1 -0
  23. package/dist/core/types.d.ts +92 -0
  24. package/dist/core/types.d.ts.map +1 -0
  25. package/dist/core.cjs +2 -0
  26. package/dist/core.cjs.map +1 -0
  27. package/dist/core.mjs +286 -0
  28. package/dist/core.mjs.map +1 -0
  29. package/dist/decorators/index.d.ts +6 -0
  30. package/dist/decorators/index.d.ts.map +1 -0
  31. package/dist/decorators/withCache/index.d.ts +2 -0
  32. package/dist/decorators/withCache/index.d.ts.map +1 -0
  33. package/dist/decorators/withCache/withCache.d.ts +13 -0
  34. package/dist/decorators/withCache/withCache.d.ts.map +1 -0
  35. package/dist/decorators/withCache/withCache.test.d.ts +2 -0
  36. package/dist/decorators/withCache/withCache.test.d.ts.map +1 -0
  37. package/dist/decorators/withDebounce/index.d.ts +2 -0
  38. package/dist/decorators/withDebounce/index.d.ts.map +1 -0
  39. package/dist/decorators/withDebounce/withDebounce.d.ts +12 -0
  40. package/dist/decorators/withDebounce/withDebounce.d.ts.map +1 -0
  41. package/dist/decorators/withDebounce/withDebounce.test.d.ts +2 -0
  42. package/dist/decorators/withDebounce/withDebounce.test.d.ts.map +1 -0
  43. package/dist/decorators/withLongPolling/index.d.ts +2 -0
  44. package/dist/decorators/withLongPolling/index.d.ts.map +1 -0
  45. package/dist/decorators/withLongPolling/withLongPolling.d.ts +28 -0
  46. package/dist/decorators/withLongPolling/withLongPolling.d.ts.map +1 -0
  47. package/dist/decorators/withLongPolling/withLongPolling.test.d.ts +2 -0
  48. package/dist/decorators/withLongPolling/withLongPolling.test.d.ts.map +1 -0
  49. package/dist/decorators/withThrottle/index.d.ts +2 -0
  50. package/dist/decorators/withThrottle/index.d.ts.map +1 -0
  51. package/dist/decorators/withThrottle/withThrottle.d.ts +12 -0
  52. package/dist/decorators/withThrottle/withThrottle.d.ts.map +1 -0
  53. package/dist/decorators/withThrottle/withThrottle.test.d.ts +2 -0
  54. package/dist/decorators/withThrottle/withThrottle.test.d.ts.map +1 -0
  55. package/dist/decorators/withThrottleAndCache/index.d.ts +2 -0
  56. package/dist/decorators/withThrottleAndCache/index.d.ts.map +1 -0
  57. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.d.ts +13 -0
  58. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.d.ts.map +1 -0
  59. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.test.d.ts +2 -0
  60. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.test.d.ts.map +1 -0
  61. package/dist/index.cjs +1 -6
  62. package/dist/index.d.ts +2 -605
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.mjs +4 -541
  65. package/dist/react/ReactiveEngine4React.cjs +6 -0
  66. package/dist/react/ReactiveEngine4React.cjs.map +1 -0
  67. package/dist/react/ReactiveEngine4React.d.ts +27 -0
  68. package/dist/react/ReactiveEngine4React.d.ts.map +1 -0
  69. package/dist/react/ReactiveEngine4React.mjs +28 -0
  70. package/dist/react/ReactiveEngine4React.mjs.map +1 -0
  71. package/dist/react/core.react.test.d.ts +2 -0
  72. package/dist/react/core.react.test.d.ts.map +1 -0
  73. package/dist/react/createObserver.cjs +2 -0
  74. package/dist/react/createObserver.cjs.map +1 -0
  75. package/dist/react/createObserver.d.ts +70 -0
  76. package/dist/react/createObserver.d.ts.map +1 -0
  77. package/dist/react/createObserver.mjs +62 -0
  78. package/dist/react/createObserver.mjs.map +1 -0
  79. package/dist/react/createObserver.test.d.ts +2 -0
  80. package/dist/react/createObserver.test.d.ts.map +1 -0
  81. package/dist/react/hooks/FilteredCatalog.test.d.ts +2 -0
  82. package/dist/react/hooks/FilteredCatalog.test.d.ts.map +1 -0
  83. package/dist/react/hooks/index.cjs +1 -0
  84. package/dist/react/hooks/index.d.ts +4 -0
  85. package/dist/react/hooks/index.d.ts.map +1 -0
  86. package/dist/react/hooks/index.mjs +7 -0
  87. package/dist/react/hooks/types.d.ts +16 -0
  88. package/dist/react/hooks/types.d.ts.map +1 -0
  89. package/dist/react/hooks/useReactiveSubscription/index.cjs +1 -0
  90. package/dist/react/hooks/useReactiveSubscription/index.d.ts +2 -0
  91. package/dist/react/hooks/useReactiveSubscription/index.d.ts.map +1 -0
  92. package/dist/react/hooks/useReactiveSubscription/index.mjs +2 -0
  93. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs +2 -0
  94. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs.map +1 -0
  95. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts +10 -0
  96. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts.map +1 -0
  97. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs +14 -0
  98. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs.map +1 -0
  99. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts +2 -0
  100. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts.map +1 -0
  101. package/dist/react/hooks/useReactiveValue/index.cjs +1 -0
  102. package/dist/react/hooks/useReactiveValue/index.d.ts +2 -0
  103. package/dist/react/hooks/useReactiveValue/index.d.ts.map +1 -0
  104. package/dist/react/hooks/useReactiveValue/index.mjs +2 -0
  105. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs +2 -0
  106. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs.map +1 -0
  107. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts +16 -0
  108. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts.map +1 -0
  109. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs +12 -0
  110. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs.map +1 -0
  111. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts +2 -0
  112. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts.map +1 -0
  113. package/dist/react/hooks/useReactiveValue0/index.cjs +1 -0
  114. package/dist/react/hooks/useReactiveValue0/index.d.ts +2 -0
  115. package/dist/react/hooks/useReactiveValue0/index.d.ts.map +1 -0
  116. package/dist/react/hooks/useReactiveValue0/index.mjs +2 -0
  117. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs +2 -0
  118. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs.map +1 -0
  119. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts +15 -0
  120. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts.map +1 -0
  121. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs +20 -0
  122. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs.map +1 -0
  123. package/dist/react/index.cjs +1 -0
  124. package/dist/react/index.d.ts +4 -0
  125. package/dist/react/index.d.ts.map +1 -0
  126. package/dist/react/index.mjs +7 -0
  127. package/dist/react/types.d.ts +2 -0
  128. package/dist/react/types.d.ts.map +1 -0
  129. package/dist/utils/getExtractedValues.cjs +2 -0
  130. package/dist/utils/getExtractedValues.cjs.map +1 -0
  131. package/dist/utils/getExtractedValues.d.ts +6 -0
  132. package/dist/utils/getExtractedValues.d.ts.map +1 -0
  133. package/dist/utils/getExtractedValues.mjs +21 -0
  134. package/dist/utils/getExtractedValues.mjs.map +1 -0
  135. package/dist/utils/index.d.ts +2 -0
  136. package/dist/utils/index.d.ts.map +1 -0
  137. package/package.json +25 -4
  138. package/dist/index.cjs.map +0 -1
  139. package/dist/index.iife.js +0 -6
  140. package/dist/index.iife.js.map +0 -1
  141. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,2 @@
1
+ export * from './withThrottleAndCache';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decorators/withThrottleAndCache/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,13 @@
1
+ interface ThrottleAndCacheOptions {
2
+ /** Интервал троттлинга в миллисекундах. По умолчанию 300 мс */
3
+ limit?: number;
4
+ /** Время жизни кэша в миллисекундах. По умолчанию 5 минут (300000 мс) */
5
+ ttl?: number;
6
+ }
7
+ /**
8
+ * Комбинированный декоратор: сначала применяет троттлинг к частоте вызовов,
9
+ * а затем проверяет кэш перед отправкой реального fetcher-запроса.
10
+ */
11
+ export declare const withThrottleAndCache: <S, T>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, options?: ThrottleAndCacheOptions) => (source: S, signal: AbortSignal) => Promise<T>;
12
+ export {};
13
+ //# sourceMappingURL=withThrottleAndCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withThrottleAndCache.d.ts","sourceRoot":"","sources":["../../../src/decorators/withThrottleAndCache/withThrottleAndCache.ts"],"names":[],"mappings":"AAAA,UAAU,uBAAuB;IAC/B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAOD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,EACvC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,UAAS,uBAA4B,MAuB7B,QAAQ,CAAC,EAAE,QAAQ,WAAW,KAAG,OAAO,CAAC,CAAC,CAkGnD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=withThrottleAndCache.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withThrottleAndCache.test.d.ts","sourceRoot":"","sources":["../../../src/decorators/withThrottleAndCache/withThrottleAndCache.test.ts"],"names":[],"mappings":""}
package/dist/index.cjs CHANGED
@@ -1,6 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("react");c=s(c,1);var l=class{engine;constructor(e){this.engine=e,this.onInit()}createNumericSignal(e,t){return this.engine.signal(e,{name:t,validate:e=>typeof e==`number`&&!isNaN(e)})}createComputed(e){return this.engine.computed(e)}createSignal(e,t){return this.engine.signal(e,t)}onInit(){}},u=l,d=class{engine;constructor(e){this.engine=e,setTimeout(()=>this.onInit(),0)}onInit(){}},f=({tested:e,expectedKey:t,valueType:n})=>{let r=[];for(let i=0,a=e.length;i<a;i++){let a=e[i],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},p=class{activeEffect=null;isBatching=!1;pendingEffects=new Set;services=new Map;factories=new Map;proxyCache=new WeakMap;allEffects=new Set;onSignalChange;reactAdapters={useState:c.useState,useEffect:c.useEffect};provide(e,t){typeof t==`function`&&!t.prototype?this.factories.set(e,t):this.services.set(e,t)}inject(e){if(!e)throw Error(`[DI Error]: Вы пытаетесь внедрить пустой токен (undefined/null). Проверьте импорты.`);let t=e;if(this.services.has(t))return this.services.get(t);try{let n=this.factories.get(t);if(n){let e=n(this);return this.services.set(t,e),e}if(typeof e==`function`&&e.prototype){let n=new e(this);return this.services.set(t,n),n}throw Error(`Service not found: ${String(e)}`)}catch(t){throw Error(`[DI Error]: Не удалось создать сервис ${String(e)}. Ошибка: ${t?.message||`No e?.message`}`)}}signal(e,t){let n=this,r=e,i=new Set,a=typeof t==`string`?{name:t}:t||{},o=a.name||`unnamed_signal`;return{get value(){return n.activeEffect&&i.add(n.activeEffect),r},set value(e){if(r===e)return;if(a.validate){let t=a.validate(e);if(t===!1||typeof t==`string`){let n=typeof t==`string`?t:`[Validation Error]: Некорректное значение для сигнала "${o}"`;console.error(`%c${n}`,`color: orange; font-weight: bold;`,{received:e,current:r});return}}let t=r;r=e,n.onSignalChange?.(o,e,t),i.forEach(e=>n.pendingEffects.add(e)),n.isBatching||(n.isBatching=!0,queueMicrotask(()=>{let e=Array.from(n.pendingEffects);n.pendingEffects.clear(),n.isBatching=!1,e.forEach(e=>e.run())}))},subscribe(e){return n.effect(()=>{e(this.value)})}}}effect(e,t){let n=this,r={label:t,cleanups:new Set,run(){this.cleanups.forEach(e=>e()),this.cleanups.clear();let t=n.activeEffect;n.activeEffect=this,n.safeRun(this,()=>{let t=e();typeof t==`function`&&this.cleanups.add(t)}),n.activeEffect=t}};return this.allEffects.add(r),r.run(),()=>{r.cleanups.forEach(e=>e()),n.pendingEffects.delete(r),n.allEffects.delete(r)}}computedCache=new Map;cleanupRegistry=new FinalizationRegistry(e=>{e()});computed(e,t){if(this.computedCache.has(e)){let t=this.computedCache.get(e)?.deref();if(t)return t}let n=this,r=this.signal(void 0,t||`unnamed_computed`),i=this.effect(()=>{let t=e();r.value=t}),a=Array.from(this.allEffects)[this.allEffects.size-1],o=()=>{i(),a&&n.allEffects.delete(a),n.computedCache.delete(e)},s={get value(){return r.value},subscribe:e=>r.subscribe(e),destroy(){o()}};return this.cleanupRegistry.register(s,o),this.computedCache.set(e,new WeakRef(s)),s}reactive(e,t=`reactive`){if(this.proxyCache.has(e))return this.proxyCache.get(e);let n=this,r=new Map,i=new Proxy(e,{get(e,i,a){n.activeEffect&&(r.has(i)||r.set(i,new Set),r.get(i).add(n.activeEffect));let o=Reflect.get(e,i,a);return typeof o==`object`&&o?n.reactive(o,`${t}.${String(i)}`):o},set(e,i,a,o){let s=Reflect.get(e,i,o);return s===a||s!==a&&(Reflect.set(e,i,a,o),n.onSignalChange?.(`${t}.${String(i)}`,a,s),r.get(i)?.forEach(e=>n.isBatching?n.pendingEffects.add(e):e.run())),!0}});return this.proxyCache.set(e,i),i}batch(e){e()}delay(e,t){return new Promise((n,r)=>{if(t.aborted)return r(new DOMException(`Aborted`,`AbortError`));let i=setTimeout(()=>{t.removeEventListener(`abort`,a),n()},e),a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};t.addEventListener(`abort`,a,{once:!0})})}resource(e,t,n){let r=n&&typeof n==`object`,i=r?n.name:n||`unnamed_resource`,a=r?n:{},o=a.resetDataOnSourceChange??!0,s=a.responseValidate,c=a.validateBeforeFetch,l=a.retryCount??0,u=a.retryDelay??1e3,d=a.isExponentialBackoffEnabled??!1,p=a.maxRetryDelay??3e4,m=a.timeout,h=this.signal({data:null,loading:!0,error:null,isRetrying:!1},i),g=async(t,n,r=!1)=>{if(n.aborted)return;if(c){let e=c(t);if(e===!1||typeof e==`string`){if(n.aborted)return;let t=typeof e==`string`?e:`Pre-fetch validation failed for resource`,i=r?null:this.untrack(()=>h.value.data);h.value={data:i,loading:!1,error:Error(t),isRetrying:!1};return}}let a=r&&o?null:this.untrack(()=>h.value.data);h.value={data:a,loading:!0,error:null,isRetrying:!1};for(let r=0;r<=l;r++){if(n.aborted)return;let a=n;try{if(m&&m>0){let e=AbortSignal.timeout(m);a=AbortSignal.any([n,e])}let r=await e(t,a);if(n.aborted)return;if(a.aborted)throw new DOMException(`The operation timed out.`,`TimeoutError`);if(s){let e=s(r);if(e===!1||typeof e==`string`){if(n.aborted)return;h.value={data:null,loading:!1,error:Error(typeof e==`string`?e:`Validation failed`),isRetrying:!1};return}}if(n.aborted)return;h.value={data:r,loading:!1,error:null,isRetrying:!1};return}catch(e){if(n.aborted||e.name===`AbortError`&&n.aborted)return;let t=e.name===`TimeoutError`||e.name===`AbortError`||e.message?.includes(`timeout`),a=f({tested:[e.message],expectedKey:`THROW_CUSTOM_VALIDATION_ERROR_NO_RETRY`,valueType:`number`})?.[0]===`1`||!1,o=a&&f({tested:[e.message],expectedKey:`MESSAGE`,valueType:`string`})?.[0]||`Custom validation error`,s=a||e.name===`ValidationError`;if(r===l||s){if(n.aborted)return;let r=t?Error(`Request timed out after ${m}ms`,{cause:e}):a?Error(o,{cause:e}):e;h.value={data:null,loading:!1,error:r,isRetrying:!1};return}else{if(n.aborted)return;let e=d?u*2**r:u;e=Math.min(e,p);let a=Math.random()*200;e+=a,h.value={data:h.value.data,loading:!0,error:null,isRetrying:!0},console.warn(`[Resource Retry] "${i}" сбой по ${t?`таймауту`:`ошибке сети`}. Попытка ${r+1}/${l+1}...`);try{if(await this.delay(e,n),n.aborted)return}catch{return}}}}},_=null;return this.effect(()=>{let e=t?t.value:void 0,n=new AbortController;return _=n,this.untrack(()=>{g(e,n.signal,!0)}),()=>n.abort()}),{get data(){return h.value.data},get loading(){return h.value.loading},get error(){return h.value.error},get isRetrying(){return h.value.isRetrying},get value(){return h.value},refetch:()=>{_?.abort(),_=new AbortController,g(t?t.value:void 0,_.signal,!1)},subscribe:e=>h.subscribe(e)}}untrack(e){let t=this.activeEffect;this.activeEffect=null;try{return e()}finally{this.activeEffect=t}}setReactAdapters(e,t){this.reactAdapters={useState:e,useEffect:t}}use(e){if(!this.reactAdapters)throw Error(`[React Error]: Адаптеры React не установлены. Вызовите engine.setReactAdapters(useState, useEffect).`);if(!e||typeof e.subscribe!=`function`){let t=`
2
- [Reactive Error]: engine.use() получил некорректный объект!
3
- Скорее всего, вы пытаетесь подписаться на свойство сервиса, которое не было инициализировано.
4
- Проверьте, что в классе написано: public mySignal = this.engine.signal(...)
5
- `;throw console.error(t,{item:e}),Error(t)}let[t,n]=this.reactAdapters.useState(e.value);return this.reactAdapters.useEffect(()=>e.subscribe(n),[e]),t}safeRun(e,t){try{t()}catch(e){console.error(`%c[Reactive Error] %cОшибка в эффекте/computed:`,`color: white; background: red; padding: 2px 4px; border-radius: 3px;`,`font-weight: bold;`,e)}}},m=e=>({children:t})=>{let n=(0,c.useRef)(0),r=(0,c.useRef)(null),i=(0,c.useRef)(null),a=(0,c.useRef)(null),o=(0,c.useMemo)(()=>({subscribe(e){return r.current=e,()=>{r.current=null,i.current&&(i.current(),i.current=null,a.current=null)}},getSnapshot(){return n.current}}),[]);(0,c.useEffect)(()=>()=>{i.current&&i.current()},[]),i.current||(i.current=e.effect(()=>{r.current&&(n.current++,queueMicrotask(()=>{r.current&&r.current()}))}),a.current=Array.from(e.allEffects).pop());let s=e.activeEffect;e.activeEffect=a.current;let l=null;try{l=t()}finally{e.activeEffect=s}return(0,c.useSyncExternalStore)(o.subscribe,o.getSnapshot),l},h=e=>t=>{let n=n=>{let r=(0,c.useRef)(0),i=e,a=`activeEffect`in i?`activeEffect`:`_activeEffect`,o=(0,c.useRef)(null),{subscribe:s,getSnapshot:l}=(0,c.useMemo)(()=>({subscribe:t=>{let n=e.effect(()=>{r.current++,t()}),a=Array.from(i.allEffects||[]);return o.current=a[a.length-1],()=>{n(),o.current=null}},getSnapshot:()=>r.current}),[]);(0,c.useSyncExternalStore)(s,l,l);let u={cleanups:new Set,run:()=>{}},d=o.current||u,f=i[a];i[a]=d;let p=null;try{p=typeof t==`function`&&!t.prototype?.isReactComponent?t(n):c.default.createElement(t,n)}finally{i[a]=f}return p};return n.displayName=`Observer(${t.displayName||t.name||`Component`})`,n},g=(e,t={})=>{let n=t.ttl??300*1e3,r=new Map;return async(t,i)=>{let a=typeof t==`object`&&t?JSON.stringify(t):String(t),o=Date.now(),s=r.get(a);if(s&&o-s.timestamp<n)return s.data;let c=await e(t,i);return r.set(a,{data:c,timestamp:Date.now()}),c}},_=(e,t={})=>{let n=t.delay??300,r=null,i=null;return(t,a)=>(r&&clearTimeout(r),i&&i(new DOMException(`Aborted due to debounce`,`AbortError`)),new Promise((o,s)=>{i=s;let c=()=>{r&&clearTimeout(r),s(new DOMException(`Aborted by resource signal`,`AbortError`))};if(a.aborted)return c();a.addEventListener(`abort`,c),r=setTimeout(async()=>{a.removeEventListener(`abort`,c),i=null,r=null;try{o(await e(t,a))}catch(e){s(e)}},n)}))},v=(e,t)=>{let{onNextTick:n,onError:r,externalSignal:i,delay:a=500,errorInitialDelay:o=2e3,errorMaxDelay:s=8e3}=t,c=o,l=0;return(t,u)=>{let d=++l;return new Promise((f,p)=>{let m=async()=>{if(u.aborted||i?.aborted){p(new DOMException(`Aborted by long polling lifecycle`,`AbortError`));return}try{let r=await e(t,u);if(c=o,u.aborted||i?.aborted){p(new DOMException(`Aborted by long polling lifecycle`,`AbortError`));return}f(r),setTimeout(()=>{d===l&&!u.aborted&&!i?.aborted&&n()},a)}catch(e){if(e instanceof DOMException&&e.name===`AbortError`){p(e);return}p(e);let t=c;r(t,()=>{d===l&&(c=Math.min(c*2,s))}),setTimeout(()=>{d===l&&!u.aborted&&!i?.aborted&&n()},t)}},h=()=>{p(new DOMException(`Aborted by lifecycle event`,`AbortError`))};if(u.addEventListener(`abort`,h),i&&i.addEventListener(`abort`,h),u.aborted||i?.aborted)return h();m()})}},y=(e,t={})=>{let n=t.limit??300,r=0,i=null,a=null,o=null,s=null,c=null;return(t,l)=>{let u=Date.now(),d=n-(u-r),f=()=>{i&&=(clearTimeout(i),null),s&&=(s(new DOMException(`Aborted by resource signal during throttle`,`AbortError`)),o=null,null)};return d<=0?(i&&=(clearTimeout(i),null),s&&=(s(new DOMException(`Aborted due to newer direct throttle execution`,`AbortError`)),o=null,null),r=u,e(t,l)):(s&&s(new DOMException(`Aborted due to newer throttled value`,`AbortError`)),new Promise((n,u)=>{if(a=t,o=n,s=u,c=l,l.aborted)return f();l.addEventListener(`abort`,f),i||=setTimeout(async()=>{i=null;let t=a,n=o,l=s,u=c;a=null,o=null,s=null,c=null,u.removeEventListener(`abort`,f);try{r=Date.now(),n(await e(t,u))}catch(e){l(e)}},d)}))}},b=(e,t={})=>{let n=t.limit??300,r=t.ttl??300*1e3,i=0,a=null,o=null,s=null,c=null,l=null,u=new Map,d=e=>typeof e==`object`&&e?JSON.stringify(e):String(e);return(t,f)=>{let p=Date.now(),m=n-(p-i);d(t);let h=()=>{a&&=(clearTimeout(a),null),c&&=(c(new DOMException(`Aborted by resource signal during throttle`,`AbortError`)),s=null,null)},g=async(t,n)=>{let i=Date.now(),a=d(t),o=u.get(a);if(o&&i-o.timestamp<r)return o.data;let s=await e(t,n);return u.set(a,{data:s,timestamp:Date.now()}),s};return m<=0?(a&&=(clearTimeout(a),null),c&&=(c(new DOMException(`Aborted due to newer direct execution`,`AbortError`)),s=null,null),i=p,g(t,f)):(c&&c(new DOMException(`Aborted due to newer throttled value`,`AbortError`)),new Promise((e,n)=>{if(o=t,s=e,c=n,l=f,f.aborted)return h();f.addEventListener(`abort`,h),a||=setTimeout(async()=>{a=null;let e=o,t=s,n=c,r=l;o=null,s=null,c=null,l=null,r.removeEventListener(`abort`,h);try{i=Date.now(),t(await g(e,r))}catch(e){n(e)}},m)}))}},x=(e,t)=>{let n=(0,c.useRef)(t);(0,c.useEffect)(()=>{n.current=t},[t]),(0,c.useEffect)(()=>e.subscribe(e=>{n.current(e)}),[e])},S=e=>{let t=(0,c.useMemo)(()=>typeof e==`function`?e():e,[e]),n=(0,c.useCallback)(e=>t.subscribe(e),[t]),r=(0,c.useCallback)(()=>t.value,[t]);return(0,c.useEffect)(()=>()=>{t&&typeof t.destroy==`function`&&t.destroy()},[t]),(0,c.useSyncExternalStore)(n,r)},C=e=>{let t=(0,c.useMemo)(()=>typeof e==`function`?e():e,[e]),[n,r]=(0,c.useState)(t.value),i=(0,c.useRef)(r);return(0,c.useEffect)(()=>{i.current=r},[r]),(0,c.useEffect)(()=>{i.current(t.value);let e=t.subscribe(e=>{i.current(e)});return()=>{e(),t&&typeof t.destroy==`function`&&t.destroy()}},[t]),n};exports.AbstractService=l,exports.BaseREService=u,exports.BaseREServiceEnhanced=d,exports.ReactiveEngine=p,exports.createObserver=h,exports.createObserverComponent=m,exports.useReactiveSubscription=x,exports.useReactiveValue=S,exports.useReactiveValue0=C,exports.withCache=g,exports.withDebounce=_,exports.withLongPolling=v,exports.withThrottle=y,exports.withThrottleAndCache=b;
6
- //# sourceMappingURL=index.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./core.cjs"),t=require("./AbstractService.cjs"),n=require("./BaseREServiceEnhanced.cjs");exports.AbstractService=t.AbstractService,exports.BaseREService=t.BaseREService,exports.BaseREServiceEnhanced=n.BaseREServiceEnhanced,exports.ReactiveEngine=e.ReactiveEngine;