@@ -5,7 +5,7 @@ import { isDaemonControlMessageKind } from './DaemonControlMessage';
55import { DaemonProtocolError } from './DaemonProtocolError' ;
66import { isDaemonVerbosity } from './DaemonVerbosity' ;
77
8- /** Returns `true` when `value` is a plain object. @beta */
8+ /** Returns `true` when `value` is a non-null object usable as a control record . @beta */
99export function isDaemonControlRecord ( value : unknown ) : value is Record < string , unknown > {
1010 return typeof value === 'object' && value !== null ;
1111}
@@ -45,6 +45,12 @@ function validateHelloAck(payload: Record<string, unknown>): void {
4545 requireStringField ( payload , 'sessionId' ) ;
4646}
4747
48+ function validatePong ( payload : Record < string , unknown > ) : void {
49+ if ( payload . daemonVersion !== undefined ) requireStringField ( payload , 'daemonVersion' ) ;
50+ if ( payload . protocolVersion !== undefined ) requireVersion ( payload ) ;
51+ requireNumberField ( payload , 'uptimeMs' ) ;
52+ }
53+
4854function validateSubscribe ( payload : Record < string , unknown > ) : void {
4955 if ( typeof payload . isTTY !== 'boolean' ) {
5056 fail ( 'Subscribe message payload.isTTY must be a boolean.' ) ;
@@ -73,13 +79,11 @@ const VALIDATORS_BY_KIND: Record<string, ControlValidator> = {
7379 subscribe : validateSubscribe ,
7480 unsubscribe : noopValidator ,
7581 ping : noopValidator ,
76- pong : ( payload : Record < string , unknown > ) => requireNumberField ( payload , 'uptimeMs' ) ,
82+ pong : validatePong ,
7783 error : validateError
7884} ;
7985
80- /**
81- * Structurally validates a parsed control message.
82- *
86+ /** Structurally validates a parsed control message.
8387 * @throws {@link DaemonProtocolError } when the value is not a well-formed control message.
8488 *
8589 * @beta
0 commit comments