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
-
set nombre valor: define una variable. La directivasetno aparece en el árbol resultante. -
$nombre: como argumento completo, conserva el tipo de la variable (número, string o booleano). -
${nombre}: dentro de un string, se interpola.
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"}).