@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,48 @@
1
+ import { DataPathDef, PathEvent, PathWatchCallback } from './path.types';
2
+ /**
3
+ * Общий dormant event/watch lifecycle для встроенного и adapter path-store.
4
+ */
5
+ export declare class PathEventHub {
6
+ private readonly _transactionErrorMessage;
7
+ private _router;
8
+ private _events;
9
+ private _transactionDepth;
10
+ private _watcherCount;
11
+ private _publishing;
12
+ /**
13
+ * Создаёт общий transaction и publication boundary для path store.
14
+ */
15
+ constructor(_transactionErrorMessage: string);
16
+ /**
17
+ * Показывает, есть ли watchers, ради которых нужно сохранять значения событий.
18
+ */
19
+ get hasWatchers(): boolean;
20
+ /**
21
+ * Возвращает накопленные события текущей transaction.
22
+ * @internal
23
+ */
24
+ get events(): readonly PathEvent[] | undefined;
25
+ /**
26
+ * Возвращает внутренний path router для диагностики store.
27
+ * @internal
28
+ */
29
+ get router(): unknown;
30
+ /**
31
+ * Возвращает число активных watchers.
32
+ * @internal
33
+ */
34
+ get watcherCount(): number;
35
+ /**
36
+ * Добавляет событие в текущую transaction либо публикует его сразу.
37
+ */
38
+ record(event: PathEvent): void;
39
+ /**
40
+ * Выполняет операцию в общей синхронной transaction boundary.
41
+ */
42
+ transaction<T>(operation: () => T): T;
43
+ /**
44
+ * Подписывает callback на подходящие изменения и возвращает disposer.
45
+ */
46
+ watch(maskOrMasks: DataPathDef | readonly DataPathDef[], callback: PathWatchCallback): () => void;
47
+ private _publish;
48
+ }
@@ -0,0 +1,51 @@
1
+ import { DataPathDef, PathApi, PathOptions, PathWatchCallback } from './path.types';
2
+ /**
3
+ * Владеет одним независимым path-root, mutation log и watch-router.
4
+ */
5
+ export declare class PathStore implements PathApi {
6
+ private _root;
7
+ private readonly _eventHub;
8
+ /**
9
+ * Возвращает внутренний router для диагностического контракта Kernel.
10
+ * @internal
11
+ */
12
+ private get _router();
13
+ private get _events();
14
+ private get _watcherCount();
15
+ /**
16
+ * Возвращает значение по пути без создания отсутствующих данных.
17
+ */
18
+ get<T = unknown>(path: DataPathDef, options?: PathOptions): T | undefined;
19
+ /**
20
+ * Читает значение по пути без регистрации реактивной зависимости.
21
+ */
22
+ peek<T = unknown>(path: DataPathDef, options?: PathOptions): T | undefined;
23
+ /**
24
+ * Проверяет наличие значения по указанному пути.
25
+ */
26
+ has(path: DataPathDef, options?: PathOptions): boolean;
27
+ /**
28
+ * Записывает значение и публикует соответствующее изменение.
29
+ */
30
+ set<T>(path: DataPathDef, value: T, options?: PathOptions): void;
31
+ /**
32
+ * Объединяет значение по пути и публикует соответствующее изменение.
33
+ */
34
+ merge(path: DataPathDef, value: unknown, options?: PathOptions): void;
35
+ /**
36
+ * Удаляет значение по пути и публикует изменение при наличии данных.
37
+ */
38
+ delete(path: DataPathDef, options?: PathOptions): void;
39
+ /**
40
+ * Выполняет операцию в общей синхронной transaction boundary.
41
+ */
42
+ transaction<T>(operation: () => T): T;
43
+ /**
44
+ * Подписывает callback на подходящие изменения и возвращает disposer.
45
+ */
46
+ watch(maskOrMasks: DataPathDef | readonly DataPathDef[], callback: PathWatchCallback): () => void;
47
+ private _setRoot;
48
+ private _mergeRoot;
49
+ private _deleteRoot;
50
+ private _recordRootEvent;
51
+ }
@@ -0,0 +1,97 @@
1
+ import { DerivedStrategy } from './derived-strategies';
2
+ import { DataPathDef } from './path.types';
3
+ import { RaphKernel } from './RaphKernel';
4
+ /**
5
+ * Сообщает о прямой записи в target, которым владеет derived-вычисление.
6
+ */
7
+ export declare class RaphDerivedTargetWriteError extends Error {
8
+ /**
9
+ * Создаёт ошибку с canonical path защищённого derived target.
10
+ */
11
+ constructor(path: string);
12
+ }
13
+ export interface DerivedOptions<TSource = unknown, TTarget = unknown> {
14
+ readonly id?: string;
15
+ readonly from: DataPathDef;
16
+ readonly to: DataPathDef;
17
+ readonly strategy?: DerivedStrategy;
18
+ readonly compute: (source: TSource) => TTarget;
19
+ readonly immediate?: boolean;
20
+ readonly disposeTarget?: 'keep' | 'delete';
21
+ }
22
+ /**
23
+ * Управляет lifecycle одной materialized path dependency.
24
+ */
25
+ export declare class RaphDerivedHandle<TSource = unknown, TTarget = unknown> {
26
+ readonly id: string;
27
+ readonly options: DerivedOptions<TSource, TTarget>;
28
+ private readonly _kernel;
29
+ private _removeRoutes;
30
+ private _paused;
31
+ private _disposed;
32
+ private _status;
33
+ private _lastError;
34
+ /**
35
+ * Создаёт internal handle, которым управляет owning Kernel.
36
+ * @internal
37
+ */
38
+ constructor(kernel: RaphKernel, id: string, options: DerivedOptions<TSource, TTarget>);
39
+ /**
40
+ * Показывает, приостановлено ли derived-вычисление.
41
+ */
42
+ get paused(): boolean;
43
+ /**
44
+ * Показывает, освобождён ли derived handle.
45
+ */
46
+ get disposed(): boolean;
47
+ /**
48
+ * Возвращает состояние последнего derived-пересчёта.
49
+ */
50
+ get status(): 'idle' | 'success' | 'error';
51
+ /**
52
+ * Возвращает последнюю ошибку derived-пересчёта либо null.
53
+ */
54
+ get lastError(): Error | null;
55
+ /**
56
+ * Фиксирует успешное завершение derived-пересчёта.
57
+ * @internal
58
+ */
59
+ _recordSuccess(): void;
60
+ /**
61
+ * Фиксирует ошибку derived-пересчёта без потери handle.
62
+ * @internal
63
+ */
64
+ _recordFailure(error: unknown): void;
65
+ /**
66
+ * Приостанавливает автоматические пересчёты без освобождения handle.
67
+ */
68
+ pause(): void;
69
+ /**
70
+ * Возобновляет пересчёты и синхронизирует устаревший target.
71
+ */
72
+ resume(): void;
73
+ /**
74
+ * Принудительно пересчитывает derived target.
75
+ */
76
+ recompute(): void;
77
+ /**
78
+ * Удаляет derived registration и применяет выбранную политику target cleanup.
79
+ */
80
+ dispose(): void;
81
+ /**
82
+ * Сохраняет disposers source routes текущей стратегии.
83
+ * @internal
84
+ */
85
+ _attachRoutes(removers: readonly (() => void)[]): void;
86
+ /**
87
+ * Отсоединяет все source routes текущей стратегии.
88
+ * @internal
89
+ */
90
+ _detachRoutes(): void;
91
+ /**
92
+ * Помечает handle освобождённым после cleanup owning Kernel.
93
+ * @internal
94
+ */
95
+ _disposeFromKernel(): void;
96
+ private _assertAlive;
97
+ }
@@ -0,0 +1,166 @@
1
+ import { DataAdapter, DataObject, DefaultAdapterOptions } from './data-adapter';
2
+ import { RaphMetaEvents, RaphMetaReadOptions, RaphMetaWatchOptions, RaphMetaWriteOptions } from './meta.types';
3
+ import { DataPathDef, PathOptions, PathWatchCallback } from './path.types';
4
+ import { DerivedOptions, RaphDerivedHandle } from './RaphDerivedHandle';
5
+ import { RaphMeta } from './RaphMeta';
6
+ export type RaphKernelRoot = DataObject;
7
+ export interface RaphKernelOptions {
8
+ readonly id?: string;
9
+ readonly initial?: RaphKernelRoot;
10
+ readonly adapter?: DataAdapter;
11
+ readonly adapterOptions?: DefaultAdapterOptions;
12
+ }
13
+ export interface RaphKernelRuntime {
14
+ dispose: () => void;
15
+ _beginKernelTransaction?: () => void;
16
+ _endKernelTransaction?: () => void;
17
+ }
18
+ /**
19
+ * Независимый владелец одного path data-plane без signal/runtime state.
20
+ */
21
+ export declare class RaphKernel {
22
+ private static _kernelCounter;
23
+ readonly id: string;
24
+ private _paths;
25
+ private _derivedController;
26
+ private _runtimes;
27
+ private _metaController;
28
+ private _transactionDepth;
29
+ private _stabilizing;
30
+ private _derivedWriteDepth;
31
+ /**
32
+ * Создаёт data/meta owner с независимым lifecycle и derived registry.
33
+ */
34
+ constructor(options?: RaphKernelOptions);
35
+ /**
36
+ * Показывает, освобождён ли Kernel.
37
+ */
38
+ get disposed(): boolean;
39
+ /**
40
+ * Формирует диагностический снимок materialized derived registry.
41
+ */
42
+ getDerivedSnapshot(): {
43
+ registrations: number;
44
+ errors: number;
45
+ pending: number;
46
+ stabilizing: boolean;
47
+ };
48
+ /**
49
+ * Возвращает лениво созданный metadata facade.
50
+ */
51
+ get meta(): RaphMeta;
52
+ /**
53
+ * Возвращает весь path-root Kernel.
54
+ */
55
+ get<T = RaphKernelRoot>(): T | undefined;
56
+ /**
57
+ * Возвращает значение по пути без создания отсутствующих данных.
58
+ */
59
+ get<T = unknown>(path: DataPathDef, options?: PathOptions): T | undefined;
60
+ /**
61
+ * Читает весь path-root Kernel.
62
+ */
63
+ peek<T = RaphKernelRoot>(): T | undefined;
64
+ /**
65
+ * Читает значение по пути без регистрации реактивной зависимости.
66
+ */
67
+ peek<T = unknown>(path: DataPathDef, options?: PathOptions): T | undefined;
68
+ /**
69
+ * Проверяет наличие значения по указанному пути.
70
+ */
71
+ has(path: DataPathDef, options?: PathOptions): boolean;
72
+ /**
73
+ * Записывает значение и публикует соответствующее изменение.
74
+ */
75
+ set<T>(path: DataPathDef, value: T, options?: PathOptions): void;
76
+ /**
77
+ * Объединяет значение по пути и публикует соответствующее изменение.
78
+ */
79
+ merge(path: DataPathDef, value: unknown, options?: PathOptions): void;
80
+ /**
81
+ * Удаляет значение по пути и публикует изменение при наличии данных.
82
+ */
83
+ delete(path: DataPathDef, options?: PathOptions): void;
84
+ /**
85
+ * Выполняет операцию в общей синхронной transaction boundary.
86
+ */
87
+ transaction<T>(operation: () => T): T;
88
+ /**
89
+ * Подписывает callback на подходящие изменения и возвращает disposer.
90
+ */
91
+ watch(masks: DataPathDef | readonly DataPathDef[], callback: PathWatchCallback): () => void;
92
+ /**
93
+ * Возвращает metadata указанного data-owner.
94
+ */
95
+ getMeta(path: DataPathDef, namespace?: string, options?: RaphMetaReadOptions): unknown;
96
+ /**
97
+ * Проверяет наличие metadata у указанного data-owner.
98
+ */
99
+ hasMeta(path: DataPathDef, namespace?: string, options?: RaphMetaReadOptions): boolean;
100
+ /**
101
+ * Записывает metadata указанного data-owner.
102
+ */
103
+ setMeta(path: DataPathDef, namespace: string, value: unknown, options?: RaphMetaWriteOptions): void;
104
+ /**
105
+ * Объединяет metadata указанного data-owner.
106
+ */
107
+ mergeMeta(path: DataPathDef, namespace: string, value: unknown, options?: RaphMetaWriteOptions): void;
108
+ /**
109
+ * Удаляет metadata указанного data-owner.
110
+ */
111
+ deleteMeta(path: DataPathDef, namespace?: string, options?: RaphMetaWriteOptions): void;
112
+ /**
113
+ * Подписывает runtime adapter на metadata-события Kernel.
114
+ * @internal
115
+ */
116
+ _watchMeta(maskOrMasks: DataPathDef | readonly DataPathDef[], callback: (payload: RaphMetaEvents) => void, options?: RaphMetaWatchOptions, afterPublish?: (invalidate: boolean) => void): () => void;
117
+ /**
118
+ * Создаёт управляемое derived-представление source path в target path.
119
+ */
120
+ derive<TSource, TTarget>(options: DerivedOptions<TSource, TTarget>): RaphDerivedHandle<TSource, TTarget>;
121
+ /**
122
+ * Регистрирует runtime, разделяющий этот Kernel.
123
+ * @internal
124
+ */
125
+ _attachRuntime(runtime: RaphKernelRuntime): void;
126
+ /**
127
+ * Удаляет runtime из shared Kernel registry.
128
+ * @internal
129
+ */
130
+ _detachRuntime(runtime: RaphKernelRuntime): void;
131
+ /**
132
+ * Освобождает shared runtimes, derived handles и data/meta state Kernel.
133
+ */
134
+ dispose(): void;
135
+ /**
136
+ * Пересчитывает указанный derived handle через его стратегию.
137
+ * @internal
138
+ */
139
+ _recomputeDerived<TSource, TTarget>(handle: RaphDerivedHandle<TSource, TTarget>): void;
140
+ /**
141
+ * Удаляет derived handle из registry и освобождает его routes.
142
+ * @internal
143
+ */
144
+ _removeDerived(handle: RaphDerivedHandle<any, any>): void;
145
+ private get _store();
146
+ private get _metadata();
147
+ private _assertWritablePath;
148
+ private _writeDerivedTarget;
149
+ private _mutateDerived;
150
+ private _runDerivedTransaction;
151
+ private _mutateWithMetaLifecycle;
152
+ private _pruneMissingMetaOwners;
153
+ private _metaPath;
154
+ private _exactMetaPath;
155
+ private _assertMetaNamespace;
156
+ private _assertMetaOwner;
157
+ private _queueDerived;
158
+ private _queueDerivedReplacement;
159
+ private _replaceDerivedTarget;
160
+ private _stabilizeDerived;
161
+ private _recomputePendingDerived;
162
+ private _recomputeDerivedFull;
163
+ private _recomputeDerivedCollection;
164
+ private _recomputeDerivedFilter;
165
+ private _patchSingleFilterMembership;
166
+ }
@@ -0,0 +1,45 @@
1
+ import { RaphMetaApi, RaphMetaReadOptions, RaphMetaWatchCallback, RaphMetaWatchOptions, RaphMetaWriteOptions } from './meta.types';
2
+ import { DataPathDef } from './path.types';
3
+ import { RaphKernel } from './RaphKernel';
4
+ export interface RaphMetaBinding {
5
+ readonly assertReadable?: () => void;
6
+ readonly assertWritable?: () => void;
7
+ readonly runWrite?: <Result>(operation: () => Result, invalidate: boolean) => Result;
8
+ readonly watch?: (masks: DataPathDef | readonly DataPathDef[], callback: RaphMetaWatchCallback, options: RaphMetaWatchOptions) => () => void;
9
+ }
10
+ /**
11
+ * Тонкий фасад отдельного Kernel-owned Meta-plane.
12
+ */
13
+ export declare class RaphMeta implements RaphMetaApi {
14
+ private readonly _kernel;
15
+ private readonly _binding;
16
+ /**
17
+ * Создаёт metadata facade поверх указанного Kernel.
18
+ */
19
+ constructor(_kernel: RaphKernel, _binding?: RaphMetaBinding);
20
+ /**
21
+ * Возвращает значение по пути без создания отсутствующих данных.
22
+ */
23
+ get(path: DataPathDef, namespace?: string, options?: RaphMetaReadOptions): unknown;
24
+ /**
25
+ * Проверяет наличие значения по указанному пути.
26
+ */
27
+ has(path: DataPathDef, namespace?: string, options?: RaphMetaReadOptions): boolean;
28
+ /**
29
+ * Записывает значение и публикует соответствующее изменение.
30
+ */
31
+ set(path: DataPathDef, namespace: string, value: unknown, options?: RaphMetaWriteOptions): void;
32
+ /**
33
+ * Объединяет значение по пути и публикует соответствующее изменение.
34
+ */
35
+ merge(path: DataPathDef, namespace: string, value: unknown, options?: RaphMetaWriteOptions): void;
36
+ /**
37
+ * Удаляет значение по пути и публикует изменение при наличии данных.
38
+ */
39
+ delete(path: DataPathDef, namespace?: string, options?: RaphMetaWriteOptions): void;
40
+ /**
41
+ * Подписывает callback на metadata-изменения и возвращает disposer.
42
+ */
43
+ watch(masks: DataPathDef | readonly DataPathDef[], callback: RaphMetaWatchCallback, options?: RaphMetaWatchOptions): () => void;
44
+ private _write;
45
+ }
@@ -0,0 +1,45 @@
1
+ import { DataPath } from './data-path';
2
+ /**
3
+ * Kernel-owned дерево metadata, адресованное каноническими DataPath.
4
+ */
5
+ export declare class RaphMetaStore {
6
+ private readonly _root;
7
+ size: number;
8
+ /**
9
+ * Возвращает значение по пути без создания отсутствующих данных.
10
+ */
11
+ get(path: DataPath, namespace?: string): unknown;
12
+ /**
13
+ * Проверяет наличие значения по указанному пути.
14
+ */
15
+ has(path: DataPath, namespace?: string): boolean;
16
+ /**
17
+ * Записывает значение namespace в metadata tree.
18
+ */
19
+ set(path: DataPath, namespace: string, value: unknown): void;
20
+ /**
21
+ * Объединяет object metadata либо заменяет значение namespace.
22
+ */
23
+ merge(path: DataPath, namespace: string, value: unknown): void;
24
+ /**
25
+ * Удаляет namespace либо все metadata указанного owner.
26
+ */
27
+ delete(path: DataPath, namespace?: string): boolean;
28
+ /**
29
+ * Удаляет metadata всего поддерева указанного data-owner.
30
+ */
31
+ deleteSubtree(path: DataPath): DataPath[];
32
+ /**
33
+ * Удаляет metadata, владельцы которой отсутствуют в data tree.
34
+ */
35
+ pruneMissing(path: DataPath, ownerExists: (candidate: DataPath) => boolean): DataPath[];
36
+ /**
37
+ * Полностью очищает metadata storage.
38
+ */
39
+ clear(): DataPath[];
40
+ private _find;
41
+ private _ensure;
42
+ private _findStack;
43
+ private _pruneEmpty;
44
+ private _pruneMissingNode;
45
+ }
@@ -0,0 +1,78 @@
1
+ import { DataPathDef, PathOptions } from './path.types';
2
+ export type DataObject = Record<string, unknown> | unknown[];
3
+ export interface DataAdapter {
4
+ root: () => DataObject;
5
+ has?: (path: DataPathDef, options?: PathOptions) => boolean;
6
+ get: (path: DataPathDef, options?: PathOptions) => unknown;
7
+ set: (path: DataPathDef, value: unknown, options?: PathOptions) => void;
8
+ delete: (path: DataPathDef, options?: PathOptions) => void;
9
+ merge: (path: DataPathDef, value: unknown, options?: PathOptions) => void;
10
+ indexOf?: (path: DataPathDef, options?: PathOptions) => number;
11
+ }
12
+ export interface DefaultAdapterOptions {
13
+ readonly arrayDelete?: 'splice' | 'unset';
14
+ readonly autoCreate?: boolean;
15
+ readonly indexEnabled?: boolean;
16
+ readonly indexStrategy?: 'lazy-key' | 'eager-all-keys';
17
+ }
18
+ /**
19
+ * Настраиваемый in-memory adapter, включаемый явно.
20
+ * Kernel без опций продолжает работать напрямую через PathStore без дополнительной ветки.
21
+ */
22
+ export declare class DefaultDataAdapter implements DataAdapter {
23
+ private _root;
24
+ private readonly _options;
25
+ private _indexes;
26
+ /**
27
+ * Создаёт in-memory adapter с заданным начальным root и опциями.
28
+ */
29
+ constructor(initial?: DataObject, options?: DefaultAdapterOptions);
30
+ /**
31
+ * Возвращает текущий корневой объект adapter.
32
+ */
33
+ root(): DataObject;
34
+ /**
35
+ * Создаёт изолированную copy-on-write проекцию для синхронной проверки mutation.
36
+ */
37
+ fork(): DefaultDataAdapter;
38
+ /**
39
+ * Заменяет корневой объект без path-level публикации.
40
+ */
41
+ replaceRoot(root: DataObject): void;
42
+ /**
43
+ * Обновляет изменяемые опции adapter и сбрасывает построенные indexes.
44
+ */
45
+ options(options: DefaultAdapterOptions): void;
46
+ /**
47
+ * Возвращает значение по пути без создания отсутствующих данных.
48
+ */
49
+ get(path: DataPathDef, options?: PathOptions): unknown;
50
+ /**
51
+ * Проверяет наличие значения по указанному пути.
52
+ */
53
+ has(path: DataPathDef, options?: PathOptions): boolean;
54
+ /**
55
+ * Записывает значение по пути и обновляет затронутые selector indexes.
56
+ */
57
+ set(path: DataPathDef, value: unknown, options?: PathOptions): void;
58
+ /**
59
+ * Объединяет object value либо заменяет значение по пути.
60
+ */
61
+ merge(path: DataPathDef, value: unknown, options?: PathOptions): void;
62
+ /**
63
+ * Удаляет значение согласно arrayDelete policy adapter.
64
+ */
65
+ delete(path: DataPathDef, options?: PathOptions): void;
66
+ /**
67
+ * Находит индекс элемента массива по selector-сегменту.
68
+ */
69
+ indexOf(path: DataPathDef, options?: PathOptions): number;
70
+ private _read;
71
+ private _readSegment;
72
+ private _readOrCreateChild;
73
+ private _writeSegment;
74
+ private _invalidateArray;
75
+ private _invalidateIndexKey;
76
+ private _findSelector;
77
+ private _createIndex;
78
+ }
@@ -0,0 +1,4 @@
1
+ export declare function createDataDraft<T extends object>(root: T, onArrayChange: (array: any[]) => void): {
2
+ root: T;
3
+ unchangedArray(array: any[], key: string): any[] | null;
4
+ };
@@ -0,0 +1,97 @@
1
+ import { DataPathDef, PathOptions } from './path.types';
2
+ export type PathScalar = string | number | boolean | null;
3
+ export type PathSegment = {
4
+ readonly kind: 'key';
5
+ readonly key: string;
6
+ } | {
7
+ readonly kind: 'index';
8
+ readonly index: number;
9
+ } | {
10
+ readonly kind: 'selector';
11
+ readonly key: string;
12
+ readonly value: PathScalar;
13
+ } | {
14
+ readonly kind: 'wildcard';
15
+ readonly indexed: boolean;
16
+ };
17
+ export interface ParsedDataPath {
18
+ readonly canonical: string;
19
+ readonly segments: readonly Exclude<PathSegment, {
20
+ kind: 'wildcard';
21
+ }>[];
22
+ }
23
+ export interface ParsedPathMask {
24
+ readonly canonical: string;
25
+ readonly deep: boolean;
26
+ readonly segments: readonly PathSegment[];
27
+ }
28
+ export interface DataPathParseOptions extends PathOptions {
29
+ readonly wildcardDynamic?: boolean;
30
+ }
31
+ export interface PlainDataPath {
32
+ readonly deepOnTail?: boolean;
33
+ readonly segs: readonly unknown[];
34
+ }
35
+ /**
36
+ * Неизменяемый публичный value object строгой E2 path grammar.
37
+ */
38
+ export declare class DataPath {
39
+ private static _cache;
40
+ private readonly _canonical;
41
+ private readonly _segments;
42
+ private _exact;
43
+ private _mask;
44
+ /**
45
+ * Сохраняет уже разобранный immutable path value.
46
+ */
47
+ private constructor();
48
+ /**
49
+ * Нормализует поддерживаемое определение пути в DataPath.
50
+ */
51
+ static from(input: DataPathDef, options?: DataPathParseOptions): DataPath;
52
+ /**
53
+ * Разбирает строковый path согласно строгой грамматике.
54
+ */
55
+ static fromString(path: string, options?: DataPathParseOptions): DataPath;
56
+ /**
57
+ * Восстанавливает DataPath из сериализованного представления.
58
+ */
59
+ static fromPlain(plain: PlainDataPath): DataPath;
60
+ /**
61
+ * Сериализует path в независимое plain-представление.
62
+ */
63
+ toPlain(): PlainDataPath;
64
+ /**
65
+ * Возвращает canonical строковое представление пути.
66
+ */
67
+ toStringPath(): string;
68
+ /**
69
+ * Возвращает canonical строковое представление пути.
70
+ */
71
+ toString(): string;
72
+ /**
73
+ * Возвращает immutable список сегментов пути.
74
+ */
75
+ segments(): readonly PathSegment[];
76
+ /**
77
+ * Проверяет соответствие exact path указанной маске.
78
+ */
79
+ static match(mask: DataPathDef, target: DataPathDef): boolean;
80
+ /**
81
+ * Возвращает exact path либо отклоняет wildcard-сегменты.
82
+ * @internal
83
+ */
84
+ _asExact(): ParsedDataPath;
85
+ /**
86
+ * Возвращает path mask с проверкой позиции wildcard.
87
+ * @internal
88
+ */
89
+ _asMask(): ParsedPathMask;
90
+ }
91
+ export declare function parseDataPath(path: DataPathDef, options?: PathOptions): ParsedDataPath;
92
+ export declare function parsePathMask(mask: DataPathDef): ParsedPathMask;
93
+ /**
94
+ * Формирует masks для публикации всех отношений exact path.
95
+ * @internal
96
+ */
97
+ export declare function pathRelationMasks(path: ParsedDataPath): readonly string[];
@@ -0,0 +1,30 @@
1
+ import { ParsedDataPath } from './data-path';
2
+ import { DataPathDef } from './path.types';
3
+ export type DerivedCollectionKey = string | number;
4
+ export interface CollectionDerivedState {
5
+ readonly from: ParsedDataPath;
6
+ readonly kind: 'collection-by-key' | 'filter-by-key';
7
+ readonly key: string;
8
+ initialized: boolean;
9
+ full: boolean;
10
+ readonly keys: Set<DerivedCollectionKey>;
11
+ sourceIndex: Map<DerivedCollectionKey, number> | undefined;
12
+ targetIndex: Map<DerivedCollectionKey, number> | undefined;
13
+ }
14
+ export declare function collectionMutationImpact(source: ParsedDataPath, keyField: string, mutation: ParsedDataPath): {
15
+ readonly kind: 'full';
16
+ } | {
17
+ readonly kind: 'key';
18
+ readonly key: DerivedCollectionKey;
19
+ };
20
+ export declare function keyedPath(collection: DataPathDef, keyField: string, key: DerivedCollectionKey): string;
21
+ export declare function validateFullCollection(id: string, keyField: string, source: unknown, output: unknown): void;
22
+ export declare function validateIncrementalCollection(id: string, keyField: string, inputKeys: readonly DerivedCollectionKey[], output: unknown): void;
23
+ export declare function validateFullFilter(id: string, keyField: string, source: unknown, output: unknown): void;
24
+ export declare function validateIncrementalFilter(id: string, keyField: string, inputKeys: readonly DerivedCollectionKey[], output: unknown): void;
25
+ export declare function collectionKeys(collection: readonly unknown[], keyField: string, label: string): Array<DerivedCollectionKey | undefined>;
26
+ export declare function collectionIndex(collection: readonly unknown[], keyField: string, label: string): Map<DerivedCollectionKey, number>;
27
+ export declare function indexesAreStale(collection: readonly unknown[], keyField: string, index: ReadonlyMap<DerivedCollectionKey, number>, keys: ReadonlySet<DerivedCollectionKey>): boolean;
28
+ export declare function collectionError(id: string, message: string): TypeError;
29
+ export declare function filterError(id: string, message: string): TypeError;
30
+ export declare function cloneMaterializedValue<T>(value: T): T;