Skip to main content
Version: v8.0.0

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"

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;