@designliquido/delprops
v0.0.1
Published
Especificação e biblioteca de schemas para o formato de arquivo .delprops do ecossistema Delégua.
Readme
delprops
Especificação e biblioteca de análise do formato de arquivo .delprops — arquivo de propriedades/configuração do ecossistema Delégua.
Estrutura do projeto
Cada namespace de propriedades é representado como um arquivo .ts dentro de uma pasta com o nome do namespace raiz:
fontes/
├── tipos.ts ← tipos compartilhados (TipoValor, DefinicaoPropriedade)
├── liquido/
│ ├── roteador.ts ← propriedades de liquido.roteador.*
│ ├── dados.ts ← propriedades de liquido.dados.<nome>.*
│ ├── autenticacao.ts ← propriedades de liquido.autenticacao.*
│ └── index.ts
└── index.tsCada arquivo exporta um array de DefinicaoPropriedade:
import { DefinicaoPropriedade } from '../tipos';
const roteador: DefinicaoPropriedade[] = [
{ nome: 'cors', tipo: 'logico', detalhe: 'Habilita CORS.' },
// ...
];
export default roteador;O tipo DefinicaoPropriedade é:
export type TipoValor = 'logico' | 'texto' | 'numero';
export interface DefinicaoPropriedade {
nome: string;
tipo: TipoValor;
detalhe: string;
valoresPermitidos?: string[]; // apenas para propriedades enumeradas
}A raiz da biblioteca exporta tudo de forma agrupada por namespace:
import { liquido } from '@designliquido/delprops';
// liquido.roteador → DefinicaoPropriedade[]
// liquido.dados → DefinicaoPropriedade[] (fallback genérico)
// liquido.autenticacao → DefinicaoPropriedade[]Esquemas contribuídos por pacotes externos
Pacotes do ecossistema Delégua podem contribuir com seus próprios esquemas de propriedades para um namespace. O mecanismo tem duas partes:
1. Declaração no package.json do pacote contribuidor
Adicione uma chave "delprops" ao package.json do pacote:
"delprops": {
"espacoNomes": "liquido.dados",
"esquema": "./delprops/dados"
}espacoNomes: o caminho do espaço de nomes que este pacote estende.esquema: caminho relativo à raiz do pacote para o arquivo de esquema (sem extensão.js/.ts).
2. O arquivo de esquema
Crie o arquivo apontado por esquema. Ele deve exportar default um array de DefinicaoPropriedade:
// meu-pacote/delprops/dados.ts
import { DefinicaoPropriedade } from '@designliquido/delprops';
const dados: DefinicaoPropriedade[] = [
{
nome: 'tecnologia',
tipo: 'texto',
detalhe: 'Tecnologia de banco de dados.',
valoresPermitidos: ['minha-tecnologia'],
},
// ...
];
export default dados;Descoberta automática
Use descobrir() para escanear um diretório node_modules e registrar automaticamente todos os pacotes que declaram "delprops":
import path from 'path';
import { descobrir } from '@designliquido/delprops';
descobrir(path.join(__dirname, 'node_modules'));Registro manual
Use registrar() quando preferir controle explícito sobre o que é carregado:
import { registrar } from '@designliquido/delprops';
import dadosSqlite from '@designliquido/lincones-sqlite/delprops/dados';
registrar('liquido.dados', '@designliquido/lincones-sqlite', dadosSqlite);Consulta
import { obter, temRegistro } from '@designliquido/delprops';
if (temRegistro('liquido.dados')) {
const propriedades = obter('liquido.dados');
// → DefinicaoPropriedade[] de todos os pacotes registrados para este namespace
}Pacotes que implementam este contrato
| Pacote | Namespace(s) | Contribuição |
|--------|--------------|--------------|
| liquido | liquido.roteador, liquido.autenticacao | Schemas autoritativos do framework |
| @designliquido/lincones-sqlite | liquido.dados | SQLite |
| @designliquido/lincones-postgresql | liquido.dados | PostgreSQL |
| @designliquido/lincones-mysql | liquido.dados | MySQL |
O formato .delprops
O .delprops é o formato padrão de configuração para projetos Delégua, inspirado no formato .properties do Java. Cada linha não vazia e não comentada define uma propriedade no formato:
<namespace>.<subnamespace>[.<subnamespace>...] = <valor>Comentários
Comentários de linha são iniciados com //:
// Isto é um comentário
liquido.roteador.cors = verdadeiroTipos de valor
| Tipo | Exemplos |
|---------|-----------------------------------|
| Lógico | verdadeiro, falso |
| Texto | 'publico', 'sqlite', ':memory:' |
| Número | 3000, 5432 |
Namespace liquido
O namespace liquido é reservado para a configuração do framework web Líquido.
liquido.roteador
Controla o comportamento do roteador HTTP.
| Propriedade | Tipo | Descrição |
|---------------------|---------|--------------------------------------------------------|
| diretorioEstatico | texto | Caminho do diretório de arquivos estáticos. |
| cors | lógico | Habilita CORS. |
| bodyParser | lógico | Habilita o body-parser. |
| morgan | lógico | Habilita o log de requisições com morgan. |
| cookieParser | lógico | Habilita o cookie-parser. |
| passport | lógico | Habilita o passport para autenticação. |
| json | lógico | Habilita o suporte a JSON no body. |
| helmet | lógico | Habilita o helmet para segurança de cabeçalhos HTTP. |
| porta | número | Porta em que o servidor escutará. |
Exemplo:
liquido.roteador.diretorioEstatico = 'publico'
liquido.roteador.cors = verdadeiro
liquido.roteador.bodyParser = verdadeiro
liquido.roteador.morgan = verdadeiro
liquido.roteador.cookieParser = verdadeiro
liquido.roteador.passport = falso
liquido.roteador.json = verdadeiro
liquido.roteador.helmet = verdadeiro
liquido.roteador.porta = 3000liquido.dados.<nome>
Configura uma fonte de dados nomeada. <nome> é um identificador livre escolhido pelo projeto (ex: lincones, principal, cache).
| Propriedade | Tipo | Descrição |
|--------------|---------|-------------------------------------------------------------------------------|
| tecnologia | texto | Tecnologia de banco de dados. Valores permitidos: sqlite, mysql, postgres, mongodb, mssql. |
| caminho | texto | Caminho do arquivo de banco de dados (ex: ':memory:' para SQLite em memória). |
| host | texto | Endereço do servidor de banco de dados. |
| porta | número | Porta do servidor de banco de dados. |
| usuario | texto | Nome de usuário para conexão. |
| senha | texto | Senha para conexão. |
| banco | texto | Nome do banco de dados. |
Exemplo:
// Banco de dados em memória
liquido.dados.lincones.tecnologia = 'sqlite'
liquido.dados.lincones.caminho = ':memory:'
// Banco de dados PostgreSQL remoto
liquido.dados.principal.tecnologia = 'postgres'
liquido.dados.principal.host = 'localhost'
liquido.dados.principal.porta = 5432
liquido.dados.principal.usuario = 'admin'
liquido.dados.principal.senha = 'segredo'
liquido.dados.principal.banco = 'meu_banco'liquido.autenticacao
Configura o mecanismo de autenticação da aplicação.
| Propriedade | Tipo | Descrição |
|--------------|--------|-----------------------------------------------------------|
| tecnologia | texto | Tecnologia de autenticação. Valores permitidos: jwt. |
Exemplo:
liquido.autenticacao.tecnologia = 'jwt'
liquido.autenticacao.segredo = 'minha-chave-secreta'
liquido.autenticacao.expiracao = '7d'Exemplo completo
// Configuração de arquivos estáticos
liquido.roteador.diretorioEstatico = 'publico'
// Configuração do roteador
liquido.roteador.cors = verdadeiro
liquido.roteador.bodyParser = verdadeiro
liquido.roteador.morgan = verdadeiro
liquido.roteador.cookieParser = verdadeiro
liquido.roteador.passport = falso
liquido.roteador.json = verdadeiro
liquido.roteador.helmet = verdadeiro
// Configuração de bases de dados
liquido.dados.lincones.tecnologia = 'sqlite'
liquido.dados.lincones.caminho = ':memory:'
// Configuração de autenticação
liquido.autenticacao.tecnologia = 'jwt'Nota: Os schemas autoritativos de
liquido.roteadoreliquido.autenticacaosão definidos pelo próprio pacoteliquidoem sua pastadelprops/. Os schemas embutidos neste pacote servem como fallback para quandoliquidonão estiver instalado.
Regras de validação
- Linhas em branco e comentários (
//) são ignorados. - Toda linha não vazia deve seguir o formato
<chave> = <valor>. Linhas sem=são inválidas. - Chave e valor não podem estar vazios.
- Para propriedades do namespace
liquido, o caminho completo deve ser conhecido — propriedades desconhecidas geram aviso. - O tipo do valor deve corresponder ao tipo esperado pela propriedade — divergências geram erro.
- Propriedades com valores enumerados (como
tecnologia) só aceitam os valores listados na tabela. - Namespaces fora do conjunto conhecido (ex:
liquido) são permitidos sem validação de esquema, para uso por outros projetos do ecossistema.
