UNPKG

@koalarx/utils

Version:

Biblioteca com validadores, conversores e abstrações de algumas problemáticas

287 lines (286 loc) 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KlString = void 0; exports.maskCpf = maskCpf; exports.maskCnpj = maskCnpj; exports.randomString = randomString; exports.clear = clear; exports.unmaskCoin = unmaskCoin; exports.unmaskCpf = unmaskCpf; exports.unmaskCnpj = unmaskCnpj; exports.toCamelCase = toCamelCase; exports.nbl2br = nbl2br; exports.validateCpf = validateCpf; exports.validateCnpj = validateCnpj; const validation_br_1 = require("validation-br"); const KlNumber_1 = require("./KlNumber"); class KlString extends String { /** * Normaliza a string atual e remove caracteres especiais, como acentos. * @returns Uma nova instância de `KlString` contendo a string normalizada e sem caracteres especiais. */ normalizeAndRemoveSpecialChars() { return new KlString(this.normalize('NFD').replace(/[\u0300-\u036f]/g, '')); } /** * Remove espaços da string atual, substituindo-os por um delimitador. * @param delimiter O delimitador que substituirá os espaços (padrão: ''). * @returns Uma nova instância de `KlString` sem espaços. */ removeSpaces(delimiter = '') { return this.normalize('NFD').replace(/\s/g, delimiter); } /** * Remove espaços e caracteres especiais de uma string. * @param delimiter O delimitador que substituirá os espaços e caracteres especiais (padrão: ' '). * @returns Uma nova instância de `KlString` contendo a string limpa. */ clear(delimiter = ' ') { return new KlString(this.normalizeAndRemoveSpecialChars() .replace(/([^\w]+|\s+)/g, delimiter) // Substitui espaço e outros caracteres por hífen .replace(/\-\-+/g, '-') // Substitui multiplos hífens por um único hífen .replace(/(^-+|-+$)/, '')); } /** * Converte a string atual para o formato camelCase. * @returns Uma nova instância de `KlString` no formato camelCase. */ toCamelCase() { // Primeiro, normaliza e remove caracteres especiais const cleaned = this.normalizeAndRemoveSpecialChars().toString(); // Converte para camelCase preservando PascalCase const camel = cleaned // Adiciona espaço antes de letras maiúsculas (para dividir PascalCase) .replace(/([a-z])([A-Z])/g, '$1 $2') // Remove caracteres especiais e substitui por espaços .replace(/[^a-zA-Z0-9]/g, ' ') // Remove espaços múltiplos .replace(/\s+/g, ' ') .trim() // Converte para camelCase .split(' ') .map((word, index) => { if (index === 0) { return word.toLowerCase(); } return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); }) .join(''); return new KlString(camel); } /** * Remove a máscara de moeda da string atual e converte para um número. * @param decimalCount Número de casas decimais (padrão: 2). * @returns Uma instância de `KlNumber` contendo o valor numérico sem a máscara. */ unmaskCoin(decimalCount = 2) { return new KlNumber_1.KlNumber(parseFloat(Number(this.replace('R$', '') .replace(/\s(?=\s)/g, '') .replace(/[\n\r\t]/g, '') .replace(/[^0-9a-zA-Z\(,\@\-\!\#\\$\%\&\*\(\)\_\+\=\{\[\}\]\/\?\;\:\.\|)\.]+/g, '') .replace(/\./g, '') .replace(/,/g, '.')).toFixed(decimalCount))); } /** * Concatena a string atual com outras strings fornecidas. * @param stringValue As strings a serem concatenadas. * @returns Uma nova instância de `KlString` com as strings concatenadas. */ contatenate(...stringValue) { return new KlString(super.concat(...stringValue)); } /** * Concatena a string atual com outra string no início. * @param value A string a ser adicionada no início. * @returns Uma nova instância de `KlString` com a string concatenada. */ concatenateToStart(value) { return new KlString(`${value}${this}`); } /** * Gera uma string aleatória com o comprimento e opções especificados. * @param length O comprimento da string gerada. * @param options Opções para incluir letras maiúsculas, minúsculas, números e caracteres especiais. * @returns Uma nova instância de `KlString` contendo a string aleatória gerada. */ random(length, { lowercase, uppercase, numbers, specialCharacters }) { const lmin = 'abcdefghijklmnopqrstuvwxyz'; const lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const num = '1234567890'; const simb = '@%_-#$%&*!'; let result = ''; let characters = ''; if (lowercase) characters += lmin; if (uppercase) characters += lmai; if (numbers) characters += num; if (specialCharacters) characters += simb; const len = characters.length; for (let n = 1; n <= length; n++) { const rand = Math.floor(Math.random() * (len - 1 + 1)) + 1; result += characters[rand - 1]; } return new KlString(result); } /** * Aplica a máscara de CPF à string atual. * @returns Uma nova instância de `KlString` formatada como CPF (ex.: '123.456.789-00'). */ maskCpf() { return new KlString(this.leftPad(this.onlyNumbers(), 11) .replace(/\D/g, '') .replace(/(\d{3})(\d)/, '$1.$2') .replace(/(\d{3})(\d)/, '$1.$2') .replace(/(\d{3})(\d{1,2})$/, '$1-$2')); } /** * Aplica a máscara de CNPJ à string atual. * @returns Uma nova instância de `KlString` formatada como CNPJ (ex.: '12.345.678/0001-00'). */ maskCnpj() { return new KlString(this.leftPad(this.onlyNumbers(), 14).replace(/^(\d{2})(\d{3})?(\d{3})?(\d{4})?(\d{2})?/, '$1.$2.$3/$4-$5')); } /** * Valida se a string atual é um CPF válido. * @returns `true` se o CPF for válido, caso contrário `false`. */ validateCpf() { return (0, validation_br_1.isCPF)(this.onlyNumbers().toString()); } /** * Valida se a string atual é um CNPJ válido. * @returns `true` se o CNPJ for válido, caso contrário `false`. */ validateCnpj() { return (0, validation_br_1.isCNPJ)(this.toString()); } /** * Remove todos os caracteres não numéricos da string. * @returns Uma nova instância de `KlString` contendo apenas os números. */ onlyNumbers() { return new KlString(this.replace(/\D/g, '')); } /** * Substitui quebras de linha (`\n`, `\r\n`, `\r`) por tags HTML `<br/>`. * @returns Uma nova instância de `KlString` com as quebras de linha substituídas. */ nbl2br() { return new KlString(this.replace(/\r\n|\r|\n/gi, '<br/>')); } /** * Converte a string atual para Base64. * @returns Uma nova instância de `KlString` contendo a string codificada em Base64. */ toBase64() { return new KlString(Buffer.from(this).toString('base64')); } /** * Adiciona caracteres de preenchimento à esquerda de uma string até atingir o comprimento total especificado. * @param value A string que será preenchida. * @param totalWidth O comprimento total desejado. * @param paddingChar O caractere de preenchimento (padrão: '0'). * @returns Uma string preenchida com o caractere especificado. */ leftPad(value, totalWidth, paddingChar) { const length = totalWidth - value.length + 1; return Array(length).join(paddingChar || '0') + value; } } exports.KlString = KlString; /** * Aplica a máscara de CPF a uma string. * @param value A string contendo o CPF (apenas números ou com formatação). * @returns Uma string formatada como CPF (ex.: '123.456.789-00'). */ function maskCpf(value) { return new KlString(value).maskCpf().toString(); } /** * Aplica a máscara de CNPJ a uma string. * @param value A string contendo o CNPJ (apenas números ou com formatação). * @returns Uma string formatada como CNPJ (ex.: '12.345.678/0001-00'). */ function maskCnpj(value) { return new KlString(value).maskCnpj().toString(); } /** * Gera uma string aleatória com o comprimento e opções especificados. * @param length O comprimento da string gerada. * @param options Opções para incluir letras maiúsculas, minúsculas, números e caracteres especiais. * @returns Uma string aleatória gerada com base nas opções fornecidas. */ function randomString(length, options) { return new KlString('') .random(length, options ?? { lowercase: true, uppercase: true }) .toString(); } /** * Remove espaços e caracteres especiais de uma string. * @param value A string a ser limpa. * @param delimiter O delimitador que substituirá os espaços e caracteres especiais (padrão: ''). * @returns Uma string limpa. */ function clear(value, delimiter) { return new KlString(value).clear(delimiter).toString(); } /** * Remove a máscara de moeda de uma string e converte para número. * @param value A string contendo o valor monetário. * @param decimalCount Número de casas decimais (padrão: 2). * @returns O valor numérico sem a máscara. */ function unmaskCoin(value, decimalCount) { return new KlString(value).unmaskCoin(decimalCount).toNumber(); } /** * Remove a máscara de CPF de uma string, retornando apenas os números. * @param value A string contendo o CPF. * @returns Uma string contendo apenas os números do CPF. */ function unmaskCpf(value) { return new KlString(value).onlyNumbers(); } /** * Remove a máscara de CNPJ de uma string, retornando apenas os números. * @param value A string contendo o CNPJ. * @returns Uma string contendo apenas os números do CNPJ. */ function unmaskCnpj(value) { return new KlString(value).onlyNumbers(); } /** * Converte uma string para o formato camelCase. * @param value A string a ser convertida. * @returns Uma string no formato camelCase. */ function toCamelCase(value) { return new KlString(value).toCamelCase().toString(); } /** * Substitui quebras de linha (`\n`, `\r\n`, `\r`) por tags HTML `<br/>`. * @param value A string contendo quebras de linha. * @returns Uma string com as quebras de linha substituídas por `<br/>`. */ function nbl2br(value) { return new KlString(value).nbl2br().toString(); } /** * Valida se uma string é um CPF válido. * @param value A string contendo o CPF. * @returns `true` se o CPF for válido, caso contrário `false`. */ function validateCpf(value) { return new KlString(value).validateCpf(); } /** * Valida se uma string é um CNPJ válido. * @param value A string contendo o CNPJ. * @returns `true` se o CNPJ for válido, caso contrário `false`. */ function validateCnpj(value) { return new KlString(value).validateCnpj(); }