v1.0 Draft

Formato de Configuración Legible para Humanos

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>

Por Qué Elegir DON para tus Archivos de Configuración

Sintaxis Minimalista

  • Menos caracteres especiales, más legibilidad
  • Sin comillas obligatorias en identificadores
  • Comentarios con # y /* */
  • Directivas simples y expresivas
🎯

Tipos Primitivos Completos

  • Strings con comillas simples o dobles
  • Números: enteros, decimales, BigInt
  • Formatos especiales: hex, octal, binario
  • Booleanos y null nativos
🏗️

Estructura Jerárquica

  • Bloques anidados con llaves {}
  • Profundidad de anidación ilimitada
  • Subdirectivas organizadas y claras
  • Parsing sin ambigüedades
📝

Heredocs Integrados

  • Contenido multi-línea con delimitadores
  • Ideal para HTML, SQL, scripts
  • Preserva formato e indentación
  • Sin necesidad de escapar caracteres
🔄

Directivas Repetibles

  • Misma directiva múltiples veces
  • Perfecto para routers y reglas
  • Modelo imperativo vs declarativo
  • Más expresivo que JSON/YAML

Casos de Uso Ideales

  • Archivos de configuración
  • Reglas de seguridad y routing
  • Infraestructura como código
  • DSLs y lenguajes específicos

Sintaxis de Directivas

Una directiva es una instrucción nombrada con argumentos opcionales. Es el elemento fundamental de DON.

Estructura

nombre_directiva [arg1] [arg2] ... [argN]

Ejemplos

  • 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

Los argumentos de una directiva pueden ser de diferentes tipos primitivos, permitiendo expresar valores de manera natural y legible.

Tipos Soportados

Keywords (Identificadores)

Strings simplificados sin comillas para mayor simplicidad. Deben comenzar con letra o guión bajo, pueden contener letras, números y guiones bajos.

Strings

Texto delimitado por comillas simples o dobles. Soporta secuencias de escape.

Números

Enteros, decimales, BigInt (sufijo 'n'), hexadecimal (0x), octal (0o) y binario (0b). Soporta valores negativos.

Booleanos

Valores lógicos true o false (sensibles a mayúsculas).

Null

Representa ausencia de valor con la palabra clave null.

Directivas Anidadas

Las directivas pueden contener subdirectivas usando bloques delimitados por llaves, permitiendo crear estructuras jerárquicas complejas.

Beneficios

Organización Jerárquica

Agrupa directivas relacionadas en bloques lógicos, mejorando la legibilidad y mantenibilidad del código.

Anidación Ilimitada

Puedes anidar bloques a cualquier profundidad, permitiendo modelar estructuras de datos complejas.

Sintaxis Clara

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
  }
}

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

Los heredocs permiten incluir contenido multi-línea con un delimitador personalizado, ideal para templates, scripts y documentos embebidos.

Sintaxis

directiva <<<DELIMITADOR
  contenido línea 1
  contenido línea 2

Características

Delimitador Personalizado

Define tu propio delimitador (HTML, SQL, BASH, etc.) para identificar el tipo de contenido.

Preserva Formato

Mantiene la indentación y saltos de línea del contenido original, perfecto para código embebido.

Sin Escape Necesario

No necesitas escapar comillas ni caracteres especiales dentro del heredoc.