UNPKG

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
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); } };