MCPcopy Index your code
hub / github.com/Sandpack/nodebox-runtime / send

Method send

packages/nodebox/src/messages.ts:300–364  ·  view source on GitHub ↗
(
    event: Event,
    ...data: ConsumerEvents[Event] extends [infer PayloadType, infer _]
      ? [PayloadType]
      : ConsumerEvents[Event] extends Record<string, unknown>
      ? [ConsumerEvents[Event]]
      : [undefined?]
  )

Source from the content-addressed store, hash-verified

298 }
299
300 public async send<Event extends keyof ConsumerEvents & string>(
301 event: Event,
302 ...data: ConsumerEvents[Event] extends [infer PayloadType, infer _]
303 ? [PayloadType]
304 : ConsumerEvents[Event] extends Record<string, unknown>
305 ? [ConsumerEvents[Event]]
306 : [undefined?]
307 ): Promise<
308 ConsumerEvents[Event] extends [infer _, infer ReturnType] ? OperationEvent<ReturnType> | undefined : void
309 > {
310 const operationPromise = new DeferredPromise<
311 ConsumerEvents[Event] extends [infer _, infer ReturnType] ? OperationEvent<ReturnType> : void
312 >();
313 const operationId = cuid();
314
315 const payload = data[0] || {};
316 debug('[message-sender]: send "%s" (%s)', event, operationId, payload);
317
318 this.receiverPort.postMessage({ type: event, payload: { operationId, payload } });
319
320 // Await this operation to be confirmed as done by the receiver.
321 debug('[message-sender]: adding done listener for "%s" (%s)', event, operationId);
322
323 const handleOperationDone = (doneEvent: MessageEvent<WorkerEvents['internal/operation/done']>) => {
324 const { data } = doneEvent;
325
326 if (data.operationId === operationId) {
327 const listenerPayload = (data.listenerPayload || {}) as ConsumerEvents[Event] extends [
328 infer _,
329 infer ReturnType
330 ]
331 ? OperationEvent<ReturnType>
332 : void;
333
334 debug('[message-sender]: resolving "%s (%s) promise!', event, operationId);
335
336 operationPromise.resolve({
337 ...listenerPayload,
338 operationId: data.operationId,
339 });
340 }
341 };
342
343 const handleOperationFailed = (failEvent: MessageEvent<WorkerEvents['internal/operation/failed']>) => {
344 const { data } = failEvent;
345
346 if (data.operationId === operationId) {
347 debug('[message-sender]: rejecting "%s (%s) promise!', event, operationId);
348
349 operationPromise.reject(data.error);
350 }
351 };
352
353 this.on('internal/operation/done', handleOperationDone);
354
355 // Handle exceptions from the receiver.
356 this.on('internal/operation/failed', handleOperationFailed);
357

Callers 15

connectMethod · 0.45
initMethod · 0.45
readFileMethod · 0.45
writeFileMethod · 0.45
readdirMethod · 0.45
mkdirMethod · 0.45
statMethod · 0.45
rmMethod · 0.45
watchMethod · 0.45
constructorMethod · 0.45
runCommandMethod · 0.45
killMethod · 0.45

Calls 1

onMethod · 0.95

Tested by

no test coverage detected