limitlessfs v1.3.0
limitlessfs
Leitor de arquivo de configuração personalizado para Node.js
Instalação
$ npm i limitlessfsComo usar
Exemplo do uso:
const limitlessfs = require('limitlessfs')
limitlessfs._config = {
_true: 'sim',
_false: 'nao',
_blocks: [
/* Configuração das linhas do seu arquivo */
]
}
limitlessfs._read('./arquivo.txt') // Caminho do seu arquivo de configuração
// Após o _read() a constante será convertida em um objeto, com os valores que você definiu no "_blocks"
console.log(limitlessfs)DICA: O objeto "._config" por vezes, pode ficar extenso dependendo da quantidade de linhas que o seu arquivo de configuração tem. Por esse motivo, é aconselhado, definir toda a configuração do limitlessfs em um arquivo separado da sua aplicação para não misturar com o seu código, e depois importá-lo em seu projeto.
Exemplo:
// Arquivo configureLimitlessfs.js
const limitlessfs = require('limitlessfs')
limitlessfs._config = {
_true: 'sim',
_false: 'nao',
_blocks: [
/* Configuração das linhas... */
]
}
limitlessfs._read('./arquivo.txt')
// Permitindo a exportação...
module.exports = limitlessfs// No seu Projeto...
const limitlessfs = require('./configureLimitlessfs')
// A constante está pronta para ser usada como objeto na sua Aplicação
console.log(limitlessfs)Dessa maneira todas as configurações não ficam juntas da sua aplicação :relaxed:
.config = { attributes... }
limitlessfs.config = {
/* Sua opções do config aqui... */
_blocks: []
}O objeto .config é o principal atributo para configurar o limitlessfs, é através dele que você tem acesso ao atributo _blocks que define a leitura das linhas do seu arquivo, o .config também tem várias opções para personalizar a leitura do arquivo, são elas:
_separator: String ~ Array | Caractere que separa os atributos dos valores do arquivo. Default::_true: String ~ Array | Valor considerado como o true. Default:yes_false: String ~ Array | Valor considerado como o false. Default:no_split: String ~ Array | Caractere que separa os valores de um Array. Default:,_ignoreCharacter: String ~ Array | Caracteres a serem ignorados e removidos antes da leitura do arquivo._removeQM: Boolean | Remover todas as "aspas" (simples e duplas) do arquivo antes da leitura. Default:false_ignoreCaseInSplit: Boolean | Não considera o Case-sensitive nos valores que separam um Array. Default:true_blocks: Array | Obrigatório Configura os parâmetros para a leitura dos valores do arquivo.
Nota sobre o
_removeQMSe o
_removeQMfor definido true e no arquivo existir uma linha com a entrada:''(Vazia com aspas), como o_removeQMremove todas as aspas antes da leitura das linhas, o valor da entrada será consideradonulle não uma "string vazia"
_blocks: Objects...
O _blocks é o responsável por saber como ler o seu arquivo. Ele é um Array onde cada index é responsável por uma linha do arquivo, e os index são preenchidos com um Objeto que leva as configurações.
_blocks: [
{
line:
render:
value:
require:
default:
caseSensitive:
},
...]Apenas os atributos
lineerendersão obrigatórios, o restante das opções são opcionais.
line: String ~ Array | A linha no seu arquivo que leva o(s) valor(es). (Antes do_separator)render: String | O nome da linha que será "renderizado" no Objeto final.value: Property | Os valores são:String,Number,Array,Boolean,null. É o tipo do valor a ser atribuido a linha. Caso esse atributo não seja definido, o próprio limitlessfs buscará tipo do valor.require: Boolean | Se a linha é obrigatória ou não. Default:truedefault: Any | O valor padrão a ser atribuido, caso a linha não tenha sido escrita no arquivo.caseSensitive: Boolean | Se o limitlessfs respeitará a diferença entre letras maiúsculas e minúsculas dos valores da linha, e não converterá todos os valores para minúsculo (padrão). Default:false
Nota Importante sobre o
linePara facilitar a leitura dos atributos das linhas no arquivo, por padrão o limitlessfs retira todas as acentuações e cedilha nos atributos e nas entradas do line, e converte tudo para letras minúsculas. Sendo assim, você pode escrever da maneira que desejar nas entradas do line, sem se preucupar com
Case Sensitiveou acentuação.Nota sobre o
requireedefaultPode ocorrer uma situação em que se define uma linha como "require: false" e não passa o valor de "default" para a linha, nesse caso, se a linha não for escrita ou esteja sem valor, o limitless atribuirá o valor de
null
Mensagens e outras opções
É possível personalizar as mensagens de erros e alertas que aparecem no console, você pode acessar as mensagens através do atributo __msg.<nomeDaMsg>. O limitlessfs possui três mensagens de erro e duas de alerta:
/* Mensagens de Erro: */
limitlessfs.__msg = {
fileNotFound: 'File "{0}" not found. Check file local',
lineRequire: 'Line {0} Required!',
errorLineParam: 'ERROR in param value "{0}", on line: {1}'
}
/* Mensagens de Alerta: */
limitlessfs.__msg = {
emplyLineParam: 'WARN: Line ({0}) param value: "{1}". Converted for {2}',
emplyLineParamSetted: 'WARN: Line ({0}) with defined value has a "{1}" parameter. Converted for default value.'
}IMPORTANTE: Esteja ciente que os números dentro de chaves {0}, {1} e {2} são parâmentos é não devem ser removidos, de resto você pode fazem qualquer alteração na string.
// Exemplo, modificando uma mensagem:
limitlessfs.__msg.lineRequire = 'Linha {0} é obrigatória!'Opções e Valores defaults
Através do atributo __defaultValues.<nomeDaPropriedade>, você pode manipular alguns comportamentos padrão do limitlessfs, segue toda a lista de propriedades acessíveis do __defaultValues:
limitlessfs.__defaultValues = {
// Valores default do "_config = {}"
_separator: ':',
_removeQM: false,
_ignoreCharacter: '',
_split: ',',
_true: 'yes',
_false: 'no',
_ignoreCaseInSplit: true,
// Valores default para o tipo do "value" para um linha ausente e que não é obrigatória
array: [],
string: '',
number: 0,
boolean: false,
// Valor default para uma linha ausente, sem o atributo "value" definido
emplyLineParam: null,
// Padrão de Identificação para uma linha de comentário. (você pode adicionar um Array de valores)
comment: '>>',
// Exibir ou ocultar as mensagens de "Alertas" no console.
hideWarnMsg: false,
// Tipo de encoder para ler o arquivo de configuração.
encode: null
}Exemplo, modificando uma propriedade default:
limitlessfs.__msg.hideWarnMsg = true
._read( filename , encode )
O _read() deve ser chamado sempre depois de todas as configurações.
Ele pode receber duas entradas, o nome do arquivo para fazer a leitura (Obrigatório) e o tipo de codificação (Opcional).
Veja o exemplo:
limitlessfs._read('meuArquivo.txt', 'ascii')Curiosidade:
O limitlessfs também lê arquivos
.json
Exemplo completo
Veja o exemplo de uma configuração completa de uma aplicação para gerar sequências aleatórias, e o arquivo .txt que é possível ler, aplicando essas configurações:
Arquivo texto de configuração da aplicação - entradas.txt:
## Arquivo de Configuração da Aplicação "rands.js"
>> BASE...
Números a cercar = 1 até 31
Iteração = 1
Comprimento do jogo = 20
>> DETALHES...
Números fixos :
Números excluídos :
Combinações a excluir = ''
>> PERSONALIZAÇÃO...
Números ordenados = sim
Pode repetir combinações? = não
Abrir arquivo quando finalizar!? = sim
>> FINALIZAÇÃO...
Total de combinações : 100
Nome do arquivo final = LoteriasArquivo JS de configuração separado do limitlessfs - configLimitlessfs.js:
const limitlessfs = require('limitlessfs')
// Personalizar as mensagens de ATENÇÃO e ERRO:
aijr.__msg.fileNotFound = 'Não encontrou o arquivo {0}'
aijr.__msg.lineRequire = 'Coloque a linha "{0}" ai'
aijr.__msg.emplyLineParam = 'ATENÇÃO: A linha ({0}) está "{1}". O valor será convertido para "{2}"'
aijr.__msg.errorLineParam = 'ERRO no valor "{0}", passado como parâmetro da linha: {1}'
aijr.__msg.emplyLineParamSetted = 'AVISO: A linha ({0}) de valor definido está "{1}". O valor será convertido para o "valor padrão".'
// Personalizar as tags de comentário:
limitlessfs.__defaultValues.comment = ['##','>>']
limitlessfs._config = {
_separator: ['=',':'], // Como o arquivo txt tem dois tipos de separador, passamos os dois
_true: 'sim', // Reconhecer o tipo True
_false: 'nao', // Reconhecer o tipo False
_split: [' ate ',',',' a '], // Passando os separadores de Array
_ignoreCharacter: ['?','!'], // Strings que serão ignoradas/removida da leitura no arquivo
_blocks: [
{
line: 'numeros a cercar', // Identificando a linha
render: 'range', // Passando qual o nome do atributo no Objeto final. Ex: limitlessfs.range
value: Array // Tipo do valor do atributo
},
{
line: ['iteracao','pulo','avanco','sequencia'],
render: 'sequential',
value: Number,
require: false, // Informando que essa linha não será obrigatória
default: 1 // O valor default do atributo, caso a linha não seja escrita
},
{
line: 'numeros fixos',
render: 'fixedNum',
value: Array,
require: false,
},
{
line: ['numeros excluidos','numeros a excluir','numeros removidos','numeros a remover'],
render: 'excludeNum',
value: Array,
require: false,
},
{
line: ['combinacoes a excluir','combinacoes excluidas','combinacoes para excluir'],
render: 'excludeCombinations',
require: false,
},
{
line: ['comprimento do jogo','comprimento do cartao'],
render: 'width',
},
{
line: ['total de combinacoes','total de jogos'],
render: 'total',
require: false,
default: 1
},
{
line: ['numeros ordenados','em ordem'],
render: 'sorted',
require: false,
},
{
line: ['pode repetir combinacoes','pode ter combinacoes repetidas'],
render: 'norepeat',
require: false,
},
{
line: ['nome do arquivo final','nome final do arquivo','arquivo de saida'],
render: 'filename',
// Por ser um nome, informando que o valor dessa linha deve ser preservado o Case Sensitive
caseSensitive: true,
require: false,
default: 'rand'
},
{
line: ['abrir arquivo quando finalizar','abrir ao finalizar'],
render: 'openfileFinished',
require: false,
}]
}
limitlessfs._read('../entradas.txt')
module.exports = limitlessfsArquivo da Aplicação - rands.js:
const config = require('./configLimitlessfs')
console.log(config)
// Resultado no console:{
range: [ 1, 31 ],
sequential: 1,
fixedNum: [],
excludeNum: [],
excludeCombinations: '',
width: 20,
total: 100,
sorted: true,
norepeat: false,
filename: 'Loterias',
openfileFinished: true
}