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));