yini-cli
Version:
CLI for parsing and validating YINI config files: type-safe values, nested sections, comments, minimal syntax noise, and optional strict mode.
72 lines (71 loc) • 2.42 kB
JavaScript
import fs from 'node:fs';
import path from 'node:path';
import util from 'util';
import YINI from 'yini-parser';
import { debugPrint, printObject, toPrettyJSON } from '../utils/print.js';
export const parseFile = (file, options) => {
const outputFile = options.output || '';
const isStrictMode = !!options.strict;
let outputStyle = 'JS-style';
debugPrint('file = ' + file);
debugPrint('output = ' + options.output);
debugPrint('options:');
printObject(options);
if (options.pretty) {
outputStyle = 'Pretty-JSON';
}
else if (options.log) {
outputStyle = 'Console.log';
}
else if (options.json) {
outputStyle = 'JSON-compact';
}
else {
outputStyle = 'JS-style';
}
doParseFile(file, outputStyle, isStrictMode, outputFile);
};
const doParseFile = (file, outputStyle, isStrictMode = false, outputFile = '') => {
// let strictMode = !!options.strict
let bailSensitivity = 'auto';
let includeMetaData = false;
debugPrint('File = ' + file);
debugPrint('outputStyle = ' + outputStyle);
try {
// const raw = fs.readFileSync(file, 'utf-8')
// const parsed = YINI.parseFile(
//const parsed = YINI.parseFile(file)
const parsed = YINI.parseFile(file, isStrictMode, bailSensitivity, includeMetaData);
// const parsed = YINI.parse(raw)
// const output = options.pretty
// ? // ? JSON.stringify(parsed, null, 2)
// toPrettyJSON(parsed)
// : JSON.stringify(parsed)
let output = '';
switch (outputStyle) {
case 'Pretty-JSON':
output = toPrettyJSON(parsed);
break;
case 'Console.log':
output = '<todo>';
break;
case 'JSON-compact':
output = JSON.stringify(parsed);
break;
default:
output = util.inspect(parsed, { depth: null, colors: false });
}
if (outputFile) {
// Write JSON output to file instead of stdout.
fs.writeFileSync(path.resolve(outputFile), output, 'utf-8');
console.log(`Output written to file: "${outputFile}"`);
}
else {
console.log(output);
}
}
catch (err) {
console.error(`Error: ${err.message}`);
process.exit(1);
}
};