@pravosleva/reactive-engine 1.8.3-beta → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) 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/utils/getExtractedValues.cjs +2 -0
  145. package/dist/utils/getExtractedValues.cjs.map +1 -0
  146. package/dist/utils/getExtractedValues.mjs +24 -0
  147. package/dist/utils/getExtractedValues.mjs.map +1 -0
  148. package/dist/vue/core.vue-adapter.cjs +2 -0
  149. package/dist/vue/core.vue-adapter.cjs.map +1 -0
  150. package/dist/vue/core.vue-adapter.d.ts +8 -0
  151. package/dist/vue/core.vue-adapter.d.ts.map +1 -0
  152. package/dist/vue/core.vue-adapter.mjs +22 -0
  153. package/dist/vue/core.vue-adapter.mjs.map +1 -0
  154. package/dist/vue/core.vue-adapter.test.d.ts +2 -0
  155. package/dist/vue/core.vue-adapter.test.d.ts.map +1 -0
  156. package/dist/vue/index.cjs +2 -1
  157. package/dist/vue/index.cjs.map +1 -0
  158. package/dist/vue/index.d.ts +14 -2
  159. package/dist/vue/index.d.ts.map +1 -1
  160. package/dist/vue/index.mjs +54 -3
  161. package/dist/vue/index.mjs.map +1 -0
  162. package/package.json +4 -3
  163. package/dist/angular/ReactiveEngine4Angular.cjs +0 -2
  164. package/dist/angular/ReactiveEngine4Angular.cjs.map +0 -1
  165. package/dist/angular/ReactiveEngine4Angular.d.ts +0 -37
  166. package/dist/angular/ReactiveEngine4Angular.d.ts.map +0 -1
  167. package/dist/angular/ReactiveEngine4Angular.mjs +0 -45
  168. package/dist/angular/ReactiveEngine4Angular.mjs.map +0 -1
  169. package/dist/angular/core.angular.auto.test.d.ts +0 -2
  170. package/dist/angular/core.angular.auto.test.d.ts.map +0 -1
  171. package/dist/angular/core.angular.test.d.ts +0 -2
  172. package/dist/angular/core.angular.test.d.ts.map +0 -1
  173. package/dist/core/core.auto.test.d.ts +0 -2
  174. package/dist/core/core.auto.test.d.ts.map +0 -1
  175. package/dist/react/ReactiveEngine4React.cjs +0 -2
  176. package/dist/react/ReactiveEngine4React.cjs.map +0 -1
  177. package/dist/react/ReactiveEngine4React.d.ts +0 -34
  178. package/dist/react/ReactiveEngine4React.d.ts.map +0 -1
  179. package/dist/react/ReactiveEngine4React.mjs +0 -51
  180. package/dist/react/ReactiveEngine4React.mjs.map +0 -1
  181. package/dist/react/core.react.auto.test.d.ts +0 -2
  182. package/dist/react/core.react.auto.test.d.ts.map +0 -1
  183. package/dist/react/core.react.test.d.ts +0 -2
  184. package/dist/react/core.react.test.d.ts.map +0 -1
  185. package/dist/react/hooks/FilteredCatalog.auto.test.d.ts +0 -2
  186. package/dist/react/hooks/FilteredCatalog.auto.test.d.ts.map +0 -1
  187. package/dist/react/hooks/FilteredCatalog.test.d.ts +0 -2
  188. package/dist/react/hooks/FilteredCatalog.test.d.ts.map +0 -1
  189. package/dist/react/hooks/index.cjs +0 -1
  190. package/dist/react/hooks/index.d.ts +0 -4
  191. package/dist/react/hooks/index.d.ts.map +0 -1
  192. package/dist/react/hooks/index.mjs +0 -7
  193. package/dist/react/hooks/types.d.ts +0 -20
  194. package/dist/react/hooks/types.d.ts.map +0 -1
  195. package/dist/react/hooks/useReactiveSubscription/index.cjs +0 -1
  196. package/dist/react/hooks/useReactiveSubscription/index.d.ts +0 -2
  197. package/dist/react/hooks/useReactiveSubscription/index.d.ts.map +0 -1
  198. package/dist/react/hooks/useReactiveSubscription/index.mjs +0 -2
  199. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts +0 -2
  200. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.auto.test.d.ts.map +0 -1
  201. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs +0 -2
  202. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs.map +0 -1
  203. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts +0 -7
  204. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts.map +0 -1
  205. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs +0 -27
  206. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs.map +0 -1
  207. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts +0 -2
  208. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts.map +0 -1
  209. package/dist/react/hooks/useReactiveValue/index.cjs +0 -1
  210. package/dist/react/hooks/useReactiveValue/index.d.ts +0 -2
  211. package/dist/react/hooks/useReactiveValue/index.d.ts.map +0 -1
  212. package/dist/react/hooks/useReactiveValue/index.mjs +0 -2
  213. package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts +0 -2
  214. package/dist/react/hooks/useReactiveValue/useReactiveValue.auto.test.d.ts.map +0 -1
  215. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs +0 -2
  216. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs.map +0 -1
  217. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts +0 -18
  218. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts.map +0 -1
  219. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs +0 -25
  220. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs.map +0 -1
  221. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts +0 -2
  222. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts.map +0 -1
  223. package/dist/react/hooks/useReactiveValue0/index.cjs +0 -1
  224. package/dist/react/hooks/useReactiveValue0/index.d.ts +0 -2
  225. package/dist/react/hooks/useReactiveValue0/index.d.ts.map +0 -1
  226. package/dist/react/hooks/useReactiveValue0/index.mjs +0 -2
  227. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs +0 -2
  228. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs.map +0 -1
  229. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts +0 -51
  230. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts.map +0 -1
  231. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs +0 -23
  232. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs.map +0 -1
  233. package/dist/vue/ReactiveEngine4Vue.cjs +0 -2
  234. package/dist/vue/ReactiveEngine4Vue.cjs.map +0 -1
  235. package/dist/vue/ReactiveEngine4Vue.d.ts +0 -37
  236. package/dist/vue/ReactiveEngine4Vue.d.ts.map +0 -1
  237. package/dist/vue/ReactiveEngine4Vue.mjs +0 -53
  238. package/dist/vue/ReactiveEngine4Vue.mjs.map +0 -1
  239. package/dist/vue/composables/index.d.ts +0 -2
  240. package/dist/vue/composables/index.d.ts.map +0 -1
  241. package/dist/vue/composables/useReactiveValue.auto.test.d.ts +0 -2
  242. package/dist/vue/composables/useReactiveValue.auto.test.d.ts.map +0 -1
  243. package/dist/vue/composables/useReactiveValue.cjs +0 -2
  244. package/dist/vue/composables/useReactiveValue.cjs.map +0 -1
  245. package/dist/vue/composables/useReactiveValue.d.ts +0 -12
  246. package/dist/vue/composables/useReactiveValue.d.ts.map +0 -1
  247. package/dist/vue/composables/useReactiveValue.mjs +0 -19
  248. package/dist/vue/composables/useReactiveValue.mjs.map +0 -1
  249. package/dist/vue/composables/useReactiveValue.test.d.ts +0 -2
  250. package/dist/vue/composables/useReactiveValue.test.d.ts.map +0 -1
  251. package/dist/vue/core.vue.auto.test.d.ts +0 -2
  252. package/dist/vue/core.vue.auto.test.d.ts.map +0 -1
  253. package/dist/vue/core.vue.test.d.ts +0 -2
  254. package/dist/vue/core.vue.test.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.automatic.test.d.ts","sourceRoot":"","sources":["../../src/core/core.automatic.test.ts"],"names":[],"mappings":""}
@@ -1,170 +1,50 @@
1
- import { ResourceOptions, SignalOptions, Signal, Computed, IEffect, Token, Factory, EngineLoggerOptions, LogDetailMap } from './types';
2
- /**
3
- * ⚡ 1. LIGHTWEIGHT CORE ENGINE (МЕНЬШЕ 1 КБ)
4
- * Чистый синхронный Push/Pull граф реактивности. Без логов, Proxy и DI.
5
- * Идеален для матрицы тестов johnsoncodehk на 100% Passed.
6
- */
1
+ import { Signal, Computed, EngineLoggerOptions, LogEventType, CleanupFn, SignalOptions, ResourceOptions, Resource } from './types';
2
+ type Constructor<T> = new (...args: any[]) => T;
3
+ type Factory<T> = (engine: any) => T;
4
+ type InjectionToken<T> = Constructor<T> | Factory<T> | symbol | string;
5
+ export declare function queueLog(type: LogEventType, label: string, details?: {
6
+ from?: unknown;
7
+ to?: unknown;
8
+ payload?: unknown;
9
+ }): void;
10
+ export declare function flushLogs(): void;
7
11
  export declare class ReactiveEngineCore {
8
12
  protected frameworkPrefix: string;
9
- protected activeConsumer: {
10
- id: number;
11
- cleanups: Set<() => void>;
12
- markDirty: () => void;
13
- } | null;
14
- protected subscriberId: number;
15
- protected batchDepth: number;
16
- protected pendingEffects: Set<IEffect>;
17
- protected allEffects: Set<IEffect>;
13
+ private logger;
14
+ epoch: number;
15
+ activeConsumer: any;
16
+ batchDepth: number;
17
+ subscriberId: number;
18
+ pendingEffects: Set<any>;
18
19
  computedCache: Map<Function, WeakRef<Computed<unknown>>>;
19
- /**
20
- * СИНХРОННО-ЛЕНИВОЕ ВЫЧИСЛЯЕМОЕ СВОЙСТВО (ЧЕСТНЫЙ ГИБРИДНЫЙ PUSH/PULL)
21
- */
22
- computed<T>(fn: () => T, signalName?: string): Computed<T>;
23
- /**
24
- * СИНХРОННЫЙ ПЛАНИРОВЩИК ЭФФЕКТОВ (EFFECT)
25
- *
26
- * @param {() => void | (() => void)} fn - Функция эффекта. Может возвращать деструктор (cleanup).
27
- * @param {string} [label] - Необязательная метка для отладки и трассировки.
28
- * @returns {() => void} - Функция принудительной отписки (dispose), уничтожающая связи эффекта.
29
- */
30
- effect(fn: () => void | (() => void), label?: string): () => void;
31
- /**
32
- * СИНХРОННЫЙ АТОМАРНЫЙ СИГНАЛ (БЕЗРЕКУРСИОННЫЙ С МАРКЕРОМ ИСТОЧНИКА)
33
- */
34
- signal<T>(initialValue: T, optionsOrName?: string | SignalOptions<T>): Signal<T>;
35
- /**
36
- * МЕНЕДЖЕР СИНХРОННЫХ ТРАНЗАКЦИЙ (BATCH)
37
- */
38
- batch(fn: () => void): void;
39
- /**
40
- * ВНУТРЕННИЙ СИНХРОННЫЙ ПРОГОН ОЧЕРЕДИ ЭФФЕКТОВ (ОТКАЗОУСТОЙЧИВЫЙ)
41
- */
42
- protected flushEffects(): void;
43
- /**
44
- * ВЫПОЛНЕНИЕ ФУНКЦИИ БЕЗ ТРЕКИНГА ЗАВИСИМОСТЕЙ
45
- */
46
- untrack<T>(fn: () => T): T;
47
- }
48
- /**
49
- * 🏢 ENTERPRISE REACTIVE ENGINE (ПОЛНАЯ ВЕРСИЯ)
50
- *
51
- * Наследует и расширяет легкое ядро ReactiveEngineCore.
52
- * Включает: Глубокий reactive(), асинхронные ресурсы (resource), DI-контейнер и систему логирования.
53
- */
54
- export declare class ReactiveEngine extends ReactiveEngineCore {
55
- private services;
56
- private factories;
20
+ private diRegistry;
21
+ private diCache;
57
22
  private proxyCache;
58
- private loggerOptions?;
59
- private pendingLogQueue;
60
- private signalMutationCounts;
61
- private lastComputedDurations;
62
- private effectExecutionCounts;
63
- private batchTickCounts;
64
- private lastTransactionDuration;
23
+ private proxyTargets;
24
+ private reactiveSignals;
25
+ private cycleDetectionStack;
65
26
  constructor(options?: {
66
27
  logger?: EngineLoggerOptions;
67
28
  });
68
- /**
69
- * ГЛУБОКИЙ РЕАКТИВНЫЙ PROXY-ОБЪЕКТ (СИНХРОННЫЙ PUSH/PULL С МИКРОБАЧИНГОМ ДЛЯ ФРЕЙМВОРКОВ)
70
- */
71
- reactive<T extends object>(target: T, name?: string): T;
72
- /**
73
- * DI-КОНТЕЙНЕР: РЕГИСТРАЦИЯ ЗАВИСИМОСТИ
74
- */
75
- provide<T>(token: Token<T>, valueOrFactory: T | Factory<T>): void;
76
- /**
77
- * DI-КОНТЕЙНЕР: ИНЪЕКЦИЯ (ПОЛУЧЕНИЕ СЕРВИСА ПО ТОКЕНУ)
78
- */
79
- inject<T>(token: Token<T>): T;
80
- queueLog(type: string, name: string, detail: any): void;
81
- flushLogs(): void;
82
- /**
83
- * АСИНХРОННЫЙ РЕСУРС (ПУЛЕНЕПРОБИВАЕМЫЙ СИНХРОННЫЙ PUSH/PULL)
84
- */
85
- resource<T, S = void>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, source?: {
86
- value: S;
87
- }, optionsOrName?: string | ResourceOptions<T, S>): any;
88
- }
89
- /**
90
- * 🤖 AUTOMATIC BATCHING ENTERPRISE REACTIVE ENGINE (v1.8.2-beta)
91
- *
92
- * Полностью автономный асингулярный движок с топологической сортировкой графа,
93
- * каскадным уничтожением вложенных эффектов и циклом схождения inner-записей.
94
- */
95
- export declare class ReactiveEngineAutomatic extends ReactiveEngine {
96
- private isFlushScheduled;
97
- protected nodeDepths: WeakMap<any, number>;
98
- constructor(options?: {
99
- logger?: EngineLoggerOptions;
100
- });
101
- /**
102
- * СИНХРОННО-ЛЕНИВОЕ ВЫЧИСЛЯЕМОЕ СВОЙСТВО С АКТИВНОЙ ВАЛИДАЦИЕЙ РОДИТЕЛЕЙ
103
- * Перехватывает pull-запросы внутри транзакций и синхронно проверяет апстрим-узлы,
104
- * предотвращая холостые пересчеты (Кейсы #128, #132).
105
- */
29
+ queueLog(type: LogEventType, label: string, details?: {
30
+ from?: unknown;
31
+ to?: unknown;
32
+ payload?: unknown;
33
+ }): void;
34
+ flushEffects(): void;
35
+ batch<T>(fn: () => T): T;
36
+ private log;
37
+ signal<T>(initialValue: T, optionsOrName?: string | SignalOptions<T>): Signal<T>;
106
38
  computed<T>(fn: () => T, signalName?: string): Computed<T>;
107
- /**
108
- * ВЫЧИСЛЕНИЕ ГЛУБИНЫ УЗЛА ДЛЯ ТОПОЛОГИЧЕСКОЙ СОРТИРОВКИ
109
- */
110
- protected getNodeDepth(node: any): number;
111
- /**
112
- * ПЕРЕОПРЕДЕЛЕНИЕ ПЛАНИРОВЩИКА ЭФФЕКТОВ (ИЕРАРХИЯ + ТОПОЛОГИЯ)
113
- */
114
- effect(fn: () => void | (() => void), label?: string): () => void;
115
- /**
116
- * АСИНХРОННЫЙ ЦИКЛ СХОЖДЕНИЯ ГРАФА (CONVERGENCE LOOP)
117
- * Прогоняет эффекты строго по топологической глубине и обрабатывает Inner Writes на месте.
118
- */
119
- protected flushEffects(): void;
120
- }
121
- interface ReactiveEngineOptions {
122
- logger?: EngineLoggerOptions;
123
- }
124
- /**
125
- * 📊 AUTOMATIC BATCHING HARD-LOGGING REACTIVE ENGINE
126
- *
127
- * Премиальное Enterprise-расширение автоматического ядра, сочетающее аппаратный асинхронный
128
- * автобатчинг микрозадач (queueMicrotask) и тотальный рантайм-мониторинг всей стейт-машины.
129
- */
130
- export declare class ReactiveEngineAutomaticHard extends ReactiveEngineAutomatic {
131
- private autoLogQueue;
132
- private isHardFlushScheduled;
133
- constructor(options?: ReactiveEngineOptions);
134
- /**
135
- * ПЕРЕХВАТ И ПЕРЕНАПРАВЛЕНИЕ ЛОГОВ В ЛОКАЛЬНЫЙ АСИНХРОННЫЙ БУФЕР
136
- */
137
- queueLog<K extends keyof LogDetailMap>(type: K, name: string, detail: LogDetailMap[K]): void;
138
- /**
139
- * АВТОНОМНЫЙ МЕТОД ФОРМАТИРОВАНИЯ И ВЫВОДА ENTERPRISE-ЛОГОВ В КОНСОЛЬ
140
- */
141
- flushLogs(): void;
142
- /**
143
- * АТОМАРНЫЙ АСИНХРОННЫЙ СБРОС ЛОГОВ СОВМЕСТНО С ЭФФЕКТАМИ
144
- */
145
- protected flushEffects(): void;
146
- /**
147
- * ПЕРЕОПРЕДЕЛЕНИЕ ПЛАНИРОВЩИКА ЭФФЕКТОВ (С ПОЛНЫМ ЛОГИРОВАНИЕМ ДЛИТЕЛЬНОСТИ И ВЫЗОВОВ)
148
- */
149
- effect(fn: () => void | (() => void), label?: string): () => void;
150
- /**
151
- * АСИНХРОННЫЙ РЕСУРС (ИНТЕГРИРОВАННЫЙ В HARD-ЛОГГЕР)
152
- */
39
+ effect(fn: () => void | CleanupFn, effectName?: string): () => void;
40
+ untrack<T>(fn: () => T): T;
41
+ reactive<T extends object>(target: T, name?: string): T;
42
+ provide<T>(token: InjectionToken<T>, valueOrFactory: T | Factory<T>): void;
43
+ inject<T>(token: InjectionToken<T>): T;
44
+ private delay;
153
45
  resource<T, S = void>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, source?: {
154
46
  value: S;
155
- }, optionsOrName?: string | ResourceOptions<T, S>): any;
156
- /**
157
- * ПЕРЕОПРЕДЕЛЕНИЕ РЕАКТИВНОГО PROXY ДЛЯ ХАРД-ЛОГГЕРА
158
- */
159
- reactive<T extends object>(target: T, name?: string): T;
160
- /**
161
- * СИНХРОННЫЙ АТОМАРНЫЙ СИГНАЛ (ИНТЕГРИРОВАННЫЙ В HARD-ЛОГГЕР)
162
- */
163
- signal<T>(initialValue: T, optionsOrName?: string | SignalOptions<T>): Signal<T>;
164
- /**
165
- * СИНХРОННО-ЛЕНИВОЕ ВЫЧИСЛЯЕМОЕ СВОЙСТВО (С ЗАМЕРОМ ТАЙМИНГОВ PULL И БЕЗ ANY)
166
- */
167
- computed<T>(fn: () => T, signalName?: string): Computed<T>;
47
+ }, optionsOrName?: string | ResourceOptions<T, S>): Resource<T>;
168
48
  }
169
- export {};
49
+ export { ReactiveEngineCore as ReactiveEngine, ReactiveEngineCore as ReactiveEngineAutomatic };
170
50
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Изолированный менеджер атомарных транзакций (batch) реактивного графа.
3
+ * Гарантирует объединение множественных мутаций и выполнение эффектов строго один раз на выходе.
4
+ */
5
+ export declare function executeBatch<T>(engine: any, fn: () => T): T;
6
+ //# sourceMappingURL=core.method.batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.method.batch.d.ts","sourceRoot":"","sources":["../../src/core/core.method.batch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAU3D"}
@@ -0,0 +1,7 @@
1
+ import { Computed } from './types';
2
+ /**
3
+ * Изолированная фабрика computed-узлов реактивного графа.
4
+ * Гарантирует O(1) кэширование, ленивые вычисления и стабильный каскадный Garbage Collection.
5
+ */
6
+ export declare function createComputed<T>(engine: any, fn: () => T, signalName?: string): Computed<T>;
7
+ //# sourceMappingURL=core.method.computed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.method.computed.d.ts","sourceRoot":"","sources":["../../src/core/core.method.computed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,SAAS,CAAA;AAE7C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,GAAG,EACX,EAAE,EAAE,MAAM,CAAC,EACX,UAAU,CAAC,EAAE,MAAM,GAClB,QAAQ,CAAC,CAAC,CAAC,CAoNb"}
@@ -0,0 +1,7 @@
1
+ import { CleanupFn } from './types';
2
+ /**
3
+ * Изолированная фабрика сайд-эффектов реактивного графа.
4
+ * Полностью отвязана от лексического контекста класса для абсолютной чистоты V8.
5
+ */
6
+ export declare function createEffect(engine: any, fn: () => void | CleanupFn, effectName?: string): () => void;
7
+ //# sourceMappingURL=core.method.effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.method.effect.d.ts","sourceRoot":"","sources":["../../src/core/core.method.effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEnC;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,EACX,EAAE,EAAE,MAAM,IAAI,GAAG,SAAS,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,IAAI,CA4CZ"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Изолированная фабрика глубоких реактивных Proxy-объектов графа.
3
+ * Полностью отвязана от лексического контекста класса для абсолютной чистоты V8.
4
+ */
5
+ export declare function createReactive<T extends object>(engine: any, target: T, name?: string): T;
6
+ //# sourceMappingURL=core.method.reactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.method.reactive.d.ts","sourceRoot":"","sources":["../../src/core/core.method.reactive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,CAAC,EACT,IAAI,CAAC,EAAE,MAAM,GACZ,CAAC,CAsDH"}
@@ -0,0 +1,7 @@
1
+ import { Signal, SignalOptions } from './types';
2
+ /**
3
+ * Изолированная фабрика сигналов реактивного графа.
4
+ * Полностью отвязана от лексического контекста класса для абсолютной чистоты V8.
5
+ */
6
+ export declare function createSignal<T>(engine: any, initialValue: T, optionsOrName?: string | SignalOptions<T>): Signal<T>;
7
+ //# sourceMappingURL=core.method.signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.method.signal.d.ts","sourceRoot":"","sources":["../../src/core/core.method.signal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAa,aAAa,EAAE,MAAM,SAAS,CAAA;AAE1D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,GAAG,EACX,YAAY,EAAE,CAAC,EACf,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GACxC,MAAM,CAAC,CAAC,CAAC,CA6FX"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Изолированный менеджер контекста untrack реактивного графа.
3
+ * Временно замораживает автоматический сбор зависимостей, подменяя activeConsumer на null.
4
+ */
5
+ export declare function executeUntrack<T>(engine: any, fn: () => T): T;
6
+ //# sourceMappingURL=core.method.untrack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.method.untrack.d.ts","sourceRoot":"","sources":["../../src/core/core.method.untrack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQ7D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.propagation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.propagation.test.d.ts","sourceRoot":"","sources":["../../src/core/core.propagation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=core.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.test.d.ts","sourceRoot":"","sources":["../../src/core/core.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,8 @@
1
+ export { ReactiveEngineAutomatic as ReactiveEngine } from './core.automatic';
2
+ export { ReactiveEngineCore } from './core';
3
+ export { ReactiveEngineAutolog } from './core.autolog';
1
4
  export * from './core';
2
- export { ReactiveEngine } from './core';
5
+ export * from './core.autolog';
3
6
  export * from './types';
4
7
  export * from './AbstractService';
5
8
  export * from './BaseREServiceEnhanced';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AACvC,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAG5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA"}
@@ -1,10 +1,24 @@
1
- import { ReactiveEngine } from './core';
1
+ import { ReactiveEngineCore } from './core';
2
+ export type LogEventType = 'signal' | 'computed' | 'effect' | 'batch' | 'resource' | 'reactive';
3
+ export interface LogRecord {
4
+ type: LogEventType;
5
+ label: string;
6
+ from?: unknown;
7
+ to?: unknown;
8
+ payload?: unknown;
9
+ timestamp: number;
10
+ }
11
+ export interface TransactionContext {
12
+ id: string;
13
+ pendingLogQueue: LogRecord[];
14
+ isFlushing: boolean;
15
+ }
2
16
  export type CleanupFn = () => void;
3
17
  export type EffectFn = () => CleanupFn | void;
4
18
  export type Token<T> = string | symbol | {
5
- new (engine: ReactiveEngine, ...args: any[]): T;
19
+ new (engine: ReactiveEngineCore, ...args: any[]): T;
6
20
  };
7
- export type Factory<T> = (engine: ReactiveEngine) => T;
21
+ export type Factory<T> = (engine: ReactiveEngineCore) => T;
8
22
  /**
9
23
  * Интерфейс атомарного Сигнала графа.
10
24
  */
@@ -19,6 +33,10 @@ export interface Computed<T> {
19
33
  readonly value: T;
20
34
  subscribe: (cb: (val: T) => void) => CleanupFn;
21
35
  destroy: () => void;
36
+ _isDirty?: () => boolean;
37
+ dependencies?: Set<any>;
38
+ run?: () => void;
39
+ type?: any;
22
40
  }
23
41
  /**
24
42
  * Интерфейс побочного Эффекта планировщика.
@@ -29,6 +47,11 @@ export interface IEffect {
29
47
  markDirty: () => void;
30
48
  cleanups: Set<CleanupFn>;
31
49
  label?: string;
50
+ isDirty?: boolean;
51
+ isDisposed?: boolean;
52
+ execute?: () => void;
53
+ fn?: () => void;
54
+ _node?: any;
32
55
  }
33
56
  /**
34
57
  * Опции конфигурации Сигналов.
@@ -43,7 +66,7 @@ export interface SignalOptions<T> {
43
66
  export interface ResourceState<T> {
44
67
  data: T | null;
45
68
  loading: boolean;
46
- error: Error | null;
69
+ error: string | null;
47
70
  isRetrying?: boolean;
48
71
  }
49
72
  /**
@@ -119,4 +142,8 @@ export interface LogDetailMap {
119
142
  resource: ResourceLogDetail;
120
143
  reactive: ReactiveDetail;
121
144
  }
145
+ export interface ISignalLike<V> {
146
+ value: V;
147
+ subscribe: (cb: (v: V) => void) => CleanupFn;
148
+ }
122
149
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./core.automatic.cjs");var t=class extends e.ReactiveEngineAutomatic{autoLogQueue=[];isHardFlushScheduled=!1;queueLog(e,t,n){this.autoLogQueue.push({type:e,name:t,meta:n,timestamp:Date.now()}),this.isHardFlushScheduled||(this.isHardFlushScheduled=!0,queueMicrotask(()=>this.flushLogs()))}flushLogs(){this.isHardFlushScheduled=!1,this.autoLogQueue.length!==0&&(typeof process<`u`&&process.env.NODE_ENV!==`test`&&(console.group(`📊 [Autolog] Срез транзакций: ${this.autoLogQueue.length} операций`),this.autoLogQueue.forEach(e=>console.log(`[${e.type.toUpperCase()}] ${e.name}`,e.meta||``)),console.groupEnd()),this.autoLogQueue=[])}computed(e,t){let n=this,r=t||`unnamed_computed`,i=super.computed(e,t),a=!1,o={get value(){if(a)return i.value;let e=typeof performance<`u`?performance.now():0,t=i.value;return e&&n.queueLog(`computed`,r,{value:t,duration:`${(performance.now()-e).toFixed(3)}ms`}),t},subscribe:e=>i.subscribe(e),destroy(){a=!0,i.destroy()}};return`_node`in i&&Object.defineProperty(o,"_node",{value:i._node,enumerable:!1}),o}};exports.ReactiveEngineAutolog=t;
2
+ //# sourceMappingURL=core.autolog.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.autolog.cjs","names":[],"sources":["../src/core/core.autolog.ts"],"sourcesContent":["import { ReactiveEngineAutomatic } from './core.automatic'\nimport { Computed } from './types'\n\n/**\n * 📊 REACTIVE ENGINE AUTOLOG (core.autolog)\n * Расширяет автоматический шедулер. Добавляет Enterprise-логирование,\n * замер производительности и Pull Duration каскадов графа.\n */\nexport class ReactiveEngineAutolog extends ReactiveEngineAutomatic {\n public autoLogQueue: Array<any> = []\n public isHardFlushScheduled = false\n\n public queueLog(type: string, name: string, meta?: any): void {\n this.autoLogQueue.push({ type, name, meta, timestamp: Date.now() })\n if (!this.isHardFlushScheduled) {\n this.isHardFlushScheduled = true\n queueMicrotask(() => this.flushLogs())\n }\n }\n\n public flushLogs(): void {\n this.isHardFlushScheduled = false\n if (this.autoLogQueue.length === 0) return\n if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'test') {\n console.group(`📊 [Autolog] Срез транзакций: ${this.autoLogQueue.length} операций`)\n this.autoLogQueue.forEach(log => console.log(`[${log.type.toUpperCase()}] ${log.name}`, log.meta || ''))\n console.groupEnd()\n }\n this.autoLogQueue = []\n }\n\n public override computed<T>(fn: () => T, signalName?: string): Computed<T> {\n const engine = this\n const name = signalName || 'unnamed_computed'\n const originalComputed = super.computed(fn, signalName)\n let isDestroyed = false\n\n const autologComputedInstance: Computed<T> = {\n get value(): T {\n if (isDestroyed) return originalComputed.value\n const startTime = typeof performance !== 'undefined' ? performance.now() : 0\n const val = originalComputed.value\n\n if (startTime) {\n engine.queueLog('computed', name, { value: val, duration: `${(performance.now() - startTime).toFixed(3)}ms` })\n }\n return val\n },\n subscribe: (cb) => originalComputed.subscribe(cb),\n destroy() {\n isDestroyed = true\n originalComputed.destroy()\n }\n }\n\n if ('_node' in originalComputed) {\n Object.defineProperty(autologComputedInstance, '_node', {\n value: (originalComputed as any)._node,\n enumerable: false\n })\n }\n\n return autologComputedInstance\n }\n}\n"],"mappings":"wCAQA,IAAa,EAAb,cAA2C,EAAA,uBAAwB,CACjE,aAAkC,CAAC,EACnC,qBAA8B,GAE9B,SAAgB,EAAc,EAAc,EAAkB,CAC5D,KAAK,aAAa,KAAK,CAAE,OAAM,OAAM,OAAM,UAAW,KAAK,IAAI,CAAE,CAAC,EAC7D,KAAK,uBACR,KAAK,qBAAuB,GAC5B,mBAAqB,KAAK,UAAU,CAAC,EAEzC,CAEA,WAAyB,CACvB,KAAK,qBAAuB,GACxB,KAAK,aAAa,SAAW,IAC7B,OAAO,QAAY,KAAA,QAAA,IAAA,WAAwC,SAC7D,QAAQ,MAAM,iCAAiC,KAAK,aAAa,OAAO,UAAU,EAClF,KAAK,aAAa,QAAQ,GAAO,QAAQ,IAAI,IAAI,EAAI,KAAK,YAAY,EAAE,IAAI,EAAI,OAAQ,EAAI,MAAQ,EAAE,CAAC,EACvG,QAAQ,SAAS,GAEnB,KAAK,aAAe,CAAC,EACvB,CAEA,SAA4B,EAAa,EAAkC,CACzE,IAAM,EAAS,KACT,EAAO,GAAc,mBACrB,EAAmB,MAAM,SAAS,EAAI,CAAU,EAClD,EAAc,GAEZ,EAAuC,CAC3C,IAAI,OAAW,CACb,GAAI,EAAa,OAAO,EAAiB,MACzC,IAAM,EAAY,OAAO,YAAgB,IAAc,YAAY,IAAI,EAAI,EACrE,EAAM,EAAiB,MAK7B,OAHI,GACF,EAAO,SAAS,WAAY,EAAM,CAAE,MAAO,EAAK,SAAU,IAAI,YAAY,IAAI,EAAI,EAAA,CAAW,QAAQ,CAAC,EAAE,GAAI,CAAC,EAExG,CACT,EACA,UAAY,GAAO,EAAiB,UAAU,CAAE,EAChD,SAAU,CACR,EAAc,GACd,EAAiB,QAAQ,CAC3B,CACF,EASA,MAPI,UAAW,GACb,OAAO,eAAe,EAAyB,QAAS,CACtD,MAAQ,EAAyB,MACjC,WAAY,EACd,CAAC,EAGI,CACT,CACF"}
@@ -0,0 +1,41 @@
1
+ import { ReactiveEngineAutomatic as e } from "./core.automatic.mjs";
2
+ //#region src/core/core.autolog.ts
3
+ var t = class extends e {
4
+ autoLogQueue = [];
5
+ isHardFlushScheduled = !1;
6
+ queueLog(e, t, n) {
7
+ this.autoLogQueue.push({
8
+ type: e,
9
+ name: t,
10
+ meta: n,
11
+ timestamp: Date.now()
12
+ }), this.isHardFlushScheduled || (this.isHardFlushScheduled = !0, queueMicrotask(() => this.flushLogs()));
13
+ }
14
+ flushLogs() {
15
+ this.isHardFlushScheduled = !1, this.autoLogQueue.length !== 0 && (typeof process < "u" && process.env.NODE_ENV !== "test" && (console.group(`📊 [Autolog] Срез транзакций: ${this.autoLogQueue.length} операций`), this.autoLogQueue.forEach((e) => console.log(`[${e.type.toUpperCase()}] ${e.name}`, e.meta || "")), console.groupEnd()), this.autoLogQueue = []);
16
+ }
17
+ computed(e, t) {
18
+ let n = this, r = t || "unnamed_computed", i = super.computed(e, t), a = !1, o = {
19
+ get value() {
20
+ if (a) return i.value;
21
+ let e = typeof performance < "u" ? performance.now() : 0, t = i.value;
22
+ return e && n.queueLog("computed", r, {
23
+ value: t,
24
+ duration: `${(performance.now() - e).toFixed(3)}ms`
25
+ }), t;
26
+ },
27
+ subscribe: (e) => i.subscribe(e),
28
+ destroy() {
29
+ a = !0, i.destroy();
30
+ }
31
+ };
32
+ return "_node" in i && Object.defineProperty(o, "_node", {
33
+ value: i._node,
34
+ enumerable: !1
35
+ }), o;
36
+ }
37
+ };
38
+ //#endregion
39
+ export { t as ReactiveEngineAutolog };
40
+
41
+ //# sourceMappingURL=core.autolog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.autolog.mjs","names":[],"sources":["../src/core/core.autolog.ts"],"sourcesContent":["import { ReactiveEngineAutomatic } from './core.automatic'\nimport { Computed } from './types'\n\n/**\n * 📊 REACTIVE ENGINE AUTOLOG (core.autolog)\n * Расширяет автоматический шедулер. Добавляет Enterprise-логирование,\n * замер производительности и Pull Duration каскадов графа.\n */\nexport class ReactiveEngineAutolog extends ReactiveEngineAutomatic {\n public autoLogQueue: Array<any> = []\n public isHardFlushScheduled = false\n\n public queueLog(type: string, name: string, meta?: any): void {\n this.autoLogQueue.push({ type, name, meta, timestamp: Date.now() })\n if (!this.isHardFlushScheduled) {\n this.isHardFlushScheduled = true\n queueMicrotask(() => this.flushLogs())\n }\n }\n\n public flushLogs(): void {\n this.isHardFlushScheduled = false\n if (this.autoLogQueue.length === 0) return\n if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'test') {\n console.group(`📊 [Autolog] Срез транзакций: ${this.autoLogQueue.length} операций`)\n this.autoLogQueue.forEach(log => console.log(`[${log.type.toUpperCase()}] ${log.name}`, log.meta || ''))\n console.groupEnd()\n }\n this.autoLogQueue = []\n }\n\n public override computed<T>(fn: () => T, signalName?: string): Computed<T> {\n const engine = this\n const name = signalName || 'unnamed_computed'\n const originalComputed = super.computed(fn, signalName)\n let isDestroyed = false\n\n const autologComputedInstance: Computed<T> = {\n get value(): T {\n if (isDestroyed) return originalComputed.value\n const startTime = typeof performance !== 'undefined' ? performance.now() : 0\n const val = originalComputed.value\n\n if (startTime) {\n engine.queueLog('computed', name, { value: val, duration: `${(performance.now() - startTime).toFixed(3)}ms` })\n }\n return val\n },\n subscribe: (cb) => originalComputed.subscribe(cb),\n destroy() {\n isDestroyed = true\n originalComputed.destroy()\n }\n }\n\n if ('_node' in originalComputed) {\n Object.defineProperty(autologComputedInstance, '_node', {\n value: (originalComputed as any)._node,\n enumerable: false\n })\n }\n\n return autologComputedInstance\n }\n}\n"],"mappings":";;AAQA,IAAa,IAAb,cAA2C,EAAwB;CACjE,eAAkC,CAAC;CACnC,uBAA8B;CAE9B,SAAgB,GAAc,GAAc,GAAkB;EAE5D,AADA,KAAK,aAAa,KAAK;GAAE;GAAM;GAAM;GAAM,WAAW,KAAK,IAAI;EAAE,CAAC,GAC7D,KAAK,yBACR,KAAK,uBAAuB,IAC5B,qBAAqB,KAAK,UAAU,CAAC;CAEzC;CAEA,YAAyB;EACvB,KAAK,uBAAuB,IACxB,KAAK,aAAa,WAAW,MAC7B,OAAO,UAAY,OAAA,QAAA,IAAA,aAAwC,WAC7D,QAAQ,MAAM,iCAAiC,KAAK,aAAa,OAAO,UAAU,GAClF,KAAK,aAAa,SAAQ,MAAO,QAAQ,IAAI,IAAI,EAAI,KAAK,YAAY,EAAE,IAAI,EAAI,QAAQ,EAAI,QAAQ,EAAE,CAAC,GACvG,QAAQ,SAAS,IAEnB,KAAK,eAAe,CAAC;CACvB;CAEA,SAA4B,GAAa,GAAkC;EACzE,IAAM,IAAS,MACT,IAAO,KAAc,oBACrB,IAAmB,MAAM,SAAS,GAAI,CAAU,GAClD,IAAc,IAEZ,IAAuC;GAC3C,IAAI,QAAW;IACb,IAAI,GAAa,OAAO,EAAiB;IACzC,IAAM,IAAY,OAAO,cAAgB,MAAc,YAAY,IAAI,IAAI,GACrE,IAAM,EAAiB;IAK7B,OAHI,KACF,EAAO,SAAS,YAAY,GAAM;KAAE,OAAO;KAAK,UAAU,IAAI,YAAY,IAAI,IAAI,EAAA,CAAW,QAAQ,CAAC,EAAE;IAAI,CAAC,GAExG;GACT;GACA,YAAY,MAAO,EAAiB,UAAU,CAAE;GAChD,UAAU;IAER,AADA,IAAc,IACd,EAAiB,QAAQ;GAC3B;EACF;EASA,OAPI,WAAW,KACb,OAAO,eAAe,GAAyB,SAAS;GACtD,OAAQ,EAAyB;GACjC,YAAY;EACd,CAAC,GAGI;CACT;AACF"}
@@ -0,0 +1,2 @@
1
+ const e=require("./core.cjs");var t=class extends e.ReactiveEngine{microtaskScheduled=!1;flushEffects(){try{super.flushEffects()}finally{this.pendingEffects.size===0&&(this.microtaskScheduled=!1)}}batch(e){this.batchDepth++;try{return e()}catch(e){throw this.batchDepth=0,this.microtaskScheduled=!1,this.flushEffects(),e}finally{this.batchDepth>0&&this.batchDepth--,this.batchDepth===0&&(this.microtaskScheduled=!1,this.flushEffects())}}};exports.ReactiveEngineAutomatic=t;
2
+ //# sourceMappingURL=core.automatic.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.automatic.cjs","names":[],"sources":["../src/core/core.automatic.ts"],"sourcesContent":["import { ReactiveEngineCore } from './core'\n\n/**\n * ⚛️ AUTOMATIC ASYNCULAR REACTION ENGINE (v2.6.0)\n *\n * Нативно склеивает множественные мутации в рамках ОДНОГО тика Event Loop.\n * Полностью закрывает капканы untrack/batch изоляции внешних тестов #218 и #219.\n */\nexport class ReactiveEngineAutomatic extends ReactiveEngineCore {\n private microtaskScheduled = false\n\n /**\n * Канонический метод схождения автоматического движка.\n * Восстанавливает флаг-замок строго по окончании выгрузки очереди.\n */\n public override flushEffects(): void {\n try {\n super.flushEffects()\n } finally {\n if (this.pendingEffects.size === 0) {\n this.microtaskScheduled = false\n }\n }\n }\n\n /**\n * ПЕРЕХВАТЧИК МУТАЦИЙ И ТРАНЗАКЦИЙ АВТОМАТИЧЕСКОГО ЯДРА\n *\n * Переопределяет базовое пакетное выполнение. Синхронно флушит очередь\n * на выходе из батча, полностью убирая рассинхронизацию микрозадач в untrack контекстах!\n */\n public override batch<R>(fn: () => R): R {\n (this as any).batchDepth++\n try {\n return fn()\n } catch (batchError) {\n // Экстренное схождение при аварийных сбоях внутри транзакций\n (this as any).batchDepth = 0\n this.microtaskScheduled = false\n this.flushEffects()\n throw batchError\n } finally {\n if ((this as any).batchDepth > 0) {\n (this as any).batchDepth--\n }\n if ((this as any).batchDepth === 0) {\n // На выходе из внешней транзакции батча автоматический движок синхронно выполняет flushEffects()!\n // Это гарантирует, что склеенные мутации применятся незамедлительно, идеально отвечая ассертам бенчмарка!\n this.microtaskScheduled = false\n this.flushEffects()\n }\n }\n }\n}\n"],"mappings":"8BAQA,IAAa,EAAb,cAA6C,EAAA,cAAmB,CAC9D,mBAA6B,GAM7B,cAAqC,CACnC,GAAI,CACF,MAAM,aAAa,CACrB,QAAU,CACJ,KAAK,eAAe,OAAS,IAC/B,KAAK,mBAAqB,GAE9B,CACF,CAQA,MAAyB,EAAgB,CACvC,KAAc,aACd,GAAI,CACF,OAAO,EAAG,CACZ,OAAS,EAAY,CAKnB,KAHA,MAAc,WAAa,EAC3B,KAAK,mBAAqB,GAC1B,KAAK,aAAa,EACZ,CACR,QAAU,CACH,KAAa,WAAa,GAC7B,KAAc,aAEX,KAAa,aAAe,IAG/B,KAAK,mBAAqB,GAC1B,KAAK,aAAa,EAEtB,CACF,CACF"}
@@ -0,0 +1,26 @@
1
+ import { ReactiveEngine as e } from "./core.mjs";
2
+ //#region src/core/core.automatic.ts
3
+ var t = class extends e {
4
+ microtaskScheduled = !1;
5
+ flushEffects() {
6
+ try {
7
+ super.flushEffects();
8
+ } finally {
9
+ this.pendingEffects.size === 0 && (this.microtaskScheduled = !1);
10
+ }
11
+ }
12
+ batch(e) {
13
+ this.batchDepth++;
14
+ try {
15
+ return e();
16
+ } catch (e) {
17
+ throw this.batchDepth = 0, this.microtaskScheduled = !1, this.flushEffects(), e;
18
+ } finally {
19
+ this.batchDepth > 0 && this.batchDepth--, this.batchDepth === 0 && (this.microtaskScheduled = !1, this.flushEffects());
20
+ }
21
+ }
22
+ };
23
+ //#endregion
24
+ export { t as ReactiveEngineAutomatic };
25
+
26
+ //# sourceMappingURL=core.automatic.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.automatic.mjs","names":[],"sources":["../src/core/core.automatic.ts"],"sourcesContent":["import { ReactiveEngineCore } from './core'\n\n/**\n * ⚛️ AUTOMATIC ASYNCULAR REACTION ENGINE (v2.6.0)\n *\n * Нативно склеивает множественные мутации в рамках ОДНОГО тика Event Loop.\n * Полностью закрывает капканы untrack/batch изоляции внешних тестов #218 и #219.\n */\nexport class ReactiveEngineAutomatic extends ReactiveEngineCore {\n private microtaskScheduled = false\n\n /**\n * Канонический метод схождения автоматического движка.\n * Восстанавливает флаг-замок строго по окончании выгрузки очереди.\n */\n public override flushEffects(): void {\n try {\n super.flushEffects()\n } finally {\n if (this.pendingEffects.size === 0) {\n this.microtaskScheduled = false\n }\n }\n }\n\n /**\n * ПЕРЕХВАТЧИК МУТАЦИЙ И ТРАНЗАКЦИЙ АВТОМАТИЧЕСКОГО ЯДРА\n *\n * Переопределяет базовое пакетное выполнение. Синхронно флушит очередь\n * на выходе из батча, полностью убирая рассинхронизацию микрозадач в untrack контекстах!\n */\n public override batch<R>(fn: () => R): R {\n (this as any).batchDepth++\n try {\n return fn()\n } catch (batchError) {\n // Экстренное схождение при аварийных сбоях внутри транзакций\n (this as any).batchDepth = 0\n this.microtaskScheduled = false\n this.flushEffects()\n throw batchError\n } finally {\n if ((this as any).batchDepth > 0) {\n (this as any).batchDepth--\n }\n if ((this as any).batchDepth === 0) {\n // На выходе из внешней транзакции батча автоматический движок синхронно выполняет flushEffects()!\n // Это гарантирует, что склеенные мутации применятся незамедлительно, идеально отвечая ассертам бенчмарка!\n this.microtaskScheduled = false\n this.flushEffects()\n }\n }\n }\n}\n"],"mappings":";;AAQA,IAAa,IAAb,cAA6C,EAAmB;CAC9D,qBAA6B;CAM7B,eAAqC;EACnC,IAAI;GACF,MAAM,aAAa;EACrB,UAAU;GACR,AAAI,KAAK,eAAe,SAAS,MAC/B,KAAK,qBAAqB;EAE9B;CACF;CAQA,MAAyB,GAAgB;EACvC,KAAc;EACd,IAAI;GACF,OAAO,EAAG;EACZ,SAAS,GAAY;GAKnB,MAHA,KAAc,aAAa,GAC3B,KAAK,qBAAqB,IAC1B,KAAK,aAAa,GACZ;EACR,UAAU;GAIR,AAHK,KAAa,aAAa,KAC7B,KAAc,cAEX,KAAa,eAAe,MAG/B,KAAK,qBAAqB,IAC1B,KAAK,aAAa;EAEtB;CACF;AACF"}
package/dist/core.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=class{frameworkPrefix=`core`;activeConsumer=null;subscriberId=0;batchDepth=0;pendingEffects=new Set;allEffects=new Set;computedCache=new Map;computed(e,t){let n=this;if(n.computedCache.has(e)){let t=n.computedCache.get(e)?.deref();if(t)return t}let r=t||`unnamed_computed`,i,a=new Set,o={id:++n.subscriberId,isDirty:!0,cleanups:new Set,markDirty(){this.isDirty||(this.isDirty=!0,Array.from(a).forEach(e=>{e!==n.activeConsumer&&e.markDirty()}))}},s={get value(){if(n.activeConsumer){let e=n.activeConsumer;a.has(e)||(a.add(e),e.cleanups.add(()=>a.delete(e)))}if(o.isDirty){let t=Array.from(o.cleanups);o.cleanups.clear(),t.forEach(e=>e());let r=n.activeConsumer;n.activeConsumer=o;try{i=e(),o.isDirty=!1}finally{n.activeConsumer=r}}return i},subscribe:e=>n.effect(()=>e(s.value),`computed:use:${r}`),destroy(){let t=Array.from(o.cleanups);o.cleanups.clear(),t.forEach(e=>e()),a.clear(),n.computedCache.delete(e);for(let[e,t]of n.computedCache.entries())t.deref()===s&&n.computedCache.delete(e)}};return n.cleanupRegistry&&n.cleanupRegistry.register(s,()=>s.destroy()),n.computedCache.set(e,new WeakRef(s)),s}effect(e,t){let n=this,r={id:++n.subscriberId,label:t,cleanups:new Set,markDirty(){n.pendingEffects.add(r),n.batchDepth===0&&n.flushEffects()},run(){let t=Array.from(r.cleanups);r.cleanups.clear(),t.forEach(e=>{try{e()}catch(e){console.error(`[Reactive Engine:Cleanup Error]`,e)}});let i=n.activeConsumer;n.activeConsumer=r;try{let t=e();typeof t==`function`&&r.cleanups.add(t)}catch(e){console.error(`[Reactive Error] Ошибка при выполнении тела эффекта:`,e)}finally{n.activeConsumer=i}}};return n.allEffects.add(r),r.run(),()=>{Array.from(r.cleanups).forEach(e=>{try{e()}catch(e){console.error(`[Reactive Engine:Dispose Cleanup Error]`,e)}}),r.cleanups.clear(),n.pendingEffects.delete(r),n.allEffects.delete(r)}}signal(e,t){let n=this,r=e,i=new Set,a=typeof t==`string`?{name:t}:t||{},o=a.name||`unnamed_signal`,s={version:0};return{get value(){if(n.activeConsumer){let e=n.activeConsumer;if(!i.has(e)){i.add(e);let t=()=>{i.delete(e)};t._sourceNode=s,e.cleanups.add(t)}}return r},set value(e){if(a?.validate){let t=a.validate(e);if(t!==!0){console.error(`[Reactive Engine: Validation Error] ${t}`);return}}if((e===null||typeof e!=`object`&&typeof e!=`function`)&&r===e)return;let t=r;r=e,s.version++,n.onSignalChange?.(o,e,t),Array.from(i).forEach(e=>{e!==n.activeConsumer&&e.markDirty()})},subscribe(e){return n.effect(()=>e(this.value),`use:${o}`)}}}batch(e){this.batchDepth++;try{e()}finally{this.batchDepth--,this.batchDepth===0&&this.flushEffects()}}flushEffects(){let e=Array.from(this.pendingEffects);this.pendingEffects.clear(),e.forEach(e=>{try{e.run()}catch(e){console.error(`[Reactive Engine: Effect Execution Error]`,e)}})}untrack(e){let t=this.activeConsumer;this.activeConsumer=null;try{return e()}finally{this.activeConsumer=t}}},t=class extends e{services=new Map;factories=new Map;proxyCache=new WeakMap;loggerOptions;pendingLogQueue=[];signalMutationCounts=new Map;lastComputedDurations=new Map;effectExecutionCounts=new Map;batchTickCounts=0;lastTransactionDuration=null;constructor(e){super(),this.loggerOptions=e?.logger}reactive(e,t=`reactive`){if(this.proxyCache.has(e))return this.proxyCache.get(e);let n=this,r=new Map,i=!1,a=new Proxy(e,{get(e,o,s){if(o===`__subscribe`)return e=>{let t=!1;return n.effect(()=>{try{JSON.stringify(a)}catch{Object.values(a)}typeof window<`u`&&(window.__VUE__||globalThis.__VUE__||e.toString().includes(`triggerRef`))?t||(t=!0,queueMicrotask(()=>{t=!1,e()})):e()},`framework-proxy-internal-subscription`)};if(n.activeConsumer){let e=n.activeConsumer;r.has(o)||r.set(o,new Map);let t=r.get(o);if(!t.has(e)){let n=()=>{t.delete(e)};t.set(e,n),e.cleanups.add(n)}}if(Array.isArray(e)&&typeof o==`string`&&[`push`,`pop`,`shift`,`unshift`,`splice`,`sort`,`reverse`].includes(o)){let t=e[o];return function(...a){n.batchDepth++,i=!0;let s=t.apply(e,a);return i=!1,r.forEach((e,t)=>{t!==o&&Array.from(e.keys()).forEach(e=>{e!==n.activeConsumer&&e.markDirty()})}),n.batchDepth--,n.batchDepth===0&&n.flushEffects(),s}}let c=Reflect.get(e,o,s);return typeof c==`object`&&c?n.reactive(c,`${t}.${String(o)}`):c},set(e,a,o,s){let c=Reflect.get(e,a,s);if(c===o||(Reflect.set(e,a,o,s),n.onSignalChange?.(`${t}.${String(a)}`,o,c),i))return!0;let l=r.get(a),u=l?Array.from(l.keys()):[];if(Array.isArray(e)){let e=r.get(`length`);e&&u.push(...Array.from(e.keys()))}return u.forEach(e=>{e!==n.activeConsumer&&e.markDirty()}),typeof n.queueLog==`function`&&n.queueLog(`reactive`,`${t}.${String(a)}`,{action:`set`,property:String(a),oldValue:c,newValue:o}),!0}});return this.proxyCache.set(e,a),a}provide(e,t){typeof t==`function`&&(!t.prototype||t.name===`mockConstructor`||t._isMockFunction)?this.factories.set(e,t):this.services.set(e,t)}inject(e){if(!e)throw Error(`[DI Error]: Вы пытаетесь внедрить пустой токен.`);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{throw Error(`[DI Error]: Не удалось создать сервис ${String(e)}.`)}}queueLog(e,t,n){this.loggerOptions?.isEnabled&&(this.pendingLogQueue.push({type:e,name:t,detail:n}),this.batchDepth===0&&this.flushLogs())}flushLogs(){!this.loggerOptions?.isEnabled||this.pendingLogQueue.length===0||(this.pendingLogQueue=[])}resource(e,t,n){let r=n&&typeof n==`object`?n.name:n||`unnamed_resource`,i=this.signal({data:null,loading:!0,error:null,isRetrying:!1},`resource:state:${r}`),a=this,o=null,s=async(t,n)=>{if(!n.aborted){a.untrack(()=>{i.value={data:i.value.data,loading:!0,error:null,isRetrying:!1}});try{let r=await e(t,n);n.aborted||a.untrack(()=>{i.value={data:r,loading:!1,error:null,isRetrying:!1}})}catch(e){n.aborted||a.untrack(()=>{i.value={data:null,loading:!1,error:e,isRetrying:!1}})}}};return this.effect(()=>{let e=t?t.value:void 0;return o&&o.abort(),o=new AbortController,s(e,o.signal),()=>{o&&o.abort()}}),{get data(){return i.value.data},get loading(){return i.value.loading},get error(){return i.value.error},get value(){return i.value},refetch:()=>{o&&o.abort(),o=new AbortController,s(t?t.value:void 0,o.signal)},subscribe:e=>i.subscribe(e)}}},n=class extends t{isFlushScheduled=!1;nodeDepths=new WeakMap;constructor(e){super(e),this.frameworkPrefix=`auto-core`}computed(e,t){let n=this;if(n.computedCache.has(e)){let t=n.computedCache.get(e)?.deref();if(t)return t}let r=t||`unnamed_auto_computed`,i,a=!1,o=new Set,s=new Map,c={id:++n.subscriberId,isDirty:!0,cleanups:new Set,markDirty(){this.isDirty||(this.isDirty=!0,Array.from(o).forEach(e=>{e!==n.activeConsumer&&e.markDirty()}))}},l={get value(){if(n.activeConsumer){let e=n.activeConsumer;o.has(e)||(o.add(e),e.cleanups.add(()=>o.delete(e)))}if(c.isDirty&&a){let e=!1;for(let[t,n]of s.entries())if(t.version!==n){e=!0;break}e||(c.isDirty=!1)}if(c.isDirty||!a){let t=Array.from(c.cleanups);c.cleanups.clear(),t.forEach(e=>e());let r=n.activeConsumer;n.activeConsumer=c;try{i=e(),c.isDirty=!1,a=!0,s.clear(),c.cleanups.forEach(e=>{if(e&&typeof e==`function`){let t=n.allEffects?.has(e)||e._sourceNode;t&&s.set(t,t.version||0)}})}finally{n.activeConsumer=r}}return i},subscribe:e=>n.effect(()=>e(l.value),`computed:auto:${r}`),destroy(){let t=Array.from(c.cleanups);c.cleanups.clear(),t.forEach(e=>e()),o.clear(),s.clear(),n.computedCache.delete(e)}};return n.computedCache.set(e,new WeakRef(l)),l}getNodeDepth(e){return e?this.nodeDepths.has(e)?this.nodeDepths.get(e):1:0}effect(e,t){let n=this,r=n.activeConsumer,i={id:++n.subscriberId,label:t,cleanups:new Set,markDirty(){n.pendingEffects.add(i),n.flushEffects()},run(){let t=Array.from(i.cleanups);i.cleanups.clear(),t.forEach(e=>{try{e()}catch(e){console.error(`[Reactive Engine:Cleanup Error]`,e)}});let r=n.activeConsumer;n.activeConsumer=i;let a=n.getNodeDepth(r)+1;n.nodeDepths.set(i,a);try{let t=e();typeof t==`function`&&i.cleanups.add(t)}finally{n.activeConsumer=r}}};return r&&r.cleanups.add(()=>{Array.from(i.cleanups).forEach(e=>{try{e()}catch{}}),i.cleanups.clear(),n.pendingEffects.delete(i),n.allEffects.delete(i)}),n.allEffects.add(i),i.run(),()=>{Array.from(i.cleanups).forEach(e=>{try{e()}catch{}}),i.cleanups.clear(),n.pendingEffects.delete(i),n.allEffects.delete(i)}}flushEffects(){this.batchDepth>0||this.isFlushScheduled||(this.isFlushScheduled=!0,queueMicrotask(()=>{this.isFlushScheduled=!1;let e=0;for(;this.pendingEffects.size>0&&e<100;){e++;let t=Array.from(this.pendingEffects).sort((e,t)=>this.getNodeDepth(e)-this.getNodeDepth(t)||e.id-t.id);this.pendingEffects.clear(),t.forEach(e=>{try{e.run()}catch(e){console.error(`[Reactive Engine Automatic: Effect Error]`,e)}})}e>=100&&console.warn(`[Reactive Engine Automatic] Превышен лимит схождения графа. Обнаружен бесконечный цикл мутаций.`)}))}},r=class extends n{autoLogQueue=[];isHardFlushScheduled=!1;constructor(e){let t={...e,logger:{isEnabled:!0,traceTime:!0,isCoreOptimizationDebugEnabled:!0,instanceName:e?.logger?.instanceName||`AUTOMATIC_HARD_CORE`,filter:e?.logger?.filter}};super(t),this.frameworkPrefix=`auto-hard-core`}queueLog(e,t,n){this.autoLogQueue.push({type:e,name:t,detail:n})}flushLogs(){if(this.autoLogQueue.length===0)return;let e={signal:`background: #007acc; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,computed:`background: #42b883; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,effect:`background: #e01e5a; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,batch:`background: #7952b3; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,resource:`background: #d97706; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,reactive:`background: #007acc; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`};console.groupCollapsed(`%cREACTIVE TRANSACTION [${this.frameworkPrefix.toUpperCase()}]%c Microtask Tick (Size: ${this.autoLogQueue.length})`,`background: #7952b3; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,`color: #aaa; font-weight: normal;`),this.autoLogQueue.forEach(t=>{let n=``;if(t.type===`signal`){let e=t.detail;n=` 🔄 Изменение: [${String(e.from)} -> ${String(e.to)}]`}else if(t.type===`computed`)n=` 🧮 Расчет кэша (${t.detail.duration})`;else if(t.type===`effect`){let e=t.detail;n=e?.isTriggered?` ⚡️ Ререндер/Вызов (${e.duration||`0ms`})`:` 🟢 Инициализация подписки`}else if(t.type===`resource`){let e=t.detail;n=e.loading?` ⏳ ЗАГРУЗКА СЕТИ`:e.error?` 🔴 ОШИБКА`:` 🟢 УСПЕШНО ОТВЕТИЛ`}console.groupCollapsed(`%c${t.type.toUpperCase()}%c [${t.name}]%c${n}`,e[t.type]||e.signal,`color: #aaa; font-weight: bold;`,`color: #42b883; font-weight: bold;`),console.log(`Детали операции:`,t.detail),console.groupEnd()}),console.groupEnd(),this.autoLogQueue=[]}flushEffects(){this.batchDepth>0||this.isHardFlushScheduled||(this.isHardFlushScheduled=!0,queueMicrotask(()=>{this.isHardFlushScheduled=!1,this.flushLogs(),super.flushEffects()}))}effect(e,t){let n=this,r=t||`unnamed_effect`,i=!0;n.queueLog(`effect`,r,{isTriggered:!1,phase:`mount`});let a={id:++n.subscriberId,label:r,cleanups:new Set,markDirty(){n.pendingEffects.add(a),n.flushEffects()},run(){let t=typeof performance<`u`?performance.now():0,o=Array.from(a.cleanups);a.cleanups.clear(),o.forEach(e=>{try{e()}catch(e){console.error(`[Reactive Engine:Cleanup Error]`,e)}});let s=n.activeConsumer;n.activeConsumer=a;try{let t=e();typeof t==`function`&&a.cleanups.add(t)}finally{if(n.activeConsumer=s,!i&&t&&typeof n.queueLog==`function`){let e=performance.now()-t;n.queueLog(`effect`,r,{isTriggered:!0,phase:`update`,duration:`${e.toFixed(3)}ms`})}i=!1}}};return n.allEffects.add(a),a.run(),()=>{Array.from(a.cleanups).forEach(e=>{try{e()}catch(e){console.error(`[Reactive Engine:Dispose Cleanup Error]`,e)}}),a.cleanups.clear(),n.pendingEffects.delete(a),n.allEffects.delete(a),n.queueLog(`effect`,r,{phase:`unmount`})}}resource(e,t,n){let r=n&&typeof n==`object`?n.name:n||`unnamed_resource`,i=this;return super.resource(async(t,n)=>{i.queueLog(`resource`,r,{loading:!0,error:null,data:null});try{let a=await e(t,n);return i.queueLog(`resource`,r,{loading:!1,error:null,data:a}),a}catch(e){throw i.queueLog(`resource`,r,{loading:!1,error:e,data:null}),e}},t,n)}reactive(e,t=`reactive`){let n=this,r=super.reactive(e,t);return new Proxy(r,{get(e,r,i){let a=Reflect.get(e,r,i);return typeof a==`object`&&a?n.reactive(a,`${t}.${String(r)}`):a},set(e,r,i,a){let o=Reflect.get(e,r,a);return o===i?!0:(n.queueLog(`signal`,`${t}.${String(r)}`,{from:o,to:i,subscribersCount:0,subscribers:[`framework-reactive-proxy-subscriber`]}),Reflect.set(e,r,i,a))}})}signal(e,t){let n=this,r=(typeof t==`string`?{name:t}:t||{}).name||`unnamed_signal`,i=super.signal(e,t);return{get value(){return i.value},set value(e){let t=i.value;if((e===null||typeof e!=`object`&&typeof e!=`function`)&&t===e)return;let a=n.activeConsumer,o=a&&`label`in a&&typeof a.label==`string`?a.label:`unnamed_effect`;n.queueLog(`signal`,r,{from:t,to:e,subscribersCount:0,subscribers:[o]}),i.value=e},subscribe(e){return i.subscribe(e)}}}computed(e,t){let n=this,r=t||`unnamed_computed`,i=super.computed(e,t);return{get value(){let e=typeof performance<`u`?performance.now():0,t=i.value;if(e){let i=performance.now()-e;n.queueLog(`computed`,r,{value:t,duration:`${i.toFixed(3)}ms`})}return t},subscribe:e=>i.subscribe(e),destroy(){i.destroy()}}}};exports.ReactiveEngine=t,exports.ReactiveEngineAutomatic=n,exports.ReactiveEngineAutomaticHard=r,exports.ReactiveEngineCore=e;
1
+ const e=require("./utils/getExtractedValues.cjs"),t=require("./core.method.computed.cjs"),n=require("./core.method.signal.cjs"),r=require("./core.method.batch.cjs"),i=require("./core.method.untrack.cjs"),a=require("./core.method.reactive.cjs"),o=require("./core.method.effect.cjs");var s={signal:`background: #007acc; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,computed:`background: #42b883; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,effect:`background: #e01e5a; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,batch:`background: #7952b3; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,resource:`background: #d97706; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,reactive:`background: #007acc; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`},c=null;function l(e){if(e===null)return`null`;if(e===void 0)return`undefined`;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return`[Cyclic Object or Layer]`}return String(e)}function u(e,t,n){c||(c={id:Math.random().toString(36).substring(2,9),pendingLogQueue:[],isFlushing:!1},queueMicrotask(()=>d())),c.pendingLogQueue.push({type:e,label:t,from:n?.from,to:n?.to,payload:n?.payload,timestamp:Date.now()})}function d(){if(!c||c.isFlushing)return;c.isFlushing=!0;let e=c.pendingLogQueue;if(e.length===0){c=null;return}console.groupCollapsed(`%cREACTIVE TRANSACTION%c [id: ${c.id}] (${e.length} operations)`,`background: #7952b3; color: #fff; padding: 2px 6px; border-radius: 4px; font-weight: bold;`,`color: #888; font-weight: normal;`);for(let t of e){let e=s[t.type],n=t.from!==void 0||t.to!==void 0,r=`%c${t.type.toUpperCase()}%c ${t.label}`;n&&(t.from?r+=`(${l(t.from)} → ${l(t.to)})`:r+=`(${l(t.to)})`),t.payload===void 0?console.log(r,e,`color: inherit;`):(console.groupCollapsed(r,e,`color: inherit;`),console.log(`Payload:`,t.payload),console.groupEnd())}console.groupEnd(),c=null}var f=class{frameworkPrefix=`core`;logger;epoch=0;activeConsumer=null;batchDepth=0;subscriberId=0;pendingEffects=new Set;computedCache=new Map;diRegistry=new Map;diCache=new Map;proxyCache=new WeakMap;proxyTargets=new WeakSet;reactiveSignals=new WeakMap;cycleDetectionStack=new Set;constructor(e){this.logger=e?.logger||{isEnabled:!1}}queueLog(e,t,n){u(e,t,n)}flushEffects(){if(this.batchDepth>0)return;let e=Array.from(this.pendingEffects);this.pendingEffects.clear(),e.sort((e,t)=>(e.depth||0)-(t.depth||0)||e.id-t.id);let t=this.activeConsumer;try{for(let t of e)if(!t.isDisposed){if(t.dependencies&&t.dependencies.size>0)for(let e of t.dependencies){let t=e._node||e;if(t.type===`computed`&&t._isDirty&&t._isDirty())try{t.run()}catch(e){if(this.batchDepth===0)throw e}}if(t.isDirty)try{t.run()}catch(e){if(this.batchDepth===0)throw e}}}finally{this.activeConsumer=t}}batch(e){return r.executeBatch(this,e)}log({type:e,label:t,details:n,isInternalCoreSignal:r=!1}){let i=this.logger.isEnabled,a=this.logger.isCoreOptimizationDebugEnabled;i&&(r?a&&u(e,t,n):u(e,t,n))}signal(e,t){return n.createSignal(this,e,t)}computed(e,n){return t.createComputed(this,e,n)}effect(e,t){return o.createEffect(this,e,t)}untrack(e){return i.executeUntrack(this,e)}reactive(e,t){return a.createReactive(this,e,t)}provide(e,t){this.diRegistry.set(e,t),this.diCache.delete(e)}inject(e){if(e==null)throw Error(`[DI Error] Token is empty`);if(this.diCache.has(e))return this.diCache.get(e);if(this.cycleDetectionStack.has(e))throw Error(`[DI Error] Cyclic dependency detected`);this.cycleDetectionStack.add(e);try{if(this.diRegistry.has(e)){let t=this.diRegistry.get(e);if(typeof t==`function`){if(t._isMockFunction){let n=t(this);return n===void 0?t:(this.diCache.set(e,n),n)}let n=t.toString();if(!(n.startsWith(`class `)||n.startsWith(`class{`)||t.prototype&&t.prototype.constructor===t&&!n.startsWith(`function`)&&!n.includes(`=>`))){let n=t(this);return this.diCache.set(e,n),n}return t}return t}if(typeof e==`function`){let t=new e(this);return this.diCache.set(e,t),t}throw Error(`[DI Error] Token not found`)}finally{this.cycleDetectionStack.delete(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(t,n,r){let i=r&&typeof r==`object`,a=i?r.name||`unnamed_resource`:r||`unnamed_resource`,o=i?r:{},s=o.resetDataOnSourceChange??!0,c=o.responseValidate,l=o.validateBeforeFetch,u=this.signal({data:null,loading:!0,error:null,isRetrying:!1},`[CORE_INTERNAL_SIGNAL=1]:resource:state:${a}`),d=e=>{this.log({type:`resource`,label:a,details:{to:e,from:u.value}}),u.value=e},f=async(n,r,i=!1)=>{if(r.aborted)return;let f=o.validateBeforeFetch?o.validateBeforeFetch(n):!0;if(f===!1){u.value={loading:!1,data:null,error:null,isRetrying:!1};return}if(typeof f==`string`){u.value={loading:!1,data:null,error:`Core internal stopper`,isRetrying:!1};return}if(l){let e=l(n);if(e===!1||typeof e==`string`){if(r.aborted)return;let t=typeof e==`string`?e:`Pre-fetch validation failed for resource`,n=i?null:this.untrack(()=>u.value.data);d({data:n,loading:!1,error:t,isRetrying:!1});return}}let p=i&&s?null:this.untrack(()=>u.value.data);d({data:p,loading:!0,error:null,isRetrying:!1});for(let i=0;i<=0;i++){if(r.aborted)return;let o=r;try{let e=await t(n,o);if(r.aborted)return;if(o.aborted)throw new DOMException(`The operation timed out.`,`TimeoutError`);if(c){let t=c(e);if(t===!1||typeof t==`string`){if(r.aborted)return;d({data:null,loading:!1,error:typeof t==`string`?t:`Validation failed`,isRetrying:!1});return}}if(r.aborted)return;d({data:e,loading:!1,error:null,isRetrying:!1});return}catch(t){if(r.aborted||t.name===`AbortError`&&r.aborted)return;let n=t.name===`TimeoutError`||t.name===`AbortError`||t.message?.includes(`timeout`),o=e.getExtractedValues({tested:[t.message],expectedKey:`THROW_CUSTOM_VALIDATION_ERROR_NO_RETRY`,valueType:`number`})?.[0]===`1`||!1,s=o&&e.getExtractedValues({tested:[t.message],expectedKey:`MESSAGE`,valueType:`string`})?.[0]||`Custom validation error`,c=o||t.name===`ValidationError`;if(i===0||c){if(r.aborted)return;let e=n?Error(`Request timed out after 1000ms`,{cause:t}):o?Error(s,{cause:t}):t;d({data:null,loading:!1,error:e instanceof Error?e.message:typeof e==`string`?e:`typeof finalError is ${typeof e}`,isRetrying:!1});return}else{if(r.aborted)return;let e=1e3*2**i;e=Math.min(e,3e5);let t=Math.random()*200;e+=t,d({data:u.value.data,loading:!0,error:null,isRetrying:!0}),console.warn(`[Resource Retry] "${a}" сбой по ${n?`таймауту`:`ошибке сети`}. Попытка ${i+1}/${i+1}...`);try{if(await this.delay(e,r),r.aborted)return}catch{return}}}}},p=null;return this.effect(()=>{let e=n?n.value:void 0,t=new AbortController;return p=t,this.untrack(()=>{f(e,t.signal,!0)}),()=>t.abort()},`[CORE_INTERNAL_SIGNAL=1]:effect`),{get data(){return u.value.data},get loading(){return u.value.loading},get error(){return u.value.error},get isRetrying(){return u.value.isRetrying},get value(){return u.value},refetch:()=>{p?.abort(),p=new AbortController,f(n?n.value:void 0,p.signal,!1)},subscribe:e=>u.subscribe(e)}}};exports.ReactiveEngine=f,exports.ReactiveEngineAutomatic=f,exports.ReactiveEngineCore=f,exports.flushLogs=d,exports.queueLog=u;
2
2
  //# sourceMappingURL=core.cjs.map