XasCode/terrafile-backend-lib

View on GitHub
src/backend/venDir.ts

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import * as path from 'path';
import { validOptions } from '../backend/utils';
import { CliOptions, Option, Path, Status } from './types';

function cleanUpOldSaveLocation(dir: Path, options: CliOptions): void {
  options.fsHelpers.rimrafDir(dir);
}

function getSaveLocation(dir: Path): Path {
  return path.resolve(dir, `..`, `.terrafile.save`);
}

function renameExistingDir(installDir: Path, options: CliOptions): Path {
  let retVal = null;
  if (options.fsHelpers.checkIfDirExists(installDir).value) {
    const saveLocation = getSaveLocation(installDir);
    cleanUpOldSaveLocation(saveLocation, options);
    options.fsHelpers.renameDir(installDir, saveLocation);
    retVal = saveLocation;
  }
  return retVal;
}

function createNewDir(installDir: Path, options: CliOptions): Path {
  const createdStartingAt = options.fsHelpers.createDir(installDir).value;
  return createdStartingAt !== undefined ? createdStartingAt : null;
}

function createTargetDirectory(options: CliOptions): Status {
  const retVals: Status = { success: false, saved: null, created: null };
  const useCreateDir = options && options.createDir ? options.createDir : createNewDir;
  if (validOptions(options, `directory` as Option)) {
    const installDir = options.fsHelpers.getAbsolutePath(options.directory).value;
    retVals.saved = renameExistingDir(installDir, options);
    retVals.created = useCreateDir(installDir, options);
    retVals.success = options.fsHelpers.checkIfDirExists(installDir).value;
  }
  return retVals;
}

export { createTargetDirectory, getSaveLocation };