Hyperlinkv0.9.0-beta.0

Node

<E, R>(node: AnyNode, layer: Layer.Layer<never, E, R>): Effect.Effect<
  void,
  E,
  R
>

Run a listen layer until Node.shutdown (or scope interrupt).

Prefer this over bare Layer.launch for nodes that should exit on shutdown. Installs a latch keyed by node.key that status shutdown signals after membership leave.

layers & servingNode.shutdown
export const launch = <E, R>(
  node: AnyNode,
  layer: Layer.Layer<never, E, R>,
): Effect.Effect<void, E, R> =>
  Effect.gen(function* () {
    const gate = yield* Deferred.make<void>();
    yield* listenExit.install(node.key, gate);
    yield* Effect.addFinalizer(() => listenExit.uninstall(node.key));
    yield* Effect.raceFirst(
      Layer.launch(layer),
      Deferred.await(gate),
    );
  }).pipe(Effect.scoped, Effect.asVoid);