ConfigParserService.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { ValidationService } from '../validation/ValidationService'
  2. import { Config } from '../../types'
  3. import fs from 'fs'
  4. import path from 'path'
  5. import YAML from 'yaml'
  6. import _ from 'lodash'
  7. export class ConfigParserService {
  8. validator: ValidationService
  9. constructor() {
  10. this.validator = new ValidationService()
  11. }
  12. public resolveConfigDirectoryPaths(paths: Config['directories'], configFilePath: string): Config['directories'] {
  13. return _.mapValues(paths, (v) => path.resolve(configFilePath, v))
  14. }
  15. public loadConfing(configPath: string): Config {
  16. const fileContent = fs.readFileSync(configPath).toString()
  17. let inputConfig: unknown
  18. if (path.extname(configPath) === '.json') {
  19. inputConfig = JSON.parse(fileContent)
  20. } else if (path.extname(configPath) === '.yml' || path.extname(configPath) === '.yaml') {
  21. inputConfig = YAML.parse(fileContent)
  22. } else {
  23. throw new Error('Unrecognized config format (use .yml or .json)')
  24. }
  25. const config = this.validator.validate('Config', inputConfig)
  26. config.directories = this.resolveConfigDirectoryPaths(config.directories, configPath)
  27. return config
  28. }
  29. }