import { TRANSPORT_RAW_COMMANDS } from './query/query-policy-capability.js'; export type TransportMode = 'json' | 'raw'; export interface TransportPolicy { preferNative: boolean; allowFallbackToSubprocess: boolean; outputMode: TransportMode; } const DEFAULT_POLICY: TransportPolicy = { preferNative: true, allowFallbackToSubprocess: true, outputMode: 'json', }; const BUILTIN_COMMAND_POLICY: Record> = Object.fromEntries( TRANSPORT_RAW_COMMANDS.map((command) => [command, { outputMode: 'raw' as const }]), ); const COMMAND_POLICY_OVERRIDES: Record> = {}; export function resolveTransportPolicy(command: string): TransportPolicy { const override = { ...(BUILTIN_COMMAND_POLICY[command] ?? {}), ...(COMMAND_POLICY_OVERRIDES[command] ?? {}), }; return { preferNative: override.preferNative ?? DEFAULT_POLICY.preferNative, allowFallbackToSubprocess: override.allowFallbackToSubprocess ?? DEFAULT_POLICY.allowFallbackToSubprocess, outputMode: override.outputMode ?? DEFAULT_POLICY.outputMode, }; } export function setTransportPolicy(command: string, override: Partial): void { COMMAND_POLICY_OVERRIDES[command] = { ...(COMMAND_POLICY_OVERRIDES[command] ?? {}), ...override }; } export function clearTransportPolicy(command?: string): void { if (command) { delete COMMAND_POLICY_OVERRIDES[command]; return; } for (const key of Object.keys(COMMAND_POLICY_OVERRIDES)) { delete COMMAND_POLICY_OVERRIDES[key]; } }