@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,239 @@
1
+ import { Disposer } from '../../reactivity/types';
2
+ import { RaphScope } from '../ownership/RaphScope';
3
+ export type RaphTraceKind = 'action' | 'error' | 'machine' | 'phase';
4
+ export type RaphTraceGuardMode = 'all' | 'failed' | 'none';
5
+ export type RaphTraceContextMode = 'keys' | 'none';
6
+ export interface RaphTraceOptions {
7
+ readonly capacity?: number;
8
+ readonly context?: RaphTraceContextMode;
9
+ readonly guards?: RaphTraceGuardMode;
10
+ readonly include?: readonly RaphTraceKind[];
11
+ }
12
+ export interface RaphDebugOptions {
13
+ readonly trace?: false | RaphTraceOptions;
14
+ }
15
+ export interface RaphTraceEventInput {
16
+ readonly causeId?: number;
17
+ readonly context?: Readonly<Record<string, unknown>>;
18
+ readonly details?: Readonly<Record<string, unknown>>;
19
+ readonly guard?: 'failed' | 'passed';
20
+ readonly kind: RaphTraceKind;
21
+ readonly name: string;
22
+ readonly operationId?: number;
23
+ readonly status?: 'end' | 'error' | 'ignored' | 'start';
24
+ }
25
+ export interface RaphTraceEvent {
26
+ readonly causeId?: number;
27
+ readonly contextKeys?: readonly string[];
28
+ readonly details?: Readonly<Record<string, unknown>>;
29
+ readonly guard?: 'failed' | 'passed';
30
+ readonly kind: RaphTraceKind;
31
+ readonly name: string;
32
+ readonly operationId?: number;
33
+ readonly sequence: number;
34
+ readonly status?: 'end' | 'error' | 'ignored' | 'start';
35
+ readonly timestamp: number;
36
+ }
37
+ export interface RaphTraceReadOptions {
38
+ readonly limit?: number;
39
+ readonly since?: number;
40
+ }
41
+ export interface RaphTraceStatus {
42
+ readonly capacity: number;
43
+ readonly context: RaphTraceContextMode;
44
+ readonly enabled: boolean;
45
+ readonly guards: RaphTraceGuardMode;
46
+ readonly include: readonly RaphTraceKind[];
47
+ readonly size: number;
48
+ }
49
+ export interface RaphDebugTraceApi {
50
+ clear: () => void;
51
+ read: (options?: RaphTraceReadOptions) => readonly RaphTraceEvent[];
52
+ start: (options?: RaphTraceOptions) => void;
53
+ status: () => RaphTraceStatus;
54
+ stop: () => void;
55
+ }
56
+ export interface RaphMachineDebugSnapshot {
57
+ readonly active: readonly string[];
58
+ readonly contextKeys: readonly string[];
59
+ readonly id: string;
60
+ readonly modelId: string;
61
+ readonly meta: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
62
+ readonly ownerId: string;
63
+ readonly parentId?: string;
64
+ readonly revision: number;
65
+ readonly status: string;
66
+ readonly actors: readonly string[];
67
+ }
68
+ export interface RaphMachineDebugSummary {
69
+ readonly active: readonly string[];
70
+ readonly id: string;
71
+ readonly modelId: string;
72
+ readonly ownerId: string;
73
+ readonly parentId?: string;
74
+ readonly revision: number;
75
+ readonly status: string;
76
+ }
77
+ /** @internal */
78
+ export interface RaphMachineDebugRegistration {
79
+ readonly id: string;
80
+ readonly ownerId: string;
81
+ readonly parentId?: string;
82
+ readonly snapshot: () => RaphMachineDebugSnapshot;
83
+ }
84
+ export interface RaphDebugMachinesApi {
85
+ list: () => readonly RaphMachineDebugSummary[];
86
+ snapshot: (id: string) => RaphMachineDebugSnapshot | undefined;
87
+ }
88
+ export interface RaphDebugOwnerSnapshot {
89
+ readonly children: readonly RaphDebugOwnerSnapshot[];
90
+ readonly disposed: boolean;
91
+ readonly id: string;
92
+ readonly kind: 'node' | 'scope';
93
+ readonly resources: number;
94
+ readonly sources: number;
95
+ }
96
+ export interface RaphDebugFrameLoopSnapshot {
97
+ readonly leases: number;
98
+ readonly manual: boolean;
99
+ readonly running: boolean;
100
+ }
101
+ export interface RaphDebugSnapshot {
102
+ readonly actionDepth: number;
103
+ readonly batchDepth: number;
104
+ readonly disposed: boolean;
105
+ readonly frameLoop: RaphDebugFrameLoopSnapshot;
106
+ readonly id: string;
107
+ readonly kernelBatchDepth: number;
108
+ readonly machines: number;
109
+ readonly owners: number;
110
+ readonly pathHandles: number;
111
+ readonly pending: boolean;
112
+ readonly root: RaphDebugOwnerSnapshot;
113
+ readonly rootScope: RaphDebugOwnerSnapshot;
114
+ readonly scopes: readonly RaphDebugOwnerSnapshot[];
115
+ readonly traceEvents: number;
116
+ }
117
+ export interface RaphDebugTreeNode {
118
+ readonly children: readonly RaphDebugTreeNode[];
119
+ readonly count?: number;
120
+ readonly disposed?: boolean;
121
+ readonly id: string;
122
+ readonly kind: 'actor' | 'machine' | 'node' | 'resource' | 'runtime' | 'scope';
123
+ readonly status?: string;
124
+ }
125
+ export interface RaphDebugStats {
126
+ readonly actors: number;
127
+ readonly machines: number;
128
+ readonly nodes: number;
129
+ readonly owners: number;
130
+ readonly pathHandles: number;
131
+ readonly pending: boolean;
132
+ readonly resources: number;
133
+ readonly scopes: number;
134
+ readonly sources: number;
135
+ readonly traceEvents: number;
136
+ }
137
+ export interface RaphRuntimeDebug {
138
+ readonly machines: RaphDebugMachinesApi;
139
+ readonly trace: RaphDebugTraceApi;
140
+ getTree: () => RaphDebugTreeNode;
141
+ snapshot: () => RaphDebugSnapshot;
142
+ stats: () => RaphDebugStats;
143
+ }
144
+ /**
145
+ * Хранит opt-in trace и ленивый registry machine diagnostics одного Runtime.
146
+ * @internal
147
+ */
148
+ export declare class RaphDebugController {
149
+ private _capacity;
150
+ private _context;
151
+ private _guards;
152
+ private _include;
153
+ private _enabled;
154
+ private _events;
155
+ private _eventStart;
156
+ private _eventSize;
157
+ private _sequence;
158
+ private _operationSequence;
159
+ private _machines;
160
+ readonly trace: RaphDebugTraceApi;
161
+ readonly machines: RaphDebugMachinesApi;
162
+ /**
163
+ * Создаёт controller; ring buffer появляется только при включённом trace.
164
+ */
165
+ constructor(options?: RaphDebugOptions);
166
+ /**
167
+ * Включает trace с текущими или явно переданными настройками.
168
+ */
169
+ start(options?: RaphTraceOptions): void;
170
+ /**
171
+ * Останавливает запись, сохраняя уже накопленные events.
172
+ */
173
+ stop(): void;
174
+ /**
175
+ * Удаляет все накопленные events, не меняя status trace.
176
+ */
177
+ clear(): void;
178
+ /**
179
+ * Формирует immutable chronological copy ring buffer.
180
+ */
181
+ read(options?: RaphTraceReadOptions): readonly RaphTraceEvent[];
182
+ /**
183
+ * Возвращает текущую конфигурацию и заполнение buffer.
184
+ */
185
+ status(): RaphTraceStatus;
186
+ /**
187
+ * Выделяет operation ID только когда trace активен для этого kind.
188
+ * @internal
189
+ */
190
+ nextOperationId(kind: RaphTraceKind): number | undefined;
191
+ /**
192
+ * Проверяет active trace path без выделения operation ID.
193
+ *
194
+ * @internal
195
+ */
196
+ traces(kind: RaphTraceKind): boolean;
197
+ /**
198
+ * Записывает одно событие без allocations/timestamp на disabled path.
199
+ * @internal
200
+ */
201
+ record(input: RaphTraceEventInput): void;
202
+ /**
203
+ * Регистрирует read-only machine projection без импорта machine engine в Runtime.
204
+ * @internal
205
+ */
206
+ registerMachine(registration: RaphMachineDebugRegistration): Disposer;
207
+ /**
208
+ * Проверяет diagnostic identity без создания public snapshot.
209
+ *
210
+ * @internal
211
+ */
212
+ hasMachine(id: string): boolean;
213
+ /**
214
+ * Возвращает compact machine summaries без выполнения guards.
215
+ */
216
+ listMachines(): readonly RaphMachineDebugSummary[];
217
+ /**
218
+ * Читает готовый machine snapshot; transition selection и guards не вызываются.
219
+ */
220
+ machineSnapshot(id: string): RaphMachineDebugSnapshot | undefined;
221
+ /**
222
+ * Возвращает число зарегистрированных machines.
223
+ * @internal
224
+ */
225
+ get machineCount(): number;
226
+ /**
227
+ * Возвращает число текущих trace events.
228
+ * @internal
229
+ */
230
+ get traceSize(): number;
231
+ /** Возвращает число child actors по уже готовым snapshots. @internal */
232
+ get actorCount(): number;
233
+ /** Группирует machine/actor ветви по фактическому lifecycle owner. @internal */
234
+ machineTreeNodesByOwner(): ReadonlyMap<string, readonly RaphDebugTreeNode[]>;
235
+ private _applyOptions;
236
+ private _ensureBuffer;
237
+ }
238
+ export declare function createOwnerSnapshot(owner: RaphScope): RaphDebugOwnerSnapshot;
239
+ export declare function createOwnerTree(owner: RaphScope, machinesByOwner?: ReadonlyMap<string, readonly RaphDebugTreeNode[]>): RaphDebugTreeNode;
@@ -14,3 +14,8 @@ export declare class RaphDisposedError extends RaphError {
14
14
  */
15
15
  export declare class RaphCrossRuntimeError extends RaphError {
16
16
  }
17
+ /**
18
+ * Сообщает об ошибке пользовательского phase processor или task resolution.
19
+ */
20
+ export declare class RaphPhaseProcessError extends RaphError {
21
+ }
@@ -0,0 +1,98 @@
1
+ import { Disposer } from '../../reactivity/types';
2
+ import { RaphEffectGroup, RaphEffectGroupOptions, RaphEffectGroupSlot, RaphEffectOptions, RaphOwnerWatchSource, RaphPhaseBody, RaphPhaseEffect, RaphWatchOptions, RaphWatchSource } from '../phases/phase.types';
3
+ import { RaphRuntime } from '../RaphRuntime';
4
+ import { RaphScope } from './RaphScope';
5
+ /** Pauses phase deliveries without detaching dependencies or losing accumulated causes. */
6
+ export declare class RaphEffectScope {
7
+ private readonly _owner;
8
+ private _registrations;
9
+ private _pruneAt;
10
+ private _children;
11
+ private _selfPaused;
12
+ private _ancestorPauses;
13
+ private _disposed;
14
+ private readonly _releaseOwner;
15
+ private readonly _parent;
16
+ constructor(_owner: RaphScope, parent?: RaphEffectScope | null);
17
+ get paused(): boolean;
18
+ get disposed(): boolean;
19
+ fork(owner: RaphScope): RaphEffectScope;
20
+ effect(phase: string, callback: RaphPhaseEffect, options?: RaphEffectOptions): Disposer;
21
+ /**
22
+ * Регистрирует в этой группе phase effect без task и без disposer: тело
23
+ * вызывается без аргументов, а binding живёт до освобождения группы или её
24
+ * владельца. Pause и resume группы действуют на него так же, как на effect,
25
+ * зарегистрированный через `effect()`.
26
+ *
27
+ * Binding, зарегистрированный внутри тела другого effect, останавливает ещё и
28
+ * перезапуск этого effect. Остановленный binding больше не исполняется и не
29
+ * реагирует на pause и resume; группа забывает его не сразу, а когда число её
30
+ * регистраций удваивается, поэтому остановленных регистраций в группе не
31
+ * больше, чем действующих, либо меньше `PRUNE_FLOOR`.
32
+ */
33
+ bindEffect(phase: string, body: RaphPhaseBody, options?: RaphEffectOptions): void;
34
+ /**
35
+ * Регистрирует в этой группе регистраций группу из `count` phase effects на
36
+ * одном binding, как `owner.effectGroup()`: без task и без disposer, с
37
+ * отдельным набором зависимостей у каждого slot и с запуском slots через
38
+ * `start()` возвращённой группы. Pause и resume действуют на все slots
39
+ * сразу; slots, запущенные или изменившиеся за время pause, исполняются
40
+ * одной доставкой после resume. Binding живёт до освобождения этой группы
41
+ * регистраций или её владельца.
42
+ *
43
+ * Pause изнутри тела slot останавливает доставку: оставшиеся slots
44
+ * исполняются после resume, и причины прерванной доставки приходят в
45
+ * `causes` следующей целиком, вместе с причинами уже исполненных slots.
46
+ *
47
+ * Освобождение отличается от отдельных bindings этой же группы регистраций:
48
+ * slots останавливаются в порядке, обратном порядку номеров, а не в порядке
49
+ * регистрации, и несколько сбоев их cleanup приходят одним вложенным
50
+ * `AggregateError` с сообщением `[Raph] Effect group disposal failed.`.
51
+ *
52
+ * @typeParam Context — значение, которое получает тело каждого slot.
53
+ * @param phase Имя объявленной phase.
54
+ * @param count Число slots: целое от 1 до 4294967293, иначе `RangeError`.
55
+ * @param runSlot Тело slot: получает запуск с `context` и номером slot.
56
+ * @param context Значение, которое группа передаёт телу каждого slot.
57
+ * @param options `priority` task группы, как у `effect()`.
58
+ */
59
+ effectGroup<Context>(phase: string, count: number, runSlot: RaphEffectGroupSlot<Context>, context: Context, options?: RaphEffectGroupOptions): RaphEffectGroup;
60
+ watch(source: RaphOwnerWatchSource, phase: string, callback: RaphPhaseEffect, options?: RaphWatchOptions): Disposer;
61
+ /**
62
+ * Внутренний путь renderer сохраняет pause ancestry и late-disposal tracking.
63
+ * Возвращаемый disposer renderer не использует; регистрация остаётся у scope.
64
+ * @internal
65
+ */
66
+ _registerEffect(phase: string, callback: RaphPhaseEffect, options: RaphEffectOptions, taskless: boolean, onExecutionFailure: (error: unknown) => never, isExecutionCancelled?: () => boolean): void;
67
+ /** @internal */
68
+ _registerWatch(source: RaphWatchSource, phase: string, callback: RaphPhaseEffect, options: RaphWatchOptions, onExecutionFailure: (error: unknown) => never, isExecutionCancelled?: () => boolean): void;
69
+ /** @internal */
70
+ _registerEffectGroup<Context>(phase: string, count: number, runSlot: RaphEffectGroupSlot<Context>, context: Context, options?: RaphEffectGroupOptions): ReturnType<RaphRuntime['_effectGroupRegistration']>;
71
+ pause(): void;
72
+ resume(): void;
73
+ private _pause;
74
+ private _resume;
75
+ dispose(): void;
76
+ private _add;
77
+ /**
78
+ * Вносит регистрацию в группу и возвращает её элемент либо `undefined`,
79
+ * когда группа уже освобождена. Disposer здесь не создаётся: его строит
80
+ * только `_add()`, поэтому `bindEffect()` обходится без closure.
81
+ */
82
+ private _track;
83
+ /**
84
+ * Забывает регистрации, которые уже остановлены не через disposer группы:
85
+ * binding, вложенный в тело другого effect, останавливает engine при
86
+ * перезапуске этого effect, а у `bindEffect()` нет disposer, который убрал бы
87
+ * его отсюда. Без этого группа держала бы тело каждого такого binding до
88
+ * собственного освобождения.
89
+ *
90
+ * Проход выполняется, когда число регистраций достигает порога, и ставит
91
+ * следующий порог вдвое выше числа оставшихся: цена регистрации остаётся
92
+ * постоянной в среднем.
93
+ */
94
+ private _prune;
95
+ private _assertAlive;
96
+ private _addChild;
97
+ private _changeAncestorPause;
98
+ }
@@ -0,0 +1,310 @@
1
+ import { DisposalFailure } from '../../reactivity/disposal';
2
+ import { RaphRuntime } from '../RaphRuntime';
3
+ import { RaphScope } from './RaphScope';
4
+ export interface NodeOptions {
5
+ readonly id?: string;
6
+ readonly priority?: number;
7
+ readonly parent?: RaphNode;
8
+ readonly meta?: Readonly<Record<string, unknown>>;
9
+ readonly type?: string;
10
+ }
11
+ /**
12
+ * Запись, которая знает свою node: сама RaphNode либо объект потребителя с
13
+ * полем `node`. Позволяет передать на удаление уже существующий массив записей
14
+ * без копии в массив nodes.
15
+ */
16
+ export interface RaphNodeHolder {
17
+ readonly node: RaphNode;
18
+ }
19
+ /** Scope with an explicit parent/children ownership position. */
20
+ export declare class RaphNode<TApi = unknown> extends RaphScope {
21
+ #private;
22
+ priority: number;
23
+ private _parent;
24
+ private _prevSibling;
25
+ private _nextSibling;
26
+ private _firstChild;
27
+ private _lastChild;
28
+ /**
29
+ * Число прямых детей. Structural owner читает его, чтобы узнать состав
30
+ * списка, не строя массив `children`; изменяет поле только сама node.
31
+ *
32
+ * @internal
33
+ */
34
+ _childCount: number;
35
+ private _childArray;
36
+ private _published;
37
+ private _meta;
38
+ type: string;
39
+ private _subtreeIdentity;
40
+ constructor(parent: RaphNode | RaphRuntime | null, options?: Omit<NodeOptions, 'parent'>, runtime?: RaphRuntime, publication?: never);
41
+ /**
42
+ * Возвращает id; номер id по умолчанию превращается в `node-N` при первом чтении.
43
+ */
44
+ get id(): string;
45
+ /**
46
+ * Возвращает изменяемую metadata node; объект создаётся при первом чтении.
47
+ */
48
+ get meta(): Record<string, unknown>;
49
+ set meta(value: Record<string, unknown>);
50
+ /**
51
+ * Возвращает api, зафиксированный после setup; присваивание снаружи запрещено.
52
+ */
53
+ get api(): Readonly<TApi>;
54
+ /**
55
+ * Отличает subtree granule от self granule; identity создаётся по запросу.
56
+ * @internal
57
+ */
58
+ get _subtreeSourceIdentity(): object;
59
+ get node(): RaphNode<TApi>;
60
+ get parent(): RaphNode | null;
61
+ /**
62
+ * Возвращает прямых детей в их порядке. Массив действителен до следующей
63
+ * структурной mutation этой node; после неё порядок даёт новое чтение.
64
+ *
65
+ * Добавление в конец, удаление последнего child и `reorderChildren`
66
+ * обновляют уже выданный массив на месте. После удаления любого другого
67
+ * child — первого или из середины — выданный массив либо остаётся прежним, и
68
+ * следующее чтение строит новый, либо обновляется на месте — второе
69
+ * происходит, пока у Runtime есть подписчик на node.
70
+ *
71
+ * `moveChild` и `_swapChildren` следуют тому же правилу, что и удаление не
72
+ * последнего child: без подписчика на node выданный массив остаётся прежним,
73
+ * с подписчиком получает новый порядок на месте. `_disposeChildren` забывает
74
+ * выданный массив, если набор начинается с первого child списка: массив
75
+ * хранит состав на начало удаления. Набор, который начинается с другого
76
+ * child, следует правилу отдельных удалений.
77
+ *
78
+ * Собственный dispose node выданный массив не обновляет: пока node удаляет
79
+ * своих детей, он хранит их состав на начало удаления, а после удаления
80
+ * последнего child становится пустым. Оставшихся детей в это время даёт
81
+ * новое чтение; выданный им массив остаётся массивом node до конца удаления:
82
+ * дети выходят из него на месте и при отсутствии подписчика на node, а после
83
+ * последнего child он тоже пуст.
84
+ */
85
+ get children(): readonly RaphNode[];
86
+ addChild(node: RaphNode): boolean;
87
+ /**
88
+ * Ставит прямых детей в порядок `nodes`: в нём каждый прямой child ровно
89
+ * один раз. Без подписчика на node порядок проверяется и применяется по
90
+ * связям между siblings, без Set и Map.
91
+ *
92
+ * Каждый элемент `nodes` читается один раз, до проверки. Чтение, которое само
93
+ * меняет дерево — элемент Proxy либо accessor, — не оставляет списки в
94
+ * промежуточном состоянии: порядок проверяется по составу детей после чтения.
95
+ */
96
+ reorderChildren(nodes: readonly RaphNode[]): void;
97
+ /**
98
+ * Ставит прямого child перед прямым child `before` либо в конец списка, если
99
+ * `before === null`. Без подписчика на node меняются только связи самого
100
+ * child и его соседей: цена не зависит от числа детей. С подписчиком каждый
101
+ * child, чей индекс изменился, получает тот же structure cause, что и после
102
+ * `reorderChildren` с итоговым порядком.
103
+ */
104
+ moveChild(child: RaphNode, before: RaphNode | null): void;
105
+ /**
106
+ * Меняет местами двух прямых детей. Без подписчика на node правятся только
107
+ * связи этих детей и их соседей; с подписчиком оба child получают те же
108
+ * structure causes, что и после `reorderChildren` с итоговым порядком.
109
+ *
110
+ * @internal
111
+ */
112
+ _swapChildren(first: RaphNode, second: RaphNode): void;
113
+ /**
114
+ * Удаляет детей одной границей удаления и возвращает их ошибки вместо throw.
115
+ *
116
+ * Без аргументов удаляются все дети node, какими они были на момент вызова.
117
+ * С `holders` удаляются nodes записей `holders[start]`…`holders[end - 1]`:
118
+ * ожидается, что это прямые дети node. Массив записей служит snapshot набора
119
+ * и не копируется: child, которого cleanup более раннего child уже удалил,
120
+ * пропускается, перенесённый к другому parent всё равно удаляется, а дети,
121
+ * добавленные во время удаления, в набор не входят.
122
+ *
123
+ * Каждый child удаляется собственным `dispose()` в порядке набора: порядок
124
+ * cleanup, structure causes при наличии подписчика и ошибка каждого child те
125
+ * же, что у отдельных вызовов `dispose()` внутри одного batch. Ошибка child
126
+ * не прерывает удаление остальных; ошибки возвращаются в порядке набора,
127
+ * последней — ошибка phases, исполненных при закрытии границы.
128
+ *
129
+ * Граница одна на весь набор: phases, запрошенные cleanup, исполняются после
130
+ * последнего child, а не между детьми. Это граница удаления владельца, как у
131
+ * `RaphNode.dispose()`, а не reactive batch: запись signal из cleanup
132
+ * применяется сразу, и её phase tasks встают в очередь в момент записи, в
133
+ * порядке отдельных удалений. Внутри `batch` та же запись откладывается до
134
+ * его конца, поэтому порядок phase tasks у batch другой.
135
+ *
136
+ * Выданный массив `children` node забывает до первого child, если набор
137
+ * начинается с первого child списка либо набором передан сам этот массив: он
138
+ * остаётся у того, кто его держит, с составом на начало удаления, и удаление
139
+ * набора от первого child списка не правит его через `shift`, `splice` или
140
+ * `indexOf` даже при подписчике на node. Набор, который начинается с другого
141
+ * child, следует правилу отдельных `dispose()`: последний child уходит из
142
+ * массива через pop, остальные вырезаются на месте при подписчике на node, а
143
+ * без подписчика массив забывается первым же удалением.
144
+ *
145
+ * @internal
146
+ */
147
+ _disposeChildren(): unknown[] | undefined;
148
+ /** @internal */
149
+ _disposeChildren(holders: readonly RaphNodeHolder[], start?: number, end?: number): unknown[] | undefined;
150
+ options(options: Pick<NodeOptions, 'meta' | 'priority' | 'type'>): void;
151
+ /** Invalidates coarse self/subtree/runtime granules for non-reactive state. */
152
+ touch(metadata?: unknown): void;
153
+ remove(): void;
154
+ dispose(): void;
155
+ /** Calls actual public dispatch once; only native disposal can return provenance. @internal */
156
+ _disposeForOwner(): DisposalFailure | undefined;
157
+ /** Result of this exact framework call, without changing raw public disposal. @internal */
158
+ _disposeWithOutcome(): DisposalFailure | undefined;
159
+ /**
160
+ * Фиксирует api после setup; object api замораживается, как и раньше.
161
+ * Исключение — Runtime signal, возвращённый как api: значение, запись графа
162
+ * и связи подписчиков лежат в его собственных полях, поэтому заморозка
163
+ * лишила бы его записи, отслеживаемого чтения, watch и освобождения вместе
164
+ * с владельцем.
165
+ * @internal
166
+ */
167
+ _setApi(api: TApi): void;
168
+ /** Publishes a fully initialized provisional subtree. @internal */
169
+ _publishCreation(): void;
170
+ /** @internal */
171
+ _isPublished(): boolean;
172
+ /**
173
+ * Сообщает, стоит ли node в списке детей своего parent. Node без parent и
174
+ * node, чей parent уже сбросил свой список, в нём не стоят.
175
+ *
176
+ * @internal
177
+ */
178
+ _isLinked(): boolean;
179
+ /**
180
+ * Добавляет в `into` всех потомков node по связям списков детей: каждый
181
+ * child сразу за своим parent, дети — в порядке списка. Обход не строит
182
+ * массивы `children` и не зависит от глубины стека.
183
+ *
184
+ * @internal
185
+ */
186
+ _collectDescendants(into: RaphScope[]): void;
187
+ /**
188
+ * Прибавляет к `totals` число ресурсов и sources самой node и всех её
189
+ * потомков. Обход тот же, что у `_collectDescendants`, но владельцев он не
190
+ * собирает: подсчёт для diagnostics не выделяет память по числу владельцев.
191
+ *
192
+ * @internal
193
+ */
194
+ _countSubtree(totals: {
195
+ resources: number;
196
+ sources: number;
197
+ }): void;
198
+ /**
199
+ * Ищет node по id в своём поддереве. Порядок обхода прежний: сама node,
200
+ * затем дети от последнего к первому, каждый вместе со своим поддеревом.
201
+ *
202
+ * @internal
203
+ */
204
+ _findNode(id: string): RaphNode | undefined;
205
+ /**
206
+ * Применяет порядок детей `nodes`. Возвращает `false` и оставляет список
207
+ * прежним, если `nodes` не содержит каждого живого прямого child ровно один
208
+ * раз. Прежние индексы собираются только при подписчике на node: без него
209
+ * structure cause никто не получит.
210
+ */
211
+ private _applyChildOrder;
212
+ /**
213
+ * Проверяет порядок и переставляет связи за три прохода без Set и Map.
214
+ * Сначала каждый child списка получает метку: его `_prevSibling` указывает на
215
+ * parent, чего у прямого child не бывает. Затем метка снимается у каждой node
216
+ * из `nodes`: node без метки — чужая, удаляемая либо повторная. При отказе
217
+ * и при ошибке чтения `nodes` связи `_prevSibling` восстанавливаются по
218
+ * нетронутым `_nextSibling`.
219
+ *
220
+ * `nodes` — собственная копия порядка: её чтение не исполняет чужой код, и
221
+ * между расстановкой меток и их снятием дерево никто не меняет.
222
+ */
223
+ private _relinkChildren;
224
+ /**
225
+ * Сообщает причину отказа порядка `nodes` теми же ошибками и в том же
226
+ * порядке, что и прежняя проверка; Set нужен только здесь.
227
+ */
228
+ private _rejectChildOrder;
229
+ /**
230
+ * Запоминает индекс каждого child до перестановки; нужен только для
231
+ * structure causes.
232
+ */
233
+ private _indexChildren;
234
+ /**
235
+ * Завершает перестановку связей при подписчике на node: массив детей
236
+ * получает новый порядок на месте либо строится, и каждый child со
237
+ * сменившимся индексом получает structure cause.
238
+ */
239
+ private _publishChildOrder;
240
+ /**
241
+ * Публикует structure cause каждому child, чей индекс изменился, в новом
242
+ * порядке детей и одной границей mutation.
243
+ */
244
+ private _notifyChildOrder;
245
+ /**
246
+ * Переставляет child перед `before` либо в конец списка, меняя только связи
247
+ * child и его соседей. Вызывающий гарантирует, что оба — дети этой node и
248
+ * что child ещё не стоит перед `before`.
249
+ */
250
+ private _relinkBefore;
251
+ /**
252
+ * Строит массив детей по связям и запоминает его для следующих чтений.
253
+ */
254
+ private _materializeChildren;
255
+ /**
256
+ * Собирает детей по связям в новый массив, не запоминая его.
257
+ */
258
+ private _collectChildren;
259
+ /**
260
+ * Очищает и забывает выданный массив детей, если он есть.
261
+ */
262
+ private _clearChildArray;
263
+ /**
264
+ * Добавляет child в конец списка; уже выданный массив получает его через push.
265
+ */
266
+ private _appendChild;
267
+ /**
268
+ * Возвращает позицию node среди детей `parent` либо -1, если `parent` уже
269
+ * сбросил свой список и node в нём не состоит. Нужна только для structure
270
+ * cause. Первый и последний child определяются по связям, остальные — через
271
+ * `indexOf` по массиву детей, как и раньше; массив строится один раз и затем
272
+ * поддерживается, поэтому обход связей на каждый запрос не повторяется.
273
+ */
274
+ private _indexIn;
275
+ /**
276
+ * Вынимает node из списка `parent` и обнуляет её связи, чтобы удержанная node
277
+ * не удерживала соседей. Связи правятся за постоянное время.
278
+ *
279
+ * Уже выданный массив теряет последний child через pop. Любой другой child —
280
+ * первый или из середины — вырезается на месте, только если его `index`
281
+ * известен (>= 0) либо у Runtime есть подписчик на node: тогда массив ещё
282
+ * понадобится для индексов и перестраивать его по связям после каждого
283
+ * удаления дороже. Иначе массив не правится, а отбрасывается, и следующее
284
+ * чтение `children` строит новый: очистка списка от первого child к
285
+ * последнему не сдвигает массив на каждое удаление.
286
+ *
287
+ * Пока parent удаляет собственных детей, массив не отбрасывается: его мог
288
+ * запросить только cleanup уже удаляемого child, и `_resetChildList` обязан
289
+ * очистить именно его. Отброшенный массив остался бы у cleanup с удалёнными
290
+ * детьми внутри.
291
+ */
292
+ private _unlinkFrom;
293
+ /**
294
+ * Возвращает snapshot детей для их удаления. Уже выданный массив
295
+ * переиспользуется без копии и на время удаления перестаёт быть массивом
296
+ * node: дети выходят из списка только через связи, snapshot не сдвигается, и
297
+ * удаление не платит за `shift` на каждого child. Иначе snapshot строится по
298
+ * связям.
299
+ */
300
+ private _takeChildSnapshot;
301
+ /**
302
+ * Сбрасывает собственный список после удаления детей. `snapshot` мог быть
303
+ * выданным массивом: как и раньше, у удалённой node он остаётся пустым.
304
+ * Массив, запрошенный во время удаления, очищается так же: `_unlinkFrom` не
305
+ * отбрасывает его, пока node удаляет своих детей.
306
+ */
307
+ private _resetChildList;
308
+ }
309
+ /** Creates an unpublished node that Runtime.node() commits after setup. @internal */
310
+ export declare function createProvisionalNode<TApi>(parent: RaphNode, options: Omit<NodeOptions, 'parent'>, runtime: RaphRuntime): RaphNode<TApi>;