( name: TName, payload: RuntimeHostMainRequestMap[TName], )
| 32 | } |
| 33 | |
| 34 | export async function invokeMainRequest<TName extends RuntimeHostMainRequestName>( |
| 35 | name: TName, |
| 36 | payload: RuntimeHostMainRequestMap[TName], |
| 37 | ): Promise<RuntimeHostMainResponseMap[TName]> { |
| 38 | if (!process.send) { |
| 39 | throw new Error(`Cannot invoke main request ${name}: runtime host IPC is unavailable.`) |
| 40 | } |
| 41 | |
| 42 | const id = randomUUID() |
| 43 | const result = new Promise<RuntimeHostMainResponseMap[TName]>((resolve, reject) => { |
| 44 | const timeout = setTimeout(() => { |
| 45 | pendingMainRequests.delete(id) |
| 46 | reject(new Error(`Timed out waiting for main request ${name}.`)) |
| 47 | }, mainRequestTimeoutMs) |
| 48 | |
| 49 | pendingMainRequests.set(id, { |
| 50 | resolve: (value) => resolve(value as RuntimeHostMainResponseMap[TName]), |
| 51 | reject, |
| 52 | timeout, |
| 53 | }) |
| 54 | }) |
| 55 | |
| 56 | process.send({ type: 'main-request', id, name, payload }) |
| 57 | return await result |
| 58 | } |
no test coverage detected