index.d.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import { MessagePort, Worker } from 'worker_threads';
  2. import { EventEmitter } from 'events';
  3. import { AsyncResource } from 'async_hooks';
  4. declare const kEventEmitter: unique symbol;
  5. declare const kAsyncResource: unique symbol;
  6. declare type EventEmitterOptions = typeof EventEmitter extends {
  7. new (options?: infer T): EventEmitter;
  8. } ? T : never;
  9. declare type AsyncResourceOptions = typeof AsyncResource extends {
  10. new (name: string, options?: infer T): AsyncResource;
  11. } ? T : never;
  12. declare type Options$1 = EventEmitterOptions & AsyncResourceOptions & {
  13. name?: string;
  14. };
  15. declare class EventEmitterReferencingAsyncResource extends AsyncResource {
  16. [kEventEmitter]: EventEmitter;
  17. constructor(ee: EventEmitter, type: string, options?: AsyncResourceOptions);
  18. get eventEmitter(): EventEmitter;
  19. }
  20. declare class EventEmitterAsyncResource extends EventEmitter {
  21. [kAsyncResource]: EventEmitterReferencingAsyncResource;
  22. constructor(options?: Options$1 | string);
  23. emit(event: string | symbol, ...args: any[]): boolean;
  24. emitDestroy(): void;
  25. asyncId(): number;
  26. triggerAsyncId(): number;
  27. get asyncResource(): EventEmitterReferencingAsyncResource;
  28. static get EventEmitterAsyncResource(): typeof EventEmitterAsyncResource;
  29. }
  30. interface StartupMessage {
  31. filename: string | null;
  32. name: string;
  33. port: MessagePort;
  34. sharedBuffer: Int32Array;
  35. useAtomics: boolean;
  36. }
  37. interface RequestMessage {
  38. taskId: number;
  39. task: any;
  40. filename: string;
  41. name: string;
  42. }
  43. interface ReadyMessage {
  44. ready: true;
  45. }
  46. interface ResponseMessage {
  47. taskId: number;
  48. result: any;
  49. error: unknown | null;
  50. }
  51. interface TinypoolPrivateData {
  52. workerId: number;
  53. }
  54. declare type TinypoolData = [TinypoolPrivateData, any];
  55. declare const kTransferable: unique symbol;
  56. declare const kValue: unique symbol;
  57. declare const kQueueOptions: unique symbol;
  58. declare function isTransferable(value: any): boolean;
  59. declare function isMovable(value: any): boolean;
  60. declare function markMovable(value: object): void;
  61. interface Transferable {
  62. readonly [kTransferable]: object;
  63. readonly [kValue]: object;
  64. }
  65. interface Task {
  66. readonly [kQueueOptions]: object | null;
  67. }
  68. interface TaskQueue {
  69. readonly size: number;
  70. shift(): Task | null;
  71. remove(task: Task): void;
  72. push(task: Task): void;
  73. }
  74. declare function isTaskQueue(value: any): boolean;
  75. declare const kRequestCountField = 0;
  76. declare const kResponseCountField = 1;
  77. declare const kFieldCount = 2;
  78. declare global {
  79. namespace NodeJS {
  80. interface Process {
  81. __tinypool_state__: {
  82. isWorkerThread: boolean;
  83. workerData: any;
  84. workerId: number;
  85. };
  86. }
  87. }
  88. }
  89. interface AbortSignalEventTargetAddOptions {
  90. once: boolean;
  91. }
  92. interface AbortSignalEventTarget {
  93. addEventListener: (name: 'abort', listener: () => void, options?: AbortSignalEventTargetAddOptions) => void;
  94. removeEventListener: (name: 'abort', listener: () => void) => void;
  95. aborted?: boolean;
  96. }
  97. interface AbortSignalEventEmitter {
  98. off: (name: 'abort', listener: () => void) => void;
  99. once: (name: 'abort', listener: () => void) => void;
  100. }
  101. declare type AbortSignalAny = AbortSignalEventTarget | AbortSignalEventEmitter;
  102. declare type ResourceLimits = Worker extends {
  103. resourceLimits?: infer T;
  104. } ? T : {};
  105. declare type EnvSpecifier = typeof Worker extends {
  106. new (filename: never, options?: {
  107. env: infer T;
  108. }): Worker;
  109. } ? T : never;
  110. interface Options {
  111. filename?: string | null;
  112. name?: string;
  113. minThreads?: number;
  114. maxThreads?: number;
  115. idleTimeout?: number;
  116. maxQueue?: number | 'auto';
  117. concurrentTasksPerWorker?: number;
  118. useAtomics?: boolean;
  119. resourceLimits?: ResourceLimits;
  120. argv?: string[];
  121. execArgv?: string[];
  122. env?: EnvSpecifier;
  123. workerData?: any;
  124. taskQueue?: TaskQueue;
  125. trackUnmanagedFds?: boolean;
  126. isolateWorkers?: boolean;
  127. }
  128. interface FilledOptions extends Options {
  129. filename: string | null;
  130. name: string;
  131. minThreads: number;
  132. maxThreads: number;
  133. idleTimeout: number;
  134. maxQueue: number;
  135. concurrentTasksPerWorker: number;
  136. useAtomics: boolean;
  137. taskQueue: TaskQueue;
  138. }
  139. interface RunOptions {
  140. transferList?: TransferList;
  141. filename?: string | null;
  142. signal?: AbortSignalAny | null;
  143. name?: string | null;
  144. }
  145. declare type TransferList = MessagePort extends {
  146. postMessage(value: any, transferList: infer T): any;
  147. } ? T : never;
  148. declare type TransferListItem = TransferList extends (infer T)[] ? T : never;
  149. declare class Tinypool extends EventEmitterAsyncResource {
  150. #private;
  151. constructor(options?: Options);
  152. run(task: any, options?: RunOptions): Promise<any>;
  153. destroy(): Promise<void>;
  154. get options(): FilledOptions;
  155. get threads(): Worker[];
  156. get queueSize(): number;
  157. get completed(): number;
  158. get duration(): number;
  159. static get isWorkerThread(): boolean;
  160. static get workerData(): any;
  161. static get version(): string;
  162. static move(val: Transferable | TransferListItem | ArrayBufferView | ArrayBuffer | MessagePort): MessagePort | ArrayBuffer | Transferable | ArrayBufferView;
  163. static get transferableSymbol(): symbol;
  164. static get valueSymbol(): symbol;
  165. static get queueOptionsSymbol(): symbol;
  166. }
  167. declare const _workerId: number;
  168. export { Options, ReadyMessage, RequestMessage, ResponseMessage, StartupMessage, Task, TaskQueue, Tinypool, TinypoolData, TinypoolPrivateData, Transferable, Tinypool as default, isMovable, isTaskQueue, isTransferable, kFieldCount, kQueueOptions, kRequestCountField, kResponseCountField, kTransferable, kValue, markMovable, _workerId as workerId };