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> Uma diretiva é uma instrução nomeada com argumentos opcionais. É o elemento fundamental do DON.
nome_diretiva [arg1] [arg2] ... [argN]
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 # 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.
Strings simplificados sem aspas para maior simplicidade. Devem começar com letra ou sublinhado, podem conter letras, números e sublinhados.
Texto delimitado por aspas simples ou duplas. Suporta sequências de escape.
Inteiros, decimais, BigInt (sufixo 'n'), hexadecimal (0x), octal (0o) e binário (0b). Suporta valores negativos.
Valores lógicos true ou false (sensível a maiúsculas).
Representa ausência de valor com a palavra-chave null.
As diretivas podem conter subdiretivas usando blocos delimitados por chaves, permitindo criar estruturas hierárquicas complexas.
Agrupe diretivas relacionadas em blocos lógicos, melhorando a legibilidade e manutenibilidade do código.
Você pode aninhar blocos em qualquer profundidade, permitindo modelar estruturas de dados complexas.
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
}
} 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.
diretiva <<<DELIMITADOR
conteúdo linha 1
conteúdo linha 2 Defina seu próprio delimitador (HTML, SQL, BASH, etc.) para identificar o tipo de conteúdo.
Mantém a indentação e quebras de linha do conteúdo original, perfeito para código incorporado.
Não é necessário escapar aspas ou caracteres especiais dentro do heredoc.