@chevre/domain
Version:
Chevre Domain Library for Node.js
49 lines (48 loc) • 1.61 kB
TypeScript
import { EventEmitter } from 'events';
import type { Connection } from 'mongoose';
import type { RedisClientType } from 'redis';
import * as factory from '../factory';
interface IExecuteSettings {
/**
* MongoDBコネクション
*/
connection: Connection;
/**
* Redisクライアント
*/
redisClient?: RedisClientType;
}
type IOperationExecute<T> = (settings: IExecuteSettings) => Promise<T>;
type INextFunction = (task: Pick<factory.task.ITask<factory.taskName>, 'id'>) => IOperationExecute<void>;
interface IReadyTask {
id: string;
name?: factory.taskName;
status: factory.taskStatus.Ready;
expires?: Date;
executionResult?: never;
}
interface IRunningTask {
id: string;
status: factory.taskStatus.Running;
name?: never;
expires?: never;
executionResult?: never;
}
interface IExecutedTask {
id: string;
status: factory.taskStatus;
executionResult: factory.task.IExecutionResult;
name?: never;
expires?: never;
}
type IChangedTask = IReadyTask | IRunningTask | IExecutedTask;
type IOnTaskStatusChangedListener = (task: IChangedTask, next?: INextFunction) => void;
/**
* タスクイベントエミッター
*/
declare class TaskEventEmitter extends EventEmitter {
onTaskStatusChanged(listener: IOnTaskStatusChangedListener): void;
emitTaskStatusChanged(task: IChangedTask, next?: INextFunction): void;
}
declare const taskEventEmitter: TaskEventEmitter;
export { IChangedTask, IReadyTask, IRunningTask, IExecutedTask, IExecuteSettings, INextFunction, IOnTaskStatusChangedListener, taskEventEmitter };