yini-parser
Version:
Readable configuration without YAML foot-guns or JSON noise. The official Node.js parser for YINI config format — An INI-inspired configuration format with clear nesting, explicit types, and predictable parsing.
64 lines • 2.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.inferModeFromArgs = exports.isOptionsObjectForm = exports.toCoreOptions = void 0;
const failLevel_1 = require("./failLevel");
/**
* Map user parse options to core options.
*/
const toCoreOptions = (userOpts, bailLevel) => {
const level = bailLevel ?? (0, failLevel_1.mapFailLevelToBail)(userOpts.strictMode, userOpts.failLevel);
return {
rules: {
initialMode: userOpts.strictMode ? 'strict' : 'lenient',
onDuplicateKey: userOpts.onDuplicateKey,
requireDocTerminator: userOpts.requireDocTerminator,
treatEmptyValueAsNull: userOpts.treatEmptyValueAsNull,
},
bailSensitivity: level,
isIncludeMeta: userOpts.includeMetadata,
// isWithDiagnostics: isDev() || isDebug() || userOpts.includeDiagnostics,
isWithDiagnostics: userOpts.includeDiagnostics,
// isWithTiming: isDev() || isDebug() || userOpts.includeTiming,
isWithTiming: userOpts.includeTiming,
// isKeepUndefinedInMeta: isDebug() || userOpts.preserveUndefinedInMeta,
isKeepUndefinedInMeta: userOpts.preserveUndefinedInMeta,
isQuiet: userOpts.quiet, // Suppress warnings, etc.
isSilent: userOpts.silent,
isThrowOnError: userOpts.throwOnError,
};
};
exports.toCoreOptions = toCoreOptions;
// Type guard: did the caller use the options-object form?
const isOptionsObjectForm = (v) => {
return (v != null &&
typeof v === 'object' &&
// Note: If one wants, this can be relax to "typeof v === 'object'"
// but this keeps accidental booleans/strings out.
('strictMode' in v ||
'failLevel' in v ||
'includeMetadata' in v ||
'includeDiagnostics' in v ||
'includeTiming' in v ||
'preserveUndefinedInMeta' in v ||
'onDuplicateKey' in v ||
'requireDocTerminator' in v ||
'treatEmptyValueAsNull' in v ||
'quiet' in v ||
'silent' in v ||
'isThrowOnError' in v));
};
exports.isOptionsObjectForm = isOptionsObjectForm;
const inferModeFromArgs = (arg2) => {
if (typeof arg2 === 'boolean') {
return arg2 ? 'strict' : 'lenient';
}
if (arg2 && typeof arg2 === 'object') {
const sm = arg2.strictMode;
if (typeof sm === 'boolean') {
return sm ? 'strict' : 'lenient';
}
}
return 'lenient';
};
exports.inferModeFromArgs = inferModeFromArgs;
//# sourceMappingURL=optionsFunctions.js.map