From 5c01269be42039b40b1afd680bd7ab858f59d16f Mon Sep 17 00:00:00 2001 From: Laurin Quast Date: Wed, 7 Jul 2021 22:34:30 +0200 Subject: [PATCH] fix: ensure next loader will be used if first one does not yield a result --- packages/load/src/load-typedefs/load-file.ts | 11 +++++++++-- .../loaders/documents/documents-from-glob.spec.ts | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/load/src/load-typedefs/load-file.ts b/packages/load/src/load-typedefs/load-file.ts index ee7944a7426..237adce9ac0 100644 --- a/packages/load/src/load-typedefs/load-file.ts +++ b/packages/load/src/load-typedefs/load-file.ts @@ -1,4 +1,4 @@ -import { Source, Maybe } from '@graphql-tools/utils'; +import { Source, Maybe, isSome } from '@graphql-tools/utils'; import { env } from 'process'; import { LoadTypedefsOptions } from '../load-typedefs'; @@ -15,6 +15,9 @@ export async function loadFile(pointer: string, options: LoadTypedefsOptions): P if (canLoad) { const loadedValue = await loader.load(pointer, options); + if (!isSome(loadedValue) || loadedValue.length === 0) { + continue; + } return loadedValue; } } catch (error) { @@ -41,7 +44,11 @@ export function loadFileSync(pointer: string, options: LoadTypedefsOptions): May if (canLoad) { // We check for the existence so it is okay to force non null - return loader.loadSync!(pointer, options); + const loadedValue = loader.loadSync!(pointer, options); + if (!isSome(loadedValue) || loadedValue.length === 0) { + continue; + } + return loadedValue; } } catch (error) { if (env['DEBUG']) { diff --git a/packages/load/tests/loaders/documents/documents-from-glob.spec.ts b/packages/load/tests/loaders/documents/documents-from-glob.spec.ts index d8ebedf3283..27ddbe34fab 100644 --- a/packages/load/tests/loaders/documents/documents-from-glob.spec.ts +++ b/packages/load/tests/loaders/documents/documents-from-glob.spec.ts @@ -133,5 +133,12 @@ describe('documentsFromGlob', () => { }); expect(result.length).toBe(1); }); + test(`should try next loader if first one fails`, async () => { + const glob = join(__dirname, './test-with-brackets/', '**/*.ts'); + const result = await load(glob, { + loaders: [new GraphQLFileLoader(), new CodeFileLoader()], + }); + expect(result.length).toBe(1); + }) }) });