- Removed automatic addition of empty summary, tags, category fields - Only adds enrichment fields when actual enrichment data is provided - Added @types/js-yaml dev dependency
109 lines
14 KiB
JavaScript
109 lines
14 KiB
JavaScript
"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;
|
|
}
|
|
}
|
|
// No enrichment provided - don't add empty placeholder fields
|
|
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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dCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQge1xuICBGcm9udG1hdHRlck9wdGlvbnMsXG4gIERldGVybWluaXN0aWNGaWVsZHMsXG4gIExMTUVucmljaG1lbnQsXG4gIE91dHB1dE1vZGVcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBERUZBVUxUUywgQkFMQU5DRURfRklFTERTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgRnJvbnRtYXR0ZXJHZW5lcmF0b3Ige1xuXG4gIHN0YXRpYyBnZW5lcmF0ZShcbiAgICBvcHRpb25zOiBGcm9udG1hdHRlck9wdGlvbnMsXG4gICAgZGV0ZXJtaW5pc3RpYzogRGV0ZXJtaW5pc3RpY0ZpZWxkcyA9IHt9LFxuICAgIGVucmljaG1lbnQ/OiBMTE1FbnJpY2htZW50LFxuICAgIG1vZGU6IE91dHB1dE1vZGUgPSAnYmFsYW5jZWQnXG4gICk6IHN0cmluZyB7XG5cbiAgICBpZiAobW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgZnJvbnRtYXR0ZXI6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAvLyBDb3JlIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIHx8IERFRkFVTFRTLnByb2ZpbGUsXG4gICAgICBjcmVhdGVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBnZW5lcmF0b3I6IG9wdGlvbnMuZ2VuZXJhdG9yLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgdGl0bGU6IG9wdGlvbnMudGl0bGUgfHwgJ1VudGl0bGVkJyxcbiAgICAgIGV4dHJhY3Rpb25fY29uZmlkZW5jZTogb3B0aW9ucy5leHRyYWN0aW9uQ29uZmlkZW5jZSA/PyBERUZBVUxUUy5leHRyYWN0aW9uQ29uZmlkZW5jZSxcbiAgICAgIGNvbnRlbnRfcXVhbGl0eTogb3B0aW9ucy5jb250ZW50UXVhbGl0eSA/PyBERUZBVUxUUy5jb250ZW50UXVhbGl0eSxcbiAgICB9O1xuXG4gICAgLy8gU291cmNlIGZpbGVcbiAgICBpZiAob3B0aW9ucy5zb3VyY2VQYXRoKSB7XG4gICAgICBmcm9udG1hdHRlci5zb3VyY2VfZmlsZSA9IG9wdGlvbnMuc291cmNlUGF0aDtcbiAgICB9XG5cbiAgICAvLyBBZGQgZGV0ZXJtaW5pc3RpYyBmaWVsZHMgYmFzZWQgb24gbW9kZVxuICAgIGlmIChtb2RlID09PSAnY29tcGxldGUnKSB7XG4gICAgICAvLyBJbmNsdWRlIGFsbCBkZXRlcm1pbmlzdGljIGZpZWxkc1xuICAgICAgY29uc3QgY2xlYW5lZCA9IHRoaXMuY2xlYW5PYmplY3QoZGV0ZXJtaW5pc3RpYyk7XG4gICAgICBPYmplY3QuYXNzaWduKGZyb250bWF0dGVyLCBjbGVhbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQmFsYW5jZWQgbW9kZSAtIGluY2x1ZGUgb25seSBrZXkgZmllbGRzXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIEJBTEFOQ0VEX0ZJRUxEUykge1xuICAgICAgICBpZiAoZGV0ZXJtaW5pc3RpY1tmaWVsZF0gIT09IHVuZGVmaW5lZCAmJiBkZXRlcm1pbmlzdGljW2ZpZWxkXSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZyb250bWF0dGVyW2ZpZWxkXSA9IGRldGVybWluaXN0aWNbZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTExNIGVucmljaG1lbnQgZmllbGRzIChmbGF0LCBub3QgbmVzdGVkKVxuICAgIGlmIChlbnJpY2htZW50KSB7XG4gICAgICBpZiAoZW5yaWNobWVudC5zdW1tYXJ5KSBmcm9udG1hdHRlci5zdW1tYXJ5ID0gZW5yaWNobWVudC5zdW1tYXJ5O1xuICAgICAgaWYgKGVucmljaG1lbnQudGFncz8ubGVuZ3RoKSBmcm9udG1hdHRlci50YWdzID0gZW5yaWNobWVudC50YWdzO1xuICAgICAgaWYgKGVucmljaG1lbnQuY2F0ZWdvcnkpIGZyb250bWF0dGVyLmNhdGVnb3J5ID0gZW5yaWNobWVudC5jYXRlZ29yeTtcbiAgICAgIGlmIChlbnJpY2htZW50LmF1ZGllbmNlKSBmcm9udG1hdHRlci5hdWRpZW5jZSA9IGVucmljaG1lbnQuYXVkaWVuY2U7XG4gICAgICBpZiAoZW5yaWNobWVudC5kb2NfcHVycG9zZSkgZnJvbnRtYXR0ZXIuZG9jX3B1cnBvc2UgPSBlbnJpY2htZW50LmRvY19wdXJwb3NlO1xuICAgICAgaWYgKGVucmljaG1lbnQuY29tcGxleGl0eSkgZnJvbnRtYXR0ZXIuY29tcGxleGl0eSA9IGVucmljaG1lbnQuY29tcGxleGl0eTtcbiAgICAgIGlmIChlbnJpY2htZW50LmFjdGlvbmFibGUgIT09IHVuZGVmaW5lZCkgZnJvbnRtYXR0ZXIuYWN0aW9uYWJsZSA9IGVucmljaG1lbnQuYWN0aW9uYWJsZTtcbiAgICAgIGlmIChlbnJpY2htZW50LmtleV90ZWNobm9sb2dpZXM/Lmxlbmd0aCkge1xuICAgICAgICBmcm9udG1hdHRlci5rZXlfdGVjaG5vbG9naWVzID0gZW5yaWNobWVudC5rZXlfdGVjaG5vbG9naWVzO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBObyBlbnJpY2htZW50IHByb3ZpZGVkIC0gZG9uJ3QgYWRkIGVtcHR5IHBsYWNlaG9sZGVyIGZpZWxkc1xuXG4gICAgY29uc3QgeWFtbFN0ciA9IHlhbWwuZHVtcCh0aGlzLnJlbW92ZU51bGxzKGZyb250bWF0dGVyKSwge1xuICAgICAgaW5kZW50OiAyLFxuICAgICAgbGluZVdpZHRoOiAtMSxcbiAgICAgIHF1b3RpbmdUeXBlOiBcIidcIixcbiAgICAgIHNvcnRLZXlzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxTdHJ9LS0tYDtcbiAgfVxuXG4gIHN0YXRpYyBnZW5lcmF0ZU1hcmtkb3duKFxuICAgIG9wdGlvbnM6IEZyb250bWF0dGVyT3B0aW9ucyxcbiAgICBkZXRlcm1pbmlzdGljOiBEZXRlcm1pbmlzdGljRmllbGRzLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBlbnJpY2htZW50PzogTExNRW5yaWNobWVudCxcbiAgICBtb2RlOiBPdXRwdXRNb2RlID0gJ2JhbGFuY2VkJ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGZtID0gdGhpcy5nZW5lcmF0ZShvcHRpb25zLCBkZXRlcm1pbmlzdGljLCBlbnJpY2htZW50LCBtb2RlKTtcbiAgICBpZiAoIWZtKSByZXR1cm4gY29udGVudDtcbiAgICByZXR1cm4gYCR7Zm19XFxuXFxuJHtjb250ZW50fWA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjbGVhbk9iamVjdChvYmo6IGFueSk6IGFueSB7XG4gICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICBpZiAoay5zdGFydHNXaXRoKCdfJykpIGNvbnRpbnVlO1xuICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXN1bHRba10gPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IHRoaXMuY2xlYW5PYmplY3Qodik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba10gPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlTnVsbHMob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmouZmlsdGVyKHggPT4geCAhPSBudWxsKS5tYXAoeCA9PiB0aGlzLnJlbW92ZU51bGxzKHgpKTtcbiAgICB9XG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgICAgaWYgKHYgIT0gbnVsbCkgcmVzdWx0W2tdID0gdGhpcy5yZW1vdmVOdWxscyh2KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cbn1cbiJdfQ==
|