@welshman/store 0.14.0-pre3 → 0.14.0-pre5
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/dist/store/src/{repository.d.ts → derive.d.ts} +33 -41
- package/dist/store/src/derive.d.ts.map +1 -0
- package/dist/store/src/derive.js +706 -0
- package/dist/store/src/derive.js.map +1 -0
- package/dist/store/src/index.d.ts +9 -1
- package/dist/store/src/index.d.ts.map +1 -1
- package/dist/store/src/index.js +9 -1
- package/dist/store/src/index.js.map +1 -1
- package/dist/store/src/misc.d.ts +2 -7
- package/dist/store/src/misc.d.ts.map +1 -1
- package/dist/store/src/misc.js +1 -1
- package/dist/store/src/misc.js.map +1 -1
- package/dist/{net/src/repository.d.ts → store/src/repository/adapters/memory.d.ts} +22 -30
- package/dist/store/src/repository/adapters/memory.d.ts.map +1 -0
- package/dist/{net/src/repository.js → store/src/repository/adapters/memory.js} +96 -106
- package/dist/store/src/repository/adapters/memory.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/engine.d.ts +65 -0
- package/dist/store/src/repository/adapters/sqlite/engine.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/engine.js +420 -0
- package/dist/store/src/repository/adapters/sqlite/engine.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/leader.d.ts +8 -0
- package/dist/store/src/repository/adapters/sqlite/leader.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/leader.js +222 -0
- package/dist/store/src/repository/adapters/sqlite/leader.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.d.ts +52 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.js +52 -0
- package/dist/store/src/repository/adapters/sqlite/protocol.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/repository.d.ts +54 -0
- package/dist/store/src/repository/adapters/sqlite/repository.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/repository.js +238 -0
- package/dist/store/src/repository/adapters/sqlite/repository.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/serve.d.ts +4 -0
- package/dist/store/src/repository/adapters/sqlite/serve.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/serve.js +39 -0
- package/dist/store/src/repository/adapters/sqlite/serve.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.d.ts +7 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.js +61 -0
- package/dist/store/src/repository/adapters/sqlite/wasm.js.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/worker.d.ts +2 -0
- package/dist/store/src/repository/adapters/sqlite/worker.d.ts.map +1 -0
- package/dist/store/src/repository/adapters/sqlite/worker.js +4 -0
- package/dist/store/src/repository/adapters/sqlite/worker.js.map +1 -0
- package/dist/store/src/repository/core.d.ts +68 -0
- package/dist/store/src/repository/core.d.ts.map +1 -0
- package/dist/store/src/repository/core.js +123 -0
- package/dist/store/src/repository/core.js.map +1 -0
- package/dist/store/src/svelte.d.ts +22 -0
- package/dist/store/src/svelte.d.ts.map +1 -0
- package/dist/store/src/svelte.js +100 -0
- package/dist/store/src/svelte.js.map +1 -0
- package/dist/store/src/synced.d.ts +1 -1
- package/dist/store/src/synced.d.ts.map +1 -1
- package/dist/store/src/synced.js +1 -1
- package/dist/store/src/synced.js.map +1 -1
- package/dist/store/src/throttle.d.ts +1 -1
- package/dist/store/src/throttle.d.ts.map +1 -1
- package/dist/{net → store}/src/tracker.d.ts +2 -0
- package/dist/store/src/tracker.d.ts.map +1 -0
- package/dist/{net → store}/src/tracker.js +8 -4
- package/dist/store/src/tracker.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/util/src/Command.d.ts +1 -1
- package/dist/util/src/Command.d.ts.map +1 -1
- package/dist/util/src/Command.js +12 -5
- package/dist/util/src/Command.js.map +1 -1
- package/dist/util/src/Events.d.ts +3 -2
- package/dist/util/src/Events.d.ts.map +1 -1
- package/dist/util/src/Events.js.map +1 -1
- package/dist/util/src/Kinds.d.ts +1 -0
- package/dist/util/src/Kinds.d.ts.map +1 -1
- package/dist/util/src/Kinds.js +1 -0
- package/dist/util/src/Kinds.js.map +1 -1
- package/dist/util/src/RelaySelection.d.ts +5 -0
- package/dist/util/src/RelaySelection.d.ts.map +1 -1
- package/dist/util/src/RelaySelection.js.map +1 -1
- package/dist/util/src/Tags.d.ts +5 -0
- package/dist/util/src/Tags.d.ts.map +1 -1
- package/dist/util/src/Tags.js +3 -0
- package/dist/util/src/Tags.js.map +1 -1
- package/dist/util/src/index.d.ts +1 -0
- package/dist/util/src/index.d.ts.map +1 -1
- package/dist/util/src/index.js +1 -0
- package/dist/util/src/index.js.map +1 -1
- package/package.json +31 -12
- package/dist/net/src/adapter.d.ts +0 -47
- package/dist/net/src/adapter.d.ts.map +0 -1
- package/dist/net/src/adapter.js +0 -139
- package/dist/net/src/adapter.js.map +0 -1
- package/dist/net/src/auth.d.ts +0 -40
- package/dist/net/src/auth.d.ts.map +0 -1
- package/dist/net/src/auth.js +0 -131
- package/dist/net/src/auth.js.map +0 -1
- package/dist/net/src/context.d.ts +0 -10
- package/dist/net/src/context.d.ts.map +0 -1
- package/dist/net/src/context.js +0 -2
- package/dist/net/src/context.js.map +0 -1
- package/dist/net/src/count.d.ts +0 -30
- package/dist/net/src/count.d.ts.map +0 -1
- package/dist/net/src/count.js +0 -97
- package/dist/net/src/count.js.map +0 -1
- package/dist/net/src/diff.d.ts +0 -57
- package/dist/net/src/diff.d.ts.map +0 -1
- package/dist/net/src/diff.js +0 -169
- package/dist/net/src/diff.js.map +0 -1
- package/dist/net/src/index.d.ts +0 -17
- package/dist/net/src/index.d.ts.map +0 -1
- package/dist/net/src/index.js +0 -17
- package/dist/net/src/index.js.map +0 -1
- package/dist/net/src/message.d.ts +0 -96
- package/dist/net/src/message.d.ts.map +0 -1
- package/dist/net/src/message.js +0 -76
- package/dist/net/src/message.js.map +0 -1
- package/dist/net/src/multiplex.d.ts +0 -13
- package/dist/net/src/multiplex.d.ts.map +0 -1
- package/dist/net/src/multiplex.js +0 -210
- package/dist/net/src/multiplex.js.map +0 -1
- package/dist/net/src/negentropy.d.ts +0 -48
- package/dist/net/src/negentropy.d.ts.map +0 -1
- package/dist/net/src/negentropy.js +0 -528
- package/dist/net/src/negentropy.js.map +0 -1
- package/dist/net/src/policy.d.ts +0 -63
- package/dist/net/src/policy.d.ts.map +0 -1
- package/dist/net/src/policy.js +0 -388
- package/dist/net/src/policy.js.map +0 -1
- package/dist/net/src/pool.d.ts +0 -15
- package/dist/net/src/pool.d.ts.map +0 -1
- package/dist/net/src/pool.js +0 -51
- package/dist/net/src/pool.js.map +0 -1
- package/dist/net/src/publish.d.ts +0 -47
- package/dist/net/src/publish.d.ts.map +0 -1
- package/dist/net/src/publish.js +0 -112
- package/dist/net/src/publish.js.map +0 -1
- package/dist/net/src/repository.d.ts.map +0 -1
- package/dist/net/src/repository.js.map +0 -1
- package/dist/net/src/request.d.ts +0 -37
- package/dist/net/src/request.d.ts.map +0 -1
- package/dist/net/src/request.js +0 -206
- package/dist/net/src/request.js.map +0 -1
- package/dist/net/src/socket.d.ts +0 -52
- package/dist/net/src/socket.d.ts.map +0 -1
- package/dist/net/src/socket.js +0 -134
- package/dist/net/src/socket.js.map +0 -1
- package/dist/net/src/tracker.d.ts.map +0 -1
- package/dist/net/src/tracker.js.map +0 -1
- package/dist/net/src/util.d.ts +0 -18
- package/dist/net/src/util.d.ts.map +0 -1
- package/dist/net/src/util.js +0 -25
- package/dist/net/src/util.js.map +0 -1
- package/dist/net/src/wrapManager.d.ts +0 -34
- package/dist/net/src/wrapManager.d.ts.map +0 -1
- package/dist/net/src/wrapManager.js +0 -79
- package/dist/net/src/wrapManager.js.map +0 -1
- package/dist/store/src/repository.d.ts.map +0 -1
- package/dist/store/src/repository.js +0 -580
- package/dist/store/src/repository.js.map +0 -1
|
@@ -1,580 +0,0 @@
|
|
|
1
|
-
import { derived, readable } from "svelte/store";
|
|
2
|
-
import { on, gt, now, noop, mapPop, LRUCache, call, sortBy, first, } from "@welshman/lib";
|
|
3
|
-
import { matchFilters, getIdFilters, sortEventsAsc, sortEventsDesc, getIdOrAddress, } from "@welshman/util";
|
|
4
|
-
import { deriveDeduplicated, projection, projectFrom } from "./misc.js";
|
|
5
|
-
export const getEventsById = ({ filters, repository, includeDeleted }) => {
|
|
6
|
-
const eventsById = new Map();
|
|
7
|
-
for (const event of repository.query(filters, { includeDeleted })) {
|
|
8
|
-
eventsById.set(event.id, event);
|
|
9
|
-
}
|
|
10
|
-
return eventsById;
|
|
11
|
-
};
|
|
12
|
-
export const deriveEventsById = (options) => {
|
|
13
|
-
const { filters, repository, includeDeleted } = options;
|
|
14
|
-
const store = readable(new Map(), set => {
|
|
15
|
-
const eventsById = getEventsById(options);
|
|
16
|
-
set(eventsById);
|
|
17
|
-
return on(repository, "update", ({ added, removed }) => {
|
|
18
|
-
let dirty = false;
|
|
19
|
-
for (const event of added) {
|
|
20
|
-
if (matchFilters(filters, event)) {
|
|
21
|
-
dirty = true;
|
|
22
|
-
eventsById.set(event.id, event);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
if (!includeDeleted) {
|
|
26
|
-
for (const id of removed) {
|
|
27
|
-
if (mapPop(id, eventsById)) {
|
|
28
|
-
dirty = true;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (dirty) {
|
|
33
|
-
set(eventsById);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
return projection(store, () => getEventsById(options));
|
|
38
|
-
};
|
|
39
|
-
export const deriveArray = (itemsById) => projectFrom(itemsById, $itemsById => Array.from($itemsById.values()));
|
|
40
|
-
export const deriveEventsAsc = (eventsById) => projectFrom(eventsById, $eventsById => sortEventsAsc($eventsById.values()));
|
|
41
|
-
export const deriveEventsDesc = (eventsById) => projectFrom(eventsById, $eventsById => sortEventsDesc($eventsById.values()));
|
|
42
|
-
export const deriveEvents = (options) => deriveArray(deriveEventsById(options));
|
|
43
|
-
export const makeDeriveEvent = ({ repository, includeDeleted = false, onDerive }) => {
|
|
44
|
-
return (idOrAddress, ...args) => {
|
|
45
|
-
const filters = getIdFilters([idOrAddress]);
|
|
46
|
-
onDerive?.(filters, ...args);
|
|
47
|
-
const store = readable(undefined, set => {
|
|
48
|
-
let event = first(repository.query(filters, { includeDeleted }));
|
|
49
|
-
set(event);
|
|
50
|
-
return on(repository, "update", ({ added, removed }) => {
|
|
51
|
-
if (!includeDeleted) {
|
|
52
|
-
for (const id of removed) {
|
|
53
|
-
if (event?.id === id) {
|
|
54
|
-
set(undefined);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
for (const newEvent of added) {
|
|
59
|
-
if (matchFilters(filters, newEvent)) {
|
|
60
|
-
event = newEvent;
|
|
61
|
-
set(event);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
return projection(store, () => first(repository.query(filters, { includeDeleted })));
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
export const getEventsByIdByUrl = ({ filters, tracker, repository, includeDeleted, }) => {
|
|
70
|
-
const eventsByIdByUrl = new Map();
|
|
71
|
-
for (const event of repository.query(filters, { includeDeleted })) {
|
|
72
|
-
for (const url of tracker.getRelays(event.id)) {
|
|
73
|
-
let eventsById = eventsByIdByUrl.get(url);
|
|
74
|
-
if (!eventsById) {
|
|
75
|
-
eventsById = new Map();
|
|
76
|
-
eventsByIdByUrl.set(url, eventsById);
|
|
77
|
-
}
|
|
78
|
-
eventsById.set(event.id, event);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return eventsByIdByUrl;
|
|
82
|
-
};
|
|
83
|
-
export const deriveEventsByIdByUrl = (options) => {
|
|
84
|
-
const { filters, tracker, repository, includeDeleted } = options;
|
|
85
|
-
const store = readable(new Map(), set => {
|
|
86
|
-
const eventsByIdByUrl = getEventsByIdByUrl(options);
|
|
87
|
-
const addEvent = (url, event) => {
|
|
88
|
-
if (!matchFilters(filters, event))
|
|
89
|
-
return false;
|
|
90
|
-
const eventsById = eventsByIdByUrl.get(url);
|
|
91
|
-
// The repository swaps a changed copy of a held event in under the same id.
|
|
92
|
-
if (eventsById?.get(event.id) === event)
|
|
93
|
-
return false;
|
|
94
|
-
// Create a new map so we can detect which key changed
|
|
95
|
-
const newEventsById = new Map(eventsById);
|
|
96
|
-
newEventsById.set(event.id, event);
|
|
97
|
-
eventsByIdByUrl.set(url, newEventsById);
|
|
98
|
-
return true;
|
|
99
|
-
};
|
|
100
|
-
const removeEvent = (url, id) => {
|
|
101
|
-
const eventsById = eventsByIdByUrl.get(url);
|
|
102
|
-
if (eventsById?.has(id)) {
|
|
103
|
-
eventsById.delete(id);
|
|
104
|
-
if (eventsById.size === 0) {
|
|
105
|
-
eventsByIdByUrl.delete(url);
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
// Create a new map so we can detect which key changed
|
|
109
|
-
eventsByIdByUrl.set(url, new Map(eventsById));
|
|
110
|
-
}
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
return false;
|
|
114
|
-
};
|
|
115
|
-
set(eventsByIdByUrl);
|
|
116
|
-
const unsubscribers = [
|
|
117
|
-
on(repository, "update", ({ added, removed }) => {
|
|
118
|
-
let dirty = false;
|
|
119
|
-
for (const event of added) {
|
|
120
|
-
for (const url of tracker.getRelays(event.id)) {
|
|
121
|
-
dirty = addEvent(url, event) || dirty;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (!includeDeleted) {
|
|
125
|
-
for (const id of removed) {
|
|
126
|
-
for (const url of tracker.getRelays(id)) {
|
|
127
|
-
dirty = removeEvent(url, id) || dirty;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
if (dirty) {
|
|
132
|
-
set(eventsByIdByUrl);
|
|
133
|
-
}
|
|
134
|
-
}),
|
|
135
|
-
on(tracker, "add", (id, url) => {
|
|
136
|
-
const event = repository.getEvent(id);
|
|
137
|
-
if (event && addEvent(url, event)) {
|
|
138
|
-
set(eventsByIdByUrl);
|
|
139
|
-
}
|
|
140
|
-
}),
|
|
141
|
-
on(tracker, "remove", (id, url) => {
|
|
142
|
-
if (removeEvent(url, id)) {
|
|
143
|
-
set(eventsByIdByUrl);
|
|
144
|
-
}
|
|
145
|
-
}),
|
|
146
|
-
on(tracker, "load", () => {
|
|
147
|
-
eventsByIdByUrl.clear();
|
|
148
|
-
for (const event of repository.query(filters, { includeDeleted })) {
|
|
149
|
-
for (const url of tracker.getRelays(event.id)) {
|
|
150
|
-
addEvent(url, event);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
set(eventsByIdByUrl);
|
|
154
|
-
}),
|
|
155
|
-
on(tracker, "clear", () => {
|
|
156
|
-
eventsByIdByUrl.clear();
|
|
157
|
-
set(eventsByIdByUrl);
|
|
158
|
-
}),
|
|
159
|
-
];
|
|
160
|
-
return () => unsubscribers.forEach(call);
|
|
161
|
-
});
|
|
162
|
-
return projection(store, () => getEventsByIdByUrl(options));
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* The events one relay has been seen to hold, narrowed by the filters. The filters choose the
|
|
166
|
-
* index and the tracker answers provenance per event, so the cost tracks what the caller asked
|
|
167
|
-
* for, and a limit counts only events on the relay.
|
|
168
|
-
*/
|
|
169
|
-
export const getEventsByIdForUrl = ({ url, filters, tracker, repository, includeDeleted, }) => {
|
|
170
|
-
const eventsById = new Map();
|
|
171
|
-
const where = (event) => tracker.hasRelay(event.id, url);
|
|
172
|
-
for (const event of repository.query(filters, { includeDeleted, where })) {
|
|
173
|
-
eventsById.set(event.id, event);
|
|
174
|
-
}
|
|
175
|
-
return eventsById;
|
|
176
|
-
};
|
|
177
|
-
export const deriveEventsByIdForUrl = (options) => {
|
|
178
|
-
const { url, filters, tracker, repository, includeDeleted } = options;
|
|
179
|
-
const belongs = (event) => tracker.hasRelay(event.id, url) && matchFilters(filters, event);
|
|
180
|
-
let eventsById = getEventsByIdForUrl(options);
|
|
181
|
-
const store = readable(eventsById, set => {
|
|
182
|
-
const reset = () => {
|
|
183
|
-
eventsById = getEventsByIdForUrl(options);
|
|
184
|
-
set(eventsById);
|
|
185
|
-
};
|
|
186
|
-
reset();
|
|
187
|
-
const unsubscribers = [
|
|
188
|
-
on(repository, "update", ({ added, removed }) => {
|
|
189
|
-
let dirty = false;
|
|
190
|
-
for (const event of added) {
|
|
191
|
-
if (belongs(event)) {
|
|
192
|
-
eventsById.set(event.id, event);
|
|
193
|
-
dirty = true;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
if (!includeDeleted) {
|
|
197
|
-
for (const id of removed) {
|
|
198
|
-
if (eventsById.has(id)) {
|
|
199
|
-
eventsById.delete(id);
|
|
200
|
-
dirty = true;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
if (dirty) {
|
|
205
|
-
set(eventsById);
|
|
206
|
-
}
|
|
207
|
-
}),
|
|
208
|
-
on(tracker, "add", (id, trackedUrl) => {
|
|
209
|
-
if (trackedUrl === url) {
|
|
210
|
-
const event = repository.getEvent(id);
|
|
211
|
-
if (event && belongs(event)) {
|
|
212
|
-
eventsById.set(id, event);
|
|
213
|
-
set(eventsById);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}),
|
|
217
|
-
on(tracker, "remove", (id, trackedUrl) => {
|
|
218
|
-
if (trackedUrl === url && eventsById.has(id)) {
|
|
219
|
-
eventsById.delete(id);
|
|
220
|
-
set(eventsById);
|
|
221
|
-
}
|
|
222
|
-
}),
|
|
223
|
-
on(tracker, "load", reset),
|
|
224
|
-
on(tracker, "clear", reset),
|
|
225
|
-
];
|
|
226
|
-
return () => unsubscribers.forEach(call);
|
|
227
|
-
});
|
|
228
|
-
return projection(store, () => getEventsByIdForUrl(options));
|
|
229
|
-
};
|
|
230
|
-
const asCollection = (store, pending) => {
|
|
231
|
-
const self = projection(store);
|
|
232
|
-
// Subscribing queues the parses, so a key the index lacks is read, drained, and read again
|
|
233
|
-
const read = (key) => self.get().get(key) ?? Promise.all(pending.values()).then(() => self.get().get(key));
|
|
234
|
-
return { ...self, read };
|
|
235
|
-
};
|
|
236
|
-
const onParseError = (error) => console.warn("Failed to build an item from an event", error);
|
|
237
|
-
/**
|
|
238
|
-
* Build `event`'s item and pass it to `commit`, synchronously when the parse needs no IO.
|
|
239
|
-
* An async parse waits in `pending`, and deleting its entry there cancels the commit.
|
|
240
|
-
*/
|
|
241
|
-
const buildItem = (event, eventToItem, pending, commit) => {
|
|
242
|
-
let changed = false;
|
|
243
|
-
try {
|
|
244
|
-
const itemOrPromise = eventToItem(event);
|
|
245
|
-
if (itemOrPromise instanceof Promise) {
|
|
246
|
-
const isPending = () => pending.get(event.id) === parse;
|
|
247
|
-
const parse = itemOrPromise
|
|
248
|
-
.then(item => {
|
|
249
|
-
if (isPending())
|
|
250
|
-
commit(item);
|
|
251
|
-
})
|
|
252
|
-
.catch(onParseError)
|
|
253
|
-
.finally(() => {
|
|
254
|
-
if (isPending())
|
|
255
|
-
pending.delete(event.id);
|
|
256
|
-
});
|
|
257
|
-
pending.set(event.id, parse);
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
changed = Boolean(commit(itemOrPromise));
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
catch (error) {
|
|
264
|
-
onParseError(error);
|
|
265
|
-
}
|
|
266
|
-
return changed;
|
|
267
|
-
};
|
|
268
|
-
export const deriveItemsByKey = ({ getKey, filters, repository, eventToItem, includeDeleted, }) => {
|
|
269
|
-
const pending = new Map();
|
|
270
|
-
const itemsByKey = new Map();
|
|
271
|
-
// The event owning each key, so removing a superseded event leaves its successor's entry
|
|
272
|
-
const ownerByKey = new Map();
|
|
273
|
-
// The key each event contributed, for teardown.
|
|
274
|
-
const keyById = new Map();
|
|
275
|
-
const store = readable(itemsByKey, set => {
|
|
276
|
-
const commit = (id, item) => {
|
|
277
|
-
if (item) {
|
|
278
|
-
const key = getKey(item);
|
|
279
|
-
itemsByKey.set(key, item);
|
|
280
|
-
ownerByKey.set(key, id);
|
|
281
|
-
keyById.set(id, key);
|
|
282
|
-
set(itemsByKey);
|
|
283
|
-
}
|
|
284
|
-
};
|
|
285
|
-
const addEvent = (event) => {
|
|
286
|
-
if (!pending.has(event.id) && !keyById.has(event.id)) {
|
|
287
|
-
buildItem(event, eventToItem, pending, item => commit(event.id, item));
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
|
-
const removeEvent = (id) => {
|
|
291
|
-
const key = mapPop(id, keyById);
|
|
292
|
-
const owns = key !== undefined && ownerByKey.get(key) === id;
|
|
293
|
-
pending.delete(id);
|
|
294
|
-
if (owns) {
|
|
295
|
-
ownerByKey.delete(key);
|
|
296
|
-
itemsByKey.delete(key);
|
|
297
|
-
}
|
|
298
|
-
return owns;
|
|
299
|
-
};
|
|
300
|
-
// The index outlives a subscription, so a subscribe drops what left the repository meanwhile
|
|
301
|
-
const catchUp = () => {
|
|
302
|
-
const events = repository.query(filters, { includeDeleted });
|
|
303
|
-
const ids = new Set(events.map(event => event.id));
|
|
304
|
-
let dirty = false;
|
|
305
|
-
for (const id of Array.from(keyById.keys())) {
|
|
306
|
-
if (!ids.has(id)) {
|
|
307
|
-
dirty = removeEvent(id) || dirty;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
if (dirty)
|
|
311
|
-
set(itemsByKey);
|
|
312
|
-
for (const event of events) {
|
|
313
|
-
addEvent(event);
|
|
314
|
-
}
|
|
315
|
-
};
|
|
316
|
-
catchUp();
|
|
317
|
-
return on(repository, "update", ({ added, removed }) => {
|
|
318
|
-
for (const event of added) {
|
|
319
|
-
if (matchFilters(filters, event)) {
|
|
320
|
-
addEvent(event);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
if (!includeDeleted) {
|
|
324
|
-
let dirty = false;
|
|
325
|
-
for (const id of removed) {
|
|
326
|
-
dirty = removeEvent(id) || dirty;
|
|
327
|
-
}
|
|
328
|
-
if (dirty) {
|
|
329
|
-
set(itemsByKey);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
});
|
|
333
|
-
});
|
|
334
|
-
return asCollection(store, pending);
|
|
335
|
-
};
|
|
336
|
-
/**
|
|
337
|
-
* Like `deriveItemsByKey`, but relay-scoped: an event is keyed once per relay
|
|
338
|
-
* it has been seen on (via the tracker), using `getKey(item, url)`. This is the
|
|
339
|
-
* substrate for relay-dependent collections — NIP-29 rooms, relay membership,
|
|
340
|
-
* relay roles — where the same addressable coordinate can exist independently
|
|
341
|
-
* on multiple relays.
|
|
342
|
-
*/
|
|
343
|
-
export const deriveItemsByKeyByUrl = ({ getKey, filters, repository, tracker, eventToItem, includeDeleted, revalidateOn, }) => {
|
|
344
|
-
const pending = new Map();
|
|
345
|
-
const itemsByKey = new Map();
|
|
346
|
-
// Which event currently owns each key, as in `deriveItemsByKey`.
|
|
347
|
-
const ownerByKey = new Map();
|
|
348
|
-
// The key each event contributed on each relay url, for teardown.
|
|
349
|
-
const keysById = new Map();
|
|
350
|
-
// What each event parsed to, so a rebuild re-keys it without parsing it again.
|
|
351
|
-
const itemsById = new Map();
|
|
352
|
-
const store = readable(itemsByKey, set => {
|
|
353
|
-
// Held while a catch-up keys its events, so a rebuild emits once rather than per event
|
|
354
|
-
let holding = false;
|
|
355
|
-
const setKey = (key, id, url, item) => {
|
|
356
|
-
itemsByKey.set(key, item);
|
|
357
|
-
ownerByKey.set(key, id);
|
|
358
|
-
let byUrl = keysById.get(id);
|
|
359
|
-
if (!byUrl) {
|
|
360
|
-
byUrl = new Map();
|
|
361
|
-
keysById.set(id, byUrl);
|
|
362
|
-
}
|
|
363
|
-
byUrl.set(url, key);
|
|
364
|
-
};
|
|
365
|
-
const dropKey = (key, id) => {
|
|
366
|
-
// Only remove if this id still owns the key (guards against a replaceable
|
|
367
|
-
// event having already taken it over).
|
|
368
|
-
if (ownerByKey.get(key) === id) {
|
|
369
|
-
itemsByKey.delete(key);
|
|
370
|
-
ownerByKey.delete(key);
|
|
371
|
-
return true;
|
|
372
|
-
}
|
|
373
|
-
return false;
|
|
374
|
-
};
|
|
375
|
-
// Keys the item on each tracked relay it lacks a key for, including relays seen mid-parse
|
|
376
|
-
const commit = (id, item) => {
|
|
377
|
-
let keyed = false;
|
|
378
|
-
if (item) {
|
|
379
|
-
itemsById.set(id, item);
|
|
380
|
-
for (const url of tracker.getRelays(id)) {
|
|
381
|
-
const key = keysById.get(id)?.has(url) ? undefined : getKey(item, url);
|
|
382
|
-
if (key !== undefined) {
|
|
383
|
-
setKey(key, id, url, item);
|
|
384
|
-
keyed = true;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
// Emit only when some url keyed the item
|
|
388
|
-
if (keyed && !holding)
|
|
389
|
-
set(itemsByKey);
|
|
390
|
-
}
|
|
391
|
-
return keyed;
|
|
392
|
-
};
|
|
393
|
-
const addEvent = (event) => {
|
|
394
|
-
const parsed = itemsById.get(event.id);
|
|
395
|
-
let keyed = false;
|
|
396
|
-
// A rebuild clears the keys and keeps the items, so re-keying needs no parse
|
|
397
|
-
if (parsed) {
|
|
398
|
-
keyed = commit(event.id, parsed);
|
|
399
|
-
}
|
|
400
|
-
else if (!pending.has(event.id)) {
|
|
401
|
-
keyed = buildItem(event, eventToItem, pending, item => commit(event.id, item));
|
|
402
|
-
}
|
|
403
|
-
return keyed;
|
|
404
|
-
};
|
|
405
|
-
const removeEvent = (id) => {
|
|
406
|
-
const byUrl = mapPop(id, keysById);
|
|
407
|
-
let dirty = false;
|
|
408
|
-
pending.delete(id);
|
|
409
|
-
itemsById.delete(id);
|
|
410
|
-
for (const key of byUrl?.values() ?? []) {
|
|
411
|
-
dirty = dropKey(key, id) || dirty;
|
|
412
|
-
}
|
|
413
|
-
return dirty;
|
|
414
|
-
};
|
|
415
|
-
const removeEventUrl = (id, url) => {
|
|
416
|
-
const byUrl = keysById.get(id);
|
|
417
|
-
const key = byUrl?.get(url);
|
|
418
|
-
if (!byUrl || key === undefined)
|
|
419
|
-
return false;
|
|
420
|
-
byUrl.delete(url);
|
|
421
|
-
if (byUrl.size === 0) {
|
|
422
|
-
keysById.delete(id);
|
|
423
|
-
}
|
|
424
|
-
return dropKey(key, id);
|
|
425
|
-
};
|
|
426
|
-
const catchUp = (cleared = false) => {
|
|
427
|
-
const events = repository.query(filters, { includeDeleted });
|
|
428
|
-
const ids = new Set(events.map(event => event.id));
|
|
429
|
-
let dirty = cleared;
|
|
430
|
-
for (const id of Array.from(keysById.keys())) {
|
|
431
|
-
if (!ids.has(id)) {
|
|
432
|
-
dirty = removeEvent(id) || dirty;
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
holding = true;
|
|
436
|
-
for (const event of events) {
|
|
437
|
-
dirty = addEvent(event) || dirty;
|
|
438
|
-
}
|
|
439
|
-
holding = false;
|
|
440
|
-
if (dirty)
|
|
441
|
-
set(itemsByKey);
|
|
442
|
-
};
|
|
443
|
-
const clear = () => {
|
|
444
|
-
const dirty = itemsByKey.size > 0;
|
|
445
|
-
itemsByKey.clear();
|
|
446
|
-
ownerByKey.clear();
|
|
447
|
-
keysById.clear();
|
|
448
|
-
return dirty;
|
|
449
|
-
};
|
|
450
|
-
const rebuild = () => catchUp(clear());
|
|
451
|
-
catchUp();
|
|
452
|
-
const unsubscribers = [
|
|
453
|
-
on(repository, "update", ({ added, removed }) => {
|
|
454
|
-
for (const event of added) {
|
|
455
|
-
if (matchFilters(filters, event)) {
|
|
456
|
-
addEvent(event);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
if (!includeDeleted) {
|
|
460
|
-
let dirty = false;
|
|
461
|
-
for (const id of removed) {
|
|
462
|
-
dirty = removeEvent(id) || dirty;
|
|
463
|
-
}
|
|
464
|
-
if (dirty)
|
|
465
|
-
set(itemsByKey);
|
|
466
|
-
}
|
|
467
|
-
}),
|
|
468
|
-
on(tracker, "add", (id, url) => {
|
|
469
|
-
const event = repository.getEvent(id);
|
|
470
|
-
if (event && matchFilters(filters, event)) {
|
|
471
|
-
addEvent(event);
|
|
472
|
-
}
|
|
473
|
-
}),
|
|
474
|
-
on(tracker, "remove", (id, url) => {
|
|
475
|
-
if (removeEventUrl(id, url)) {
|
|
476
|
-
set(itemsByKey);
|
|
477
|
-
}
|
|
478
|
-
}),
|
|
479
|
-
on(tracker, "load", rebuild),
|
|
480
|
-
on(tracker, "clear", () => {
|
|
481
|
-
if (clear())
|
|
482
|
-
set(itemsByKey);
|
|
483
|
-
}),
|
|
484
|
-
];
|
|
485
|
-
// Re-evaluate everything when external key state (e.g. relay self pubkeys)
|
|
486
|
-
// changes. The first emission fires synchronously on subscribe and is the
|
|
487
|
-
// initial state we already built, so skip it.
|
|
488
|
-
if (revalidateOn) {
|
|
489
|
-
let initialized = false;
|
|
490
|
-
unsubscribers.push(revalidateOn.subscribe(() => {
|
|
491
|
-
if (initialized) {
|
|
492
|
-
rebuild();
|
|
493
|
-
}
|
|
494
|
-
else {
|
|
495
|
-
initialized = true;
|
|
496
|
-
}
|
|
497
|
-
}));
|
|
498
|
-
}
|
|
499
|
-
return () => unsubscribers.forEach(call);
|
|
500
|
-
});
|
|
501
|
-
return asCollection(store, pending);
|
|
502
|
-
};
|
|
503
|
-
export const deriveItems = (itemsByKeyStore) => derived(itemsByKeyStore, itemsByKey => Array.from(itemsByKey.values()));
|
|
504
|
-
export const deriveItemsSorted = (sortFn, itemsStore) => derived(itemsStore, items => sortBy(sortFn, items));
|
|
505
|
-
export const makeDeriveItem = (itemsByKeyStore, onDerive) => {
|
|
506
|
-
return (key, ...args) => {
|
|
507
|
-
if (!key)
|
|
508
|
-
return readable(undefined);
|
|
509
|
-
// Nothing awaits this, so a failed load has nowhere to go
|
|
510
|
-
Promise.resolve(onDerive?.(key, ...args)).catch(noop);
|
|
511
|
-
return deriveDeduplicated(itemsByKeyStore, itemsByKey => itemsByKey.get(key));
|
|
512
|
-
};
|
|
513
|
-
};
|
|
514
|
-
export const makeForceLoadItem = (loadItem, getItem) => {
|
|
515
|
-
return async (key, ...args) => {
|
|
516
|
-
await loadItem(key, ...args);
|
|
517
|
-
return getItem(key);
|
|
518
|
-
};
|
|
519
|
-
};
|
|
520
|
-
export const makeLoadItem = (loadItem, getItem, options = {}) => {
|
|
521
|
-
const timeout = options.timeout || 3600;
|
|
522
|
-
const maxSize = options.maxSize || 10_000;
|
|
523
|
-
const fetched = new LRUCache(maxSize);
|
|
524
|
-
const getFetched = options.getFetched || ((key) => fetched.get(key) || 0);
|
|
525
|
-
const setFetched = options.setFetched || ((key, ts) => fetched.set(key, ts));
|
|
526
|
-
const getSource = options.getSource || ((...args) => JSON.stringify(args));
|
|
527
|
-
const sourceFetched = new LRUCache(maxSize);
|
|
528
|
-
const attempts = new LRUCache(maxSize);
|
|
529
|
-
const pending = new Map();
|
|
530
|
-
return async (key, ...args) => {
|
|
531
|
-
const stale = await getItem(key);
|
|
532
|
-
// If we have an item, reload if it's relatively recent
|
|
533
|
-
if (stale && getFetched(key) > now() - timeout) {
|
|
534
|
-
return stale;
|
|
535
|
-
}
|
|
536
|
-
const source = `${key}:${getSource(...args)}`;
|
|
537
|
-
const pendingItem = pending.get(source);
|
|
538
|
-
// If we already are loading from this source, await and return
|
|
539
|
-
if (pendingItem) {
|
|
540
|
-
return pendingItem;
|
|
541
|
-
}
|
|
542
|
-
const attempt = attempts.get(source) || 0;
|
|
543
|
-
// Use exponential backoff to throttle repeat attempts against the same source
|
|
544
|
-
if (gt(sourceFetched.get(source), now() - Math.pow(2, attempt))) {
|
|
545
|
-
return stale;
|
|
546
|
-
}
|
|
547
|
-
attempts.set(source, attempt + 1);
|
|
548
|
-
sourceFetched.set(source, now());
|
|
549
|
-
setFetched(key, now());
|
|
550
|
-
const promise = loadItem(key, ...args).then(() => getItem(key));
|
|
551
|
-
pending.set(source, promise);
|
|
552
|
-
let item;
|
|
553
|
-
try {
|
|
554
|
-
item = await promise;
|
|
555
|
-
}
|
|
556
|
-
finally {
|
|
557
|
-
pending.delete(source);
|
|
558
|
-
}
|
|
559
|
-
if (item) {
|
|
560
|
-
attempts.pop(source);
|
|
561
|
-
}
|
|
562
|
-
return item;
|
|
563
|
-
};
|
|
564
|
-
};
|
|
565
|
-
// Miscellaneous other stuff
|
|
566
|
-
export const deriveIsDeleted = (repository, event) => projection(readable(false, set => {
|
|
567
|
-
const idOrAddress = getIdOrAddress(event);
|
|
568
|
-
set(repository.isDeleted(event));
|
|
569
|
-
return on(repository, "update", ({ removed, added }) => {
|
|
570
|
-
if (removed.has(event.id)) {
|
|
571
|
-
set(true);
|
|
572
|
-
}
|
|
573
|
-
for (const event of added) {
|
|
574
|
-
if (getIdOrAddress(event) === idOrAddress) {
|
|
575
|
-
set(false);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
});
|
|
579
|
-
}), () => repository.isDeleted(event));
|
|
580
|
-
//# sourceMappingURL=repository.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/repository.ts"],"names":[],"mappings":"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"}
|