diff --git a/packages/app/src/core.ts b/packages/app/src/core.ts index 49e8246..d3a54ab 100644 --- a/packages/app/src/core.ts +++ b/packages/app/src/core.ts @@ -54,10 +54,6 @@ export const subscribe = (request: PartialSubscribeRequest) => { const timeout = request.closeOnEose ? ctx.app.requestTimeout : 0 const sub = baseSubscribe({delay, timeout, authTimeout, relays: [], ...request}) - sub.emitter.on("event", (url: string, e: TrustedEvent) => { - repository.publish(e) - }) - // Keep cached results async so the caller can set up handlers setTimeout(() => { for (const event of events) { diff --git a/packages/app/src/storage.ts b/packages/app/src/storage.ts index f605751..5930768 100644 --- a/packages/app/src/storage.ts +++ b/packages/app/src/storage.ts @@ -8,14 +8,9 @@ import type {TrustedEvent, Repository} from "@welshman/util" import type {Tracker} from "@welshman/net" import {withGetter, adapter, throttled, custom} from "@welshman/store" -export type IndexedDbAdapterOptions = { - migrate?: (items: any[]) => any[] -} - export type IndexedDbAdapter = { keyPath: string store: Writable - options?: IndexedDbAdapterOptions } export let db: IDBPDatabase @@ -53,10 +48,6 @@ export const bulkDelete = async (name: string, ids: string[]) => { export const initIndexedDbAdapter = async (name: string, adapter: IndexedDbAdapter) => { let prevRecords = await getAll(name) - if (adapter.options?.migrate) { - prevRecords = adapter.options.migrate(prevRecords) - } - adapter.store.set(prevRecords) adapter.store.subscribe( @@ -132,10 +123,14 @@ export const clearStorage = async () => { await deleteDB(db.name) } -export type StorageAdapterOptions = IndexedDbAdapterOptions & { +export type StorageAdapterOptions = { throttle?: number + migrate?: (items: any[]) => any[] } +const migrate = (data: any[], options: StorageAdapterOptions) => + options.migrate ? options.migrate(data) : data + export const storageAdapters = { fromObjectStore: (store: Writable>, options: StorageAdapterOptions = {}) => ({ options, @@ -143,7 +138,7 @@ export const storageAdapters = { store: adapter({ store: throttled(options.throttle || 0, store), forward: ($data: Record) => - Object.entries($data).map(([key, value]) => ({key, value})), + migrate(Object.entries($data).map(([key, value]) => ({key, value})), options), backward: (data: {key: string, value: T}[]) => fromPairs(data.map(({key, value}) => [key, value])), }), @@ -154,7 +149,7 @@ export const storageAdapters = { store: adapter({ store: throttled(options.throttle || 0, store), forward: ($data: Map) => - Array.from($data.entries()).map(([key, value]) => ({key, value})), + migrate(Array.from($data.entries()).map(([key, value]) => ({key, value})), options), backward: (data: {key: string, value: T}[]) => new Map(data.map(({key, value}) => [key, value])), }), @@ -165,8 +160,11 @@ export const storageAdapters = { store: custom(setter => { let onUpdate = () => setter( - Array.from(tracker.data.entries()) - .map(([key, urls]) => ({key, value: Array.from(urls)})) + migrate( + Array.from(tracker.data.entries()) + .map(([key, urls]) => ({key, value: Array.from(urls)})), + options + ) ) if (options.throttle) { @@ -186,7 +184,7 @@ export const storageAdapters = { options, keyPath: 'id', store: custom(setter => { - let onUpdate = () => setter(repository.dump()) + let onUpdate = () => setter(migrate(repository.dump(), options)) if (options.throttle) { onUpdate = throttle(options.throttle, onUpdate) diff --git a/packages/util/src/Repository.ts b/packages/util/src/Repository.ts index 2570620..99057d0 100644 --- a/packages/util/src/Repository.ts +++ b/packages/util/src/Repository.ts @@ -1,4 +1,4 @@ -import {flatten, Emitter, sortBy, inc, chunk, sleep, uniq, omit, now, range, identity} from '@welshman/lib' +import {flatten, Emitter, sortBy, inc, chunk, uniq, omit, now, range, identity} from '@welshman/lib' import {DELETE} from './Kinds' import {EPOCH, matchFilter} from './Filters' import {isReplaceable, isUnwrappedEvent} from './Events' @@ -31,7 +31,7 @@ export class Repository extends Emitter { return Array.from(this.eventsById.values()) } - load = async (events: E[], chunkSize = 1000) => { + load = (events: E[], chunkSize = 1000) => { this.clear() const added = [] @@ -42,10 +42,6 @@ export class Repository extends Emitter { added.push(event) } } - - if (eventsChunk.length === chunkSize) { - await sleep(1) - } } const removed = new Set(this.deletes.keys())