Este documento fornece instruções completas para configurar a Circle Text Library de acordo com as necessidades da sua aplicação.
A biblioteca é inicializada através da classe TextLibrary que recebe um objeto de configuração:
import { TextLibrary } from "circle-text-library"
const textLib = new TextLibrary({
validationRules: {
// Configurações de validação (obrigatório)
}
// Demais configurações opcionais
})| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
validationRules |
ValidationConfig |
Sim | Regras de validação para usernames, passwords, etc. |
extractorConfig |
ExtractorConfig |
Não | Configuração do extrator de entidades |
sentimentConfig |
SentimentExtractorConfig |
Não | Configuração da análise de sentimento |
conversorConfig |
ConversorConfig |
Não | Configuração do conversor numérico |
dateFormatterConfig |
DateFormatterConfig |
Não | Configuração do formatador de datas |
richTextConfig |
RichTextConfig |
Não | Configuração do formatador de rich text |
Configuração das regras de validação para diferentes tipos de entrada.
validationRules: {
username: {
minLength: { enabled: true, value: 3, description: "Mínimo 3 caracteres" },
maxLength: { enabled: true, value: 20, description: "Máximo 20 caracteres" },
allowedCharacters: { enabled: true, value: "[a-z0-9_]", description: "Apenas minúsculas, números e underscore" }
},
password: {
minLength: { enabled: true, value: 8, description: "Mínimo 8 caracteres" },
requireUppercase: { enabled: true, value: true, description: "Deve conter letra maiúscula" },
requireNumbers: { enabled: true, value: true, description: "Deve conter números" },
requireSpecialChars: { enabled: true, value: true, description: "Deve conter caracteres especiais" }
}
}Documentação Completa: Sistema de Validação
Configuração dos prefixos para extração de entidades.
extractorConfig: {
mentionPrefix: '@', // Prefixo para menções (padrão: '@')
hashtagPrefix: '#', // Prefixo para hashtags (padrão: '#')
urlPattern: /https?:\/\/[^\s]+/g // Pattern para URLs (opcional)
}Documentação Completa: Sistema de Extração
Configuração da análise de sentimento.
sentimentConfig: {
language: 'pt-BR', // Idioma da análise (padrão: 'pt-BR')
enableCache: true, // Cache de resultados (padrão: true)
intensityThreshold: {
positive: 0.1, // Limiar para sentimento positivo
negative: -0.1 // Limiar para sentimento negativo
}
}Documentação Completa: Análise de Sentimento
Configuração da formatação de números e textos.
conversorConfig: {
thousandsSeparator: '.', // Separador de milhares (padrão: '.')
decimalSeparator: ',', // Separador decimal (padrão: ',')
defaultSliceLength: 100, // Tamanho padrão para corte de texto
sliceSuffix: '...' // Sufixo para texto cortado (padrão: '...')
}Documentação Completa: Conversor Numérico
Configuração da formatação de datas para texto humanizado.
dateFormatterConfig: {
style: 'full', // Estilo: 'full' | 'short' | 'abbreviated'
locale: 'pt-BR', // Locale para formatação
usePrefix: false, // Usar "há" antes do tempo
useSuffix: true, // Usar "atrás" após o tempo
capitalize: false, // Capitalizar primeira letra
useApproximateTime: false, // Usar tempo aproximado ("mais de um ano")
recentTimeThreshold: 0, // Threshold em segundos para "agora"
recentTimeLabel: 'agora' // Label customizado para tempo recente
}Documentação Completa: Formatador de Datas
Configuração do formatador de texto enriquecido.
richTextConfig: {
mentionPrefix: '@', // Prefixo para menções (padrão: '@')
hashtagPrefix: '#', // Prefixo para hashtags (padrão: '#')
urlDetection: true // Detecção automática de URLs (padrão: true)
}Documentação Completa: Rich Text
Exemplo de configuração completa com todos os módulos:
import { TextLibrary } from "circle-text-library"
const textLib = new TextLibrary({
validationRules: {
username: {
minLength: { enabled: true, value: 3, description: "Mínimo 3 caracteres" },
maxLength: { enabled: true, value: 20, description: "Máximo 20 caracteres" },
allowedCharacters: {
enabled: true,
value: "[a-z0-9_]",
description: "Apenas minúsculas, números e underscore"
},
cannotStartWith: {
enabled: true,
value: "_",
description: "Não pode começar com underscore"
},
allowAtPrefix: { enabled: true, value: "@" }
},
password: {
minLength: { enabled: true, value: 8 },
maxLength: { enabled: true, value: 32 },
requireUppercase: { enabled: true, value: true },
requireLowercase: { enabled: true, value: true },
requireNumbers: { enabled: true, value: true },
requireSpecialChars: { enabled: true, value: true },
cannotBeRepeatedChars: { enabled: true, value: true },
cannotBeSequentialChars: { enabled: true, value: true }
},
hashtag: {
requiredPrefix: { enabled: true, value: "#" },
minLength: { enabled: true, value: 3 },
maxLength: { enabled: true, value: 50 }
},
url: {
requireProtocol: { enabled: true, value: true },
allowedProtocols: { enabled: true, value: ["http", "https"] },
minLength: { enabled: true, value: 10 },
maxLength: { enabled: true, value: 2048 }
}
},
extractorConfig: {
mentionPrefix: "@",
hashtagPrefix: "#"
},
sentimentConfig: {
language: "pt-BR",
enableCache: true
},
conversorConfig: {
thousandsSeparator: ".",
defaultSliceLength: 100,
sliceSuffix: "..."
},
dateFormatterConfig: {
style: "full",
locale: "pt-BR",
useApproximateTime: false,
recentTimeThreshold: 60,
recentTimeLabel: "agora mesmo"
},
richTextConfig: {
mentionPrefix: "@",
hashtagPrefix: "#"
}
})Mantenha toda a configuração em um arquivo centralizado:
// config/textLibrary.config.ts
export const textLibraryConfig = {
validationRules: {
// ...suas regras
}
// ...demais configurações
}
// app.ts
import { textLibraryConfig } from "./config/textLibrary.config"
const textLib = new TextLibrary(textLibraryConfig)Use variáveis de ambiente para configurações específicas:
const textLib = new TextLibrary({
validationRules: {
username: {
minLength: {
enabled: true,
value: process.env.NODE_ENV === "production" ? 3 : 1
}
}
}
})Sempre valide sua configuração antes de inicializar:
try {
const textLib = new TextLibrary(config)
} catch (error) {
console.error("Erro na configuração:", error.message)
}Crie uma única instância e reutilize em toda a aplicação:
// services/textLibrary.service.ts
let instance: TextLibrary | null = null
export function getTextLibrary(): TextLibrary {
if (!instance) {
instance = new TextLibrary(config)
}
return instance
}Alguns módulos permitem alteração de configuração após inicialização:
const formatter = textLib.date
formatter.setStyle("short")
formatter.setUseApproximateTime(true)
formatter.setRecentTimeThreshold(120)
formatter.setRecentTimeLabel("agora pouco")const extractor = textLib.extractor
extractor.setText("Novo texto para análise")