Files
clawdbot/src/browser/pw-ai-module.ts
Peter Steinberger a76cbc43bb fix(browser): remote profile tab ops follow-up (#1060) (thanks @mukhtharcm)
Landed via follow-up to #1057.

Gate: pnpm lint && pnpm build && pnpm test
2026-01-17 01:28:22 +00:00

42 lines
1.3 KiB
TypeScript

import { extractErrorCode, formatErrorMessage } from "../infra/errors.js";
export type PwAiModule = typeof import("./pw-ai.js");
type PwAiLoadMode = "soft" | "strict";
let pwAiModuleSoft: Promise<PwAiModule | null> | null = null;
let pwAiModuleStrict: Promise<PwAiModule | null> | null = null;
function isModuleNotFoundError(err: unknown): boolean {
const code = extractErrorCode(err);
if (code === "ERR_MODULE_NOT_FOUND") return true;
const msg = formatErrorMessage(err);
return (
msg.includes("Cannot find module") ||
msg.includes("Cannot find package") ||
msg.includes("Failed to resolve import") ||
msg.includes("Failed to resolve entry for package") ||
msg.includes("Failed to load url")
);
}
async function loadPwAiModule(mode: PwAiLoadMode): Promise<PwAiModule | null> {
try {
return await import("./pw-ai.js");
} catch (err) {
if (mode === "soft") return null;
if (isModuleNotFoundError(err)) return null;
throw err;
}
}
export async function getPwAiModule(opts?: { mode?: PwAiLoadMode }): Promise<PwAiModule | null> {
const mode: PwAiLoadMode = opts?.mode ?? "soft";
if (mode === "soft") {
if (!pwAiModuleSoft) pwAiModuleSoft = loadPwAiModule("soft");
return await pwAiModuleSoft;
}
if (!pwAiModuleStrict) pwAiModuleStrict = loadPwAiModule("strict");
return await pwAiModuleStrict;
}