yini-cli
Version:
CLI for parsing and validating YINI config files: type-safe values, nested sections, comments, minimal syntax noise, and optional strict mode.
73 lines (72 loc) • 2.46 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, commandOptions) => {
const outputFile = commandOptions.output || '';
const isStrictMode = !!commandOptions.strict;
let outputStyle = 'JS-style';
debugPrint('file = ' + file);
debugPrint('output = ' + commandOptions.output);
debugPrint('commandOptions:');
printObject(commandOptions);
if (commandOptions.pretty) {
outputStyle = 'Pretty-JSON';
}
else if (commandOptions.json) {
outputStyle = 'JSON-compact';
}
else {
outputStyle = 'JS-style';
}
doParseFile(file, commandOptions, outputStyle, outputFile);
};
const doParseFile = (file, commandOptions, outputStyle, outputFile = '') => {
// let strictMode = !!commandOptions.strict
let preferredFailLevel = 'auto';
let includeMetaData = false;
debugPrint('File = ' + file);
debugPrint('outputStyle = ' + outputStyle);
const parseOptions = {
strictMode: commandOptions.strict ?? false,
// failLevel: 'errors',
failLevel: preferredFailLevel,
// failLevel: 'ignore-errors',
includeMetadata: includeMetaData,
};
// If --force then override fail-level.
if (commandOptions.force) {
parseOptions.failLevel = 'ignore-errors';
}
try {
const parsed = YINI.parseFile(file, parseOptions);
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);
}
};