donly

donly es la implementación de referencia de DON (Directive Object Notation), un formato de serialización de datos legible por humanos basado en directivas y subdirectivas. Ideal para archivos de configuración, definiciones de infraestructura y datos estructurados.

Instalación

Agrega donly a tu proyecto con tu gestor de paquetes favorito.

npm install donly
# o
bun add donly
# o
pnpm add donly

Uso básico

Importa DON y parsea un texto en formato DON para obtener un árbol de directivas.

import { DON } from "donly";

const text = `
name "my-app"
port 8080
database {
  host "localhost"
  port 5432
}
`;

const root = DON.parse(text);

También puedes serializar directivas a JSON y decodificarlas de vuelta:

import { DirectiveJSONEncoder, DirectiveJSONDecoder } from "donly/decoder";

const encoded = DirectiveJSONEncoder.encode(root);
const decoded = new DirectiveJSONDecoder().decode(encoded);

Sintaxis básica

DON organiza los datos en directivas: un nombre seguido de argumentos posicionales y, opcionalmente, un bloque { } con subdirectivas anidadas.

route GET /api {
  respond 200 "Ok"
}

Tipos de datos: strings, números (enteros, decimales, hex, bigint), booleanos y null.

name "donly"
port 8080
price 19.99
retries -1
big 9007199254740993n
mask 0xFF
enabled true
disabled false
description null

Comentarios: de línea con # y de bloque con /* ... */.

# Puerto donde escucha el servidor HTTP
port 8080

/*
  Bloque de comentario
  de varias líneas
*/
host "localhost"

Heredocs: bloques de contenido multilínea embebido que empiezan con <<<DELIMITADOR y terminan en la primera línea sin indentar; no se cierran repitiendo el delimitador.

description <<<TEXT
  Este es un bloque de texto
  que puede ocupar varias líneas,
  siempre que estén indentadas.
name "my-app"

Anidamiento: las directivas pueden anidarse a cualquier profundidad dentro de bloques { }.

server {
  route GET /health {
    respond 200 "Ok"
  }
  route POST /users {
    respond 201 "Created"
  }
}

CLI

El CLI de donly permite inspeccionar y validar archivos .donly.

Inspeccionar

bunx donly inspect file.donly
bunx donly inspect --strategy nested|tuple|raw file.donly

Por ejemplo, para un file.donly con:

name "my-app"
port 8080
database {
  host "localhost"
  port 5432
}

bunx donly inspect file.donly imprime:

{
  "name": "my-app",
  "port": 8080,
  "database": {
    "host": "localhost",
    "port": 5432
  }
}

Lint

bunx donly lint --rules rules.json file.donly
bunx donly lint --rules rules.json -o json file.donly

Por ejemplo, con un rules.json que exige que port sea numérico:

{
  "/port": {
    "[1]": {
      "type": "number",
      "message": "port debe ser un número"
    }
  }
}

Al lintear un file.donly que rompe esa regla:

name "my-app"
port "8080"

bunx donly lint --rules rules.json file.donly imprime:

file.donly
  2:6  error  port debe ser un número

1 error 0 warnings 0 info

Instalar en tu editor

La extensión DON TextMate Grammar agrega resaltado de sintaxis para archivos .don y .donly. Funciona en VS Code, Kiro, o cualquier editor que soporte gramáticas TextMate.

Desde VS Code

  1. Abre Quick Open con Ctrl+P (o Cmd+P en macOS).
  2. Pega el siguiente comando y presiona Enter:
ext install jondotsoy.don-textmate

También puedes buscar "DON TextMate" en el Marketplace de extensiones o instalarla directamente desde la página de la extensión.

Más detalles, el sistema de plugins y la referencia completa en el repositorio de GitHub, incluyendo la especificación completa de la sintaxis y la documentación completa del formato de reglas de lint.