@raphy-js/raph 1.0.0-dev.2

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 (139) hide show
  1. package/LICENSE +202 -0
  2. package/ReadMe.md +153 -0
  3. package/dist/api/Raph.d.ts +228 -0
  4. package/dist/api/errors.d.ts +20 -0
  5. package/dist/api/public.d.ts +22 -0
  6. package/dist/api/types.d.ts +25 -0
  7. package/dist/debug/api/Raph.cjs +1 -0
  8. package/dist/debug/api/Raph.js +419 -0
  9. package/dist/debug/api/errors.cjs +1 -0
  10. package/dist/debug/api/errors.js +14 -0
  11. package/dist/debug/api/public.cjs +1 -0
  12. package/dist/debug/api/public.js +40 -0
  13. package/dist/debug/api/types.cjs +1 -0
  14. package/dist/debug/api/types.js +1 -0
  15. package/dist/debug/path/AdapterPathStore.cjs +1 -0
  16. package/dist/debug/path/AdapterPathStore.js +133 -0
  17. package/dist/debug/path/DerivedRegistry.cjs +1 -0
  18. package/dist/debug/path/DerivedRegistry.js +157 -0
  19. package/dist/debug/path/MetaController.cjs +1 -0
  20. package/dist/debug/path/MetaController.js +214 -0
  21. package/dist/debug/path/PathEventHub.cjs +1 -0
  22. package/dist/debug/path/PathEventHub.js +148 -0
  23. package/dist/debug/path/PathStore.cjs +1 -0
  24. package/dist/debug/path/PathStore.js +326 -0
  25. package/dist/debug/path/RaphDerivedHandle.cjs +1 -0
  26. package/dist/debug/path/RaphDerivedHandle.js +125 -0
  27. package/dist/debug/path/RaphKernel.cjs +1 -0
  28. package/dist/debug/path/RaphKernel.js +636 -0
  29. package/dist/debug/path/RaphMeta.cjs +1 -0
  30. package/dist/debug/path/RaphMeta.js +68 -0
  31. package/dist/debug/path/RaphMetaStore.cjs +1 -0
  32. package/dist/debug/path/RaphMetaStore.js +184 -0
  33. package/dist/debug/path/data-adapter.cjs +1 -0
  34. package/dist/debug/path/data-adapter.js +356 -0
  35. package/dist/debug/path/data-draft.cjs +1 -0
  36. package/dist/debug/path/data-draft.js +71 -0
  37. package/dist/debug/path/data-path.cjs +1 -0
  38. package/dist/debug/path/data-path.js +423 -0
  39. package/dist/debug/path/derived-collection.cjs +1 -0
  40. package/dist/debug/path/derived-collection.js +179 -0
  41. package/dist/debug/path/derived-strategies.cjs +1 -0
  42. package/dist/debug/path/derived-strategies.js +20 -0
  43. package/dist/debug/path/meta.types.cjs +1 -0
  44. package/dist/debug/path/meta.types.js +1 -0
  45. package/dist/debug/path/path-router.cjs +1 -0
  46. package/dist/debug/path/path-router.js +86 -0
  47. package/dist/debug/path/path.types.cjs +1 -0
  48. package/dist/debug/path/path.types.js +1 -0
  49. package/dist/debug/path/public.cjs +1 -0
  50. package/dist/debug/path/public.js +18 -0
  51. package/dist/debug/path/segment-key.cjs +1 -0
  52. package/dist/debug/path/segment-key.js +12 -0
  53. package/dist/debug/reactivity/engine.cjs +1 -0
  54. package/dist/debug/reactivity/engine.js +1133 -0
  55. package/dist/debug/reactivity/scope.cjs +1 -0
  56. package/dist/debug/reactivity/scope.js +274 -0
  57. package/dist/debug/reactivity/types.cjs +1 -0
  58. package/dist/debug/reactivity/types.js +1 -0
  59. package/dist/debug/reactivity/watch.cjs +1 -0
  60. package/dist/debug/reactivity/watch.js +64 -0
  61. package/dist/debug/runtime/PathHandle.cjs +1 -0
  62. package/dist/debug/runtime/PathHandle.js +139 -0
  63. package/dist/debug/runtime/RaphDebug.cjs +1 -0
  64. package/dist/debug/runtime/RaphDebug.js +15 -0
  65. package/dist/debug/runtime/RaphFrameLoop.cjs +1 -0
  66. package/dist/debug/runtime/RaphFrameLoop.js +106 -0
  67. package/dist/debug/runtime/RaphNode.cjs +1 -0
  68. package/dist/debug/runtime/RaphNode.js +143 -0
  69. package/dist/debug/runtime/RaphPhasePipeline.cjs +1 -0
  70. package/dist/debug/runtime/RaphPhasePipeline.js +526 -0
  71. package/dist/debug/runtime/RaphRuntime.cjs +1 -0
  72. package/dist/debug/runtime/RaphRuntime.js +700 -0
  73. package/dist/debug/runtime/RaphScope.cjs +1 -0
  74. package/dist/debug/runtime/RaphScope.js +64 -0
  75. package/dist/debug/runtime/RuntimeReactivity.cjs +1 -0
  76. package/dist/debug/runtime/RuntimeReactivity.js +154 -0
  77. package/dist/debug/runtime/RuntimeWatch.cjs +1 -0
  78. package/dist/debug/runtime/RuntimeWatch.js +71 -0
  79. package/dist/debug/runtime/disposal.cjs +1 -0
  80. package/dist/debug/runtime/disposal.js +9 -0
  81. package/dist/debug/runtime/errors.cjs +1 -0
  82. package/dist/debug/runtime/errors.js +12 -0
  83. package/dist/debug/runtime/parent-graph.cjs +1 -0
  84. package/dist/debug/runtime/parent-graph.js +10 -0
  85. package/dist/debug/runtime/phase.types.cjs +1 -0
  86. package/dist/debug/runtime/phase.types.js +8 -0
  87. package/dist/debug/runtime/public.cjs +1 -0
  88. package/dist/debug/runtime/public.js +18 -0
  89. package/dist/debug/runtime/runtime-reactivity.types.cjs +1 -0
  90. package/dist/debug/runtime/runtime-reactivity.types.js +1 -0
  91. package/dist/index.cjs +1 -0
  92. package/dist/index.js +40 -0
  93. package/dist/path/AdapterPathStore.d.ts +45 -0
  94. package/dist/path/DerivedRegistry.d.ts +67 -0
  95. package/dist/path/MetaController.d.ts +85 -0
  96. package/dist/path/PathEventHub.d.ts +48 -0
  97. package/dist/path/PathStore.d.ts +51 -0
  98. package/dist/path/RaphDerivedHandle.d.ts +97 -0
  99. package/dist/path/RaphKernel.d.ts +166 -0
  100. package/dist/path/RaphMeta.d.ts +45 -0
  101. package/dist/path/RaphMetaStore.d.ts +45 -0
  102. package/dist/path/data-adapter.d.ts +78 -0
  103. package/dist/path/data-draft.d.ts +4 -0
  104. package/dist/path/data-path.d.ts +97 -0
  105. package/dist/path/derived-collection.d.ts +30 -0
  106. package/dist/path/derived-strategies.d.ts +15 -0
  107. package/dist/path/meta.types.d.ts +33 -0
  108. package/dist/path/path-router.d.ts +21 -0
  109. package/dist/path/path.types.d.ts +26 -0
  110. package/dist/path/public.d.ts +14 -0
  111. package/dist/path/segment-key.d.ts +2 -0
  112. package/dist/path.cjs +1 -0
  113. package/dist/path.js +18 -0
  114. package/dist/raph.cjs +1 -0
  115. package/dist/raph.js +40 -0
  116. package/dist/reactivity/engine.d.ts +379 -0
  117. package/dist/reactivity/scope.d.ts +146 -0
  118. package/dist/reactivity/types.d.ts +150 -0
  119. package/dist/reactivity/watch.d.ts +15 -0
  120. package/dist/reactivity.cjs +1 -0
  121. package/dist/reactivity.js +14 -0
  122. package/dist/runtime/PathHandle.d.ts +72 -0
  123. package/dist/runtime/RaphDebug.d.ts +32 -0
  124. package/dist/runtime/RaphFrameLoop.d.ts +51 -0
  125. package/dist/runtime/RaphNode.d.ts +68 -0
  126. package/dist/runtime/RaphPhasePipeline.d.ts +133 -0
  127. package/dist/runtime/RaphRuntime.d.ts +285 -0
  128. package/dist/runtime/RaphScope.d.ts +50 -0
  129. package/dist/runtime/RuntimeReactivity.d.ts +40 -0
  130. package/dist/runtime/RuntimeWatch.d.ts +28 -0
  131. package/dist/runtime/disposal.d.ts +1 -0
  132. package/dist/runtime/errors.d.ts +16 -0
  133. package/dist/runtime/parent-graph.d.ts +5 -0
  134. package/dist/runtime/phase.types.d.ts +49 -0
  135. package/dist/runtime/public.d.ts +13 -0
  136. package/dist/runtime/runtime-reactivity.types.d.ts +9 -0
  137. package/dist/runtime.cjs +1 -0
  138. package/dist/runtime.js +18 -0
  139. package/package.json +109 -0
@@ -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;
@@ -0,0 +1,150 @@
1
+ export type Disposer = () => void;
2
+ export interface ReadonlySignal<T> {
3
+ get: (this: ReadonlySignal<unknown>) => T;
4
+ peek: (this: ReadonlySignal<unknown>) => T;
5
+ }
6
+ export interface Signal<T> extends ReadonlySignal<T> {
7
+ set: (value: T) => void;
8
+ }
9
+ export interface WritableComputedOptions<T> {
10
+ readonly get: () => T;
11
+ readonly set: (value: T) => void;
12
+ }
13
+ export type EffectCallback = () => void | Disposer;
14
+ export interface EffectTask {
15
+ schedule: () => void;
16
+ dispose: Disposer;
17
+ }
18
+ export interface EffectScheduler {
19
+ bind: (run: () => void) => EffectTask;
20
+ }
21
+ export interface ReactivityOptions {
22
+ readonly effectScheduler?: EffectScheduler;
23
+ }
24
+ export type WatchSource<T = unknown> = ReadonlySignal<T> | (() => T);
25
+ export interface WatchOptions {
26
+ readonly immediate?: boolean;
27
+ }
28
+ export type WatchValue<S> = S extends readonly unknown[] ? {
29
+ [K in keyof S]: S[K] extends WatchSource<infer V> ? V : never;
30
+ } : S extends WatchSource<infer V> ? V : never;
31
+ export type WatchCallback<S> = (value: WatchValue<S>, previous: WatchValue<S> | undefined) => void | Disposer;
32
+ export type EffectFactory = (callback: EffectCallback, onStop?: Disposer) => Disposer;
33
+ export type TrackedOperation = <T>(operation: () => T) => T;
34
+ /**
35
+ * Финализатор источника: true означает завершение, false — необходимость повторной
36
+ * попытки после освобождения зависимостей. Не является дублем Disposer.
37
+ * @internal
38
+ */
39
+ export type SourceFinalizer = () => boolean;
40
+ /**
41
+ * Запись произвольного ресурса в списке владельца.
42
+ * Функция dispose отсоединяет запись перед вызовом пользовательской очистки.
43
+ * @internal
44
+ */
45
+ export interface OwnedResource extends ScopeLink<OwnedResource> {
46
+ dispose: Disposer;
47
+ }
48
+ /**
49
+ * Границы списка принадлежащих ресурсов. Не описывают граф зависимостей
50
+ * или дерево исполнения RaphNode.
51
+ * @internal
52
+ */
53
+ export interface ScopeChildren<T> {
54
+ scopeFirstChild?: T;
55
+ scopeLastChild?: T;
56
+ }
57
+ /**
58
+ * Встроенные связи ресурса с владельцем и соседями списка.
59
+ * Не требуют отдельного ScopeNode для каждого эффекта.
60
+ * @internal
61
+ */
62
+ export interface ScopeLink<T> {
63
+ scopeParent?: ScopeChildren<T>;
64
+ scopePrevious?: T;
65
+ scopeNext?: T;
66
+ }
67
+ /**
68
+ * Одна зависимость производителя и потребителя, одновременно включённая
69
+ * в список потребителей производителя и список зависимостей потребителя.
70
+ * @internal
71
+ */
72
+ export interface ReactiveEdge {
73
+ dep: ReactiveNode;
74
+ sub: ReactiveNode;
75
+ prevSub: ReactiveEdge | null;
76
+ nextSub: ReactiveEdge | null;
77
+ prevDep: ReactiveEdge | null;
78
+ nextDep: ReactiveEdge | null;
79
+ }
80
+ /**
81
+ * Материализованная запись графа: signal, computed либо effect.
82
+ * Не наследует ScopeNode/RaphNode; поля scope используются только для вложенных эффектов.
83
+ * Гетерогенные значения графа намеренно имеют внутренний параметр any.
84
+ * @internal
85
+ */
86
+ export interface ReactiveNode<T = any> extends ScopeChildren<ReactiveNode>, ScopeLink<ReactiveNode> {
87
+ flags: number;
88
+ firstSub: ReactiveEdge | null;
89
+ lastSub: ReactiveEdge | null;
90
+ firstDep: ReactiveEdge | null;
91
+ tailDep: ReactiveEdge | null;
92
+ depCount: number;
93
+ subSearchCursor?: ReactiveEdge;
94
+ evaluate: (() => any) | undefined;
95
+ cachedValue: T;
96
+ pendingValue?: T;
97
+ pendingAuthor?: ReactiveNode | null;
98
+ effectTask?: EffectTask;
99
+ onStop?: Disposer;
100
+ }
101
+ /**
102
+ * Низкоуровневые read/write для raw-дорожки Bench Lab.
103
+ * Публичный объектный API намеренно не использует этот контракт.
104
+ * @internal
105
+ */
106
+ export interface SignalAccess<T> {
107
+ read: () => T;
108
+ write: (value: T) => void;
109
+ }
110
+ /**
111
+ * Низкоуровневый computed с требованием сохранить receiver первого чтения.
112
+ * @internal
113
+ */
114
+ export interface ComputedAccess<T> {
115
+ read: (this: ComputedAccess<unknown>) => T;
116
+ }
117
+ /**
118
+ * Ленивый raw handle: до первого чтения поля ReactiveNode отсутствуют.
119
+ * Partial описывает стадию материализации, а не ослабляет контракт готового узла.
120
+ * @internal
121
+ */
122
+ export interface ComputedAccessHandle<T> extends Partial<ReactiveNode<T>>, ComputedAccess<T> {
123
+ evaluate: (() => T) | undefined;
124
+ }
125
+ /**
126
+ * Ленивый объектный computed: графовые поля становятся обязательными
127
+ * только после initializeComputedHandle(). Отдельной записи графа не выделяет.
128
+ * @internal
129
+ */
130
+ export interface ComputedSourceAccessHandle<T> extends Partial<ReactiveNode<T>>, ReadonlySignal<T> {
131
+ evaluate: (() => T) | undefined;
132
+ }
133
+ /**
134
+ * Handle источника вместе с независимым финализатором для владельца.
135
+ * @internal
136
+ */
137
+ export interface OwnedSource<T> {
138
+ source: T;
139
+ dispose: SourceFinalizer;
140
+ }
141
+ /**
142
+ * Общие для одного графа адаптеры receiver его handles.
143
+ * Не хранят состояние алгоритмов: передают исходный handle методам движка.
144
+ * @internal
145
+ */
146
+ export interface HandleReaders {
147
+ initializeComputed: <T>(this: ReadonlySignal<unknown>) => T;
148
+ initializeRaw: <T>(this: ComputedAccess<unknown>) => T;
149
+ peek: <T>(this: ReadonlySignal<unknown>) => T;
150
+ }
@@ -0,0 +1,15 @@
1
+ import { Disposer, EffectFactory, TrackedOperation, WatchCallback, WatchOptions, WatchSource } from './types';
2
+ /**
3
+ * Создаёт watch поверх переданной фабрики эффектов и политики чтения.
4
+ * Фабрика обязана поддерживать второй аргумент onStop: он связывает окончательную
5
+ * очистку watch с остановкой эффекта родителем, scope или внешним disposer.
6
+ * Повторный запуск с равным результатом не вызывает cleanup callback.
7
+ * @param effect Фабрика с независимым финализатором окончательной остановки.
8
+ * @param untracked Выполняет callback и cleanup без сбора зависимостей.
9
+ * @param source Один источник либо список источников.
10
+ * @param callback Обрабатывает новое и предыдущее значения.
11
+ * @param options Настройки первоначального вызова.
12
+ * @param runTracked Оборачивает только чтение selector; используется Runtime.
13
+ * @internal
14
+ */
15
+ export declare function watchWithReactivity<S extends WatchSource | readonly WatchSource[]>(effect: EffectFactory, untracked: TrackedOperation, source: S, callback: WatchCallback<S>, options?: WatchOptions, runTracked?: TrackedOperation): Disposer;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./debug/reactivity/scope.cjs");require("./debug/reactivity/watch.cjs");const e=require("./debug/reactivity/engine.cjs");exports.ScopeNode=t.ScopeNode;exports.RaphReactivity=e.RaphReactivity;exports.batch=e.batch;exports.computed=e.computed;exports.effect=e.effect;exports.scope=e.scope;exports.signal=e.signal;exports.untracked=e.untracked;exports.watch=e.watch;
@@ -0,0 +1,14 @@
1
+ import { ScopeNode as c } from "./debug/reactivity/scope.js";
2
+ import "./debug/reactivity/watch.js";
3
+ import { RaphReactivity as a, batch as r, computed as f, effect as i, scope as m, signal as d, untracked as h, watch as n } from "./debug/reactivity/engine.js";
4
+ export {
5
+ a as RaphReactivity,
6
+ c as ScopeNode,
7
+ r as batch,
8
+ f as computed,
9
+ i as effect,
10
+ m as scope,
11
+ d as signal,
12
+ h as untracked,
13
+ n as watch
14
+ };
@@ -0,0 +1,72 @@
1
+ import { ParsedDataPath } from '../path/data-path';
2
+ import { PathOptions } from '../path/path.types';
3
+ import { RaphKernel } from '../path/RaphKernel';
4
+ import { RaphReactivity } from '../reactivity/engine';
5
+ import { ReadonlySignal } from '../reactivity/types';
6
+ type PathSignalEngine = Pick<RaphReactivity, '_isTracking' | '_ownedSignal'>;
7
+ /**
8
+ * Реактивный handle одного canonical path в default E2 data-plane.
9
+ */
10
+ export declare class PathHandle<T> implements ReadonlySignal<T | undefined> {
11
+ readonly path: string;
12
+ readonly options: PathOptions;
13
+ private _revision;
14
+ private _disposeRevision;
15
+ private _isTracking;
16
+ private _store;
17
+ private _release;
18
+ private readonly _masks;
19
+ private _assertOwnerAlive;
20
+ private _assertTrackedRead;
21
+ private _assertWriteAllowed;
22
+ private _runWrite;
23
+ private _stop;
24
+ private _disposed;
25
+ /**
26
+ * Создаёт internal path handle и связывает его с runtime lifecycle.
27
+ * @internal
28
+ */
29
+ constructor(store: RaphKernel, parsed: ParsedDataPath, options: PathOptions, release: (handle: PathHandle<unknown>) => void, signals: PathSignalEngine, assertOwnerAlive?: () => void, assertTrackedRead?: () => void, assertWriteAllowed?: () => void, runWrite?: <Result>(operation: () => Result) => Result);
30
+ /**
31
+ * Показывает, освобождён ли path handle.
32
+ */
33
+ get disposed(): boolean;
34
+ /**
35
+ * Читает path с регистрацией реактивной зависимости.
36
+ */
37
+ get(): T | undefined;
38
+ /**
39
+ * Читает path без регистрации реактивной зависимости.
40
+ */
41
+ peek(): T | undefined;
42
+ /**
43
+ * Записывает значение path через runtime write policy.
44
+ */
45
+ set(value: T): void;
46
+ /**
47
+ * Объединяет значение path через runtime write policy.
48
+ */
49
+ merge(value: Partial<T>): void;
50
+ /**
51
+ * Удаляет значение path через runtime write policy.
52
+ */
53
+ delete(): void;
54
+ /**
55
+ * Проверяет наличие значения path.
56
+ */
57
+ has(): boolean;
58
+ /**
59
+ * Отсоединяет Kernel subscription и освобождает reactive revision handle.
60
+ */
61
+ dispose(): void;
62
+ /**
63
+ * Читает path с регистрацией runtime reactive dependency.
64
+ * @internal
65
+ */
66
+ _getTracked(): T | undefined;
67
+ private _readTracked;
68
+ private _observe;
69
+ private _write;
70
+ private _assertAlive;
71
+ }
72
+ export {};
@@ -0,0 +1,32 @@
1
+ import { RaphScope } from './RaphScope';
2
+ export interface RaphDebugOwnerSnapshot {
3
+ readonly id: string;
4
+ readonly kind: 'scope' | 'node';
5
+ readonly disposed: boolean;
6
+ readonly resources: number;
7
+ readonly sources: number;
8
+ readonly children: readonly RaphDebugOwnerSnapshot[];
9
+ }
10
+ export interface RaphDebugFrameLoopSnapshot {
11
+ readonly running: boolean;
12
+ readonly manual: boolean;
13
+ readonly leases: number;
14
+ }
15
+ export interface RaphDebugSnapshot {
16
+ readonly id: string;
17
+ readonly disposed: boolean;
18
+ readonly pending: boolean;
19
+ readonly transactionDepth: number;
20
+ readonly kernelTransactionDepth: number;
21
+ readonly owners: number;
22
+ readonly pathHandles: number;
23
+ readonly rootScope: RaphDebugOwnerSnapshot;
24
+ readonly scopes: readonly RaphDebugOwnerSnapshot[];
25
+ readonly root: RaphDebugOwnerSnapshot;
26
+ readonly frameLoop: RaphDebugFrameLoopSnapshot;
27
+ }
28
+ export interface RaphRuntimeDebug {
29
+ snapshot: () => RaphDebugSnapshot;
30
+ getTree: () => RaphDebugOwnerSnapshot;
31
+ }
32
+ export declare function createOwnerSnapshot(owner: RaphScope): RaphDebugOwnerSnapshot;
@@ -0,0 +1,51 @@
1
+ import { FrameLoopLease } from './phase.types';
2
+ /**
3
+ * Ленивые frame callbacks не запускаются обычной реактивной работой.
4
+ */
5
+ export declare class RaphFrameLoop {
6
+ private readonly _tick;
7
+ private readonly _leases;
8
+ private _frameHandle;
9
+ private _frameHandleKind;
10
+ private _scheduleToken;
11
+ private _running;
12
+ private _manual;
13
+ /**
14
+ * Создаёт frame-loop, который запрашивает выполнение runtime pipeline.
15
+ */
16
+ constructor(_tick: () => void);
17
+ /**
18
+ * Показывает, выполняется ли автоматический frame-loop.
19
+ */
20
+ get running(): boolean;
21
+ /**
22
+ * Получает lease, удерживающий автоматический frame-loop активным.
23
+ */
24
+ acquire(owner: string): FrameLoopLease;
25
+ /**
26
+ * Запускает manual lease frame-loop.
27
+ */
28
+ start(): void;
29
+ /**
30
+ * Останавливает manual lease, не затрагивая внешние leases.
31
+ */
32
+ stop(): void;
33
+ /**
34
+ * Снимает все leases и отменяет запланированный frame callback.
35
+ */
36
+ dispose(): void;
37
+ /**
38
+ * Возвращает внутреннее состояние frame-loop для диагностики.
39
+ * @internal
40
+ */
41
+ _debugState(): {
42
+ running: boolean;
43
+ manual: boolean;
44
+ leases: number;
45
+ };
46
+ private _onFrame;
47
+ private _ensureRunning;
48
+ private _schedule;
49
+ private _reconcile;
50
+ private _stop;
51
+ }
@@ -0,0 +1,68 @@
1
+ import { DataPathDef } from '../path/path.types';
2
+ import { Disposer } from '../reactivity/types';
3
+ import { RaphObserveDataOptions, RaphTrackOptions } from './phase.types';
4
+ import { RaphRuntime } from './RaphRuntime';
5
+ import { RaphScope } from './RaphScope';
6
+ export interface NodeOptions {
7
+ readonly id?: string;
8
+ readonly priority?: number;
9
+ readonly parent?: RaphNode;
10
+ readonly meta?: Readonly<Record<string, unknown>>;
11
+ readonly type?: string;
12
+ }
13
+ /**
14
+ * Scope с явным parent/children lifecycle.
15
+ */
16
+ export declare class RaphNode<TApi = unknown> extends RaphScope {
17
+ priority: number;
18
+ private _parent;
19
+ private readonly _children;
20
+ readonly api: Readonly<TApi>;
21
+ meta: Record<string, unknown>;
22
+ type: string;
23
+ /**
24
+ * Создаёт node внутри ownership tree указанного runtime.
25
+ */
26
+ constructor(parent: RaphNode | RaphRuntime | null, options?: Omit<NodeOptions, 'parent'>, runtime?: RaphRuntime);
27
+ /**
28
+ * Возвращает текущего родителя node либо null для root.
29
+ */
30
+ get parent(): RaphNode | null;
31
+ /**
32
+ * Возвращает снимок непосредственных дочерних nodes.
33
+ */
34
+ get children(): readonly RaphNode[];
35
+ /**
36
+ * Перемещает node внутри ownership tree одного Runtime.
37
+ */
38
+ addChild(node: RaphNode): boolean;
39
+ /**
40
+ * Обновляет изменяемые priority, meta и type node.
41
+ */
42
+ options(options: Pick<NodeOptions, 'meta' | 'priority' | 'type'>): void;
43
+ /**
44
+ * Показывает, ожидает ли node выполнения.
45
+ */
46
+ dirty(phase: string): void;
47
+ /**
48
+ * Отсоединяет node от ownership tree с заданной lifecycle-семантикой.
49
+ */
50
+ remove(): void;
51
+ /**
52
+ * Освобождает node вместе с дочерними owners и registrations.
53
+ */
54
+ dispose(): void;
55
+ /**
56
+ * Регистрирует path observer в phase pipeline.
57
+ */
58
+ observeData(masks: DataPathDef | readonly DataPathDef[], options: RaphObserveDataOptions): Disposer;
59
+ /**
60
+ * Регистрирует tracked executor указанной phase.
61
+ */
62
+ track(masks: DataPathDef | readonly DataPathDef[], options?: RaphTrackOptions): Disposer;
63
+ /**
64
+ * Однократно устанавливает immutable API, принадлежащий node.
65
+ * @internal
66
+ */
67
+ _setApi(api: TApi): void;
68
+ }