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;
}
Messung V0.5 in Prozent C=99 H=100 G=99
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland