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);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |