92 lines
2.0 KiB
TypeScript
92 lines
2.0 KiB
TypeScript
/**
|
|
* Helper for writing objects to IndexedDB after extraction
|
|
* Centralizes the pattern of extract + writeObject with default parameters
|
|
* Optimizes imports by loading writeService once
|
|
*/
|
|
|
|
import type { Event } from 'nostr-tools'
|
|
import type { ObjectType } from '../objectCache'
|
|
import { extractTagsFromEvent } from '../nostrTagSystem'
|
|
|
|
let writeServiceCache: typeof import('../writeService').writeService | null = null
|
|
|
|
async function getWriteService(): Promise<typeof import('../writeService').writeService> {
|
|
if (!writeServiceCache) {
|
|
const { writeService } = await import('../writeService')
|
|
writeServiceCache = writeService
|
|
}
|
|
return writeServiceCache
|
|
}
|
|
|
|
export interface WriteObjectParams {
|
|
objectType: ObjectType
|
|
hash: string
|
|
event: Event
|
|
parsed: unknown
|
|
version?: number
|
|
hidden?: boolean
|
|
index?: number
|
|
published?: false | string[]
|
|
}
|
|
|
|
/**
|
|
* Write an object to IndexedDB cache
|
|
* Uses default values for version, hidden, index, and published if not provided
|
|
*/
|
|
export async function writeObjectToCache(params: WriteObjectParams): Promise<void> {
|
|
const {
|
|
objectType,
|
|
hash,
|
|
event,
|
|
parsed,
|
|
version,
|
|
hidden,
|
|
index,
|
|
published,
|
|
} = params
|
|
|
|
const tags = extractTagsFromEvent(event)
|
|
const writeService = await getWriteService()
|
|
|
|
await writeService.writeObject(
|
|
objectType,
|
|
hash,
|
|
event,
|
|
parsed,
|
|
version ?? tags.version ?? 0,
|
|
hidden ?? tags.hidden ?? false,
|
|
index ?? 0,
|
|
published ?? false
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Extract and write an object from an event
|
|
* Combines extraction and writing in a single call
|
|
*/
|
|
export async function extractAndWriteObject<T extends { hash?: string; index?: number }>(
|
|
event: Event,
|
|
objectType: ObjectType,
|
|
extractor: (event: Event) => Promise<T | null>
|
|
): Promise<boolean> {
|
|
const extracted = await extractor(event)
|
|
if (!extracted) {
|
|
return false
|
|
}
|
|
|
|
const {hash} = extracted
|
|
if (!hash) {
|
|
return false
|
|
}
|
|
|
|
await writeObjectToCache({
|
|
objectType,
|
|
hash,
|
|
event,
|
|
parsed: extracted,
|
|
index: extracted.index,
|
|
})
|
|
|
|
return true
|
|
}
|