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 {