Railway approach

by AntowaKartowa

JavaScript

// railways.js
const Success = result => Promise.resolve(result);
const Failure = error => Promise.reject(error);

// export { Success, Failure};



// calculations.js

const checkIfIsString = input =>
  typeof input === "string" ? Success(true) : Failure("Input is not a string");

const trimString = input => input.trim();

const checkIsValidNumber = input =>
  /^\d{3}$/g.test(input) ? Success(true) : Failure("Input has invalid value");

const doubleValue = input => {
  let result = 0;
  let order = input.length - 1;

  for (let digit of input) result += +digit * 2 * 10 ** order--;

  return result;
};

// export { checkIfString, trimString, checkIsValidNumber, doubleValue };



// process-input.js

const processInput = async input => {
  await checkIfIsString(input);
  const trimmed = trimString(input);
  await checkIsValidNumber(trimmed);

  return doubleValue(trimmed);
};

// export { processInput };



// index.js

processInput(4327)
/* processInput(" 4327 ") */
/* processInput("  475 ") */
  .then((result) => console.log("success", result))
  .catch((error) => console.log("failed", error));