limitlessfs v1.3.0
limitlessfs
Leitor de arquivo de configuração personalizado para Node.js
Instalação
$ npm i limitlessfs
Como 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
_removeQM
Se o
_removeQM
for definido true e no arquivo existir uma linha com a entrada:''
(Vazia com aspas), como o_removeQM
remove todas as aspas antes da leitura das linhas, o valor da entrada será consideradonull
e 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
line
erender
sã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:true
default
: 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
line
Para 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 Sensitive
ou acentuação.Nota sobre o
require
edefault
Pode 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 = Loterias
Arquivo 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 = limitlessfs
Arquivo 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
}