@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.
- package/README.md +1096 -0
- package/dist/api/Raph.d.ts +59 -190
- package/dist/api/RaphFacadeSession.d.ts +90 -0
- package/dist/api/RaphReactivityInstance.d.ts +72 -0
- package/dist/api/errors.d.ts +9 -4
- package/dist/api/types.d.ts +162 -17
- package/dist/core-CClhT8WR.js +1044 -0
- package/dist/core-cPQWYD4K.cjs +1 -0
- package/dist/debug/api/Raph.cjs +1 -1
- package/dist/debug/api/Raph.js +368 -367
- package/dist/debug/api/RaphFacadeSession.cjs +1 -0
- package/dist/debug/api/RaphFacadeSession.js +302 -0
- package/dist/debug/api/RaphReactivityInstance.cjs +1 -0
- package/dist/debug/api/RaphReactivityInstance.js +146 -0
- package/dist/debug/api/errors.cjs +1 -1
- package/dist/debug/api/errors.js +10 -7
- package/dist/debug/path/DataPath.cjs +1 -0
- package/dist/debug/path/DataPath.js +390 -0
- package/dist/debug/path/PathRouter.cjs +1 -0
- package/dist/debug/path/PathRouter.js +80 -0
- package/dist/debug/path/RaphKernel.cjs +1 -1
- package/dist/debug/path/RaphKernel.js +316 -236
- package/dist/debug/path/data-path.utils.cjs +1 -0
- package/dist/debug/path/data-path.utils.js +56 -0
- package/dist/debug/path/derived/DerivedRegistry.cjs +1 -0
- package/dist/debug/path/derived/DerivedRegistry.js +143 -0
- package/dist/debug/path/derived/RaphDerivedHandle.cjs +1 -0
- package/dist/debug/path/{RaphDerivedHandle.js → derived/RaphDerivedHandle.js} +19 -22
- package/dist/debug/path/derived/derived-collection.utils.cjs +1 -0
- package/dist/debug/path/{derived-collection.js → derived/derived-collection.utils.js} +71 -71
- package/dist/debug/path/derived/derived-strategy.types.cjs +1 -0
- package/dist/debug/path/derived/derived-strategy.types.js +1 -0
- package/dist/debug/path/meta/MetaController.cjs +1 -0
- package/dist/debug/path/{MetaController.js → meta/MetaController.js} +58 -66
- package/dist/debug/path/meta/RaphMeta.cjs +1 -0
- package/dist/debug/path/meta/RaphMeta.js +62 -0
- package/dist/debug/path/meta/RaphMetaStore.cjs +1 -0
- package/dist/debug/path/{RaphMetaStore.js → meta/RaphMetaStore.js} +24 -30
- package/dist/debug/path/meta/meta.types.cjs +1 -0
- package/dist/debug/path/meta/meta.types.js +1 -0
- package/dist/debug/path/storage/AdapterPathStore.cjs +1 -0
- package/dist/debug/path/storage/AdapterPathStore.js +128 -0
- package/dist/debug/path/storage/DefaultDataAdapter.cjs +1 -0
- package/dist/debug/path/{data-adapter.js → storage/DefaultDataAdapter.js} +47 -57
- package/dist/debug/path/storage/PathEventHub.cjs +1 -0
- package/dist/debug/path/storage/PathEventHub.js +161 -0
- package/dist/debug/path/storage/PathStore.cjs +1 -0
- package/dist/debug/path/{PathStore.js → storage/PathStore.js} +88 -98
- package/dist/debug/path/storage/createDataDraft.cjs +1 -0
- package/dist/debug/path/{data-draft.js → storage/createDataDraft.js} +24 -28
- package/dist/debug/path/storage/data-adapter.types.cjs +1 -0
- package/dist/debug/path/storage/data-adapter.types.js +1 -0
- package/dist/debug/reactivity/disposal.cjs +1 -0
- package/dist/debug/reactivity/disposal.js +32 -0
- package/dist/debug/reactivity/engine.cjs +1 -1
- package/dist/debug/reactivity/engine.js +888 -321
- package/dist/debug/reactivity/reactive-object.cjs +1 -0
- package/dist/debug/reactivity/reactive-object.js +265 -0
- package/dist/debug/reactivity/scope.cjs +1 -1
- package/dist/debug/reactivity/scope.js +221 -117
- package/dist/debug/reactivity/watch.cjs +1 -1
- package/dist/debug/reactivity/watch.js +1 -1
- package/dist/debug/runtime/RaphRuntime.cjs +1 -1
- package/dist/debug/runtime/RaphRuntime.js +1134 -502
- package/dist/debug/runtime/diagnostics/RaphDebug.cjs +1 -0
- package/dist/debug/runtime/diagnostics/RaphDebug.js +287 -0
- package/dist/debug/runtime/errors.cjs +1 -1
- package/dist/debug/runtime/errors.js +6 -3
- package/dist/debug/runtime/ownership/RaphEffectScope.cjs +1 -0
- package/dist/debug/runtime/ownership/RaphEffectScope.js +304 -0
- package/dist/debug/runtime/ownership/RaphNode.cjs +1 -0
- package/dist/debug/runtime/ownership/RaphNode.js +665 -0
- package/dist/debug/runtime/ownership/RaphScope.cjs +1 -0
- package/dist/debug/runtime/ownership/RaphScope.js +236 -0
- package/dist/debug/runtime/ownership/parent-graph.types.cjs +1 -0
- package/dist/debug/runtime/ownership/parent-graph.types.js +1 -0
- package/dist/debug/runtime/phases/RaphFrameLoop.cjs +1 -0
- package/dist/debug/runtime/{RaphFrameLoop.js → phases/RaphFrameLoop.js} +13 -17
- package/dist/debug/runtime/phases/RaphPhasePipeline.cjs +1 -0
- package/dist/debug/runtime/phases/RaphPhasePipeline.js +848 -0
- package/dist/debug/runtime/phases/RaphPhaseTaskRecord.cjs +1 -0
- package/dist/debug/runtime/phases/RaphPhaseTaskRecord.js +176 -0
- package/dist/debug/runtime/phases/RaphPhaseWatch.cjs +1 -0
- package/dist/debug/runtime/phases/RaphPhaseWatch.js +20 -0
- package/dist/debug/runtime/phases/orderPhaseTasks.cjs +1 -0
- package/dist/debug/runtime/phases/orderPhaseTasks.js +59 -0
- package/dist/debug/runtime/reactivity/PathHandle.cjs +1 -0
- package/dist/debug/runtime/reactivity/PathHandle.js +165 -0
- package/dist/debug/runtime/reactivity/RaphMetaSource.cjs +1 -0
- package/dist/debug/runtime/reactivity/RaphMetaSource.js +108 -0
- package/dist/debug/runtime/reactivity/RaphSelector.cjs +1 -0
- package/dist/debug/runtime/reactivity/RaphSelector.js +503 -0
- package/dist/debug/runtime/reactivity/RaphWorkGraph.cjs +1 -0
- package/dist/debug/runtime/reactivity/RaphWorkGraph.js +1157 -0
- package/dist/debug/runtime/reactivity/RuntimeReactivity.cjs +1 -0
- package/dist/debug/runtime/reactivity/RuntimeReactivity.js +550 -0
- package/dist/debug/runtime/reactivity/RuntimeWatch.cjs +1 -0
- package/dist/debug/runtime/reactivity/RuntimeWatch.js +77 -0
- package/dist/debug/runtime/reactivity/disposal-sweep.utils.cjs +1 -0
- package/dist/debug/runtime/reactivity/disposal-sweep.utils.js +42 -0
- package/dist/debug/runtime/reactivity/runtime-reactivity.types.cjs +1 -0
- package/dist/debug/runtime/reactivity/runtime-reactivity.types.js +1 -0
- package/dist/entrypoints/machine-testing.d.ts +2 -0
- package/dist/entrypoints/machine.d.ts +5 -0
- package/dist/entrypoints/path.d.ts +14 -0
- package/dist/entrypoints/reactivity.d.ts +1 -0
- package/dist/entrypoints/runtime.d.ts +18 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +46 -38
- package/dist/machine/compiler.d.ts +71 -0
- package/dist/machine/core.d.ts +50 -0
- package/dist/machine/persistence.d.ts +5 -0
- package/dist/machine/runtime.d.ts +4 -0
- package/dist/machine/testing.d.ts +43 -0
- package/dist/machine/types.d.ts +155 -0
- package/dist/machine-testing.cjs +1 -0
- package/dist/machine-testing.js +188 -0
- package/dist/machine.cjs +1 -0
- package/dist/machine.js +822 -0
- package/dist/main.d.ts +20 -0
- package/dist/path/{data-path.d.ts → DataPath.d.ts} +16 -40
- package/dist/path/{path-router.d.ts → PathRouter.d.ts} +1 -1
- package/dist/path/RaphKernel.d.ts +37 -10
- package/dist/path/data-path.types.d.ts +34 -0
- package/dist/path/data-path.utils.d.ts +9 -0
- package/dist/path/{DerivedRegistry.d.ts → derived/DerivedRegistry.d.ts} +2 -2
- package/dist/path/{RaphDerivedHandle.d.ts → derived/RaphDerivedHandle.d.ts} +3 -3
- package/dist/path/derived/derived-collection.types.d.ts +12 -0
- package/dist/path/{derived-collection.d.ts → derived/derived-collection.utils.d.ts} +3 -13
- package/dist/path/{derived-strategies.d.ts → derived/derived-strategy.types.d.ts} +0 -3
- package/dist/path/derived/derived-strategy.utils.d.ts +4 -0
- package/dist/path/{MetaController.d.ts → meta/MetaController.d.ts} +4 -4
- package/dist/path/{RaphMeta.d.ts → meta/RaphMeta.d.ts} +2 -2
- package/dist/path/{RaphMetaStore.d.ts → meta/RaphMetaStore.d.ts} +1 -1
- package/dist/path/{meta.types.d.ts → meta/meta.types.d.ts} +2 -4
- package/dist/path/path.types.d.ts +3 -2
- package/dist/path/{segment-key.d.ts → pathSegmentKey.d.ts} +1 -1
- package/dist/path/{AdapterPathStore.d.ts → storage/AdapterPathStore.d.ts} +4 -4
- package/dist/path/{data-adapter.d.ts → storage/DefaultDataAdapter.d.ts} +2 -17
- package/dist/path/storage/PathEventHub.d.ts +62 -0
- package/dist/path/{PathStore.d.ts → storage/PathStore.d.ts} +7 -7
- package/dist/path/storage/data-adapter.types.d.ts +17 -0
- package/dist/path.cjs +1 -1
- package/dist/path.js +16 -16
- package/dist/raph.cjs +1 -1
- package/dist/raph.js +46 -38
- package/dist/reactivity/disposal.d.ts +14 -0
- package/dist/reactivity/engine.d.ts +193 -6
- package/dist/reactivity/reactive-object.d.ts +36 -0
- package/dist/reactivity/scope.d.ts +108 -30
- package/dist/reactivity/types.d.ts +25 -0
- package/dist/reactivity.cjs +1 -1
- package/dist/reactivity.js +12 -12
- package/dist/runtime/RaphRuntime.d.ts +319 -160
- package/dist/runtime/diagnostics/RaphDebug.d.ts +239 -0
- package/dist/runtime/errors.d.ts +5 -0
- package/dist/runtime/ownership/RaphEffectScope.d.ts +98 -0
- package/dist/runtime/ownership/RaphNode.d.ts +310 -0
- package/dist/runtime/ownership/RaphScope.d.ts +168 -0
- package/dist/runtime/{parent-graph.d.ts → ownership/parent-graph.types.d.ts} +0 -1
- package/dist/runtime/ownership/parentGraph.d.ts +3 -0
- package/dist/runtime/phases/RaphPhasePipeline.d.ts +253 -0
- package/dist/runtime/phases/RaphPhaseTaskRecord.d.ts +195 -0
- package/dist/runtime/phases/RaphPhaseWatch.d.ts +22 -0
- package/dist/runtime/phases/orderPhaseTasks.d.ts +6 -0
- package/dist/runtime/phases/phase.types.d.ts +171 -0
- package/dist/runtime/{PathHandle.d.ts → reactivity/PathHandle.d.ts} +14 -6
- package/dist/runtime/reactivity/RaphMetaSource.d.ts +32 -0
- package/dist/runtime/reactivity/RaphSelector.d.ts +338 -0
- package/dist/runtime/reactivity/RaphWorkGraph.d.ts +309 -0
- package/dist/runtime/reactivity/RuntimeReactivity.d.ts +293 -0
- package/dist/runtime/{RuntimeWatch.d.ts → reactivity/RuntimeWatch.d.ts} +12 -6
- package/dist/runtime/reactivity/disposal-sweep.utils.d.ts +19 -0
- package/dist/runtime/reactivity/runtime-reactivity.types.d.ts +56 -0
- package/dist/runtime.cjs +1 -1
- package/dist/runtime.js +21 -16
- package/package.json +76 -35
- package/ReadMe.md +0 -153
- package/dist/api/public.d.ts +0 -22
- package/dist/debug/api/public.cjs +0 -1
- package/dist/debug/api/public.js +0 -40
- package/dist/debug/path/AdapterPathStore.cjs +0 -1
- package/dist/debug/path/AdapterPathStore.js +0 -133
- package/dist/debug/path/DerivedRegistry.cjs +0 -1
- package/dist/debug/path/DerivedRegistry.js +0 -157
- package/dist/debug/path/MetaController.cjs +0 -1
- package/dist/debug/path/PathEventHub.cjs +0 -1
- package/dist/debug/path/PathEventHub.js +0 -148
- package/dist/debug/path/PathStore.cjs +0 -1
- package/dist/debug/path/RaphDerivedHandle.cjs +0 -1
- package/dist/debug/path/RaphMeta.cjs +0 -1
- package/dist/debug/path/RaphMeta.js +0 -68
- package/dist/debug/path/RaphMetaStore.cjs +0 -1
- package/dist/debug/path/data-adapter.cjs +0 -1
- package/dist/debug/path/data-draft.cjs +0 -1
- package/dist/debug/path/data-path.cjs +0 -1
- package/dist/debug/path/data-path.js +0 -423
- package/dist/debug/path/derived-collection.cjs +0 -1
- package/dist/debug/path/path-router.cjs +0 -1
- package/dist/debug/path/path-router.js +0 -86
- package/dist/debug/path/public.cjs +0 -1
- package/dist/debug/path/public.js +0 -18
- package/dist/debug/runtime/PathHandle.cjs +0 -1
- package/dist/debug/runtime/PathHandle.js +0 -139
- package/dist/debug/runtime/RaphDebug.cjs +0 -1
- package/dist/debug/runtime/RaphDebug.js +0 -15
- package/dist/debug/runtime/RaphFrameLoop.cjs +0 -1
- package/dist/debug/runtime/RaphNode.cjs +0 -1
- package/dist/debug/runtime/RaphNode.js +0 -143
- package/dist/debug/runtime/RaphPhasePipeline.cjs +0 -1
- package/dist/debug/runtime/RaphPhasePipeline.js +0 -526
- package/dist/debug/runtime/RaphScope.cjs +0 -1
- package/dist/debug/runtime/RaphScope.js +0 -64
- package/dist/debug/runtime/RuntimeReactivity.cjs +0 -1
- package/dist/debug/runtime/RuntimeReactivity.js +0 -154
- package/dist/debug/runtime/RuntimeWatch.cjs +0 -1
- package/dist/debug/runtime/RuntimeWatch.js +0 -71
- package/dist/debug/runtime/public.cjs +0 -1
- package/dist/debug/runtime/public.js +0 -18
- package/dist/path/PathEventHub.d.ts +0 -48
- package/dist/path/public.d.ts +0 -14
- package/dist/runtime/RaphDebug.d.ts +0 -32
- package/dist/runtime/RaphNode.d.ts +0 -68
- package/dist/runtime/RaphPhasePipeline.d.ts +0 -133
- package/dist/runtime/RaphScope.d.ts +0 -50
- package/dist/runtime/RuntimeReactivity.d.ts +0 -40
- package/dist/runtime/phase.types.d.ts +0 -49
- package/dist/runtime/public.d.ts +0 -13
- package/dist/runtime/runtime-reactivity.types.d.ts +0 -9
- /package/dist/debug/path/{meta.types.cjs → data-path.types.cjs} +0 -0
- /package/dist/debug/path/{meta.types.js → data-path.types.js} +0 -0
- /package/dist/debug/{runtime/runtime-reactivity.types.cjs → path/derived/derived-collection.types.cjs} +0 -0
- /package/dist/debug/{runtime/runtime-reactivity.types.js → path/derived/derived-collection.types.js} +0 -0
- /package/dist/debug/path/{derived-strategies.cjs → derived/derived-strategy.utils.cjs} +0 -0
- /package/dist/debug/path/{derived-strategies.js → derived/derived-strategy.utils.js} +0 -0
- /package/dist/debug/path/{segment-key.cjs → pathSegmentKey.cjs} +0 -0
- /package/dist/debug/path/{segment-key.js → pathSegmentKey.js} +0 -0
- /package/dist/debug/runtime/{parent-graph.cjs → ownership/parentGraph.cjs} +0 -0
- /package/dist/debug/runtime/{parent-graph.js → ownership/parentGraph.js} +0 -0
- /package/dist/debug/runtime/{disposal.cjs → ownership/throwDisposalErrors.cjs} +0 -0
- /package/dist/debug/runtime/{disposal.js → ownership/throwDisposalErrors.js} +0 -0
- /package/dist/debug/runtime/{phase.types.cjs → phases/phase.types.cjs} +0 -0
- /package/dist/debug/runtime/{phase.types.js → phases/phase.types.js} +0 -0
- /package/dist/path/{data-draft.d.ts → storage/createDataDraft.d.ts} +0 -0
- /package/dist/runtime/{disposal.d.ts → ownership/throwDisposalErrors.d.ts} +0 -0
- /package/dist/runtime/{RaphFrameLoop.d.ts → phases/RaphFrameLoop.d.ts} +0 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { Disposer, OwnedSourceHooks } from '../../reactivity/types';
|
|
2
|
+
import { RaphNode } from '../ownership/RaphNode';
|
|
3
|
+
import { RaphScope } from '../ownership/RaphScope';
|
|
4
|
+
import { RaphAggregateSource, RaphStructureCause, RaphWatchInclude, RaphWatchSource, RaphWorkCause, RaphWorkCauseKind } from '../phases/phase.types';
|
|
5
|
+
import { RaphRuntime } from '../RaphRuntime';
|
|
6
|
+
type WorkSink = (cause: RaphWorkCause, key: object, schedule: boolean) => void;
|
|
7
|
+
type WorkEdgeSource = RaphProducer | RaphNode | RaphRuntime;
|
|
8
|
+
interface WorkEdge {
|
|
9
|
+
readonly sink: WorkSink;
|
|
10
|
+
readonly kind: 'producer' | 'runtime' | 'self' | 'subtree';
|
|
11
|
+
source?: WorkEdgeSource;
|
|
12
|
+
activationRelease?: Disposer;
|
|
13
|
+
previous?: WorkEdge;
|
|
14
|
+
next?: WorkEdge;
|
|
15
|
+
}
|
|
16
|
+
interface WorkEdgeList {
|
|
17
|
+
first?: WorkEdge;
|
|
18
|
+
last?: WorkEdge;
|
|
19
|
+
}
|
|
20
|
+
type CleanupSource = RaphProducer | RaphNode | RaphAggregate;
|
|
21
|
+
interface CleanupEdge {
|
|
22
|
+
cleanup?: () => void;
|
|
23
|
+
source?: CleanupSource;
|
|
24
|
+
previous?: CleanupEdge;
|
|
25
|
+
next?: CleanupEdge;
|
|
26
|
+
}
|
|
27
|
+
interface CleanupEdgeList {
|
|
28
|
+
first?: CleanupEdge;
|
|
29
|
+
last?: CleanupEdge;
|
|
30
|
+
}
|
|
31
|
+
interface AggregateSubscription {
|
|
32
|
+
dispose?: (finalCause?: RaphWorkCause) => void;
|
|
33
|
+
aggregate?: RaphAggregate;
|
|
34
|
+
previous?: AggregateSubscription;
|
|
35
|
+
next?: AggregateSubscription;
|
|
36
|
+
}
|
|
37
|
+
interface ProducerOptions {
|
|
38
|
+
readonly includeRuntime?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** @internal */
|
|
41
|
+
export type RaphProducerKind = Extract<RaphWorkCauseKind, 'frame' | 'path' | 'producer'>;
|
|
42
|
+
/**
|
|
43
|
+
* Компактное описание producer, которое возвращает его toJSON(): только
|
|
44
|
+
* примитивы, без ссылок на владельца, Runtime и граф зависимостей.
|
|
45
|
+
*
|
|
46
|
+
* @internal
|
|
47
|
+
*/
|
|
48
|
+
export interface RaphProducerDescription {
|
|
49
|
+
readonly kind: RaphProducerKind;
|
|
50
|
+
readonly owner: string;
|
|
51
|
+
readonly revision: number;
|
|
52
|
+
readonly disposed: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Runtime-сторона одного granular source: адрес explicit watch, token причины
|
|
56
|
+
* для implicit consumers и носитель последней причины. Runtime signal
|
|
57
|
+
* наследует этот класс и сам является своим producer; остальные handles
|
|
58
|
+
* получают отдельную запись через createProducer() и реестр.
|
|
59
|
+
*
|
|
60
|
+
* Поля объявлены через `declare` и присваиваются в constructor в одном
|
|
61
|
+
* порядке: у всех producers один hidden class, и ни один build target не
|
|
62
|
+
* превращает объявления в вызовы field-helper.
|
|
63
|
+
*
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export declare class RaphProducer {
|
|
67
|
+
readonly owner: RaphScope;
|
|
68
|
+
readonly kind: RaphProducerKind;
|
|
69
|
+
readonly includeRuntime: boolean;
|
|
70
|
+
subscribers: WorkEdgeList | undefined;
|
|
71
|
+
memberships: CleanupEdgeList | undefined;
|
|
72
|
+
implicitConsumers: Map<RaphNode, number> | undefined;
|
|
73
|
+
source: RaphWatchSource | undefined;
|
|
74
|
+
activate: (() => void | Disposer) | undefined;
|
|
75
|
+
runtimeActivation: Disposer | undefined;
|
|
76
|
+
lastCause: RaphWorkCause | undefined;
|
|
77
|
+
transientNext: RaphProducer | undefined;
|
|
78
|
+
revision: number;
|
|
79
|
+
disposed: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Prototype-бренд producer: `true` у RaphProducer и его наследников. Заменяет
|
|
82
|
+
* `instanceof` там, где причина ищется по token на каждое уведомление
|
|
83
|
+
* implicit consumer. Значение лежит на prototype и не занимает поле экземпляра.
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
readonly _isProducer: boolean;
|
|
87
|
+
constructor(owner: RaphScope, kind: RaphProducerKind, includeRuntime: boolean);
|
|
88
|
+
get runtime(): RaphRuntime;
|
|
89
|
+
/**
|
|
90
|
+
* Тег Object.prototype.toString: `[object RaphProducer]`. По нему инструменты,
|
|
91
|
+
* которые копируют и обходят только plain objects, принимают producer за
|
|
92
|
+
* неделимое значение: тестовый runner не клонирует его вместе со всем графом
|
|
93
|
+
* Runtime перед печатью diff. Accessor лежит на prototype.
|
|
94
|
+
*/
|
|
95
|
+
get [Symbol.toStringTag](): string;
|
|
96
|
+
/**
|
|
97
|
+
* Возвращает компактное описание вместо собственных полей. Поля producer
|
|
98
|
+
* ведут к владельцу, Runtime и графу зависимостей: без этого метода
|
|
99
|
+
* JSON.stringify упирался бы в циклы, а печать значения в логах и в diff
|
|
100
|
+
* неуспешной проверки тестового runner-а обходила бы весь граф Runtime.
|
|
101
|
+
* Метод лежит на prototype и не добавляет producer ни поля, ни closure.
|
|
102
|
+
*/
|
|
103
|
+
toJSON(): RaphProducerDescription;
|
|
104
|
+
}
|
|
105
|
+
/** Immutable explicit group of granular sources owned by one Runtime scope. */
|
|
106
|
+
export declare class RaphAggregate {
|
|
107
|
+
readonly owner: RaphScope;
|
|
108
|
+
private _sources;
|
|
109
|
+
private _disposed;
|
|
110
|
+
private _releaseOwner;
|
|
111
|
+
private _memberReleases;
|
|
112
|
+
private _firstSubscription;
|
|
113
|
+
private _lastSubscription;
|
|
114
|
+
private _firstDependent;
|
|
115
|
+
private _lastDependent;
|
|
116
|
+
private _revision;
|
|
117
|
+
private _finalCause;
|
|
118
|
+
/** @internal */
|
|
119
|
+
private constructor();
|
|
120
|
+
/** @internal */
|
|
121
|
+
static _create(owner: RaphScope, sources: readonly RaphAggregateSource[]): RaphAggregate;
|
|
122
|
+
get runtime(): RaphRuntime;
|
|
123
|
+
get disposed(): boolean;
|
|
124
|
+
get sources(): readonly RaphAggregateSource[];
|
|
125
|
+
dispose(): void;
|
|
126
|
+
/** @internal */
|
|
127
|
+
_assertAlive(): void;
|
|
128
|
+
/** @internal */
|
|
129
|
+
_bindOwner(release: () => void): void;
|
|
130
|
+
/** @internal */
|
|
131
|
+
_bindMembers(releases: Array<() => void>): void;
|
|
132
|
+
/** @internal */
|
|
133
|
+
_removeMember(identity: object): void;
|
|
134
|
+
/** @internal */
|
|
135
|
+
_disposeOwned(): void;
|
|
136
|
+
/** @internal */
|
|
137
|
+
_linkSubscription(dispose: (finalCause?: RaphWorkCause) => void): () => void;
|
|
138
|
+
/** @internal */
|
|
139
|
+
_linkDependent(edge: CleanupEdge): void;
|
|
140
|
+
/** @internal */
|
|
141
|
+
_detachDependent(edge: CleanupEdge): void;
|
|
142
|
+
/** @internal */
|
|
143
|
+
_disposalCause(): RaphWorkCause;
|
|
144
|
+
/** @internal */
|
|
145
|
+
_detachSubscription(subscription: AggregateSubscription): void;
|
|
146
|
+
}
|
|
147
|
+
/** Runtime-only intrusive indexes for granular sources. */
|
|
148
|
+
export declare class RaphWorkGraph {
|
|
149
|
+
private readonly _runtime;
|
|
150
|
+
/**
|
|
151
|
+
* Удерживает форму причины записи значения, пока в isolate нет ни одной
|
|
152
|
+
* живой причины.
|
|
153
|
+
* @internal
|
|
154
|
+
*/
|
|
155
|
+
static _valueCauseShapeAnchor: RaphWorkCause;
|
|
156
|
+
private _selfSubscribers;
|
|
157
|
+
private _subtreeSubscribers;
|
|
158
|
+
private _runtimeSubscribers;
|
|
159
|
+
private _runtimeSubscriberCount;
|
|
160
|
+
private _runtimeActivationProducers;
|
|
161
|
+
private _nodeMemberships;
|
|
162
|
+
private _nodeRevisions;
|
|
163
|
+
private _nodeTouchKeys;
|
|
164
|
+
private _implicitProducers;
|
|
165
|
+
private _transientProducers;
|
|
166
|
+
private _dispatchDepth;
|
|
167
|
+
private _detachedEdges;
|
|
168
|
+
private _disposed;
|
|
169
|
+
constructor(_runtime: RaphRuntime);
|
|
170
|
+
createProducer(owner: RaphScope, kind?: RaphProducerKind, options?: ProducerOptions): RaphProducer;
|
|
171
|
+
attachProducer<T extends object>(record: RaphProducer, source: T): T;
|
|
172
|
+
setProducerActivation(record: RaphProducer, activate: () => void | Disposer, activateForRuntime?: boolean): void;
|
|
173
|
+
producerHooks(record: RaphProducer): OwnedSourceHooks;
|
|
174
|
+
/**
|
|
175
|
+
* Возвращает последнюю причину producer, который engine назвал своим token.
|
|
176
|
+
* Token чужого Runtime и значение, не являющееся producer, причины не имеют.
|
|
177
|
+
*
|
|
178
|
+
* Метод вызывается на каждое уведомление implicit consumer, поэтому producer
|
|
179
|
+
* распознаётся prototype-брендом, а Runtime читается у владельца напрямую:
|
|
180
|
+
* без `instanceof` и без accessor.
|
|
181
|
+
*/
|
|
182
|
+
causeForToken(token: unknown): RaphWorkCause | undefined;
|
|
183
|
+
/** Clears mutation-local payloads after engine propagation consumed them. */
|
|
184
|
+
clearTransientCauses(): void;
|
|
185
|
+
notifyProducer(record: RaphProducer, previous?: unknown, value?: unknown, events?: RaphWorkCause['events'], schedule?: boolean, hasReactiveSubscribers?: boolean, includeValues?: boolean): void;
|
|
186
|
+
/**
|
|
187
|
+
* Публикует запись значения producer: форма `notifyProducer()` для причины с
|
|
188
|
+
* `previous` и `value`, без events и с планированием. Так свою запись
|
|
189
|
+
* публикует Runtime signal.
|
|
190
|
+
*
|
|
191
|
+
* Причина создаётся при тех же условиях и с теми же полями. Отличие в цене:
|
|
192
|
+
* у producer с implicit consumers, на который не подписан ни один watch, ни
|
|
193
|
+
* его node, ни поддерево, ни Runtime, причину получают только consumers через
|
|
194
|
+
* `causeForToken()`. Тогда обход подписчиков не начинается: запись не строит
|
|
195
|
+
* массив предков и не выполняет ни одного вызова на каждого из них.
|
|
196
|
+
*
|
|
197
|
+
* @internal
|
|
198
|
+
*/
|
|
199
|
+
_notifyValueWrite(record: RaphProducer, previous: unknown, value: unknown, hasReactiveSubscribers: boolean): void;
|
|
200
|
+
notifyProducerEvents(record: RaphProducer, events: NonNullable<RaphWorkCause['events']>, schedule?: boolean, hasReactiveSubscribers?: boolean): void;
|
|
201
|
+
/**
|
|
202
|
+
* Дешёвая предварительная проверка structural publication: `false` означает,
|
|
203
|
+
* что `notifyNode` для этой node вернётся до создания cause и без побочных
|
|
204
|
+
* эффектов. `true` консервативен и ведёт на полный путь.
|
|
205
|
+
*
|
|
206
|
+
* @internal
|
|
207
|
+
*/
|
|
208
|
+
_hasStructuralDemand(node: RaphNode): boolean;
|
|
209
|
+
/**
|
|
210
|
+
* Сообщает, есть ли хотя бы один runtime-, subtree- или self-подписчик.
|
|
211
|
+
* `true` означает, что `_hasStructuralDemand` может вернуть `true` для
|
|
212
|
+
* какой-то node этого Runtime.
|
|
213
|
+
*
|
|
214
|
+
* @internal
|
|
215
|
+
*/
|
|
216
|
+
_hasNodeSubscribers(): boolean;
|
|
217
|
+
notifyNode(node: RaphNode, kind: Extract<RaphWorkCauseKind, 'structure' | 'touch'>, options?: {
|
|
218
|
+
readonly metadata?: unknown;
|
|
219
|
+
readonly structure?: RaphStructureCause;
|
|
220
|
+
readonly oldAncestors?: readonly RaphNode[];
|
|
221
|
+
readonly newAncestors?: readonly RaphNode[];
|
|
222
|
+
}): void;
|
|
223
|
+
createAggregate(owner: RaphScope, sources: readonly RaphAggregateSource[]): RaphAggregate;
|
|
224
|
+
subscribe(input: RaphWatchSource, include: RaphWatchInclude | undefined, sink: WorkSink): () => void;
|
|
225
|
+
assertSubscriptionAllowed(consumer: RaphScope, input: RaphWatchSource): void;
|
|
226
|
+
/**
|
|
227
|
+
* Rejects a move that would make an existing implicit reactive edge illegal.
|
|
228
|
+
*
|
|
229
|
+
* Рёбра от producers с отдельной записью (computed, machine) берутся из
|
|
230
|
+
* учёта `implicitConsumers`. Рёбра от Runtime signals нигде не учитываются:
|
|
231
|
+
* они читаются из графа в момент проверки.
|
|
232
|
+
*/
|
|
233
|
+
assertReparentAllowed(node: RaphNode, newParent: RaphNode): void;
|
|
234
|
+
/**
|
|
235
|
+
* Проверяет живые implicit-рёбра от Runtime signals. Implicit-чтение
|
|
236
|
+
* разрешено только у собственного владельца, его предков и root scope,
|
|
237
|
+
* поэтому внешний для переносимого поддерева источник всегда принадлежит
|
|
238
|
+
* прежнему предку `node`. Предок, который остаётся предком нового parent,
|
|
239
|
+
* сохраняет все свои рёбра законными. Остаются предки от прежнего parent до
|
|
240
|
+
* ближайшего общего с новым parent, не включая его: перенос запрещён, если
|
|
241
|
+
* signal такого предка читает потребитель из переносимого поддерева.
|
|
242
|
+
*
|
|
243
|
+
* Посылка о прежнем предке держится на проверке самого чтения: Runtime
|
|
244
|
+
* signal отклоняет implicit-чтение чужого владельца и тогда, когда общий
|
|
245
|
+
* контекст владельца снят untracked-работой другого Runtime, а потребитель
|
|
246
|
+
* этого Runtime остался активным (assertReadable в RuntimeReactivity).
|
|
247
|
+
*
|
|
248
|
+
* Цена переноса. Перенос под прежнего parent и перенос корня дерева
|
|
249
|
+
* проверки не требуют. Иначе для каждого покидаемого предка обходится весь
|
|
250
|
+
* список его источников (не-signals пропускаются за один шаг), а у каждого
|
|
251
|
+
* signal с записью графа — список его потребителей до первого потребителя
|
|
252
|
+
* из переносимого поддерева. Итого O(покидаемые предки × их источники +
|
|
253
|
+
* потребители их signals), без аллокаций. Цена не зависит от того, сколько
|
|
254
|
+
* рёбер между nodes есть в остальном Runtime, но растёт с числом источников
|
|
255
|
+
* и потребителей у покидаемых предков, даже когда их signals читает только
|
|
256
|
+
* сам владелец: перенос из-под parent с тысячей signals обходит всю тысячу.
|
|
257
|
+
* Прежний учёт рёбер стоил наоборот: ничего для таких signals и обход всех
|
|
258
|
+
* producers Runtime с рёбрами между nodes вместе с их потребителями, где бы
|
|
259
|
+
* в дереве они ни находились.
|
|
260
|
+
*/
|
|
261
|
+
private _assertSignalEdgesAllowReparent;
|
|
262
|
+
releaseNode(node: RaphNode): void;
|
|
263
|
+
dispose(): void;
|
|
264
|
+
/**
|
|
265
|
+
* Освобождает producer: публикует финальную structural cause при спросе и
|
|
266
|
+
* снимает его подписчиков, memberships и регистрацию. Вызывается hook-ом
|
|
267
|
+
* onDispose owned-источника и самим Runtime signal.
|
|
268
|
+
*
|
|
269
|
+
* @internal
|
|
270
|
+
*/
|
|
271
|
+
_disposeProducer(record: RaphProducer, hasReactiveSubscribers?: boolean): void;
|
|
272
|
+
private _dispatchProducer;
|
|
273
|
+
private _dispatchProducerLazily;
|
|
274
|
+
private _createProducerCause;
|
|
275
|
+
private _retainRuntimeSubscriber;
|
|
276
|
+
private _releaseRuntimeSubscriber;
|
|
277
|
+
private _releaseRuntimeActivations;
|
|
278
|
+
/**
|
|
279
|
+
* Учитывает одно фактическое implicit-ребро графа от producer к consumer
|
|
280
|
+
* owner и возвращает его точное снятие. Вызывается hook-ом onDependency
|
|
281
|
+
* producers с отдельной записью; Runtime signal этого hook не имеет, и его
|
|
282
|
+
* рёбра проверка reparent читает прямо из графа.
|
|
283
|
+
*
|
|
284
|
+
* @internal
|
|
285
|
+
*/
|
|
286
|
+
_linkImplicitDependency(record: RaphProducer, consumerOwner: object): (() => void) | undefined;
|
|
287
|
+
private _subscribeOne;
|
|
288
|
+
private _subscribeNode;
|
|
289
|
+
private _createNodeEdgeRelease;
|
|
290
|
+
private _linkSourceCleanup;
|
|
291
|
+
private _detachCleanupEdge;
|
|
292
|
+
private _releaseCleanupList;
|
|
293
|
+
private _validateAggregateSources;
|
|
294
|
+
private _assertSourceVisibleTo;
|
|
295
|
+
private _assertProvisionalOwnerAccess;
|
|
296
|
+
private _dispatch;
|
|
297
|
+
private _appendWorkEdge;
|
|
298
|
+
private _detachWorkEdge;
|
|
299
|
+
private _releaseWorkList;
|
|
300
|
+
private _releaseGranule;
|
|
301
|
+
private _setTransientCause;
|
|
302
|
+
private _producerHasDemand;
|
|
303
|
+
private _nodeTouchKey;
|
|
304
|
+
private _nodeHasDemand;
|
|
305
|
+
private _assertOwner;
|
|
306
|
+
private _assertRuntime;
|
|
307
|
+
private _assertAlive;
|
|
308
|
+
}
|
|
309
|
+
export {};
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { OwnedSourceEntry } from '../../reactivity/scope';
|
|
2
|
+
import { EffectCallback, OwnedSourceHooks, ReactiveNode, ReactivityOptions, ReadonlySignal, Signal } from '../../reactivity/types';
|
|
3
|
+
import { RaphScope } from '../ownership/RaphScope';
|
|
4
|
+
import { RaphSelectorOptions, RuntimeSelector } from './RaphSelector';
|
|
5
|
+
import { RaphProducerDescription, RaphProducerKind, RaphProducer } from './RaphWorkGraph';
|
|
6
|
+
import { ReleasedGraphShapes, RuntimeSignalLifecycle, RuntimeSignalWriteTap } from './runtime-reactivity.types';
|
|
7
|
+
import { RaphReactivity } from '../../reactivity/engine';
|
|
8
|
+
/**
|
|
9
|
+
* Компактное описание Runtime signal, которое возвращает его toJSON().
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export interface RuntimeSignalDescription extends RaphProducerDescription {
|
|
14
|
+
readonly index: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Наибольший номер, который toJSON() Runtime signal считает точно. Номер
|
|
18
|
+
* считается проходом по списку источников владельца, и граница делает цену
|
|
19
|
+
* одного описания постоянной: сериализация всех signals одного владельца
|
|
20
|
+
* линейна по их числу, а не квадратична.
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
export declare const SIGNAL_INDEX_LIMIT = 64;
|
|
25
|
+
/**
|
|
26
|
+
* Runtime signal одним объектом: публичный handle, producer WorkGraph, source
|
|
27
|
+
* hooks своей записи графа и запись в списке источников владельца. Методы
|
|
28
|
+
* лежат на prototype, поэтому signal не создаёт ни одной closure; get, peek и
|
|
29
|
+
* set нужно вызывать через handle или с явным receiver.
|
|
30
|
+
*
|
|
31
|
+
* Значение лежит в самом signal до первого отслеживаемого чтения. Оно
|
|
32
|
+
* материализует запись графа, и дальше значением владеет запись.
|
|
33
|
+
*
|
|
34
|
+
* Поля объявлены через `declare` и присваиваются в constructor в одном порядке
|
|
35
|
+
* вслед за полями RaphProducer: у всех signals один hidden class.
|
|
36
|
+
*/
|
|
37
|
+
export declare class RuntimeSignal<T> extends RaphProducer implements Signal<T>, OwnedSourceHooks, OwnedSourceEntry {
|
|
38
|
+
private _value;
|
|
39
|
+
private _node;
|
|
40
|
+
/**
|
|
41
|
+
* Источник, зарегистрированный у владельца перед этим.
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
_previousSource: OwnedSourceEntry | undefined;
|
|
45
|
+
private _writeTaps;
|
|
46
|
+
/**
|
|
47
|
+
* Создаёт signal своим собственным handle. Регистрацию у владельца
|
|
48
|
+
* выполняет вызывающий код.
|
|
49
|
+
*/
|
|
50
|
+
constructor(owner: RaphScope, kind: RaphProducerKind, includeRuntime: boolean, value: T);
|
|
51
|
+
/**
|
|
52
|
+
* Identity producer для задач implicit effects: сам signal.
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
get token(): this;
|
|
56
|
+
/**
|
|
57
|
+
* Владелец signal. Engine читает это поле только у потребителей, а signal
|
|
58
|
+
* потребителем не бывает; getter сохраняет полный контракт source hooks.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
get dependencyOwner(): RaphScope;
|
|
62
|
+
/**
|
|
63
|
+
* Возвращает компактное описание signal для JSON.stringify, логов и diff
|
|
64
|
+
* неуспешной проверки. К описанию producer добавлен номер signal среди
|
|
65
|
+
* источников его владельца в порядке регистрации: один и тот же signal
|
|
66
|
+
* описывается одинаково, сколько бы раз и через какую копию его ни
|
|
67
|
+
* печатали, а разные живые signals одного владельца различаются номером,
|
|
68
|
+
* пока он меньше SIGNAL_INDEX_LIMIT. Номер считается проходом по списку
|
|
69
|
+
* источников только при сериализации и не дальше этой границы: у каждого
|
|
70
|
+
* источника, зарегистрированного после первых SIGNAL_INDEX_LIMIT, он равен
|
|
71
|
+
* границе. У освобождённого signal номер равен нулю. Значение в описание не
|
|
72
|
+
* входит: оно может быть сколь угодно большим и само содержать циклы.
|
|
73
|
+
*/
|
|
74
|
+
toJSON(): RuntimeSignalDescription;
|
|
75
|
+
/**
|
|
76
|
+
* Читает значение и регистрирует зависимость активного потребителя.
|
|
77
|
+
*/
|
|
78
|
+
get(): T;
|
|
79
|
+
/**
|
|
80
|
+
* Читает значение без подписки текущего потребителя.
|
|
81
|
+
*/
|
|
82
|
+
peek(): T;
|
|
83
|
+
/**
|
|
84
|
+
* Записывает значение в собственной границе записи Runtime. Граница
|
|
85
|
+
* открывается и закрывается явными вызовами, без closure.
|
|
86
|
+
*/
|
|
87
|
+
set(value: T): void;
|
|
88
|
+
/**
|
|
89
|
+
* Записывает значение внутри уже открытой границы записи, минуя политику
|
|
90
|
+
* actions: так Runtime продвигает собственный frame signal.
|
|
91
|
+
* @internal
|
|
92
|
+
*/
|
|
93
|
+
_writeInBoundary(value: T): void;
|
|
94
|
+
/**
|
|
95
|
+
* Подключает наблюдателя фактических записей этого signal. Наблюдатель
|
|
96
|
+
* вызывается синхронно внутри границы записи, после того как новое значение
|
|
97
|
+
* стало видимым для чтения, и до выхода из записи. Запись, которая уже идёт,
|
|
98
|
+
* нового наблюдателя не вызывает. Цена подключения не зависит от числа
|
|
99
|
+
* наблюдателей.
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
_addWriteTap(tap: RuntimeSignalWriteTap): void;
|
|
103
|
+
/**
|
|
104
|
+
* Отключает наблюдателя записей: его место занимает последний наблюдатель
|
|
105
|
+
* списка. Запись, которая уже идёт, ещё вызовет отключённого наблюдателя.
|
|
106
|
+
* Отключение неизвестного наблюдателя и отключение у освобождённого signal
|
|
107
|
+
* безопасны. Цена отключения не зависит от числа наблюдателей.
|
|
108
|
+
* @internal
|
|
109
|
+
*/
|
|
110
|
+
_removeWriteTap(tap: RuntimeSignalWriteTap): void;
|
|
111
|
+
/**
|
|
112
|
+
* Сообщает WorkGraph о фактической записи до распространения по графу.
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
115
|
+
onChange(previous: unknown, value: unknown, hasReactiveSubscribers: boolean): void;
|
|
116
|
+
/**
|
|
117
|
+
* Освобождает producer-сторону signal в WorkGraph.
|
|
118
|
+
* @internal
|
|
119
|
+
*/
|
|
120
|
+
onDispose(hasReactiveSubscribers: boolean): void;
|
|
121
|
+
/**
|
|
122
|
+
* Ищет среди текущих потребителей signal в графе первого, чьего владельца
|
|
123
|
+
* принимает accept, и возвращает этого владельца. Signal не ведёт учёта
|
|
124
|
+
* своих implicit-рёбер и не имеет hook onDependency: рёбра читаются из
|
|
125
|
+
* записи графа только по запросу. У signal без записи графа потребителей
|
|
126
|
+
* нет: его ещё не читал ни один потребитель либо он уже освобождён.
|
|
127
|
+
* Владельцы наблюдателей записи считаются потребителями наравне с ними.
|
|
128
|
+
* @internal
|
|
129
|
+
*/
|
|
130
|
+
_findConsumerOwner<Context>(accept: (consumerOwner: object, context: Context) => boolean, context: Context): object | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* Освобождает signal как источник владельца: публикует финальную причину,
|
|
133
|
+
* отсоединяет запись графа и отпускает значение. Сбой одного шага не
|
|
134
|
+
* отменяет остальные. Повторный вызов безопасен.
|
|
135
|
+
* @internal
|
|
136
|
+
*/
|
|
137
|
+
_finalizeSource(): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Записывает значение без проверок lifetime и без границы записи.
|
|
140
|
+
* Критерий изменения — ===, как у записи графа.
|
|
141
|
+
*/
|
|
142
|
+
private _write;
|
|
143
|
+
/**
|
|
144
|
+
* Запись signal с наблюдателями. Отличается от `_write()` двумя вещами.
|
|
145
|
+
* Причина записи публикуется и тогда, когда потребители есть только у
|
|
146
|
+
* наблюдателя: их будит эта же запись. После того как новое значение стало
|
|
147
|
+
* видимым, каждый наблюдатель получает прежнее и новое значение. Сбой
|
|
148
|
+
* распространения по графу или одного наблюдателя не отменяет остальных.
|
|
149
|
+
*
|
|
150
|
+
* Запись обходит тот список наблюдателей, который застала: подключение и
|
|
151
|
+
* отключение во время обхода меняют его копию.
|
|
152
|
+
*/
|
|
153
|
+
private _writeTapped;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Внутренний policy adapter, наследующий реактивные алгоритмы без дублирования.
|
|
157
|
+
*/
|
|
158
|
+
export declare class RuntimeReactivity extends RaphReactivity {
|
|
159
|
+
/** @internal */
|
|
160
|
+
readonly _lifecycle: RuntimeSignalLifecycle;
|
|
161
|
+
/**
|
|
162
|
+
* Удерживает формы, которые записи графа получают только при освобождении.
|
|
163
|
+
* Создаётся первым графом Runtime в isolate и дальше не заменяется.
|
|
164
|
+
* @internal
|
|
165
|
+
*/
|
|
166
|
+
static _releasedShapeAnchor: ReleasedGraphShapes | undefined;
|
|
167
|
+
/**
|
|
168
|
+
* Тело записи engine каждого implicit phase effect этого графа: одна
|
|
169
|
+
* функция на граф, а не closure на binding. Engine вызывает тело без
|
|
170
|
+
* аргументов, поэтому свой binding оно берёт у engine: запись исполняемого
|
|
171
|
+
* effect — активный потребитель, а её задача — запись binding. Регистрация
|
|
172
|
+
* binding поэтому не выделяет ни closure, ни context, а запуск тела, которое
|
|
173
|
+
* не вернуло cleanup, не выделяет ничего.
|
|
174
|
+
*
|
|
175
|
+
* Тело binding вызывается с его consumer owner в качестве активного
|
|
176
|
+
* Runtime-контекста; контекст возвращается и после сбоя тела. Что получает
|
|
177
|
+
* тело, решает запись: frozen task либо, под `TASK_TASKLESS`, поле `group` —
|
|
178
|
+
* запуск slot у группы и `undefined` у binding без task, facade которого при
|
|
179
|
+
* этом не создаётся. Возвращённый cleanup выполняется вне любого
|
|
180
|
+
* Runtime-контекста.
|
|
181
|
+
*
|
|
182
|
+
* Вызывать функцию вправе только engine как тело записи, созданной через
|
|
183
|
+
* `_allocateTaskEffect()` с записью binding в роли задачи.
|
|
184
|
+
*
|
|
185
|
+
* @internal
|
|
186
|
+
*/
|
|
187
|
+
readonly _phaseBody: EffectCallback;
|
|
188
|
+
/**
|
|
189
|
+
* Создаёт policy adapter реактивного графа для одного runtime.
|
|
190
|
+
* @param _lifecycle Политика lifetime и записи Runtime; её читают handles
|
|
191
|
+
* этого графа, поэтому поле доступно внутри пакета.
|
|
192
|
+
*/
|
|
193
|
+
constructor(
|
|
194
|
+
/** @internal */
|
|
195
|
+
_lifecycle: RuntimeSignalLifecycle, options?: Pick<ReactivityOptions, 'adaptiveDependencyIndex'>);
|
|
196
|
+
/**
|
|
197
|
+
* Выполняет untracked-операцию, сохраняя runtime owner context.
|
|
198
|
+
*/
|
|
199
|
+
untrackedWithOwner<T>(operation: () => T): T;
|
|
200
|
+
/**
|
|
201
|
+
* Вызывает операцию с её аргументами вне Runtime owner context и вне graph
|
|
202
|
+
* consumer: форма `untrackedWithOwner(() => operation(...args))` без closure.
|
|
203
|
+
* Closure создаётся, только когда вызов пришёл изнутри отслеживаемого
|
|
204
|
+
* вычисления и graph consumer нужно снять.
|
|
205
|
+
*
|
|
206
|
+
* @internal
|
|
207
|
+
*/
|
|
208
|
+
_applyUntrackedWithOwner<Args extends unknown[], Result>(operation: (...args: Args) => Result, args: Args): Result;
|
|
209
|
+
/**
|
|
210
|
+
* Выполняет одну открытую доставку phase effect вне Runtime owner context и
|
|
211
|
+
* вне graph consumer: форма untrackedWithOwner() без closure для записи,
|
|
212
|
+
* подготовленной через _beginTaskEffectRun().
|
|
213
|
+
*
|
|
214
|
+
* @internal
|
|
215
|
+
*/
|
|
216
|
+
_runTaskEffectUntracked(node: ReactiveNode): void;
|
|
217
|
+
/**
|
|
218
|
+
* Возвращает owner текущего синхронного реактивного контекста.
|
|
219
|
+
*/
|
|
220
|
+
getActiveOwner(): object | undefined;
|
|
221
|
+
/** Returns the Runtime resource owner whose implicit dependencies are being collected. */
|
|
222
|
+
getActiveConsumerOwner(): RaphScope | undefined;
|
|
223
|
+
/**
|
|
224
|
+
* Сообщает, должен ли untracked work очищать graph consumer или Runtime owner context.
|
|
225
|
+
*/
|
|
226
|
+
hasActiveContext(): boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Выполняет операцию с указанным active owner.
|
|
229
|
+
*/
|
|
230
|
+
runWithOwner<T>(lifecycle: RuntimeSignalLifecycle | undefined, consumerOwner: RaphScope | undefined, operation: () => T): T;
|
|
231
|
+
/**
|
|
232
|
+
* Ищет среди текущих потребителей Runtime signals владельца `sourceOwner`
|
|
233
|
+
* первого, чьего владельца принимает accept, и возвращает этого владельца.
|
|
234
|
+
* Signals обходятся от нового к старому по списку источников владельца;
|
|
235
|
+
* остальные источники списка пропускаются: их рёбра учитывает сам WorkGraph.
|
|
236
|
+
* Обход ничего не выделяет. Его цена — длина списка источников владельца
|
|
237
|
+
* плюс потребители каждого его signal с записью графа до первого принятого.
|
|
238
|
+
*
|
|
239
|
+
* @internal
|
|
240
|
+
*/
|
|
241
|
+
_findSignalConsumerOwner<Context>(sourceOwner: RaphScope, accept: (consumerOwner: object, context: Context) => boolean, context: Context): object | undefined;
|
|
242
|
+
/**
|
|
243
|
+
* Проверяет отслеживаемое чтение источника владельца `sourceOwner` теми же
|
|
244
|
+
* правилами, что и чтение его Runtime signal: Runtime жив, активный
|
|
245
|
+
* потребитель принадлежит этому Runtime и вправе неявно зависеть от
|
|
246
|
+
* владельца. Lifetime самого владельца проверяет вызывающий код.
|
|
247
|
+
*
|
|
248
|
+
* @internal
|
|
249
|
+
*/
|
|
250
|
+
_assertTrackedRead(sourceOwner: RaphScope): void;
|
|
251
|
+
/**
|
|
252
|
+
* Сообщает, что у записи ровно один потребитель. Внутри cleanup связи,
|
|
253
|
+
* который engine вызывает до снятия этой связи со списка, ответ `true`
|
|
254
|
+
* означает, что снимается последняя связь записи.
|
|
255
|
+
*
|
|
256
|
+
* @internal
|
|
257
|
+
*/
|
|
258
|
+
_hasSingleSubscriber(node: ReactiveNode): boolean;
|
|
259
|
+
/**
|
|
260
|
+
* Считает записи, у которых есть потребители, в двух частях одного индекса:
|
|
261
|
+
* в ряду, где пустое место хранит undefined, и в индексе по ключам, если он
|
|
262
|
+
* есть. Ряд обходится циклом без вызовов. Обход ничего не выделяет и не
|
|
263
|
+
* меняет граф.
|
|
264
|
+
*
|
|
265
|
+
* @internal
|
|
266
|
+
*/
|
|
267
|
+
_countObserved(row: readonly (ReactiveNode | undefined)[], index: Map<unknown, ReactiveNode> | undefined): number;
|
|
268
|
+
/**
|
|
269
|
+
* Убирает записи без потребителей из обеих частей индекса: место ряда
|
|
270
|
+
* становится пустым, запись индекса по ключам удаляется. Возвращает число
|
|
271
|
+
* мест ряда, оставшихся занятыми. Сами записи не освобождаются: без
|
|
272
|
+
* потребителей и без ссылки из индекса они недостижимы.
|
|
273
|
+
*
|
|
274
|
+
* @internal
|
|
275
|
+
*/
|
|
276
|
+
_dropUnobserved(row: (ReactiveNode | undefined)[], index: Map<unknown, ReactiveNode> | undefined): number;
|
|
277
|
+
/**
|
|
278
|
+
* Создаёт selector над записываемым Runtime signal и ставит его в список
|
|
279
|
+
* источников владельца. Source должен быть доступен владельцу для implicit
|
|
280
|
+
* чтения: принадлежать ему самому, его предку или root scope. Тогда source
|
|
281
|
+
* переживает selector, а потребители selector могли бы читать source сами.
|
|
282
|
+
*/
|
|
283
|
+
selectorForOwner<Key>(source: Signal<Key>, owner: RaphScope, options?: RaphSelectorOptions<Key>): RuntimeSelector<Key>;
|
|
284
|
+
/**
|
|
285
|
+
* Создаёт Runtime signal и ставит его в список источников владельца. Signal
|
|
286
|
+
* одним объектом является handle, producer WorkGraph и записью источника.
|
|
287
|
+
*/
|
|
288
|
+
signalForOwner<T>(initialValue: T, owner: RaphScope, kind?: RaphProducerKind, includeRuntime?: boolean): RuntimeSignal<T>;
|
|
289
|
+
/**
|
|
290
|
+
* Создаёт owned computed с runtime lifecycle policy.
|
|
291
|
+
*/
|
|
292
|
+
computedForOwner<T>(getter: () => T, owner: RaphScope, sourceHooks?: OwnedSourceHooks): ReadonlySignal<T>;
|
|
293
|
+
}
|
|
@@ -1,25 +1,31 @@
|
|
|
1
|
-
import { Disposer } from '
|
|
1
|
+
import { Disposer } from '../../reactivity/types';
|
|
2
2
|
/**
|
|
3
3
|
* Хранит общий callback/cleanup lifecycle Runtime-watch без знания источника
|
|
4
4
|
* событий. Регистрация в Kernel и фазовая доставка остаются у Runtime.
|
|
5
|
+
*
|
|
6
|
+
* Поля объявлены без initializers и присваиваются в constructor в одном
|
|
7
|
+
* фиксированном порядке: у каждого watch, включая наследников, один hidden
|
|
8
|
+
* class, и ни один build target не превращает поля в вызовы helper.
|
|
5
9
|
*/
|
|
6
10
|
export declare class RuntimeWatch {
|
|
7
|
-
private readonly _runUntracked;
|
|
8
11
|
private _cleanup;
|
|
9
12
|
private _stopped;
|
|
13
|
+
private readonly _runUntracked;
|
|
14
|
+
private readonly _callback;
|
|
15
|
+
readonly deliver: () => void;
|
|
10
16
|
/**
|
|
11
17
|
* Создаёт runtime-owned watch с явным lifecycle остановки.
|
|
12
18
|
*/
|
|
13
|
-
constructor(
|
|
19
|
+
constructor(runUntracked: <T>(operation: () => T) => T, callback: () => void | Disposer);
|
|
14
20
|
/**
|
|
15
21
|
* Показывает, остановлен ли watch.
|
|
16
22
|
*/
|
|
17
23
|
get stopped(): boolean;
|
|
18
24
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
25
|
+
* Preserves cleanup/callback error aggregation and reentrant stop semantics
|
|
26
|
+
* for the less common resource-returning callback path.
|
|
21
27
|
*/
|
|
22
|
-
|
|
28
|
+
private _deliverWithCleanup;
|
|
23
29
|
/**
|
|
24
30
|
* Останавливает внешнюю регистрацию и cleanup callback, сохраняя обе ошибки.
|
|
25
31
|
*/
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { RuntimeDisposalSweeper } from './runtime-reactivity.types';
|
|
2
|
+
/**
|
|
3
|
+
* Ставит участника в очередь со сроком `due`.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function enqueueSweeper(queue: RuntimeDisposalSweeper[], sweeper: RuntimeDisposalSweeper, due: number): void;
|
|
8
|
+
/**
|
|
9
|
+
* Убирает участника из очереди. Возвращает false, если участника в ней нет.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare function dequeueSweeper(queue: RuntimeDisposalSweeper[], sweeper: RuntimeDisposalSweeper): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Назначает ближайшему участнику очереди новый срок не раньше прежнего.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function postponeFirstSweeper(queue: RuntimeDisposalSweeper[], due: number): void;
|