import type { QueryNativeDirectAdapter } from './query-native-direct-adapter.js'; /** * Adapter Module for runner hot-path native commands. */ export class QueryNativeHotpathAdapter { constructor( private readonly shouldUseNativeQuery: () => boolean, private readonly nativeDirect: QueryNativeDirectAdapter, private readonly execJsonFallback: (legacyCommand: string, legacyArgs: string[]) => Promise, private readonly execRawFallback: (legacyCommand: string, legacyArgs: string[]) => Promise, ) {} async dispatch( legacyCommand: string, legacyArgs: string[], registryCommand: string, registryArgs: string[], mode: 'json' | 'raw', ): Promise { if (!this.shouldUseNativeQuery()) { return this.dispatchFallback(legacyCommand, legacyArgs, mode); } return this.dispatchNative(legacyCommand, legacyArgs, registryCommand, registryArgs, mode); } private dispatchFallback(legacyCommand: string, legacyArgs: string[], mode: 'json' | 'raw'): Promise { return mode === 'raw' ? this.execRawFallback(legacyCommand, legacyArgs) : this.execJsonFallback(legacyCommand, legacyArgs); } private dispatchNative( legacyCommand: string, legacyArgs: string[], registryCommand: string, registryArgs: string[], mode: 'json' | 'raw', ): Promise { return mode === 'raw' ? this.nativeDirect.dispatchRaw(legacyCommand, legacyArgs, registryCommand, registryArgs) : this.nativeDirect.dispatchJson(legacyCommand, legacyArgs, registryCommand, registryArgs); } }