@raphy-js/raph 1.0.0-dev.18

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 (186) hide show
  1. package/LICENSE +202 -0
  2. package/dist/api/Raph.d.ts +97 -0
  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 +25 -0
  6. package/dist/api/types.d.ts +170 -0
  7. package/dist/core-CyilRD7s.js +1055 -0
  8. package/dist/core-ugchZNqC.cjs +1 -0
  9. package/dist/debug/api/Raph.cjs +1 -0
  10. package/dist/debug/api/Raph.js +421 -0
  11. package/dist/debug/api/RaphFacadeSession.cjs +1 -0
  12. package/dist/debug/api/RaphFacadeSession.js +306 -0
  13. package/dist/debug/api/RaphReactivityInstance.cjs +1 -0
  14. package/dist/debug/api/RaphReactivityInstance.js +149 -0
  15. package/dist/debug/api/errors.cjs +1 -0
  16. package/dist/debug/api/errors.js +17 -0
  17. package/dist/debug/api/types.cjs +1 -0
  18. package/dist/debug/api/types.js +1 -0
  19. package/dist/debug/path/DataPath.cjs +1 -0
  20. package/dist/debug/path/DataPath.js +394 -0
  21. package/dist/debug/path/PathRouter.cjs +1 -0
  22. package/dist/debug/path/PathRouter.js +86 -0
  23. package/dist/debug/path/RaphKernel.cjs +1 -0
  24. package/dist/debug/path/RaphKernel.js +687 -0
  25. package/dist/debug/path/data-path.types.cjs +1 -0
  26. package/dist/debug/path/data-path.types.js +1 -0
  27. package/dist/debug/path/data-path.utils.cjs +1 -0
  28. package/dist/debug/path/data-path.utils.js +56 -0
  29. package/dist/debug/path/derived/DerivedRegistry.cjs +1 -0
  30. package/dist/debug/path/derived/DerivedRegistry.js +157 -0
  31. package/dist/debug/path/derived/RaphDerivedHandle.cjs +1 -0
  32. package/dist/debug/path/derived/RaphDerivedHandle.js +125 -0
  33. package/dist/debug/path/derived/derived-collection.types.cjs +1 -0
  34. package/dist/debug/path/derived/derived-collection.types.js +1 -0
  35. package/dist/debug/path/derived/derived-collection.utils.cjs +1 -0
  36. package/dist/debug/path/derived/derived-collection.utils.js +179 -0
  37. package/dist/debug/path/derived/derived-strategy.types.cjs +1 -0
  38. package/dist/debug/path/derived/derived-strategy.types.js +1 -0
  39. package/dist/debug/path/derived/derived-strategy.utils.cjs +1 -0
  40. package/dist/debug/path/derived/derived-strategy.utils.js +20 -0
  41. package/dist/debug/path/meta/MetaController.cjs +1 -0
  42. package/dist/debug/path/meta/MetaController.js +214 -0
  43. package/dist/debug/path/meta/RaphMeta.cjs +1 -0
  44. package/dist/debug/path/meta/RaphMeta.js +68 -0
  45. package/dist/debug/path/meta/RaphMetaStore.cjs +1 -0
  46. package/dist/debug/path/meta/RaphMetaStore.js +184 -0
  47. package/dist/debug/path/meta/meta.types.cjs +1 -0
  48. package/dist/debug/path/meta/meta.types.js +1 -0
  49. package/dist/debug/path/path.types.cjs +1 -0
  50. package/dist/debug/path/path.types.js +1 -0
  51. package/dist/debug/path/pathSegmentKey.cjs +1 -0
  52. package/dist/debug/path/pathSegmentKey.js +12 -0
  53. package/dist/debug/path/storage/AdapterPathStore.cjs +1 -0
  54. package/dist/debug/path/storage/AdapterPathStore.js +133 -0
  55. package/dist/debug/path/storage/DefaultDataAdapter.cjs +1 -0
  56. package/dist/debug/path/storage/DefaultDataAdapter.js +356 -0
  57. package/dist/debug/path/storage/PathEventHub.cjs +1 -0
  58. package/dist/debug/path/storage/PathEventHub.js +148 -0
  59. package/dist/debug/path/storage/PathStore.cjs +1 -0
  60. package/dist/debug/path/storage/PathStore.js +326 -0
  61. package/dist/debug/path/storage/createDataDraft.cjs +1 -0
  62. package/dist/debug/path/storage/createDataDraft.js +71 -0
  63. package/dist/debug/path/storage/data-adapter.types.cjs +1 -0
  64. package/dist/debug/path/storage/data-adapter.types.js +1 -0
  65. package/dist/debug/reactivity/engine.cjs +1 -0
  66. package/dist/debug/reactivity/engine.js +1305 -0
  67. package/dist/debug/reactivity/reactive-object.cjs +1 -0
  68. package/dist/debug/reactivity/reactive-object.js +280 -0
  69. package/dist/debug/reactivity/scope.cjs +1 -0
  70. package/dist/debug/reactivity/scope.js +274 -0
  71. package/dist/debug/reactivity/types.cjs +1 -0
  72. package/dist/debug/reactivity/types.js +1 -0
  73. package/dist/debug/reactivity/watch.cjs +1 -0
  74. package/dist/debug/reactivity/watch.js +64 -0
  75. package/dist/debug/runtime/RaphRuntime.cjs +1 -0
  76. package/dist/debug/runtime/RaphRuntime.js +979 -0
  77. package/dist/debug/runtime/diagnostics/RaphDebug.cjs +1 -0
  78. package/dist/debug/runtime/diagnostics/RaphDebug.js +297 -0
  79. package/dist/debug/runtime/errors.cjs +1 -0
  80. package/dist/debug/runtime/errors.js +15 -0
  81. package/dist/debug/runtime/ownership/RaphEffectScope.cjs +1 -0
  82. package/dist/debug/runtime/ownership/RaphEffectScope.js +171 -0
  83. package/dist/debug/runtime/ownership/RaphNode.cjs +1 -0
  84. package/dist/debug/runtime/ownership/RaphNode.js +206 -0
  85. package/dist/debug/runtime/ownership/RaphScope.cjs +1 -0
  86. package/dist/debug/runtime/ownership/RaphScope.js +101 -0
  87. package/dist/debug/runtime/ownership/parent-graph.types.cjs +1 -0
  88. package/dist/debug/runtime/ownership/parent-graph.types.js +1 -0
  89. package/dist/debug/runtime/ownership/parentGraph.cjs +1 -0
  90. package/dist/debug/runtime/ownership/parentGraph.js +10 -0
  91. package/dist/debug/runtime/ownership/throwDisposalErrors.cjs +1 -0
  92. package/dist/debug/runtime/ownership/throwDisposalErrors.js +9 -0
  93. package/dist/debug/runtime/phases/RaphFrameLoop.cjs +1 -0
  94. package/dist/debug/runtime/phases/RaphFrameLoop.js +106 -0
  95. package/dist/debug/runtime/phases/RaphPhasePipeline.cjs +1 -0
  96. package/dist/debug/runtime/phases/RaphPhasePipeline.js +587 -0
  97. package/dist/debug/runtime/phases/orderPhaseTasks.cjs +1 -0
  98. package/dist/debug/runtime/phases/orderPhaseTasks.js +59 -0
  99. package/dist/debug/runtime/phases/phase.types.cjs +1 -0
  100. package/dist/debug/runtime/phases/phase.types.js +8 -0
  101. package/dist/debug/runtime/reactivity/PathHandle.cjs +1 -0
  102. package/dist/debug/runtime/reactivity/PathHandle.js +175 -0
  103. package/dist/debug/runtime/reactivity/RaphMetaSource.cjs +1 -0
  104. package/dist/debug/runtime/reactivity/RaphMetaSource.js +112 -0
  105. package/dist/debug/runtime/reactivity/RaphWorkGraph.cjs +1 -0
  106. package/dist/debug/runtime/reactivity/RaphWorkGraph.js +995 -0
  107. package/dist/debug/runtime/reactivity/RuntimeReactivity.cjs +1 -0
  108. package/dist/debug/runtime/reactivity/RuntimeReactivity.js +156 -0
  109. package/dist/debug/runtime/reactivity/RuntimeWatch.cjs +1 -0
  110. package/dist/debug/runtime/reactivity/RuntimeWatch.js +88 -0
  111. package/dist/debug/runtime/reactivity/runtime-reactivity.types.cjs +1 -0
  112. package/dist/debug/runtime/reactivity/runtime-reactivity.types.js +1 -0
  113. package/dist/entrypoints/machine-testing.d.ts +2 -0
  114. package/dist/entrypoints/machine.d.ts +5 -0
  115. package/dist/entrypoints/path.d.ts +14 -0
  116. package/dist/entrypoints/reactivity.d.ts +1 -0
  117. package/dist/entrypoints/runtime.d.ts +17 -0
  118. package/dist/index.cjs +1 -0
  119. package/dist/index.js +48 -0
  120. package/dist/machine/compiler.d.ts +71 -0
  121. package/dist/machine/core.d.ts +50 -0
  122. package/dist/machine/persistence.d.ts +5 -0
  123. package/dist/machine/runtime.d.ts +4 -0
  124. package/dist/machine/testing.d.ts +43 -0
  125. package/dist/machine/types.d.ts +155 -0
  126. package/dist/machine-testing.cjs +1 -0
  127. package/dist/machine-testing.js +188 -0
  128. package/dist/machine.cjs +1 -0
  129. package/dist/machine.js +837 -0
  130. package/dist/main.d.ts +20 -0
  131. package/dist/path/DataPath.d.ts +73 -0
  132. package/dist/path/PathRouter.d.ts +21 -0
  133. package/dist/path/RaphKernel.d.ts +169 -0
  134. package/dist/path/data-path.types.d.ts +34 -0
  135. package/dist/path/data-path.utils.d.ts +9 -0
  136. package/dist/path/derived/DerivedRegistry.d.ts +67 -0
  137. package/dist/path/derived/RaphDerivedHandle.d.ts +97 -0
  138. package/dist/path/derived/derived-collection.types.d.ts +12 -0
  139. package/dist/path/derived/derived-collection.utils.d.ts +20 -0
  140. package/dist/path/derived/derived-strategy.types.d.ts +12 -0
  141. package/dist/path/derived/derived-strategy.utils.d.ts +4 -0
  142. package/dist/path/meta/MetaController.d.ts +85 -0
  143. package/dist/path/meta/RaphMeta.d.ts +45 -0
  144. package/dist/path/meta/RaphMetaStore.d.ts +45 -0
  145. package/dist/path/meta/meta.types.d.ts +31 -0
  146. package/dist/path/path.types.d.ts +27 -0
  147. package/dist/path/pathSegmentKey.d.ts +2 -0
  148. package/dist/path/storage/AdapterPathStore.d.ts +45 -0
  149. package/dist/path/storage/DefaultDataAdapter.d.ts +63 -0
  150. package/dist/path/storage/PathEventHub.d.ts +48 -0
  151. package/dist/path/storage/PathStore.d.ts +51 -0
  152. package/dist/path/storage/createDataDraft.d.ts +4 -0
  153. package/dist/path/storage/data-adapter.types.d.ts +17 -0
  154. package/dist/path.cjs +1 -0
  155. package/dist/path.js +18 -0
  156. package/dist/raph.cjs +1 -0
  157. package/dist/raph.js +48 -0
  158. package/dist/reactivity/engine.d.ts +393 -0
  159. package/dist/reactivity/reactive-object.d.ts +36 -0
  160. package/dist/reactivity/scope.d.ts +146 -0
  161. package/dist/reactivity/types.d.ts +175 -0
  162. package/dist/reactivity/watch.d.ts +15 -0
  163. package/dist/reactivity.cjs +1 -0
  164. package/dist/reactivity.js +14 -0
  165. package/dist/runtime/RaphRuntime.d.ts +225 -0
  166. package/dist/runtime/diagnostics/RaphDebug.d.ts +239 -0
  167. package/dist/runtime/errors.d.ts +21 -0
  168. package/dist/runtime/ownership/RaphEffectScope.d.ts +29 -0
  169. package/dist/runtime/ownership/RaphNode.d.ts +40 -0
  170. package/dist/runtime/ownership/RaphScope.d.ts +38 -0
  171. package/dist/runtime/ownership/parent-graph.types.d.ts +4 -0
  172. package/dist/runtime/ownership/parentGraph.d.ts +3 -0
  173. package/dist/runtime/ownership/throwDisposalErrors.d.ts +1 -0
  174. package/dist/runtime/phases/RaphFrameLoop.d.ts +51 -0
  175. package/dist/runtime/phases/RaphPhasePipeline.d.ts +79 -0
  176. package/dist/runtime/phases/orderPhaseTasks.d.ts +6 -0
  177. package/dist/runtime/phases/phase.types.d.ts +92 -0
  178. package/dist/runtime/reactivity/PathHandle.d.ts +80 -0
  179. package/dist/runtime/reactivity/RaphMetaSource.d.ts +32 -0
  180. package/dist/runtime/reactivity/RaphWorkGraph.d.ts +171 -0
  181. package/dist/runtime/reactivity/RuntimeReactivity.d.ts +45 -0
  182. package/dist/runtime/reactivity/RuntimeWatch.d.ts +34 -0
  183. package/dist/runtime/reactivity/runtime-reactivity.types.d.ts +11 -0
  184. package/dist/runtime.cjs +1 -0
  185. package/dist/runtime.js +23 -0
  186. package/package.json +141 -0
@@ -0,0 +1,393 @@
1
+ import { ComputedAccessHandle, Disposer, EffectCallback, EffectFactory, OwnedSource, OwnedSourceHooks, ReactivityOptions, ReadonlySignal, Signal, SignalAccess, WatchCallback, WatchOptions, WatchSource, WritableComputedOptions } from './types';
2
+ import { ScopeNode } from './scope';
3
+ export { ScopeNode } from './scope';
4
+ export type { Disposer, EffectCallback, EffectScheduler, EffectTask, ReactivityOptions, ReadonlySignal, Signal, WatchCallback, WatchOptions, WatchSource, WatchValue, WritableComputedOptions, } from './types';
5
+ /**
6
+ * Изолированный граф реактивности с синхронным исполнением по умолчанию.
7
+ * Состояние принадлежит полям экземпляра, алгоритмы - обычным методам прототипа.
8
+ * Только передаваемые наружу методы связаны с экземпляром один раз; очередь
9
+ * синхронного движка не проверяет внешнюю политику на каждом эффекте.
10
+ */
11
+ export declare class RaphReactivity {
12
+ private readonly adaptiveDependencyIndex;
13
+ private activeSub;
14
+ private batchDepth;
15
+ private effectReadIndex;
16
+ private effectWriteIndex;
17
+ private invalidationDepth;
18
+ private dependencyDepth;
19
+ private flushingEffects;
20
+ private readonly effectQueue;
21
+ private readonly invalidationStack;
22
+ private readonly dependencyStack;
23
+ private readonly handleReaders;
24
+ private readonly effectScheduler;
25
+ private readonly flushEffects;
26
+ /**
27
+ * Синхронная регистрация эффекта для Runtime и watch независимо от внешней политики.
28
+ * Это связанная ссылка на реализацию effect(), а не делегирующая функция.
29
+ * @internal
30
+ */
31
+ readonly _effectImmediate: EffectFactory;
32
+ /**
33
+ * Выбирает политику исполнения и сохраняет совместимость извлечённых методов.
34
+ * Тела методов находятся на прототипе; bind() выполняется только при создании
35
+ * экземпляра, чтобы Runtime и глобальный API могли передавать методы как callbacks.
36
+ * @param options Необязательная внешняя политика эффектов.
37
+ */
38
+ constructor(options?: ReactivityOptions);
39
+ /**
40
+ * Создаёт объектный signal с get/peek/set.
41
+ * get() регистрирует зависимость только при активном потребителе,
42
+ * а peek() выполняет чтение с временно отключённым отслеживанием.
43
+ */
44
+ signal<T>(initialValue: T): Signal<T>;
45
+ /**
46
+ * Возвращает стабильный глубокий Proxy для plain object или array.
47
+ * Object context и per-property sources создаются лениво внутри этого engine.
48
+ */
49
+ reactive<T extends object>(value: T): T;
50
+ /**
51
+ * - `(1)` Создаёт ленивое вычисляемое значение только для чтения;
52
+ * - `(2)` Создаёт writable computed, сохраняя исходную функцию setter;
53
+ * - `(3)` Создаёт ленивое вычисляемое значение; для объекта get/set сохраняет;
54
+ * исходную функцию записи без дополнительной обёртки.
55
+ */
56
+ computed<T>(getter: () => T): ReadonlySignal<T>;
57
+ computed<T>(options: WritableComputedOptions<T>): Signal<T>;
58
+ /**
59
+ * Создаёт эффект согласно политике экземпляра и возвращает disposer.
60
+ * Прототип содержит синхронную реализацию; при наличии scheduler конструктор
61
+ * подставляет createScheduledEffect, сохраняя этот путь как _effectImmediate.
62
+ * Вложенный эффект включается в список ресурсов активного эффекта.
63
+ * При ошибке регистрации удаляет созданные ресурсы, сохраняя обе причины сбоя.
64
+ * @param fn Синхронное тело с необязательным cleanup очередного запуска.
65
+ * @param onStop Однократная окончательная очистка, независимая от повторных запусков.
66
+ */
67
+ effect(fn: EffectCallback, onStop?: Disposer): Disposer;
68
+ /**
69
+ * Наблюдает за источниками; callback и cleanup не создают зависимостей.
70
+ */
71
+ watch<S extends WatchSource | readonly WatchSource[]>(source: S, callback: WatchCallback<S>, options?: WatchOptions): Disposer;
72
+ /**
73
+ * Группирует синхронные записи и обрабатывает эффекты после внешней границы.
74
+ * Возвращает результат операции. Если тело и очередь завершаются с ошибками,
75
+ * передаёт обе ошибки в AggregateError вместо потери первой. Не является откатом данных.
76
+ */
77
+ batch<T>(fn: () => T): T;
78
+ /**
79
+ * Выполняет синхронную операцию без добавления зависимостей текущему потребителю.
80
+ * Восстанавливает прежний контекст и при исключении. Асинхронное продолжение
81
+ * операции этим контекстом не охватывается.
82
+ */
83
+ untracked<T>(fn: () => T): T;
84
+ /**
85
+ * Создаёт владельца ресурсов в текущем графе без Runtime и фаз.
86
+ */
87
+ scope(): ScopeNode;
88
+ /**
89
+ * Создаёт запись графа с одинаковым порядком основных полей.
90
+ * Значение служит кешем signal/computed либо хранит cleanup эффекта.
91
+ * Поля внешней задачи и окончательной очистки добавляются только при необходимости.
92
+ */
93
+ private allocateGraphRecord;
94
+ /** Creates a narrow Proxy adapter over the existing intrusive graph. */
95
+ private createReactivePropertySourceBridge;
96
+ /**
97
+ * Материализует signal в графе при первом отслеживаемом чтении
98
+ * и связывает его с активным потребителем.
99
+ *
100
+ * До этого момента signal может хранить значение только в замыкании
101
+ * и вообще не создавать `ReactiveNode`.
102
+ */
103
+ private materializeSignal;
104
+ /**
105
+ * Создаёт минимальный handle computed без преждевременного выделения полей графа.
106
+ * Первый get() материализует запись на этом же объекте и заменяет метод чтения.
107
+ */
108
+ private createComputedHandle;
109
+ /**
110
+ * Создаёт эффект с одной постоянной задачей внешнего scheduler.
111
+ * Первый и последующие запуски проходят через задачу; устаревший runner после stop
112
+ * ничего не выполняет. При синхронной ошибке runner обрабатывает независимую очередь.
113
+ * @param fn Тело эффекта.
114
+ * @param onStop Однократная окончательная очистка.
115
+ */
116
+ private createScheduledEffect;
117
+ /**
118
+ * Регистрирует чтение signal и при необходимости фиксирует pending-значение.
119
+ * Текущая связь передаётся фиксации, чтобы не уведомлять читающего потребителя повторно.
120
+ */
121
+ private readSignalValue;
122
+ /**
123
+ * Записывает новое значение или откладывает его фиксацию до чтения в batch.
124
+ * Сохраняет исходное сравнение через === и учёт автора pending-записи.
125
+ * Без batch и внешней политики очередь эффектов завершается до возврата из set().
126
+ */
127
+ private writeSignalValue;
128
+ /**
129
+ * Возвращает кеш либо синхронно актуализирует вычисляемое значение.
130
+ * Неуспешное вычисление не считается значением. Даже ошибочное чтение сохраняет
131
+ * связь с активным потребителем, чтобы тот мог восстановиться при изменении источника.
132
+ */
133
+ private readComputedValue;
134
+ /**
135
+ * Выполняет первый сбор зависимостей и кеширует только успешный результат.
136
+ * При исключении оставляет состояние повторяемой ошибки, а не чистый undefined.
137
+ * Уже прочитанные зависимости сохраняются для последующего уведомления.
138
+ */
139
+ private evaluateFirstValue;
140
+ /**
141
+ * Актуализирует computed: выполняет прямой пересчёт либо проверяет зависимости.
142
+ * После ошибки getter разрешён повторный пересчёт даже без новой записи источника.
143
+ */
144
+ private refreshComputedValue;
145
+ /**
146
+ * Фиксирует pending-значение и уведомляет непосредственных потребителей.
147
+ * Пропускает указанную связь и автора записи, чтобы не дублировать текущую работу.
148
+ * @returns Изменилось ли зафиксированное значение.
149
+ */
150
+ private commitSignalValue;
151
+ /**
152
+ * Обрабатывает чтение производителя активным потребителем.
153
+ * Сначала проверяет текущую и следующую связи; более дорогой поиск вынесен отдельно.
154
+ */
155
+ private trackDependency;
156
+ /**
157
+ * Согласует чтение с существующим списком зависимостей при несовпадении порядка.
158
+ * Использует ограниченный линейный поиск, затем поиск среди потребителей производителя.
159
+ * Существующую связь перемещает или переиспользует; новую создаёт только при необходимости.
160
+ */
161
+ private reconcileDependency;
162
+ /**
163
+ * Добавляет связь при первоначальном сборе зависимостей.
164
+ * Предусловие: after является хвостом собранного префикса нового списка.
165
+ * Связь одновременно включается в список потребителей производителя.
166
+ */
167
+ private appendInitialDependency;
168
+ /**
169
+ * Вставляет связь после заданного курсора зависимостей потребителя.
170
+ * Сохраняет ещё не прочитанный хвост списка и увеличивает dependencyCount.
171
+ */
172
+ private insertDependency;
173
+ /**
174
+ * Переназначает существующую связь другому производителю.
175
+ * Положение в списке зависимостей потребителя и число его связей сохраняются.
176
+ */
177
+ private reuseDepLink;
178
+ /**
179
+ * Перемещает существующую зависимость после курсора текущего чтения.
180
+ * Список потребителей производителя и количество зависимостей не изменяет.
181
+ */
182
+ private reorderDependency;
183
+ /**
184
+ * Удаляет непрочитанный хвост зависимостей завершившегося запуска.
185
+ * trackedTail обозначает границу прочитанного префикса, а не неизменный конец списка.
186
+ * Удаление из списков производителей не выполняет пользовательские callbacks.
187
+ */
188
+ private pruneUnreadDependencies;
189
+ /**
190
+ * Удаляет связь только из списка потребителей производителя.
191
+ * Список зависимостей потребителя и его счётчик здесь не изменяются.
192
+ * Также исправляет курсор поиска, если он указывал на удаляемую связь.
193
+ */
194
+ private detachSubLink;
195
+ /** Connects Runtime ownership metadata only for edges whose producer opted in. */
196
+ private attachDependencyCleanup;
197
+ /**
198
+ * Отсоединяет owned-источник сразу с обеих сторон каждой связи.
199
+ * Вызывается на границе lifetime, а не при обычных чтениях и записях.
200
+ * Переводит ожидавших проверку потребителей к повторному вычислению при необходимости.
201
+ */
202
+ private releaseSourceSubs;
203
+ /**
204
+ * Удаляет связь только из списка зависимостей потребителя.
205
+ * Исправляет курсор прочитанного префикса и dependencyCount; список производителя
206
+ * должен быть обновлён отдельной операцией.
207
+ */
208
+ private detachDependencyLink;
209
+ /**
210
+ * Добавляет эффект во внутреннюю очередь один раз до обработки текущей записи.
211
+ * Флаг SCHEDULED предотвращает повторное добавление без создания task-объекта.
212
+ */
213
+ private enqueueEffect;
214
+ /**
215
+ * Распространяет invalidation от непосредственных к транзитивным потребителям.
216
+ * Сохраняет исходный итеративный обход с переиспользуемым стеком; callbacks
217
+ * не выполняет. Непосредственное и потенциальное изменения отмечает разными флагами.
218
+ */
219
+ private propagateInvalidation;
220
+ /**
221
+ * Помечает работающего потребителя, только если затронута уже прочитанная связь.
222
+ * Связи за trackedTail принадлежат прошлому запуску и не означают повторную invalidation.
223
+ * @returns Новое состояние либо ноль, если уведомление не требуется.
224
+ */
225
+ private invalidateReadDependency;
226
+ /**
227
+ * Подтверждает необходимость пересчёта непосредственных потребителей.
228
+ * Применяется после фиксации реально изменившегося значения; позволяет исключить
229
+ * текущую связь и автора записи.
230
+ */
231
+ private confirmSubUpdates;
232
+ /**
233
+ * Повторно вычисляет узел, согласует зависимости и сравнивает результат с кешем.
234
+ * При ошибке восстанавливает контекст, удаляет непрочитанный хвост и оставляет
235
+ * повторяемое состояние ошибки. Также восстанавливает непосредственного потребителя
236
+ * skipSub: при разворачивании стека его связь могла быть уже извлечена из буфера.
237
+ * Неверное значение в кеш не записывается.
238
+ */
239
+ private recomputeValue;
240
+ /**
241
+ * Восстанавливает связи и состояния после неудачного getter.
242
+ * Отдельная функция удерживает обработку исключений вне обычной части пересчёта.
243
+ * Потребитель исключаемой связи мог уже покинуть активный префикс стека.
244
+ */
245
+ private restoreComputedFailure;
246
+ /**
247
+ * Итеративно проверяет зависимые computed и pending-сигналы перед запуском потребителя.
248
+ * Использует общий стек с сохранением активного префикса вложенного обхода.
249
+ * При исключении восстанавливает высоту стека и состояния всех незавершённых
250
+ * узлов текущего прохода; порядок успешного обхода не меняется.
251
+ */
252
+ private refreshDependencies;
253
+ /** Settles every direct dependency so a cancelled external delivery can be re-armed. */
254
+ private settleCancelledDependencies;
255
+ /**
256
+ * Выполняет исходный итеративный обход зависимостей без обработки ошибок внутри цикла.
257
+ * Перед пользовательским вычислением публикует активную высоту стека; оболочка
258
+ * refreshDependencies() использует этот префикс для восстановления после сбоя.
259
+ */
260
+ private walkDependencyChain;
261
+ /**
262
+ * Восстанавливает незавершённую запись после прерванной проверки зависимостей.
263
+ * Computed получает повторяемое состояние ошибки, effect остаётся доступным
264
+ * для следующей invalidation. Вызывается только на ошибочном пути.
265
+ */
266
+ private restoreFailedDependency;
267
+ /**
268
+ * Проверяет необходимость запуска, очищает прошлые ресурсы и выполняет тело эффекта.
269
+ * Ошибка cleanup останавливает эффект до создания ресурсов следующего запуска.
270
+ * При ошибке тела сохраняет фактически прочитанные зависимости, останавливает
271
+ * созданных детей и разрешает повторный запуск после следующей записи.
272
+ * Cleanup, возвращённый после собственного stop, освобождается сразу.
273
+ */
274
+ private executeEffect;
275
+ /**
276
+ * Завершает неудачный запуск эффекта, не затрагивая успешный путь исполнения.
277
+ * Сохраняет прочитанные зависимости для следующей invalidation, освобождает
278
+ * детей неудачного запуска и объединяет ошибки с предыдущими ошибками cleanup.
279
+ */
280
+ private failEffectRun;
281
+ /**
282
+ * Обрабатывает синхронную очередь до исчерпания, включая добавленную во время прохода работу.
283
+ * Ошибки отдельных эффектов не блокируют соседей и передаются после обработки.
284
+ * Путь не проверяет наличие внешней задачи у каждого узла.
285
+ */
286
+ private flushSyncEffects;
287
+ /**
288
+ * Обрабатывает очередь экземпляра с внешней политикой выполнения.
289
+ * Обычные внутренние эффекты выполняет сразу, остальные передаёт постоянной задаче.
290
+ * Ошибка одного элемента не оставляет необработанные записи со старым SCHEDULED.
291
+ */
292
+ private flushExternalEffects;
293
+ /**
294
+ * Завершает очередь после первой ошибки, собирая последующие причины сбоя.
295
+ * Вызывается только на ошибочном пути; успешный проход не создаёт массив ошибок
296
+ * и не устанавливает отдельный catch для каждого элемента.
297
+ */
298
+ private drainQueueAfterError;
299
+ /**
300
+ * Передаёт эффект его постоянной внешней задаче.
301
+ * Если schedule() бросает исключение, снимает незавершённую invalidation,
302
+ * чтобы последующая запись могла снова запросить выполнение.
303
+ */
304
+ private requestEffectTask;
305
+ private scheduleEffectTask;
306
+ /**
307
+ * Окончательно останавливает эффект и освобождает все принадлежащие ему ресурсы.
308
+ * Сначала делает узел неактивным и отсоединяет связи, затем отменяет задачу,
309
+ * останавливает детей, выполняет cleanup и onStop. Каждая стадия завершается
310
+ * несмотря на ошибки соседних стадий; повторный или вложенный stop безопасен.
311
+ */
312
+ private disposeEffect;
313
+ /**
314
+ * Останавливает все вложенные эффекты в обратном порядке регистрации.
315
+ * Всегда берёт актуальный хвост: cleanup может удалить другого ребёнка.
316
+ * Передаёт собранные ошибки только после освобождения всех детей.
317
+ */
318
+ private disposeNestedEffects;
319
+ /**
320
+ * Задаёт обязательные поля графа перед первым вычислением.
321
+ * Вызывается только для нематериализованного handle; getter и контекст сохраняются.
322
+ */
323
+ private static materializeComputed;
324
+ /**
325
+ * Связывает два разных receiver: движок-владелец и читаемый handle.
326
+ * Эти четыре общие функции адаптируют this; алгоритмы чтения остаются методами
327
+ * RaphReactivity. Адаптеры создаются один раз на граф, а не на каждое вычисление.
328
+ */
329
+ private createHandleReaders;
330
+ /**
331
+ * Читает handle без подписки текущего потребителя, сохраняя receiver get().
332
+ * Прежний контекст восстанавливается и после исключения getter.
333
+ */
334
+ private peekHandle;
335
+ /**
336
+ * Создаёт единый низкоуровневый read/write accessor для core-дорожки Bench Lab.
337
+ * Публичный объектный API остаётся отдельным и измеряется в API-tax.
338
+ * @internal
339
+ */
340
+ _signalAccess<T>(initialValue: T): SignalAccess<T>;
341
+ /**
342
+ * Создаёт нематериализованный computed для низкоуровневого read API.
343
+ * Графовые поля появляются при первом чтении; тип описывает обе стадии.
344
+ * @internal
345
+ */
346
+ _computedAccess<T>(fn: () => T): ComputedAccessHandle<T>;
347
+ /**
348
+ * Создаёт signal, жизненным циклом которого управляет `ScopeNode`.
349
+ *
350
+ * Реактивная логика совпадает с обычным `signal()`, но disposer
351
+ * дополнительно отсоединяет материализованный источник от графа.
352
+ *
353
+ * @internal
354
+ */
355
+ _ownedSignal<T>(initialValue: T, sourceHooks?: OwnedSourceHooks): OwnedSource<Signal<T>>;
356
+ /**
357
+ * Создаёт ленивый computed с финализатором исходящих и входящих связей.
358
+ * Финализатор работает и до первого вычисления, не материализуя узел ради очистки.
359
+ * @internal
360
+ */
361
+ _ownedComputed<T>(fn: () => T, sourceHooks?: OwnedSourceHooks): OwnedSource<ReadonlySignal<T>>;
362
+ /**
363
+ * Открывает вложенную синхронную границу группировки.
364
+ * Внутренний вызывающий код обязан выполнить соответствующий endBatch().
365
+ * @internal
366
+ */
367
+ _startBatch(): void;
368
+ /**
369
+ * Закрывает ранее открытую границу и обрабатывает очередь на внешнем уровне.
370
+ * Предусловие: число закрытий не должно превышать число открытий.
371
+ * @internal
372
+ */
373
+ _endBatch(): void;
374
+ /**
375
+ * Проверяет наличие активного потребителя в текущем синхронном стеке чтения.
376
+ * @internal
377
+ */
378
+ _isTracking(): boolean;
379
+ /**
380
+ * Показывает, обрабатывает ли экземпляр внутреннюю очередь эффектов.
381
+ * @internal
382
+ */
383
+ _isFlushingEffects(): boolean;
384
+ }
385
+ export declare const signal: RaphReactivity['signal'];
386
+ export declare const reactive: RaphReactivity['reactive'];
387
+ export declare function computed<T>(getter: () => T): ReadonlySignal<T>;
388
+ export declare function computed<T>(options: WritableComputedOptions<T>): Signal<T>;
389
+ export declare const effect: RaphReactivity['effect'];
390
+ export declare const watch: RaphReactivity['watch'];
391
+ export declare const batch: RaphReactivity['batch'];
392
+ export declare const untracked: RaphReactivity['untracked'];
393
+ export declare const scope: RaphReactivity['scope'];
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Opaque per-property producer used by the reactive-object adapter.
3
+ * The concrete record belongs to RaphReactivity's existing intrusive graph.
4
+ * @internal
5
+ */
6
+ export type ReactivePropertySource = object;
7
+ /**
8
+ * The only bridge between Proxy bookkeeping and the reactive graph internals.
9
+ * It deliberately exposes operations instead of graph fields or subclass hooks.
10
+ * @internal
11
+ */
12
+ export interface ReactivePropertySourceBridge {
13
+ readonly batch: <T>(operation: () => T) => T;
14
+ readonly create: () => ReactivePropertySource;
15
+ readonly isTracking: () => boolean;
16
+ readonly track: (source: ReactivePropertySource) => void;
17
+ readonly trigger: (source: ReactivePropertySource) => void;
18
+ }
19
+ /** Runtime policy installed for one RuntimeReactivity instance. @internal */
20
+ export interface ReactiveObjectPolicy {
21
+ readonly owner?: object;
22
+ readonly assertRead?: () => void;
23
+ readonly assertWrite?: () => void;
24
+ readonly runWrite?: <T>(operation: () => T) => T;
25
+ readonly throwForeign?: (owner: object | undefined) => never;
26
+ }
27
+ /** Associates Runtime lifecycle policy with an engine without widening its public class API. @internal */
28
+ export declare function configureReactiveObjectPolicy(engine: object, policy: ReactiveObjectPolicy): void;
29
+ /** Releases a Runtime-owned context while retained proxies become inert handles. @internal */
30
+ export declare function disposeReactiveObjectContext(engine: object, disposedPolicy?: ReactiveObjectPolicy): void;
31
+ /**
32
+ * Returns one stable Proxy per raw object inside one RaphReactivity instance.
33
+ * The context and both WeakMaps are allocated only after the first call.
34
+ * @internal
35
+ */
36
+ export declare function reactiveObject<T extends object>(engine: object, value: T, createBridge: () => ReactivePropertySourceBridge): T;
@@ -0,0 +1,146 @@
1
+ import { RaphReactivity } from './engine';
2
+ import { Disposer, EffectCallback, OwnedResource, OwnedSource, ReadonlySignal, ScopeChildren, ScopeLink, Signal, SourceFinalizer, WatchCallback, WatchOptions, WatchSource, WritableComputedOptions } from './types';
3
+ /**
4
+ * Универсальный владелец ресурсов без фаз, путей и зависимости от Runtime.
5
+ * Хранит ресурсы в двусвязном списке и освобождает их в обратном порядке.
6
+ * Проверки lifetime выполняют только owned handles; свободные signal() не проходят
7
+ * через владельца. Класс не является узлом графа зависимостей.
8
+ */
9
+ export declare class ScopeNode {
10
+ readonly reactivity: RaphReactivity;
11
+ /**
12
+ * Первый зарегистрированный ресурс; не является ребёнком execution-дерева.
13
+ * @internal
14
+ */
15
+ scopeFirstChild: OwnedResource | undefined;
16
+ /**
17
+ * Последний ресурс, с которого начинается освобождение владельца.
18
+ * @internal
19
+ */
20
+ scopeLastChild: OwnedResource | undefined;
21
+ private _resourceCount;
22
+ private _sourceFinalizers;
23
+ protected _disposed: boolean;
24
+ protected _disposing: boolean;
25
+ /**
26
+ * Связывает владельца с реактивным экземпляром без создания нового графа.
27
+ * @param reactivity Экземпляр, в котором создаются owned-ресурсы.
28
+ */
29
+ constructor(reactivity: RaphReactivity);
30
+ /**
31
+ * Показывает, началось ли окончательное освобождение владельца.
32
+ */
33
+ get disposed(): boolean;
34
+ /**
35
+ * Разрешает регистрацию и доступ только до начала освобождения.
36
+ */
37
+ get active(): boolean;
38
+ /**
39
+ * Создаёт owned signal и регистрирует его финализатор.
40
+ * Все методы возвращённого handle проверяют, что владелец ещё активен.
41
+ */
42
+ signal<T>(value: T): Signal<T>;
43
+ /**
44
+ * Создаёт owned computed только для чтения.
45
+ */
46
+ computed<T>(getter: () => T): ReadonlySignal<T>;
47
+ /**
48
+ * Создаёт owned writable computed с очисткой getter и setter.
49
+ */
50
+ computed<T>(options: WritableComputedOptions<T>): Signal<T>;
51
+ /**
52
+ * Создаёт эффект и принимает его disposer во владение.
53
+ * Если владелец уничтожен во время синхронного запуска, немедленно останавливает эффект.
54
+ */
55
+ effect(callback: EffectCallback): Disposer;
56
+ /**
57
+ * Создаёт watch и регистрирует окончательную остановку у владельца.
58
+ */
59
+ watch<S extends WatchSource | readonly WatchSource[]>(source: S, callback: WatchCallback<S>, options?: WatchOptions): Disposer;
60
+ /**
61
+ * Принимает произвольный cleanup и возвращает однократный disposer.
62
+ * Если владелец уже неактивен, выполняет cleanup сразу и возвращает пустой disposer.
63
+ */
64
+ own(disposer: Disposer): Disposer;
65
+ /**
66
+ * Возвращает число ещё не освобождённых записей ресурсов.
67
+ * @internal
68
+ */
69
+ _debugResourceCount(): number;
70
+ /**
71
+ * Возвращает число зарегистрированных финализаторов источников.
72
+ * @internal
73
+ */
74
+ _debugSourceCount(): number;
75
+ /**
76
+ * Освобождает ресурсы в обратном порядке, затем финализирует источники.
77
+ * Повторный вызов безопасен. Ошибки cleanup и завершающего hook собираются
78
+ * и передаются только после завершения остальных стадий.
79
+ */
80
+ dispose(): void;
81
+ /**
82
+ * Регистрирует ресурс только у активного владельца.
83
+ * Дочерняя запись отсоединяется до вызова cleanup, включая ошибочный и вложенный stop.
84
+ * В отличие от own(), не принимает регистрацию после dispose.
85
+ * @internal
86
+ */
87
+ _own(disposer: Disposer): Disposer;
88
+ /**
89
+ * Принимает уже созданный ресурс и не оставляет его без владельца при ошибке регистрации.
90
+ * При неудачной очистке сохраняет и ошибку регистрации, и ошибку освобождения.
91
+ * @internal
92
+ */
93
+ _adoptResource(disposer: Disposer): Disposer;
94
+ /**
95
+ * Регистрирует финализатор owned-источника и возвращает его handle.
96
+ * Если владелец уже недоступен, освобождает источник до передачи ошибки.
97
+ * @internal
98
+ */
99
+ _adoptSource<T>(owned: OwnedSource<T>): T;
100
+ /**
101
+ * Добавляет финализатор источника. Возвращённый им false означает повторную попытку
102
+ * после прогресса других финализаторов, а не успешное освобождение.
103
+ * @internal
104
+ */
105
+ _ownSource(finalizer: SourceFinalizer): void;
106
+ /**
107
+ * Запрещает операции после начала освобождения владельца.
108
+ * Текст существующей ошибки сохранён для совместимости вызывающих слоёв.
109
+ * @internal
110
+ */
111
+ _assertAlive(): void;
112
+ /**
113
+ * Завершающий hook для наследников после ресурсов и источников.
114
+ * Базовая реализация ничего не делает; исключение наследника попадёт в общий результат.
115
+ */
116
+ protected _afterDispose(): void;
117
+ /**
118
+ * Возвращает сообщение для AggregateError при нескольких ошибках освобождения.
119
+ */
120
+ protected _disposalMessage(): string;
121
+ /**
122
+ * Освобождает источники в обратном порядке регистрации с повторными попытками.
123
+ * Если в проходе не было прогресса, прекращает обход, сохраняя существующий контракт.
124
+ * Исключение одного финализатора не блокирует остальные.
125
+ */
126
+ private _finalizeSources;
127
+ }
128
+ /**
129
+ * Добавляет дочерний ресурс в конец списка владельца без отдельной обёртки связей.
130
+ * Предусловие: ребёнок ещё не находится в другом списке. Переиспользуется
131
+ * ресурсами ScopeNode и записями вложенных эффектов.
132
+ * @internal
133
+ */
134
+ export declare function appendScopeChild<T extends ScopeLink<T>>(parent: ScopeChildren<T>, child: T): void;
135
+ /**
136
+ * Отсоединяет ребёнка от владельца и обнуляет его связи со списком.
137
+ * Повторное отсоединение безопасно; пользовательский cleanup здесь не вызывается.
138
+ * @internal
139
+ */
140
+ export declare function detachScopeChild<T extends ScopeLink<T>>(node: T): void;
141
+ /**
142
+ * Передаёт единственную ошибку без обёртки либо несколько причин в AggregateError.
143
+ * Пустой набор не вызывает исключения.
144
+ * @internal
145
+ */
146
+ export declare function throwScopeErrors(errors: readonly unknown[], message: string): void;