node-web-mvc
Version:
node spring mvc
72 lines (71 loc) • 2.71 kB
TypeScript
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 {};