<
Node extends AnyNode & { readonly [catalogSym]?: unknown },
Serves extends ServeLayerList
>(
node: Node,
serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>,
options?: IpcListenArg
): Layer.Layer<
Layer.Success<Serves[number]> | ListenNode,
Layer.Error<Serves[number]>,
Layer.Services<Serves[number]>
>Sugar: unix(node, serves) — IPC listen (pipe Lookup when needed).
Prefer unix (also covers Tag+impl and nameless forms).
export function function listenLocal<
Node extends AnyNode & {
readonly [catalogSym]?: unknown
},
Serves extends ServeLayerList
>(
node: Node,
serves: Serves &
ServesForCatalog<CatalogROut<Node>, Serves>,
options?: IpcListenArg
): Layer.Layer<
Layer.Success<Serves[number]> | ListenNode,
Layer.Error<Serves[number]>,
Layer.Services<Serves[number]>
>
listenLocal<
function (type parameter) Node in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Node extends type AnyNode = NodeKey<unknown> & {
readonly url: string | undefined;
readonly path: string | undefined;
readonly kind: ProtocolKind | undefined;
readonly endpoints?: Endpoints;
readonly onConflict?: OnConflict;
readonly [portSym]?: number;
}
A
Tag
erased — its transport endpoints set, plus the primary address
(url and/or Unix path) and
ProtocolKind
kind (the first-declared endpoint, kept for
single-protocol readers), so a tag's distributed set is self-describing about where AND how to
reach each one.
AnyNode & { readonly [const catalogSym: typeof catalogSymType-only catalog brand on a
Node
— ROut is erased at runtime (C2 / C4).
catalogSym]?: unknown },
function (type parameter) Serves in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Serves extends type ServeLayerList = readonly [
Layer.Any,
...Layer.Any[]
]
Non-empty serve list — same open-R constraint as
listen
.
ServeLayerList,
>(
node: Node extends AnyNode & { readonly [catalogSym]?: unknown; }node: function (type parameter) Node in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Node,
serves: Serves &
ServesForCatalog<CatalogROut<Node>, Serves>
serves: function (type parameter) Serves in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Serves & type ServesForCatalog<
ROut,
Serves extends ServeLayerList
> = [ROut] extends [never]
? Serves
: [ROut] extends [Layer.Success<Serves[number]>]
? Serves
: never
C3 catalog proof — every ROut member appears in merged serve success.
ServesForCatalog<type CatalogROut<Node> = Node extends {
readonly [catalogSym]?: infer R
}
? Exclude<R, undefined>
: never
CatalogROut<function (type parameter) Node in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Node>, function (type parameter) Serves in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Serves>,
options: IpcListenArgoptions?: type IpcListenArg = string | ListenOptionsPositional listen address for
unix
/
nPipe
— socket/pipe path string or
full
ListenOptions
(unlink, …).
IpcListenArg,
): import LayerLayer.interface Layer<in ROut, out E = never, out RIn = never>A Layer describes how to build one or more services for dependency injection.
When to use
Use to model construction of application services for dependency injection,
especially when services have dependencies, can fail during construction, or
need scoped setup and release.
Details
A Layer<ROut, E, RIn> represents ROut as the services this layer
provides, E as the possible errors during layer construction, and RIn as
the services this layer requires as dependencies.
Layer<
import LayerLayer.type Success<T extends Layer.Any> =
T extends Layer.Layer<
infer _ROut,
infer _E,
infer _RIn
>
? _ROut
: never
Extracts the service output type (ROut) from a Layer type.
When to use
Use to derive the services provided by an existing or generic Layer without
restating its ROut type parameter.
Success<function (type parameter) Serves in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Serves[number]> | class ListenNodeclass ListenNode {
Service: Service;
key: Identifier;
}
The Node a protocol listen (unix / http / ws) is binding (concrete or minted).
Identity claims prefer this over a Tag-bound Node when present.
ListenNode,
import LayerLayer.type Error<T extends Layer.Any> =
T extends Layer.Layer<
infer _ROut,
infer _E,
infer _RIn
>
? _E
: never
Extracts the error type (E) from a Layer type.
When to use
Use to derive a layer construction error type for helper types, wrappers, or
APIs that preserve a layer failure channel.
Error<function (type parameter) Serves in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Serves[number]>,
import LayerLayer.type Services<T extends Layer.Any> =
T extends infer L
? L extends Layer.Layer<
infer _ROut,
infer _E,
infer _RIn
>
? _RIn
: never
: never
Extracts the service requirements (RIn) from a Layer type.
When to use
Use to derive the dependency requirements of a generic or inferred Layer
without restating its RIn type parameter.
Services<function (type parameter) Serves in listenLocal<Node extends AnyNode & {
readonly [catalogSym]?: unknown;
}, Serves extends ServeLayerList>(node: Node, serves: Serves & ServesForCatalog<CatalogROut<Node>, Serves>, options?: IpcListenArg): Layer.Layer<Layer.Success<Serves[number]> | ListenNode, Layer.Error<Serves[number]>, Layer.Services<Serves[number]>>
Serves[number]>
>
export function function listenLocal<
Node extends AnyNode & {
readonly [catalogSym]?: unknown
},
Serves extends ServeLayerList
>(
node: Node,
serves: Serves &
ServesForCatalog<CatalogROut<Node>, Serves>,
options?: IpcListenArg
): Layer.Layer<
Layer.Success<Serves[number]> | ListenNode,
Layer.Error<Serves[number]>,
Layer.Services<Serves[number]>
>
listenLocal(
node: AnyNodenode: type AnyNode = NodeKey<unknown> & {
readonly url: string | undefined;
readonly path: string | undefined;
readonly kind: ProtocolKind | undefined;
readonly endpoints?: Endpoints;
readonly onConflict?: OnConflict;
readonly [portSym]?: number;
}
A
Tag
erased — its transport endpoints set, plus the primary address
(url and/or Unix path) and
ProtocolKind
kind (the first-declared endpoint, kept for
single-protocol readers), so a tag's distributed set is self-describing about where AND how to
reach each one.
AnyNode,
serves: Layer.Any | ServeLayerListserves: import LayerLayer.Any | type ServeLayerList = readonly [
Layer.Any,
...Layer.Any[]
]
Non-empty serve list — same open-R constraint as
listen
.
ServeLayerList,
options: IpcListenArgoptions?: type IpcListenArg = string | ListenOptionsPositional listen address for
unix
/
nPipe
— socket/pipe path string or
full
ListenOptions
(unlink, …).
IpcListenArg,
): import LayerLayer.Any {
return unix<AnyNode, readonly [Layer.Any, ...Layer.Any[]]>(node: AnyNode, serves: readonly [Layer.Any, ...Layer.Any[]], options?: IpcListenArg): Layer.Layer<ListenNode, never, never> (+6 overloads)Unix-domain IPC listen — all ipc mint/bind. Nameless forms Soft-bake
Lookup.layer
(claim + advertise) — override with Layer.provide(Lookup.layerOptions({ path })).
Overload family (keep aligned with
http
/
ws
/
nPipe
):
unix(tag, impl) / unix(tag, impl, path) — unbound Tag → nameless; bound Tag → that Node
unix(tag, impl, node) — named listen without andNode
unix(serve, path?) / unix([serve…], path?) — nameless (brackets optional for one)
unix(node, serve | [serve…], options?) — named node + serves
Path: "/tmp/x.sock" or { unlink, … }; omit for ephemeral. Prefer this for same-machine.
unix(node: AnyNodenode, serves: Layer.Any | ServeLayerListserves as type ServeLayerList = readonly [
Layer.Any,
...Layer.Any[]
]
Non-empty serve list — same open-R constraint as
listen
.
ServeLayerList, options: IpcListenArgoptions)
}