From 4d9de376cea99eee2c7c2a500edb94cbb13b8980 Mon Sep 17 00:00:00 2001 From: hasezoey Date: Sun, 21 Feb 2021 12:48:33 +0100 Subject: [PATCH] fix(resolveConfig): change to use the first found package.json with an non-empty config field fixes #439 --- .../src/util/resolveConfig.ts | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts index 240f028d6..001c6e081 100644 --- a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts +++ b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts @@ -1,10 +1,15 @@ import camelCase from 'camelcase'; -import finder from 'find-package-json'; +import finder, { FinderIterator, Package } from 'find-package-json'; import debug from 'debug'; import * as path from 'path'; const log = debug('MongoMS:ResolveConfig'); +// Workaround, because that package dosnt implement the default iterator +interface CustomFinderIterator extends FinderIterator { + [Symbol.iterator](): Iterator; +} + export enum ResolveConfigVariables { DOWNLOAD_DIR = 'DOWNLOAD_DIR', PLATFORM = 'PLATFORM', @@ -41,9 +46,17 @@ let packageJsonConfig: Record = {}; * @param directory Set an custom directory to search the config in (default: process.cwd()) */ export function findPackageJson(directory?: string): Record { - const finderIterator = finder(directory || process.cwd()).next(); - log(`Using package.json at "${finderIterator.filename}"`); - packageJsonConfig = finderIterator.value?.config?.mongodbMemoryServer ?? {}; + for (const found of finder(directory || process.cwd()) as CustomFinderIterator) { + log(`findPackageJson: Found package.json"`); + + if (Object.keys(found?.config?.mongodbMemoryServer ?? {}).length > 0) { + log(`findPackageJson: Found package with non-empty config field"`); + + // the optional chaining is needed, because typescript wont accept an "isNullOrUndefined" in the if with "&& Object.keys" + packageJsonConfig = found?.config?.mongodbMemoryServer; + break; + } + } // block for all file-path resolving {