Oh MyUtils

Editor .env - Analizar, Validar, Comparar y Convertir Archivos de Entorno en Línea

Analice, valide, compare y convierta archivos .env con verificación de sintaxis, comparación lado a lado y conversión entre .env, JSON, YAML y Docker Compose — 100% del lado del cliente.

Contenido .env

Preguntas Frecuentes

¿Qué es un editor de archivos .env?

Un editor de archivos .env es una herramienta en línea que ayuda a los desarrolladores a analizar, validar, editar, ordenar, comparar y convertir archivos .env (dotenv). Los archivos .env almacenan variables de entorno como pares KEY=value. Esta herramienta proporciona validación de sintaxis, ordenamiento alfabético, comparación lado a lado y conversión de formatos — todo ejecutándose 100% en su navegador.

¿Cómo uso este editor .env?

1. Pestaña Editar: Pegue el contenido de su archivo .env. La herramienta lo valida instantáneamente. 2. Pestaña Comparar: Pegue dos archivos .env en los paneles laterales. 3. Pestaña Convertir: Pegue contenido en cualquier formato soportado y seleccione el formato de salida.

¿Están seguros mis datos?

Sus datos están 100% seguros y nunca salen de su navegador. Todo el procesamiento ocurre en JavaScript del lado del cliente. Ningún dato de configuración se transmite a ningún servidor.

¿Qué verificaciones de validación realiza?

El validador verifica: (1) Nombres de variables inválidos. (2) Separador faltante. (3) Claves duplicadas. (4) Valores vacíos. (5) Comillas sin cerrar. Cada problema incluye el número de línea.

¿Cómo funciona la comparación de archivos .env?

La herramienta analiza dos archivos .env y categoriza cada variable en cuatro grupos: Solo en Archivo A (rojo), Solo en Archivo B (verde), Valores diferentes (amarillo) e Idénticos (gris).

¿Entre qué formatos puedo convertir?

Soporta conversión bidireccional entre .env, JSON, YAML y Docker Compose environment. El convertidor auto-detecta el formato de entrada.

¿Puedo ordenar mi archivo .env alfabéticamente?

Sí, la función de ordenamiento organiza todas las variables alfabéticamente por nombre de clave (A-Z o Z-A). Los comentarios se preservan y se adjuntan a la variable siguiente.

Ejemplos de Código

// .env File Parser, Validator, and Converter

function parseEnv(content) {
  const lines = content.split('\n');
  const entries = [];
  const errors = [];
  const warnings = [];
  const seen = new Map();

  for (let i = 0; i < lines.length; i++) {
    const lineNum = i + 1;
    const raw = lines[i];
    const trimmed = raw.trim();

    if (!trimmed || trimmed.startsWith('#')) continue;

    const eqIdx = trimmed.indexOf('=');
    if (eqIdx === -1) {
      errors.push({ line: lineNum, message: "Missing '=' separator" });
      continue;
    }

    const key = trimmed.slice(0, eqIdx).trim();
    let value = trimmed.slice(eqIdx + 1);

    if (!key) {
      errors.push({ line: lineNum, message: 'Empty key name' });
      continue;
    }
    if (!/^[A-Za-z_]\w*$/.test(key)) {
      errors.push({ line: lineNum, message: `Invalid name "${key}"` });
      continue;
    }

    // Handle quoted values
    if (value.startsWith('"') && value.endsWith('"')) {
      value = value.slice(1, -1).replace(/\\n/g, '\n');
    } else if (value.startsWith("'") && value.endsWith("'")) {
      value = value.slice(1, -1);
    } else {
      const commentIdx = value.indexOf(' #');
      if (commentIdx !== -1) value = value.slice(0, commentIdx);
      value = value.trim();
    }

    if (seen.has(key)) {
      warnings.push({ line: lineNum, message: `Duplicate key "${key}"` });
    }
    seen.set(key, lineNum);
    entries.push({ key, value, line: lineNum });
  }

  return { entries, errors, warnings };
}

function envToJson(entries, indent = 2) {
  const obj = {};
  for (const { key, value } of entries) obj[key] = value;
  return JSON.stringify(obj, null, indent);
}

function diffEnv(entriesA, entriesB) {
  const mapA = new Map(entriesA.map(e => [e.key, e.value]));
  const mapB = new Map(entriesB.map(e => [e.key, e.value]));
  const onlyInA = [], onlyInB = [], different = [], identical = [];

  for (const [key, valA] of mapA) {
    if (!mapB.has(key)) onlyInA.push(key);
    else if (mapB.get(key) !== valA) different.push({ key, valueA: valA, valueB: mapB.get(key) });
    else identical.push(key);
  }
  for (const key of mapB.keys()) {
    if (!mapA.has(key)) onlyInB.push(key);
  }
  return { onlyInA, onlyInB, different, identical };
}

// Usage
const result = parseEnv('DB_HOST=localhost\nDB_PORT=5432\nAPI_KEY=sk_live_abc');
console.log('Entries:', result.entries.length);
console.log('JSON:', envToJson(result.entries));

Herramientas relacionadas