@pravosleva/reactive-engine 1.8.3-beta → 2.0.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 (328) hide show
  1. package/README.md +271 -0
  2. package/dist/AbstractService.cjs.map +1 -1
  3. package/dist/AbstractService.mjs.map +1 -1
  4. package/dist/BaseREServiceEnhanced.cjs.map +1 -1
  5. package/dist/BaseREServiceEnhanced.mjs.map +1 -1
  6. package/dist/_react-bindings.d.ts +1 -1
  7. package/dist/_react-bindings.d.ts.map +1 -1
  8. package/dist/angular/core.angular-adapter.cjs +2 -0
  9. package/dist/angular/core.angular-adapter.cjs.map +1 -0
  10. package/dist/angular/core.angular-adapter.d.ts +15 -0
  11. package/dist/angular/core.angular-adapter.d.ts.map +1 -0
  12. package/dist/angular/core.angular-adapter.mjs +28 -0
  13. package/dist/angular/core.angular-adapter.mjs.map +1 -0
  14. package/dist/angular/core.angular-adapter.test.d.ts +2 -0
  15. package/dist/angular/core.angular-adapter.test.d.ts.map +1 -0
  16. package/dist/angular/index.cjs +2 -1
  17. package/dist/angular/index.cjs.map +1 -0
  18. package/dist/angular/index.d.ts +19 -2
  19. package/dist/angular/index.d.ts.map +1 -1
  20. package/dist/angular/index.mjs +28 -2
  21. package/dist/angular/index.mjs.map +1 -0
  22. package/dist/core/AbstractService.d.ts +3 -3
  23. package/dist/core/AbstractService.d.ts.map +1 -1
  24. package/dist/core/BaseREServiceEnhanced.d.ts +3 -3
  25. package/dist/core/BaseREServiceEnhanced.d.ts.map +1 -1
  26. package/dist/core/_draft.core.methods.d.ts +13 -0
  27. package/dist/core/_draft.core.methods.d.ts.map +1 -0
  28. package/dist/core/core.advanced.reactive-framework-test-suite.p2.test.d.ts +2 -0
  29. package/dist/core/core.advanced.reactive-framework-test-suite.p2.test.d.ts.map +1 -0
  30. package/dist/core/core.advanced.test.d.ts +2 -0
  31. package/dist/core/core.advanced.test.d.ts.map +1 -0
  32. package/dist/core/core.autolog.d.ts +15 -0
  33. package/dist/core/core.autolog.d.ts.map +1 -0
  34. package/dist/core/core.automatic.d.ts +23 -0
  35. package/dist/core/core.automatic.d.ts.map +1 -0
  36. package/dist/core/core.automatic.test.d.ts +2 -0
  37. package/dist/core/core.automatic.test.d.ts.map +1 -0
  38. package/dist/core/core.d.ts +38 -158
  39. package/dist/core/core.d.ts.map +1 -1
  40. package/dist/core/core.method.batch.d.ts +6 -0
  41. package/dist/core/core.method.batch.d.ts.map +1 -0
  42. package/dist/core/core.method.computed.d.ts +7 -0
  43. package/dist/core/core.method.computed.d.ts.map +1 -0
  44. package/dist/core/core.method.effect.d.ts +7 -0
  45. package/dist/core/core.method.effect.d.ts.map +1 -0
  46. package/dist/core/core.method.reactive.d.ts +6 -0
  47. package/dist/core/core.method.reactive.d.ts.map +1 -0
  48. package/dist/core/core.method.signal.d.ts +7 -0
  49. package/dist/core/core.method.signal.d.ts.map +1 -0
  50. package/dist/core/core.method.untrack.d.ts +6 -0
  51. package/dist/core/core.method.untrack.d.ts.map +1 -0
  52. package/dist/core/core.propagation.test.d.ts +2 -0
  53. package/dist/core/core.propagation.test.d.ts.map +1 -0
  54. package/dist/core/core.test.d.ts +2 -0
  55. package/dist/core/core.test.d.ts.map +1 -0
  56. package/dist/core/index.d.ts +4 -1
  57. package/dist/core/index.d.ts.map +1 -1
  58. package/dist/core/types.d.ts +31 -4
  59. package/dist/core/types.d.ts.map +1 -1
  60. package/dist/core.autolog.cjs +2 -0
  61. package/dist/core.autolog.cjs.map +1 -0
  62. package/dist/core.autolog.mjs +41 -0
  63. package/dist/core.autolog.mjs.map +1 -0
  64. package/dist/core.automatic.cjs +2 -0
  65. package/dist/core.automatic.cjs.map +1 -0
  66. package/dist/core.automatic.mjs +26 -0
  67. package/dist/core.automatic.mjs.map +1 -0
  68. package/dist/core.cjs +1 -1
  69. package/dist/core.cjs.map +1 -1
  70. package/dist/core.method.batch.cjs +2 -0
  71. package/dist/core.method.batch.cjs.map +1 -0
  72. package/dist/core.method.batch.mjs +13 -0
  73. package/dist/core.method.batch.mjs.map +1 -0
  74. package/dist/core.method.computed.cjs +2 -0
  75. package/dist/core.method.computed.cjs.map +1 -0
  76. package/dist/core.method.computed.mjs +122 -0
  77. package/dist/core.method.computed.mjs.map +1 -0
  78. package/dist/core.method.effect.cjs +2 -0
  79. package/dist/core.method.effect.cjs.map +1 -0
  80. package/dist/core.method.effect.mjs +49 -0
  81. package/dist/core.method.effect.mjs.map +1 -0
  82. package/dist/core.method.reactive.cjs +2 -0
  83. package/dist/core.method.reactive.cjs.map +1 -0
  84. package/dist/core.method.reactive.mjs +39 -0
  85. package/dist/core.method.reactive.mjs.map +1 -0
  86. package/dist/core.method.signal.cjs +2 -0
  87. package/dist/core.method.signal.cjs.map +1 -0
  88. package/dist/core.method.signal.mjs +75 -0
  89. package/dist/core.method.signal.mjs.map +1 -0
  90. package/dist/core.method.untrack.cjs +2 -0
  91. package/dist/core.method.untrack.cjs.map +1 -0
  92. package/dist/core.method.untrack.mjs +14 -0
  93. package/dist/core.method.untrack.mjs.map +1 -0
  94. package/dist/core.mjs +268 -592
  95. package/dist/core.mjs.map +1 -1
  96. package/dist/decorators/index.d.ts +1 -0
  97. package/dist/decorators/index.d.ts.map +1 -1
  98. package/dist/decorators/withCache/types.d.ts +29 -0
  99. package/dist/decorators/withCache/types.d.ts.map +1 -0
  100. package/dist/decorators/withCache/withCache.cjs +1 -1
  101. package/dist/decorators/withCache/withCache.cjs.map +1 -1
  102. package/dist/decorators/withCache/withCache.d.ts +4 -61
  103. package/dist/decorators/withCache/withCache.d.ts.map +1 -1
  104. package/dist/decorators/withCache/withCache.mjs +29 -9
  105. package/dist/decorators/withCache/withCache.mjs.map +1 -1
  106. package/dist/decorators/withValidation/index.d.ts +2 -0
  107. package/dist/decorators/withValidation/index.d.ts.map +1 -0
  108. package/dist/decorators/withValidation/withValidation.cjs +2 -0
  109. package/dist/decorators/withValidation/withValidation.cjs.map +1 -0
  110. package/dist/decorators/withValidation/withValidation.d.ts +18 -0
  111. package/dist/decorators/withValidation/withValidation.d.ts.map +1 -0
  112. package/dist/decorators/withValidation/withValidation.mjs +27 -0
  113. package/dist/decorators/withValidation/withValidation.mjs.map +1 -0
  114. package/dist/index.cjs +1 -1
  115. package/dist/index.d.ts +7 -1
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.mjs +14 -11
  118. package/dist/react/core.react-adapter.test.d.ts +2 -0
  119. package/dist/react/core.react-adapter.test.d.ts.map +1 -0
  120. package/dist/react/hooks/_draft.useReactiveValue.v2.d.ts +9 -0
  121. package/dist/react/hooks/_draft.useReactiveValue.v2.d.ts.map +1 -0
  122. package/dist/react/hooks/useReactiveSubscription.cjs +2 -0
  123. package/dist/react/hooks/useReactiveSubscription.cjs.map +1 -0
  124. package/dist/react/hooks/useReactiveSubscription.d.ts +7 -0
  125. package/dist/react/hooks/useReactiveSubscription.d.ts.map +1 -0
  126. package/dist/react/hooks/useReactiveSubscription.mjs +21 -0
  127. package/dist/react/hooks/useReactiveSubscription.mjs.map +1 -0
  128. package/dist/react/hooks/useReactiveValue.cjs +2 -0
  129. package/dist/react/hooks/useReactiveValue.cjs.map +1 -0
  130. package/dist/react/hooks/useReactiveValue.d.ts +3 -0
  131. package/dist/react/hooks/useReactiveValue.d.ts.map +1 -0
  132. package/dist/react/hooks/useReactiveValue.mjs +25 -0
  133. package/dist/react/hooks/useReactiveValue.mjs.map +1 -0
  134. package/dist/react/index.cjs +2 -1
  135. package/dist/react/index.cjs.map +1 -0
  136. package/dist/react/index.d.ts +9 -3
  137. package/dist/react/index.d.ts.map +1 -1
  138. package/dist/react/index.mjs +13 -6
  139. package/dist/react/index.mjs.map +1 -0
  140. package/dist/react/types.d.ts +0 -1
  141. package/dist/react/types.d.ts.map +1 -1
  142. package/dist/reactive-engine.umd.js +2 -2
  143. package/dist/reactive-engine.umd.js.map +1 -1
  144. package/dist/report/reactive-framework-test-suite/scripts/update-readme.d.mts +2 -0
  145. package/dist/report/reactive-framework-test-suite/scripts/update-readme.d.mts.map +1 -0
  146. package/dist/report/reactive-framework-test-suite/src/assert.d.ts +10 -0
  147. package/dist/report/reactive-framework-test-suite/src/assert.d.ts.map +1 -0
  148. package/dist/report/reactive-framework-test-suite/src/batching.d.ts +19 -0
  149. package/dist/report/reactive-framework-test-suite/src/batching.d.ts.map +1 -0
  150. package/dist/report/reactive-framework-test-suite/src/behaviorDifferences.d.ts +19 -0
  151. package/dist/report/reactive-framework-test-suite/src/behaviorDifferences.d.ts.map +1 -0
  152. package/dist/report/reactive-framework-test-suite/src/computedEval.d.ts +19 -0
  153. package/dist/report/reactive-framework-test-suite/src/computedEval.d.ts.map +1 -0
  154. package/dist/report/reactive-framework-test-suite/src/cycleDetection.d.ts +18 -0
  155. package/dist/report/reactive-framework-test-suite/src/cycleDetection.d.ts.map +1 -0
  156. package/dist/report/reactive-framework-test-suite/src/dynamicDeps.d.ts +20 -0
  157. package/dist/report/reactive-framework-test-suite/src/dynamicDeps.d.ts.map +1 -0
  158. package/dist/report/reactive-framework-test-suite/src/effectLifecycle.d.ts +20 -0
  159. package/dist/report/reactive-framework-test-suite/src/effectLifecycle.d.ts.map +1 -0
  160. package/dist/report/reactive-framework-test-suite/src/equality.d.ts +19 -0
  161. package/dist/report/reactive-framework-test-suite/src/equality.d.ts.map +1 -0
  162. package/dist/report/reactive-framework-test-suite/src/errorHandling.d.ts +20 -0
  163. package/dist/report/reactive-framework-test-suite/src/errorHandling.d.ts.map +1 -0
  164. package/dist/report/reactive-framework-test-suite/src/framework.d.ts +24 -0
  165. package/dist/report/reactive-framework-test-suite/src/framework.d.ts.map +1 -0
  166. package/dist/report/reactive-framework-test-suite/src/graphPropagation.d.ts +18 -0
  167. package/dist/report/reactive-framework-test-suite/src/graphPropagation.d.ts.map +1 -0
  168. package/dist/report/reactive-framework-test-suite/src/index.d.ts +11 -0
  169. package/dist/report/reactive-framework-test-suite/src/index.d.ts.map +1 -0
  170. package/dist/report/reactive-framework-test-suite/src/innerWrite.d.ts +20 -0
  171. package/dist/report/reactive-framework-test-suite/src/innerWrite.d.ts.map +1 -0
  172. package/dist/report/reactive-framework-test-suite/src/memoryGc.d.ts +18 -0
  173. package/dist/report/reactive-framework-test-suite/src/memoryGc.d.ts.map +1 -0
  174. package/dist/report/reactive-framework-test-suite/src/nestedEffects.d.ts +20 -0
  175. package/dist/report/reactive-framework-test-suite/src/nestedEffects.d.ts.map +1 -0
  176. package/dist/report/reactive-framework-test-suite/src/reactiveEngine.test.d.ts +2 -0
  177. package/dist/report/reactive-framework-test-suite/src/reactiveEngine.test.d.ts.map +1 -0
  178. package/dist/report/reactive-framework-test-suite/src/staleEvaluation.d.ts +18 -0
  179. package/dist/report/reactive-framework-test-suite/src/staleEvaluation.d.ts.map +1 -0
  180. package/dist/report/reactive-framework-test-suite/src/untracked.d.ts +18 -0
  181. package/dist/report/reactive-framework-test-suite/src/untracked.d.ts.map +1 -0
  182. package/dist/report/reactive-framework-test-suite/test/frameworks/alienSignals.d.ts +3 -0
  183. package/dist/report/reactive-framework-test-suite/test/frameworks/alienSignals.d.ts.map +1 -0
  184. package/dist/report/reactive-framework-test-suite/test/frameworks/angularSignals.d.ts +3 -0
  185. package/dist/report/reactive-framework-test-suite/test/frameworks/angularSignals.d.ts.map +1 -0
  186. package/dist/report/reactive-framework-test-suite/test/frameworks/anod.d.ts +3 -0
  187. package/dist/report/reactive-framework-test-suite/test/frameworks/anod.d.ts.map +1 -0
  188. package/dist/report/reactive-framework-test-suite/test/frameworks/index.d.ts +3 -0
  189. package/dist/report/reactive-framework-test-suite/test/frameworks/index.d.ts.map +1 -0
  190. package/dist/report/reactive-framework-test-suite/test/frameworks/mobx.d.ts +3 -0
  191. package/dist/report/reactive-framework-test-suite/test/frameworks/mobx.d.ts.map +1 -0
  192. package/dist/report/reactive-framework-test-suite/test/frameworks/pota.d.ts +3 -0
  193. package/dist/report/reactive-framework-test-suite/test/frameworks/pota.d.ts.map +1 -0
  194. package/dist/report/reactive-framework-test-suite/test/frameworks/preactSignals.d.ts +3 -0
  195. package/dist/report/reactive-framework-test-suite/test/frameworks/preactSignals.d.ts.map +1 -0
  196. package/dist/report/reactive-framework-test-suite/test/frameworks/reactively.d.ts +3 -0
  197. package/dist/report/reactive-framework-test-suite/test/frameworks/reactively.d.ts.map +1 -0
  198. package/dist/report/reactive-framework-test-suite/test/frameworks/reatom.d.ts +3 -0
  199. package/dist/report/reactive-framework-test-suite/test/frameworks/reatom.d.ts.map +1 -0
  200. package/dist/report/reactive-framework-test-suite/test/frameworks/sjs.d.ts +3 -0
  201. package/dist/report/reactive-framework-test-suite/test/frameworks/sjs.d.ts.map +1 -0
  202. package/dist/report/reactive-framework-test-suite/test/frameworks/solid.d.ts +3 -0
  203. package/dist/report/reactive-framework-test-suite/test/frameworks/solid.d.ts.map +1 -0
  204. package/dist/report/reactive-framework-test-suite/test/frameworks/solidSignals.d.ts +3 -0
  205. package/dist/report/reactive-framework-test-suite/test/frameworks/solidSignals.d.ts.map +1 -0
  206. package/dist/report/reactive-framework-test-suite/test/frameworks/svelte.d.ts +3 -0
  207. package/dist/report/reactive-framework-test-suite/test/frameworks/svelte.d.ts.map +1 -0
  208. package/dist/report/reactive-framework-test-suite/test/frameworks/tansu.d.ts +3 -0
  209. package/dist/report/reactive-framework-test-suite/test/frameworks/tansu.d.ts.map +1 -0
  210. package/dist/report/reactive-framework-test-suite/test/frameworks/tc39Signals.d.ts +3 -0
  211. package/dist/report/reactive-framework-test-suite/test/frameworks/tc39Signals.d.ts.map +1 -0
  212. package/dist/report/reactive-framework-test-suite/test/frameworks/vueReactivity.d.ts +3 -0
  213. package/dist/report/reactive-framework-test-suite/test/frameworks/vueReactivity.d.ts.map +1 -0
  214. package/dist/report/reactive-framework-test-suite/test/run.test.d.ts +2 -0
  215. package/dist/report/reactive-framework-test-suite/test/run.test.d.ts.map +1 -0
  216. package/dist/report/reactive-framework-test-suite/vitest.config.d.ts +3 -0
  217. package/dist/report/reactive-framework-test-suite/vitest.config.d.ts.map +1 -0
  218. package/dist/utils/getExtractedValues.cjs +2 -0
  219. package/dist/utils/getExtractedValues.cjs.map +1 -0
  220. package/dist/utils/getExtractedValues.mjs +24 -0
  221. package/dist/utils/getExtractedValues.mjs.map +1 -0
  222. package/dist/vue/core.vue-adapter.cjs +2 -0
  223. package/dist/vue/core.vue-adapter.cjs.map +1 -0
  224. package/dist/vue/core.vue-adapter.d.ts +8 -0
  225. package/dist/vue/core.vue-adapter.d.ts.map +1 -0
  226. package/dist/vue/core.vue-adapter.mjs +22 -0
  227. package/dist/vue/core.vue-adapter.mjs.map +1 -0
  228. package/dist/vue/core.vue-adapter.test.d.ts +2 -0
  229. package/dist/vue/core.vue-adapter.test.d.ts.map +1 -0
  230. package/dist/vue/index.cjs +2 -1
  231. package/dist/vue/index.cjs.map +1 -0
  232. package/dist/vue/index.d.ts +14 -2
  233. package/dist/vue/index.d.ts.map +1 -1
  234. package/dist/vue/index.mjs +54 -3
  235. package/dist/vue/index.mjs.map +1 -0
  236. package/package.json +4 -3
  237. package/dist/angular/ReactiveEngine4Angular.cjs +0 -2
  238. package/dist/angular/ReactiveEngine4Angular.cjs.map +0 -1
  239. package/dist/angular/ReactiveEngine4Angular.d.ts +0 -37
  240. package/dist/angular/ReactiveEngine4Angular.d.ts.map +0 -1
  241. package/dist/angular/ReactiveEngine4Angular.mjs +0 -45
  242. package/dist/angular/ReactiveEngine4Angular.mjs.map +0 -1
  243. package/dist/angular/core.angular.auto.test.d.ts +0 -2
  244. package/dist/angular/core.angular.auto.test.d.ts.map +0 -1
  245. package/dist/angular/core.angular.test.d.ts +0 -2
  246. package/dist/angular/core.angular.test.d.ts.map +0 -1
  247. package/dist/core/core.auto.test.d.ts +0 -2
  248. package/dist/core/core.auto.test.d.ts.map +0 -1
  249. package/dist/react/ReactiveEngine4React.cjs +0 -2
  250. package/dist/react/ReactiveEngine4React.cjs.map +0 -1
  251. package/dist/react/ReactiveEngine4React.d.ts +0 -34
  252. package/dist/react/ReactiveEngine4React.d.ts.map +0 -1
  253. package/dist/react/ReactiveEngine4React.mjs +0 -51
  254. package/dist/react/ReactiveEngine4React.mjs.map +0 -1
  255. package/dist/react/core.react.auto.test.d.ts +0 -2
  256. package/dist/react/core.react.auto.test.d.ts.map +0 -1
  257. package/dist/react/core.react.test.d.ts +0 -2
  258. package/dist/react/core.react.test.d.ts.map +0 -1
  259. package/dist/react/hooks/FilteredCatalog.auto.test.d.ts +0 -2
  260. package/dist/react/hooks/FilteredCatalog.auto.test.d.ts.map +0 -1
  261. package/dist/react/hooks/FilteredCatalog.test.d.ts +0 -2
  262. package/dist/react/hooks/FilteredCatalog.test.d.ts.map +0 -1
  263. package/dist/react/hooks/index.cjs +0 -1
  264. package/dist/react/hooks/index.d.ts +0 -4
  265. package/dist/react/hooks/index.d.ts.map +0 -1
  266. package/dist/react/hooks/index.mjs +0 -7
  267. package/dist/react/hooks/types.d.ts +0 -20
  268. package/dist/react/hooks/types.d.ts.map +0 -1
  269. package/dist/react/hooks/useReactiveSubscription/index.cjs +0 -1
  270. package/dist/react/hooks/useReactiveSubscription/index.d.ts +0 -2
  271. package/dist/react/hooks/useReactiveSubscription/index.d.ts.map +0 -1
  272. package/dist/react/hooks/useReactiveSubscription/index.mjs +0 -2
  273. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts +0 -2
  274. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts.map +0 -1
  275. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs +0 -2
  276. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs.map +0 -1
  277. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts +0 -7
  278. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts.map +0 -1
  279. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs +0 -27
  280. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs.map +0 -1
  281. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts +0 -2
  282. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts.map +0 -1
  283. package/dist/react/hooks/useReactiveValue/index.cjs +0 -1
  284. package/dist/react/hooks/useReactiveValue/index.d.ts +0 -2
  285. package/dist/react/hooks/useReactiveValue/index.d.ts.map +0 -1
  286. package/dist/react/hooks/useReactiveValue/index.mjs +0 -2
  287. package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts +0 -2
  288. package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts.map +0 -1
  289. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs +0 -2
  290. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs.map +0 -1
  291. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts +0 -18
  292. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts.map +0 -1
  293. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs +0 -25
  294. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs.map +0 -1
  295. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts +0 -2
  296. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts.map +0 -1
  297. package/dist/react/hooks/useReactiveValue0/index.cjs +0 -1
  298. package/dist/react/hooks/useReactiveValue0/index.d.ts +0 -2
  299. package/dist/react/hooks/useReactiveValue0/index.d.ts.map +0 -1
  300. package/dist/react/hooks/useReactiveValue0/index.mjs +0 -2
  301. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs +0 -2
  302. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs.map +0 -1
  303. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts +0 -51
  304. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts.map +0 -1
  305. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs +0 -23
  306. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs.map +0 -1
  307. package/dist/vue/ReactiveEngine4Vue.cjs +0 -2
  308. package/dist/vue/ReactiveEngine4Vue.cjs.map +0 -1
  309. package/dist/vue/ReactiveEngine4Vue.d.ts +0 -37
  310. package/dist/vue/ReactiveEngine4Vue.d.ts.map +0 -1
  311. package/dist/vue/ReactiveEngine4Vue.mjs +0 -53
  312. package/dist/vue/ReactiveEngine4Vue.mjs.map +0 -1
  313. package/dist/vue/composables/index.d.ts +0 -2
  314. package/dist/vue/composables/index.d.ts.map +0 -1
  315. package/dist/vue/composables/useReactiveValue.auto.test.d.ts +0 -2
  316. package/dist/vue/composables/useReactiveValue.auto.test.d.ts.map +0 -1
  317. package/dist/vue/composables/useReactiveValue.cjs +0 -2
  318. package/dist/vue/composables/useReactiveValue.cjs.map +0 -1
  319. package/dist/vue/composables/useReactiveValue.d.ts +0 -12
  320. package/dist/vue/composables/useReactiveValue.d.ts.map +0 -1
  321. package/dist/vue/composables/useReactiveValue.mjs +0 -19
  322. package/dist/vue/composables/useReactiveValue.mjs.map +0 -1
  323. package/dist/vue/composables/useReactiveValue.test.d.ts +0 -2
  324. package/dist/vue/composables/useReactiveValue.test.d.ts.map +0 -1
  325. package/dist/vue/core.vue.auto.test.d.ts +0 -2
  326. package/dist/vue/core.vue.auto.test.d.ts.map +0 -1
  327. package/dist/vue/core.vue.test.d.ts +0 -2
  328. package/dist/vue/core.vue.test.d.ts.map +0 -1
package/README.md CHANGED
@@ -184,3 +184,274 @@ export class AngularCounterComponent {
184
184
 
185
185
  </details>
186
186
  </div>
187
+
188
+
189
+ ## Core Architecture: Push/Pull & Atomic Scheduling
190
+ The engine utilizes a hybrid Push/Pull topology paired with an Atomic Transaction Scheduler to guarantee glitch-free propagation, automated cleanup, and maximum runtime performance.
191
+ ```
192
+ [ Mutate Signal ] ──( Synchronous Push )──> [ Mark Nodes Dirty ]
193
+ │
194
+ ┌───────────────────────────────────────────────┘
195
+ ▼
196
+ [ Atomic Scheduler ] ──( Microtask/Batch Flush )──> [ Trigger Effects ]
197
+ │
198
+ ┌───────────────────────────────────────────────────────┘
199
+ ▼
200
+ [ Lazy Pull Evaluation ] ──( Computed Derivations )──> [ Framework Bridges ]
201
+ ```
202
+
203
+ • Synchronous Push (Invalidation): Mutating a signal triggers a cascade that immediately flags dependent `computed` and `effect` nodes as dirty.
204
+ • Lazy Pull (Evaluation): Values are computed only when explicitly read, using cached execution tracks.
205
+ • Atomic Batching: State changes made inside an `engine.batch` transaction are collapsed. Effects fire exactly once at the end of the batch block, avoiding intermediate cascade states and rendering glitches.
206
+
207
+ ## Canonical Performance Patterns
208
+
209
+ 1. State Mirroring Anti-Pattern vs. Lazy Derivations
210
+
211
+ Copying external async state directly into local mutable signals introduces synchronization traps, rendering loops, and memory overhead. The engine enforces a Zero-Copy Architecture through memoized computations.
212
+ ```ts
213
+ // ❌ Mirroring Trap (Causes redundant pushes & recursion)
214
+ engine.effect(() => {
215
+ const data = apiResource.data
216
+ if (data) localSignal.value = data
217
+ })
218
+
219
+ // 🟢 Canonical Pattern (Pure Lazy Derivation)
220
+ const validData = engine.computed(() => {
221
+ return apiResource.data?.filter(item => item.isValid) ?? []
222
+ })
223
+ ```
224
+
225
+ 2. Segmented Micro-Inputs Pattern
226
+
227
+ To eliminate parent re-renders in deep form trees, push state subscriptions down to individual inputs. The parent controls global layouts by observing only top-level boundary states (like current step counters), while input fields mutate and observe point signals independently.
228
+
229
+ ## Architecture-Grade Form Wizard (Example 254)
230
+ This enterprise-ready multi-step form implementation demonstrates absolute separation of concerns: state, cross-step validation schemas, and API fetch mechanics are completely decoupled from React.
231
+
232
+ 1. Action Validation Decorators (`withValidation.ts`)
233
+ ```ts
234
+ import { Signal } from '@pravosleva/reactive-engine'
235
+
236
+ export type ValidationSchema<T> = {
237
+ [K in keyof T]?: (value: T[K], state: T) => string | true
238
+ }
239
+
240
+ export interface ValidationOptions<T> {
241
+ schema: ValidationSchema<T>
242
+ errorsSignal: Signal<Record<string, string>>
243
+ }
244
+
245
+ export const withValidation = <T, Args extends any[], R>(
246
+ targetAction: (...args: Args) => R,
247
+ options: ValidationOptions<T>
248
+ ) => {
249
+ return (currentState: T, ...args: Args): R | void => {
250
+ const { schema, errorsSignal } = options
251
+ const nextErrors: Record<string, string> = {}
252
+ let hasErrors = false
253
+
254
+ for (const key in schema) {
255
+ const validator = schema[key]
256
+ if (typeof validator === 'function') {
257
+ const result = validator(currentState[key], currentState)
258
+ if (typeof result === 'string') {
259
+ nextErrors[key] = result
260
+ hasErrors = true
261
+ }
262
+ }
263
+ }
264
+
265
+ errorsSignal.value = nextErrors
266
+ if (hasErrors) return
267
+
268
+ return targetAction(...args)
269
+ }
270
+ }
271
+
272
+ export const withResourceValidation = <S, T>(
273
+ fetcher: (source: S, signal: AbortSignal) => Promise<T>,
274
+ options: ValidationOptions<S>
275
+ ) => {
276
+ return async (sourceValue: S, abortSignal: AbortSignal): Promise<T> => {
277
+ const { schema, errorsSignal } = options
278
+ const nextErrors: Record<string, string> = {}
279
+ let hasErrors = false
280
+
281
+ for (const key in schema) {
282
+ const validator = schema[key]
283
+ if (typeof validator === 'function') {
284
+ const result = validator(sourceValue[key], sourceValue)
285
+ if (typeof result === 'string') {
286
+ nextErrors[key] = result
287
+ hasErrors = true
288
+ }
289
+ }
290
+ }
291
+
292
+ errorsSignal.value = nextErrors
293
+ if (hasErrors) throw new Error('Validation failed')
294
+
295
+ return fetcher(sourceValue, abortSignal)
296
+ }
297
+ }
298
+ ```
299
+ 2. Domain & Validation Service (`FormWizardLogic.ts`)
300
+ ```tsx
301
+ import { AbstractService } from '@pravosleva/reactive-engine'
302
+ import { withValidation, withResourceValidation, ValidationSchema } from './withValidation'
303
+
304
+ export interface WizardState {
305
+ step: number
306
+ account: { email: string; phone: string }
307
+ profile: { firstName: string; lastName: string }
308
+ }
309
+
310
+ export class ApiService {
311
+ public async submitWizard(data: WizardState['profile']): Promise<{ success: boolean }> {
312
+ return new Promise(resolve => setTimeout(() => resolve({ success: true }), 1000))
313
+ }
314
+ }
315
+
316
+ export class FormWizardLogic extends AbstractService {
317
+ private api = this.engine.inject(ApiService)
318
+
319
+ public currentStep = this.createSignal<number>(1)
320
+ public errors = this.createSignal<Record<string, string>>({})
321
+
322
+ public formData = this.engine.reactive<WizardState>({
323
+ step: 1,
324
+ account: { email: '', phone: '' },
325
+ profile: { firstName: '', lastName: '' }
326
+ })
327
+
328
+ private accountSchema: ValidationSchema<WizardState['account']> = {
329
+ email: (val) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val) ? true : 'Invalid email pattern',
330
+ phone: (val) => val.length >= 10 ? true : 'Phone must be at least 10 digits'
331
+ }
332
+
333
+ private profileSchema: ValidationSchema<WizardState['profile']> = {
334
+ firstName: (val) => val.trim() ? true : 'First name is required',
335
+ lastName: (val) => val.trim() ? true : 'Last name is required'
336
+ }
337
+
338
+ public isWizardValid = this.engine.computed<boolean>(() => {
339
+ const { email, phone } = this.formData.account
340
+ const { firstName, lastName } = this.formData.profile
341
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
342
+ return emailRegex.test(email) && phone.length >= 10 && !!firstName.trim() && !!lastName.trim()
343
+ })
344
+
345
+ private profileSource = this.engine.computed(() => this.formData.profile)
346
+
347
+ public nextToProfileStep = () => {
348
+ const action = withValidation(() => {
349
+ this.currentStep.value = 2
350
+ }, { schema: this.accountSchema, errorsSignal: this.errors })
351
+
352
+ action(this.formData.account)
353
+ }
354
+
355
+ public submitWizardForm = this.engine.resource(
356
+ withResourceValidation(
357
+ async (profileData, abortSignal) => {
358
+ return this.api.submitWizard(profileData)
359
+ },
360
+ { schema: this.profileSchema, errorsSignal: this.errors }
361
+ ),
362
+ this.profileSource
363
+ )
364
+
365
+ public prevStep = () => {
366
+ this.errors.value = {}
367
+ this.currentStep.value = 1
368
+ }
369
+ }
370
+ ```
371
+ 3. Framework Representation (`Example254.tsx`)
372
+ The React tier remains completely stateless, eliminating all hook declaration chains. Prop-drilling the stable `logic` context doesn't trigger parent updates, providing maximum render insulation.
373
+ ```tsx
374
+ import React from 'react'
375
+ import { ReactiveEngine, use } from '@pravosleva/reactive-engine/react'
376
+ import { FormWizardLogic } from './FormWizardLogic'
377
+
378
+ const engine = new ReactiveEngine()
379
+
380
+ export const Example254 = () => {
381
+ const logic = engine.inject(FormWizardLogic)
382
+ const step = use(logic.currentStep)
383
+ const errors = use(logic.errors)
384
+ const isFormValid = use(logic.isWizardValid)
385
+ const submitState = use(logic.submitWizardForm)
386
+ const form = use(logic.formData)
387
+
388
+ return (
389
+ <div className="wizard-container">
390
+ {step === 1 && (
391
+ <div className="step-pane">
392
+ <h3>Step 1: Account Setup</h3>
393
+ <input
394
+ value={form.account.email}
395
+ onChange={(e) => {
396
+ logic.formData.account.email = e.target.value
397
+ if (errors.email) logic.errors.value = { ...errors, email: '' }
398
+ }}
399
+ placeholder="Email (user@domain.com)"
400
+ />
401
+ {errors.email && <span className="err-label">{errors.email}</span>}
402
+
403
+ <input
404
+ value={form.account.phone}
405
+ onChange={(e) => {
406
+ logic.formData.account.phone = e.target.value.replace(/\D/g, '')
407
+ if (errors.phone) logic.errors.value = { ...errors, phone: '' }
408
+ }}
409
+ placeholder="Phone (digits only)"
410
+ />
411
+ {errors.phone && <span className="err-label">{errors.phone}</span>}
412
+
413
+ <button onClick={logic.nextToProfileStep}>Next</button>
414
+ </div>
415
+ )}
416
+
417
+ {step === 2 && (
418
+ <div className="step-pane">
419
+ <h3>Step 2: Personal Profile</h3>
420
+ <input
421
+ value={form.profile.firstName}
422
+ onChange={(e) => {
423
+ logic.formData.profile.firstName = e.target.value
424
+ if (errors.firstName) logic.errors.value = { ...errors, firstName: '' }
425
+ }}
426
+ placeholder="First Name"
427
+ />
428
+ {errors.firstName && <span className="err-label">{errors.firstName}</span>}
429
+
430
+ <button onClick={logic.prevStep}>Back</button>
431
+ <button onClick={() => logic.submitWizardForm.refetch()} disabled={submitState.loading}>
432
+ {submitState.loading ? 'Submitting...' : 'Finish'}
433
+ </button>
434
+ </div>
435
+ )}
436
+
437
+ <div className="status-footer">
438
+ <div>Validation Boundary: {isFormValid ? '🟢 Valid' : '🔴 Missing Criteria'}</div>
439
+ {submitState.data?.success && <div className="success">Form successfully submitted!</div>}
440
+ </div>
441
+ </div>
442
+ )
443
+ }
444
+ ```
445
+
446
+ ## Unified Framework Bridges
447
+ ### Angular 16+ Integration (`src/angular/index.ts`)
448
+ Converts push/pull graph nodes synchronously into standard immutable read-only Angular Signals. Includes auto-unsubscribing lifecycle hooks tied to DestroyRef with injection safety.
449
+ ```ts
450
+ const engine = new ReactiveEngine4Angular()
451
+ const searchLogic = engine.inject(SearchLogic)
452
+
453
+ // Exposed directly to Angular HTML template as search()
454
+ public search = this.engine.use(this.searchLogic.searchResource)
455
+ ```
456
+ ### Vue 3 Integration (`src/vue/index.ts`)
457
+ Exposes full integration with the Vue Composition API via deep proxy snapshots, supporting on-demand computed triggers and automated component scope teardowns.
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractService.cjs","names":[],"sources":["../src/core/AbstractService.ts"],"sourcesContent":["import { ReactiveEngine } from './core'\n\nexport abstract class AbstractService {\n constructor(protected engine: ReactiveEngine) {\n // Вызываем метод инициализации, который можно переопределить в наследниках\n this.onInit()\n }\n\n // NOTE: Полезные хелперы для сокращения кода\n protected createNumericSignal(val: number, name: string) {\n return this.engine.signal(val, {\n name,\n validate: (v) => typeof v === 'number' && !isNaN(v)\n })\n }\n\n protected createComputed<T>(fn: () => T) {\n return this.engine.computed(fn)\n }\n\n protected createSignal<T>(val: T, name?: string) {\n return this.engine.signal(val, name)\n }\n\n // NOTE: Жизненный цикл: вызывается сразу после создания сервиса.\n // Удобно для инициализации сигналов, которые зависят от engine.\n protected onInit(): void { }\n}\n\nexport const BaseREService = AbstractService\n"],"mappings":"AAEA,IAAsB,EAAtB,KAAsC,CACd,OAAtB,YAAY,EAAkC,CAAxB,KAAA,OAAA,EAEpB,KAAK,OAAO,CACd,CAGA,oBAA8B,EAAa,EAAc,CACvD,OAAO,KAAK,OAAO,OAAO,EAAK,CAC7B,OACA,SAAW,GAAM,OAAO,GAAM,UAAY,CAAC,MAAM,CAAC,CACpD,CAAC,CACH,CAEA,eAA4B,EAAa,CACvC,OAAO,KAAK,OAAO,SAAS,CAAE,CAChC,CAEA,aAA0B,EAAQ,EAAe,CAC/C,OAAO,KAAK,OAAO,OAAO,EAAK,CAAI,CACrC,CAIA,QAAyB,CAAE,CAC7B,EAEa,EAAgB"}
1
+ {"version":3,"file":"AbstractService.cjs","names":[],"sources":["../src/core/AbstractService.ts"],"sourcesContent":["import { ReactiveEngineAutomatic } from './core.automatic'\n\nexport abstract class AbstractService {\n constructor(protected engine: ReactiveEngineAutomatic) {\n // Вызываем метод инициализации, который можно переопределить в наследниках\n this.onInit()\n }\n\n // NOTE: Полезные хелперы для сокращения кода\n protected createNumericSignal(val: number, name: string) {\n return this.engine.signal(val, {\n name,\n validate: (v) => typeof v === 'number' && !isNaN(v)\n })\n }\n\n protected createComputed<T>(fn: () => T) {\n return this.engine.computed(fn)\n }\n\n protected createSignal<T>(val: T, name?: string) {\n return this.engine.signal(val, name)\n }\n\n // NOTE: Жизненный цикл: вызывается сразу после создания сервиса.\n // Удобно для инициализации сигналов, которые зависят от engine.\n protected onInit(): void { }\n}\n\nexport const BaseREService = AbstractService\n"],"mappings":"AAEA,IAAsB,EAAtB,KAAsC,CACd,OAAtB,YAAY,EAA2C,CAAjC,KAAA,OAAA,EAEpB,KAAK,OAAO,CACd,CAGA,oBAA8B,EAAa,EAAc,CACvD,OAAO,KAAK,OAAO,OAAO,EAAK,CAC7B,OACA,SAAW,GAAM,OAAO,GAAM,UAAY,CAAC,MAAM,CAAC,CACpD,CAAC,CACH,CAEA,eAA4B,EAAa,CACvC,OAAO,KAAK,OAAO,SAAS,CAAE,CAChC,CAEA,aAA0B,EAAQ,EAAe,CAC/C,OAAO,KAAK,OAAO,OAAO,EAAK,CAAI,CACrC,CAIA,QAAyB,CAAE,CAC7B,EAEa,EAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractService.mjs","names":[],"sources":["../src/core/AbstractService.ts"],"sourcesContent":["import { ReactiveEngine } from './core'\n\nexport abstract class AbstractService {\n constructor(protected engine: ReactiveEngine) {\n // Вызываем метод инициализации, который можно переопределить в наследниках\n this.onInit()\n }\n\n // NOTE: Полезные хелперы для сокращения кода\n protected createNumericSignal(val: number, name: string) {\n return this.engine.signal(val, {\n name,\n validate: (v) => typeof v === 'number' && !isNaN(v)\n })\n }\n\n protected createComputed<T>(fn: () => T) {\n return this.engine.computed(fn)\n }\n\n protected createSignal<T>(val: T, name?: string) {\n return this.engine.signal(val, name)\n }\n\n // NOTE: Жизненный цикл: вызывается сразу после создания сервиса.\n // Удобно для инициализации сигналов, которые зависят от engine.\n protected onInit(): void { }\n}\n\nexport const BaseREService = AbstractService\n"],"mappings":";AAEA,IAAsB,IAAtB,MAAsC;CACd;CAAtB,YAAY,GAAkC;EAE5C,AAFoB,KAAA,SAAA,GAEpB,KAAK,OAAO;CACd;CAGA,oBAA8B,GAAa,GAAc;EACvD,OAAO,KAAK,OAAO,OAAO,GAAK;GAC7B;GACA,WAAW,MAAM,OAAO,KAAM,YAAY,CAAC,MAAM,CAAC;EACpD,CAAC;CACH;CAEA,eAA4B,GAAa;EACvC,OAAO,KAAK,OAAO,SAAS,CAAE;CAChC;CAEA,aAA0B,GAAQ,GAAe;EAC/C,OAAO,KAAK,OAAO,OAAO,GAAK,CAAI;CACrC;CAIA,SAAyB,CAAE;AAC7B,GAEa,IAAgB"}
1
+ {"version":3,"file":"AbstractService.mjs","names":[],"sources":["../src/core/AbstractService.ts"],"sourcesContent":["import { ReactiveEngineAutomatic } from './core.automatic'\n\nexport abstract class AbstractService {\n constructor(protected engine: ReactiveEngineAutomatic) {\n // Вызываем метод инициализации, который можно переопределить в наследниках\n this.onInit()\n }\n\n // NOTE: Полезные хелперы для сокращения кода\n protected createNumericSignal(val: number, name: string) {\n return this.engine.signal(val, {\n name,\n validate: (v) => typeof v === 'number' && !isNaN(v)\n })\n }\n\n protected createComputed<T>(fn: () => T) {\n return this.engine.computed(fn)\n }\n\n protected createSignal<T>(val: T, name?: string) {\n return this.engine.signal(val, name)\n }\n\n // NOTE: Жизненный цикл: вызывается сразу после создания сервиса.\n // Удобно для инициализации сигналов, которые зависят от engine.\n protected onInit(): void { }\n}\n\nexport const BaseREService = AbstractService\n"],"mappings":";AAEA,IAAsB,IAAtB,MAAsC;CACd;CAAtB,YAAY,GAA2C;EAErD,AAFoB,KAAA,SAAA,GAEpB,KAAK,OAAO;CACd;CAGA,oBAA8B,GAAa,GAAc;EACvD,OAAO,KAAK,OAAO,OAAO,GAAK;GAC7B;GACA,WAAW,MAAM,OAAO,KAAM,YAAY,CAAC,MAAM,CAAC;EACpD,CAAC;CACH;CAEA,eAA4B,GAAa;EACvC,OAAO,KAAK,OAAO,SAAS,CAAE;CAChC;CAEA,aAA0B,GAAQ,GAAe;EAC/C,OAAO,KAAK,OAAO,OAAO,GAAK,CAAI;CACrC;CAIA,SAAyB,CAAE;AAC7B,GAEa,IAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseREServiceEnhanced.cjs","names":[],"sources":["../src/core/BaseREServiceEnhanced.ts"],"sourcesContent":["import { ReactiveEngine } from './core'\n\nexport abstract class BaseREServiceEnhanced {\n constructor(protected engine: ReactiveEngine) {\n setTimeout(() => this.onInit(), 0)\n }\n\n protected onInit(): void { }\n}\n"],"mappings":"AAEA,IAAsB,EAAtB,KAA4C,CACpB,OAAtB,YAAY,EAAkC,CAAxB,KAAA,OAAA,EACpB,eAAiB,KAAK,OAAO,EAAG,CAAC,CACnC,CAEA,QAAyB,CAAE,CAC7B"}
1
+ {"version":3,"file":"BaseREServiceEnhanced.cjs","names":[],"sources":["../src/core/BaseREServiceEnhanced.ts"],"sourcesContent":["import { ReactiveEngineAutomatic } from './core.automatic'\n\nexport abstract class BaseREServiceEnhanced {\n constructor(protected engine: ReactiveEngineAutomatic) {\n setTimeout(() => this.onInit(), 0)\n }\n\n protected onInit(): void { }\n}\n"],"mappings":"AAEA,IAAsB,EAAtB,KAA4C,CACpB,OAAtB,YAAY,EAA2C,CAAjC,KAAA,OAAA,EACpB,eAAiB,KAAK,OAAO,EAAG,CAAC,CACnC,CAEA,QAAyB,CAAE,CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseREServiceEnhanced.mjs","names":[],"sources":["../src/core/BaseREServiceEnhanced.ts"],"sourcesContent":["import { ReactiveEngine } from './core'\n\nexport abstract class BaseREServiceEnhanced {\n constructor(protected engine: ReactiveEngine) {\n setTimeout(() => this.onInit(), 0)\n }\n\n protected onInit(): void { }\n}\n"],"mappings":";AAEA,IAAsB,IAAtB,MAA4C;CACpB;CAAtB,YAAY,GAAkC;EAC5C,AADoB,KAAA,SAAA,GACpB,iBAAiB,KAAK,OAAO,GAAG,CAAC;CACnC;CAEA,SAAyB,CAAE;AAC7B"}
1
+ {"version":3,"file":"BaseREServiceEnhanced.mjs","names":[],"sources":["../src/core/BaseREServiceEnhanced.ts"],"sourcesContent":["import { ReactiveEngineAutomatic } from './core.automatic'\n\nexport abstract class BaseREServiceEnhanced {\n constructor(protected engine: ReactiveEngineAutomatic) {\n setTimeout(() => this.onInit(), 0)\n }\n\n protected onInit(): void { }\n}\n"],"mappings":";AAEA,IAAsB,IAAtB,MAA4C;CACpB;CAAtB,YAAY,GAA2C;EACrD,AADoB,KAAA,SAAA,GACpB,iBAAiB,KAAK,OAAO,GAAG,CAAC;CACnC;CAEA,SAAyB,CAAE;AAC7B"}
@@ -13,5 +13,5 @@ export declare function useComputed<T>(computed: Computed<T>): T;
13
13
  * Хук для реактивного отслеживания асинхронного ресурса.
14
14
  * Возвращает объект состояния { data, loading, error }
15
15
  */
16
- export declare function useResource<T>(resource: Resource<T>): import('./core').ResourceState<T>;
16
+ export declare function useResource<T>(resource: Resource<T>): import('.').ResourceState<T>;
17
17
  //# sourceMappingURL=_react-bindings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_react-bindings.d.ts","sourceRoot":"","sources":["../src/_react-bindings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAQnD,eAAO,MAAM,MAAM,gBAAuB,CAAA;AAK1C;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAGjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAEvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,qCAGnD"}
1
+ {"version":3,"file":"_react-bindings.d.ts","sourceRoot":"","sources":["../src/_react-bindings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAQnD,eAAO,MAAM,MAAM,gBAAuB,CAAA;AAK1C;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAGjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAEvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,gCAGnD"}
@@ -0,0 +1,2 @@
1
+ let e=require("@angular/core");function t(t,n){if(typeof t!=`object`||!t)return(0,e.signal)(t).asReadonly();let r=`subscribe`in t&&typeof t.subscribe==`function`,i=(0,e.signal)(r?t.value:t),a=null;if(r)a=t.subscribe(e=>{i.set(e)});else if(`__subscribe`in t&&typeof t.__subscribe==`function`){let e=t;a=e.__subscribe(()=>{i.update(t=>Array.isArray(e)?[...e]:{...e})})}let o=null;try{o=n||(0,e.inject)(e.DestroyRef)}catch{n||console.warn(`[Reactive Engine Angular Adapter] Вызов toAngularSignal осуществлен вне контекста инъекций. Не забудьте передать DestroyRef вторым аргументом для защиты от утечек памяти.`)}return a&&o&&o.onDestroy(()=>{a()}),i.asReadonly()}exports.toAngularSignal=t;
2
+ //# sourceMappingURL=core.angular-adapter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.angular-adapter.cjs","names":[],"sources":["../../src/angular/core.angular-adapter.ts"],"sourcesContent":["import { signal, DestroyRef, inject, WritableSignal, Signal as NgSignal } from '@angular/core'\nimport { ISignalLike } from '../core/types'\n\ntype CleanupFn = () => void\n\n/**\n * 🔴 REACTIVE ENGINE ADAPTER FOR ANGULAR (v1.9.0)\n *\n * Нативно интегрирует синхронные и асингулярные графы ядра с Angular Signals.\n * Автоматически отписывается от утечек памяти через DestroyRef контекст инъекций.\n */\n\n/**\n * Функция-адаптер для преобразования реактивных примитивов ядра в Angular Signals.\n * @param item Сигнал, Компьютед или Reactive-Proxy ядра\n * @param injectRef Опциональный DestroyRef (если вызывается вне конструктора/inject-контекста)\n */\nexport function toAngularSignal<T>(\n item: T,\n injectRef?: DestroyRef\n): NgSignal<T extends ISignalLike<infer V> ? V : T> {\n\n if (item === null || item === undefined || typeof item !== 'object') {\n return signal(item as any).asReadonly()\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // Инициализируем нативный WritableSignal из Angular стартовым значением из ядра\n const ngSignal: WritableSignal<any> = signal(isSignal ? (item as any).value : item)\n let unsubscribe: CleanupFn | null = null\n\n // =========================================================================\n // СЦЕНАРИЙ 1: Подписка на Сигналы и Вычисляемые свойства (Computed)\n // =========================================================================\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue: any) => {\n // Синхронно пушим обновление в Angular Signal\n ngSignal.set(newValue)\n })\n }\n // =========================================================================\n // СЦЕНАРИЙ 2: Подписка на глубокие Proxy-объекты и массивы (reactive)\n // =========================================================================\n else if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const reactiveItem = item as any\n unsubscribe = reactiveItem.__subscribe(() => {\n // Для Proxy-массивов вызываем .update() с поверхностным спредом ссылки,\n // чтобы Change Detection в Angular мгновенно отловил изменения .push()/.splice()\n ngSignal.update((prev) => Array.isArray(reactiveItem) ? [...reactiveItem] : { ...reactiveItem })\n })\n }\n\n // Разрешаем контекст уничтожения для автоматического GC (Garbage Collection)\n let destroyRef: DestroyRef | null = null\n try {\n destroyRef = injectRef || inject(DestroyRef)\n } catch (e) {\n // Вызвано вне контекста инъекций Angular (например, в сырых функциях) и injectRef не передан\n if (!injectRef) {\n console.warn('[Reactive Engine Angular Adapter] Вызов toAngularSignal осуществлен вне контекста инъекций. Не забудьте передать DestroyRef вторым аргументом для защиты от утечек памяти.')\n }\n }\n\n if (unsubscribe && destroyRef) {\n destroyRef.onDestroy(() => {\n unsubscribe!()\n })\n }\n\n // Возвращаем как Readonly Signal, защищая стейт от несанкционированных внешних записей (.set/.update) во вьюхах\n return ngSignal.asReadonly()\n}\n"],"mappings":"+BAiBA,SAAgB,EACd,EACA,EACkD,CAElD,GAA2C,OAAO,GAAS,WAAvD,EACF,OAAA,EAAA,EAAA,OAAA,CAAc,CAAW,CAAC,CAAC,WAAW,EAGxC,IAAM,EAAW,cAAe,GAAQ,OAAQ,EAAiC,WAAc,WAGzF,GAAA,EAAA,EAAA,OAAA,CAAuC,EAAY,EAAa,MAAQ,CAAI,EAC9E,EAAgC,KAKpC,GAAI,EAEF,EAAc,EAAW,UAAW,GAAkB,CAEpD,EAAS,IAAI,CAAQ,CACvB,CAAC,OAKE,GAAI,gBAAiB,GAAQ,OAAQ,EAAiC,aAAgB,WAAY,CACrG,IAAM,EAAe,EACrB,EAAc,EAAa,gBAAkB,CAG3C,EAAS,OAAQ,GAAS,MAAM,QAAQ,CAAY,EAAI,CAAC,GAAG,CAAY,EAAI,CAAE,GAAG,CAAa,CAAC,CACjG,CAAC,CACH,CAGA,IAAI,EAAgC,KACpC,GAAI,CACF,EAAa,IAAA,EAAA,EAAA,OAAA,CAAoB,EAAA,UAAU,CAC7C,MAAY,CAEL,GACH,QAAQ,KAAK,4KAA4K,CAE7L,CASA,OAPI,GAAe,GACjB,EAAW,cAAgB,CACzB,EAAa,CACf,CAAC,EAII,EAAS,WAAW,CAC7B"}
@@ -0,0 +1,15 @@
1
+ import { DestroyRef, Signal as NgSignal } from '@angular/core';
2
+ import { ISignalLike } from '../core/types';
3
+ /**
4
+ * 🔴 REACTIVE ENGINE ADAPTER FOR ANGULAR (v1.9.0)
5
+ *
6
+ * Нативно интегрирует синхронные и асингулярные графы ядра с Angular Signals.
7
+ * Автоматически отписывается от утечек памяти через DestroyRef контекст инъекций.
8
+ */
9
+ /**
10
+ * Функция-адаптер для преобразования реактивных примитивов ядра в Angular Signals.
11
+ * @param item Сигнал, Компьютед или Reactive-Proxy ядра
12
+ * @param injectRef Опциональный DestroyRef (если вызывается вне конструктора/inject-контекста)
13
+ */
14
+ export declare function toAngularSignal<T>(item: T, injectRef?: DestroyRef): NgSignal<T extends ISignalLike<infer V> ? V : T>;
15
+ //# sourceMappingURL=core.angular-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.angular-adapter.d.ts","sourceRoot":"","sources":["../../src/angular/core.angular-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAA0B,MAAM,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAI3C;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,IAAI,EAAE,CAAC,EACP,SAAS,CAAC,EAAE,UAAU,GACrB,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAqDlD"}
@@ -0,0 +1,28 @@
1
+ import { DestroyRef as e, inject as t, signal as n } from "@angular/core";
2
+ //#region src/angular/core.angular-adapter.ts
3
+ function r(r, i) {
4
+ if (typeof r != "object" || !r) return n(r).asReadonly();
5
+ let a = "subscribe" in r && typeof r.subscribe == "function", o = n(a ? r.value : r), s = null;
6
+ if (a) s = r.subscribe((e) => {
7
+ o.set(e);
8
+ });
9
+ else if ("__subscribe" in r && typeof r.__subscribe == "function") {
10
+ let e = r;
11
+ s = e.__subscribe(() => {
12
+ o.update((t) => Array.isArray(e) ? [...e] : { ...e });
13
+ });
14
+ }
15
+ let c = null;
16
+ try {
17
+ c = i || t(e);
18
+ } catch {
19
+ i || console.warn("[Reactive Engine Angular Adapter] Вызов toAngularSignal осуществлен вне контекста инъекций. Не забудьте передать DestroyRef вторым аргументом для защиты от утечек памяти.");
20
+ }
21
+ return s && c && c.onDestroy(() => {
22
+ s();
23
+ }), o.asReadonly();
24
+ }
25
+ //#endregion
26
+ export { r as toAngularSignal };
27
+
28
+ //# sourceMappingURL=core.angular-adapter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.angular-adapter.mjs","names":[],"sources":["../../src/angular/core.angular-adapter.ts"],"sourcesContent":["import { signal, DestroyRef, inject, WritableSignal, Signal as NgSignal } from '@angular/core'\nimport { ISignalLike } from '../core/types'\n\ntype CleanupFn = () => void\n\n/**\n * 🔴 REACTIVE ENGINE ADAPTER FOR ANGULAR (v1.9.0)\n *\n * Нативно интегрирует синхронные и асингулярные графы ядра с Angular Signals.\n * Автоматически отписывается от утечек памяти через DestroyRef контекст инъекций.\n */\n\n/**\n * Функция-адаптер для преобразования реактивных примитивов ядра в Angular Signals.\n * @param item Сигнал, Компьютед или Reactive-Proxy ядра\n * @param injectRef Опциональный DestroyRef (если вызывается вне конструктора/inject-контекста)\n */\nexport function toAngularSignal<T>(\n item: T,\n injectRef?: DestroyRef\n): NgSignal<T extends ISignalLike<infer V> ? V : T> {\n\n if (item === null || item === undefined || typeof item !== 'object') {\n return signal(item as any).asReadonly()\n }\n\n const isSignal = 'subscribe' in item && typeof (item as Record<string, unknown>).subscribe === 'function'\n\n // Инициализируем нативный WritableSignal из Angular стартовым значением из ядра\n const ngSignal: WritableSignal<any> = signal(isSignal ? (item as any).value : item)\n let unsubscribe: CleanupFn | null = null\n\n // =========================================================================\n // СЦЕНАРИЙ 1: Подписка на Сигналы и Вычисляемые свойства (Computed)\n // =========================================================================\n if (isSignal) {\n const signalItem = (item as unknown) as ISignalLike<unknown>\n unsubscribe = signalItem.subscribe((newValue: any) => {\n // Синхронно пушим обновление в Angular Signal\n ngSignal.set(newValue)\n })\n }\n // =========================================================================\n // СЦЕНАРИЙ 2: Подписка на глубокие Proxy-объекты и массивы (reactive)\n // =========================================================================\n else if ('__subscribe' in item && typeof (item as Record<string, unknown>).__subscribe === 'function') {\n const reactiveItem = item as any\n unsubscribe = reactiveItem.__subscribe(() => {\n // Для Proxy-массивов вызываем .update() с поверхностным спредом ссылки,\n // чтобы Change Detection в Angular мгновенно отловил изменения .push()/.splice()\n ngSignal.update((prev) => Array.isArray(reactiveItem) ? [...reactiveItem] : { ...reactiveItem })\n })\n }\n\n // Разрешаем контекст уничтожения для автоматического GC (Garbage Collection)\n let destroyRef: DestroyRef | null = null\n try {\n destroyRef = injectRef || inject(DestroyRef)\n } catch (e) {\n // Вызвано вне контекста инъекций Angular (например, в сырых функциях) и injectRef не передан\n if (!injectRef) {\n console.warn('[Reactive Engine Angular Adapter] Вызов toAngularSignal осуществлен вне контекста инъекций. Не забудьте передать DestroyRef вторым аргументом для защиты от утечек памяти.')\n }\n }\n\n if (unsubscribe && destroyRef) {\n destroyRef.onDestroy(() => {\n unsubscribe!()\n })\n }\n\n // Возвращаем как Readonly Signal, защищая стейт от несанкционированных внешних записей (.set/.update) во вьюхах\n return ngSignal.asReadonly()\n}\n"],"mappings":";;AAiBA,SAAgB,EACd,GACA,GACkD;CAElD,IAA2C,OAAO,KAAS,aAAvD,GACF,OAAO,EAAO,CAAW,CAAC,CAAC,WAAW;CAGxC,IAAM,IAAW,eAAe,KAAQ,OAAQ,EAAiC,aAAc,YAGzF,IAAgC,EAAO,IAAY,EAAa,QAAQ,CAAI,GAC9E,IAAgC;CAKpC,IAAI,GAEF,IAAc,EAAW,WAAW,MAAkB;EAEpD,EAAS,IAAI,CAAQ;CACvB,CAAC;MAKE,IAAI,iBAAiB,KAAQ,OAAQ,EAAiC,eAAgB,YAAY;EACrG,IAAM,IAAe;EACrB,IAAc,EAAa,kBAAkB;GAG3C,EAAS,QAAQ,MAAS,MAAM,QAAQ,CAAY,IAAI,CAAC,GAAG,CAAY,IAAI,EAAE,GAAG,EAAa,CAAC;EACjG,CAAC;CACH;CAGA,IAAI,IAAgC;CACpC,IAAI;EACF,IAAa,KAAa,EAAO,CAAU;CAC7C,QAAY;EAEV,AAAK,KACH,QAAQ,KAAK,4KAA4K;CAE7L;CASA,OAPI,KAAe,KACjB,EAAW,gBAAgB;EACzB,EAAa;CACf,CAAC,GAII,EAAS,WAAW;AAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.angular-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.angular-adapter.test.d.ts","sourceRoot":"","sources":["../../src/angular/core.angular-adapter.test.ts"],"names":[],"mappings":""}
@@ -1 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ReactiveEngine4Angular.cjs");exports.ReactiveEngine=e.ReactiveEngine4AngularAutomatic;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../core.cjs"),t=require("./core.angular-adapter.cjs");let n=require("@angular/core");var r=class extends e.ReactiveEngine{frameworkPrefix=`angular`;use(e,t){if(e==null)return(0,n.signal)(e).asReadonly();let r=`subscribe`in e&&typeof e.subscribe==`function`,i=()=>r?e.value:e,a=(0,n.signal)(i()),o=!1,s=()=>{o||=(o=!0,a.set(i()),!1)},c=null;if(r?c=e.subscribe(s):`__subscribe`in e&&typeof e.__subscribe==`function`&&(c=e.__subscribe(s)),c){let e=c,r=()=>{try{(0,n.inject)(n.DestroyRef).onDestroy(()=>{e()})}catch{}};t?.injector?(0,n.runInInjectionContext)(t.injector,r):r()}return a.asReadonly()}};exports.ReactiveEngine=r,exports.toAngularSignal=t.toAngularSignal;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../src/angular/index.ts"],"sourcesContent":["export { toAngularSignal } from './core.angular-adapter'\n\nimport { signal, inject, DestroyRef, Injector, runInInjectionContext, type Signal } from '@angular/core'\nimport { ReactiveEngineAutomatic } from '../core'\nimport { type CleanupFn } from '../core/types'\n\nexport interface AngularUseOptions {\n /**\n * Кастомный инжектор Angular.\n * Позволяет использовать .use() вне конструктора (например, в асинхронных функциях),\n * если передать текущий Injector вручную.\n */\n injector?: Injector\n}\n\nexport class ReactiveEngine extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'angular'\n\n /**\n * Использование реактивного значения (Signal, Computed, Resource или Reactive Proxy) в Angular.\n * Возвращает стандартный неизменяемый Angular Signal.\n */\n public use<T>(\n item: any,\n options?: AngularUseOptions\n ): Signal<any> {\n if (item === null || item === undefined) {\n return signal(item).asReadonly()\n }\n\n const isSignalOrComputed = 'subscribe' in item && typeof item.subscribe === 'function'\n \n const getFreshValue = () => {\n if (isSignalOrComputed) return item.value\n return item\n }\n\n const angularSignal = signal<any>(getFreshValue())\n let isPendingUpdate = false\n\n const triggerUpdate = () => {\n if (isPendingUpdate) return\n isPendingUpdate = true\n \n angularSignal.set(getFreshValue())\n \n // Синхронно разжимаем защёлку, позволяя Angular подхватывать\n // асинхронные хвостовые вызовы (trailing edge) декораторов ядра\n isPendingUpdate = false\n }\n\n let unsubscribe: CleanupFn | null = null\n\n if (isSignalOrComputed) {\n unsubscribe = item.subscribe(triggerUpdate)\n } else if ('__subscribe' in item && typeof item.__subscribe === 'function') {\n unsubscribe = item.__subscribe(triggerUpdate)\n }\n\n if (unsubscribe) {\n const activeUnsub = unsubscribe\n const registerCleanup = () => {\n try {\n const destroyRef = inject(DestroyRef)\n destroyRef.onDestroy(() => {\n activeUnsub()\n })\n } catch (e) {}\n }\n\n if (options?.injector) {\n runInInjectionContext(options.injector, registerCleanup)\n } else {\n registerCleanup()\n }\n }\n\n return angularSignal.asReadonly()\n }\n}\n"],"mappings":"yKAeA,IAAa,EAAb,cAAoC,EAAA,cAAwB,CAC1D,gBAAqC,UAMrC,IACE,EACA,EACa,CACb,GAAI,GAAS,KACX,OAAA,EAAA,EAAA,OAAA,CAAc,CAAI,CAAC,CAAC,WAAW,EAGjC,IAAM,EAAqB,cAAe,GAAQ,OAAO,EAAK,WAAc,WAEtE,MACA,EAA2B,EAAK,MAC7B,EAGH,GAAA,EAAA,EAAA,OAAA,CAA4B,EAAc,CAAC,EAC7C,EAAkB,GAEhB,MAAsB,CACtB,AAOJ,KANA,EAAkB,GAElB,EAAc,IAAI,EAAc,CAAC,EAIf,GACpB,EAEI,EAAgC,KAQpC,GANI,EACF,EAAc,EAAK,UAAU,CAAa,EACjC,gBAAiB,GAAQ,OAAO,EAAK,aAAgB,aAC9D,EAAc,EAAK,YAAY,CAAa,GAG1C,EAAa,CACf,IAAM,EAAc,EACd,MAAwB,CAC5B,GAAI,EAEF,EAAA,EAAA,OAAA,CAD0B,EAAA,UAC1B,CAAA,CAAW,cAAgB,CACzB,EAAY,CACd,CAAC,CACH,MAAY,CAAC,CACf,EAEI,GAAS,UACX,EAAA,EAAA,sBAAA,CAAsB,EAAQ,SAAU,CAAe,EAEvD,EAAgB,CAEpB,CAEA,OAAO,EAAc,WAAW,CAClC,CACF"}
@@ -1,3 +1,20 @@
1
- import { ReactiveEngine4AngularAutomatic } from './ReactiveEngine4Angular';
2
- export { ReactiveEngine4AngularAutomatic as ReactiveEngine };
1
+ import { Injector, Signal } from '@angular/core';
2
+ import { ReactiveEngineAutomatic } from '../core';
3
+ export { toAngularSignal } from './core.angular-adapter';
4
+ export interface AngularUseOptions {
5
+ /**
6
+ * Кастомный инжектор Angular.
7
+ * Позволяет использовать .use() вне конструктора (например, в асинхронных функциях),
8
+ * если передать текущий Injector вручную.
9
+ */
10
+ injector?: Injector;
11
+ }
12
+ export declare class ReactiveEngine extends ReactiveEngineAutomatic {
13
+ protected frameworkPrefix: string;
14
+ /**
15
+ * Использование реактивного значения (Signal, Computed, Resource или Reactive Proxy) в Angular.
16
+ * Возвращает стандартный неизменяемый Angular Signal.
17
+ */
18
+ use<T>(item: any, options?: AngularUseOptions): Signal<any>;
19
+ }
3
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,EAAE,+BAA+B,IAAI,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/angular/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAA8B,QAAQ,EAAyB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAA;AACxG,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAGjD,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,qBAAa,cAAe,SAAQ,uBAAuB;IACzD,UAAmB,eAAe,SAAY;IAE9C;;;OAGG;IACI,GAAG,CAAC,CAAC,EACV,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM,CAAC,GAAG,CAAC;CAsDf"}
@@ -1,2 +1,28 @@
1
- import { ReactiveEngine4AngularAutomatic as e } from "./ReactiveEngine4Angular.mjs";
2
- export { e as ReactiveEngine };
1
+ import { ReactiveEngine as e } from "../core.mjs";
2
+ import { toAngularSignal as t } from "./core.angular-adapter.mjs";
3
+ import { DestroyRef as n, inject as r, runInInjectionContext as i, signal as a } from "@angular/core";
4
+ //#region src/angular/index.ts
5
+ var o = class extends e {
6
+ frameworkPrefix = "angular";
7
+ use(e, t) {
8
+ if (e == null) return a(e).asReadonly();
9
+ let o = "subscribe" in e && typeof e.subscribe == "function", s = () => o ? e.value : e, c = a(s()), l = !1, u = () => {
10
+ l ||= (l = !0, c.set(s()), !1);
11
+ }, d = null;
12
+ if (o ? d = e.subscribe(u) : "__subscribe" in e && typeof e.__subscribe == "function" && (d = e.__subscribe(u)), d) {
13
+ let e = d, a = () => {
14
+ try {
15
+ r(n).onDestroy(() => {
16
+ e();
17
+ });
18
+ } catch {}
19
+ };
20
+ t?.injector ? i(t.injector, a) : a();
21
+ }
22
+ return c.asReadonly();
23
+ }
24
+ };
25
+ //#endregion
26
+ export { o as ReactiveEngine, t as toAngularSignal };
27
+
28
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/angular/index.ts"],"sourcesContent":["export { toAngularSignal } from './core.angular-adapter'\n\nimport { signal, inject, DestroyRef, Injector, runInInjectionContext, type Signal } from '@angular/core'\nimport { ReactiveEngineAutomatic } from '../core'\nimport { type CleanupFn } from '../core/types'\n\nexport interface AngularUseOptions {\n /**\n * Кастомный инжектор Angular.\n * Позволяет использовать .use() вне конструктора (например, в асинхронных функциях),\n * если передать текущий Injector вручную.\n */\n injector?: Injector\n}\n\nexport class ReactiveEngine extends ReactiveEngineAutomatic {\n protected override frameworkPrefix = 'angular'\n\n /**\n * Использование реактивного значения (Signal, Computed, Resource или Reactive Proxy) в Angular.\n * Возвращает стандартный неизменяемый Angular Signal.\n */\n public use<T>(\n item: any,\n options?: AngularUseOptions\n ): Signal<any> {\n if (item === null || item === undefined) {\n return signal(item).asReadonly()\n }\n\n const isSignalOrComputed = 'subscribe' in item && typeof item.subscribe === 'function'\n \n const getFreshValue = () => {\n if (isSignalOrComputed) return item.value\n return item\n }\n\n const angularSignal = signal<any>(getFreshValue())\n let isPendingUpdate = false\n\n const triggerUpdate = () => {\n if (isPendingUpdate) return\n isPendingUpdate = true\n \n angularSignal.set(getFreshValue())\n \n // Синхронно разжимаем защёлку, позволяя Angular подхватывать\n // асинхронные хвостовые вызовы (trailing edge) декораторов ядра\n isPendingUpdate = false\n }\n\n let unsubscribe: CleanupFn | null = null\n\n if (isSignalOrComputed) {\n unsubscribe = item.subscribe(triggerUpdate)\n } else if ('__subscribe' in item && typeof item.__subscribe === 'function') {\n unsubscribe = item.__subscribe(triggerUpdate)\n }\n\n if (unsubscribe) {\n const activeUnsub = unsubscribe\n const registerCleanup = () => {\n try {\n const destroyRef = inject(DestroyRef)\n destroyRef.onDestroy(() => {\n activeUnsub()\n })\n } catch (e) {}\n }\n\n if (options?.injector) {\n runInInjectionContext(options.injector, registerCleanup)\n } else {\n registerCleanup()\n }\n }\n\n return angularSignal.asReadonly()\n }\n}\n"],"mappings":";;;;AAeA,IAAa,IAAb,cAAoC,EAAwB;CAC1D,kBAAqC;CAMrC,IACE,GACA,GACa;EACb,IAAI,KAAS,MACX,OAAO,EAAO,CAAI,CAAC,CAAC,WAAW;EAGjC,IAAM,IAAqB,eAAe,KAAQ,OAAO,EAAK,aAAc,YAEtE,UACA,IAA2B,EAAK,QAC7B,GAGH,IAAgB,EAAY,EAAc,CAAC,GAC7C,IAAkB,IAEhB,UAAsB;GACtB,AAOJ,OANA,IAAkB,IAElB,EAAc,IAAI,EAAc,CAAC,GAIf;EACpB,GAEI,IAAgC;EAQpC,IANI,IACF,IAAc,EAAK,UAAU,CAAa,IACjC,iBAAiB,KAAQ,OAAO,EAAK,eAAgB,eAC9D,IAAc,EAAK,YAAY,CAAa,IAG1C,GAAa;GACf,IAAM,IAAc,GACd,UAAwB;IAC5B,IAAI;KAEF,EAD0B,CAC1B,CAAA,CAAW,gBAAgB;MACzB,EAAY;KACd,CAAC;IACH,QAAY,CAAC;GACf;GAEA,AAAI,GAAS,WACX,EAAsB,EAAQ,UAAU,CAAe,IAEvD,EAAgB;EAEpB;EAEA,OAAO,EAAc,WAAW;CAClC;AACF"}
@@ -1,7 +1,7 @@
1
- import { ReactiveEngine } from './core';
1
+ import { ReactiveEngineAutomatic } from './core.automatic';
2
2
  export declare abstract class AbstractService {
3
- protected engine: ReactiveEngine;
4
- constructor(engine: ReactiveEngine);
3
+ protected engine: ReactiveEngineAutomatic;
4
+ constructor(engine: ReactiveEngineAutomatic);
5
5
  protected createNumericSignal(val: number, name: string): import('./types').Signal<number>;
6
6
  protected createComputed<T>(fn: () => T): import('./types').Computed<T>;
7
7
  protected createSignal<T>(val: T, name?: string): import('./types').Signal<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractService.d.ts","sourceRoot":"","sources":["../../src/core/AbstractService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAEvC,8BAAsB,eAAe;IACvB,SAAS,CAAC,MAAM,EAAE,cAAc;gBAAtB,MAAM,EAAE,cAAc;IAM5C,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOvD,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;IAIvC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM;IAM/C,SAAS,CAAC,MAAM,IAAI,IAAI;CACzB;AAED,eAAO,MAAM,aAAa,wBAAkB,CAAA"}
1
+ {"version":3,"file":"AbstractService.d.ts","sourceRoot":"","sources":["../../src/core/AbstractService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,8BAAsB,eAAe;IACvB,SAAS,CAAC,MAAM,EAAE,uBAAuB;gBAA/B,MAAM,EAAE,uBAAuB;IAMrD,SAAS,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOvD,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC;IAIvC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM;IAM/C,SAAS,CAAC,MAAM,IAAI,IAAI;CACzB;AAED,eAAO,MAAM,aAAa,wBAAkB,CAAA"}
@@ -1,7 +1,7 @@
1
- import { ReactiveEngine } from './core';
1
+ import { ReactiveEngineAutomatic } from './core.automatic';
2
2
  export declare abstract class BaseREServiceEnhanced {
3
- protected engine: ReactiveEngine;
4
- constructor(engine: ReactiveEngine);
3
+ protected engine: ReactiveEngineAutomatic;
4
+ constructor(engine: ReactiveEngineAutomatic);
5
5
  protected onInit(): void;
6
6
  }
7
7
  //# sourceMappingURL=BaseREServiceEnhanced.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseREServiceEnhanced.d.ts","sourceRoot":"","sources":["../../src/core/BaseREServiceEnhanced.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAEvC,8BAAsB,qBAAqB;IAC7B,SAAS,CAAC,MAAM,EAAE,cAAc;gBAAtB,MAAM,EAAE,cAAc;IAI5C,SAAS,CAAC,MAAM,IAAI,IAAI;CACzB"}
1
+ {"version":3,"file":"BaseREServiceEnhanced.d.ts","sourceRoot":"","sources":["../../src/core/BaseREServiceEnhanced.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAE1D,8BAAsB,qBAAqB;IAC7B,SAAS,CAAC,MAAM,EAAE,uBAAuB;gBAA/B,MAAM,EAAE,uBAAuB;IAIrD,SAAS,CAAC,MAAM,IAAI,IAAI;CACzB"}
@@ -0,0 +1,13 @@
1
+ declare const resetDataOnSourceChange: any;
2
+ declare const responseValidate: any;
3
+ declare const validateBeforeFetch: any;
4
+ declare const retryCount = 1;
5
+ declare const baseDelay = 1000;
6
+ declare const useExponential = true;
7
+ declare const maxRetryDelay: number;
8
+ declare const timeoutMs = 1000;
9
+ declare const state: any;
10
+ declare const updateResourceState: (nextState: ResourceState<T>) => void;
11
+ declare const load: (sValue: S, effectSignal: AbortSignal, isSourceChange?: boolean) => Promise<void>;
12
+ declare let activeEffectController: AbortController | null;
13
+ //# sourceMappingURL=_draft.core.methods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_draft.core.methods.d.ts","sourceRoot":"","sources":["../../src/core/_draft.core.methods.ts"],"names":[],"mappings":"AA+MI,QAAA,MAAM,uBAAuB,KAA0C,CAAA;AACvE,QAAA,MAAM,gBAAgB,KAA2B,CAAA;AACjD,QAAA,MAAM,mBAAmB,KAA8B,CAAA;AAEvD,QAAA,MAAM,UAAU,IAAI,CAAA;AACpB,QAAA,MAAM,SAAS,OAAO,CAAA;AACtB,QAAA,MAAM,cAAc,OAAO,CAAA;AAC3B,QAAA,MAAM,aAAa,QAAgB,CAAA;AACnC,QAAA,MAAM,SAAS,OAAO,CAAA;AAGtB,QAAA,MAAM,KAAK,KAGV,CAAA;AAGD,QAAA,MAAM,mBAAmB,GAAI,WAAW,aAAa,CAAC,CAAC,CAAC,SAGvD,CAAA;AAED,QAAA,MAAM,IAAI,GAAU,QAAQ,CAAC,EAAE,cAAc,WAAW,EAAE,wBAAsB,kBA+H/E,CAAA;AAED,QAAA,IAAI,sBAAsB,EAAE,eAAe,GAAG,IAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.advanced.reactive-framework-test-suite.p2.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.advanced.reactive-framework-test-suite.p2.test.d.ts","sourceRoot":"","sources":["../../src/core/core.advanced.reactive-framework-test-suite.p2.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.advanced.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.advanced.test.d.ts","sourceRoot":"","sources":["../../src/core/core.advanced.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { ReactiveEngineAutomatic } from './core.automatic';
2
+ import { Computed } from './types';
3
+ /**
4
+ * 📊 REACTIVE ENGINE AUTOLOG (core.autolog)
5
+ * Расширяет автоматический шедулер. Добавляет Enterprise-логирование,
6
+ * замер производительности и Pull Duration каскадов графа.
7
+ */
8
+ export declare class ReactiveEngineAutolog extends ReactiveEngineAutomatic {
9
+ autoLogQueue: Array<any>;
10
+ isHardFlushScheduled: boolean;
11
+ queueLog(type: string, name: string, meta?: any): void;
12
+ flushLogs(): void;
13
+ computed<T>(fn: () => T, signalName?: string): Computed<T>;
14
+ }
15
+ //# sourceMappingURL=core.autolog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.autolog.d.ts","sourceRoot":"","sources":["../../src/core/core.autolog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,uBAAuB;IACzD,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAK;IAC7B,oBAAoB,UAAQ;IAE5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAQtD,SAAS,IAAI,IAAI;IAWR,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;CAiC3E"}
@@ -0,0 +1,23 @@
1
+ import { ReactiveEngineCore } from './core';
2
+ /**
3
+ * ⚛️ AUTOMATIC ASYNCULAR REACTION ENGINE (v2.6.0)
4
+ *
5
+ * Нативно склеивает множественные мутации в рамках ОДНОГО тика Event Loop.
6
+ * Полностью закрывает капканы untrack/batch изоляции внешних тестов #218 и #219.
7
+ */
8
+ export declare class ReactiveEngineAutomatic extends ReactiveEngineCore {
9
+ private microtaskScheduled;
10
+ /**
11
+ * Канонический метод схождения автоматического движка.
12
+ * Восстанавливает флаг-замок строго по окончании выгрузки очереди.
13
+ */
14
+ flushEffects(): void;
15
+ /**
16
+ * ПЕРЕХВАТЧИК МУТАЦИЙ И ТРАНЗАКЦИЙ АВТОМАТИЧЕСКОГО ЯДРА
17
+ *
18
+ * Переопределяет базовое пакетное выполнение. Синхронно флушит очередь
19
+ * на выходе из батча, полностью убирая рассинхронизацию микрозадач в untrack контекстах!
20
+ */
21
+ batch<R>(fn: () => R): R;
22
+ }
23
+ //# sourceMappingURL=core.automatic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.automatic.d.ts","sourceRoot":"","sources":["../../src/core/core.automatic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAE3C;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,kBAAkB;IAC7D,OAAO,CAAC,kBAAkB,CAAQ;IAElC;;;OAGG;IACa,YAAY,IAAI,IAAI;IAUpC;;;;;OAKG;IACa,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;CAsBzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.automatic.test.d.ts.map