Message Mixer

I am on step 3 of Message Mixer and it is telling me that I should receive an error. However, when I run my code there is no error that pops up. Did I forget to move something?

message-mixer.js

const encryptionMethod = getEncryptionMethod(); process.stdin.on('data', (userInput) => { displayEncryptedMessage(encryptionMethod, userInput); }); /* Helper function for determining which cipher method the user chose when they ran the program. */ function getEncryptionMethod() { let encryptionMethod; const encryptionType = process.argv[2]; if (encryptionType === 'symbol') { encryptionMethod = symbolCipher; } else if (encryptionType === 'reverse') { encryptionMethod = reverseCipher; } else if (encryptionType === 'caesar') { let amount = Number(process.argv[3]); if (Number.isNaN(amount)) { process.stdout.write(`Try again with a valid amount argument. \n`) process.exit(); } encryptionMethod = (str) => caesarCipher(str, amount); } else { process.stdout.write(`Try again with a valid encryption type. \n`) process.exit(); } process.stdout.write('Enter the message you would like to encrypt...\n> '); return encryptionMethod; } /* Helper function for displaying the encrypted message to the user. */ function displayEncryptedMessage(encryptionMethod, userInput) { let str = userInput.toString().trim(); let output = encryptionMethod(str); process.stdout.write(`\nHere is your encrypted message:\n> ${output}\n`) process.exit(); }

encryptors.js

const caesarCipher = (str, amount = 0) => { if (amount < 0) { return caesarCipher(str, amount + 26); } let output = ''; for (let i = 0; i < str.length; i++) { let char = str[i]; if (char.match(/[a-z]/i)) { let code = str.charCodeAt(i); if (code >= 65 && code <= 90) { char = String.fromCharCode(((code - 65 + amount) % 26) + 65); } else if (code >= 97 && code <= 122) { char = String.fromCharCode(((code - 97 + amount) % 26) + 97); } } output += char; } return output; }; const symbolCipher = (str) => { const symbols = { 'i': '!', '!': 'i', 'l': '1', '1': 'l', 's': '$', '$': 's', 'o': '0', '0': 'o', 'a': '@', '@': 'a', 'e': '3', '3': 'e', 'b': '6', '6': 'b' } let output = ''; for (let i = 0; i < str.length; i++) { let char = str.toLowerCase()[i]; if (symbols[char]) { output += symbols[char] } else { output += char; } } return output; } const reverseCipher = (sentence) => { let words = sentence.split(' '); for (let i = 0; i < words.length; i++) { words[i] = words[i].split('').reverse().join(''); } return words.join(' '); }; module.exports.caesarCipher = () = {} module.exports.symbolCipher = () = {} module.exports.reverseCipher = () = {}

solution:

message-mixer.js:

// Import the functions from encryptors.js here.
const encryptors = require(‘./encryptors.js’);
// Encryption Functions
/////////////////////////////////////////////

/*const {caesarCipher, symbolCipher, reverseCipher} = encryptors;

// User Input / Output Logic
/////////////////////////////////////////////

/*const encryptionMethod = getEncryptionMethod();
process.stdin.on(‘data’, (userInput) => {
displayEncryptedMessage(encryptionMethod, userInput);
});

/* Helper function for determining which cipher method
the user chose when they ran the program. */
function getEncryptionMethod() {
let encryptionMethod;

const encryptionType = process.argv[2];
if (encryptionType === ‘symbol’) {
encryptionMethod = symbolCipher;
} else if (encryptionType === ‘reverse’) {
encryptionMethod = reverseCipher;
} else if (encryptionType === ‘caesar’) {
let amount = Number(process.argv[3]);
if (Number.isNaN(amount)) {
process.stdout.write(Try again with a valid amount argument. \n)
process.exit();
}
encryptionMethod = (str) => caesarCipher(str, amount);
}
else {
process.stdout.write(Try again with a valid encryption type. \n)
process.exit();
}

process.stdout.write('Enter the message you would like to encrypt…\n> ');
return encryptionMethod;
}

/* Helper function for displaying the encrypted message to the user. */
function displayEncryptedMessage(encryptionMethod, userInput) {
let str = userInput.toString().trim();
let output = encryptionMethod(str);
process.stdout.write(\nHere is your encrypted message:\n> ${output}\n)
process.exit();
}

encryption.js:

const caesarCipher = (str, amount = 0) => {
if (amount < 0) {
return caesarCipher(str, amount + 26);
}
let output = ‘’;
for (let i = 0; i < str.length; i++) {
let char = str[i];
if (char.match(/[a-z]/i)) {
let code = str.charCodeAt(i);
if (code >= 65 && code <= 90) {
char = String.fromCharCode(((code - 65 + amount) % 26) + 65);
} else if (code >= 97 && code <= 122) {
char = String.fromCharCode(((code - 97 + amount) % 26) + 97);
}
}
output += char;
}
return output;
};

const symbolCipher = (str) => {
const symbols = {
‘i’: ‘!’,
‘!’: ‘i’,
‘l’: ‘1’,
‘1’: ‘l’,
‘s’: ‘$’,
‘$’: ‘s’,
‘o’: ‘0’,
‘0’: ‘o’,
‘a’: ‘@’,
‘@’: ‘a’,
‘e’: ‘3’,
‘3’: ‘e’,
‘b’: ‘6’,
‘6’: ‘b’
}

let output = ‘’;
for (let i = 0; i < str.length; i++) {
let char = str.toLowerCase()[i];

if (symbols[char]) {
  output += symbols[char]
} else {
  output += char;
}

}
return output;
}

const reverseCipher = (sentence) => {
let words = sentence.split(’ ‘);
for (let i = 0; i < words.length; i++) {
words[i] = words[i].split(’‘).reverse().join(’‘);
}
return words.join(’ ');
};

module.exports ={
caesarCipher,
symbolCipher,
reverseCipher
};

super-encoder.js:

// Import the encryptors functions here.
const {caesarCipher, symbolCipher,reverseCipher} = require(‘./encryptors.js’);

const encodeMessage = (str) => {
// Use the encryptor functions here.
return reverseCipher(symbolCipher(caesarCipher(str, 6)));
}

const decodeMessage = (str) => {
// Use the encryptor functions here.
return caesarCipher(symbolCipher(reverseCipher(str)), -6);

}

// User input / output.

const handleInput = (userInput) => {
const str = userInput.toString().trim();
let output;
if (process.argv[2] === ‘encode’) {
output = encodeMessage(str);
}
if (process.argv[2] === ‘decode’) {
output = decodeMessage(str);
}

process.stdout.write(output + ‘\n’);
process.exit();
}

// Run the program.
process.stdout.write('Enter the message you would like to encrypt…\n> ');
process.stdin.on(‘data’, handleInput);