cesar-cipher
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -7,3 +7,3 @@ /** | ||
* @returns Um objeto com os métodos `encrypt` e `decrypt` para processar mensagens. | ||
* @throws Erro se o alfabeto estiver vazio ou o `shift` for inválido. | ||
* @throws Erro se o alfabeto for informado e estiver vazio ou o `shift` for inválido. | ||
*/ | ||
@@ -15,5 +15,6 @@ export declare function crypt(shift: number, alphabet?: string[]): { | ||
* @param message - A mensagem criptografada que será descriptografada em base64. | ||
* @param secret - O segredo que foi utilizado para a criptografia. | ||
* @returns A mensagem original após descriptografar. | ||
*/ | ||
decrypt: (message: string) => string; | ||
decrypt: (message: string, secret?: string) => string; | ||
/** | ||
@@ -23,6 +24,7 @@ * Criptografa uma mensagem aplicando o deslocamento. | ||
* @param message - A mensagem original que será criptografada. | ||
* @param secret - O segredo que deseja utilizar para a criptografia. | ||
* @returns A mensagem criptografada após aplicar o deslocamento e em base64. | ||
*/ | ||
encrypt: (message: string) => string; | ||
encrypt: (message: string, secret?: string) => string; | ||
}; | ||
export default crypt; |
@@ -148,2 +148,31 @@ "use strict"; | ||
} | ||
/** | ||
* Valida os parâmetros fornecidos para garantir que atendem aos critérios esperados. | ||
* | ||
* Esta função verifica se o parâmetro `shift` é um número e se o parâmetro `alphabet` é um array contendo pelo menos 10 letras. | ||
* Se algum dos parâmetros não atender aos critérios, uma exceção é lançada com uma mensagem de erro apropriada. | ||
* | ||
* @param alphabet - Um array de strings representando o alfabeto, que deve conter pelo menos 10 letras. | ||
* @param shift - Um número que representa o valor de deslocamento. Deve ser do tipo `number`. | ||
* | ||
* @throws {Error} Se o parâmetro `shift` não for um número. | ||
* @throws {Error} Se o parâmetro `alphabet` não for um array. | ||
* @throws {Error} Se o array `alphabet` contiver menos de 10 letras. | ||
* | ||
* @example | ||
* ```typescript | ||
* try { | ||
* validateInstance(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], 5); | ||
* // Não lança exceção | ||
* | ||
* validateInstance(['a', 'b', 'c'], 5); | ||
* // Lança Error: Alphabet must contain at least 10 letters | ||
* | ||
* validateInstance('invalidAlphabet', 5); | ||
* // Lança Error: Alphabet must be array of letters | ||
* | ||
* validateInstance(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], 'invalidShift'); | ||
* // Lança Error: Shift must be a number | ||
* ``` | ||
*/ | ||
function validateInstance(alphabet, shift) { | ||
@@ -158,2 +187,83 @@ if (typeof shift !== 'number') | ||
/** | ||
* Remove caracteres duplicados de uma string e retorna uma nova string com caracteres únicos, preservando a ordem original. | ||
* | ||
* A função verifica cada caractere da string `secret` e constrói uma nova string contendo apenas a primeira ocorrência de cada caractere. | ||
* Caso a string `secret` seja indefinida (`undefined`), a função trata isso como uma string vazia. | ||
* | ||
* @param secret - Uma string opcional da qual os caracteres duplicados serão removidos. Se não for fornecida, será tratada como uma string vazia. | ||
* | ||
* @returns Uma nova string contendo apenas caracteres únicos da string `secret`, preservando a ordem em que eles aparecem pela primeira vez. | ||
* | ||
* @example | ||
* ```typescript | ||
* const result = toUniqueChars('aabbcc'); | ||
* console.log(result); // Output: 'abc' | ||
* | ||
* const resultEmpty = toUniqueChars(); | ||
* console.log(resultEmpty); // Output: '' | ||
* ``` | ||
*/ | ||
function toUniqueChars(secret) { | ||
return (secret).split('').reduce((prev, current) => { | ||
if (prev.includes(current)) | ||
return prev; | ||
if (isWhitespace(current)) | ||
return prev; | ||
return prev + current; | ||
}, ''); | ||
} | ||
/** | ||
* Verifica se um caractere está presente no alfabeto padrão. | ||
* | ||
* A função verifica se o caractere fornecido está incluído no alfabeto padrão definido pela variável `defaultAlphabet`. | ||
* | ||
* @param char - O caractere a ser verificado. Deve ser uma string de um único caractere. | ||
* | ||
* @returns `true` se o caractere estiver presente no alfabeto padrão, caso contrário, `false`. | ||
* | ||
* @throws {Error} Se `char` não for uma string de comprimento 1. | ||
* | ||
* @example | ||
* ```typescript | ||
* const result1 = isOnAlphabet('a'); | ||
* console.log(result1); // Output: true (se 'a' estiver no `defaultAlphabet`) | ||
* | ||
* const result2 = isOnAlphabet('z'); | ||
* console.log(result2); // Output: false (se 'z' não estiver no `defaultAlphabet`) | ||
* ``` | ||
*/ | ||
function isOnAlphabet(char) { | ||
return defaultAlphabet.includes(char); | ||
} | ||
/** | ||
* Substitui caracteres ausentes em uma sequência de caracteres com base em um alfabeto fornecido. | ||
* | ||
* A função verifica cada caractere do alfabeto para ver se ele está presente na string `secret`. | ||
* Se um caractere do alfabeto não estiver presente na string `secret`, ele é adicionado ao final da string resultante. | ||
* | ||
* @param alphabet - Um array de strings representando o alfabeto ou conjunto de caracteres a ser verificado e adicionado. | ||
* @param secret - Uma string contendo os caracteres iniciais que serão verificados e atualizados com base no alfabeto. | ||
* | ||
* @returns Um array de strings representando a sequência resultante após a adição dos caracteres do alfabeto que estavam ausentes na string `secret`. | ||
* | ||
* @example | ||
* ```typescript | ||
* const alphabet = ['a', 'b', 'c', 'd', 'e']; | ||
* const secret = 'ac'; | ||
* const result = replace(alphabet, secret); | ||
* console.log(result); // Output: ['a', 'c', 'b', 'd', 'e'] | ||
* ``` | ||
*/ | ||
function replace(alphabet, secret) { | ||
const result = [...secret]; | ||
if (!result.length) | ||
return alphabet; | ||
for (const char of alphabet) { | ||
if (result.includes(char) || !isOnAlphabet(char)) | ||
continue; | ||
result.push(char); | ||
} | ||
return result; | ||
} | ||
/** | ||
* Cria um objeto com funções para criptografar e descriptografar mensagens. | ||
@@ -164,3 +274,3 @@ * | ||
* @returns Um objeto com os métodos `encrypt` e `decrypt` para processar mensagens. | ||
* @throws Erro se o alfabeto estiver vazio ou o `shift` for inválido. | ||
* @throws Erro se o alfabeto for informado e estiver vazio ou o `shift` for inválido. | ||
*/ | ||
@@ -174,9 +284,12 @@ function crypt(shift, alphabet = defaultAlphabet) { | ||
* @param message - A mensagem criptografada que será descriptografada em base64. | ||
* @param secret - O segredo que foi utilizado para a criptografia. | ||
* @returns A mensagem original após descriptografar. | ||
*/ | ||
decrypt: (message) => { | ||
const shiftIndex = alphabet.length - shift; | ||
const text = toText(message); | ||
const messageOrEmpty = ensureMessage(text); | ||
return shiftMessage(messageOrEmpty, shiftIndex, alphabet); | ||
decrypt: (message, secret = '') => { | ||
const messageOrEmpty = ensureMessage(message); | ||
const replacer = toUniqueChars(secret); | ||
const replacedAlphabet = replace(alphabet, replacer); | ||
const shiftIndex = replacedAlphabet.length - shift; | ||
const text = toText(messageOrEmpty); | ||
return shiftMessage(text, shiftIndex, replacedAlphabet); | ||
}, | ||
@@ -187,7 +300,10 @@ /** | ||
* @param message - A mensagem original que será criptografada. | ||
* @param secret - O segredo que deseja utilizar para a criptografia. | ||
* @returns A mensagem criptografada após aplicar o deslocamento e em base64. | ||
*/ | ||
encrypt: (message) => { | ||
encrypt: (message, secret = '') => { | ||
const messageOrEmpty = ensureMessage(message); | ||
const text = shiftMessage(messageOrEmpty, shift, alphabet); | ||
const replacer = toUniqueChars(secret); | ||
const replacedAlphabet = replace(alphabet, replacer); | ||
const text = shiftMessage(messageOrEmpty, shift, replacedAlphabet); | ||
return toBase64(text); | ||
@@ -194,0 +310,0 @@ }, |
{ | ||
"name": "cesar-cipher", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "A simple TypeScript library for Caesar cipher encryption and decryption", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Sorry, the diff of this file is not supported yet
21012
335