UNPKG

node-web-mvc

Version:
72 lines (71 loc) 2.71 kB
import { IncomingMessage, ServerResponse } from 'http'; import { TransferListItem, Worker, WorkerOptions } from 'worker_threads'; export interface WorkerResponseData { type: 'finished' | 'error' | 'invoke' | 'callback' | 'bind-event' | 'remove-event'; error?: Error; event?: { id: string; name: string; target: string; }; callbackId?: string; callbackValues?: any[]; invoke?: { id: string; target: string; method: string; args: any[]; }; } export type InvokeTargetType = 'request' | 'response' | 'responseSocket' | 'requestSocket'; interface ResponseMessagePort extends MessagePort { postMessage(message: WorkerResponseData, transfer: Transferable[]): void; postMessage(message: WorkerResponseData, options?: StructuredSerializeOptions): void; } export interface WorkerRequestValue { port: ResponseMessagePort; request: ReturnType<typeof WorkerInvoker.serializeRequest>; } export interface ResolverWorker extends Worker { postMessage(value: WorkerRequestValue, transferList?: ReadonlyArray<TransferListItem>): void; } export interface WorkDataInfo { rootDir?: string; outDir?: string; workerJs: string; dev?: boolean; } export interface RessolverWorkerOptions extends WorkerOptions { workerData?: WorkDataInfo; } export default class WorkerInvoker { port: ResponseMessagePort; static serializeRequest(req: IncomingMessage): { url: string; method: string; rawHeaders: string[]; rawTrailers: string[]; httpVersion: string; httpVersionMajor: number; httpVersionMinor: number; readableEncoding: BufferEncoding; socket: { address: {} | import("net").AddressInfo; }; }; constructor(port: MessagePort); static bindCallback(port: ResponseMessagePort, id: string, name: string): (...values: any[]) => void; static onInvoke(info: WorkerResponseData, port: MessagePort, request: IncomingMessage, response: ServerResponse): void; static bindEventListener(info: WorkerResponseData, port: ResponseMessagePort, request: IncomingMessage, response: ServerResponse): void; /** * 执行主线程对象方法 * @param target 要执行的对象名 * @param method 要执行的方法名 * @param args 参数 * @returns */ invoke(target: InvokeTargetType, method: string, args: any[]): Promise<unknown>; addEventListener(target: InvokeTargetType, event: string, handler: (...args: any) => void, once?: boolean): void; removeEventListener(target: string, event: string, id: string, handler: (...args: any) => void): void; } export {};