@raphy-js/raph 1.0.0-dev.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/dist/api/Raph.d.ts +97 -0
- package/dist/api/RaphFacadeSession.d.ts +90 -0
- package/dist/api/RaphReactivityInstance.d.ts +72 -0
- package/dist/api/errors.d.ts +25 -0
- package/dist/api/types.d.ts +170 -0
- package/dist/core-CyilRD7s.js +1055 -0
- package/dist/core-ugchZNqC.cjs +1 -0
- package/dist/debug/api/Raph.cjs +1 -0
- package/dist/debug/api/Raph.js +421 -0
- package/dist/debug/api/RaphFacadeSession.cjs +1 -0
- package/dist/debug/api/RaphFacadeSession.js +306 -0
- package/dist/debug/api/RaphReactivityInstance.cjs +1 -0
- package/dist/debug/api/RaphReactivityInstance.js +149 -0
- package/dist/debug/api/errors.cjs +1 -0
- package/dist/debug/api/errors.js +17 -0
- package/dist/debug/api/types.cjs +1 -0
- package/dist/debug/api/types.js +1 -0
- package/dist/debug/path/DataPath.cjs +1 -0
- package/dist/debug/path/DataPath.js +394 -0
- package/dist/debug/path/PathRouter.cjs +1 -0
- package/dist/debug/path/PathRouter.js +86 -0
- package/dist/debug/path/RaphKernel.cjs +1 -0
- package/dist/debug/path/RaphKernel.js +687 -0
- package/dist/debug/path/data-path.types.cjs +1 -0
- package/dist/debug/path/data-path.types.js +1 -0
- 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 +157 -0
- package/dist/debug/path/derived/RaphDerivedHandle.cjs +1 -0
- package/dist/debug/path/derived/RaphDerivedHandle.js +125 -0
- package/dist/debug/path/derived/derived-collection.types.cjs +1 -0
- package/dist/debug/path/derived/derived-collection.types.js +1 -0
- package/dist/debug/path/derived/derived-collection.utils.cjs +1 -0
- package/dist/debug/path/derived/derived-collection.utils.js +179 -0
- 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/derived/derived-strategy.utils.cjs +1 -0
- package/dist/debug/path/derived/derived-strategy.utils.js +20 -0
- package/dist/debug/path/meta/MetaController.cjs +1 -0
- package/dist/debug/path/meta/MetaController.js +214 -0
- package/dist/debug/path/meta/RaphMeta.cjs +1 -0
- package/dist/debug/path/meta/RaphMeta.js +68 -0
- package/dist/debug/path/meta/RaphMetaStore.cjs +1 -0
- package/dist/debug/path/meta/RaphMetaStore.js +184 -0
- package/dist/debug/path/meta/meta.types.cjs +1 -0
- package/dist/debug/path/meta/meta.types.js +1 -0
- package/dist/debug/path/path.types.cjs +1 -0
- package/dist/debug/path/path.types.js +1 -0
- package/dist/debug/path/pathSegmentKey.cjs +1 -0
- package/dist/debug/path/pathSegmentKey.js +12 -0
- package/dist/debug/path/storage/AdapterPathStore.cjs +1 -0
- package/dist/debug/path/storage/AdapterPathStore.js +133 -0
- package/dist/debug/path/storage/DefaultDataAdapter.cjs +1 -0
- package/dist/debug/path/storage/DefaultDataAdapter.js +356 -0
- package/dist/debug/path/storage/PathEventHub.cjs +1 -0
- package/dist/debug/path/storage/PathEventHub.js +148 -0
- package/dist/debug/path/storage/PathStore.cjs +1 -0
- package/dist/debug/path/storage/PathStore.js +326 -0
- package/dist/debug/path/storage/createDataDraft.cjs +1 -0
- package/dist/debug/path/storage/createDataDraft.js +71 -0
- 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/engine.cjs +1 -0
- package/dist/debug/reactivity/engine.js +1305 -0
- package/dist/debug/reactivity/reactive-object.cjs +1 -0
- package/dist/debug/reactivity/reactive-object.js +280 -0
- package/dist/debug/reactivity/scope.cjs +1 -0
- package/dist/debug/reactivity/scope.js +274 -0
- package/dist/debug/reactivity/types.cjs +1 -0
- package/dist/debug/reactivity/types.js +1 -0
- package/dist/debug/reactivity/watch.cjs +1 -0
- package/dist/debug/reactivity/watch.js +64 -0
- package/dist/debug/runtime/RaphRuntime.cjs +1 -0
- package/dist/debug/runtime/RaphRuntime.js +979 -0
- package/dist/debug/runtime/diagnostics/RaphDebug.cjs +1 -0
- package/dist/debug/runtime/diagnostics/RaphDebug.js +297 -0
- package/dist/debug/runtime/errors.cjs +1 -0
- package/dist/debug/runtime/errors.js +15 -0
- package/dist/debug/runtime/ownership/RaphEffectScope.cjs +1 -0
- package/dist/debug/runtime/ownership/RaphEffectScope.js +171 -0
- package/dist/debug/runtime/ownership/RaphNode.cjs +1 -0
- package/dist/debug/runtime/ownership/RaphNode.js +206 -0
- package/dist/debug/runtime/ownership/RaphScope.cjs +1 -0
- package/dist/debug/runtime/ownership/RaphScope.js +101 -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/ownership/parentGraph.cjs +1 -0
- package/dist/debug/runtime/ownership/parentGraph.js +10 -0
- package/dist/debug/runtime/ownership/throwDisposalErrors.cjs +1 -0
- package/dist/debug/runtime/ownership/throwDisposalErrors.js +9 -0
- package/dist/debug/runtime/phases/RaphFrameLoop.cjs +1 -0
- package/dist/debug/runtime/phases/RaphFrameLoop.js +106 -0
- package/dist/debug/runtime/phases/RaphPhasePipeline.cjs +1 -0
- package/dist/debug/runtime/phases/RaphPhasePipeline.js +587 -0
- package/dist/debug/runtime/phases/orderPhaseTasks.cjs +1 -0
- package/dist/debug/runtime/phases/orderPhaseTasks.js +59 -0
- package/dist/debug/runtime/phases/phase.types.cjs +1 -0
- package/dist/debug/runtime/phases/phase.types.js +8 -0
- package/dist/debug/runtime/reactivity/PathHandle.cjs +1 -0
- package/dist/debug/runtime/reactivity/PathHandle.js +175 -0
- package/dist/debug/runtime/reactivity/RaphMetaSource.cjs +1 -0
- package/dist/debug/runtime/reactivity/RaphMetaSource.js +112 -0
- package/dist/debug/runtime/reactivity/RaphWorkGraph.cjs +1 -0
- package/dist/debug/runtime/reactivity/RaphWorkGraph.js +995 -0
- package/dist/debug/runtime/reactivity/RuntimeReactivity.cjs +1 -0
- package/dist/debug/runtime/reactivity/RuntimeReactivity.js +156 -0
- package/dist/debug/runtime/reactivity/RuntimeWatch.cjs +1 -0
- package/dist/debug/runtime/reactivity/RuntimeWatch.js +88 -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 +17 -0
- package/dist/index.cjs +1 -0
- package/dist/index.js +48 -0
- 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 +837 -0
- package/dist/main.d.ts +20 -0
- package/dist/path/DataPath.d.ts +73 -0
- package/dist/path/PathRouter.d.ts +21 -0
- package/dist/path/RaphKernel.d.ts +169 -0
- package/dist/path/data-path.types.d.ts +34 -0
- package/dist/path/data-path.utils.d.ts +9 -0
- package/dist/path/derived/DerivedRegistry.d.ts +67 -0
- package/dist/path/derived/RaphDerivedHandle.d.ts +97 -0
- package/dist/path/derived/derived-collection.types.d.ts +12 -0
- package/dist/path/derived/derived-collection.utils.d.ts +20 -0
- package/dist/path/derived/derived-strategy.types.d.ts +12 -0
- package/dist/path/derived/derived-strategy.utils.d.ts +4 -0
- package/dist/path/meta/MetaController.d.ts +85 -0
- package/dist/path/meta/RaphMeta.d.ts +45 -0
- package/dist/path/meta/RaphMetaStore.d.ts +45 -0
- package/dist/path/meta/meta.types.d.ts +31 -0
- package/dist/path/path.types.d.ts +27 -0
- package/dist/path/pathSegmentKey.d.ts +2 -0
- package/dist/path/storage/AdapterPathStore.d.ts +45 -0
- package/dist/path/storage/DefaultDataAdapter.d.ts +63 -0
- package/dist/path/storage/PathEventHub.d.ts +48 -0
- package/dist/path/storage/PathStore.d.ts +51 -0
- package/dist/path/storage/createDataDraft.d.ts +4 -0
- package/dist/path/storage/data-adapter.types.d.ts +17 -0
- package/dist/path.cjs +1 -0
- package/dist/path.js +18 -0
- package/dist/raph.cjs +1 -0
- package/dist/raph.js +48 -0
- package/dist/reactivity/engine.d.ts +393 -0
- package/dist/reactivity/reactive-object.d.ts +36 -0
- package/dist/reactivity/scope.d.ts +146 -0
- package/dist/reactivity/types.d.ts +175 -0
- package/dist/reactivity/watch.d.ts +15 -0
- package/dist/reactivity.cjs +1 -0
- package/dist/reactivity.js +14 -0
- package/dist/runtime/RaphRuntime.d.ts +225 -0
- package/dist/runtime/diagnostics/RaphDebug.d.ts +239 -0
- package/dist/runtime/errors.d.ts +21 -0
- package/dist/runtime/ownership/RaphEffectScope.d.ts +29 -0
- package/dist/runtime/ownership/RaphNode.d.ts +40 -0
- package/dist/runtime/ownership/RaphScope.d.ts +38 -0
- package/dist/runtime/ownership/parent-graph.types.d.ts +4 -0
- package/dist/runtime/ownership/parentGraph.d.ts +3 -0
- package/dist/runtime/ownership/throwDisposalErrors.d.ts +1 -0
- package/dist/runtime/phases/RaphFrameLoop.d.ts +51 -0
- package/dist/runtime/phases/RaphPhasePipeline.d.ts +79 -0
- package/dist/runtime/phases/orderPhaseTasks.d.ts +6 -0
- package/dist/runtime/phases/phase.types.d.ts +92 -0
- package/dist/runtime/reactivity/PathHandle.d.ts +80 -0
- package/dist/runtime/reactivity/RaphMetaSource.d.ts +32 -0
- package/dist/runtime/reactivity/RaphWorkGraph.d.ts +171 -0
- package/dist/runtime/reactivity/RuntimeReactivity.d.ts +45 -0
- package/dist/runtime/reactivity/RuntimeWatch.d.ts +34 -0
- package/dist/runtime/reactivity/runtime-reactivity.types.d.ts +11 -0
- package/dist/runtime.cjs +1 -0
- package/dist/runtime.js +23 -0
- package/package.json +141 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
var v = Object.defineProperty;
|
|
2
|
+
var p = (d, e, t) => e in d ? v(d, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : d[e] = t;
|
|
3
|
+
var l = (d, e, t) => p(d, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import { DataPath as f } from "../DataPath.js";
|
|
5
|
+
import { PathRouter as g } from "../PathRouter.js";
|
|
6
|
+
import { RaphMeta as m } from "./RaphMeta.js";
|
|
7
|
+
import { RaphMetaStore as _ } from "./RaphMetaStore.js";
|
|
8
|
+
class k {
|
|
9
|
+
/**
|
|
10
|
+
* Создаёт lifecycle-контроллер metadata для одного Kernel.
|
|
11
|
+
*/
|
|
12
|
+
constructor(e, t, r) {
|
|
13
|
+
// Лениво создают metadata facade, storage и routing только при первом использовании.
|
|
14
|
+
l(this, "_facade");
|
|
15
|
+
l(this, "_store");
|
|
16
|
+
l(this, "_router");
|
|
17
|
+
l(this, "_pending");
|
|
18
|
+
// Управляют reentrant publication и режимами активных watchers.
|
|
19
|
+
l(this, "_publishing", !1);
|
|
20
|
+
l(this, "_watcherCount", 0);
|
|
21
|
+
l(this, "_deferredWatcherCount", 0);
|
|
22
|
+
this._kernel = e, this._ownerExists = t, this._publicationDeferred = r;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Возвращает metadata facade, принадлежащий контроллеру.
|
|
26
|
+
*/
|
|
27
|
+
get facade() {
|
|
28
|
+
return this._facade ?? (this._facade = new m(this._kernel));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Возвращает число зарегистрированных записей.
|
|
32
|
+
*/
|
|
33
|
+
get size() {
|
|
34
|
+
var e;
|
|
35
|
+
return ((e = this._store) == null ? void 0 : e.size) ?? 0;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Показывает, есть ли активные синхронные metadata/path watchers.
|
|
39
|
+
*/
|
|
40
|
+
get hasWatchers() {
|
|
41
|
+
return this._router !== void 0;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Показывает, есть ли watchers с отложенной публикацией.
|
|
45
|
+
*/
|
|
46
|
+
get hasDeferredWatchers() {
|
|
47
|
+
return this._deferredWatcherCount !== 0;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Возвращает значение по пути без создания отсутствующих данных.
|
|
51
|
+
*/
|
|
52
|
+
get(e, t) {
|
|
53
|
+
var r;
|
|
54
|
+
return (r = this._store) == null ? void 0 : r.get(e, t);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Проверяет наличие значения по указанному пути.
|
|
58
|
+
*/
|
|
59
|
+
has(e, t) {
|
|
60
|
+
var r;
|
|
61
|
+
return ((r = this._store) == null ? void 0 : r.has(e, t)) ?? !1;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Записывает значение и публикует соответствующее изменение.
|
|
65
|
+
*/
|
|
66
|
+
set(e, t, r, i) {
|
|
67
|
+
(this._store ?? (this._store = new _())).set(e, t, r), this.record("set", e, t, "explicit", i);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Объединяет значение по пути и публикует соответствующее изменение.
|
|
71
|
+
*/
|
|
72
|
+
merge(e, t, r, i) {
|
|
73
|
+
(this._store ?? (this._store = new _())).merge(e, t, r), this.record("merge", e, t, "explicit", i);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Удаляет значение по пути и публикует изменение при наличии данных.
|
|
77
|
+
*/
|
|
78
|
+
delete(e, t, r) {
|
|
79
|
+
var i;
|
|
80
|
+
return (i = this._store) != null && i.delete(e, t) ? (this.record("delete", e, t ?? null, "explicit", r), !0) : !1;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Удаляет metadata всего поддерева указанного data-owner.
|
|
84
|
+
*/
|
|
85
|
+
deleteSubtree(e, t) {
|
|
86
|
+
const r = this._store;
|
|
87
|
+
if (r !== void 0)
|
|
88
|
+
for (const i of r.deleteSubtree(e))
|
|
89
|
+
this.record("delete", i, null, t);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Удаляет metadata, владельцы которой отсутствуют в data tree.
|
|
93
|
+
*/
|
|
94
|
+
pruneMissing(e, t) {
|
|
95
|
+
const r = this._store;
|
|
96
|
+
if (r === void 0 || r.size === 0)
|
|
97
|
+
return;
|
|
98
|
+
const o = e.segments().findIndex(
|
|
99
|
+
(s) => s.kind === "index" || s.kind === "selector"
|
|
100
|
+
), c = o === -1 ? e : f.fromPlain({ segs: e.toPlain().segs.slice(0, o) });
|
|
101
|
+
for (const s of r.pruneMissing(
|
|
102
|
+
c,
|
|
103
|
+
(n) => this._ownerExists(n)
|
|
104
|
+
))
|
|
105
|
+
this.record("delete", s, null, t);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Подписывает callback на подходящие изменения и возвращает disposer.
|
|
109
|
+
*/
|
|
110
|
+
watch(e, t, r = {}, i) {
|
|
111
|
+
const o = Array.isArray(e) ? e : [e];
|
|
112
|
+
if (o.length === 0)
|
|
113
|
+
throw new TypeError("[RaphMeta] watch requires at least one mask.");
|
|
114
|
+
const c = /* @__PURE__ */ new Map();
|
|
115
|
+
for (const a of o) {
|
|
116
|
+
const u = f.from(a, r)._asMask();
|
|
117
|
+
c.set(u.canonical, u);
|
|
118
|
+
}
|
|
119
|
+
const s = {
|
|
120
|
+
active: !0,
|
|
121
|
+
callback: t,
|
|
122
|
+
afterPublish: i,
|
|
123
|
+
...r.namespace === void 0 ? {} : { namespace: r.namespace }
|
|
124
|
+
}, n = this._router ?? (this._router = new g()), h = [...c.values()].map((a) => n.add(a, s));
|
|
125
|
+
return this._watcherCount++, i !== void 0 && this._deferredWatcherCount++, w(() => {
|
|
126
|
+
s.active = !1, s.callback = void 0, s.afterPublish = void 0;
|
|
127
|
+
for (const a of h)
|
|
128
|
+
a();
|
|
129
|
+
this._watcherCount--, i !== void 0 && this._deferredWatcherCount--, this._watcherCount === 0 && (this._router = void 0);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Добавляет событие в текущую batch либо публикует его сразу.
|
|
134
|
+
*/
|
|
135
|
+
record(e, t, r, i, o) {
|
|
136
|
+
(this._pending ?? (this._pending = [])).push({
|
|
137
|
+
event: { kind: e, path: t, namespace: r, cause: i },
|
|
138
|
+
invalidate: (o == null ? void 0 : o.invalidate) ?? !0
|
|
139
|
+
}), !this._publicationDeferred() && !this._publishing && this.publish();
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Публикует накопленные metadata-события с учётом watcher mode.
|
|
143
|
+
*/
|
|
144
|
+
publish() {
|
|
145
|
+
const e = this._pending;
|
|
146
|
+
if (e === void 0 || e.length === 0 || this._publishing)
|
|
147
|
+
return;
|
|
148
|
+
const t = [], r = /* @__PURE__ */ new Map();
|
|
149
|
+
this._publishing = !0;
|
|
150
|
+
try {
|
|
151
|
+
for (; e.length !== 0; ) {
|
|
152
|
+
const i = e.splice(0), o = this._router;
|
|
153
|
+
if (o === void 0)
|
|
154
|
+
continue;
|
|
155
|
+
const c = /* @__PURE__ */ new Map();
|
|
156
|
+
for (const s of i) {
|
|
157
|
+
const n = s.event;
|
|
158
|
+
for (const h of o.match(n.path._asExact().segments)) {
|
|
159
|
+
if (h.namespace !== void 0 && n.namespace !== null && h.namespace !== n.namespace)
|
|
160
|
+
continue;
|
|
161
|
+
const a = c.get(h);
|
|
162
|
+
a === void 0 ? c.set(h, {
|
|
163
|
+
events: [n],
|
|
164
|
+
invalidate: s.invalidate
|
|
165
|
+
}) : (a.events.push(n), s.invalidate && (a.invalidate = !0));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
for (const [s, n] of c) {
|
|
169
|
+
if (!s.active || s.callback === void 0)
|
|
170
|
+
continue;
|
|
171
|
+
const h = s.afterPublish;
|
|
172
|
+
h !== void 0 && r.set(
|
|
173
|
+
h,
|
|
174
|
+
(r.get(h) ?? !1) || n.invalidate
|
|
175
|
+
);
|
|
176
|
+
try {
|
|
177
|
+
s.callback({ events: n.events });
|
|
178
|
+
} catch (a) {
|
|
179
|
+
t.push(a);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
} finally {
|
|
184
|
+
this._publishing = !1;
|
|
185
|
+
}
|
|
186
|
+
for (const [i, o] of r)
|
|
187
|
+
try {
|
|
188
|
+
i(o);
|
|
189
|
+
} catch (c) {
|
|
190
|
+
t.push(c);
|
|
191
|
+
}
|
|
192
|
+
if (t.length === 1)
|
|
193
|
+
throw t[0];
|
|
194
|
+
if (t.length > 1)
|
|
195
|
+
throw new AggregateError(t, "[RaphMeta] Multiple watchers failed.");
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Очищает metadata storage, subscriptions и pending publication state.
|
|
199
|
+
*/
|
|
200
|
+
dispose() {
|
|
201
|
+
var e;
|
|
202
|
+
(e = this._store) == null || e.clear(), this._store = void 0, this._facade = void 0, this._router = void 0, this._pending = void 0, this._watcherCount = 0, this._deferredWatcherCount = 0;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function w(d) {
|
|
206
|
+
let e = d;
|
|
207
|
+
return () => {
|
|
208
|
+
const t = e;
|
|
209
|
+
e = void 0, t == null || t();
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
export {
|
|
213
|
+
k as MetaController
|
|
214
|
+
};
|
|
@@ -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
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var p=Object.defineProperty;var _=(n,e,t)=>e in n?p(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var a=(n,e,t)=>_(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("../pathSegmentKey.cjs");function d(){return{children:new Map,namespaces:new Map,path:void 0}}class g{constructor(){a(this,"_root",d());a(this,"size",0)}get(e,t){const r=this._find(e);if(r!==void 0)return t===void 0?Object.fromEntries(r.namespaces):r.namespaces.get(t)}has(e,t){const r=this._find(e);return r===void 0?!1:t===void 0?r.namespaces.size!==0:r.namespaces.has(t)}set(e,t,r){const s=this._ensure(e);s.namespaces.has(t)||this.size++,s.namespaces.set(t,r),s.path=e}merge(e,t,r){const s=this.get(e,t);if(l(s)&&l(r)){for(const i of Object.keys(r))y(s,i,r[i]);return}this.set(e,t,r)}delete(e,t){var i;const r=this._findStack(e),s=(i=r.at(-1))==null?void 0:i.node;if(s===void 0)return!1;if(t===void 0){if(s.namespaces.size===0)return!1;this.size-=s.namespaces.size,s.namespaces.clear()}else{if(!s.namespaces.delete(t))return!1;this.size--}return this._pruneEmpty(r),!0}deleteSubtree(e){const t=o(e);if(t.length===0)return this.clear();let r=this._root;for(let c=0;c<t.length-1;c++){const u=r.children.get(t[c]);if(u===void 0)return[];r=u}const s=r.children.get(t.at(-1));if(s===void 0)return[];const i=h(s);return this.size-=f(s),r.children.delete(t.at(-1)),i}pruneMissing(e,t){const r=this._find(e);if(r===void 0)return[];const s=[];return this._pruneMissingNode(r,t,s),s}clear(){const e=h(this._root);return this._root.children.clear(),this._root.namespaces.clear(),this._root.path=void 0,this.size=0,e}_find(e){let t=this._root;for(const r of o(e)){const s=t.children.get(r);if(s===void 0)return;t=s}return t}_ensure(e){let t=this._root;for(const r of o(e)){let s=t.children.get(r);s===void 0&&(s=d(),t.children.set(r,s)),t=s}return t}_findStack(e){const t=[{key:void 0,node:this._root}];let r=this._root;for(const s of o(e)){const i=r.children.get(s);if(i===void 0)return[];t.push({key:s,node:i}),r=i}return t}_pruneEmpty(e){for(let t=e.length-1;t>0;t--){const r=e[t];if(r.node.namespaces.size!==0||r.node.children.size!==0)return;e[t-1].node.children.delete(r.key)}}_pruneMissingNode(e,t,r){for(const[s,i]of[...e.children])this._pruneMissingNode(i,t,r)&&e.children.delete(s);return e.path!==void 0&&e.namespaces.size!==0&&!t(e.path)&&(this.size-=e.namespaces.size,e.namespaces.clear(),r.push(e.path)),e!==this._root&&e.namespaces.size===0&&e.children.size===0}}function o(n){return n.segments().map(m.pathSegmentKey)}function h(n){const e=n.path!==void 0&&n.namespaces.size!==0?[n.path]:[];for(const t of n.children.values())e.push(...h(t));return e}function f(n){let e=n.namespaces.size;for(const t of n.children.values())e+=f(t);return e}function l(n){if(typeof n!="object"||n===null||Array.isArray(n))return!1;const e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}function y(n,e,t){if(e!=="__proto__"){n[e]=t;return}Object.defineProperty(n,e,{configurable:!0,enumerable:!0,value:t,writable:!0})}exports.RaphMetaStore=g;
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
var p = Object.defineProperty;
|
|
2
|
+
var _ = (n, e, t) => e in n ? p(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
|
|
3
|
+
var h = (n, e, t) => _(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import { pathSegmentKey as m } from "../pathSegmentKey.js";
|
|
5
|
+
function f() {
|
|
6
|
+
return { children: /* @__PURE__ */ new Map(), namespaces: /* @__PURE__ */ new Map(), path: void 0 };
|
|
7
|
+
}
|
|
8
|
+
class v {
|
|
9
|
+
constructor() {
|
|
10
|
+
// Хранят metadata tree и точное число записанных namespaces.
|
|
11
|
+
h(this, "_root", f());
|
|
12
|
+
h(this, "size", 0);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Возвращает значение по пути без создания отсутствующих данных.
|
|
16
|
+
*/
|
|
17
|
+
get(e, t) {
|
|
18
|
+
const r = this._find(e);
|
|
19
|
+
if (r !== void 0)
|
|
20
|
+
return t === void 0 ? Object.fromEntries(r.namespaces) : r.namespaces.get(t);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Проверяет наличие значения по указанному пути.
|
|
24
|
+
*/
|
|
25
|
+
has(e, t) {
|
|
26
|
+
const r = this._find(e);
|
|
27
|
+
return r === void 0 ? !1 : t === void 0 ? r.namespaces.size !== 0 : r.namespaces.has(t);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Записывает значение namespace в metadata tree.
|
|
31
|
+
*/
|
|
32
|
+
set(e, t, r) {
|
|
33
|
+
const s = this._ensure(e);
|
|
34
|
+
s.namespaces.has(t) || this.size++, s.namespaces.set(t, r), s.path = e;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Объединяет object metadata либо заменяет значение namespace.
|
|
38
|
+
*/
|
|
39
|
+
merge(e, t, r) {
|
|
40
|
+
const s = this.get(e, t);
|
|
41
|
+
if (l(s) && l(r)) {
|
|
42
|
+
for (const i of Object.keys(r))
|
|
43
|
+
g(s, i, r[i]);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.set(e, t, r);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Удаляет namespace либо все metadata указанного owner.
|
|
50
|
+
*/
|
|
51
|
+
delete(e, t) {
|
|
52
|
+
var i;
|
|
53
|
+
const r = this._findStack(e), s = (i = r.at(-1)) == null ? void 0 : i.node;
|
|
54
|
+
if (s === void 0)
|
|
55
|
+
return !1;
|
|
56
|
+
if (t === void 0) {
|
|
57
|
+
if (s.namespaces.size === 0)
|
|
58
|
+
return !1;
|
|
59
|
+
this.size -= s.namespaces.size, s.namespaces.clear();
|
|
60
|
+
} else {
|
|
61
|
+
if (!s.namespaces.delete(t))
|
|
62
|
+
return !1;
|
|
63
|
+
this.size--;
|
|
64
|
+
}
|
|
65
|
+
return this._pruneEmpty(r), !0;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Удаляет metadata всего поддерева указанного data-owner.
|
|
69
|
+
*/
|
|
70
|
+
deleteSubtree(e) {
|
|
71
|
+
const t = o(e);
|
|
72
|
+
if (t.length === 0)
|
|
73
|
+
return this.clear();
|
|
74
|
+
let r = this._root;
|
|
75
|
+
for (let c = 0; c < t.length - 1; c++) {
|
|
76
|
+
const d = r.children.get(t[c]);
|
|
77
|
+
if (d === void 0)
|
|
78
|
+
return [];
|
|
79
|
+
r = d;
|
|
80
|
+
}
|
|
81
|
+
const s = r.children.get(t.at(-1));
|
|
82
|
+
if (s === void 0)
|
|
83
|
+
return [];
|
|
84
|
+
const i = a(s);
|
|
85
|
+
return this.size -= u(s), r.children.delete(t.at(-1)), i;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Удаляет metadata, владельцы которой отсутствуют в data tree.
|
|
89
|
+
*/
|
|
90
|
+
pruneMissing(e, t) {
|
|
91
|
+
const r = this._find(e);
|
|
92
|
+
if (r === void 0)
|
|
93
|
+
return [];
|
|
94
|
+
const s = [];
|
|
95
|
+
return this._pruneMissingNode(r, t, s), s;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Полностью очищает metadata storage.
|
|
99
|
+
*/
|
|
100
|
+
clear() {
|
|
101
|
+
const e = a(this._root);
|
|
102
|
+
return this._root.children.clear(), this._root.namespaces.clear(), this._root.path = void 0, this.size = 0, e;
|
|
103
|
+
}
|
|
104
|
+
_find(e) {
|
|
105
|
+
let t = this._root;
|
|
106
|
+
for (const r of o(e)) {
|
|
107
|
+
const s = t.children.get(r);
|
|
108
|
+
if (s === void 0)
|
|
109
|
+
return;
|
|
110
|
+
t = s;
|
|
111
|
+
}
|
|
112
|
+
return t;
|
|
113
|
+
}
|
|
114
|
+
_ensure(e) {
|
|
115
|
+
let t = this._root;
|
|
116
|
+
for (const r of o(e)) {
|
|
117
|
+
let s = t.children.get(r);
|
|
118
|
+
s === void 0 && (s = f(), t.children.set(r, s)), t = s;
|
|
119
|
+
}
|
|
120
|
+
return t;
|
|
121
|
+
}
|
|
122
|
+
_findStack(e) {
|
|
123
|
+
const t = [
|
|
124
|
+
{ key: void 0, node: this._root }
|
|
125
|
+
];
|
|
126
|
+
let r = this._root;
|
|
127
|
+
for (const s of o(e)) {
|
|
128
|
+
const i = r.children.get(s);
|
|
129
|
+
if (i === void 0)
|
|
130
|
+
return [];
|
|
131
|
+
t.push({ key: s, node: i }), r = i;
|
|
132
|
+
}
|
|
133
|
+
return t;
|
|
134
|
+
}
|
|
135
|
+
_pruneEmpty(e) {
|
|
136
|
+
for (let t = e.length - 1; t > 0; t--) {
|
|
137
|
+
const r = e[t];
|
|
138
|
+
if (r.node.namespaces.size !== 0 || r.node.children.size !== 0)
|
|
139
|
+
return;
|
|
140
|
+
e[t - 1].node.children.delete(r.key);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
_pruneMissingNode(e, t, r) {
|
|
144
|
+
for (const [s, i] of [...e.children])
|
|
145
|
+
this._pruneMissingNode(i, t, r) && e.children.delete(s);
|
|
146
|
+
return e.path !== void 0 && e.namespaces.size !== 0 && !t(e.path) && (this.size -= e.namespaces.size, e.namespaces.clear(), r.push(e.path)), e !== this._root && e.namespaces.size === 0 && e.children.size === 0;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function o(n) {
|
|
150
|
+
return n.segments().map(m);
|
|
151
|
+
}
|
|
152
|
+
function a(n) {
|
|
153
|
+
const e = n.path !== void 0 && n.namespaces.size !== 0 ? [n.path] : [];
|
|
154
|
+
for (const t of n.children.values())
|
|
155
|
+
e.push(...a(t));
|
|
156
|
+
return e;
|
|
157
|
+
}
|
|
158
|
+
function u(n) {
|
|
159
|
+
let e = n.namespaces.size;
|
|
160
|
+
for (const t of n.children.values())
|
|
161
|
+
e += u(t);
|
|
162
|
+
return e;
|
|
163
|
+
}
|
|
164
|
+
function l(n) {
|
|
165
|
+
if (typeof n != "object" || n === null || Array.isArray(n))
|
|
166
|
+
return !1;
|
|
167
|
+
const e = Object.getPrototypeOf(n);
|
|
168
|
+
return e === Object.prototype || e === null;
|
|
169
|
+
}
|
|
170
|
+
function g(n, e, t) {
|
|
171
|
+
if (e !== "__proto__") {
|
|
172
|
+
n[e] = t;
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
Object.defineProperty(n, e, {
|
|
176
|
+
configurable: !0,
|
|
177
|
+
enumerable: !0,
|
|
178
|
+
value: t,
|
|
179
|
+
writable: !0
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
export {
|
|
183
|
+
v as RaphMetaStore
|
|
184
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function e(n){return n.kind==="key"?`k${r(n.key)}`:n.kind==="index"?`i:${n.index}`:n.kind==="selector"?`s${r(n.key)}${i(n.value)}`:`w:${n.indexed?"index":"key"}`}function r(n){return`:${n.length}:${n}`}function i(n){return n===null?":null":typeof n=="string"?`:string${r(n)}`:typeof n=="boolean"?n?":boolean:1":":boolean:0":`:number:${Object.is(n,-0)?"-0":String(n)}`}exports.pathSegmentKey=e;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
function t(n) {
|
|
2
|
+
return n.kind === "key" ? `k${r(n.key)}` : n.kind === "index" ? `i:${n.index}` : n.kind === "selector" ? `s${r(n.key)}${i(n.value)}` : `w:${n.indexed ? "index" : "key"}`;
|
|
3
|
+
}
|
|
4
|
+
function r(n) {
|
|
5
|
+
return `:${n.length}:${n}`;
|
|
6
|
+
}
|
|
7
|
+
function i(n) {
|
|
8
|
+
return n === null ? ":null" : typeof n == "string" ? `:string${r(n)}` : typeof n == "boolean" ? n ? ":boolean:1" : ":boolean:0" : `:number:${Object.is(n, -0) ? "-0" : String(n)}`;
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
t as pathSegmentKey
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var p=Object.defineProperty;var l=(r,t,e)=>t in r?p(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var d=(r,t,e)=>l(r,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("../data-path.utils.cjs"),_=require("./PathEventHub.cjs");class b{constructor(t){d(this,"_eventHub",new _.PathEventHub("[Raph] Adapter batch and publication failed."));this._adapter=t}get(t,e){const a=i.parseDataPath(t,e);return this._adapter.get(a.canonical)}peek(t,e){return this.get(t,e)}has(t,e){var n,s;const a=i.parseDataPath(t,e);return((s=(n=this._adapter).has)==null?void 0:s.call(n,a.canonical))??u(this._adapter.root(),a.segments)}set(t,e,a){const n=i.parseDataPath(t,a),s=this._eventHub.hasWatchers?this._adapter.get(n.canonical):void 0;this._adapter.set(n.canonical,e),this._eventHub.record({kind:"set",path:n.canonical,previous:s,value:this._eventHub.hasWatchers?this._adapter.get(n.canonical):void 0})}merge(t,e,a){const n=i.parseDataPath(t,a),s=this._eventHub.hasWatchers?this._adapter.get(n.canonical):void 0,c=o(s)&&o(e)?f(s):s;this._adapter.merge(n.canonical,e),this._eventHub.record({kind:"merge",path:n.canonical,previous:c,value:this._eventHub.hasWatchers?this._adapter.get(n.canonical):void 0})}delete(t,e){var c,h;const a=i.parseDataPath(t,e);if(!(((h=(c=this._adapter).has)==null?void 0:h.call(c,a.canonical))??u(this._adapter.root(),a.segments)))return;const s=this._eventHub.hasWatchers?this._adapter.get(a.canonical):void 0;this._adapter.delete(a.canonical),this._eventHub.record({kind:"delete",path:a.canonical,previous:s,value:void 0})}batch(t){return this._eventHub.batch(t)}watch(t,e){return this._eventHub.watch(t,e)}}function u(r,t){let e=r;for(const a of t)if(a.kind==="key"){if(!v(e)||!Object.hasOwn(e,a.key))return!1;e=e[a.key]}else if(a.kind==="index"){if(!Array.isArray(e)||!Object.hasOwn(e,a.index))return!1;e=e[a.index]}else{if(!Array.isArray(e))return!1;const n=e.findIndex(s=>o(s)&&Object.hasOwn(s,a.key)&&Object.is(s[a.key],a.value));if(n===-1)return!1;e=e[n]}return!0}function f(r){const t=Object.create(Object.getPrototypeOf(r));for(const e of Object.keys(r))e==="__proto__"?Object.defineProperty(t,e,{configurable:!0,enumerable:!0,value:r[e],writable:!0}):t[e]=r[e];return t}function o(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function v(r){return Array.isArray(r)||o(r)}exports.AdapterPathStore=b;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
var p = Object.defineProperty;
|
|
2
|
+
var l = (r, t, e) => t in r ? p(r, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[t] = e;
|
|
3
|
+
var d = (r, t, e) => l(r, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
+
import { parseDataPath as i } from "../data-path.utils.js";
|
|
5
|
+
import { PathEventHub as _ } from "./PathEventHub.js";
|
|
6
|
+
class k {
|
|
7
|
+
/**
|
|
8
|
+
* Связывает внешний DataAdapter с path events и watchers Kernel.
|
|
9
|
+
*/
|
|
10
|
+
constructor(t) {
|
|
11
|
+
// Публикует изменения внешнего adapter через общий path event lifecycle.
|
|
12
|
+
d(this, "_eventHub", new _(
|
|
13
|
+
"[Raph] Adapter batch and publication failed."
|
|
14
|
+
));
|
|
15
|
+
this._adapter = t;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Возвращает значение по пути без создания отсутствующих данных.
|
|
19
|
+
*/
|
|
20
|
+
get(t, e) {
|
|
21
|
+
const a = i(t, e);
|
|
22
|
+
return this._adapter.get(a.canonical);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Читает значение по пути без регистрации реактивной зависимости.
|
|
26
|
+
*/
|
|
27
|
+
peek(t, e) {
|
|
28
|
+
return this.get(t, e);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Проверяет наличие значения по указанному пути.
|
|
32
|
+
*/
|
|
33
|
+
has(t, e) {
|
|
34
|
+
var n, s;
|
|
35
|
+
const a = i(t, e);
|
|
36
|
+
return ((s = (n = this._adapter).has) == null ? void 0 : s.call(n, a.canonical)) ?? u(this._adapter.root(), a.segments);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Записывает значение и публикует соответствующее изменение.
|
|
40
|
+
*/
|
|
41
|
+
set(t, e, a) {
|
|
42
|
+
const n = i(t, a), s = this._eventHub.hasWatchers ? this._adapter.get(n.canonical) : void 0;
|
|
43
|
+
this._adapter.set(n.canonical, e), this._eventHub.record({
|
|
44
|
+
kind: "set",
|
|
45
|
+
path: n.canonical,
|
|
46
|
+
previous: s,
|
|
47
|
+
value: this._eventHub.hasWatchers ? this._adapter.get(n.canonical) : void 0
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Объединяет значение по пути и публикует соответствующее изменение.
|
|
52
|
+
*/
|
|
53
|
+
merge(t, e, a) {
|
|
54
|
+
const n = i(t, a), s = this._eventHub.hasWatchers ? this._adapter.get(n.canonical) : void 0, c = o(s) && o(e) ? b(s) : s;
|
|
55
|
+
this._adapter.merge(n.canonical, e), this._eventHub.record({
|
|
56
|
+
kind: "merge",
|
|
57
|
+
path: n.canonical,
|
|
58
|
+
previous: c,
|
|
59
|
+
value: this._eventHub.hasWatchers ? this._adapter.get(n.canonical) : void 0
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Удаляет значение по пути и публикует изменение при наличии данных.
|
|
64
|
+
*/
|
|
65
|
+
delete(t, e) {
|
|
66
|
+
var c, h;
|
|
67
|
+
const a = i(t, e);
|
|
68
|
+
if (!(((h = (c = this._adapter).has) == null ? void 0 : h.call(c, a.canonical)) ?? u(this._adapter.root(), a.segments)))
|
|
69
|
+
return;
|
|
70
|
+
const s = this._eventHub.hasWatchers ? this._adapter.get(a.canonical) : void 0;
|
|
71
|
+
this._adapter.delete(a.canonical), this._eventHub.record({
|
|
72
|
+
kind: "delete",
|
|
73
|
+
path: a.canonical,
|
|
74
|
+
previous: s,
|
|
75
|
+
value: void 0
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Выполняет операцию в общей синхронной batch boundary.
|
|
80
|
+
*/
|
|
81
|
+
batch(t) {
|
|
82
|
+
return this._eventHub.batch(t);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Подписывает callback на подходящие изменения и возвращает disposer.
|
|
86
|
+
*/
|
|
87
|
+
watch(t, e) {
|
|
88
|
+
return this._eventHub.watch(t, e);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function u(r, t) {
|
|
92
|
+
let e = r;
|
|
93
|
+
for (const a of t)
|
|
94
|
+
if (a.kind === "key") {
|
|
95
|
+
if (!f(e) || !Object.hasOwn(e, a.key))
|
|
96
|
+
return !1;
|
|
97
|
+
e = e[a.key];
|
|
98
|
+
} else if (a.kind === "index") {
|
|
99
|
+
if (!Array.isArray(e) || !Object.hasOwn(e, a.index))
|
|
100
|
+
return !1;
|
|
101
|
+
e = e[a.index];
|
|
102
|
+
} else {
|
|
103
|
+
if (!Array.isArray(e))
|
|
104
|
+
return !1;
|
|
105
|
+
const n = e.findIndex(
|
|
106
|
+
(s) => o(s) && Object.hasOwn(s, a.key) && Object.is(s[a.key], a.value)
|
|
107
|
+
);
|
|
108
|
+
if (n === -1)
|
|
109
|
+
return !1;
|
|
110
|
+
e = e[n];
|
|
111
|
+
}
|
|
112
|
+
return !0;
|
|
113
|
+
}
|
|
114
|
+
function b(r) {
|
|
115
|
+
const t = Object.create(Object.getPrototypeOf(r));
|
|
116
|
+
for (const e of Object.keys(r))
|
|
117
|
+
e === "__proto__" ? Object.defineProperty(t, e, {
|
|
118
|
+
configurable: !0,
|
|
119
|
+
enumerable: !0,
|
|
120
|
+
value: r[e],
|
|
121
|
+
writable: !0
|
|
122
|
+
}) : t[e] = r[e];
|
|
123
|
+
return t;
|
|
124
|
+
}
|
|
125
|
+
function o(r) {
|
|
126
|
+
return typeof r == "object" && r !== null && !Array.isArray(r);
|
|
127
|
+
}
|
|
128
|
+
function f(r) {
|
|
129
|
+
return Array.isArray(r) || o(r);
|
|
130
|
+
}
|
|
131
|
+
export {
|
|
132
|
+
k as AdapterPathStore
|
|
133
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var j=Object.defineProperty;var S=(o,e,t)=>e in o?j(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var y=(o,e,t)=>S(o,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("../data-path.utils.cjs"),C=require("./createDataDraft.cjs");class g{constructor(e=p(),t={}){y(this,"_root");y(this,"_options");y(this,"_indexes");this._root=x(e),this._options={arrayDelete:t.arrayDelete??"unset",autoCreate:t.autoCreate??!0,indexEnabled:t.indexEnabled??!0,indexStrategy:t.indexStrategy??"eager-all-keys"}}root(){return this._root}fork(){const e=new g({},this._options);return e._root=C.createDataDraft(this._root,t=>{var r;return(r=e._indexes)==null?void 0:r.delete(t)}).root,e}replaceRoot(e){this._root=x(e),this._indexes=void 0}options(e){e.arrayDelete!==void 0&&(this._options.arrayDelete=e.arrayDelete),e.autoCreate!==void 0&&(this._options.autoCreate=e.autoCreate),e.indexEnabled!==void 0&&(this._options.indexEnabled=e.indexEnabled),e.indexStrategy!==void 0&&(this._options.indexStrategy=e.indexStrategy),this._indexes=void 0}get(e,t){return this._read(h.parseDataPath(e,t)).value}has(e,t){return this._read(h.parseDataPath(e,t)).exists}set(e,t,r){const i=h.parseDataPath(e,r);if(i.segments.length===0){this.replaceRoot(x(t));return}let s=this._root,n;for(let a=0;a<i.segments.length-1;a++){const d=i.segments[a],c=i.segments[a+1],l=this._readOrCreateChild(s,d,c,i.canonical);s=l.value,n=l.indexedParent}this._writeSegment(s,i.segments[i.segments.length-1],t,i.canonical,n)}merge(e,t,r){const i=this.get(e,r);if(f(i)&&f(t)){for(const s of Object.keys(t))b(i,s,t[s]);this._indexes=void 0;return}this.set(e,t,r)}delete(e,t){const r=h.parseDataPath(e,t);if(r.segments.length===0){this._root=p(),this._indexes=void 0;return}let i=this._root;for(let n=0;n<r.segments.length-1;n++){if(!u(i))return;i=this._readSegment(i,r.segments[n])}if(!u(i))return;const s=r.segments[r.segments.length-1];if(s.kind==="key")delete i[s.key];else if(s.kind==="index"){if(!Array.isArray(i))return;this._options.arrayDelete==="splice"?i.splice(s.index,1):delete i[s.index]}else{if(!Array.isArray(i))return;const n=this._findSelector(i,s.key,s.value);if(n===-1)return;this._options.arrayDelete==="splice"?i.splice(n,1):delete i[n]}this._indexes=void 0}indexOf(e,t){const r=h.parseDataPath(e,t);let i=this._root;for(let s=0;s<r.segments.length;s++){const n=r.segments[s],a=s===r.segments.length-1;if(n.kind==="key"){if(!u(i)||!Object.hasOwn(i,n.key))return-1;i=i[n.key];continue}if(!Array.isArray(i))return-1;if(n.kind==="index"){if(!Object.hasOwn(i,n.index))return-1;if(a)return n.index;i=i[n.index];continue}const d=this._findSelector(i,n.key,n.value);if(d===-1)return-1;if(a)return d;i=i[d]}return-1}_read(e){let t=this._root;for(const r of e.segments)if(r.kind==="key"){if(!u(t)||!Object.hasOwn(t,r.key))return{exists:!1,value:void 0};t=t[r.key]}else if(r.kind==="index"){if(!Array.isArray(t)||!Object.hasOwn(t,r.index))return{exists:!1,value:void 0};t=t[r.index]}else{if(!Array.isArray(t))return{exists:!1,value:void 0};const i=this._findSelector(t,r.key,r.value);if(i===-1)return{exists:!1,value:void 0};t=t[i]}return{exists:!0,value:t}}_readSegment(e,t){if(t.kind==="key")return Object.hasOwn(e,t.key)?e[t.key]:void 0;if(!Array.isArray(e))return;if(t.kind==="index")return e[t.index];const r=this._findSelector(e,t.key,t.value);return r===-1?void 0:e[r]}_readOrCreateChild(e,t,r,i){if(t.kind==="key"){let n=e[t.key];if(!Object.hasOwn(e,t.key)||n===void 0){if(!this._options.autoCreate)throw _(i);n=v(r),b(e,t.key,n)}return{value:k(n,i)}}if(!Array.isArray(e))throw w(i);if(t.kind==="index"){let n=e[t.index];if(!Object.hasOwn(e,t.index)||n===void 0){if(!this._options.autoCreate)throw _(i);n=v(r),e[t.index]=n}return{value:k(n,i),indexedParent:{array:e,index:t.index}}}let s=this._findSelector(e,t.key,t.value);if(s===-1){if(!this._options.autoCreate)throw _(i);const n=Object.create(null);n[t.key]=t.value,e.push(n),s=e.length-1,this._invalidateArray(e)}return{value:k(e[s],i),indexedParent:{array:e,index:s}}}_writeSegment(e,t,r,i,s){if(t.kind==="key"){b(e,t.key,r),s!==void 0&&s.array[s.index]===e&&this._invalidateIndexKey(s.array,t.key);return}if(!Array.isArray(e))throw w(i);if(t.kind==="index"){e[t.index]=r,this._invalidateArray(e);return}if(!f(r))throw new TypeError(`[Raph] New selector target at "${i}" must be an object.`);if(Object.hasOwn(r,t.key)&&!Object.is(r[t.key],t.value))throw new TypeError(`[Raph] Selector target at "${i}" has a conflicting key.`);const n=this._findSelector(e,t.key,t.value);if(n===-1&&!this._options.autoCreate)throw _(i);const a=Object.hasOwn(r,t.key)?r:{...r,[t.key]:t.value};n===-1?e.push(a):e[n]=a,this._invalidateArray(e)}_invalidateArray(e){var t;(t=this._indexes)==null||t.delete(e)}_invalidateIndexKey(e,t){var i;const r=(i=this._indexes)==null?void 0:i.get(e);r!==void 0&&(r.delete(t),r.size===0&&this._indexes.delete(e))}_findSelector(e,t,r){var d;if(!this._options.indexEnabled)return O(e,t,r);const i=(d=this._indexes)==null?void 0:d.get(e);let s=i==null?void 0:i.get(t);s===void 0&&(s=this._createIndex(e,t));const n=s.get(r);if(n!==void 0&&f(e[n])&&Object.is(e[n][t],r))return n;const a=O(e,t,r);return a===-1?s.delete(r):s.set(r,a),a}_createIndex(e,t){const r=this._indexes??(this._indexes=new WeakMap);let i=r.get(e);if(i===void 0&&(i=new Map,r.set(e,i)),this._options.indexStrategy==="eager-all-keys")for(let n=0;n<e.length;n++){const a=e[n];if(f(a))for(const d of Object.keys(a)){const c=a[d];if(!A(c))continue;let l=i.get(d);l===void 0&&(l=new Map,i.set(d,l)),l.has(c)||l.set(c,n)}}let s=i.get(t);if(s!==void 0)return s;s=new Map;for(let n=0;n<e.length;n++){const a=e[n];if(!f(a))continue;const d=a[t];A(d)&&!s.has(d)&&s.set(d,n)}return i.set(t,s),s}}function O(o,e,t){for(let r=0;r<o.length;r++){const i=o[r];if(f(i)&&Object.hasOwn(i,e)&&Object.is(i[e],t))return r}return-1}function v(o){return o.kind==="index"||o.kind==="selector"?[]:p()}function p(){return Object.create(null)}function x(o){if(u(o))return o;throw new TypeError("[Raph] Root value must be an object or array.")}function k(o,e){if(u(o))return o;throw w(e)}function f(o){return typeof o=="object"&&o!==null&&!Array.isArray(o)}function u(o){return Array.isArray(o)||f(o)}function A(o){return o===null||typeof o=="string"||typeof o=="number"||typeof o=="boolean"}function b(o,e,t){if(e==="__proto__"){Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:t,writable:!0});return}o[e]=t}function w(o){return new TypeError(`[Raph] Cannot traverse non-container data at "${o}".`)}function _(o){return new Error(`[Raph] Cannot create missing container at "${o}" (autoCreate=false).`)}exports.DefaultDataAdapter=g;
|