























@@ -7,7 +7,10 @@ const { loadPluginManifestRegistryMock } = vi.hoisted(() => ({
77}),
88}));
9910-const { loadBundledPluginPublicArtifactModuleSyncMock } = vi.hoisted(() => {
10+const {
11+ loadBundledPluginPublicArtifactModuleFromCandidatesSyncMock,
12+ loadBundledPluginPublicArtifactModuleSyncMock,
13+} = vi.hoisted(() => {
1114const providerBase = {
1215label: "Fixture",
1316hint: "fixture",
@@ -18,49 +21,74 @@ const { loadBundledPluginPublicArtifactModuleSyncMock } = vi.hoisted(() => {
1821getCredentialValue: () => undefined,
1922setCredentialValue: () => ({}),
2023};
24+const lowLevelLoaderMock = vi.fn(
25+({ dirName, artifactBasename }: { dirName: string; artifactBasename: string }) => {
26+if (dirName === "brave" && artifactBasename === "web-search-contract-api.js") {
27+return {
28+createBraveWebSearchProvider: () => ({
29+ ...providerBase,
30+id: "brave",
31+createTool: () => null,
32+}),
33+};
34+}
35+if (dirName === "mockplugin" && artifactBasename === "web-search-contract-api.js") {
36+return {
37+createFuzzpluginWebSearchProvider: () => {
38+throw new Error("fuzzplugin web provider factory failed");
39+},
40+createMockpluginWebSearchProvider: () => ({
41+ ...providerBase,
42+id: "mockplugin",
43+createTool: () => null,
44+}),
45+};
46+}
47+if (dirName === "fuzzplugin" && artifactBasename === "web-search-contract-api.js") {
48+return {
49+createFuzzpluginWebSearchProvider: () => {
50+throw new Error("fuzzplugin web provider factory failed");
51+},
52+};
53+}
54+if (dirName === "firecrawl" && artifactBasename === "web-fetch-contract-api.js") {
55+return {
56+createFirecrawlWebFetchProvider: () => ({
57+ ...providerBase,
58+id: "firecrawl",
59+createTool: () => null,
60+}),
61+};
62+}
63+throw new Error(
64+`Unable to resolve bundled plugin public surface ${dirName}/${artifactBasename}`,
65+);
66+},
67+);
2168return {
22-loadBundledPluginPublicArtifactModuleSyncMock: vi.fn(
23-({ dirName, artifactBasename }: { dirName: string; artifactBasename: string }) => {
24-if (dirName === "brave" && artifactBasename === "web-search-contract-api.js") {
25-return {
26-createBraveWebSearchProvider: () => ({
27- ...providerBase,
28-id: "brave",
29-createTool: () => null,
30-}),
31-};
69+loadBundledPluginPublicArtifactModuleSyncMock: lowLevelLoaderMock,
70+loadBundledPluginPublicArtifactModuleFromCandidatesSyncMock: vi.fn(
71+({
72+ dirName,
73+ artifactCandidates,
74+}: {
75+dirName: string;
76+artifactCandidates: readonly string[];
77+}) => {
78+for (const artifactBasename of artifactCandidates) {
79+try {
80+return lowLevelLoaderMock({ dirName, artifactBasename });
81+} catch (error) {
82+if (
83+error instanceof Error &&
84+error.message.startsWith("Unable to resolve bundled plugin public surface ")
85+) {
86+continue;
87+}
88+throw error;
89+}
3290}
33-if (dirName === "mockplugin" && artifactBasename === "web-search-contract-api.js") {
34-return {
35-createFuzzpluginWebSearchProvider: () => {
36-throw new Error("fuzzplugin web provider factory failed");
37-},
38-createMockpluginWebSearchProvider: () => ({
39- ...providerBase,
40-id: "mockplugin",
41-createTool: () => null,
42-}),
43-};
44-}
45-if (dirName === "fuzzplugin" && artifactBasename === "web-search-contract-api.js") {
46-return {
47-createFuzzpluginWebSearchProvider: () => {
48-throw new Error("fuzzplugin web provider factory failed");
49-},
50-};
51-}
52-if (dirName === "firecrawl" && artifactBasename === "web-fetch-contract-api.js") {
53-return {
54-createFirecrawlWebFetchProvider: () => ({
55- ...providerBase,
56-id: "firecrawl",
57-createTool: () => null,
58-}),
59-};
60-}
61-throw new Error(
62-`Unable to resolve bundled plugin public surface ${dirName}/${artifactBasename}`,
63-);
91+return null;
6492},
6593),
6694};
@@ -78,6 +106,8 @@ vi.mock("./public-surface-loader.js", async (importOriginal) => {
78106const actual = await importOriginal<typeof import("./public-surface-loader.js")>();
79107return {
80108 ...actual,
109+loadBundledPluginPublicArtifactModuleFromCandidatesSync:
110+loadBundledPluginPublicArtifactModuleFromCandidatesSyncMock,
81111loadBundledPluginPublicArtifactModuleSync: loadBundledPluginPublicArtifactModuleSyncMock,
82112};
83113});
@@ -99,6 +129,7 @@ function expectSingleProvider<T>(providers: T[] | null | undefined): T {
99129describe("web provider public artifacts explicit fast path", () => {
100130beforeEach(() => {
101131loadPluginManifestRegistryMock.mockClear();
132+loadBundledPluginPublicArtifactModuleFromCandidatesSyncMock.mockClear();
102133loadBundledPluginPublicArtifactModuleSyncMock.mockClear();
103134});
104135此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。