60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google Inc. All Rights Reserved. | ||
|  |  * | ||
|  |  * Use of this source code is governed by an MIT-style license that can be | ||
|  |  * found in the LICENSE file at https://angular.io/license
 | ||
|  |  */ | ||
|  | 
 | ||
|  | import {dirname, isAbsolute, resolve} from 'path'; | ||
|  | 
 | ||
|  | import {ModuleResolver} from './analyzer'; | ||
|  | 
 | ||
|  | 
 | ||
|  | /** Configuration for a circular dependencies test. */ | ||
|  | export interface CircularDependenciesTestConfig { | ||
|  |   /** Base directory used for shortening paths in the golden file. */ | ||
|  |   baseDir: string; | ||
|  |   /** Path to the golden file that is used for checking and approving. */ | ||
|  |   goldenFile: string; | ||
|  |   /** Glob that resolves source files which should be checked. */ | ||
|  |   glob: string | ||
|  |   /** | ||
|  |    * Optional module resolver function that can be used to resolve modules | ||
|  |    * to absolute file paths. | ||
|  |    */ | ||
|  |   resolveModule?: ModuleResolver; | ||
|  |   /** | ||
|  |    * Optional command that will be displayed if the golden check failed. This can be used | ||
|  |    * to consistently use script aliases for checking/approving the golden. | ||
|  |    */ | ||
|  |   approveCommand?: string; | ||
|  | } | ||
|  | 
 | ||
|  | /** | ||
|  |  * Loads the configuration for the circular dependencies test. If the config cannot be | ||
|  |  * loaded, an error will be printed and the process exists with a non-zero exit code. | ||
|  |  */ | ||
|  | export function loadTestConfig(configPath: string): CircularDependenciesTestConfig { | ||
|  |   const configBaseDir = dirname(configPath); | ||
|  |   const resolveRelativePath = (relativePath: string) => resolve(configBaseDir, relativePath); | ||
|  | 
 | ||
|  |   try { | ||
|  |     const config = require(configPath) as CircularDependenciesTestConfig; | ||
|  |     if (!isAbsolute(config.baseDir)) { | ||
|  |       config.baseDir = resolveRelativePath(config.baseDir); | ||
|  |     } | ||
|  |     if (!isAbsolute(config.goldenFile)) { | ||
|  |       config.goldenFile = resolveRelativePath(config.goldenFile); | ||
|  |     } | ||
|  |     if (!isAbsolute(config.glob)) { | ||
|  |       config.glob = resolveRelativePath(config.glob); | ||
|  |     } | ||
|  |     return config; | ||
|  |   } catch (e) { | ||
|  |     console.error('Could not load test configuration file at: ' + configPath); | ||
|  |     console.error(`Failed with: ${e.message}`); | ||
|  |     process.exit(1); | ||
|  |   } | ||
|  | } |