import * as path from 'path' ; import { JsonSchema , JsonFile , NewlineKind } from '@rushstack/node-core-library' ; import { IConfigFile } from './IConfigFile' ; /**
 * Helper for loading the api-documenter.json file format.  Later when the schema is more mature,
 * this class will be used to represent the validated and normalized configuration, whereas `IConfigFile`
 * represents the raw JSON file structure.
 */ export class DocumenterConfig { public readonly configFilePath : string ; public readonly configFile : IConfigFile ; /**
     * Specifies what type of newlines API Documenter should use when writing output files.  By default, the output files
     * will be written with Windows-style newlines.
     */ public readonly newlineKind : NewlineKind ; /**
     * The JSON Schema for API Extractor config file (api-extractor.schema.json).
     */ public static readonly jsonSchema : JsonSchema = JsonSchema . fromFile ( path . join ( __dirname , '..' , 'schemas' , 'api-documenter.schema.json' ) ) ; /**
     * The config file name "api-extractor.json".
     */ public static readonly FILENAME : string = 'api-documenter.json' ; private constructor ( filePath , configFile ) { this . configFilePath = filePath ; this . configFile = configFile ; switch ( configFile . newlineKind ) { case 'lf' : this . newlineKind = NewlineKind . Lf ; break ; case 'os' : this . newlineKind = NewlineKind . OsDefault ; break ; default : this . newlineKind = NewlineKind . CrLf ; break ; } } /**
     * Load and validate an api-documenter.json file.
     */ public static loadFile ( configFilePath ) { const configFile = JsonFile . loadAndValidate ( configFilePath , DocumenterConfig . jsonSchema ) ; return new DocumenterConfig ( path . resolve ( configFilePath ) , configFile ) ; } }