import { beforeEach, describe, expect, it, vi } from "vitest" ;
const loadBundledPluginPublicSurfaceModuleSync = vi.hoisted(() => vi.fn());
const loadActivatedBundledPluginPublicSurfaceModuleSync = vi.hoisted(() => vi.fn());
const createLazyFacadeObjectValue = vi.hoisted(() => {
return <T extends object>(load: () => T): T =>
new Proxy(
{},
{
get(_target, property, receiver) {
return Reflect.get(load(), property, receiver);
},
},
) as T;
});
const createLazyFacadeValue = vi.hoisted(() => {
return <T extends object, K extends keyof T>(load: () => T, key: K): T[K] =>
((...args: unknown[]) => {
const value = load()[key];
if (typeof value !== "function" ) {
return value;
}
return (value as (...innerArgs: unknown[]) => unknown)(...args);
}) as T[K];
});
vi.mock("../plugin-sdk/facade-runtime.js" , () => ({
createLazyFacadeObjectValue,
createLazyFacadeValue,
loadActivatedBundledPluginPublicSurfaceModuleSync,
loadBundledPluginPublicSurfaceModuleSync,
}));
describe("tts runtime facade" , () => {
let ttsModulePromise: Promise<typeof import ("./tts.js" )> | undefined;
beforeEach(() => {
loadActivatedBundledPluginPublicSurfaceModuleSync.mockReset();
loadBundledPluginPublicSurfaceModuleSync.mockReset();
});
function importTtsModule() {
ttsModulePromise ??= import ("./tts.js" );
return ttsModulePromise;
}
it("loads speech-core lazily after module import" , async () => {
const buildTtsSystemPromptHint = vi.fn().mockReturnValue("hint" );
loadActivatedBundledPluginPublicSurfaceModuleSync.mockReturnValue({
buildTtsSystemPromptHint,
});
const tts = await importTtsModule();
expect(loadActivatedBundledPluginPublicSurfaceModuleSync).not.toHaveBeenCalled();
expect(tts.buildTtsSystemPromptHint({} as never)).toBe("hint" );
expect(loadActivatedBundledPluginPublicSurfaceModuleSync).toHaveBeenCalledTimes(1 );
expect(buildTtsSystemPromptHint).toHaveBeenCalledTimes(1 );
});
});
Messung V0.5 in Prozent C=100 H=93 G=96
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-05-26)
¤
*© Formatika GbR, Deutschland