UNPKG

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.

186 lines 7.95 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildResultMetadata = void 0; const package_json_1 = __importDefault(require("../../package.json")); // NOTE: Requires "resolveJsonModule": true (or "esModuleInterop": true). const env_1 = require("../config/env"); const object_1 = require("../utils/object"); const print_1 = require("../utils/print"); const string_1 = require("../utils/string"); const modeFromRulesMatcher_1 = require("./parsingRules/modeFromRulesMatcher"); const buildResultMetadata = (p) => { // --- Construct meta information ------------------------------------- const to3 = (n) => { if (!n) { if ((0, env_1.isProdEnv)()) { return 0; } else { (0, print_1.debugPrint)('In buildResultMetadata(..): p.runtimeInfo:'); (0, print_1.printObject)(p.runtimeInfo); (0, print_1.debugPrint)('In buildResultMetadata(..): p.coreOptions:'); (0, print_1.printObject)(p.coreOptions); (0, print_1.debugPrint)('In buildResultMetadata(..): p.durationMs:'); (0, print_1.printObject)(p.durationMs); // p.errorHandler.pushOrBail(null,'Internal-Error', 'to3 received undefined') throw Error('to3(..) received undefined'); } } return Number.parseFloat(n.toFixed(3)); }; // Construct meta data. const metadata = { parserVersion: package_json_1.default.version, mode: p.coreOptions.rules.initialMode, totalErrors: p.errorHandler.getNumOfErrors(), totalWarnings: p.errorHandler.getNumOfWarnings(), totalMessages: p.errorHandler.getNumOfAllMessages(), runStartedAt: p.runStartedAt, runFinishedAt: p.runFinishedAt, durationMs: to3(p.durationMs), preservesOrder: true, orderGuarantee: 'implementation-defined', source: { // sourceType: toLowerSnakeCase(ast.sourceType), sourceType: (0, string_1.toLowerKebabCase)(p.ast.sourceType), fileName: p.ast.fileName, hasDocumentTerminator: p.ast.terminatorSeen, hasYiniMarker: p.ast.yiniMarkerSeen, lineCount: p.runtimeInfo.lineCount, byteSize: p.runtimeInfo.fileByteSize, sha256: p.runtimeInfo.sha256, }, structure: { maxDepth: p.ast.maxDepth, sectionCount: p.ast.numOfSections, memberCount: p.ast.numOfMembers, keysParsedCount: null, // objectCount: null, // listCount: null, sectionNamePaths: p.ast.sectionNamePaths, }, metaSchemaVersion: '1.1.1', }; // Attach optional diagnostics. if (p.coreOptions.isWithDiagnostics) { const mapLevelKey = (level) => { switch (level) { case '0-Ignore-Errors': return 'ignore-errors'; case '1-Abort-on-Errors': return 'errors'; case '2-Abort-Even-on-Warnings': return 'warnings-and-errors'; } }; const mapLevelDescription = (level) => { switch (level) { case '0-Ignore-Errors': return 'Continue despite errors.'; case '1-Abort-on-Errors': return 'Abort when errors occur.'; case '2-Abort-Even-on-Warnings': return 'Abort when errors or warnings occur.'; } return null; }; const effectiveMode = (0, modeFromRulesMatcher_1.matchModeFromCoreOptions)(p.coreOptions); metadata.diagnostics = { failLevel: { preferredLevel: p.runtimeInfo.preferredBailSensitivity, usedLevelType: p.coreOptions.bailSensitivity, usedLevelKey: mapLevelKey(p.coreOptions.bailSensitivity), levelDescription: (mapLevelDescription(p.coreOptions.bailSensitivity)), }, errors: { errorCount: p.errorHandler.getNumOfErrors(), payload: p.errorHandler.getErrors(), }, warnings: { warningCount: p.errorHandler.getNumOfWarnings(), payload: p.errorHandler.getWarnings(), }, notices: { noticeCount: p.errorHandler.getNumOfNotices(), payload: p.errorHandler.getNotices(), }, infos: { infoCount: p.errorHandler.getNumOfInfos(), payload: p.errorHandler.getInfos(), }, environment: { NODE_ENV: process.env.NODE_ENV, APP_ENV: process.env.APP_ENV, lib: { nodeEnv: env_1.localNodeEnv, appEnv: env_1.localAppEnv, flags: { isDev: (0, env_1.isDev)(), isDebug: (0, env_1.isDebug)() }, }, }, effectiveOptions: (0, object_1.sortObjectKeys)({ effectiveMode: effectiveMode, // Appended. // IMPORTANT: (!) These user options MUST be mapped from coreOptions (to user options). strictMode: effectiveMode === 'strict' ? true : false, failLevel: mapLevelKey(p.coreOptions.bailSensitivity), includeMetadata: p.coreOptions.isIncludeMeta, includeDiagnostics: p.coreOptions.isWithDiagnostics, includeTiming: p.coreOptions.isWithTiming, preserveUndefinedInMeta: p.coreOptions.isKeepUndefinedInMeta, quiet: p.coreOptions.isQuiet, requireDocTerminator: p.coreOptions.rules.requireDocTerminator, treatEmptyValueAsNull: p.coreOptions.rules.treatEmptyValueAsNull, onDuplicateKey: p.coreOptions.rules.onDuplicateKey, }), options: (0, object_1.sortObjectKeys)(p._meta_userOpts), }; } // Attach optional durations timing data. if (p.coreOptions.isWithTiming) { metadata.timing = { total: !p.coreOptions.isWithTiming ? null : { timeMs: to3(p.durationMs), // durationMs = timeEnd4Ms - timeStartMs name: p.runtimeInfo.sourceType === 'Inline' ? 'Total' : 'Total (excluding phase0 (I/O))', }, phase0: !p.coreOptions.isWithTiming || p.runtimeInfo.sourceType === 'Inline' ? undefined : { timeMs: to3(p.runtimeInfo.timeIoMs), name: 'I/O', }, phase1: !p.coreOptions.isWithTiming ? null : { timeMs: to3(p.timeEnd1Ms - p.timeStartMs), name: 'Lexing', }, phase2: !p.coreOptions.isWithTiming ? null : { timeMs: to3(p.timeEnd2Ms - p.timeEnd1Ms), name: 'Parsing', }, phase3: !p.coreOptions.isWithTiming ? null : { timeMs: to3(p.timeEnd3Ms - p.timeEnd2Ms), name: 'AST Building', }, phase4: !p.coreOptions.isWithTiming ? null : { timeMs: to3(p.timeEnd4Ms - p.timeEnd3Ms), name: 'Object Building', }, }; } return metadata; }; exports.buildResultMetadata = buildResultMetadata; //# sourceMappingURL=resultMetadataBuilder.js.map