46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
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<unknown>,
|
|
private readonly execRawFallback: (legacyCommand: string, legacyArgs: string[]) => Promise<string>,
|
|
) {}
|
|
|
|
async dispatch(
|
|
legacyCommand: string,
|
|
legacyArgs: string[],
|
|
registryCommand: string,
|
|
registryArgs: string[],
|
|
mode: 'json' | 'raw',
|
|
): Promise<unknown> {
|
|
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<unknown> {
|
|
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<unknown> {
|
|
return mode === 'raw'
|
|
? this.nativeDirect.dispatchRaw(legacyCommand, legacyArgs, registryCommand, registryArgs)
|
|
: this.nativeDirect.dispatchJson(legacyCommand, legacyArgs, registryCommand, registryArgs);
|
|
}
|
|
}
|