Trabalhando com YAML em JavaScript (Node.js)
YAML (YAML Ain't Markup Language) é um formato de serialização de dados legível por humanos, frequentemente usado para arquivos de configuração (por exemplo, em Docker Compose, Kubernetes, Ansible). No ecossistema Node.js, existem duas principais bibliotecas para trabalhar com YAML: js-yaml (a mais popular) e yaml (moderna, com suporte a streams).
Neste artigo, veremos ambas as bibliotecas, aprenderemos a fazer parsing de YAML para objetos JavaScript, serializar objetos de volta para YAML, além de tratar erros e trabalhar com arquivos.
Instalação das bibliotecas
Para começar, instale uma das bibliotecas via npm:
# Instalação do js-yaml (recomendado para a maioria dos projetos)npm install js-yaml
# Instalação da biblioteca mais moderna yamlnpm install yamlBiblioteca js-yaml
js-yaml é a biblioteca mais madura e amplamente utilizada para trabalhar com YAML em Node.js. Ela suporta a especificação completa do YAML 1.2, incluindo tipos de dados complexos, tags e esquemas personalizados.
Parsing de string YAML
const yaml = require('js-yaml');
const yamlString = `server: host: localhost port: 8080 ssl: truedatabase: driver: postgresql host: db.example.com port: 5432 credentials: user: admin password: secret`;
try { const data = yaml.load(yamlString); console.log(data.server.host); // "localhost" console.log(data.database.credentials.user); // "admin"} catch (e) { console.error('Erro ao fazer parsing do YAML:', e.message);}Parsing de arquivo YAML
const fs = require('fs');const yaml = require('js-yaml');
try { const fileContents = fs.readFileSync('./config.yaml', 'utf8'); const data = yaml.load(fileContents); console.log(data);} catch (e) { console.error('Erro ao ler arquivo:', e.message);}Serialização para YAML
const yaml = require('js-yaml');
const config = { app: { name: "MyApp", version: "1.0.0" }, features: { logging: true, cache: { ttl: 3600, type: "redis" } }};
const yamlString = yaml.dump(config, { indent: 2, // indentação de 2 espaços lineWidth: 80, // comprimento máximo da linha noRefs: true, // não usar referências sortKeys: true // ordenar chaves});
console.log(yamlString);// Saída:// app:// name: MyApp// version: 1.0.0// features:// cache:// ttl: 3600// type: redis// logging: trueTrabalhando com tipos personalizados
js-yaml suporta tags YAML personalizadas para processar tipos de dados especiais:
const yaml = require('js-yaml');
// Criando um tipo personalizado para dataconst DateType = new yaml.Type('!date', { kind: 'scalar', resolve: (data) => data.match(/^\\d{4}-\\d{2}-\\d{2}$/), construct: (data) => new Date(data), instanceOf: Date, represent: (date) => date.toISOString().split('T')[0]});
// Criando um esquema com o tipo personalizadoconst CUSTOM_SCHEMA = yaml.DEFAULT_SCHEMA.extend([DateType]);
const yamlString = `event: !date 2025-12-31name: "New Year Party"`;
const data = yaml.load(yamlString, { schema: CUSTOM_SCHEMA });console.log(data.event instanceof Date); // trueconsole.log(data.event.getFullYear()); // 2025Biblioteca yaml
yaml é uma biblioteca mais moderna que oferece parsing por stream e melhor suporte a Unicode. Ela também implementa a especificação YAML 1.2.
Parsing básico
const YAML = require('yaml');
const doc = YAML.parse(`person: name: Ivan age: 30 hobbies: - programação - leitura`);
console.log(doc.person.name); // "Ivan"console.log(doc.person.hobbies[0]); // "programação" Também na biblioteca
Planejador de Tarefas em C++: TaskFlow, CronCpp, Boost.Asio
Validação de dados em TypeScript: Zod, Yup e outras ferramentas
Geração de Relatórios PDF em C# (.NET) com iTextSharp e QuestPDF
Trabalhando com Excel em Go (Golang): bibliotecas Excelize, xlsx, tealeg