@raphy-js/raph 1.0.0-dev.2 → 1.0.1-dev.25

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 (246) hide show
  1. package/README.md +1096 -0
  2. package/dist/api/Raph.d.ts +59 -190
  3. package/dist/api/RaphFacadeSession.d.ts +90 -0
  4. package/dist/api/RaphReactivityInstance.d.ts +72 -0
  5. package/dist/api/errors.d.ts +9 -4
  6. package/dist/api/types.d.ts +162 -17
  7. package/dist/core-CClhT8WR.js +1044 -0
  8. package/dist/core-cPQWYD4K.cjs +1 -0
  9. package/dist/debug/api/Raph.cjs +1 -1
  10. package/dist/debug/api/Raph.js +368 -367
  11. package/dist/debug/api/RaphFacadeSession.cjs +1 -0
  12. package/dist/debug/api/RaphFacadeSession.js +302 -0
  13. package/dist/debug/api/RaphReactivityInstance.cjs +1 -0
  14. package/dist/debug/api/RaphReactivityInstance.js +146 -0
  15. package/dist/debug/api/errors.cjs +1 -1
  16. package/dist/debug/api/errors.js +10 -7
  17. package/dist/debug/path/DataPath.cjs +1 -0
  18. package/dist/debug/path/DataPath.js +390 -0
  19. package/dist/debug/path/PathRouter.cjs +1 -0
  20. package/dist/debug/path/PathRouter.js +80 -0
  21. package/dist/debug/path/RaphKernel.cjs +1 -1
  22. package/dist/debug/path/RaphKernel.js +316 -236
  23. package/dist/debug/path/data-path.utils.cjs +1 -0
  24. package/dist/debug/path/data-path.utils.js +56 -0
  25. package/dist/debug/path/derived/DerivedRegistry.cjs +1 -0
  26. package/dist/debug/path/derived/DerivedRegistry.js +143 -0
  27. package/dist/debug/path/derived/RaphDerivedHandle.cjs +1 -0
  28. package/dist/debug/path/{RaphDerivedHandle.js → derived/RaphDerivedHandle.js} +19 -22
  29. package/dist/debug/path/derived/derived-collection.utils.cjs +1 -0
  30. package/dist/debug/path/{derived-collection.js → derived/derived-collection.utils.js} +71 -71
  31. package/dist/debug/path/derived/derived-strategy.types.cjs +1 -0
  32. package/dist/debug/path/derived/derived-strategy.types.js +1 -0
  33. package/dist/debug/path/meta/MetaController.cjs +1 -0
  34. package/dist/debug/path/{MetaController.js → meta/MetaController.js} +58 -66
  35. package/dist/debug/path/meta/RaphMeta.cjs +1 -0
  36. package/dist/debug/path/meta/RaphMeta.js +62 -0
  37. package/dist/debug/path/meta/RaphMetaStore.cjs +1 -0
  38. package/dist/debug/path/{RaphMetaStore.js → meta/RaphMetaStore.js} +24 -30
  39. package/dist/debug/path/meta/meta.types.cjs +1 -0
  40. package/dist/debug/path/meta/meta.types.js +1 -0
  41. package/dist/debug/path/storage/AdapterPathStore.cjs +1 -0
  42. package/dist/debug/path/storage/AdapterPathStore.js +128 -0
  43. package/dist/debug/path/storage/DefaultDataAdapter.cjs +1 -0
  44. package/dist/debug/path/{data-adapter.js → storage/DefaultDataAdapter.js} +47 -57
  45. package/dist/debug/path/storage/PathEventHub.cjs +1 -0
  46. package/dist/debug/path/storage/PathEventHub.js +161 -0
  47. package/dist/debug/path/storage/PathStore.cjs +1 -0
  48. package/dist/debug/path/{PathStore.js → storage/PathStore.js} +88 -98
  49. package/dist/debug/path/storage/createDataDraft.cjs +1 -0
  50. package/dist/debug/path/{data-draft.js → storage/createDataDraft.js} +24 -28
  51. package/dist/debug/path/storage/data-adapter.types.cjs +1 -0
  52. package/dist/debug/path/storage/data-adapter.types.js +1 -0
  53. package/dist/debug/reactivity/disposal.cjs +1 -0
  54. package/dist/debug/reactivity/disposal.js +32 -0
  55. package/dist/debug/reactivity/engine.cjs +1 -1
  56. package/dist/debug/reactivity/engine.js +888 -321
  57. package/dist/debug/reactivity/reactive-object.cjs +1 -0
  58. package/dist/debug/reactivity/reactive-object.js +265 -0
  59. package/dist/debug/reactivity/scope.cjs +1 -1
  60. package/dist/debug/reactivity/scope.js +221 -117
  61. package/dist/debug/reactivity/watch.cjs +1 -1
  62. package/dist/debug/reactivity/watch.js +1 -1
  63. package/dist/debug/runtime/RaphRuntime.cjs +1 -1
  64. package/dist/debug/runtime/RaphRuntime.js +1134 -502
  65. package/dist/debug/runtime/diagnostics/RaphDebug.cjs +1 -0
  66. package/dist/debug/runtime/diagnostics/RaphDebug.js +287 -0
  67. package/dist/debug/runtime/errors.cjs +1 -1
  68. package/dist/debug/runtime/errors.js +6 -3
  69. package/dist/debug/runtime/ownership/RaphEffectScope.cjs +1 -0
  70. package/dist/debug/runtime/ownership/RaphEffectScope.js +304 -0
  71. package/dist/debug/runtime/ownership/RaphNode.cjs +1 -0
  72. package/dist/debug/runtime/ownership/RaphNode.js +665 -0
  73. package/dist/debug/runtime/ownership/RaphScope.cjs +1 -0
  74. package/dist/debug/runtime/ownership/RaphScope.js +236 -0
  75. package/dist/debug/runtime/ownership/parent-graph.types.cjs +1 -0
  76. package/dist/debug/runtime/ownership/parent-graph.types.js +1 -0
  77. package/dist/debug/runtime/phases/RaphFrameLoop.cjs +1 -0
  78. package/dist/debug/runtime/{RaphFrameLoop.js → phases/RaphFrameLoop.js} +13 -17
  79. package/dist/debug/runtime/phases/RaphPhasePipeline.cjs +1 -0
  80. package/dist/debug/runtime/phases/RaphPhasePipeline.js +848 -0
  81. package/dist/debug/runtime/phases/RaphPhaseTaskRecord.cjs +1 -0
  82. package/dist/debug/runtime/phases/RaphPhaseTaskRecord.js +176 -0
  83. package/dist/debug/runtime/phases/RaphPhaseWatch.cjs +1 -0
  84. package/dist/debug/runtime/phases/RaphPhaseWatch.js +20 -0
  85. package/dist/debug/runtime/phases/orderPhaseTasks.cjs +1 -0
  86. package/dist/debug/runtime/phases/orderPhaseTasks.js +59 -0
  87. package/dist/debug/runtime/reactivity/PathHandle.cjs +1 -0
  88. package/dist/debug/runtime/reactivity/PathHandle.js +165 -0
  89. package/dist/debug/runtime/reactivity/RaphMetaSource.cjs +1 -0
  90. package/dist/debug/runtime/reactivity/RaphMetaSource.js +108 -0
  91. package/dist/debug/runtime/reactivity/RaphSelector.cjs +1 -0
  92. package/dist/debug/runtime/reactivity/RaphSelector.js +503 -0
  93. package/dist/debug/runtime/reactivity/RaphWorkGraph.cjs +1 -0
  94. package/dist/debug/runtime/reactivity/RaphWorkGraph.js +1157 -0
  95. package/dist/debug/runtime/reactivity/RuntimeReactivity.cjs +1 -0
  96. package/dist/debug/runtime/reactivity/RuntimeReactivity.js +550 -0
  97. package/dist/debug/runtime/reactivity/RuntimeWatch.cjs +1 -0
  98. package/dist/debug/runtime/reactivity/RuntimeWatch.js +77 -0
  99. package/dist/debug/runtime/reactivity/disposal-sweep.utils.cjs +1 -0
  100. package/dist/debug/runtime/reactivity/disposal-sweep.utils.js +42 -0
  101. package/dist/debug/runtime/reactivity/runtime-reactivity.types.cjs +1 -0
  102. package/dist/debug/runtime/reactivity/runtime-reactivity.types.js +1 -0
  103. package/dist/entrypoints/machine-testing.d.ts +2 -0
  104. package/dist/entrypoints/machine.d.ts +5 -0
  105. package/dist/entrypoints/path.d.ts +14 -0
  106. package/dist/entrypoints/reactivity.d.ts +1 -0
  107. package/dist/entrypoints/runtime.d.ts +18 -0
  108. package/dist/index.cjs +1 -1
  109. package/dist/index.js +46 -38
  110. package/dist/machine/compiler.d.ts +71 -0
  111. package/dist/machine/core.d.ts +50 -0
  112. package/dist/machine/persistence.d.ts +5 -0
  113. package/dist/machine/runtime.d.ts +4 -0
  114. package/dist/machine/testing.d.ts +43 -0
  115. package/dist/machine/types.d.ts +155 -0
  116. package/dist/machine-testing.cjs +1 -0
  117. package/dist/machine-testing.js +188 -0
  118. package/dist/machine.cjs +1 -0
  119. package/dist/machine.js +822 -0
  120. package/dist/main.d.ts +20 -0
  121. package/dist/path/{data-path.d.ts → DataPath.d.ts} +16 -40
  122. package/dist/path/{path-router.d.ts → PathRouter.d.ts} +1 -1
  123. package/dist/path/RaphKernel.d.ts +37 -10
  124. package/dist/path/data-path.types.d.ts +34 -0
  125. package/dist/path/data-path.utils.d.ts +9 -0
  126. package/dist/path/{DerivedRegistry.d.ts → derived/DerivedRegistry.d.ts} +2 -2
  127. package/dist/path/{RaphDerivedHandle.d.ts → derived/RaphDerivedHandle.d.ts} +3 -3
  128. package/dist/path/derived/derived-collection.types.d.ts +12 -0
  129. package/dist/path/{derived-collection.d.ts → derived/derived-collection.utils.d.ts} +3 -13
  130. package/dist/path/{derived-strategies.d.ts → derived/derived-strategy.types.d.ts} +0 -3
  131. package/dist/path/derived/derived-strategy.utils.d.ts +4 -0
  132. package/dist/path/{MetaController.d.ts → meta/MetaController.d.ts} +4 -4
  133. package/dist/path/{RaphMeta.d.ts → meta/RaphMeta.d.ts} +2 -2
  134. package/dist/path/{RaphMetaStore.d.ts → meta/RaphMetaStore.d.ts} +1 -1
  135. package/dist/path/{meta.types.d.ts → meta/meta.types.d.ts} +2 -4
  136. package/dist/path/path.types.d.ts +3 -2
  137. package/dist/path/{segment-key.d.ts → pathSegmentKey.d.ts} +1 -1
  138. package/dist/path/{AdapterPathStore.d.ts → storage/AdapterPathStore.d.ts} +4 -4
  139. package/dist/path/{data-adapter.d.ts → storage/DefaultDataAdapter.d.ts} +2 -17
  140. package/dist/path/storage/PathEventHub.d.ts +62 -0
  141. package/dist/path/{PathStore.d.ts → storage/PathStore.d.ts} +7 -7
  142. package/dist/path/storage/data-adapter.types.d.ts +17 -0
  143. package/dist/path.cjs +1 -1
  144. package/dist/path.js +16 -16
  145. package/dist/raph.cjs +1 -1
  146. package/dist/raph.js +46 -38
  147. package/dist/reactivity/disposal.d.ts +14 -0
  148. package/dist/reactivity/engine.d.ts +193 -6
  149. package/dist/reactivity/reactive-object.d.ts +36 -0
  150. package/dist/reactivity/scope.d.ts +108 -30
  151. package/dist/reactivity/types.d.ts +25 -0
  152. package/dist/reactivity.cjs +1 -1
  153. package/dist/reactivity.js +12 -12
  154. package/dist/runtime/RaphRuntime.d.ts +319 -160
  155. package/dist/runtime/diagnostics/RaphDebug.d.ts +239 -0
  156. package/dist/runtime/errors.d.ts +5 -0
  157. package/dist/runtime/ownership/RaphEffectScope.d.ts +98 -0
  158. package/dist/runtime/ownership/RaphNode.d.ts +310 -0
  159. package/dist/runtime/ownership/RaphScope.d.ts +168 -0
  160. package/dist/runtime/{parent-graph.d.ts → ownership/parent-graph.types.d.ts} +0 -1
  161. package/dist/runtime/ownership/parentGraph.d.ts +3 -0
  162. package/dist/runtime/phases/RaphPhasePipeline.d.ts +253 -0
  163. package/dist/runtime/phases/RaphPhaseTaskRecord.d.ts +195 -0
  164. package/dist/runtime/phases/RaphPhaseWatch.d.ts +22 -0
  165. package/dist/runtime/phases/orderPhaseTasks.d.ts +6 -0
  166. package/dist/runtime/phases/phase.types.d.ts +171 -0
  167. package/dist/runtime/{PathHandle.d.ts → reactivity/PathHandle.d.ts} +14 -6
  168. package/dist/runtime/reactivity/RaphMetaSource.d.ts +32 -0
  169. package/dist/runtime/reactivity/RaphSelector.d.ts +338 -0
  170. package/dist/runtime/reactivity/RaphWorkGraph.d.ts +309 -0
  171. package/dist/runtime/reactivity/RuntimeReactivity.d.ts +293 -0
  172. package/dist/runtime/{RuntimeWatch.d.ts → reactivity/RuntimeWatch.d.ts} +12 -6
  173. package/dist/runtime/reactivity/disposal-sweep.utils.d.ts +19 -0
  174. package/dist/runtime/reactivity/runtime-reactivity.types.d.ts +56 -0
  175. package/dist/runtime.cjs +1 -1
  176. package/dist/runtime.js +21 -16
  177. package/package.json +76 -35
  178. package/ReadMe.md +0 -153
  179. package/dist/api/public.d.ts +0 -22
  180. package/dist/debug/api/public.cjs +0 -1
  181. package/dist/debug/api/public.js +0 -40
  182. package/dist/debug/path/AdapterPathStore.cjs +0 -1
  183. package/dist/debug/path/AdapterPathStore.js +0 -133
  184. package/dist/debug/path/DerivedRegistry.cjs +0 -1
  185. package/dist/debug/path/DerivedRegistry.js +0 -157
  186. package/dist/debug/path/MetaController.cjs +0 -1
  187. package/dist/debug/path/PathEventHub.cjs +0 -1
  188. package/dist/debug/path/PathEventHub.js +0 -148
  189. package/dist/debug/path/PathStore.cjs +0 -1
  190. package/dist/debug/path/RaphDerivedHandle.cjs +0 -1
  191. package/dist/debug/path/RaphMeta.cjs +0 -1
  192. package/dist/debug/path/RaphMeta.js +0 -68
  193. package/dist/debug/path/RaphMetaStore.cjs +0 -1
  194. package/dist/debug/path/data-adapter.cjs +0 -1
  195. package/dist/debug/path/data-draft.cjs +0 -1
  196. package/dist/debug/path/data-path.cjs +0 -1
  197. package/dist/debug/path/data-path.js +0 -423
  198. package/dist/debug/path/derived-collection.cjs +0 -1
  199. package/dist/debug/path/path-router.cjs +0 -1
  200. package/dist/debug/path/path-router.js +0 -86
  201. package/dist/debug/path/public.cjs +0 -1
  202. package/dist/debug/path/public.js +0 -18
  203. package/dist/debug/runtime/PathHandle.cjs +0 -1
  204. package/dist/debug/runtime/PathHandle.js +0 -139
  205. package/dist/debug/runtime/RaphDebug.cjs +0 -1
  206. package/dist/debug/runtime/RaphDebug.js +0 -15
  207. package/dist/debug/runtime/RaphFrameLoop.cjs +0 -1
  208. package/dist/debug/runtime/RaphNode.cjs +0 -1
  209. package/dist/debug/runtime/RaphNode.js +0 -143
  210. package/dist/debug/runtime/RaphPhasePipeline.cjs +0 -1
  211. package/dist/debug/runtime/RaphPhasePipeline.js +0 -526
  212. package/dist/debug/runtime/RaphScope.cjs +0 -1
  213. package/dist/debug/runtime/RaphScope.js +0 -64
  214. package/dist/debug/runtime/RuntimeReactivity.cjs +0 -1
  215. package/dist/debug/runtime/RuntimeReactivity.js +0 -154
  216. package/dist/debug/runtime/RuntimeWatch.cjs +0 -1
  217. package/dist/debug/runtime/RuntimeWatch.js +0 -71
  218. package/dist/debug/runtime/public.cjs +0 -1
  219. package/dist/debug/runtime/public.js +0 -18
  220. package/dist/path/PathEventHub.d.ts +0 -48
  221. package/dist/path/public.d.ts +0 -14
  222. package/dist/runtime/RaphDebug.d.ts +0 -32
  223. package/dist/runtime/RaphNode.d.ts +0 -68
  224. package/dist/runtime/RaphPhasePipeline.d.ts +0 -133
  225. package/dist/runtime/RaphScope.d.ts +0 -50
  226. package/dist/runtime/RuntimeReactivity.d.ts +0 -40
  227. package/dist/runtime/phase.types.d.ts +0 -49
  228. package/dist/runtime/public.d.ts +0 -13
  229. package/dist/runtime/runtime-reactivity.types.d.ts +0 -9
  230. /package/dist/debug/path/{meta.types.cjs → data-path.types.cjs} +0 -0
  231. /package/dist/debug/path/{meta.types.js → data-path.types.js} +0 -0
  232. /package/dist/debug/{runtime/runtime-reactivity.types.cjs → path/derived/derived-collection.types.cjs} +0 -0
  233. /package/dist/debug/{runtime/runtime-reactivity.types.js → path/derived/derived-collection.types.js} +0 -0
  234. /package/dist/debug/path/{derived-strategies.cjs → derived/derived-strategy.utils.cjs} +0 -0
  235. /package/dist/debug/path/{derived-strategies.js → derived/derived-strategy.utils.js} +0 -0
  236. /package/dist/debug/path/{segment-key.cjs → pathSegmentKey.cjs} +0 -0
  237. /package/dist/debug/path/{segment-key.js → pathSegmentKey.js} +0 -0
  238. /package/dist/debug/runtime/{parent-graph.cjs → ownership/parentGraph.cjs} +0 -0
  239. /package/dist/debug/runtime/{parent-graph.js → ownership/parentGraph.js} +0 -0
  240. /package/dist/debug/runtime/{disposal.cjs → ownership/throwDisposalErrors.cjs} +0 -0
  241. /package/dist/debug/runtime/{disposal.js → ownership/throwDisposalErrors.js} +0 -0
  242. /package/dist/debug/runtime/{phase.types.cjs → phases/phase.types.cjs} +0 -0
  243. /package/dist/debug/runtime/{phase.types.js → phases/phase.types.js} +0 -0
  244. /package/dist/path/{data-draft.d.ts → storage/createDataDraft.d.ts} +0 -0
  245. /package/dist/runtime/{disposal.d.ts → ownership/throwDisposalErrors.d.ts} +0 -0
  246. /package/dist/runtime/{RaphFrameLoop.d.ts → phases/RaphFrameLoop.d.ts} +0 -0
@@ -0,0 +1,168 @@
1
+ import { DisposalFailure } from '../../reactivity/disposal';
2
+ import { OwnedSourceEntry, ScopeOwner } from '../../reactivity/scope';
3
+ import { Disposer, OwnedResource, OwnedSource, ReadonlySignal, Signal, WritableComputedOptions } from '../../reactivity/types';
4
+ import { RaphAggregateSource, RaphEffectGroup, RaphEffectGroupOptions, RaphEffectGroupSlot, RaphEffectOptions, RaphPhaseBody, RaphPhaseEffect, RaphWatchOptions, RaphWatchSource } from '../phases/phase.types';
5
+ import { RaphRuntime } from '../RaphRuntime';
6
+ import { RaphSelector, RaphSelectorOptions } from '../reactivity/RaphSelector';
7
+ import { RaphAggregate } from '../reactivity/RaphWorkGraph';
8
+ import { RaphNode } from './RaphNode';
9
+ /**
10
+ * Runtime owner. Список ресурсов, список источников и признаки lifetime
11
+ * наследуются от ScopeOwner и лежат в самом владельце; standalone unphased
12
+ * effect/watch класса ScopeNode Runtime-владелец намеренно не наследует.
13
+ */
14
+ export declare class RaphScope extends ScopeOwner {
15
+ /**
16
+ * Явный id либо числовой номер id по умолчанию, который RaphNode
17
+ * форматирует при первом чтении `id`.
18
+ * @internal
19
+ */
20
+ protected _id: string | number;
21
+ readonly runtime: RaphRuntime;
22
+ /**
23
+ * Порядковый номер регистрации владельца в его Runtime. Владельцы, пережившие
24
+ * дерево root, Runtime при собственном освобождении обходит по этому номеру
25
+ * от нового к старому.
26
+ * @internal
27
+ */
28
+ readonly _order: number;
29
+ /**
30
+ * Prototype-бренд для горячих проверок владельца: `true` только у RaphNode.
31
+ * Значение лежит на prototype и не занимает поле экземпляра.
32
+ * @internal
33
+ */
34
+ readonly _isNode: boolean;
35
+ constructor(id: string, runtime: RaphRuntime);
36
+ /**
37
+ * Числовой id зарезервирован за ленивым id по умолчанию у RaphNode.
38
+ * @internal
39
+ */
40
+ constructor(id: string | number, runtime: RaphRuntime);
41
+ /**
42
+ * Возвращает id владельца; plain scope всегда хранит явную строку.
43
+ */
44
+ get id(): string;
45
+ /** Stable selector for process ordering; plain scopes are not tree nodes. */
46
+ get node(): RaphNode | undefined;
47
+ signal<T>(value: T): Signal<T>;
48
+ computed<T>(getter: () => T): ReadonlySignal<T>;
49
+ computed<T>(options: WritableComputedOptions<T>): Signal<T>;
50
+ /**
51
+ * Создаёт selector над записываемым signal: функцию `(key) => boolean`,
52
+ * которая отвечает, совпадает ли ключ с текущим значением `source`, и
53
+ * подписывает потребителя только на этот ключ. Запись в `source` будит
54
+ * потребителей прежнего и нового значения, а не всех читателей.
55
+ *
56
+ * Selector принадлежит этому владельцу и живёт до его освобождения; `source`
57
+ * должен принадлежать самому владельцу, его предку или root scope. Читать
58
+ * selector вправе те же потребители, что и signal этого владельца.
59
+ *
60
+ * @typeParam Key — тип ключа и значения `source`.
61
+ */
62
+ selector<Key>(source: Signal<Key>, options?: RaphSelectorOptions<Key>): RaphSelector<Key>;
63
+ effect(phase: string, callback: RaphPhaseEffect, options?: RaphEffectOptions): Disposer;
64
+ /**
65
+ * Регистрирует phase effect без task и без disposer. Тело вызывается без
66
+ * аргументов, а binding живёт до освобождения этого владельца: отдельно его
67
+ * остановить нельзя. Зависимости, порядок, `initial`, `priority` и cleanup
68
+ * те же, что у `effect()`.
69
+ *
70
+ * Frozen task такого binding создаётся, только если его запросит `process`
71
+ * своей phase; на регистрацию приходится одна запись binding.
72
+ * Для тела, которому нужна task или отдельная остановка, остаётся `effect()`.
73
+ */
74
+ bindEffect(phase: string, body: RaphPhaseBody, options?: RaphEffectOptions): void;
75
+ /**
76
+ * Регистрирует группу из `count` phase effects на одном binding: без task и
77
+ * без disposer, как `bindEffect()`. `runSlot(run)` — тело каждого slot: оно
78
+ * получает запуск, где `run[0]` — context группы, а `run[1]` — номер slot.
79
+ * Чтения внутри вызова отслеживаются отдельно для этого slot, поэтому
80
+ * изменение зависимости перезапускает только те slots, которые её читали.
81
+ *
82
+ * Группа — одна phase task и один ресурс владельца. Регистрация ничего не
83
+ * исполняет: каждый slot запускает `start(slot, initial?)` возвращённой
84
+ * группы, и с этого вызова slot ведёт себя как binding, который
85
+ * `bindEffect()` зарегистрировал бы в этом месте. Доставка исполняет
86
+ * запущенные slots, чьи зависимости изменились, в порядке их номеров; сбой
87
+ * одного slot не мешает остальным и сообщается отдельной ошибкой, как сбой
88
+ * отдельного binding. Причины всех slots складываются в `causes` одной task,
89
+ * которую custom `process` получает на всю группу. Cleanup, который вернул
90
+ * slot, выполняется перед его следующим запуском и при освобождении группы.
91
+ *
92
+ * Порядок `priority desc → FIFO` действует между tasks: группа занимает в
93
+ * очереди phase место своего первого изменившегося slot. Внутри task slots
94
+ * исполняются по номерам, а slot, который изменился, пока его группа
95
+ * доставляется, исполняется в этой же доставке, если до него ещё не дошла
96
+ * очередь. Slot, в источник которого записали, пока он ждал запуска в этой
97
+ * доставке, исполняется в ней один раз и читает новое значение; slot, чьи
98
+ * зависимости не изменились, тело не исполняет, даже если причина пришла
99
+ * группе из-за соседнего slot. После доставки, во время которой группе
100
+ * пришла причина, группа доставляется ещё раз с новыми причинами и
101
+ * исполняет только slots, изменившиеся после своего запуска; `cancel()`
102
+ * доставки, во время которой пришла причина, оставляет ждавшие slots
103
+ * запланированными.
104
+ *
105
+ * Группа живёт до освобождения этого владельца: отдельно её остановить
106
+ * нельзя. Владелец освобождает её после ресурсов, зарегистрированных позже,
107
+ * в том числе телами её slots; slots освобождаются в порядке, обратном
108
+ * порядку номеров. Несколько сбоев cleanup при освобождении группы приходят
109
+ * одним `AggregateError` с сообщением `[Raph] Effect group disposal failed.`
110
+ * как один сбой ресурса владельца; единственный сбой бросается как есть.
111
+ *
112
+ * @typeParam Context — значение, которое получает тело каждого slot.
113
+ * @param phase Имя объявленной phase.
114
+ * @param count Число slots: целое от 1 до 4294967293, иначе `RangeError`.
115
+ * @param runSlot Тело slot: получает запуск с `context` и номером slot.
116
+ * @param context Значение, которое группа передаёт телу каждого slot.
117
+ * @param options `priority` task группы, как у `effect()`.
118
+ */
119
+ effectGroup<Context>(phase: string, count: number, runSlot: RaphEffectGroupSlot<Context>, context: Context, options?: RaphEffectGroupOptions): RaphEffectGroup;
120
+ watch(source: RaphWatchSource, phase: string, callback: RaphPhaseEffect, options?: RaphWatchOptions): Disposer;
121
+ /**
122
+ * Внутренняя регистрация renderer без возвращаемого disposer. Failure
123
+ * continuation относится только к завершившемуся execution request.
124
+ * @internal
125
+ */
126
+ _registerEffect(phase: string, callback: RaphPhaseEffect, options: RaphEffectOptions, taskless: boolean, onExecutionFailure: (error: unknown) => never, isExecutionCancelled?: () => boolean): void;
127
+ /** @internal */
128
+ _registerWatch(source: RaphWatchSource, phase: string, callback: RaphPhaseEffect, options: RaphWatchOptions, onExecutionFailure: (error: unknown) => never, isExecutionCancelled?: () => boolean): void;
129
+ /**
130
+ * Выдаёт внутренний typed handle вместо приведения публичного group handle.
131
+ * Порядок создания и принятия ресурса совпадает с effectGroup().
132
+ * @internal
133
+ */
134
+ _registerEffectGroup<Context>(phase: string, count: number, runSlot: RaphEffectGroupSlot<Context>, context: Context, options?: RaphEffectGroupOptions): ReturnType<RaphRuntime['_effectGroupRegistration']>;
135
+ aggregate(sources: readonly RaphAggregateSource[]): RaphAggregate;
136
+ action<Args extends unknown[], Result>(operation: (...args: Args) => Result): (...args: Args) => Result;
137
+ action<Args extends unknown[], Result>(name: string, operation: (...args: Args) => Result): (...args: Args) => Result;
138
+ own(disposer: Disposer): Disposer;
139
+ dispose(): void;
140
+ /** Node's super stage keeps the actual public base-method lookup observable. @internal */
141
+ _disposeScopeForOwner(dispose: Disposer): DisposalFailure | undefined;
142
+ /** One explicit framework disposal result; public dispose never leaks it. @internal */
143
+ _disposeWithOutcome(): DisposalFailure | undefined;
144
+ /** Framework capture registration; ordinary own callback semantics are unchanged. @internal */
145
+ _ownCompletedCleanup(cleanup: () => DisposalFailure | undefined): Disposer;
146
+ /** @internal */
147
+ _adoptResource(disposer: Disposer): Disposer;
148
+ /**
149
+ * Связывает готовую запись ресурса: запись сама становится элементом списка
150
+ * ресурсов этого владельца, без обёртки и closure, и освобождает себя через
151
+ * унаследованный _releaseRecord() из собственного dispose().
152
+ *
153
+ * @internal
154
+ */
155
+ _adoptRecord(entry: OwnedResource): void;
156
+ /** @internal */
157
+ _adoptSource<T>(source: OwnedSource<T>): T;
158
+ /**
159
+ * Связывает готовую запись источника: источник сам становится элементом
160
+ * списка источников этого владельца, без обёртки и closure, и освобождает
161
+ * себя через собственный _finalizeSource().
162
+ *
163
+ * @internal
164
+ */
165
+ _adoptSourceEntry(entry: OwnedSourceEntry): void;
166
+ /** @internal */
167
+ _assertAlive(): void;
168
+ }
@@ -2,4 +2,3 @@ import { RaphNode } from './RaphNode';
2
2
  export interface DepGraph<T extends RaphNode = RaphNode> {
3
3
  parentsOf: (node: T) => ReadonlySet<T>;
4
4
  }
5
- export declare function parentGraph<T extends RaphNode>(): DepGraph<T>;
@@ -0,0 +1,3 @@
1
+ import { DepGraph } from './parent-graph.types';
2
+ import { RaphNode } from './RaphNode';
3
+ export declare function parentGraph<T extends RaphNode>(): DepGraph<T>;
@@ -0,0 +1,253 @@
1
+ import { RaphScope } from '../ownership/RaphScope';
2
+ import { RuntimeReactivity } from '../reactivity/RuntimeReactivity';
3
+ import { RaphFrameContext, RaphPhase, RaphPhaseEffect, RaphSchedulerMode, RaphWorkCause } from './phase.types';
4
+ import { RaphPhaseTaskRecord } from './RaphPhaseTaskRecord';
5
+ /**
6
+ * Постоянное состояние одной phase: живая очередь, запасной массив для обмена
7
+ * при разборе и число bindings. Состояние переживает переопределение phases, пока
8
+ * имя phase сохраняется, поэтому запись binding держит прямую ссылку на него и
9
+ * ставится в очередь без поиска по имени. Через него же запись находит свой
10
+ * pipeline: отдельной ссылки на pipeline у записи нет.
11
+ *
12
+ * Инвариант: каждая запись живой очереди активна и ожидает доставки, а
13
+ * `spare` пуст вне разбора своей phase.
14
+ */
15
+ export declare class RaphPhaseState {
16
+ readonly name: string;
17
+ readonly pipeline: RaphPhasePipeline;
18
+ queue: RaphPhaseTaskRecord[];
19
+ spare: RaphPhaseTaskRecord[];
20
+ bindings: number;
21
+ constructor(name: string, pipeline: RaphPhasePipeline);
22
+ }
23
+ /** Единая Runtime-owned очередь persistent phase bindings. */
24
+ export declare class RaphPhasePipeline {
25
+ private readonly _scheduler;
26
+ private readonly _reactivity;
27
+ private readonly _resolveCause;
28
+ private readonly _deferSync;
29
+ private readonly _tracePhase?;
30
+ private _phases;
31
+ private _phaseByName;
32
+ private _resolvedInput;
33
+ private _resolvedState;
34
+ private _queuedCount;
35
+ private readonly _deferred;
36
+ private readonly _idleWaiters;
37
+ private _taskSequence;
38
+ private _scheduled;
39
+ private _scheduleToken;
40
+ private _frameHandle;
41
+ private _frameHandleKind;
42
+ private _configurationLocked;
43
+ /**
44
+ * Flush исполняется сейчас: новая работа попадёт в его следующий проход.
45
+ *
46
+ * @internal
47
+ */
48
+ _running: boolean;
49
+ private _idleSlotFlags;
50
+ private _disposed;
51
+ private _firstFrameAt;
52
+ private _lastFrameAt;
53
+ private _frameNumber;
54
+ private _frame;
55
+ constructor(_scheduler: RaphSchedulerMode, _reactivity: RuntimeReactivity, _resolveCause: (token: unknown) => RaphWorkCause | undefined, _deferSync?: () => boolean, _tracePhase?: ((phase: string, status: "end" | "error" | "start", error?: unknown) => void) | undefined);
56
+ get frame(): RaphFrameContext;
57
+ get phases(): readonly RaphPhase[];
58
+ definePhases(phases: readonly RaphPhase[]): void;
59
+ addPhase(phase: RaphPhase): void;
60
+ clearPhases(): void;
61
+ /**
62
+ * Находит состояние объявленной phase по имени, которое передал вызывающий.
63
+ * Подряд идущие bindings одной phase попадают в кэш из одной записи; точное
64
+ * имя находится без `trim()`, и только имя с пробелами по краям нормализуется.
65
+ */
66
+ resolvePhase(input: string): RaphPhaseState;
67
+ /**
68
+ * Создаёт постоянную запись одного binding. Вызывающий уже разрешил phase
69
+ * и проверил priority, поэтому горячий путь регистрации проверяет их один раз.
70
+ * Запись ничего не выполняет, пока вызывающий не подключит engine effect
71
+ * (`node`) или watch lifecycle (`watch`).
72
+ */
73
+ bindTask(phase: RaphPhaseState, consumerOwner: RaphScope, effect: RaphPhaseEffect, priority: number): RaphPhaseTaskRecord;
74
+ /**
75
+ * Создаёт постоянную запись группы из `count` slots: одна запись binding и
76
+ * её состояние с местом под запись графа каждого slot. Вызывающий уже
77
+ * разрешил phase и проверил priority и `count`; записи графа он подключает
78
+ * сам через _allocateTaskEffect() и кладёт в состояние по порядку slots.
79
+ * Slot ничего не исполняет, пока его запись не запланирована.
80
+ *
81
+ * `runSlot` занимает место callback записи: его показывает `task.effect`
82
+ * группы, а вызывает только общее тело записей engine — с состоянием
83
+ * группы, где лежат её context и номер slot. Поэтому запись группы несёт
84
+ * `TASK_TASKLESS`: вместо task тело получает поле `group`.
85
+ */
86
+ bindGroup(phase: RaphPhaseState, consumerOwner: RaphScope, runSlot: RaphPhaseEffect, context: unknown, count: number, priority: number): RaphPhaseTaskRecord;
87
+ request(): void;
88
+ afterFlush(): Promise<void>;
89
+ flush(): void;
90
+ dispose(): void;
91
+ _debugPending(): boolean;
92
+ private _describeQueued;
93
+ /**
94
+ * Открывает доставку одной записью `state`. Накопленные причины остаются на
95
+ * своих местах и становятся причинами доставки под TASK_CAUSES_DELIVERED:
96
+ * ничего не копируется, а массив для `task.causes` строится, только если его
97
+ * прочитают. Frame доставки получает только запись с facade: без facade его
98
+ * нечем прочитать, а запись ссылки на новый frame в каждую доставленную
99
+ * запись стоит write barrier.
100
+ *
101
+ * Запись попадает сюда только из живой очереди, а в ней нет записей с
102
+ * открытой доставкой, поэтому причин прошлой доставки здесь не бывает.
103
+ */
104
+ private _beginDelivery;
105
+ /**
106
+ * Исполняет открытую доставку binding. `failures` передаёт default runner:
107
+ * группа складывает туда сбой каждого slot отдельно. Без него сбои slots
108
+ * бросаются вызывающему — `task.run()` внутри `process` — после прохода: один
109
+ * как есть, несколько одним AggregateError.
110
+ *
111
+ * @internal
112
+ */
113
+ _runDelivery(record: RaphPhaseTaskRecord, failures?: unknown[]): void;
114
+ /** @internal */
115
+ _deferDelivery(record: RaphPhaseTaskRecord): void;
116
+ /** @internal */
117
+ _cancelDelivery(record: RaphPhaseTaskRecord): void;
118
+ private _finishDelivery;
119
+ /**
120
+ * Делает исполняемыми slots группы, которые остались запланированными после
121
+ * доставки: slot, изменивший собственную зависимость, и slot, чью зависимость
122
+ * изменили после его запуска. Slot, который не запланирован, не трогается:
123
+ * он уже прочитал актуальные значения и в следующей доставке не исполняется.
124
+ * Запись, сделанную до запуска slot в той же доставке, slot читает в ней же:
125
+ * прямую запись engine переводит в обязательный запуск, отложенную находит
126
+ * проверка зависимостей. Отдельный binding после такой записи исполняется
127
+ * ещё раз следующим проходом; slot повторно не исполняется.
128
+ *
129
+ * Запись без зависимостей пропускается. Запланированной она бывает в двух
130
+ * случаях: slot запущен во время доставки и ждёт первого запуска — тогда она
131
+ * исполняема с момента создания; либо повторно запущен slot, который уже
132
+ * исполнился и ничего не прочитал, — тогда исполнять его нечем.
133
+ */
134
+ private _rearmGroup;
135
+ /** @internal */
136
+ _notifyTask(record: RaphPhaseTaskRecord, token: unknown): void;
137
+ /** @internal */
138
+ _appendCause(record: RaphPhaseTaskRecord, cause: RaphWorkCause, key: object): void;
139
+ /**
140
+ * Переносит причины открытой доставки с места ожидающих в detail, без
141
+ * копирования, и освобождает это место. После вызова запись хранит оба
142
+ * набора раздельно: ожидающие причины — в своих полях, причины доставки — в
143
+ * detail. Массив, уже построенный для `task.causes`, остаётся тем же.
144
+ */
145
+ private _splitDeliveredCauses;
146
+ /** @internal */
147
+ _queue(record: RaphPhaseTaskRecord, schedule?: boolean): void;
148
+ /** @internal */
149
+ _disposeTask(record: RaphPhaseTaskRecord): void;
150
+ /**
151
+ * Полностью освобождает один binding; каждый шаг идемпотентен, поэтому
152
+ * владелец, engine и пользователь могут прийти сюда в любом порядке и
153
+ * повторно войти в метод.
154
+ *
155
+ * @internal
156
+ */
157
+ _disposeBinding(record: RaphPhaseTaskRecord): void;
158
+ /**
159
+ * Убирает из состояния группы slots, записи графа которых уже остановлены, и
160
+ * сообщает, остались ли при этом живые slots.
161
+ *
162
+ * Запись одного slot останавливается отдельно от группы в трёх случаях: упал
163
+ * cleanup перед повторным запуском slot; перезапускается или останавливается
164
+ * effect, внутри тела которого группа зарегистрирована; провалился запуск
165
+ * slot через `start()`. Engine сообщает о каждой такой остановке через task
166
+ * hook, общий для всех slots, и запись в этот момент уже остановлена. Группа
167
+ * тогда теряет только этот slot, как owner потерял бы один из отдельных
168
+ * bindings; запись binding освобождается, когда остановлен последний slot.
169
+ *
170
+ * Вызов владельца или effect scope остановленных записей не находит: место
171
+ * остановленного slot уже занято `null`.
172
+ *
173
+ * @returns true, если вызов был сообщением engine и живые slots остались.
174
+ */
175
+ private _forgetStoppedSlots;
176
+ /**
177
+ * Останавливает записи графа всех slots группы в порядке, обратном порядку
178
+ * slots: так владелец освобождал бы отдельные bindings. Сбой cleanup одного
179
+ * slot не мешает остановить остальные.
180
+ *
181
+ * Группа — один ресурс, поэтому порядок и вид ошибки не зависят от того, кто
182
+ * её освобождает. Effect scope отдельные bindings освободил бы в порядке
183
+ * регистрации и сложил бы их сбои в собственный список; группу он
184
+ * освобождает в обратном порядке slots и получает несколько сбоев одним
185
+ * AggregateError. Владелец получает тот же AggregateError как один сбой
186
+ * ресурса вместо отдельных сбоев bindings.
187
+ *
188
+ * Остановка первой же записи повторно входит в _disposeBinding() через task
189
+ * hook engine: вложенный вызов уже не находит состояния группы и освобождает
190
+ * состояние pipeline до cleanup slots. Группа без живых slots освобождает
191
+ * его здесь.
192
+ */
193
+ private _disposeGroup;
194
+ /**
195
+ * Освобождает подписку и состояние pipeline остановленного watch.
196
+ */
197
+ private _releaseWatch;
198
+ /** @internal */
199
+ _pauseTask(record: RaphPhaseTaskRecord): void;
200
+ /**
201
+ * Убирает ожидающую запись из живой очереди её phase. Запись, которую flush
202
+ * уже забрал на разбор, в живой очереди не находится и счётчик не меняет.
203
+ */
204
+ private _unqueue;
205
+ /** @internal */
206
+ _resumeTask(record: RaphPhaseTaskRecord): void;
207
+ /**
208
+ * Возвращает причины открытой доставки в ожидающие, впереди причин, которые
209
+ * пришли после её открытия; причины одного source сливаются. Причины доставки
210
+ * при этом остаются причинами доставки до её конца, поэтому сначала они
211
+ * отделяются от ожидающих.
212
+ */
213
+ private _restoreDeliveryCausesBeforePending;
214
+ private _schedule;
215
+ private _scheduleDeferredTurn;
216
+ private _cancelScheduled;
217
+ private _activateDeferred;
218
+ private _nextFrame;
219
+ private _assertRetainedPhases;
220
+ private _hasPending;
221
+ private _cancelAllQueued;
222
+ private _cancelAllDeferred;
223
+ private _acknowledgeDiscard;
224
+ /**
225
+ * Гасит ожидающую доставку slots группы.
226
+ *
227
+ * Slot, чей первый запуск ещё впереди, погасить нельзя: он не собрал
228
+ * зависимости, и после отмены его ничто не разбудит. Такой slot узнаётся по
229
+ * запланированной записи без единой зависимости: запись, которая уже
230
+ * исполнялась и ничего не прочитала, больше не планируется. Обычная отмена
231
+ * тогда не трогает ни один slot и возвращает false; fatal discard
232
+ * останавливает такие slots окончательно и гасит остальные.
233
+ *
234
+ * Обычная отмена отказывается только от того, что доставка знала при
235
+ * открытии. Причина, пришедшая группе после открытия доставки, означает
236
+ * запись, которую запланированный slot ещё не прочитал. Гашение снимает с
237
+ * записи slot и отметку планирования, и требование запуска, которое engine
238
+ * поставил при прямой записи, поэтому slots, ждавшие запуска, после гашения
239
+ * снова требуют его, как отдельный binding, отменённый при новой причине.
240
+ * Группа тогда доставляется ещё раз с новыми причинами. Fatal discard гасит
241
+ * всё.
242
+ *
243
+ * @returns false, если доставку нельзя отменить либо живых slots не осталось.
244
+ */
245
+ private _cancelGroup;
246
+ /**
247
+ * Сбрасывает ожидающую работу записи, снятой с очереди либо из отложенных.
248
+ * Такая запись не находится в доставке, поэтому её причины ожидающие.
249
+ */
250
+ private _clearPendingDelivery;
251
+ private _settleIdleWaiters;
252
+ private _assertAlive;
253
+ }
@@ -0,0 +1,195 @@
1
+ import { EffectTask, OwnedResource, ReactiveNode, ScopeChildren } from '../../reactivity/types';
2
+ import { RaphScope } from '../ownership/RaphScope';
3
+ import { RaphEffectGroup, RaphEffectInitialMode, RaphFrameContext, RaphPhaseEffect, RaphPhaseTask, RaphWorkCause } from './phase.types';
4
+ import { RaphPhaseState } from './RaphPhasePipeline';
5
+ import { RaphPhaseWatch } from './RaphPhaseWatch';
6
+ export declare const EMPTY_CAUSES: readonly RaphWorkCause[];
7
+ export declare const EMPTY_FRAME: RaphFrameContext;
8
+ export declare const TASK_ACTIVE = 1;
9
+ export declare const TASK_PAUSED: number;
10
+ export declare const TASK_PENDING: number;
11
+ export declare const TASK_DEFERRED: number;
12
+ export declare const TASK_IN_DELIVERY: number;
13
+ export declare const TASK_DISCARD_ACKNOWLEDGED: number;
14
+ export declare const TASK_REQUESTED: number;
15
+ export declare const TASK_EXECUTED: number;
16
+ export declare const TASK_CAUSES_DELIVERED: number;
17
+ export declare const TASK_RESOLUTION: number;
18
+ export declare const TASK_UNRESOLVED = 0;
19
+ export declare const TASK_RUN: number;
20
+ export declare const TASK_DEFER: number;
21
+ export declare const TASK_CANCEL: number;
22
+ export declare const TASK_TASKLESS: number;
23
+ /**
24
+ * Состояние группы effects одного binding: плоский массив
25
+ * `[context, номер исполняемого slot, запись графа slot 0, slot 1, ...]`.
26
+ *
27
+ * Группа делит одну запись binding между несколькими отслеживаемыми
28
+ * вычислениями. У каждого slot своя запись графа engine, то есть свой набор
29
+ * зависимостей и свой признак invalidation; общими остаются запись binding и
30
+ * её место в очереди phase и в списке ресурсов владельца. Тело записи engine
31
+ * у всех slots одно, поэтому номер slot доставка записывает сюда перед
32
+ * запуском каждого slot, а тело slot получает само состояние как свой
33
+ * единственный аргумент — запуск `RaphEffectGroupRun`: первые два элемента и
34
+ * есть его публичная часть.
35
+ *
36
+ * На месте записи slot, остановленного отдельно от группы, стоит `null`.
37
+ *
38
+ * Состояние — массив, а не class: на группу приходится одна аллокация точного
39
+ * размера, и у неё нет hidden class, который терялся бы, когда освобождена
40
+ * последняя группа.
41
+ */
42
+ export type RaphEffectGroupState = unknown[];
43
+ export declare const GROUP_CONTEXT = 0;
44
+ export declare const GROUP_CURSOR = 1;
45
+ export declare const GROUP_NODES = 2;
46
+ /**
47
+ * Frozen public facade of one phase binding. All state stays on the record, so
48
+ * the facade has a single own field and shares its capabilities through the
49
+ * prototype: `run`, `defer` and `cancel` need the task as receiver.
50
+ */
51
+ export declare class RaphPhaseTaskHandle implements RaphPhaseTask {
52
+ /** @internal */
53
+ readonly _record: RaphPhaseTaskRecord;
54
+ constructor(record: RaphPhaseTaskRecord);
55
+ get phase(): string;
56
+ get consumerOwner(): RaphScope;
57
+ get effect(): RaphPhaseEffect;
58
+ get causes(): readonly RaphWorkCause[];
59
+ get frame(): RaphFrameContext;
60
+ get priority(): number;
61
+ get sequence(): number;
62
+ run(): void;
63
+ defer(): void;
64
+ cancel(): void;
65
+ }
66
+ /**
67
+ * Редкое состояние одного phase binding, вынесенное из записи. Объект создаётся
68
+ * при первом входе binding в одно из таких состояний и живёт до освобождения
69
+ * записи:
70
+ *
71
+ * - до доставки накопились причины от второго source (`extraCauses`);
72
+ * - причины открытой доставки пришлось отделить от ожидающих: во время
73
+ * доставки пришла новая причина либо доставка отложена или остановлена
74
+ * pause (`deliveryFirstCause`, `deliveryFirstCauseKey`,
75
+ * `deliveryExtraCauses`);
76
+ * - причины доставки прочитаны через `task.causes` (`deliveryCauses`);
77
+ * - доставка отложена через `defer()` (`deferCount`).
78
+ *
79
+ * Binding, который исполняется и получает не больше одной причины на
80
+ * доставку, не читая `task.causes`, этого объекта не создаёт: ни effect с task
81
+ * или без неё, ни watch, ни группа.
82
+ *
83
+ * Поля объявлены без initializers и присваиваются в constructor в одном
84
+ * фиксированном порядке: у каждого экземпляра один hidden class.
85
+ *
86
+ * Engine удерживает форму экземпляров только через живые экземпляры. Когда в
87
+ * isolate не остаётся ни одного binding с редким состоянием, полная сборка
88
+ * мусора освобождает её вместе с кодом, оптимизированным под неё. Поэтому
89
+ * class владеет одним постоянным экземпляром `_shapeAnchor`.
90
+ */
91
+ export declare class RaphPhaseTaskDetail {
92
+ static _shapeAnchor: RaphPhaseTaskDetail;
93
+ extraCauses: Map<object, RaphWorkCause> | undefined;
94
+ deliveryFirstCause: RaphWorkCause | undefined;
95
+ deliveryFirstCauseKey: object | undefined;
96
+ deliveryExtraCauses: Map<object, RaphWorkCause> | undefined;
97
+ deliveryCauses: readonly RaphWorkCause[] | undefined;
98
+ deferCount: number;
99
+ constructor();
100
+ }
101
+ /**
102
+ * Постоянное состояние одного phase binding. Один и тот же объект является
103
+ * элементом очереди pipeline, внешней задачей engine effect, элементом списка
104
+ * ресурсов своего consumer owner и pausable-регистрацией, передаваемой effect
105
+ * scopes, поэтому binding стоит одной аллокации.
106
+ *
107
+ * Запись несёт только то, что нужно binding между регистрацией и освобождением
108
+ * на обычном пути: признаки одним числом, место в очереди, владельца, callback,
109
+ * запись графа, lifecycle watch либо состояние группы, связи списка ресурсов,
110
+ * первую причину и лениво создаваемый frozen facade с frame, который он
111
+ * показывает. Остальное — причины со второй, причины доставки, отделённые от
112
+ * ожидающих, показанный массив причин и счётчик defer — лежит в `detail`,
113
+ * который создаётся при первом входе в такое состояние. Pipeline запись
114
+ * находит через её phase: `phaseState.pipeline`.
115
+ *
116
+ * Поля объявлены без initializers и присваиваются в constructor в одном
117
+ * фиксированном порядке: у каждой записи один hidden class, и ни один build
118
+ * target не может превратить поля в вызовы helper.
119
+ */
120
+ export declare class RaphPhaseTaskRecord implements EffectTask, OwnedResource, RaphEffectGroup {
121
+ state: number;
122
+ sequence: number;
123
+ readonly phaseState: RaphPhaseState;
124
+ readonly priority: number;
125
+ readonly consumerOwner: RaphScope;
126
+ readonly effect: RaphPhaseEffect;
127
+ node: ReactiveNode | undefined;
128
+ watch: RaphPhaseWatch | undefined;
129
+ group: RaphEffectGroupState | undefined;
130
+ scopeParent: ScopeChildren<OwnedResource> | undefined;
131
+ scopePrevious: OwnedResource | undefined;
132
+ scopeNext: OwnedResource | undefined;
133
+ firstCause: RaphWorkCause | undefined;
134
+ firstCauseKey: object | undefined;
135
+ frame: RaphFrameContext;
136
+ facade: RaphPhaseTaskHandle | undefined;
137
+ detail: RaphPhaseTaskDetail | undefined;
138
+ constructor(phaseState: RaphPhaseState, priority: number, consumerOwner: RaphScope, effect: RaphPhaseEffect);
139
+ get phase(): string;
140
+ get dependencyOwner(): RaphScope;
141
+ get allowScheduleDuringRun(): boolean;
142
+ /**
143
+ * Становится false, когда binding остановлен: так запись видят effect scopes,
144
+ * которым она передана как pausable-регистрация.
145
+ */
146
+ get active(): boolean;
147
+ /**
148
+ * Причины текущей доставки в том виде, в каком их получает callback или
149
+ * `process`. Массив строится при первом чтении в доставке и до её конца
150
+ * остаётся тем же объектом; доставка, причины которой никто не прочитал, не
151
+ * создаёт ни массива, ни заморозки. Вне доставки и для доставки без причин
152
+ * это общий пустой массив.
153
+ *
154
+ * Это единственное место, где причины выходят наружу, поэтому здесь же они
155
+ * становятся неизменяемыми: WorkGraph создаёт причину без заморозки, а
156
+ * замораживает её первое чтение.
157
+ */
158
+ get causes(): readonly RaphWorkCause[];
159
+ /**
160
+ * One facade per record: created on first exposure, then reused.
161
+ *
162
+ * Запись начинает вести frame с появлением facade. Facade создаётся внутри
163
+ * открытой доставки своей записи — его запрашивают только тело binding и
164
+ * `process` — и получает её frame; frame каждой следующей доставки
165
+ * записывает её открытие.
166
+ */
167
+ get task(): RaphPhaseTask;
168
+ /** Возвращает редкое состояние записи и создаёт его при первом обращении. */
169
+ detailed(): RaphPhaseTaskDetail;
170
+ notify(token: unknown): void;
171
+ schedule(): void;
172
+ enqueue(cause: RaphWorkCause, key?: object, schedule?: boolean): void;
173
+ /**
174
+ * Запускает slot группы effects; у записи одиночного effect и watch ничего
175
+ * не делает. Запись группы сама является handle, который возвращает
176
+ * `effectGroup`.
177
+ */
178
+ start(slot: number, initial?: RaphEffectInitialMode): void;
179
+ /**
180
+ * Внутренний initial invocation renderer; публичный start не меняет signature.
181
+ * Continuation не сохраняется в записи и не вызывается при последующих runs.
182
+ * @internal
183
+ */
184
+ _start(slot: number, initial: RaphEffectInitialMode, onExecutionFailure: (error: unknown) => never): void;
185
+ pause(): void;
186
+ resume(): void;
187
+ /**
188
+ * Полностью освобождает binding; безопасен для повторного и вложенного вызова:
189
+ * снимает запись со списка владельца, останавливает engine effect или watch
190
+ * lifecycle и сбрасывает состояние pipeline. Engine вызывает его как task hook
191
+ * остановленного effect, владелец — как элемент списка ресурсов, а
192
+ * пользователь — через disposer.
193
+ */
194
+ dispose(): void;
195
+ }