{"version":3,"file":"Explorer.js","names":["Explorer","ExplorerBase","constructor","options","search","searchFrom","process","cwd","startDirectory","getDirectory","result","searchFromDirectory","dir","absoluteDir","path","resolve","run","searchDirectory","nextDir","nextDirectoryToSearch","transformResult","config","transform","searchCache","cacheWrapper","place","searchPlaces","placeResult","loadSearchPlace","shouldSearchStopWithResult","filepath","join","fileContents","readFile","createCosmiconfigResult","loadFileContent","content","trim","undefined","loader","getLoaderEntryForFile","e","fileContent","loadedContentToCosmiconfigResult","load","validateFilePath","absoluteFilePath","runLoad","throwNotFound","loadCache"],"sources":["../src/Explorer.ts"],"sourcesContent":["import path from 'path';\nimport { cacheWrapper } from './cacheWrapper';\nimport { ExplorerBase } from './ExplorerBase';\nimport { getDirectory } from './getDirectory';\nimport { readFile } from './readFile';\nimport { CosmiconfigResult, ExplorerOptions, LoadedFileContent } from './types';\n\nclass Explorer extends ExplorerBase {\n public constructor(options: ExplorerOptions) {\n super(options);\n }\n\n public async search(\n searchFrom: string = process.cwd(),\n ): Promise {\n const startDirectory = await getDirectory(searchFrom);\n const result = await this.searchFromDirectory(startDirectory);\n\n return result;\n }\n\n private async searchFromDirectory(dir: string): Promise {\n const absoluteDir = path.resolve(process.cwd(), dir);\n\n const run = async (): Promise => {\n const result = await this.searchDirectory(absoluteDir);\n const nextDir = this.nextDirectoryToSearch(absoluteDir, result);\n\n if (nextDir) {\n return this.searchFromDirectory(nextDir);\n }\n\n const transformResult = await this.config.transform(result);\n\n return transformResult;\n };\n\n if (this.searchCache) {\n return cacheWrapper(this.searchCache, absoluteDir, run);\n }\n\n return run();\n }\n\n private async searchDirectory(dir: string): Promise {\n for await (const place of this.config.searchPlaces) {\n const placeResult = await this.loadSearchPlace(dir, place);\n\n if (this.shouldSearchStopWithResult(placeResult) === true) {\n return placeResult;\n }\n }\n\n // config not found\n return null;\n }\n\n private async loadSearchPlace(\n dir: string,\n place: string,\n ): Promise {\n const filepath = path.join(dir, place);\n const fileContents = await readFile(filepath);\n\n const result = await this.createCosmiconfigResult(filepath, fileContents);\n\n return result;\n }\n\n private async loadFileContent(\n filepath: string,\n content: string | null,\n ): Promise {\n if (content === null) {\n return null;\n }\n if (content.trim() === '') {\n return undefined;\n }\n const loader = this.getLoaderEntryForFile(filepath);\n try {\n return await loader(filepath, content);\n } catch (e) {\n e.filepath = filepath;\n throw e;\n }\n }\n\n private async createCosmiconfigResult(\n filepath: string,\n content: string | null,\n ): Promise {\n const fileContent = await this.loadFileContent(filepath, content);\n const result = this.loadedContentToCosmiconfigResult(filepath, fileContent);\n\n return result;\n }\n\n public async load(filepath: string): Promise {\n this.validateFilePath(filepath);\n const absoluteFilePath = path.resolve(process.cwd(), filepath);\n\n const runLoad = async (): Promise => {\n const fileContents = await readFile(absoluteFilePath, {\n throwNotFound: true,\n });\n\n const result = await this.createCosmiconfigResult(\n absoluteFilePath,\n fileContents,\n );\n\n const transformResult = await this.config.transform(result);\n\n return transformResult;\n };\n\n if (this.loadCache) {\n return cacheWrapper(this.loadCache, absoluteFilePath, runLoad);\n }\n\n return runLoad();\n }\n}\n\nexport { Explorer };\n"],"mappings":"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"}