Hyperlinkv0.8.0-beta.28

Hyperlink

Hyperlink.serveconstsrc/Hyperlink.ts:3699
<Self, S extends Spec, R = never>(
  tag: HyperlinkTag<Self, S>,
  impl:
    | ImplOf<S>
    | BuiltHyperlink<S, R>
    | Effect.Effect<ImplOf<S> | BuiltHyperlink<S, R>, never, R>
): Layer.Layer<Self | Local<Self> | HandlerContextOf<S>, never, R>

Expose a Tag's implementation as an RPC server layer — the served counterpart of layer. Pair it with Node.httpServer / Node.wsServer (or listen) to put it on a transport, and dial it with client / connect.

servingTaglayerNode.httpServerNode.wsServerlistenclientconnect
Source src/Hyperlink.ts:369925 lines
export const serve = <Self, S extends Spec, R = never>(
  tag: HyperlinkTag<Self, S>,
  impl:
    | ImplOf<S>
    | BuiltHyperlink<S, R>
    | Effect.Effect<ImplOf<S> | BuiltHyperlink<S, R>, never, R>,
): Layer.Layer<Self | Local<Self> | HandlerContextOf<S>, never, R> => {
  // Stamp the served tag's key so an anonymous `listen` can derive a legible node name from the first
  // resource it serves (see {@link servedKeyOf} / anonymousNodeKey). Stamped on the FINAL layer both
  // paths return (servePlain re-merges, which would drop an earlier stamp).
  const plain = Object.assign(servePlain(tag, impl), {
    [servedKeySym]: tag.groupId,
  });
  if (!isIdentity(tag)) {
    return plain;
  }
  // Identity path requires Lookup.Identity at runtime (fail-closed). Kept off the public
  // `R` channel so plain `serve` stays TS2589-free (HyperlinkTag & identity brand blows up).
  const claimed = identityClaimLayer(tag, plain) as Layer.Layer<
    Self | Local<Self> | HandlerContextOf<S>,
    never,
    R
  >;
  return Object.assign(claimed, { [servedKeySym]: tag.groupId });
};
Referenced by 13 symbols