























@@ -14,6 +14,11 @@ type ProviderDiscoveryModule =
1414provider?: ProviderPlugin;
1515};
161617+type ProviderDiscoveryEntryResult = {
18+providers: ProviderPlugin[];
19+complete: boolean;
20+};
21+1722function normalizeDiscoveryModule(value: ProviderDiscoveryModule): ProviderPlugin[] {
1823const resolved =
1924value && typeof value === "object" && "default" in value && value.default !== undefined
@@ -51,17 +56,18 @@ function resolveProviderDiscoveryEntryPlugins(params: {
5156includeUntrustedWorkspacePlugins?: boolean;
5257requireCompleteDiscoveryEntryCoverage?: boolean;
5358discoveryEntriesOnly?: boolean;
54-}): ProviderPlugin[] {
59+}): ProviderDiscoveryEntryResult {
5560const pluginIds = resolveDiscoveredProviderPluginIds(params);
5661const pluginIdSet = new Set(pluginIds);
5762const records = loadPluginManifestRegistry(params).plugins.filter(
5863(plugin) => plugin.providerDiscoverySource && pluginIdSet.has(plugin.id),
5964);
6065if (records.length === 0) {
61-return [];
66+return { providers: [], complete: false };
6267}
63-if (params.requireCompleteDiscoveryEntryCoverage && records.length < pluginIdSet.size) {
64-return [];
68+const complete = records.length === pluginIdSet.size;
69+if (params.requireCompleteDiscoveryEntryCoverage && !complete) {
70+return { providers: [], complete: false };
6571}
6672const loadSource = createPluginSourceLoader();
6773const providers: ProviderPlugin[] = [];
@@ -76,10 +82,10 @@ function resolveProviderDiscoveryEntryPlugins(params: {
7682} catch {
7783// Discovery fast path is optional. Fall back to the full plugin loader
7884// below so existing plugin diagnostics/load behavior remains canonical.
79-return [];
85+return { providers: [], complete: false };
8086}
8187}
82-return providers;
88+return { providers, complete };
8389}
84908591export function resolvePluginDiscoveryProvidersRuntime(params: {
@@ -91,13 +97,16 @@ export function resolvePluginDiscoveryProvidersRuntime(params: {
9197requireCompleteDiscoveryEntryCoverage?: boolean;
9298discoveryEntriesOnly?: boolean;
9399}): ProviderPlugin[] {
94-const entryProviders = resolveProviderDiscoveryEntryPlugins(params);
100+const entryResult = resolveProviderDiscoveryEntryPlugins(params);
95101if (params.discoveryEntriesOnly === true) {
96-return entryProviders;
102+return entryResult.providers;
97103}
98-const liveEntryProviders = entryProviders.filter(hasLiveProviderDiscoveryHook);
99-if (liveEntryProviders.length > 0) {
100-return liveEntryProviders;
104+if (
105+entryResult.complete &&
106+entryResult.providers.length > 0 &&
107+entryResult.providers.every(hasLiveProviderDiscoveryHook)
108+) {
109+return entryResult.providers;
101110}
102111return resolvePluginProviders({
103112 ...params,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。