@welshman/util 0.0.4 → 0.0.6
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/build/Address.cjs +40 -32
- package/build/Address.cjs.map +1 -1
- package/build/Address.d.ts +20 -18
- package/build/Address.mjs +38 -26
- package/build/Address.mjs.map +1 -1
- package/build/Events.cjs +29 -14
- package/build/Events.cjs.map +1 -1
- package/build/Events.d.ts +42 -15
- package/build/Events.mjs +15 -7
- package/build/Events.mjs.map +1 -1
- package/build/Filters.cjs +5 -5
- package/build/Filters.cjs.map +1 -1
- package/build/Filters.d.ts +4 -4
- package/build/Filters.mjs +5 -5
- package/build/Filters.mjs.map +1 -1
- package/build/Kinds.cjs +140 -78
- package/build/Kinds.cjs.map +1 -1
- package/build/Kinds.d.ts +137 -76
- package/build/Kinds.mjs +137 -77
- package/build/Kinds.mjs.map +1 -1
- package/build/Links.cjs +1 -1
- package/build/Links.cjs.map +1 -1
- package/build/Links.mjs +1 -1
- package/build/Links.mjs.map +1 -1
- package/build/Relay.cjs +51 -20
- package/build/Relay.cjs.map +1 -1
- package/build/Relay.d.ts +13 -5
- package/build/Relay.mjs +49 -20
- package/build/Relay.mjs.map +1 -1
- package/build/Repository.cjs +103 -94
- package/build/Repository.cjs.map +1 -1
- package/build/Repository.d.ts +33 -23
- package/build/Repository.mjs +107 -98
- package/build/Repository.mjs.map +1 -1
- package/build/Router.cjs +8 -9
- package/build/Router.cjs.map +1 -1
- package/build/Router.d.ts +12 -18
- package/build/Router.mjs +8 -9
- package/build/Router.mjs.map +1 -1
- package/build/Tags.cjs +6 -8
- package/build/Tags.cjs.map +1 -1
- package/build/Tags.d.ts +1 -3
- package/build/Tags.mjs +6 -8
- package/build/Tags.mjs.map +1 -1
- package/build/index.cjs +0 -1
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +0 -1
- package/build/index.mjs +0 -1
- package/package.json +2 -2
- package/build/Relays.cjs +0 -38
- package/build/Relays.cjs.map +0 -1
- package/build/Relays.d.ts +0 -8
- package/build/Relays.mjs +0 -33
- package/build/Relays.mjs.map +0 -1
package/build/Repository.cjs
CHANGED
|
@@ -5,10 +5,11 @@ const throttle_debounce_1 = require("throttle-debounce");
|
|
|
5
5
|
const lib_1 = require("@welshman/lib");
|
|
6
6
|
const Kinds_1 = require("./Kinds.cjs");
|
|
7
7
|
const Filters_1 = require("./Filters.cjs");
|
|
8
|
-
const Address_1 = require("./Address.cjs");
|
|
9
8
|
const Events_1 = require("./Events.cjs");
|
|
9
|
+
const Address_1 = require("./Address.cjs");
|
|
10
10
|
exports.DAY = 86400;
|
|
11
11
|
const getDay = (ts) => Math.floor(ts / exports.DAY);
|
|
12
|
+
const maybeThrottle = (t, f) => t ? (0, throttle_debounce_1.throttle)(t, f) : f;
|
|
12
13
|
class Repository extends lib_1.Emitter {
|
|
13
14
|
constructor(options) {
|
|
14
15
|
super();
|
|
@@ -20,13 +21,33 @@ class Repository extends lib_1.Emitter {
|
|
|
20
21
|
this.eventsByAuthor = new Map();
|
|
21
22
|
this.deletes = new Map();
|
|
22
23
|
this.subs = [];
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
this.notifyUpdate = maybeThrottle(this.options.throttle, () => {
|
|
25
|
+
const events = this.get();
|
|
26
|
+
for (const sub of this.subs) {
|
|
27
|
+
sub(events);
|
|
28
|
+
}
|
|
29
|
+
this.emit('update');
|
|
30
|
+
});
|
|
31
|
+
this.notifyEvent = (event) => {
|
|
32
|
+
this.emit('event', event);
|
|
33
|
+
};
|
|
34
|
+
this.notifyDelete = (event) => {
|
|
35
|
+
this.emit('delete', event);
|
|
36
|
+
};
|
|
26
37
|
}
|
|
27
38
|
// Methods for implementing store interface
|
|
28
39
|
get() {
|
|
29
|
-
return this;
|
|
40
|
+
return Array.from(this.eventsById.values());
|
|
41
|
+
}
|
|
42
|
+
async set(events, chunkSize = 1000) {
|
|
43
|
+
for (const eventsChunk of (0, lib_1.chunk)(chunkSize, events)) {
|
|
44
|
+
for (const event of eventsChunk) {
|
|
45
|
+
this.publish(event);
|
|
46
|
+
}
|
|
47
|
+
if (eventsChunk.length === chunkSize) {
|
|
48
|
+
await (0, lib_1.sleep)(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
30
51
|
}
|
|
31
52
|
subscribe(f, invalidate) {
|
|
32
53
|
this.subs.push(f);
|
|
@@ -40,50 +61,27 @@ class Repository extends lib_1.Emitter {
|
|
|
40
61
|
throttle(t) {
|
|
41
62
|
return new lib_1.Derived(this, lib_1.identity, t);
|
|
42
63
|
}
|
|
43
|
-
filter(
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
};
|
|
65
|
-
return store;
|
|
66
|
-
}
|
|
67
|
-
notify(event) {
|
|
68
|
-
for (const sub of this.subs) {
|
|
69
|
-
sub(this);
|
|
70
|
-
}
|
|
71
|
-
this.emit('notify', event);
|
|
72
|
-
}
|
|
73
|
-
// Load/dump
|
|
74
|
-
dump() {
|
|
75
|
-
return Array.from(this.eventsById.values());
|
|
76
|
-
}
|
|
77
|
-
async load(events, chunkSize = 1000) {
|
|
78
|
-
for (const eventsChunk of (0, lib_1.chunk)(chunkSize, events)) {
|
|
79
|
-
for (const event of eventsChunk) {
|
|
80
|
-
this._addEvent(event);
|
|
81
|
-
}
|
|
82
|
-
if (eventsChunk.length === chunkSize) {
|
|
83
|
-
await (0, lib_1.sleep)(1);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
this.notify();
|
|
64
|
+
filter(filters, { includeDeleted = false } = {}) {
|
|
65
|
+
const getValue = () => this.query(filters, { includeDeleted });
|
|
66
|
+
return (0, lib_1.customStore)({
|
|
67
|
+
get: getValue,
|
|
68
|
+
start: setValue => {
|
|
69
|
+
const onEvent = (event) => {
|
|
70
|
+
if ((0, Filters_1.matchFilters)(filters, event)) {
|
|
71
|
+
setValue(getValue());
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const onRefresh = () => {
|
|
75
|
+
setValue(getValue());
|
|
76
|
+
};
|
|
77
|
+
this.on('event', onEvent);
|
|
78
|
+
this.on('delete', onRefresh);
|
|
79
|
+
return () => {
|
|
80
|
+
this.off('event', onEvent);
|
|
81
|
+
this.off('delete', onRefresh);
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
});
|
|
87
85
|
}
|
|
88
86
|
// API
|
|
89
87
|
getEvent(idOrAddress) {
|
|
@@ -91,12 +89,18 @@ class Repository extends lib_1.Emitter {
|
|
|
91
89
|
? this.eventsByAddress.get(idOrAddress)
|
|
92
90
|
: this.eventsById.get(idOrAddress);
|
|
93
91
|
}
|
|
92
|
+
hasEvent(event) {
|
|
93
|
+
const duplicate = (this.eventsById.get(event.id) ||
|
|
94
|
+
this.eventsByAddress.get((0, Address_1.getAddress)(event)));
|
|
95
|
+
return duplicate && duplicate.created_at >= event.created_at;
|
|
96
|
+
}
|
|
94
97
|
watchEvent(idOrAddress) {
|
|
95
|
-
return this.filter((0,
|
|
98
|
+
return this.filter((0, Filters_1.getIdFilters)([idOrAddress]), { includeDeleted: true }).derived(lib_1.first);
|
|
96
99
|
}
|
|
97
|
-
|
|
100
|
+
query(filters, { includeDeleted = false } = {}) {
|
|
101
|
+
const result = [];
|
|
98
102
|
for (let filter of filters) {
|
|
99
|
-
let events = this.eventsById.values();
|
|
103
|
+
let events = Array.from(this.eventsById.values());
|
|
100
104
|
if (filter.ids) {
|
|
101
105
|
events = filter.ids.map(id => this.eventsById.get(id)).filter(lib_1.identity);
|
|
102
106
|
filter = (0, lib_1.omit)(['ids'], filter);
|
|
@@ -106,10 +110,9 @@ class Repository extends lib_1.Emitter {
|
|
|
106
110
|
filter = (0, lib_1.omit)(['authors'], filter);
|
|
107
111
|
}
|
|
108
112
|
else if (filter.since || filter.until) {
|
|
109
|
-
const sinceDay = getDay(filter.since ||
|
|
110
|
-
const untilDay = getDay(filter.
|
|
111
|
-
|
|
112
|
-
events = (0, lib_1.uniq)(Array.from((0, lib_1.range)(sinceDay, untilDay))
|
|
113
|
+
const sinceDay = getDay(filter.since || Filters_1.EPOCH);
|
|
114
|
+
const untilDay = getDay(filter.until || (0, lib_1.now)());
|
|
115
|
+
events = (0, lib_1.uniq)(Array.from((0, lib_1.range)(sinceDay, (0, lib_1.inc)(untilDay)))
|
|
113
116
|
.flatMap((day) => this.eventsByDay.get(day) || []));
|
|
114
117
|
}
|
|
115
118
|
else {
|
|
@@ -122,69 +125,75 @@ class Repository extends lib_1.Emitter {
|
|
|
122
125
|
break;
|
|
123
126
|
}
|
|
124
127
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
+
const chunk = [];
|
|
129
|
+
for (const event of (0, lib_1.sortBy)((e) => -e.created_at, events)) {
|
|
130
|
+
if (filter.limit && chunk.length >= filter.limit) {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
if (!includeDeleted && this.isDeleted(event)) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if ((0, Filters_1.matchFilter)(filter, event)) {
|
|
137
|
+
chunk.push(event);
|
|
128
138
|
}
|
|
129
139
|
}
|
|
140
|
+
result.push(chunk);
|
|
130
141
|
}
|
|
142
|
+
return (0, lib_1.uniq)((0, lib_1.flatten)(result));
|
|
131
143
|
}
|
|
132
144
|
publish(event) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
const hasAddress = (0, Events_1.isReplaceable)(event);
|
|
138
|
-
const address = (0, Address_1.encodeAddress)((0, Address_1.addressFromEvent)(event));
|
|
139
|
-
const duplicateByAddress = hasAddress ? this.eventsByAddress.get(address) : undefined;
|
|
140
|
-
if (duplicateByAddress && duplicateByAddress.created_at >= event.created_at) {
|
|
141
|
-
return false;
|
|
145
|
+
if (!(0, Events_1.isTrustedEvent)(event)) {
|
|
146
|
+
throw new Error("Invalid event published to Repository", event);
|
|
142
147
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return true;
|
|
148
|
+
const address = (0, Address_1.getAddress)(event);
|
|
149
|
+
const duplicate = (this.eventsById.get(event.id) ||
|
|
150
|
+
this.eventsByAddress.get(address));
|
|
151
|
+
// If our duplicate is newer than the event we're adding, we're done
|
|
152
|
+
if (duplicate && duplicate.created_at >= event.created_at) {
|
|
153
|
+
return;
|
|
150
154
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if (
|
|
155
|
-
|
|
155
|
+
// Delete our duplicate first
|
|
156
|
+
if (duplicate) {
|
|
157
|
+
this.eventsById.delete(duplicate.id);
|
|
158
|
+
if ((0, Events_1.isReplaceable)(duplicate)) {
|
|
159
|
+
this.eventsByAddress.delete(address);
|
|
156
160
|
}
|
|
157
161
|
}
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
// Implementation
|
|
161
|
-
_addEvent(event, duplicate) {
|
|
162
|
+
// Now add our new event
|
|
162
163
|
this.eventsById.set(event.id, event);
|
|
163
164
|
if ((0, Events_1.isReplaceable)(event)) {
|
|
164
|
-
this.eventsByAddress.set(
|
|
165
|
+
this.eventsByAddress.set(address, event);
|
|
165
166
|
}
|
|
167
|
+
// Update our timestamp and author indexes
|
|
166
168
|
this._updateIndex(this.eventsByDay, getDay(event.created_at), event, duplicate);
|
|
167
169
|
this._updateIndex(this.eventsByAuthor, event.pubkey, event, duplicate);
|
|
170
|
+
// Update our tag indexes
|
|
168
171
|
for (const tag of event.tags) {
|
|
169
172
|
if (tag[0].length === 1) {
|
|
170
173
|
this._updateIndex(this.eventsByTag, tag.slice(0, 2).join(':'), event, duplicate);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
this.deletes.set(
|
|
174
|
+
// If this is a delete event, the tag value is an id or address. Track when it was
|
|
175
|
+
// deleted so that replaceables can be restored.
|
|
176
|
+
if (event.kind === Kinds_1.DELETE) {
|
|
177
|
+
this.deletes.set(tag[1], Math.max(event.created_at, this.deletes.get(tag[1]) || 0));
|
|
175
178
|
}
|
|
176
179
|
}
|
|
177
180
|
}
|
|
178
181
|
if (!this.isDeleted(event)) {
|
|
182
|
+
this.notifyUpdate();
|
|
183
|
+
this.notifyEvent(event);
|
|
179
184
|
// Deletes are tricky, re-evaluate all subscriptions if that's what we're dealing with
|
|
180
|
-
if (event.kind === Kinds_1.
|
|
181
|
-
this.
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
this.notify(event);
|
|
185
|
+
if (event.kind === Kinds_1.DELETE) {
|
|
186
|
+
this.notifyDelete(event);
|
|
185
187
|
}
|
|
186
188
|
}
|
|
187
189
|
}
|
|
190
|
+
isDeleted(event) {
|
|
191
|
+
const deletedAt = (this.deletes.get(event.id) ||
|
|
192
|
+
this.deletes.get((0, Address_1.getAddress)(event)) ||
|
|
193
|
+
0);
|
|
194
|
+
return deletedAt > event.created_at;
|
|
195
|
+
}
|
|
196
|
+
// Utilities
|
|
188
197
|
_updateIndex(m, k, e, duplicate) {
|
|
189
198
|
let a = m.get(k) || [];
|
|
190
199
|
if (duplicate) {
|
package/build/Repository.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repository.cjs","sourceRoot":"","sources":["../Repository.ts"],"names":[],"mappings":";;;AAAA,yDAA0C;AAE1C,
|
|
1
|
+
{"version":3,"file":"Repository.cjs","sourceRoot":"","sources":["../Repository.ts"],"names":[],"mappings":"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"}
|
package/build/Repository.d.ts
CHANGED
|
@@ -1,34 +1,44 @@
|
|
|
1
1
|
import type { IReadable, Subscriber, Invalidator } from '@welshman/lib';
|
|
2
2
|
import { Derived, Emitter } from '@welshman/lib';
|
|
3
3
|
import type { Filter } from './Filters';
|
|
4
|
-
import type {
|
|
4
|
+
import type { TrustedEvent } from './Events';
|
|
5
5
|
export declare const DAY = 86400;
|
|
6
6
|
export type RepositoryOptions = {
|
|
7
7
|
throttle?: number;
|
|
8
8
|
};
|
|
9
|
-
export declare class Repository
|
|
9
|
+
export declare class Repository extends Emitter implements IReadable<TrustedEvent[]> {
|
|
10
10
|
private options;
|
|
11
|
-
eventsById: Map<string,
|
|
12
|
-
eventsByAddress: Map<string,
|
|
13
|
-
eventsByTag: Map<string,
|
|
14
|
-
eventsByDay: Map<number,
|
|
15
|
-
eventsByAuthor: Map<string,
|
|
11
|
+
eventsById: Map<string, TrustedEvent>;
|
|
12
|
+
eventsByAddress: Map<string, TrustedEvent>;
|
|
13
|
+
eventsByTag: Map<string, TrustedEvent[]>;
|
|
14
|
+
eventsByDay: Map<number, TrustedEvent[]>;
|
|
15
|
+
eventsByAuthor: Map<string, TrustedEvent[]>;
|
|
16
16
|
deletes: Map<string, number>;
|
|
17
|
-
subs: Subscriber<
|
|
17
|
+
subs: Subscriber<TrustedEvent[]>[];
|
|
18
18
|
constructor(options: RepositoryOptions);
|
|
19
|
-
get():
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
19
|
+
get(): TrustedEvent[];
|
|
20
|
+
set(events: TrustedEvent[], chunkSize?: number): Promise<void>;
|
|
21
|
+
subscribe(f: Subscriber<TrustedEvent[]>, invalidate?: Invalidator<TrustedEvent[]>): () => void;
|
|
22
|
+
derived<U>(f: (v: TrustedEvent[]) => U): Derived<U>;
|
|
23
|
+
throttle(t: number): Derived<TrustedEvent[]>;
|
|
24
|
+
filter(filters: Filter[], { includeDeleted }?: {
|
|
25
|
+
includeDeleted?: boolean | undefined;
|
|
26
|
+
}): {
|
|
27
|
+
derived: <U>(f: (v: TrustedEvent[]) => U) => Derived<U>;
|
|
28
|
+
throttle: (t: number) => Derived<TrustedEvent[]>;
|
|
29
|
+
get: () => TrustedEvent[];
|
|
30
|
+
subscribe(this: void, run: Subscriber<TrustedEvent[]>, invalidate?: Invalidator<TrustedEvent[]> | undefined): () => void;
|
|
31
|
+
};
|
|
32
|
+
notifyUpdate: () => void;
|
|
33
|
+
notifyEvent: (event: TrustedEvent) => void;
|
|
34
|
+
notifyDelete: (event: TrustedEvent) => void;
|
|
35
|
+
getEvent(idOrAddress: string): TrustedEvent | undefined;
|
|
36
|
+
hasEvent(event: TrustedEvent): boolean | undefined;
|
|
37
|
+
watchEvent(idOrAddress: string): Derived<TrustedEvent>;
|
|
38
|
+
query(filters: Filter[], { includeDeleted }?: {
|
|
39
|
+
includeDeleted?: boolean | undefined;
|
|
40
|
+
}): TrustedEvent[];
|
|
41
|
+
publish(event: TrustedEvent): void;
|
|
42
|
+
isDeleted(event: TrustedEvent): boolean;
|
|
43
|
+
_updateIndex<K>(m: Map<K, TrustedEvent[]>, k: K, e: TrustedEvent, duplicate?: TrustedEvent): void;
|
|
34
44
|
}
|