TypeScript में YAML के साथ काम करें: पार्सिंग, जनरेशन और वैलिडेशन
YAML (YAML Ain't Markup Language) डेटा सीरियलाइज़ेशन का एक बेहद लोकप्रिय फ़ॉर्मेट है, जिसका इस्तेमाल कॉन्फ़िगरेशन फ़ाइलों, DevOps (Docker, Kubernetes, Ansible) और CI/CD पाइपलाइनों में बड़े पैमाने पर किया जाता है। TypeScript इकोसिस्टम में YAML के साथ काम करने के लिए js-yaml लाइब्रेरी का उपयोग किया जाता है, जो YAML 1.2 स्पेसिफिकेशन को पूरी तरह सपोर्ट करती है, जिसमें जटिल स्ट्रक्चर, टैग और कस्टम डेटा टाइप शामिल हैं।
इंस्टॉलेशन और सेटअप
शुरू करने के लिए, npm के ज़रिए लाइब्रेरी और उसके टाइप्स इंस्टॉल करें:
npm install js-yaml
npm install --save-dev @types/js-yaml
इंस्टॉल करने के बाद, आप अपने TypeScript प्रोजेक्ट में लाइब्रेरी को इम्पोर्ट कर सकते हैं:
import * as yaml from 'js-yaml';
import * as fs from 'fs';
TypeScript में YAML पार्स करना
YAML पढ़ने का मुख्य फंक्शन yaml.load() है, जो YAML स्ट्रिंग को JavaScript/TypeScript ऑब्जेक्ट में बदल देता है। आइए एक कॉन्फ़िगरेशन फ़ाइल का उदाहरण देखें:
// config.yaml
// server:
// port: 3000
// host: "localhost"
// database:
// url: "mongodb://localhost:27017/mydb"
// poolSize: 10
// features:
// - logging
// - authentication
interface Config {
server: {
port: number;
host: string;
};
database: {
url: string;
poolSize: number;
};
features: string[];
}
const yamlContent = fs.readFileSync('config.yaml', 'utf8');
const config = yaml.load(yamlContent) as Config;
console.log(config.server.port); // 3000
console.log(config.features); // ['logging', 'authentication']
सुरक्षित पार्सिंग (बिना कोड एक्ज़ीक्यूट किए) के लिए yaml.load() का उपयोग करें — यह yaml.eval() से ज़्यादा सुरक्षित है, क्योंकि yaml.eval() मनमाना JavaScript कोड चला सकता है।
TypeScript ऑब्जेक्ट से YAML जनरेट करना
उल्टी प्रक्रिया — TypeScript ऑब्जेक्ट को YAML स्ट्रिंग में बदलना — yaml.dump() फंक्शन से होती है। यह तुरंत कॉन्फ़िगरेशन फ़ाइलें बनाने के लिए उपयोगी है:
interface DeploymentConfig {
apiVersion: string;
kind: string;
metadata: { name: string; labels?: Record<string, string> };
spec: { replicas: number; selector: Record<string, string> };
}
const deployment: DeploymentConfig = {
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
name: 'my-app',
labels: { app: 'my-app', tier: 'backend' }
},
spec: {
replicas: 3,
selector: { matchLabels: { app: 'my-app' } }
}
};
const yamlString = yaml.dump(deployment, {
indent: 2,
lineWidth: 120,
noRefs: true,
sortKeys: true
});
console.log(yamlString);
// apiVersion: apps/v1
// kind: Deployment
// metadata:
// labels:
// app: my-app
// tier: backend
// name: my-app
// spec:
// replicas: 3
// selector:
// matchLabels:
// app: my-app
कस्टम टाइप के साथ काम करना
js-yaml लाइब्रेरी कस्टम स्कीमा और डेटा टाइप को सपोर्ट करती है। यह तारीखों, रेगुलर एक्सप्रेशन या विशेष ऑब्जेक्ट के साथ काम करते समय विशेष रूप से उपयोगी है:
import * as yaml from 'js-yaml';
// तारीखों के लिए कस्टम टाइप बनाएं
const DateType = new yaml.Type('!date', {
kind: 'scalar',
resolve: (data: string) => !isNaN(Date.parse(data)),
construct: (data: string) => new Date(data),
instanceOf: Date,
represent: (date: Date) => date.toISOString()
});
// स्टैंडर्ड और कस्टम टाइप वाली स्कीमा बनाएं
const schema = yaml.DEFAULT_SCHEMA.extend([DateType]);
const yamlWithDates = `
event: !date 2024-12-25T10:00:00Z
title: "क्रिसमस सेमिनार"
`;
const parsed = yaml.load(yamlWithDates, { schema });
console.log(parsed.event instanceof Date); // true
console.log(parsed.event.toLocaleDateString('hi-IN')); // 25/12/2024
TypeScript के साथ YAML वैलिडेशन
YAML डेटा के साथ टाइप सुरक्षा सुनिश्चित करने के लिए, लाइब्रेरी