import {Constructor} from '../../../../types/util'; import type AsyncProcess from '../abstract/asyncProcess'; import AsyncProcessPool from '../abstract/asyncProcessPool'; import type RootProcess from './rootProcess'; import RootProcessContext from './rootProcessContext'; /** * @inheritdoc */ class RootProcessPool< Process extends RootProcess > extends AsyncProcessPool, Process> { /** * Constructs instance * @param constructor process constructor * @param options additional options */ constructor(constructor: Constructor, options: AsyncProcessPool.Options) { super((poolContext, args) => { let context = new RootProcessContext(poolContext); return { context, args, process: new constructor(context) } as AsyncProcessPool.ConstructedProcess; }, options); } } export default RootProcessPool; type MapProcessProvider< Process extends RootProcess > = ( context: AsyncProcessPool.Context, args: [...args: AsyncProcess.Arguments] ) => AsyncProcessPool.ConstructedProcess;