@welshman/util 0.0.4 → 0.0.5
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 +4 -4
- package/build/Filters.cjs.map +1 -1
- package/build/Filters.d.ts +4 -4
- package/build/Filters.mjs +4 -4
- 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 +100 -93
- package/build/Repository.cjs.map +1 -1
- package/build/Repository.d.ts +33 -23
- package/build/Repository.mjs +104 -97
- 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 = () => Array.from(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,17 @@ 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
|
-
*query(filters) {
|
|
100
|
+
*query(filters, { includeDeleted = false } = {}) {
|
|
98
101
|
for (let filter of filters) {
|
|
99
|
-
let events = this.eventsById.values();
|
|
102
|
+
let events = Array.from(this.eventsById.values());
|
|
100
103
|
if (filter.ids) {
|
|
101
104
|
events = filter.ids.map(id => this.eventsById.get(id)).filter(lib_1.identity);
|
|
102
105
|
filter = (0, lib_1.omit)(['ids'], filter);
|
|
@@ -106,10 +109,9 @@ class Repository extends lib_1.Emitter {
|
|
|
106
109
|
filter = (0, lib_1.omit)(['authors'], filter);
|
|
107
110
|
}
|
|
108
111
|
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))
|
|
112
|
+
const sinceDay = getDay(filter.since || Filters_1.EPOCH);
|
|
113
|
+
const untilDay = getDay(filter.until || (0, lib_1.now)());
|
|
114
|
+
events = (0, lib_1.uniq)(Array.from((0, lib_1.range)(sinceDay, (0, lib_1.inc)(untilDay)))
|
|
113
115
|
.flatMap((day) => this.eventsByDay.get(day) || []));
|
|
114
116
|
}
|
|
115
117
|
else {
|
|
@@ -122,69 +124,74 @@ class Repository extends lib_1.Emitter {
|
|
|
122
124
|
break;
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
+
let i = 0;
|
|
128
|
+
for (const event of (0, lib_1.sortBy)((e) => -e.created_at, events)) {
|
|
129
|
+
if (filter.limit && i > filter.limit) {
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
if (!includeDeleted && this.isDeleted(event)) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if ((0, Filters_1.matchFilter)(filter, event)) {
|
|
127
136
|
yield event;
|
|
137
|
+
i += 1;
|
|
128
138
|
}
|
|
129
139
|
}
|
|
130
140
|
}
|
|
131
141
|
}
|
|
132
142
|
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;
|
|
143
|
+
if (!(0, Events_1.isTrustedEvent)(event)) {
|
|
144
|
+
throw new Error("Invalid event published to Repository", event);
|
|
142
145
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return true;
|
|
146
|
+
const address = (0, Address_1.getAddress)(event);
|
|
147
|
+
const duplicate = (this.eventsById.get(event.id) ||
|
|
148
|
+
this.eventsByAddress.get(address));
|
|
149
|
+
// If our duplicate is newer than the event we're adding, we're done
|
|
150
|
+
if (duplicate && duplicate.created_at >= event.created_at) {
|
|
151
|
+
return;
|
|
150
152
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
if (
|
|
155
|
-
|
|
153
|
+
// Delete our duplicate first
|
|
154
|
+
if (duplicate) {
|
|
155
|
+
this.eventsById.delete(duplicate.id);
|
|
156
|
+
if ((0, Events_1.isReplaceable)(duplicate)) {
|
|
157
|
+
this.eventsByAddress.delete(address);
|
|
156
158
|
}
|
|
157
159
|
}
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
// Implementation
|
|
161
|
-
_addEvent(event, duplicate) {
|
|
160
|
+
// Now add our new event
|
|
162
161
|
this.eventsById.set(event.id, event);
|
|
163
162
|
if ((0, Events_1.isReplaceable)(event)) {
|
|
164
|
-
this.eventsByAddress.set(
|
|
163
|
+
this.eventsByAddress.set(address, event);
|
|
165
164
|
}
|
|
165
|
+
// Update our timestamp and author indexes
|
|
166
166
|
this._updateIndex(this.eventsByDay, getDay(event.created_at), event, duplicate);
|
|
167
167
|
this._updateIndex(this.eventsByAuthor, event.pubkey, event, duplicate);
|
|
168
|
+
// Update our tag indexes
|
|
168
169
|
for (const tag of event.tags) {
|
|
169
170
|
if (tag[0].length === 1) {
|
|
170
171
|
this._updateIndex(this.eventsByTag, tag.slice(0, 2).join(':'), event, duplicate);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
this.deletes.set(
|
|
172
|
+
// If this is a delete event, the tag value is an id or address. Track when it was
|
|
173
|
+
// deleted so that replaceables can be restored.
|
|
174
|
+
if (event.kind === Kinds_1.DELETE) {
|
|
175
|
+
this.deletes.set(tag[1], Math.max(event.created_at, this.deletes.get(tag[1]) || 0));
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
178
|
}
|
|
178
179
|
if (!this.isDeleted(event)) {
|
|
180
|
+
this.notifyUpdate();
|
|
181
|
+
this.notifyEvent(event);
|
|
179
182
|
// 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);
|
|
183
|
+
if (event.kind === Kinds_1.DELETE) {
|
|
184
|
+
this.notifyDelete(event);
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
|
+
isDeleted(event) {
|
|
189
|
+
const deletedAt = (this.deletes.get(event.id) ||
|
|
190
|
+
this.deletes.get((0, Address_1.getAddress)(event)) ||
|
|
191
|
+
0);
|
|
192
|
+
return deletedAt > event.created_at;
|
|
193
|
+
}
|
|
194
|
+
// Utilities
|
|
188
195
|
_updateIndex(m, k, e, duplicate) {
|
|
189
196
|
let a = m.get(k) || [];
|
|
190
197
|
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
|
+
}): Generator<TrustedEvent, void, unknown>;
|
|
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
|
}
|