Node.js · Plugins

scoped-variables

Plugin para DON.parse que agrega variables al documento. Se importa desde donly/plugins/scoped-variables.

const scopedVariablesPlugin: DonPlugin;

function createScopedVariablesPlugin(options?: {
  variables?: Record<string, number | string | boolean>
            | Map<string, number | string | boolean>;
}): DonPlugin;

Sintaxis

Alcance por bloque

Cada bloque { } tiene su propio alcance, anidado en el que lo contiene. Un set dentro de un bloque solo vale para ese bloque y lo que contiene, y nunca se filtra hacia afuera, aunque oculte una variable del mismo nombre.

set foo 33

foo $foo
tar biz {
  set foo 55
  foo $foo
}
after $foo
import { DON } from "donly";
import { scopedVariablesPlugin } from "donly/plugins/scoped-variables";

const root = DON.parse(text, { plugins: [scopedVariablesPlugin] });

JSON.stringify(root);
// {"foo":33,"tar":["biz",{"foo":55}],"after":33}

Interpolación

set project FOO

container "${project}-container-1" {}
// DON.parse(text, { plugins: [scopedVariablesPlugin] })
JSON.stringify(root); // {"container":"FOO-container-1"}

Variables desde el código

createScopedVariablesPlugin({ variables }) siembra el alcance raíz con variables que el documento no define, por ejemplo valores de entorno. Un set en el documento las oculta dentro de su bloque, sin modificar lo que pasaste.

import { DON } from "donly";
import { createScopedVariablesPlugin } from "donly/plugins/scoped-variables";

const plugin = createScopedVariablesPlugin({ variables: { env: "prod" } });

JSON.stringify(DON.parse("stage $env", { plugins: [plugin] }));
// {"stage":"prod"}

Variables no definidas

Una referencia sin variable definida no falla: el argumento queda como el texto literal (stage $nope produce {"stage":"$nope"}).