DON (Directive Object Notation) es un formato de serialización de datos simple y expresivo, diseñado para archivos de configuración, infraestructura como código y documentos estructurados. Alternativa moderna a JSON y YAML.
Sintaxis minimalista con soporte para tipos primitivos, bloques anidados y contenido multi-línea. Escribe configuraciones fáciles de leer y mantener.
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> Una directiva es una instrucción nombrada con argumentos opcionales. Es el elemento fundamental de DON.
nombre_directiva [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 Los argumentos de una directiva pueden ser de diferentes tipos primitivos, permitiendo expresar valores de manera natural y legible.
Strings simplificados sin comillas para mayor simplicidad. Deben comenzar con letra o guión bajo, pueden contener letras, números y guiones bajos.
Texto delimitado por comillas simples o dobles. Soporta secuencias de escape.
Enteros, decimales, BigInt (sufijo 'n'), hexadecimal (0x), octal (0o) y binario (0b). Soporta valores negativos.
Valores lógicos true o false (sensibles a mayúsculas).
Representa ausencia de valor con la palabra clave null.
Las directivas pueden contener subdirectivas usando bloques delimitados por llaves, permitiendo crear estructuras jerárquicas complejas.
Agrupa directivas relacionadas en bloques lógicos, mejorando la legibilidad y mantenibilidad del código.
Puedes anidar bloques a cualquier profundidad, permitiendo modelar estructuras de datos complejas.
Las llaves {} definen claramente el inicio y fin de cada bloque, sin ambigüedades en el parsing.
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 Los heredocs permiten incluir contenido multi-línea con un delimitador personalizado, ideal para templates, scripts y documentos embebidos.
directiva <<<DELIMITADOR
contenido línea 1
contenido línea 2 Define tu propio delimitador (HTML, SQL, BASH, etc.) para identificar el tipo de contenido.
Mantiene la indentación y saltos de línea del contenido original, perfecto para código embebido.
No necesitas escapar comillas ni caracteres especiales dentro del heredoc.