From 668ebc0941f98f99ac0274398e2fab011196127b Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 4 Mar 2026 20:49:43 +0100 Subject: [PATCH] fix(ai): replace Function-based dynamic imports with module imports (fixes #1814) --- packages/ai/src/env-api-keys.ts | 11 +++++++---- packages/ai/src/providers/openai-codex-responses.ts | 5 +++-- packages/ai/src/providers/register-builtins.ts | 5 +++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/ai/src/env-api-keys.ts b/packages/ai/src/env-api-keys.ts index 3f24a9df..749e074f 100644 --- a/packages/ai/src/env-api-keys.ts +++ b/packages/ai/src/env-api-keys.ts @@ -5,17 +5,20 @@ let _join: typeof import("node:path").join | null = null; type DynamicImport = (specifier: string) => Promise; -const dynamicImport = new Function("specifier", "return import(specifier);") as DynamicImport; +const dynamicImport: DynamicImport = (specifier) => import(specifier); +const NODE_FS_SPECIFIER = "node:" + "fs"; +const NODE_OS_SPECIFIER = "node:" + "os"; +const NODE_PATH_SPECIFIER = "node:" + "path"; // Eagerly load in Node.js/Bun environment only if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) { - dynamicImport("node:fs").then((m) => { + dynamicImport(NODE_FS_SPECIFIER).then((m) => { _existsSync = (m as typeof import("node:fs")).existsSync; }); - dynamicImport("node:os").then((m) => { + dynamicImport(NODE_OS_SPECIFIER).then((m) => { _homedir = (m as typeof import("node:os")).homedir; }); - dynamicImport("node:path").then((m) => { + dynamicImport(NODE_PATH_SPECIFIER).then((m) => { _join = (m as typeof import("node:path")).join; }); } diff --git a/packages/ai/src/providers/openai-codex-responses.ts b/packages/ai/src/providers/openai-codex-responses.ts index 81f23f03..96de4cc7 100644 --- a/packages/ai/src/providers/openai-codex-responses.ts +++ b/packages/ai/src/providers/openai-codex-responses.ts @@ -6,10 +6,11 @@ let _os: typeof NodeOs | null = null; type DynamicImport = (specifier: string) => Promise; -const dynamicImport = new Function("specifier", "return import(specifier);") as DynamicImport; +const dynamicImport: DynamicImport = (specifier) => import(specifier); +const NODE_OS_SPECIFIER = "node:" + "os"; if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) { - dynamicImport("node:os").then((m) => { + dynamicImport(NODE_OS_SPECIFIER).then((m) => { _os = m as typeof NodeOs; }); } diff --git a/packages/ai/src/providers/register-builtins.ts b/packages/ai/src/providers/register-builtins.ts index b497d133..95c1127c 100644 --- a/packages/ai/src/providers/register-builtins.ts +++ b/packages/ai/src/providers/register-builtins.ts @@ -32,7 +32,8 @@ interface BedrockProviderModule { type DynamicImport = (specifier: string) => Promise; -const dynamicImport = new Function("specifier", "return import(specifier);") as DynamicImport; +const dynamicImport: DynamicImport = (specifier) => import(specifier); +const BEDROCK_PROVIDER_SPECIFIER = "./amazon-" + "bedrock.js"; let bedrockProviderModuleOverride: BedrockProviderModule | undefined; @@ -44,7 +45,7 @@ async function loadBedrockProviderModule(): Promise { if (bedrockProviderModuleOverride) { return bedrockProviderModuleOverride; } - const module = await dynamicImport("./amazon-bedrock.js"); + const module = await dynamicImport(BEDROCK_PROVIDER_SPECIFIER); return module as BedrockProviderModule; }