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.

72 lines (71 loc) 2.42 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, 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); } };