llm-md
Version:
Convert JSON to Markdown optimized for LLM consumption
81 lines (80 loc) • 2.94 kB
JavaScript
;
/**
* Main API for llm-md library
* Convert JSON to Markdown optimized for LLM consumption
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Analyzer = exports.analyze = void 0;
exports.convert = convert;
exports.convertVerbose = convertVerbose;
const analyzer_1 = require("./analyzer");
const table_1 = require("./converters/table");
const keyvalue_1 = require("./converters/keyvalue");
const yaml_1 = require("./converters/yaml");
const hybrid_1 = require("./converters/hybrid");
const list_1 = require("./converters/list");
const utils_1 = require("./utils");
var analyzer_2 = require("./analyzer");
Object.defineProperty(exports, "analyze", { enumerable: true, get: function () { return analyzer_2.analyze; } });
Object.defineProperty(exports, "Analyzer", { enumerable: true, get: function () { return analyzer_2.Analyzer; } });
/**
* Convert JSON data to Markdown format optimized for LLMs
* @param data JSON data to convert
* @param options Conversion options
* @returns Markdown string
*/
function convert(data, options) {
const result = convertVerbose(data, options);
return result.markdown;
}
/**
* Convert JSON data to Markdown with metadata about the conversion
* @param data JSON data to convert
* @param options Conversion options
* @returns Conversion result with markdown and metadata
*/
function convertVerbose(data, options) {
// Analyze data to determine strategy
const analyzer = new analyzer_1.Analyzer();
const analysis = analyzer.analyze(data, options);
// Use forced strategy if provided
const strategy = options?.forceStrategy ?? analysis.strategy;
// Select appropriate converter
let markdown;
switch (strategy) {
case 'table':
markdown = new table_1.TableConverter().convert(data, options);
break;
case 'key-value':
markdown = new keyvalue_1.KeyValueConverter().convert(data, options);
break;
case 'yaml-block':
markdown = new yaml_1.YAMLConverter().convert(data, options);
break;
case 'hybrid':
markdown = new hybrid_1.HybridConverter().convert(data, options);
break;
case 'numbered-list':
markdown = new list_1.ListConverter().convert(data, options);
break;
default:
// Fallback to key-value for unknown strategies
markdown = new keyvalue_1.KeyValueConverter().convert(data, options);
}
// Build result
const result = {
markdown,
};
// Add metadata if verbose mode is enabled
if (options?.verbose) {
result.metadata = {
strategy,
depth: analysis.depth,
confidence: analysis.uniformity,
tokensEstimate: (0, utils_1.estimateTokens)(markdown),
};
}
return result;
}
// Default export for convenience
exports.default = convert;