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 }