import type { ProviderStreams } from "../types.ts"; import { lazyApi } from "./lazy.ts"; /** * Loads the bedrock implementation through a variable specifier so bundlers * (browser smoke, Bun compile) cannot follow the import into the Node-only * AWS SDK. The `.ts`/`.js` rewrite keeps the trick working from both source * and built output. */ const importNodeOnlyApi = (specifier: string): Promise => { const runtimeSpecifier = import.meta.url.endsWith(".js") ? specifier.replace(/\.ts$/, ".js") : specifier; return import(runtimeSpecifier); }; let bedrockModuleOverride: ProviderStreams | undefined; /** * Overrides the dynamically imported bedrock implementation. Used by the Bun * binary build, where the variable-specifier import cannot be bundled; the * build registers a statically imported module instead. */ export function setBedrockProviderModule(module: ProviderStreams): void { bedrockModuleOverride = module; } export const bedrockConverseStreamApi = (): ProviderStreams => lazyApi( async () => bedrockModuleOverride ?? ((await importNodeOnlyApi("./bedrock-converse-stream.ts")) as ProviderStreams), );