import type { ChildProcess } from 'node:child_process' import type { ReplConfig } from '@wdio/repl' import WDIORepl from './repl.js' interface Repl { childProcess: ChildProcess options: ReplConfig onStart: Function onEnd: Function } /** * repl queue class * allows to run debug commands in mutliple workers one after another */ export default class ReplQueue { private _repls: Repl[] = [] runningRepl?: WDIORepl add (childProcess: ChildProcess, options: ReplConfig, onStart: Function, onEnd: Function) { this._repls.push({ childProcess, options, onStart, onEnd }) } next () { if (this.isRunning || this._repls.length === 0) { return } const nextRepl = this._repls.shift() if (!nextRepl) { return } const { childProcess, options, onStart, onEnd } = nextRepl const runningRepl = this.runningRepl = new WDIORepl(childProcess, options) onStart() runningRepl.start().then(() => { const ev = { origin: 'debugger', name: 'stop' } runningRepl.childProcess.send(ev) onEnd(ev) delete this.runningRepl this.next() }) } get isRunning () { return Boolean(this.runningRepl) } }