UNPKG

llm-md

Version:

Convert JSON to Markdown optimized for LLM consumption

81 lines (80 loc) 2.94 kB
"use strict"; /** * 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;