From 7bf21b91f994a7915f1469cce70e2b8b47d953f0 Mon Sep 17 00:00:00 2001 From: Benjie Gillam Date: Tue, 1 Oct 2024 12:18:06 +0100 Subject: [PATCH] Trust disabled plugins from already resolved presets --- utils/graphile-config/src/resolvePresets.ts | 34 +++++++++++++-------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/utils/graphile-config/src/resolvePresets.ts b/utils/graphile-config/src/resolvePresets.ts index 63682917e..b422f1382 100644 --- a/utils/graphile-config/src/resolvePresets.ts +++ b/utils/graphile-config/src/resolvePresets.ts @@ -65,19 +65,18 @@ export function resolvePresets(presets: ReadonlyArray) { } } - const seenPlugins = new Set(); - const resolvedPreset = resolvePresetsInternal(presets, seenPlugins, 0); + const seenPluginNames = new Set(); + const resolvedPreset = resolvePresetsInternal(presets, seenPluginNames, 0); - const seenNames = [...seenPlugins].map((p) => p.name); const disabledButNotSeen = resolvedPreset.disablePlugins?.filter( - (n) => !seenNames.includes(n), + (n) => !seenPluginNames.has(n), ); if (disabledButNotSeen?.length) { console.warn( `One or more of the plugin(s) entered in your preset's 'disablePlugins' list was never seen - perhaps you have misspelled them?\n${disabledButNotSeen .map((p) => ` - ${p}`) .join("\n")}\nThe list of know plugins is:\n ${ - seenNames.join(", ") ?? "-" + [...seenPluginNames].join(", ") ?? "-" }`, ); } @@ -87,17 +86,22 @@ export function resolvePresets(presets: ReadonlyArray) { function resolvePresetsInternal( presets: ReadonlyArray, - seenPlugins: Set, + seenPluginNames: Set, depth: number, ): GraphileConfig.ResolvedPreset { const finalPreset = blankResolvedPreset(); for (const preset of presets) { + if (isResolvedPreset(preset) && preset.disablePlugins) { + for (const p of preset.disablePlugins) { + seenPluginNames.add(p); + } + } const resolvedPreset = resolvePresetInternal( preset, - seenPlugins, + seenPluginNames, depth + 1, ); - mergePreset(finalPreset, resolvedPreset, seenPlugins, depth); + mergePreset(finalPreset, resolvedPreset, seenPluginNames, depth); } if (finalPreset.plugins) { finalPreset.plugins = sortWithBeforeAfterProvides( @@ -187,7 +191,7 @@ function isForbiddenPluginKey(key: string): boolean { */ function resolvePresetInternal( preset: GraphileConfig.Preset, - seenPlugins: Set, + seenPluginNames: Set, depth: number, ): GraphileConfig.ResolvedPreset { if (!isGraphileConfigPreset(preset)) { @@ -228,10 +232,14 @@ function resolvePresetInternal( } const { extends: presets = [], ...rest } = preset; - const basePreset = resolvePresetsInternal(presets, seenPlugins, depth + 1); + const basePreset = resolvePresetsInternal( + presets, + seenPluginNames, + depth + 1, + ); try { - mergePreset(basePreset, rest, seenPlugins, depth); + mergePreset(basePreset, rest, seenPluginNames, depth); return basePreset; } catch (e) { throw new Error( @@ -251,14 +259,14 @@ function resolvePresetInternal( function mergePreset( targetPreset: GraphileConfig.ResolvedPreset, sourcePreset: GraphileConfig.ResolvedPreset, - seenPlugins: Set, + seenPluginNames: Set, _depth: number, ): void { const sourcePluginNames: string[] = []; if (sourcePreset.plugins) { for (const plugin of sourcePreset.plugins) { assertPlugin(plugin); - seenPlugins.add(plugin); + seenPluginNames.add(plugin.name); sourcePluginNames.push(plugin.name); } }