82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //      
 | |
| 'use strict';
 | |
| 
 | |
| const os = require('os');
 | |
| const createExplorer = require('./createExplorer');
 | |
| const loaders = require('./loaders');
 | |
| 
 | |
| module.exports = cosmiconfig;
 | |
| 
 | |
| function cosmiconfig(
 | |
|   moduleName        ,
 | |
|   options   
 | |
|                          
 | |
|                      
 | |
|                                  
 | |
|                                       
 | |
|                      
 | |
|                     
 | |
|                                                        
 | |
|    
 | |
| ) {
 | |
|   options = options || {};
 | |
|   const defaults = {
 | |
|     packageProp: moduleName,
 | |
|     searchPlaces: [
 | |
|       'package.json',
 | |
|       `.${moduleName}rc`,
 | |
|       `.${moduleName}rc.json`,
 | |
|       `.${moduleName}rc.yaml`,
 | |
|       `.${moduleName}rc.yml`,
 | |
|       `.${moduleName}rc.js`,
 | |
|       `${moduleName}.config.js`,
 | |
|     ],
 | |
|     ignoreEmptySearchPlaces: true,
 | |
|     stopDir: os.homedir(),
 | |
|     cache: true,
 | |
|     transform: identity,
 | |
|   };
 | |
|   const normalizedOptions                  = Object.assign(
 | |
|     {},
 | |
|     defaults,
 | |
|     options,
 | |
|     {
 | |
|       loaders: normalizeLoaders(options.loaders),
 | |
|     }
 | |
|   );
 | |
| 
 | |
|   return createExplorer(normalizedOptions);
 | |
| }
 | |
| 
 | |
| cosmiconfig.loadJs = loaders.loadJs;
 | |
| cosmiconfig.loadJson = loaders.loadJson;
 | |
| cosmiconfig.loadYaml = loaders.loadYaml;
 | |
| 
 | |
| function normalizeLoaders(rawLoaders         )          {
 | |
|   const defaults = {
 | |
|     '.js': { sync: loaders.loadJs, async: loaders.loadJs },
 | |
|     '.json': { sync: loaders.loadJson, async: loaders.loadJson },
 | |
|     '.yaml': { sync: loaders.loadYaml, async: loaders.loadYaml },
 | |
|     '.yml': { sync: loaders.loadYaml, async: loaders.loadYaml },
 | |
|     noExt: { sync: loaders.loadYaml, async: loaders.loadYaml },
 | |
|   };
 | |
| 
 | |
|   if (!rawLoaders) {
 | |
|     return defaults;
 | |
|   }
 | |
| 
 | |
|   return Object.keys(rawLoaders).reduce((result, ext) => {
 | |
|     const entry = rawLoaders && rawLoaders[ext];
 | |
|     if (typeof entry === 'function') {
 | |
|       result[ext] = { sync: entry, async: entry };
 | |
|     } else {
 | |
|       result[ext] = entry;
 | |
|     }
 | |
|     return result;
 | |
|   }, defaults);
 | |
| }
 | |
| 
 | |
| function identity(x) {
 | |
|   return x;
 | |
| }
 |