All files / if-check/util args.ts

100% Statements 36/36
100% Branches 7/7
100% Functions 2/2
100% Lines 35/35

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 761x 1x   1x 1x 1x   1x 1x                 1x   1x   1x   1x         1x 8x 8x   2x 1x   1x     1x             1x 8x   6x 3x 3x   3x 1x     2x 1x     1x 3x 2x   2x 1x     1x   1x     1x    
import {parse} from 'ts-command-line-args';
import {ERRORS} from '@grnsft/if-core/utils';
 
import {isDirectoryExists, isFileExists} from '../../common/util/fs';
import {prependFullFilePath, runHelpCommand} from '../../common/util/helpers';
import {checkIfFileIsYaml} from '../../common/util/yaml';
 
import {CONFIG, STRINGS} from '../config';
import {STRINGS as COMMON_STRINGS} from '../../common/config';
 
import {IFCheckArgs} from '../types/process-args';
 
const {
  ParseCliParamsError,
  CliSourceFileError,
  InvalidDirectoryError,
  MissingCliFlagsError,
} = ERRORS;
 
const {ARGS, HELP} = CONFIG;
 
const {IF_CHECK_FLAGS_MISSING} = STRINGS;
const {MANIFEST_NOT_FOUND, SOURCE_IS_NOT_YAML, DIRECTORY_NOT_FOUND} =
  COMMON_STRINGS;
 
/**
 * Parses `if-check` process arguments.
 */
const validateAndParseIfCheckArgs = () => {
  try {
    return parse<IFCheckArgs>(ARGS, HELP);
  } catch (error) {
    if (error instanceof Error) {
      console.log(error.message);
 
      runHelpCommand('if-check');
    }
 
    throw error;
  }
};
 
/**
 * Checks if either `manifest` or `directory` command is provided.
 */
export const parseIfCheckArgs = async () => {
  const {manifest, directory} = validateAndParseIfCheckArgs();
 
  if (manifest) {
    const response = prependFullFilePath(manifest);
    const isManifestFileExists = await isFileExists(response);
 
    if (!isManifestFileExists) {
      throw new ParseCliParamsError(MANIFEST_NOT_FOUND);
    }
 
    if (checkIfFileIsYaml(manifest)) {
      return {manifest};
    }
 
    throw new CliSourceFileError(SOURCE_IS_NOT_YAML);
  } else if (directory) {
    const isDirExists = await isDirectoryExists(directory);
 
    if (!isDirExists) {
      throw new InvalidDirectoryError(DIRECTORY_NOT_FOUND);
    }
 
    const response = prependFullFilePath(directory);
 
    return {directory: response};
  }
 
  throw new MissingCliFlagsError(IF_CHECK_FLAGS_MISSING);
};