






















@@ -1,5 +1,6 @@
11import path from "node:path";
22import type { PluginLoadOptions } from "./loader.js";
3+import type { PluginManifestRecord } from "./manifest-registry.js";
34import { loadPluginManifestRegistryForPluginRegistry } from "./plugin-registry.js";
45import type { PluginWebFetchProviderEntry, PluginWebSearchProviderEntry } from "./types.js";
56import { resolveBundledWebFetchResolutionConfig } from "./web-fetch-providers.shared.js";
@@ -9,7 +10,7 @@ import {
910resolveBundledExplicitWebFetchProvidersFromPublicArtifacts,
1011resolveBundledExplicitWebSearchProvidersFromPublicArtifacts,
1112} from "./web-provider-public-artifacts.explicit.js";
12-import { resolveManifestDeclaredWebProviderCandidatePluginIds } from "./web-provider-resolution-shared.js";
13+import { resolveManifestDeclaredWebProviderCandidates } from "./web-provider-resolution-shared.js";
1314import { resolveBundledWebSearchResolutionConfig } from "./web-search-providers.shared.js";
14151516type BundledWebProviderPublicArtifactParams = {
@@ -20,6 +21,11 @@ type BundledWebProviderPublicArtifactParams = {
2021onlyPluginIds?: readonly string[];
2122};
222324+type BundledCandidateResolution = {
25+pluginIds: string[];
26+manifestRecords?: readonly PluginManifestRecord[];
27+};
28+2329function resolveBundledCandidatePluginIds(params: {
2430contract: "webSearchProviders" | "webFetchProviders";
2531configKey: "webSearch" | "webFetch";
@@ -28,42 +34,52 @@ function resolveBundledCandidatePluginIds(params: {
2834env?: PluginLoadOptions["env"];
2935bundledAllowlistCompat?: boolean;
3036onlyPluginIds?: readonly string[];
31-}): string[] {
37+}): BundledCandidateResolution {
3238if (params.onlyPluginIds && params.onlyPluginIds.length > 0) {
33-return [...new Set(params.onlyPluginIds)].toSorted((left, right) => left.localeCompare(right));
39+return {
40+pluginIds: [...new Set(params.onlyPluginIds)].toSorted((left, right) =>
41+left.localeCompare(right),
42+),
43+};
3444}
3545const resolvedConfig =
3646params.contract === "webSearchProviders"
3747 ? resolveBundledWebSearchResolutionConfig(params).config
3848 : resolveBundledWebFetchResolutionConfig(params).config;
39-return (
40-resolveManifestDeclaredWebProviderCandidatePluginIds({
41-contract: params.contract,
42-configKey: params.configKey,
43-config: resolvedConfig,
44-workspaceDir: params.workspaceDir,
45-env: params.env,
46-onlyPluginIds: params.onlyPluginIds,
47-origin: "bundled",
48-}) ?? []
49-);
49+const candidates = resolveManifestDeclaredWebProviderCandidates({
50+contract: params.contract,
51+configKey: params.configKey,
52+config: resolvedConfig,
53+workspaceDir: params.workspaceDir,
54+env: params.env,
55+onlyPluginIds: params.onlyPluginIds,
56+origin: "bundled",
57+});
58+return {
59+pluginIds: candidates.pluginIds ?? [],
60+ ...(candidates.manifestRecords ? { manifestRecords: candidates.manifestRecords } : {}),
61+};
5062}
51635264function resolveBundledManifestRecordsByPluginId(params: {
5365config?: PluginLoadOptions["config"];
5466workspaceDir?: string;
5567env?: PluginLoadOptions["env"];
5668onlyPluginIds: readonly string[];
69+manifestRecords?: readonly PluginManifestRecord[];
5770}) {
5871const allowedPluginIds = new Set(params.onlyPluginIds);
59-return new Map(
72+const manifestRecords =
73+params.manifestRecords ??
6074loadPluginManifestRegistryForPluginRegistry({
6175config: params.config,
6276workspaceDir: params.workspaceDir,
6377env: params.env,
6478includeDisabled: true,
65-})
66-.plugins.filter((record) => record.origin === "bundled" && allowedPluginIds.has(record.id))
79+}).plugins;
80+return new Map(
81+manifestRecords
82+.filter((record) => record.origin === "bundled" && allowedPluginIds.has(record.id))
6783.map((record) => [record.id, record] as const),
6884);
6985}
@@ -80,11 +96,11 @@ export function resolveBundledWebSearchProvidersFromPublicArtifacts(
8096bundledAllowlistCompat: params.bundledAllowlistCompat,
8197onlyPluginIds: params.onlyPluginIds,
8298});
83-if (pluginIds.length === 0) {
99+if (pluginIds.pluginIds.length === 0) {
84100return [];
85101}
86102const directProviders = resolveBundledExplicitWebSearchProvidersFromPublicArtifacts({
87-onlyPluginIds: pluginIds,
103+onlyPluginIds: pluginIds.pluginIds,
88104});
89105if (directProviders) {
90106return directProviders;
@@ -93,10 +109,11 @@ export function resolveBundledWebSearchProvidersFromPublicArtifacts(
93109config: params.config,
94110workspaceDir: params.workspaceDir,
95111env: params.env,
96-onlyPluginIds: pluginIds,
112+onlyPluginIds: pluginIds.pluginIds,
113+manifestRecords: pluginIds.manifestRecords,
97114});
98115const providers: PluginWebSearchProviderEntry[] = [];
99-for (const pluginId of pluginIds) {
116+for (const pluginId of pluginIds.pluginIds) {
100117const record = recordsByPluginId.get(pluginId);
101118if (!record) {
102119return null;
@@ -125,11 +142,11 @@ export function resolveBundledWebFetchProvidersFromPublicArtifacts(
125142bundledAllowlistCompat: params.bundledAllowlistCompat,
126143onlyPluginIds: params.onlyPluginIds,
127144});
128-if (pluginIds.length === 0) {
145+if (pluginIds.pluginIds.length === 0) {
129146return [];
130147}
131148const directProviders = resolveBundledExplicitWebFetchProvidersFromPublicArtifacts({
132-onlyPluginIds: pluginIds,
149+onlyPluginIds: pluginIds.pluginIds,
133150});
134151if (directProviders) {
135152return directProviders;
@@ -138,10 +155,11 @@ export function resolveBundledWebFetchProvidersFromPublicArtifacts(
138155config: params.config,
139156workspaceDir: params.workspaceDir,
140157env: params.env,
141-onlyPluginIds: pluginIds,
158+onlyPluginIds: pluginIds.pluginIds,
159+manifestRecords: pluginIds.manifestRecords,
142160});
143161const providers: PluginWebFetchProviderEntry[] = [];
144-for (const pluginId of pluginIds) {
162+for (const pluginId of pluginIds.pluginIds) {
145163const record = recordsByPluginId.get(pluginId);
146164if (!record) {
147165return null;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。