"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FrontmatterGenerator = void 0; const yaml = require("js-yaml"); const constants_1 = require("./constants"); class FrontmatterGenerator { static generate(options, deterministic = {}, enrichment, mode = 'balanced') { if (mode === 'none') { return ''; } const frontmatter = { // Core required fields profile: options.profile || constants_1.DEFAULTS.profile, created: new Date().toISOString(), generator: options.generator, version: options.version, title: options.title || 'Untitled', extraction_confidence: options.extractionConfidence ?? constants_1.DEFAULTS.extractionConfidence, content_quality: options.contentQuality ?? constants_1.DEFAULTS.contentQuality, }; // Source file if (options.sourcePath) { frontmatter.source_file = options.sourcePath; } // Add deterministic fields based on mode if (mode === 'complete') { // Include all deterministic fields const cleaned = this.cleanObject(deterministic); Object.assign(frontmatter, cleaned); } else { // Balanced mode - include only key fields for (const field of constants_1.BALANCED_FIELDS) { if (deterministic[field] !== undefined && deterministic[field] !== null) { frontmatter[field] = deterministic[field]; } } } // LLM enrichment fields (flat, not nested) if (enrichment) { if (enrichment.summary) frontmatter.summary = enrichment.summary; if (enrichment.tags?.length) frontmatter.tags = enrichment.tags; if (enrichment.category) frontmatter.category = enrichment.category; if (enrichment.audience) frontmatter.audience = enrichment.audience; if (enrichment.doc_purpose) frontmatter.doc_purpose = enrichment.doc_purpose; if (enrichment.complexity) frontmatter.complexity = enrichment.complexity; if (enrichment.actionable !== undefined) frontmatter.actionable = enrichment.actionable; if (enrichment.key_technologies?.length) { frontmatter.key_technologies = enrichment.key_technologies; } } else { // Placeholders for LLM enrichment frontmatter.summary = ''; frontmatter.tags = []; frontmatter.category = ''; } const yamlStr = yaml.dump(this.removeNulls(frontmatter), { indent: 2, lineWidth: -1, quotingType: "'", sortKeys: false }); return `---\n${yamlStr}---`; } static generateMarkdown(options, deterministic, content, enrichment, mode = 'balanced') { const fm = this.generate(options, deterministic, enrichment, mode); if (!fm) return content; return `${fm}\n\n${content}`; } static cleanObject(obj) { const result = {}; for (const [k, v] of Object.entries(obj)) { if (k.startsWith('_')) continue; if (v === null || v === undefined) continue; if (v instanceof Date) { result[k] = v.toISOString(); } else if (v && typeof v === 'object' && !Array.isArray(v)) { result[k] = this.cleanObject(v); } else { result[k] = v; } } return result; } static removeNulls(obj) { if (Array.isArray(obj)) { return obj.filter(x => x != null).map(x => this.removeNulls(x)); } if (obj && typeof obj === 'object') { const result = {}; for (const [k, v] of Object.entries(obj)) { if (v != null) result[k] = this.removeNulls(v); } return result; } return obj; } } exports.FrontmatterGenerator = FrontmatterGenerator; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnQ0FBZ0M7QUFPaEMsMkNBQXdEO0FBRXhELE1BQWEsb0JBQW9CO0lBRS9CLE1BQU0sQ0FBQyxRQUFRLENBQ2IsT0FBMkIsRUFDM0IsZ0JBQXFDLEVBQUUsRUFDdkMsVUFBMEIsRUFDMUIsT0FBbUIsVUFBVTtRQUc3QixJQUFJLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBd0I7WUFDdkMsdUJBQXVCO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLG9CQUFRLENBQUMsT0FBTztZQUM1QyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDakMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxVQUFVO1lBQ2xDLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxvQkFBUSxDQUFDLG9CQUFvQjtZQUNwRixlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxvQkFBUSxDQUFDLGNBQWM7U0FDbkUsQ0FBQztRQUVGLGNBQWM7UUFDZCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixXQUFXLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDL0MsQ0FBQztRQUVELHlDQUF5QztRQUN6QyxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN4QixtQ0FBbUM7WUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFD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QUMsQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFqSEQsb0RBaUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB7XG4gIEZyb250bWF0dGVyT3B0aW9ucyxcbiAgRGV0ZXJtaW5pc3RpY0ZpZWxkcyxcbiAgTExNRW5yaWNobWVudCxcbiAgT3V0cHV0TW9kZVxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IERFRkFVTFRTLCBCQUxBTkNFRF9GSUVMRFMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBGcm9udG1hdHRlckdlbmVyYXRvciB7XG5cbiAgc3RhdGljIGdlbmVyYXRlKFxuICAgIG9wdGlvbnM6IEZyb250bWF0dGVyT3B0aW9ucyxcbiAgICBkZXRlcm1pbmlzdGljOiBEZXRlcm1pbmlzdGljRmllbGRzID0ge30sXG4gICAgZW5yaWNobWVudD86IExMTUVucmljaG1lbnQsXG4gICAgbW9kZTogT3V0cHV0TW9kZSA9ICdiYWxhbmNlZCdcbiAgKTogc3RyaW5nIHtcblxuICAgIGlmIChtb2RlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBmcm9udG1hdHRlcjogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIC8vIENvcmUgcmVxdWlyZWQgZmllbGRzXG4gICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfHwgREVGQVVMVFMucHJvZmlsZSxcbiAgICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGdlbmVyYXRvcjogb3B0aW9ucy5nZW5lcmF0b3IsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24sXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSB8fCAnVW50aXRsZWQnLFxuICAgICAgZXh0cmFjdGlvbl9jb25maWRlbmNlOiBvcHRpb25zLmV4dHJhY3Rpb25Db25maWRlbmNlID8/IERFRkFVTFRTLmV4dHJhY3Rpb25Db25maWRlbmNlLFxuICAgICAgY29udGVudF9xdWFsaXR5OiBvcHRpb25zLmNvbnRlbnRRdWFsaXR5ID8/IERFRkFVTFRTLmNvbnRlbnRRdWFsaXR5LFxuICAgIH07XG5cbiAgICAvLyBTb3VyY2UgZmlsZVxuICAgIGlmIChvcHRpb25zLnNvdXJjZVBhdGgpIHtcbiAgICAgIGZyb250bWF0dGVyLnNvdXJjZV9maWxlID0gb3B0aW9ucy5zb3VyY2VQYXRoO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZXRlcm1pbmlzdGljIGZpZWxkcyBiYXNlZCBvbiBtb2RlXG4gICAgaWYgKG1vZGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIC8vIEluY2x1ZGUgYWxsIGRldGVybWluaXN0aWMgZmllbGRzXG4gICAgICBjb25zdCBjbGVhbmVkID0gdGhpcy5jbGVhbk9iamVjdChkZXRlcm1pbmlzdGljKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oZnJvbnRtYXR0ZXIsIGNsZWFuZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBCYWxhbmNlZCBtb2RlIC0gaW5jbHVkZSBvbmx5IGtleSBmaWVsZHNcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgQkFMQU5DRURfRklFTERTKSB7XG4gICAgICAgIGlmIChkZXRlcm1pbmlzdGljW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGRldGVybWluaXN0aWNbZmllbGRdICE9PSBudWxsKSB7XG4gICAgICAgICAgZnJvbnRtYXR0ZXJbZmllbGRdID0gZGV0ZXJtaW5pc3RpY1tmaWVsZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMTE0gZW5yaWNobWVudCBmaWVsZHMgKGZsYXQsIG5vdCBuZXN0ZWQpXG4gICAgaWYgKGVucmljaG1lbnQpIHtcbiAgICAgIGlmIChlbnJpY2htZW50LnN1bW1hcnkpIGZyb250bWF0dGVyLnN1bW1hcnkgPSBlbnJpY2htZW50LnN1bW1hcnk7XG4gICAgICBpZiAoZW5yaWNobWVudC50YWdzPy5sZW5ndGgpIGZyb250bWF0dGVyLnRhZ3MgPSBlbnJpY2htZW50LnRhZ3M7XG4gICAgICBpZiAoZW5yaWNobWVudC5jYXRlZ29yeSkgZnJvbnRtYXR0ZXIuY2F0ZWdvcnkgPSBlbnJpY2htZW50LmNhdGVnb3J5O1xuICAgICAgaWYgKGVucmljaG1lbnQuYXVkaWVuY2UpIGZyb250bWF0dGVyLmF1ZGllbmNlID0gZW5yaWNobWVudC5hdWRpZW5jZTtcbiAgICAgIGlmIChlbnJpY2htZW50LmRvY19wdXJwb3NlKSBmcm9udG1hdHRlci5kb2NfcHVycG9zZSA9IGVucmljaG1lbnQuZG9jX3B1cnBvc2U7XG4gICAgICBpZiAoZW5yaWNobWVudC5jb21wbGV4aXR5KSBmcm9udG1hdHRlci5jb21wbGV4aXR5ID0gZW5yaWNobWVudC5jb21wbGV4aXR5O1xuICAgICAgaWYgKGVucmljaG1lbnQuYWN0aW9uYWJsZSAhPT0gdW5kZWZpbmVkKSBmcm9udG1hdHRlci5hY3Rpb25hYmxlID0gZW5yaWNobWVudC5hY3Rpb25hYmxlO1xuICAgICAgaWYgKGVucmljaG1lbnQua2V5X3RlY2hub2xvZ2llcz8ubGVuZ3RoKSB7XG4gICAgICAgIGZyb250bWF0dGVyLmtleV90ZWNobm9sb2dpZXMgPSBlbnJpY2htZW50LmtleV90ZWNobm9sb2dpZXM7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBsYWNlaG9sZGVycyBmb3IgTExNIGVucmljaG1lbnRcbiAgICAgIGZyb250bWF0dGVyLnN1bW1hcnkgPSAnJztcbiAgICAgIGZyb250bWF0dGVyLnRhZ3MgPSBbXTtcbiAgICAgIGZyb250bWF0dGVyLmNhdGVnb3J5ID0gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgeWFtbFN0ciA9IHlhbWwuZHVtcCh0aGlzLnJlbW92ZU51bGxzKGZyb250bWF0dGVyKSwge1xuICAgICAgaW5kZW50OiAyLFxuICAgICAgbGluZVdpZHRoOiAtMSxcbiAgICAgIHF1b3RpbmdUeXBlOiBcIidcIixcbiAgICAgIHNvcnRLZXlzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxTdHJ9LS0tYDtcbiAgfVxuXG4gIHN0YXRpYyBnZW5lcmF0ZU1hcmtkb3duKFxuICAgIG9wdGlvbnM6IEZyb250bWF0dGVyT3B0aW9ucyxcbiAgICBkZXRlcm1pbmlzdGljOiBEZXRlcm1pbmlzdGljRmllbGRzLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBlbnJpY2htZW50PzogTExNRW5yaWNobWVudCxcbiAgICBtb2RlOiBPdXRwdXRNb2RlID0gJ2JhbGFuY2VkJ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGZtID0gdGhpcy5nZW5lcmF0ZShvcHRpb25zLCBkZXRlcm1pbmlzdGljLCBlbnJpY2htZW50LCBtb2RlKTtcbiAgICBpZiAoIWZtKSByZXR1cm4gY29udGVudDtcbiAgICByZXR1cm4gYCR7Zm19XFxuXFxuJHtjb250ZW50fWA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjbGVhbk9iamVjdChvYmo6IGFueSk6IGFueSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICBpZiAoay5zdGFydHNXaXRoKCdfJykpIGNvbnRpbnVlO1xuICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXN1bHRba10gPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IHRoaXMuY2xlYW5PYmplY3Qodik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba10gPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlTnVsbHMob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmouZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiB0aGlzLnJlbW92ZU51bGxzKHgpKTtcbiAgICB9XG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgICAgaWYgKHYgIT0gbnVsbCkgcmVzdWx0W2tdID0gdGhpcy5yZW1vdmVOdWxscyh2KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiJdfQ==