import type Model from '../Model' import type Database from './index' import { $ReadOnlyArray } from '../types' export interface ReaderInterface { callReader(reader: () => Promise): Promise } export interface WriterInterface extends ReaderInterface { callWriter(writer: () => Promise): Promise batch(...records: $ReadOnlyArray): Promise } type WorkQueueItem = { work: (_: ReaderInterface | WriterInterface) => Promise isWriter: boolean resolve: (value: T) => void reject: (reason: any) => void description?: string } export default class WorkQueue { _db: Database _queue: WorkQueueItem[] _subActionIncoming: boolean constructor(db: Database) get isWriterRunning(): boolean enqueue( work: (_: ReaderInterface | WriterInterface) => Promise, description: string | undefined, isWriter: boolean, ): Promise subAction(work: () => Promise): Promise _executeNext(): Promise _abortPendingWork(): void }