story-research-zapwall/lib/helpers/writeObjectHelper.ts
2026-01-09 02:11:12 +01:00

95 lines
2.2 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: version ?? tags.version ?? 0,
hidden: hidden ?? tags.hidden ?? false,
index: index ?? 0,
published: 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
}
const params: WriteObjectParams = {
objectType,
hash,
event,
parsed: extracted,
}
if (extracted.index !== undefined) {
params.index = extracted.index
}
await writeObjectToCache(params)
return true
}