



























@@ -1,5 +1,6 @@
11import { importFreshModule } from "openclaw/plugin-sdk/test-fixtures";
22import { afterEach, describe, expect, it, vi } from "vitest";
3+import type { PluginModuleLoaderFactory } from "./plugin-module-loader-cache.js";
3445afterEach(() => {
56vi.restoreAllMocks();
@@ -22,7 +23,17 @@ async function loadCachedPluginModuleLoader(scope: string) {
2223typeof import("./plugin-module-loader-cache.js")
2324>(import.meta.url, `./plugin-module-loader-cache.js?scope=${scope}`);
242525-return { createJiti, getCachedPluginModuleLoader };
26+const getCachedPluginModuleLoaderWithMock: typeof getCachedPluginModuleLoader = (params) =>
27+getCachedPluginModuleLoader({
28+ ...params,
29+createLoader: params.createLoader ?? asPluginModuleLoaderFactory(createJiti),
30+});
31+32+return { createJiti, getCachedPluginModuleLoader: getCachedPluginModuleLoaderWithMock };
33+}
34+35+function asPluginModuleLoaderFactory(factory: unknown): PluginModuleLoaderFactory {
36+return factory as PluginModuleLoaderFactory;
2637}
27382839describe("getCachedPluginModuleLoader", () => {
@@ -361,7 +372,8 @@ describe("getCachedPluginModuleLoader", () => {
361372it("serves compiled .js targets from native require without invoking the module loader", async () => {
362373const fromSourceTransformer = vi.fn();
363374const createJiti = vi.fn(() => fromSourceTransformer);
364-vi.doMock("jiti", () => ({ createJiti }));
375+const jitiModuleFactory = vi.fn(() => ({ createJiti }));
376+vi.doMock("jiti", jitiModuleFactory);
365377const nativeStub = vi.fn((target: string) => ({
366378ok: true as const,
367379moduleExport: { loadedFrom: target },
@@ -381,12 +393,14 @@ describe("getCachedPluginModuleLoader", () => {
381393modulePath: "/repo/dist/extensions/demo/api.js",
382394importerUrl: "file:///repo/src/plugins/public-surface-loader.ts",
383395loaderFilename: "file:///repo/src/plugins/public-surface-loader.ts",
396+createLoader: asPluginModuleLoaderFactory(createJiti),
384397});
385398386399const result = loader("/repo/dist/extensions/demo/api.js") as { loadedFrom: string };
387400expect(result.loadedFrom).toBe("/repo/dist/extensions/demo/api.js");
388401// Jiti should not be constructed or invoked for .js targets that
389402// `tryNativeRequireJavaScriptModule` resolves.
403+expect(jitiModuleFactory).not.toHaveBeenCalled();
390404expect(createJiti).not.toHaveBeenCalled();
391405expect(fromSourceTransformer).not.toHaveBeenCalled();
392406// allowWindows must be passed so the native fast path works on Windows too.
@@ -420,6 +434,7 @@ describe("getCachedPluginModuleLoader", () => {
420434modulePath: "/repo/dist/extensions/demo/api.js",
421435importerUrl: "file:///repo/src/plugins/public-surface-loader.ts",
422436loaderFilename: "file:///repo/src/plugins/public-surface-loader.ts",
437+createLoader: asPluginModuleLoaderFactory(createJiti),
423438});
424439425440const result = loader("/repo/dist/extensions/demo/api.js") as { fromSourceTransform: boolean };
@@ -455,6 +470,7 @@ describe("getCachedPluginModuleLoader", () => {
455470importerUrl: "file:///C:/Users/alice/openclaw/dist/src/plugins/public-surface-loader.js",
456471loaderFilename: "C:\\Users\\alice\\openclaw\\dist\\extensions\\feishu\\api.js",
457472tryNative: true,
473+createLoader: asPluginModuleLoaderFactory(createJiti),
458474});
459475460476loader("C:\\Users\\alice\\openclaw\\dist\\extensions\\feishu\\api.js");
@@ -489,6 +505,7 @@ describe("getCachedPluginModuleLoader", () => {
489505loaderFilename: "file:///repo/src/plugins/bundled-capability-runtime.ts",
490506aliasMap: { "openclaw/plugin-sdk": "/repo/shim.js" },
491507tryNative: false,
508+createLoader: asPluginModuleLoaderFactory(createJiti),
492509});
493510494511const result = loader("/repo/dist/extensions/demo/api.js") as { fromSourceTransform: boolean };
@@ -528,6 +545,7 @@ describe("getCachedPluginModuleLoader", () => {
528545importerUrl: "file:///C:/Users/alice/openclaw/src/plugins/loader.ts",
529546loaderFilename: "C:\\Users\\alice\\openclaw\\extensions\\feishu\\api.ts",
530547tryNative: false,
548+createLoader: asPluginModuleLoaderFactory(createJiti),
531549});
532550533551loader("C:\\Users\\alice\\openclaw\\extensions\\feishu\\api.ts");
@@ -560,6 +578,7 @@ describe("getCachedPluginModuleLoader", () => {
560578modulePath: "/repo/dist/extensions/demo/api.js",
561579importerUrl: "file:///repo/src/plugins/public-surface-loader.ts",
562580loaderFilename: "file:///repo/src/plugins/public-surface-loader.ts",
581+createLoader: asPluginModuleLoaderFactory(createJiti),
563582});
564583565584const loose = loader as unknown as (t: string, ...a: unknown[]) => unknown;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。