Serez Packages

serez-dotenv

v1.0.2

Cargador de archivos .env para Serez-Code — capas .env/.env.local/.env.<modo>, solo lectura

by serezdev · published 2026-06-13

serez-dotenv

Cargador de archivos .env para Serez-Code. Lee variables de entorno a nivel proyecto desde .env, .env.local y .env.<modo>, las fusiona por capas de prioridad y las resuelve en solo lectura: nunca muta el entorno real del proceso.

import "serez-dotenv"

let process = new Process("dev")          // modo: dev | qa | local
let host = process.env.get("HOST")        // valor resuelto, o null si no existe

Instalación

sz install serez-dotenv

La librería declara el permiso Env por sí misma (solo para el fallback al entorno del sistema), así que tu app no necesita declararlo.

Jerarquía

De menor a mayor prioridad (la más específica gana; los .env se leen del directorio de trabajo):

System  <  .env  <  .env.local  <  .env.<modo>   (dev | qa)
ModoCapas cargadas
dev.env + .env.local + .env.dev
qa.env + .env.local + .env.qa
local.env + .env.local

Si ninguna capa define la variable, cae al entorno del sistema como último recurso. Es lo contrario a Env del core: no impone nada al sistema, solo prioriza el .env al leer.

API

LlamadaDevuelveDescripción
new Process(mode)ProcessCarga las capas del directorio actual según mode.
process.env.get(key)string?Valor resuelto por capas; cae a System; null si no existe (no lanza).
process.env.has(key)booltrue si la clave está en alguna capa .env (ignora System).
process.modestringEl modo con el que se construyó.
loadEnv(dir, mode)EnvResolverCarga las capas desde un directorio arbitrario (útil en tests).

Formato .env

# comentario (solo línea completa)
HOST=localhost
QUOTED="con espacios"        # comillas envolventes se quitan
export TOKEN=abc123          # el prefijo 'export' se ignora
EMPTY=                       # valor vacío permitido

Una variable por línea (CLAVE=VALOR), espacios recortados, la última repetida gana. No hay comentarios en línea.

Ejemplo completo

.envHOST=base-host, PORT=3000 · .env.devHOST=dev-host, DEBUG=true

import "serez-dotenv"

let process = new Process("dev")
let host  = process.env.get("HOST")    // "dev-host"  (.env.dev pisa a .env)
let port  = process.env.get("PORT")    // "3000"      (solo en .env)
let user  = process.env.get("USER")    // del sistema, o null si no existe

Documentación

Tests

.\run_tests.ps1    # Windows   (./run_tests.sh en Linux/macOS)

Diseño

Solo lectura (nunca Env.set), .sz puro sin dependencias, estructura modular (index.sz reexporta src/parser, src/resolver, src/process).