All database reads and writes now run off the main thread via a dedicated worker, eliminating IndexedDB overhead from the frame budget. - Create data.worker.ts exposing the Data class via Comlink - Refactor data.ts to export a Comlink-wrapped proxy and a standalone generateId() pure function (workers can't expose sync methods cleanly) - Update all 10 call sites to import generateId directly instead of calling data.generateId() Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
32 lines
991 B
TypeScript
32 lines
991 B
TypeScript
import { wrap } from "comlink"
|
|
import { nanoid } from "nanoid"
|
|
|
|
import { DataType } from "./DataType.enum"
|
|
import { Model } from "./models/Model"
|
|
|
|
export interface DataApi {
|
|
add<DT extends DataType>(model: Model<DT>): Promise<boolean>
|
|
update<DT extends DataType, T extends Model<DT>>(model: T): Promise<boolean>
|
|
remove(id: string): Promise<boolean>
|
|
get<DT extends DataType, T extends Model<DT>>(id: string): Promise<T | null>
|
|
getOrCreate<DT extends DataType, T extends Model<DT>>(
|
|
id: string,
|
|
initialValue: T
|
|
): Promise<T>
|
|
getAll<DT extends DataType, T extends Model<DT>>(params: {
|
|
prefix?: string
|
|
includeDocs?: boolean
|
|
includeAttachments?: boolean
|
|
keys?: string[]
|
|
}): Promise<T[]>
|
|
}
|
|
|
|
export const generateId = (type?: DataType | string, id?: string): string => {
|
|
if (!type) return id || nanoid()
|
|
return `${type}-${id || nanoid()}`
|
|
}
|
|
|
|
import DataWorker from "./data.worker?worker"
|
|
|
|
export const data = wrap(new DataWorker()) as unknown as DataApi
|