You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					118 lines
				
				3.1 KiB
			
		
		
			
		
	
	
					118 lines
				
				3.1 KiB
			| 
											3 years ago
										 | "use strict"; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, "__esModule", { | ||
|  |   value: true | ||
|  | }); | ||
|  | exports.Explorer = void 0; | ||
|  | 
 | ||
|  | var _path = _interopRequireDefault(require("path")); | ||
|  | 
 | ||
|  | var _ExplorerBase = require("./ExplorerBase"); | ||
|  | 
 | ||
|  | var _readFile = require("./readFile"); | ||
|  | 
 | ||
|  | var _cacheWrapper = require("./cacheWrapper"); | ||
|  | 
 | ||
|  | var _getDirectory = require("./getDirectory"); | ||
|  | 
 | ||
|  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
|  | 
 | ||
|  | class Explorer extends _ExplorerBase.ExplorerBase { | ||
|  |   constructor(options) { | ||
|  |     super(options); | ||
|  |   } | ||
|  | 
 | ||
|  |   async search(searchFrom = process.cwd()) { | ||
|  |     const startDirectory = await (0, _getDirectory.getDirectory)(searchFrom); | ||
|  |     const result = await this.searchFromDirectory(startDirectory); | ||
|  |     return result; | ||
|  |   } | ||
|  | 
 | ||
|  |   async searchFromDirectory(dir) { | ||
|  |     const absoluteDir = _path.default.resolve(process.cwd(), dir); | ||
|  | 
 | ||
|  |     const run = async () => { | ||
|  |       const result = await this.searchDirectory(absoluteDir); | ||
|  |       const nextDir = this.nextDirectoryToSearch(absoluteDir, result); | ||
|  | 
 | ||
|  |       if (nextDir) { | ||
|  |         return this.searchFromDirectory(nextDir); | ||
|  |       } | ||
|  | 
 | ||
|  |       const transformResult = await this.config.transform(result); | ||
|  |       return transformResult; | ||
|  |     }; | ||
|  | 
 | ||
|  |     if (this.searchCache) { | ||
|  |       return (0, _cacheWrapper.cacheWrapper)(this.searchCache, absoluteDir, run); | ||
|  |     } | ||
|  | 
 | ||
|  |     return run(); | ||
|  |   } | ||
|  | 
 | ||
|  |   async searchDirectory(dir) { | ||
|  |     for await (const place of this.config.searchPlaces) { | ||
|  |       const placeResult = await this.loadSearchPlace(dir, place); | ||
|  | 
 | ||
|  |       if (this.shouldSearchStopWithResult(placeResult) === true) { | ||
|  |         return placeResult; | ||
|  |       } | ||
|  |     } // config not found
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     return null; | ||
|  |   } | ||
|  | 
 | ||
|  |   async loadSearchPlace(dir, place) { | ||
|  |     const filepath = _path.default.join(dir, place); | ||
|  | 
 | ||
|  |     const fileContents = await (0, _readFile.readFile)(filepath); | ||
|  |     const result = await this.createCosmiconfigResult(filepath, fileContents); | ||
|  |     return result; | ||
|  |   } | ||
|  | 
 | ||
|  |   async loadFileContent(filepath, content) { | ||
|  |     if (content === null) { | ||
|  |       return null; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (content.trim() === '') { | ||
|  |       return undefined; | ||
|  |     } | ||
|  | 
 | ||
|  |     const loader = this.getLoaderEntryForFile(filepath); | ||
|  |     const loaderResult = await loader(filepath, content); | ||
|  |     return loaderResult; | ||
|  |   } | ||
|  | 
 | ||
|  |   async createCosmiconfigResult(filepath, content) { | ||
|  |     const fileContent = await this.loadFileContent(filepath, content); | ||
|  |     const result = this.loadedContentToCosmiconfigResult(filepath, fileContent); | ||
|  |     return result; | ||
|  |   } | ||
|  | 
 | ||
|  |   async load(filepath) { | ||
|  |     this.validateFilePath(filepath); | ||
|  | 
 | ||
|  |     const absoluteFilePath = _path.default.resolve(process.cwd(), filepath); | ||
|  | 
 | ||
|  |     const runLoad = async () => { | ||
|  |       const fileContents = await (0, _readFile.readFile)(absoluteFilePath, { | ||
|  |         throwNotFound: true | ||
|  |       }); | ||
|  |       const result = await this.createCosmiconfigResult(absoluteFilePath, fileContents); | ||
|  |       const transformResult = await this.config.transform(result); | ||
|  |       return transformResult; | ||
|  |     }; | ||
|  | 
 | ||
|  |     if (this.loadCache) { | ||
|  |       return (0, _cacheWrapper.cacheWrapper)(this.loadCache, absoluteFilePath, runLoad); | ||
|  |     } | ||
|  | 
 | ||
|  |     return runLoad(); | ||
|  |   } | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | exports.Explorer = Explorer; | ||
|  | //# sourceMappingURL=Explorer.js.map
 |