@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,636 @@
1
+ var F = Object.defineProperty;
2
+ var R = (f, e, t) => e in f ? F(f, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : f[e] = t;
3
+ var p = (f, e, t) => R(f, typeof e != "symbol" ? e + "" : e, t);
4
+ import { AdapterPathStore as b } from "./AdapterPathStore.js";
5
+ import { DefaultDataAdapter as O } from "./data-adapter.js";
6
+ import { parseDataPath as k, DataPath as W } from "./data-path.js";
7
+ import { validateFullFilter as S, cloneMaterializedValue as z, validateFullCollection as K, collectionIndex as w, collectionError as M, indexesAreStale as P, validateIncrementalCollection as q, collectionKeys as C, keyedPath as A, filterError as I, validateIncrementalFilter as N } from "./derived-collection.js";
8
+ import { DerivedRegistry as $ } from "./DerivedRegistry.js";
9
+ import { MetaController as j } from "./MetaController.js";
10
+ import { PathStore as L } from "./PathStore.js";
11
+ import { RaphDerivedHandle as B, RaphDerivedTargetWriteError as H } from "./RaphDerivedHandle.js";
12
+ const x = class x {
13
+ /**
14
+ * Создаёт data/meta owner с независимым lifecycle и derived registry.
15
+ */
16
+ constructor(e = {}) {
17
+ // Публикует стабильную identity data/meta owner.
18
+ p(this, "id");
19
+ // Лениво создают независимые data, derived, runtime и metadata controllers.
20
+ p(this, "_paths");
21
+ p(this, "_derivedController");
22
+ p(this, "_runtimes");
23
+ p(this, "_metaController");
24
+ // Защищают transaction stabilization и записи в derived targets.
25
+ p(this, "_transactionDepth", 0);
26
+ p(this, "_stabilizing", !1);
27
+ p(this, "_derivedWriteDepth", 0);
28
+ if (this.id = e.id ?? `kernel-${x._kernelCounter++}`, e.adapter !== void 0) {
29
+ if (e.initial !== void 0 || e.adapterOptions !== void 0)
30
+ throw new TypeError("[Raph] A custom adapter cannot be combined with initial or adapterOptions.");
31
+ this._paths = new b(e.adapter);
32
+ } else if (e.adapterOptions !== void 0)
33
+ this._paths = new b(new O(
34
+ e.initial,
35
+ e.adapterOptions
36
+ ));
37
+ else {
38
+ const t = this._paths = new L();
39
+ e.initial !== void 0 && t.set("", e.initial);
40
+ }
41
+ }
42
+ /**
43
+ * Показывает, освобождён ли Kernel.
44
+ */
45
+ get disposed() {
46
+ return this._paths === void 0;
47
+ }
48
+ /**
49
+ * Формирует диагностический снимок materialized derived registry.
50
+ */
51
+ getDerivedSnapshot() {
52
+ var t;
53
+ const e = this._derivedController;
54
+ return {
55
+ registrations: (e == null ? void 0 : e.size) ?? 0,
56
+ errors: [...(e == null ? void 0 : e.values()) ?? []].filter((r) => r.status === "error").length,
57
+ pending: ((t = e == null ? void 0 : e.pending) == null ? void 0 : t.size) ?? 0,
58
+ stabilizing: this._stabilizing
59
+ };
60
+ }
61
+ /**
62
+ * Возвращает лениво созданный metadata facade.
63
+ */
64
+ get meta() {
65
+ return this._metadata.facade;
66
+ }
67
+ get(e, t) {
68
+ return this._store.get(e ?? "", t);
69
+ }
70
+ peek(e, t) {
71
+ return this._store.peek(e ?? "", t);
72
+ }
73
+ /**
74
+ * Проверяет наличие значения по указанному пути.
75
+ */
76
+ has(e, t) {
77
+ return this._store.has(e, t);
78
+ }
79
+ /**
80
+ * Записывает значение и публикует соответствующее изменение.
81
+ */
82
+ set(e, t, r) {
83
+ var s;
84
+ this._assertWritablePath("set", e, t, r);
85
+ const i = this._store;
86
+ if ((((s = this._metaController) == null ? void 0 : s.size) ?? 0) === 0) {
87
+ if (this._derivedController === void 0) {
88
+ i.set(e, t, r);
89
+ return;
90
+ }
91
+ this._mutateDerived(i, "set", e, t, r);
92
+ return;
93
+ }
94
+ this._mutateWithMetaLifecycle(() => {
95
+ this._derivedController === void 0 ? i.set(e, t, r) : this._mutateDerived(i, "set", e, t, r), this._pruneMissingMetaOwners(e, "owner-replaced", r);
96
+ });
97
+ }
98
+ /**
99
+ * Объединяет значение по пути и публикует соответствующее изменение.
100
+ */
101
+ merge(e, t, r) {
102
+ var s;
103
+ this._assertWritablePath("merge", e, t, r);
104
+ const i = this._store;
105
+ if ((((s = this._metaController) == null ? void 0 : s.size) ?? 0) === 0) {
106
+ if (this._derivedController === void 0) {
107
+ i.merge(e, t, r);
108
+ return;
109
+ }
110
+ this._mutateDerived(i, "merge", e, t, r);
111
+ return;
112
+ }
113
+ this._mutateWithMetaLifecycle(() => {
114
+ this._derivedController === void 0 ? i.merge(e, t, r) : this._mutateDerived(i, "merge", e, t, r), this._pruneMissingMetaOwners(e, "owner-replaced", r);
115
+ });
116
+ }
117
+ /**
118
+ * Удаляет значение по пути и публикует изменение при наличии данных.
119
+ */
120
+ delete(e, t) {
121
+ var i;
122
+ this._assertWritablePath("delete", e, void 0, t);
123
+ const r = this._store;
124
+ if ((((i = this._metaController) == null ? void 0 : i.size) ?? 0) === 0) {
125
+ if (this._derivedController === void 0) {
126
+ r.delete(e, t);
127
+ return;
128
+ }
129
+ this._mutateDerived(r, "delete", e, void 0, t);
130
+ return;
131
+ }
132
+ r.has(e, t) && this._mutateWithMetaLifecycle(() => {
133
+ this._derivedController === void 0 ? r.delete(e, t) : this._mutateDerived(r, "delete", e, void 0, t);
134
+ const s = this._metaPath(e, t);
135
+ this._metaController.deleteSubtree(s, "owner-delete"), this._pruneMissingMetaOwners(s, "owner-delete");
136
+ });
137
+ }
138
+ /**
139
+ * Выполняет операцию в общей синхронной transaction boundary.
140
+ */
141
+ transaction(e) {
142
+ var c, l, v, _;
143
+ const t = this._store;
144
+ if (this._derivedController === void 0 && !((c = this._metaController) != null && c.hasWatchers))
145
+ return t.transaction(e);
146
+ const r = this._transactionDepth === 0 && ((l = this._metaController) != null && l.hasDeferredWatchers) && this._runtimes !== void 0 ? [...this._runtimes] : void 0;
147
+ if (r !== void 0)
148
+ for (const o of r)
149
+ (v = o._beginKernelTransaction) == null || v.call(o);
150
+ let i, s, a = !1;
151
+ try {
152
+ i = t.transaction(() => this._runDerivedTransaction(e));
153
+ } catch (o) {
154
+ a = !0, s = o;
155
+ }
156
+ const d = [];
157
+ if (a && d.push(s), r !== void 0)
158
+ for (const o of r)
159
+ try {
160
+ (_ = o._endKernelTransaction) == null || _.call(o);
161
+ } catch (m) {
162
+ d.push(m);
163
+ }
164
+ if (d.length === 1)
165
+ throw d[0];
166
+ if (d.length > 1)
167
+ throw new AggregateError(d, "[Raph] Kernel transaction execution failed.");
168
+ return i;
169
+ }
170
+ /**
171
+ * Подписывает callback на подходящие изменения и возвращает disposer.
172
+ */
173
+ watch(e, t) {
174
+ return this._store.watch(e, t);
175
+ }
176
+ /**
177
+ * Возвращает metadata указанного data-owner.
178
+ */
179
+ getMeta(e, t, r) {
180
+ var i;
181
+ return this._store, t !== void 0 && this._assertMetaNamespace(t), (i = this._metaController) == null ? void 0 : i.get(this._metaPath(e, r), t);
182
+ }
183
+ /**
184
+ * Проверяет наличие metadata у указанного data-owner.
185
+ */
186
+ hasMeta(e, t, r) {
187
+ var i;
188
+ return this._store, t !== void 0 && this._assertMetaNamespace(t), ((i = this._metaController) == null ? void 0 : i.has(this._metaPath(e, r), t)) ?? !1;
189
+ }
190
+ /**
191
+ * Записывает metadata указанного data-owner.
192
+ */
193
+ setMeta(e, t, r, i) {
194
+ this._assertMetaNamespace(t);
195
+ const s = this._exactMetaPath(e, i);
196
+ this._assertMetaOwner(s), this._metadata.set(s, t, r, i);
197
+ }
198
+ /**
199
+ * Объединяет metadata указанного data-owner.
200
+ */
201
+ mergeMeta(e, t, r, i) {
202
+ this._assertMetaNamespace(t);
203
+ const s = this._exactMetaPath(e, i);
204
+ this._assertMetaOwner(s), this._metadata.merge(s, t, r, i);
205
+ }
206
+ /**
207
+ * Удаляет metadata указанного data-owner.
208
+ */
209
+ deleteMeta(e, t, r) {
210
+ var s;
211
+ t !== void 0 && this._assertMetaNamespace(t);
212
+ const i = this._exactMetaPath(e, r);
213
+ (s = this._metaController) == null || s.delete(i, t, r);
214
+ }
215
+ /**
216
+ * Подписывает runtime adapter на metadata-события Kernel.
217
+ * @internal
218
+ */
219
+ _watchMeta(e, t, r = {}, i) {
220
+ return this._store, r.namespace !== void 0 && this._assertMetaNamespace(r.namespace), this._metadata.watch(e, t, r, i);
221
+ }
222
+ /**
223
+ * Создаёт управляемое derived-представление source path в target path.
224
+ */
225
+ derive(e) {
226
+ var l, v, _;
227
+ if (this._store, e.strategy !== void 0 && e.strategy.kind !== "full" && e.strategy.kind !== "collection-by-key" && e.strategy.kind !== "filter-by-key")
228
+ throw new Error(`[Raph] Unsupported derived strategy "${String(e.strategy.kind)}".`);
229
+ if (e.id !== void 0 && ((l = this._derivedController) != null && l.has(e.id)))
230
+ throw new Error(`[Raph] Duplicate derived id "${e.id}".`);
231
+ const t = k(e.from), r = k(e.to);
232
+ if (T(t, r))
233
+ throw new Error("[Raph] Derived source and target must not overlap.");
234
+ const i = this._derivedController ?? new $(), s = e.id ?? i.nextId(), a = {
235
+ ...e,
236
+ from: t.canonical,
237
+ to: r.canonical
238
+ }, d = new B(this, s, a), c = ((v = e.strategy) == null ? void 0 : v.kind) === "collection-by-key" || ((_ = e.strategy) == null ? void 0 : _.kind) === "filter-by-key" ? e.strategy : void 0;
239
+ this._derivedController = i, i.register(d, t, c);
240
+ try {
241
+ e.immediate !== !1 && d.recompute();
242
+ } catch (o) {
243
+ throw this._removeDerived(d), d._disposeFromKernel(), o;
244
+ }
245
+ return d;
246
+ }
247
+ /**
248
+ * Регистрирует runtime, разделяющий этот Kernel.
249
+ * @internal
250
+ */
251
+ _attachRuntime(e) {
252
+ this._store, (this._runtimes ?? (this._runtimes = /* @__PURE__ */ new Set())).add(e);
253
+ }
254
+ /**
255
+ * Удаляет runtime из shared Kernel registry.
256
+ * @internal
257
+ */
258
+ _detachRuntime(e) {
259
+ const t = this._runtimes;
260
+ t !== void 0 && (t.delete(e), t.size === 0 && (this._runtimes = void 0));
261
+ }
262
+ /**
263
+ * Освобождает shared runtimes, derived handles и data/meta state Kernel.
264
+ */
265
+ dispose() {
266
+ var t, r;
267
+ if (this._paths === void 0)
268
+ return;
269
+ const e = [];
270
+ if (this._runtimes !== void 0)
271
+ for (const i of [...this._runtimes])
272
+ try {
273
+ i.dispose();
274
+ } catch (s) {
275
+ e.push(s);
276
+ }
277
+ if (this._runtimes = void 0, (t = this._derivedController) == null || t.dispose(), this._derivedController = void 0, (r = this._metaController) == null || r.dispose(), this._metaController = void 0, this._paths = void 0, e.length === 1)
278
+ throw e[0];
279
+ if (e.length > 1)
280
+ throw new AggregateError(e, `[Raph] Kernel "${this.id}" disposal failed.`);
281
+ }
282
+ /**
283
+ * Пересчитывает указанный derived handle через его стратегию.
284
+ * @internal
285
+ */
286
+ _recomputeDerived(e) {
287
+ if (!(e.paused || e.disposed))
288
+ try {
289
+ this._recomputeDerivedFull(e), e._recordSuccess();
290
+ } catch (t) {
291
+ throw e._recordFailure(t), t;
292
+ }
293
+ }
294
+ /**
295
+ * Удаляет derived handle из registry и освобождает его routes.
296
+ * @internal
297
+ */
298
+ _removeDerived(e) {
299
+ const t = this._derivedController;
300
+ t !== void 0 && (t.remove(e), t.size === 0 && (this._derivedController = void 0));
301
+ }
302
+ get _store() {
303
+ const e = this._paths;
304
+ if (e !== void 0)
305
+ return e;
306
+ throw new Error(`[Raph] Kernel "${this.id}" is disposed.`);
307
+ }
308
+ get _metadata() {
309
+ return this._store, this._metaController ?? (this._metaController = new j(
310
+ this,
311
+ (e) => this.has(e),
312
+ () => this._transactionDepth !== 0 || this._stabilizing
313
+ ));
314
+ }
315
+ _assertWritablePath(e, t, r, i) {
316
+ const s = this._derivedController;
317
+ if (s === void 0 || this._derivedWriteDepth !== 0)
318
+ return;
319
+ const a = k(t, i);
320
+ for (const d of s.values()) {
321
+ const c = k(d.options.to);
322
+ if (!T(a, c))
323
+ continue;
324
+ const l = a.segments.length < c.segments.length;
325
+ if (!(e === "merge" && l && !U(r, c.segments[a.segments.length])))
326
+ throw new H(a.canonical);
327
+ }
328
+ }
329
+ _writeDerivedTarget(e, t) {
330
+ this._derivedWriteDepth++;
331
+ try {
332
+ this.set(e, t);
333
+ } finally {
334
+ this._derivedWriteDepth--;
335
+ }
336
+ }
337
+ _mutateDerived(e, t, r, i, s) {
338
+ const a = k(r, s);
339
+ t === "delete" && !e.has(r, s) || e.transaction(() => {
340
+ t === "set" ? e.set(r, i, s) : t === "merge" ? e.merge(r, i, s) : e.delete(r, s), this._queueDerived(a), this._transactionDepth === 0 && !this._stabilizing && this._stabilizeDerived();
341
+ });
342
+ }
343
+ _runDerivedTransaction(e) {
344
+ var v;
345
+ let t = !1, r, i = !1, s, a = !1, d, c;
346
+ this._transactionDepth++;
347
+ try {
348
+ c = e();
349
+ } catch (_) {
350
+ t = !0, r = _;
351
+ } finally {
352
+ if (this._transactionDepth--, this._transactionDepth === 0) {
353
+ if (!this._stabilizing)
354
+ try {
355
+ this._stabilizeDerived();
356
+ } catch (_) {
357
+ i = !0, s = _;
358
+ }
359
+ try {
360
+ (v = this._metaController) == null || v.publish();
361
+ } catch (_) {
362
+ a = !0, d = _;
363
+ }
364
+ }
365
+ }
366
+ const l = [];
367
+ if (t && l.push(r), i && l.push(s), a && l.push(d), l.length > 1)
368
+ throw new AggregateError(
369
+ l,
370
+ "[Raph] Kernel transaction publication failed."
371
+ );
372
+ if (l.length === 1)
373
+ throw l[0];
374
+ return c;
375
+ }
376
+ _mutateWithMetaLifecycle(e) {
377
+ if (this._transactionDepth !== 0 || this._stabilizing) {
378
+ e();
379
+ return;
380
+ }
381
+ this.transaction(e);
382
+ }
383
+ _pruneMissingMetaOwners(e, t, r) {
384
+ var i;
385
+ (i = this._metaController) == null || i.pruneMissing(this._metaPath(e, r), t);
386
+ }
387
+ _metaPath(e, t) {
388
+ return W.from(e, t);
389
+ }
390
+ _exactMetaPath(e, t) {
391
+ const r = this._metaPath(e, t);
392
+ if (r.segments().some((i) => i.kind === "wildcard"))
393
+ throw new Error("[RaphMeta] wildcard paths are read-only observation masks.");
394
+ return r;
395
+ }
396
+ _assertMetaNamespace(e) {
397
+ if (this._store, !e.trim())
398
+ throw new Error("[RaphMeta] namespace must not be empty.");
399
+ }
400
+ _assertMetaOwner(e) {
401
+ if (!this.has(e))
402
+ throw new Error(`[RaphMeta] Owner data path does not exist: "${e}".`);
403
+ }
404
+ _queueDerived(e) {
405
+ var t;
406
+ (t = this._derivedController) == null || t.queue(e);
407
+ }
408
+ _queueDerivedReplacement(e, t) {
409
+ var r;
410
+ (r = this._derivedController) == null || r.queueReplacement(e, t);
411
+ }
412
+ _replaceDerivedTarget(e, t, r) {
413
+ const i = k(e);
414
+ this._store.set(i.canonical, t), this._queueDerivedReplacement(i, r);
415
+ }
416
+ _stabilizeDerived() {
417
+ const e = this._derivedController, t = e == null ? void 0 : e.pending;
418
+ if (t === void 0 || t.size === 0)
419
+ return;
420
+ this._stabilizing = !0;
421
+ let r = 0;
422
+ try {
423
+ for (; t.size !== 0; ) {
424
+ const i = t.values().next().value;
425
+ if (t.delete(i), !(i.paused || i.disposed)) {
426
+ try {
427
+ this._recomputePendingDerived(i), i._recordSuccess();
428
+ } catch (s) {
429
+ throw i._recordFailure(s), s;
430
+ }
431
+ if (++r > 1e4)
432
+ throw new Error("[Raph] Derived stabilization exceeded 10000 recomputations.");
433
+ }
434
+ }
435
+ } catch (i) {
436
+ throw t.clear(), i;
437
+ } finally {
438
+ this._stabilizing = !1, e == null || e.clearPendingIfEmpty();
439
+ }
440
+ }
441
+ _recomputePendingDerived(e) {
442
+ var r;
443
+ const t = (r = this._derivedController) == null ? void 0 : r.state(e);
444
+ if (t === void 0 || !t.initialized || t.full) {
445
+ this._recomputeDerivedFull(e);
446
+ return;
447
+ }
448
+ t.kind === "filter-by-key" ? this._recomputeDerivedFilter(e, t) : this._recomputeDerivedCollection(e, t);
449
+ }
450
+ _recomputeDerivedFull(e) {
451
+ var c;
452
+ const t = (c = this._derivedController) == null ? void 0 : c.state(e);
453
+ t !== void 0 && (t.full = !0);
454
+ const r = this.get(e.options.from), i = e.options.compute(r);
455
+ let s = i, a, d;
456
+ t !== void 0 && (r === void 0 && (i === void 0 || Array.isArray(i) && i.length === 0) ? (a = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map()) : (t.kind === "filter-by-key" ? (S(e.id, t.key, r, i), s = z(i)) : K(e.id, t.key, r, i), a = w(r, t.key, "source"), d = w(s, t.key, "output"))), this._writeDerivedTarget(e.options.to, s), t !== void 0 && (t.sourceIndex = a, t.targetIndex = d, t.initialized = !0, t.full = !1, t.keys.clear());
457
+ }
458
+ _recomputeDerivedCollection(e, t) {
459
+ t.full = !0;
460
+ const r = this.get(e.options.from), i = this.get(e.options.to);
461
+ if (!Array.isArray(r) || !Array.isArray(i))
462
+ throw M(e.id, "requires array source and target");
463
+ (t.sourceIndex === void 0 || P(r, t.key, t.sourceIndex, t.keys)) && (t.sourceIndex = w(r, t.key, "source"));
464
+ const s = t.targetIndex;
465
+ if (s === void 0)
466
+ throw M(e.id, "has no materialized target index");
467
+ const a = [], d = [];
468
+ for (const o of t.keys) {
469
+ const m = t.sourceIndex.get(o);
470
+ m === void 0 ? d.push(o) : a.push({ key: o, index: m, item: r[m] });
471
+ }
472
+ a.sort((o, m) => o.index - m.index);
473
+ const c = a.map((o) => o.item), l = c.length === 0 ? [] : e.options.compute(c);
474
+ q(
475
+ e.id,
476
+ t.key,
477
+ a.map((o) => o.key),
478
+ l
479
+ );
480
+ const v = l;
481
+ if (d.length !== 0 || a.some((o) => !s.has(o.key))) {
482
+ const o = /* @__PURE__ */ new Map();
483
+ for (let u = 0; u < a.length; u++)
484
+ o.set(a[u].key, v[u]);
485
+ const m = /* @__PURE__ */ new Map();
486
+ for (const [u, g] of s)
487
+ m.set(u, i[g]);
488
+ const n = C(r, t.key, "source"), h = [];
489
+ h.length = n.length;
490
+ for (let u = 0; u < n.length; u++) {
491
+ const g = n[u];
492
+ if (g === void 0)
493
+ continue;
494
+ const D = o.has(g) ? o.get(g) : m.get(g);
495
+ if (D === void 0)
496
+ throw M(e.id, `is missing target item for key "${String(g)}"`);
497
+ h[u] = D;
498
+ }
499
+ const y = w(h, t.key, "target");
500
+ this._replaceDerivedTarget(e.options.to, h, t.keys), t.targetIndex = y;
501
+ } else
502
+ for (let o = 0; o < a.length; o++)
503
+ this._writeDerivedTarget(
504
+ A(e.options.to, t.key, a[o].key),
505
+ v[o]
506
+ );
507
+ t.keys.clear(), t.full = !1;
508
+ }
509
+ _recomputeDerivedFilter(e, t) {
510
+ t.full = !0;
511
+ const r = this.get(e.options.from), i = this.get(e.options.to);
512
+ if (!Array.isArray(r) || !Array.isArray(i))
513
+ throw I(e.id, "requires array source and target");
514
+ (t.sourceIndex === void 0 || P(r, t.key, t.sourceIndex, t.keys)) && (t.sourceIndex = w(r, t.key, "source"));
515
+ const s = t.targetIndex;
516
+ if (s === void 0)
517
+ throw I(e.id, "has no materialized target index");
518
+ const a = [];
519
+ for (const n of t.keys) {
520
+ const h = t.sourceIndex.get(n);
521
+ h !== void 0 && a.push({ key: n, index: h, item: r[h] });
522
+ }
523
+ a.sort((n, h) => n.index - h.index);
524
+ const d = a.map((n) => n.item), c = d.length === 0 ? [] : e.options.compute(d);
525
+ N(
526
+ e.id,
527
+ t.key,
528
+ a.map((n) => n.key),
529
+ c
530
+ );
531
+ const l = /* @__PURE__ */ new Map(), v = c, _ = C(v, t.key, "output");
532
+ for (let n = 0; n < _.length; n++) {
533
+ const h = _[n];
534
+ h !== void 0 && l.set(h, z(v[n]));
535
+ }
536
+ const o = /* @__PURE__ */ new Set();
537
+ let m = !1;
538
+ for (const n of t.keys) {
539
+ const h = s.has(n), y = l.has(n);
540
+ !h && !y || (o.add(n), h !== y && (m = !0));
541
+ }
542
+ if (m && t.keys.size === 1 && i.length === s.size && this._patchSingleFilterMembership(
543
+ e,
544
+ t,
545
+ i,
546
+ s,
547
+ l,
548
+ o
549
+ )) {
550
+ t.keys.clear(), t.full = !1;
551
+ return;
552
+ }
553
+ if (m) {
554
+ const n = /* @__PURE__ */ new Map();
555
+ for (const [u, g] of s)
556
+ n.set(u, i[g]);
557
+ const h = [];
558
+ for (const u of C(r, t.key, "source"))
559
+ if (u !== void 0) {
560
+ if (t.keys.has(u)) {
561
+ l.has(u) && h.push(l.get(u));
562
+ continue;
563
+ }
564
+ n.has(u) && h.push(n.get(u));
565
+ }
566
+ const y = w(h, t.key, "target");
567
+ this._replaceDerivedTarget(e.options.to, h, o), t.targetIndex = y;
568
+ } else
569
+ for (const [n, h] of l)
570
+ this._writeDerivedTarget(A(e.options.to, t.key, n), h);
571
+ t.keys.clear(), t.full = !1;
572
+ }
573
+ _patchSingleFilterMembership(e, t, r, i, s, a) {
574
+ const d = t.sourceIndex;
575
+ if (d === void 0)
576
+ return !1;
577
+ const c = t.keys.values().next().value;
578
+ if (c === void 0)
579
+ return !1;
580
+ const l = i.get(c), v = s.has(c);
581
+ if (l !== void 0 === v)
582
+ return !1;
583
+ const _ = r.slice();
584
+ let o;
585
+ if (l !== void 0)
586
+ o = l, _.splice(o, 1);
587
+ else {
588
+ const m = d.get(c);
589
+ if (m === void 0)
590
+ return !1;
591
+ let n = 0, h = _.length;
592
+ for (; n < h; ) {
593
+ const y = n + h >>> 1, u = _[y];
594
+ if (typeof u != "object" || u === null || Array.isArray(u))
595
+ return !1;
596
+ const g = u[t.key];
597
+ if (typeof g != "string" && typeof g != "number")
598
+ return !1;
599
+ const D = d.get(g);
600
+ if (D === void 0)
601
+ return !1;
602
+ D < m ? n = y + 1 : h = y;
603
+ }
604
+ o = n, _.splice(o, 0, s.get(c));
605
+ }
606
+ if (this._replaceDerivedTarget(e.options.to, _, a), l !== void 0) {
607
+ i.delete(c);
608
+ for (const [m, n] of i)
609
+ n > o && i.set(m, n - 1);
610
+ } else {
611
+ for (const [m, n] of i)
612
+ n >= o && i.set(m, n + 1);
613
+ i.set(c, o);
614
+ }
615
+ return !0;
616
+ }
617
+ };
618
+ // Формирует локальный id для Kernel без явно заданного имени.
619
+ p(x, "_kernelCounter", 0);
620
+ let E = x;
621
+ function T(f, e) {
622
+ const t = Math.min(f.segments.length, e.segments.length);
623
+ for (let r = 0; r < t; r++)
624
+ if (!V(f.segments[r], e.segments[r]))
625
+ return !1;
626
+ return !0;
627
+ }
628
+ function U(f, e) {
629
+ return typeof f != "object" || f === null || Array.isArray(f) || e.kind !== "key" ? !0 : Object.hasOwn(f, e.key);
630
+ }
631
+ function V(f, e) {
632
+ return f.kind !== e.kind ? !1 : f.kind === "key" && e.kind === "key" ? f.key === e.key : f.kind === "index" && e.kind === "index" ? f.index === e.index : f.kind === "selector" && e.kind === "selector" && f.key === e.key && Object.is(f.value, e.value);
633
+ }
634
+ export {
635
+ E as RaphKernel
636
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class s{constructor(r,a={}){this._kernel=r,this._binding=a}get(r,a,t){var e,i;return(i=(e=this._binding).assertReadable)==null||i.call(e),this._kernel.getMeta(r,a,t)}has(r,a,t){var e,i;return(i=(e=this._binding).assertReadable)==null||i.call(e),this._kernel.hasMeta(r,a,t)}set(r,a,t,e){var i,h;(h=(i=this._binding).assertWritable)==null||h.call(i),this._write(()=>this._kernel.setMeta(r,a,t,e),(e==null?void 0:e.invalidate)??!0)}merge(r,a,t,e){var i,h;(h=(i=this._binding).assertWritable)==null||h.call(i),this._write(()=>this._kernel.mergeMeta(r,a,t,e),(e==null?void 0:e.invalidate)??!0)}delete(r,a,t){var e,i;(i=(e=this._binding).assertWritable)==null||i.call(e),this._write(()=>this._kernel.deleteMeta(r,a,t),(t==null?void 0:t.invalidate)??!0)}watch(r,a,t={}){var e,i;if((i=(e=this._binding).assertReadable)==null||i.call(e),this._binding.watch===void 0)throw new Error("[RaphMeta] watch requires a runtime-bound Meta facade.");return this._binding.watch(r,a,t)}_write(r,a){const t=this._binding.runWrite;t===void 0?r():t(r,a)}}exports.RaphMeta=s;
@@ -0,0 +1,68 @@
1
+ class n {
2
+ /**
3
+ * Создаёт metadata facade поверх указанного Kernel.
4
+ */
5
+ constructor(r, a = {}) {
6
+ this._kernel = r, this._binding = a;
7
+ }
8
+ /**
9
+ * Возвращает значение по пути без создания отсутствующих данных.
10
+ */
11
+ get(r, a, t) {
12
+ var e, i;
13
+ return (i = (e = this._binding).assertReadable) == null || i.call(e), this._kernel.getMeta(r, a, t);
14
+ }
15
+ /**
16
+ * Проверяет наличие значения по указанному пути.
17
+ */
18
+ has(r, a, t) {
19
+ var e, i;
20
+ return (i = (e = this._binding).assertReadable) == null || i.call(e), this._kernel.hasMeta(r, a, t);
21
+ }
22
+ /**
23
+ * Записывает значение и публикует соответствующее изменение.
24
+ */
25
+ set(r, a, t, e) {
26
+ var i, h;
27
+ (h = (i = this._binding).assertWritable) == null || h.call(i), this._write(
28
+ () => this._kernel.setMeta(r, a, t, e),
29
+ (e == null ? void 0 : e.invalidate) ?? !0
30
+ );
31
+ }
32
+ /**
33
+ * Объединяет значение по пути и публикует соответствующее изменение.
34
+ */
35
+ merge(r, a, t, e) {
36
+ var i, h;
37
+ (h = (i = this._binding).assertWritable) == null || h.call(i), this._write(
38
+ () => this._kernel.mergeMeta(r, a, t, e),
39
+ (e == null ? void 0 : e.invalidate) ?? !0
40
+ );
41
+ }
42
+ /**
43
+ * Удаляет значение по пути и публикует изменение при наличии данных.
44
+ */
45
+ delete(r, a, t) {
46
+ var e, i;
47
+ (i = (e = this._binding).assertWritable) == null || i.call(e), this._write(
48
+ () => this._kernel.deleteMeta(r, a, t),
49
+ (t == null ? void 0 : t.invalidate) ?? !0
50
+ );
51
+ }
52
+ /**
53
+ * Подписывает callback на metadata-изменения и возвращает disposer.
54
+ */
55
+ watch(r, a, t = {}) {
56
+ var e, i;
57
+ if ((i = (e = this._binding).assertReadable) == null || i.call(e), this._binding.watch === void 0)
58
+ throw new Error("[RaphMeta] watch requires a runtime-bound Meta facade.");
59
+ return this._binding.watch(r, a, t);
60
+ }
61
+ _write(r, a) {
62
+ const t = this._binding.runWrite;
63
+ t === void 0 ? r() : t(r, a);
64
+ }
65
+ }
66
+ export {
67
+ n as RaphMeta
68
+ };