v1.0 Draft

Formato de Configuração Legível para Humanos

DON (Directive Object Notation) é um formato de serialização de dados simples e expressivo, projetado para arquivos de configuração, infraestrutura como código e documentos estruturados. Alternativa moderna ao JSON e YAML.

Sintaxe minimalista com suporte para tipos primitivos, blocos aninhados e conteúdo multilinha. Escreva configurações fáceis de ler e manter.

name "my-application"
version "1.0.0"
port 8080
enabled true

server {
  host "example.com"
  port 443
  
  route /api/* {
    handler "apiHandler"
    timeout 30
  }
}

template <<<HTML
  <!DOCTYPE html>
  <html>
    <body>
      <h1>Welcome</h1>
    </body>
  </html>

Por Que Escolher DON para Seus Arquivos de Configuração

Sintaxe Minimalista

  • Menos caracteres especiais, mais legibilidade
  • Sem aspas obrigatórias em identificadores
  • Comentários com # e /* */
  • Diretivas simples e expressivas
🎯

Tipos Primitivos Completos

  • Strings com aspas simples ou duplas
  • Números: inteiros, decimais, BigInt
  • Formatos especiais: hex, octal, binário
  • Booleanos e null nativos
🏗️

Estrutura Hierárquica

  • Blocos aninhados com chaves {}
  • Profundidade de aninhamento ilimitada
  • Subdiretivas organizadas e claras
  • Análise sem ambiguidades
📝

Heredocs Integrados

  • Conteúdo multilinha com delimitadores
  • Ideal para HTML, SQL, scripts
  • Preserva formato e indentação
  • Sem necessidade de escapar caracteres
🔄

Diretivas Repetíveis

  • Mesma diretiva múltiplas vezes
  • Perfeito para routers e regras
  • Modelo imperativo vs declarativo
  • Mais expressivo que JSON/YAML

Casos de Uso Ideais

  • Arquivos de configuração
  • Regras de segurança e roteamento
  • Infraestrutura como código
  • DSLs e linguagens específicas

Sintaxe de Diretivas

Uma diretiva é uma instrução nomeada com argumentos opcionais. É o elemento fundamental do DON.

Estrutura

nome_diretiva [arg1] [arg2] ... [argN]

Exemplos

  • name "my-app" - Directiva con argumento string
  • port 8080 - Directiva con argumento numérico
  • enabled true - Directiva con argumento booleano
name "my-application"
version "1.0.0"
port 8080
enabled true

Tipos de Argumentos

# Keywords (Identificadores)
environment production
mode development

# Strings
name "my-application"
path 'C:\Users\file.txt'

# Números
port 8080
timeout 30.5
maxSize 1024n
hex 0xDEADB
octal 0o755
binary 0b1101

# Booleanos
enabled true
deprecated false

# Null
value null

Os argumentos de uma diretiva podem ser de diferentes tipos primitivos, permitindo expressar valores de forma natural e legível.

Tipos Suportados

Keywords (Identificadores)

Strings simplificados sem aspas para maior simplicidade. Devem começar com letra ou sublinhado, podem conter letras, números e sublinhados.

Strings

Texto delimitado por aspas simples ou duplas. Suporta sequências de escape.

Números

Inteiros, decimais, BigInt (sufixo 'n'), hexadecimal (0x), octal (0o) e binário (0b). Suporta valores negativos.

Booleanos

Valores lógicos true ou false (sensível a maiúsculas).

Null

Representa ausência de valor com a palavra-chave null.

Diretivas Aninhadas

As diretivas podem conter subdiretivas usando blocos delimitados por chaves, permitindo criar estruturas hierárquicas complexas.

Benefícios

Organização Hierárquica

Agrupe diretivas relacionadas em blocos lógicos, melhorando a legibilidade e manutenibilidade do código.

Aninhamento Ilimitado

Você pode aninhar blocos em qualquer profundidade, permitindo modelar estruturas de dados complexas.

Sintaxe Clara

As chaves {} definem claramente o início e o fim de cada bloco, sem ambiguidades na análise.

server {
  host "example.com"
  port 443
  
  route /api/* {
    handler "apiHandler"
    timeout 30
    
    middleware {
      auth true
      cors {
        origin "*"
        methods "GET, POST"
      }
    }
  }
  
  route /static/* {
    handler "staticHandler"
    cache true
  }
}

Heredocs

template <<<HTML
  <!DOCTYPE html>
  <html>
    <head>
      <title>My Page</title>
    </head>
    <body>
      <h1>Welcome</h1>
    </body>
  </html>

script <<<BASH
  #!/bin/bash
  echo "Deploying..."
  npm run build
  
query <<<SQL
  SELECT * FROM users
  WHERE status = "active"
  ORDER BY created_at DESC

Os heredocs permitem incluir conteúdo multilinha com um delimitador personalizado, ideal para templates, scripts e documentos incorporados.

Sintaxe

diretiva <<<DELIMITADOR
  conteúdo linha 1
  conteúdo linha 2

Características

Delimitador Personalizado

Defina seu próprio delimitador (HTML, SQL, BASH, etc.) para identificar o tipo de conteúdo.

Preserva Formato

Mantém a indentação e quebras de linha do conteúdo original, perfeito para código incorporado.

Sem Necessidade de Escape

Não é necessário escapar aspas ou caracteres especiais dentro do heredoc.