InjectSocket
Recursively walks a socket schema and rebuilds every
Listener
/
Emitter
leaf with the
SDK's actual socket type injected into the
Socket
generic slot. Lets users omit
socket
from their
ListenerModel<{...}>
/
EmitterModel<{...}>
declarations - the SDK fills it
in from the socket passed to
createSocketSdk(socket)
.
Non-leaf values (primitive types, plain values) are passed through unchanged. Nested schema objects are recursed into. Depth is guarded at 10 levels to keep the type checker within reasonable bounds.
Import
import { InjectSocket } from "@hyper-fetch/sockets"
Source
Package
Preview
type InjectSocket<T,S,Depth> = Depth[length] extends 10 ? T : T extends ListenerInstance ? Listener<ExtractListenerResponseType<T>, ExtractListenerTopicType<T> extends string ? ExtractListenerTopicType<T> : string, S, ExtractListenerHasParamsType<T> extends boolean ? ExtractListenerHasParamsType<T> : false> : T extends EmitterInstance ? Emitter<ExtractEmitterPayloadType<T>, ExtractEmitterTopicType<T> extends string ? ExtractEmitterTopicType<T> : string, S, ExtractEmitterHasPayloadType<T> extends boolean ? ExtractEmitterHasPayloadType<T> : false, ExtractEmitterHasParamsType<T> extends boolean ? ExtractEmitterHasParamsType<T> : false> : T extends Record<string, any> ? { [ K in keyof T]: InjectSocket<T[K], S, [...Depth, unknown]> } : T;
