@oxog/npm-llms 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +286 -0
- package/dist/cli/index.cjs +5154 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +5152 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.cjs +3589 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +427 -0
- package/dist/index.d.ts +427 -0
- package/dist/index.js +3558 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel-I4Zn2uXv.d.cts +559 -0
- package/dist/kernel-I4Zn2uXv.d.ts +559 -0
- package/dist/plugins/index.cjs +4171 -0
- package/dist/plugins/index.cjs.map +1 -0
- package/dist/plugins/index.d.cts +452 -0
- package/dist/plugins/index.d.ts +452 -0
- package/dist/plugins/index.js +4133 -0
- package/dist/plugins/index.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/errors.ts","../../src/utils/http.ts","../../src/utils/tar.ts","../../src/core/fetcher.ts","../../src/plugins/core/types-resolver.ts","../../src/parsers/jsdoc.ts","../../src/parsers/dts.ts","../../src/plugins/core/dts-parser.ts","../../src/parsers/typescript.ts","../../src/plugins/core/ts-source-parser.ts","../../src/parsers/readme.ts","../../src/plugins/core/readme-parser.ts","../../src/core/tokens.ts","../../src/outputs/llms.ts","../../src/plugins/core/llms-output.ts","../../src/outputs/llms-full.ts","../../src/plugins/core/llms-full-output.ts","../../src/outputs/markdown.ts","../../src/plugins/core/markdown-output.ts","../../src/outputs/json.ts","../../src/plugins/core/json-output.ts","../../src/plugins/core/index.ts","../../src/plugins/optional/ai-base.ts","../../src/plugins/optional/claude-ai.ts","../../src/plugins/optional/openai-ai.ts","../../src/plugins/optional/gemini-ai.ts","../../src/plugins/optional/ollama-ai.ts","../../src/plugins/optional/groq-ai.ts","../../src/kernel.ts","../../src/plugins/optional/changelog-parser.ts","../../src/plugins/optional/html-output.ts"],"names":["gunzipSync","url","exports","PATTERNS","functions","classes","interfaces","types","DEFAULT_CONFIG","DEFAULT_OPTIONS"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Custom error classes for @oxog/npm-llms\n * @module errors\n */\n\n/**\n * Base error class for npm-llms\n * @example\n * ```typescript\n * try {\n * await extractor.extract('nonexistent-package');\n * } catch (error) {\n * if (error instanceof NpmLlmsError) {\n * console.log(error.code); // 'PACKAGE_NOT_FOUND'\n * }\n * }\n * ```\n */\nexport class NpmLlmsError extends Error {\n /**\n * Create a new NpmLlmsError\n * @param message - Error message\n * @param code - Error code\n * @param details - Additional error details\n */\n constructor(\n message: string,\n public readonly code: string,\n public readonly details?: Record<string, unknown>\n ) {\n super(message);\n this.name = 'NpmLlmsError';\n // Maintains proper stack trace for where error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n /**\n * Convert error to JSON\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n details: this.details,\n };\n }\n}\n\n/**\n * Error thrown when a package is not found on npm\n * @example\n * ```typescript\n * throw new PackageNotFoundError('nonexistent-package');\n * // Error: Package \"nonexistent-package\" not found on npm\n * ```\n */\nexport class PackageNotFoundError extends NpmLlmsError {\n constructor(packageName: string) {\n super(`Package \"${packageName}\" not found on npm`, 'PACKAGE_NOT_FOUND', { packageName });\n this.name = 'PackageNotFoundError';\n }\n}\n\n/**\n * Error thrown when a specific version is not found\n * @example\n * ```typescript\n * throw new VersionNotFoundError('lodash', '99.99.99');\n * // Error: Version \"99.99.99\" not found for package \"lodash\"\n * ```\n */\nexport class VersionNotFoundError extends NpmLlmsError {\n constructor(packageName: string, version: string) {\n super(`Version \"${version}\" not found for package \"${packageName}\"`, 'VERSION_NOT_FOUND', {\n packageName,\n version,\n });\n this.name = 'VersionNotFoundError';\n }\n}\n\n/**\n * Error thrown when a download fails\n * @example\n * ```typescript\n * throw new DownloadError('Network timeout', 'https://registry.npmjs.org/...');\n * ```\n */\nexport class DownloadError extends NpmLlmsError {\n constructor(message: string, url?: string) {\n super(message, 'DOWNLOAD_FAILED', { url });\n this.name = 'DownloadError';\n }\n}\n\n/**\n * Error thrown when parsing fails\n * @example\n * ```typescript\n * throw new ParseError('Invalid TypeScript syntax', 'index.d.ts');\n * ```\n */\nexport class ParseError extends NpmLlmsError {\n constructor(message: string, file?: string, position?: { line: number; column: number }) {\n super(message, 'PARSE_ERROR', { file, position });\n this.name = 'ParseError';\n }\n}\n\n/**\n * Error thrown when AI provider fails\n * @example\n * ```typescript\n * throw new AIError('Rate limit exceeded', 'claude');\n * ```\n */\nexport class AIError extends NpmLlmsError {\n constructor(message: string, provider?: string) {\n super(message, 'AI_ERROR', { provider });\n this.name = 'AIError';\n }\n}\n\n/**\n * Error thrown when a plugin fails\n * @example\n * ```typescript\n * throw new PluginError('Plugin \"custom-parser\" failed to initialize', 'custom-parser');\n * ```\n */\nexport class PluginError extends NpmLlmsError {\n constructor(message: string, pluginName?: string) {\n super(message, 'PLUGIN_ERROR', { pluginName });\n this.name = 'PluginError';\n }\n}\n\n/**\n * Error thrown when cache operation fails\n * @example\n * ```typescript\n * throw new CacheError('Failed to write to cache directory');\n * ```\n */\nexport class CacheError extends NpmLlmsError {\n constructor(message: string) {\n super(message, 'CACHE_ERROR');\n this.name = 'CacheError';\n }\n}\n\n/**\n * Error thrown when configuration is invalid\n * @example\n * ```typescript\n * throw new ConfigError('Invalid AI provider: \"invalid\"');\n * ```\n */\nexport class ConfigError extends NpmLlmsError {\n constructor(message: string) {\n super(message, 'CONFIG_ERROR');\n this.name = 'ConfigError';\n }\n}\n\n/**\n * Error thrown when tar extraction fails\n * @example\n * ```typescript\n * throw new TarError('Invalid tar header at offset 512');\n * ```\n */\nexport class TarError extends NpmLlmsError {\n constructor(message: string, offset?: number) {\n super(message, 'TAR_ERROR', { offset });\n this.name = 'TarError';\n }\n}\n\n/**\n * Error thrown when a network request times out\n * @example\n * ```typescript\n * throw new TimeoutError('Request timed out after 30000ms', 30000);\n * ```\n */\nexport class TimeoutError extends NpmLlmsError {\n constructor(message: string, timeout?: number) {\n super(message, 'TIMEOUT_ERROR', { timeout });\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Error thrown when validation fails\n * @example\n * ```typescript\n * throw new ValidationError('Package name cannot be empty');\n * ```\n */\nexport class ValidationError extends NpmLlmsError {\n constructor(message: string, field?: string) {\n super(message, 'VALIDATION_ERROR', { field });\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Check if an error is a NpmLlmsError\n * @param error - Error to check\n * @returns True if error is a NpmLlmsError\n * @example\n * ```typescript\n * if (isNpmLlmsError(error)) {\n * console.log(error.code);\n * }\n * ```\n */\nexport function isNpmLlmsError(error: unknown): error is NpmLlmsError {\n return error instanceof NpmLlmsError;\n}\n\n/**\n * Get error code from any error\n * @param error - Error to get code from\n * @returns Error code or 'UNKNOWN_ERROR'\n * @example\n * ```typescript\n * const code = getErrorCode(error); // 'PACKAGE_NOT_FOUND' or 'UNKNOWN_ERROR'\n * ```\n */\nexport function getErrorCode(error: unknown): string {\n if (isNpmLlmsError(error)) {\n return error.code;\n }\n return 'UNKNOWN_ERROR';\n}\n\n/**\n * Wrap any error as NpmLlmsError\n * @param error - Error to wrap\n * @param code - Error code to use\n * @returns NpmLlmsError\n * @example\n * ```typescript\n * try {\n * await someOperation();\n * } catch (error) {\n * throw wrapError(error, 'OPERATION_FAILED');\n * }\n * ```\n */\nexport function wrapError(error: unknown, code: string = 'UNKNOWN_ERROR'): NpmLlmsError {\n if (isNpmLlmsError(error)) {\n return error;\n }\n const message = error instanceof Error ? error.message : String(error);\n return new NpmLlmsError(message, code, {\n originalError: error instanceof Error ? error.name : typeof error,\n });\n}\n","/**\n * HTTP utilities for fetching packages from NPM registry\n * Uses native fetch API (Node 18+) with zero dependencies\n * @module utils/http\n */\n\nimport { gunzipSync } from 'node:zlib';\nimport { DownloadError, TimeoutError } from '../errors.js';\n\n/**\n * Default NPM registry URL\n */\nexport const DEFAULT_REGISTRY = 'https://registry.npmjs.org';\n\n/**\n * Default request timeout (30 seconds)\n */\nexport const DEFAULT_TIMEOUT = 30000;\n\n/**\n * HTTP request options\n */\nexport interface HttpOptions {\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Additional headers */\n headers?: Record<string, string>;\n /** Registry URL (for NPM requests) */\n registry?: string;\n}\n\n/**\n * HTTP response wrapper\n */\nexport interface HttpResponse<T = unknown> {\n /** Response data */\n data: T;\n /** HTTP status code */\n status: number;\n /** Response headers */\n headers: Headers;\n}\n\n/**\n * Create an AbortController with timeout\n * @param timeout - Timeout in milliseconds\n * @returns AbortController and cleanup function\n */\nfunction createTimeoutController(timeout: number): {\n controller: AbortController;\n cleanup: () => void;\n} {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => {\n controller.abort();\n }, timeout);\n\n return {\n controller,\n cleanup: () => clearTimeout(timeoutId),\n };\n}\n\n/**\n * Fetch JSON from a URL with timeout support\n * @param url - URL to fetch\n * @param options - HTTP options\n * @returns Response data\n * @throws DownloadError on network/response errors\n * @throws TimeoutError on timeout\n */\nexport async function fetchJson<T = unknown>(\n url: string,\n options: HttpOptions = {}\n): Promise<HttpResponse<T>> {\n const timeout = options.timeout ?? DEFAULT_TIMEOUT;\n const { controller, cleanup } = createTimeoutController(timeout);\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n ...options.headers,\n },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new DownloadError(`HTTP ${response.status}: ${response.statusText}`, url);\n }\n\n const data = (await response.json()) as T;\n return {\n data,\n status: response.status,\n headers: response.headers,\n };\n } catch (error) {\n if (error instanceof DownloadError) {\n throw error;\n }\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TimeoutError(`Request timed out after ${timeout}ms`, timeout);\n }\n throw new DownloadError(error.message, url);\n }\n throw new DownloadError('Unknown fetch error', url);\n } finally {\n cleanup();\n }\n}\n\n/**\n * Fetch binary data from a URL\n * @param url - URL to fetch\n * @param options - HTTP options\n * @returns ArrayBuffer of response\n * @throws DownloadError on network/response errors\n * @throws TimeoutError on timeout\n */\nexport async function fetchBinary(\n url: string,\n options: HttpOptions = {}\n): Promise<HttpResponse<ArrayBuffer>> {\n const timeout = options.timeout ?? DEFAULT_TIMEOUT;\n const { controller, cleanup } = createTimeoutController(timeout);\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/octet-stream',\n ...options.headers,\n },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new DownloadError(`HTTP ${response.status}: ${response.statusText}`, url);\n }\n\n const data = await response.arrayBuffer();\n return {\n data,\n status: response.status,\n headers: response.headers,\n };\n } catch (error) {\n if (error instanceof DownloadError) {\n throw error;\n }\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new TimeoutError(`Request timed out after ${timeout}ms`, timeout);\n }\n throw new DownloadError(error.message, url);\n }\n throw new DownloadError('Unknown fetch error', url);\n } finally {\n cleanup();\n }\n}\n\n/**\n * Fetch and decompress a gzipped tarball\n * @param url - Tarball URL\n * @param options - HTTP options\n * @returns Decompressed buffer\n * @throws DownloadError on network/response errors\n */\nexport async function fetchGzipped(\n url: string,\n options: HttpOptions = {}\n): Promise<Buffer> {\n const { data: gzipped } = await fetchBinary(url, options);\n try {\n return gunzipSync(Buffer.from(gzipped));\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown decompression error';\n throw new DownloadError(`Failed to decompress gzip: ${message}`, url);\n }\n}\n\n/**\n * Encode a package name for URL\n * Handles scoped packages: @scope/name → @scope%2Fname\n * @param name - Package name\n * @returns URL-safe package name\n */\nexport function encodePackageName(name: string): string {\n if (name.startsWith('@')) {\n // Scoped package: @scope/name → @scope%2Fname\n const slashIndex = name.indexOf('/');\n if (slashIndex === -1) {\n return encodeURIComponent(name);\n }\n const scope = name.slice(0, slashIndex);\n const pkg = name.slice(slashIndex + 1);\n return `${scope}%2F${encodeURIComponent(pkg)}`;\n }\n return encodeURIComponent(name);\n}\n\n/**\n * Build NPM registry URL for a package\n * @param name - Package name\n * @param version - Optional version\n * @param registry - Registry URL\n * @returns Full URL\n */\nexport function buildPackageUrl(\n name: string,\n version?: string,\n registry: string = DEFAULT_REGISTRY\n): string {\n const encodedName = encodePackageName(name);\n const base = `${registry}/${encodedName}`;\n return version ? `${base}/${version}` : base;\n}\n\n/**\n * Validate HTTP status\n * @param status - HTTP status code\n * @param url - Request URL for error message\n * @throws DownloadError if status is not OK\n */\nexport function validateStatus(status: number, url: string): void {\n if (status < 200 || status >= 300) {\n throw new DownloadError(`HTTP ${status}`, url);\n }\n}\n","/**\n * Zero-dependency tar parser for extracting NPM package tarballs\n * Implements the POSIX ustar format specification\n * @module utils/tar\n */\n\nimport { TarError } from '../errors.js';\nimport type { TarEntry, TarHeader } from '../types.js';\n\n/**\n * Tar block size (512 bytes per block)\n */\nconst BLOCK_SIZE = 512;\n\n/**\n * Tar file type flags\n */\nconst TAR_TYPES = {\n FILE: '0',\n FILE_ALT: '', // Old-style regular file\n LINK: '1',\n SYMLINK: '2',\n CHARDEV: '3',\n BLOCKDEV: '4',\n DIRECTORY: '5',\n FIFO: '6',\n CONTIGUOUS: '7',\n EXTENDED_HEADER: 'x',\n GLOBAL_EXTENDED_HEADER: 'g',\n GNU_LONGNAME: 'L',\n GNU_LONGLINK: 'K',\n} as const;\n\n/**\n * Text decoder for parsing tar headers\n */\nconst decoder = new TextDecoder('utf-8');\n\n/**\n * Check if a buffer block is all zeros (end-of-archive marker)\n * @param buffer - Buffer to check\n * @param offset - Offset to start checking\n * @returns True if block is all zeros\n */\nfunction isZeroBlock(buffer: Uint8Array, offset: number): boolean {\n const end = Math.min(offset + BLOCK_SIZE, buffer.length);\n for (let i = offset; i < end; i++) {\n if (buffer[i] !== 0) return false;\n }\n return true;\n}\n\n/**\n * Parse an octal string from tar header\n * @param buffer - Buffer containing octal string\n * @param offset - Start offset\n * @param length - Length of field\n * @returns Parsed number\n */\nfunction parseOctal(buffer: Uint8Array, offset: number, length: number): number {\n const bytes = buffer.slice(offset, offset + length);\n const str = decoder.decode(bytes).replace(/\\0/g, '').trim();\n if (!str) return 0;\n return parseInt(str, 8) || 0;\n}\n\n/**\n * Parse a string from tar header\n * @param buffer - Buffer containing string\n * @param offset - Start offset\n * @param length - Length of field\n * @returns Parsed string (null-terminated)\n */\nfunction parseString(buffer: Uint8Array, offset: number, length: number): string {\n const bytes = buffer.slice(offset, offset + length);\n const str = decoder.decode(bytes);\n // Find null terminator\n const nullIndex = str.indexOf('\\0');\n return nullIndex >= 0 ? str.slice(0, nullIndex) : str;\n}\n\n/**\n * Calculate tar header checksum\n * @param buffer - Header buffer\n * @param offset - Header start offset\n * @returns Calculated checksum\n */\nfunction calculateChecksum(buffer: Uint8Array, offset: number): number {\n let sum = 0;\n for (let i = 0; i < BLOCK_SIZE; i++) {\n // Checksum field (bytes 148-155) treated as spaces\n if (i >= 148 && i < 156) {\n sum += 32; // space character\n } else {\n sum += buffer[offset + i] ?? 0;\n }\n }\n return sum;\n}\n\n/**\n * Parse a tar header from buffer\n * @param buffer - Buffer containing tar data\n * @param offset - Offset to header\n * @returns Parsed header or null if end-of-archive\n * @throws TarError if header is invalid\n */\nexport function parseTarHeader(buffer: Uint8Array, offset: number): TarHeader | null {\n // Check for end-of-archive (two consecutive zero blocks)\n if (isZeroBlock(buffer, offset)) {\n return null;\n }\n\n // Validate buffer length\n if (offset + BLOCK_SIZE > buffer.length) {\n throw new TarError('Unexpected end of tar archive', offset);\n }\n\n // Parse header fields according to POSIX ustar format\n // Bytes 0-99: File name\n const name = parseString(buffer, offset, 100);\n\n // Bytes 100-107: File mode (octal)\n const mode = parseOctal(buffer, offset + 100, 8);\n\n // Bytes 108-115: Owner user ID (octal)\n const uid = parseOctal(buffer, offset + 108, 8);\n\n // Bytes 116-123: Owner group ID (octal)\n const gid = parseOctal(buffer, offset + 116, 8);\n\n // Bytes 124-135: File size (octal)\n const size = parseOctal(buffer, offset + 124, 12);\n\n // Bytes 136-147: Modification time (octal, Unix timestamp)\n const mtime = parseOctal(buffer, offset + 136, 12);\n\n // Bytes 148-155: Header checksum (octal)\n const checksum = parseOctal(buffer, offset + 148, 8);\n\n // Bytes 156: Type flag\n const type = parseString(buffer, offset + 156, 1);\n\n // Bytes 157-256: Link name\n const linkname = parseString(buffer, offset + 157, 100);\n\n // Validate checksum\n const calculatedChecksum = calculateChecksum(buffer, offset);\n if (checksum !== 0 && checksum !== calculatedChecksum) {\n throw new TarError(`Invalid tar header checksum: expected ${checksum}, got ${calculatedChecksum}`, offset);\n }\n\n // Check for ustar format (bytes 257-262: \"ustar\\0\")\n const magic = parseString(buffer, offset + 257, 6);\n let fullName = name;\n\n if (magic === 'ustar' || magic === 'ustar ') {\n // UStar format: prefix (bytes 345-499) can extend file name\n const prefix = parseString(buffer, offset + 345, 155);\n if (prefix) {\n fullName = `${prefix}/${name}`;\n }\n }\n\n return {\n name: fullName,\n mode,\n uid,\n gid,\n size,\n mtime,\n checksum,\n type,\n linkname,\n };\n}\n\n/**\n * Sanitize file path to prevent directory traversal\n * @param path - Path to sanitize\n * @returns Sanitized path\n * @throws TarError if path is unsafe\n */\nexport function sanitizePath(path: string): string {\n // Normalize path separators\n let normalized = path.replace(/\\\\/g, '/');\n\n // Remove leading slash\n if (normalized.startsWith('/')) {\n normalized = normalized.slice(1);\n }\n\n // Check for directory traversal attempts\n const parts = normalized.split('/');\n const safeParts: string[] = [];\n\n for (const part of parts) {\n if (part === '..') {\n throw new TarError(`Path traversal detected: ${path}`);\n }\n if (part && part !== '.') {\n safeParts.push(part);\n }\n }\n\n return safeParts.join('/');\n}\n\n/**\n * Remove common NPM package prefix from path\n * NPM tarballs typically have a 'package/' prefix\n * @param path - Path to clean\n * @returns Path without prefix\n */\nexport function removePackagePrefix(path: string): string {\n const prefixes = ['package/', 'package\\\\'];\n for (const prefix of prefixes) {\n if (path.startsWith(prefix)) {\n return path.slice(prefix.length);\n }\n }\n return path;\n}\n\n/**\n * Determine entry type from tar type flag\n * Note: Only called for FILE types since directories/symlinks are filtered earlier\n * @param _type - Tar type flag (unused since we only process files)\n * @returns Entry type\n */\nfunction getEntryType(_type: string): TarEntry['type'] {\n // extractTarSync only calls this for FILE and FILE_ALT types\n // Directories and symlinks are skipped before reaching here\n return 'file';\n}\n\n/**\n * Check if file should be extracted (is a text file we care about)\n * @param path - File path\n * @returns True if file should be extracted\n */\nfunction shouldExtract(path: string): boolean {\n const lower = path.toLowerCase();\n\n // Extract TypeScript definitions\n if (lower.endsWith('.d.ts') || lower.endsWith('.d.mts') || lower.endsWith('.d.cts')) {\n return true;\n }\n\n // Extract source files\n if (\n lower.endsWith('.ts') ||\n lower.endsWith('.tsx') ||\n lower.endsWith('.js') ||\n lower.endsWith('.mjs') ||\n lower.endsWith('.cjs') ||\n lower.endsWith('.jsx')\n ) {\n return true;\n }\n\n // Extract documentation\n if (\n lower.endsWith('.md') ||\n lower.endsWith('.txt') ||\n lower.endsWith('.json') ||\n lower.endsWith('.yaml') ||\n lower.endsWith('.yml')\n ) {\n return true;\n }\n\n // Extract package.json and config files at root level\n const filename = path.split('/').pop() ?? '';\n if (\n filename === 'package.json' ||\n filename === 'README.md' ||\n filename === 'CHANGELOG.md' ||\n filename === 'LICENSE' ||\n filename === 'LICENSE.md'\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Extract tar entries from buffer\n * @param buffer - Decompressed tar buffer\n * @yields TarEntry for each file\n * @throws TarError on parse errors\n */\nexport function* extractTarSync(buffer: Buffer | ArrayBuffer): Generator<TarEntry> {\n const data = buffer instanceof Buffer ? new Uint8Array(buffer) : new Uint8Array(buffer);\n let offset = 0;\n let gnuLongName: string | null = null;\n\n while (offset < data.length) {\n // Parse header\n const header = parseTarHeader(data, offset);\n\n // End of archive\n if (!header) {\n break;\n }\n\n offset += BLOCK_SIZE;\n\n // Handle GNU long name extension\n if (header.type === TAR_TYPES.GNU_LONGNAME) {\n const contentBytes = data.slice(offset, offset + header.size);\n gnuLongName = decoder.decode(contentBytes).replace(/\\0/g, '');\n offset += Math.ceil(header.size / BLOCK_SIZE) * BLOCK_SIZE;\n continue;\n }\n\n // Use GNU long name if present\n const entryName = gnuLongName ?? header.name;\n gnuLongName = null;\n\n // Skip if not a regular file\n if (header.type !== TAR_TYPES.FILE && header.type !== TAR_TYPES.FILE_ALT) {\n offset += Math.ceil(header.size / BLOCK_SIZE) * BLOCK_SIZE;\n continue;\n }\n\n // Sanitize and clean path\n let path: string;\n try {\n path = sanitizePath(entryName);\n path = removePackagePrefix(path);\n } catch {\n // Skip files with unsafe paths\n offset += Math.ceil(header.size / BLOCK_SIZE) * BLOCK_SIZE;\n continue;\n }\n\n // Skip if we don't need this file\n if (!shouldExtract(path)) {\n offset += Math.ceil(header.size / BLOCK_SIZE) * BLOCK_SIZE;\n continue;\n }\n\n // Extract content - TextDecoder with UTF-8 (default) replaces invalid sequences\n // instead of throwing, so binary files get replacement characters\n const content = data.slice(offset, offset + header.size);\n const textContent = decoder.decode(content);\n\n yield {\n path,\n content: textContent,\n size: header.size,\n type: getEntryType(header.type),\n };\n\n // Move to next header (content padded to block boundary)\n offset += Math.ceil(header.size / BLOCK_SIZE) * BLOCK_SIZE;\n }\n}\n\n/**\n * Extract tar entries to a Map\n * @param buffer - Decompressed tar buffer\n * @returns Map of path to content\n * @throws TarError on parse errors\n */\nexport function extractTarToMap(buffer: Buffer | ArrayBuffer): Map<string, string> {\n const files = new Map<string, string>();\n\n for (const entry of extractTarSync(buffer)) {\n if (entry.type === 'file') {\n files.set(entry.path, entry.content);\n }\n }\n\n return files;\n}\n\n/**\n * List files in tar archive without extracting content\n * @param buffer - Decompressed tar buffer\n * @returns Array of file paths\n */\nexport function listTarFiles(buffer: Buffer | ArrayBuffer): string[] {\n const data = buffer instanceof Buffer ? new Uint8Array(buffer) : new Uint8Array(buffer);\n const files: string[] = [];\n let offset = 0;\n let gnuLongName: string | null = null;\n\n while (offset < data.length) {\n const header = parseTarHeader(data, offset);\n if (!header) break;\n\n offset += BLOCK_SIZE;\n\n if (header.type === TAR_TYPES.GNU_LONGNAME) {\n const contentBytes = data.slice(offset, offset + header.size);\n gnuLongName = decoder.decode(contentBytes).replace(/\\0/g, '');\n offset += Math.ceil(header.size / BLOCK_SIZE) * BLOCK_SIZE;\n continue;\n }\n\n const entryName = gnuLongName ?? header.name;\n gnuLongName = null;\n\n if (header.type === TAR_TYPES.FILE || header.type === TAR_TYPES.FILE_ALT) {\n try {\n let path = sanitizePath(entryName);\n path = removePackagePrefix(path);\n files.push(path);\n } catch {\n // Skip unsafe paths\n }\n }\n\n offset += Math.ceil(header.size / BLOCK_SIZE) * BLOCK_SIZE;\n }\n\n return files;\n}\n","/**\n * NPM package fetcher\n * Downloads and extracts packages from the NPM registry\n * @module core/fetcher\n */\n\nimport {\n PackageNotFoundError,\n VersionNotFoundError,\n DownloadError,\n ValidationError,\n} from '../errors.js';\nimport type { PackageMetadata, PackageInfo } from '../types.js';\nimport {\n fetchJson,\n fetchGzipped,\n buildPackageUrl,\n DEFAULT_REGISTRY,\n type HttpOptions,\n} from '../utils/http.js';\nimport { extractTarToMap } from '../utils/tar.js';\n\n/**\n * NPM registry response for package metadata\n */\ninterface NpmRegistryResponse {\n name: string;\n description?: string;\n 'dist-tags'?: Record<string, string>;\n versions?: Record<\n string,\n {\n name: string;\n version: string;\n description?: string;\n main?: string;\n types?: string;\n typings?: string;\n exports?: Record<string, unknown>;\n repository?: { type: string; url: string } | string;\n keywords?: string[];\n author?: string | { name: string; email?: string };\n license?: string;\n homepage?: string;\n dist?: {\n tarball: string;\n shasum?: string;\n integrity?: string;\n };\n }\n >;\n}\n\n/**\n * NPM registry response for a specific version\n */\ninterface NpmVersionResponse {\n name: string;\n version: string;\n description?: string;\n main?: string;\n types?: string;\n typings?: string;\n exports?: Record<string, unknown>;\n repository?: { type: string; url: string } | string;\n keywords?: string[];\n author?: string | { name: string; email?: string };\n license?: string;\n homepage?: string;\n dist?: {\n tarball: string;\n shasum?: string;\n integrity?: string;\n };\n}\n\n/**\n * Validate package name format\n * @param name - Package name to validate\n * @throws ValidationError if invalid\n */\nexport function validatePackageName(name: string): void {\n if (!name || typeof name !== 'string') {\n throw new ValidationError('Package name is required', 'name');\n }\n\n // NPM package name rules\n const validPattern = /^(?:@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n\n if (!validPattern.test(name)) {\n throw new ValidationError(\n `Invalid package name: \"${name}\". Package names must be lowercase and may contain letters, numbers, hyphens, dots, and underscores.`,\n 'name'\n );\n }\n\n // Additional checks\n if (name.length > 214) {\n throw new ValidationError('Package name cannot exceed 214 characters', 'name');\n }\n}\n\n/**\n * Parse package specifier (name@version)\n * @param spec - Package specifier (e.g., \"lodash\", \"lodash@4.17.21\", \"@scope/pkg@1.0.0\")\n * @returns Parsed name and version\n */\nexport function parsePackageSpec(spec: string): { name: string; version?: string } {\n if (!spec || typeof spec !== 'string') {\n throw new ValidationError('Package specifier is required', 'spec');\n }\n\n const trimmed = spec.trim();\n\n // Handle scoped packages: @scope/name@version\n if (trimmed.startsWith('@')) {\n const firstSlash = trimmed.indexOf('/');\n if (firstSlash === -1) {\n throw new ValidationError(`Invalid scoped package: \"${spec}\"`, 'spec');\n }\n\n // Find @ after the scope/name part\n const afterScope = trimmed.slice(firstSlash + 1);\n const versionSep = afterScope.lastIndexOf('@');\n\n if (versionSep > 0) {\n const name = trimmed.slice(0, firstSlash + 1 + versionSep);\n const version = afterScope.slice(versionSep + 1);\n return { name, version: version || undefined };\n }\n\n return { name: trimmed };\n }\n\n // Unscoped package: name@version\n const atIndex = trimmed.lastIndexOf('@');\n if (atIndex > 0) {\n const name = trimmed.slice(0, atIndex);\n const version = trimmed.slice(atIndex + 1);\n return { name, version: version || undefined };\n }\n\n return { name: trimmed };\n}\n\n/**\n * Resolve version tag to actual version\n * @param versions - Available versions\n * @param distTags - Distribution tags\n * @param requested - Requested version/tag\n * @returns Resolved version\n * @throws VersionNotFoundError if not found\n */\nfunction resolveVersion(\n packageName: string,\n versions: string[],\n distTags: Record<string, string>,\n requested?: string\n): string {\n // No version specified - use latest\n if (!requested) {\n const latest = distTags['latest'];\n if (latest && versions.includes(latest)) {\n return latest;\n }\n // Fallback to highest version\n return versions.sort(compareVersions).pop()!;\n }\n\n // Check if it's a dist-tag\n if (distTags[requested]) {\n return distTags[requested];\n }\n\n // Check if it's an exact version\n if (versions.includes(requested)) {\n return requested;\n }\n\n // Try to find matching version\n const matching = versions.filter((v) => v.startsWith(requested));\n if (matching.length > 0) {\n return matching.sort(compareVersions).pop()!;\n }\n\n throw new VersionNotFoundError(packageName, requested);\n}\n\n/**\n * Compare semantic versions\n */\nfunction compareVersions(a: string, b: string): number {\n const pa = a.split('.').map((n) => parseInt(n, 10) || 0);\n const pb = b.split('.').map((n) => parseInt(n, 10) || 0);\n\n for (let i = 0; i < Math.max(pa.length, pb.length); i++) {\n const na = pa[i] || 0;\n const nb = pb[i] || 0;\n if (na !== nb) return na - nb;\n }\n\n return 0;\n}\n\n/**\n * Fetcher options\n */\nexport interface FetcherOptions {\n /** NPM registry URL */\n registry?: string;\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Fetch package metadata from NPM registry\n * @param name - Package name\n * @param version - Optional version\n * @param options - Fetcher options\n * @returns Package metadata\n * @throws PackageNotFoundError if package not found\n * @throws VersionNotFoundError if version not found\n */\nexport async function fetchPackageMetadata(\n name: string,\n version?: string,\n options: FetcherOptions = {}\n): Promise<PackageMetadata> {\n validatePackageName(name);\n\n const registry = options.registry ?? DEFAULT_REGISTRY;\n const httpOptions: HttpOptions = { timeout: options.timeout };\n\n // If specific version requested, try direct endpoint first\n if (version && !['latest', 'next', 'beta', 'alpha'].includes(version)) {\n try {\n const url = buildPackageUrl(name, version, registry);\n const { data } = await fetchJson<NpmVersionResponse>(url, httpOptions);\n return extractMetadata(data);\n } catch (error) {\n // Fall through to full metadata fetch\n if (!(error instanceof DownloadError) || !error.message.includes('404')) {\n throw error;\n }\n }\n }\n\n // Fetch full package metadata\n const url = buildPackageUrl(name, undefined, registry);\n\n try {\n const { data } = await fetchJson<NpmRegistryResponse>(url, httpOptions);\n\n // Resolve version\n const versions = Object.keys(data.versions ?? {});\n if (versions.length === 0) {\n throw new PackageNotFoundError(name);\n }\n\n const resolvedVersion = resolveVersion(\n name,\n versions,\n data['dist-tags'] ?? {},\n version\n );\n\n const versionData = data.versions![resolvedVersion];\n if (!versionData) {\n throw new VersionNotFoundError(name, resolvedVersion);\n }\n\n return extractMetadata(versionData);\n } catch (error) {\n if (error instanceof DownloadError && error.message.includes('404')) {\n throw new PackageNotFoundError(name);\n }\n throw error;\n }\n}\n\n/**\n * Extract metadata from NPM response\n */\nfunction extractMetadata(data: NpmVersionResponse): PackageMetadata {\n if (!data.dist?.tarball) {\n throw new DownloadError('Package metadata missing tarball URL');\n }\n\n // Normalize repository\n let repository: PackageMetadata['repository'];\n if (data.repository) {\n if (typeof data.repository === 'string') {\n repository = { type: 'git', url: data.repository };\n } else {\n repository = data.repository;\n }\n }\n\n return {\n name: data.name,\n version: data.version,\n description: data.description,\n tarball: data.dist.tarball,\n types: data.types ?? data.typings,\n main: data.main,\n exports: data.exports,\n repository,\n keywords: data.keywords,\n author: data.author,\n license: data.license,\n homepage: data.homepage,\n };\n}\n\n/**\n * Download and extract package files\n * @param tarballUrl - Tarball URL\n * @param options - HTTP options\n * @returns Map of file paths to content\n */\nexport async function downloadPackageFiles(\n tarballUrl: string,\n options: HttpOptions = {}\n): Promise<Map<string, string>> {\n const buffer = await fetchGzipped(tarballUrl, options);\n return extractTarToMap(buffer);\n}\n\n/**\n * Fetch complete package with files\n * @param spec - Package specifier (e.g., \"lodash@4.17.21\")\n * @param options - Fetcher options\n * @returns Package info with files\n */\nexport async function fetchPackage(\n spec: string,\n options: FetcherOptions = {}\n): Promise<PackageInfo> {\n const { name, version } = parsePackageSpec(spec);\n\n // Fetch metadata\n const metadata = await fetchPackageMetadata(name, version, options);\n\n // Download and extract files\n const files = await downloadPackageFiles(metadata.tarball, {\n timeout: options.timeout,\n });\n\n return {\n ...metadata,\n files,\n };\n}\n\n/**\n * List available versions for a package\n * @param name - Package name\n * @param options - Fetcher options\n * @returns Array of versions (sorted newest first)\n */\nexport async function listVersions(\n name: string,\n options: FetcherOptions = {}\n): Promise<string[]> {\n validatePackageName(name);\n\n const registry = options.registry ?? DEFAULT_REGISTRY;\n const url = buildPackageUrl(name, undefined, registry);\n\n try {\n const { data } = await fetchJson<NpmRegistryResponse>(url, { timeout: options.timeout });\n const versions = Object.keys(data.versions ?? {});\n return versions.sort(compareVersions).reverse();\n } catch (error) {\n if (error instanceof DownloadError && error.message.includes('404')) {\n throw new PackageNotFoundError(name);\n }\n throw error;\n }\n}\n\n/**\n * Get dist-tags for a package\n * @param name - Package name\n * @param options - Fetcher options\n * @returns Dist-tags object\n */\nexport async function getDistTags(\n name: string,\n options: FetcherOptions = {}\n): Promise<Record<string, string>> {\n validatePackageName(name);\n\n const registry = options.registry ?? DEFAULT_REGISTRY;\n const url = buildPackageUrl(name, undefined, registry);\n\n try {\n const { data } = await fetchJson<NpmRegistryResponse>(url, { timeout: options.timeout });\n return data['dist-tags'] ?? {};\n } catch (error) {\n if (error instanceof DownloadError && error.message.includes('404')) {\n throw new PackageNotFoundError(name);\n }\n throw error;\n }\n}\n","/**\n * Types Resolver Plugin\n * Automatically fetches @types/* packages when main package lacks .d.ts files\n * @module plugins/core/types-resolver\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { fetchPackage, FetcherOptions } from '../../core/fetcher.js';\n\n/**\n * Check if package has any .d.ts files\n */\nfunction hasDtsFiles(files: Map<string, string>): boolean {\n for (const path of files.keys()) {\n if (path.endsWith('.d.ts')) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Get the @types package name for a given package\n * @example\n * - lodash -> @types/lodash\n * - @babel/core -> @types/babel__core\n */\nfunction getTypesPackageName(packageName: string): string {\n if (packageName.startsWith('@')) {\n // Scoped package: @scope/name -> @types/scope__name\n const withoutAt = packageName.slice(1);\n return `@types/${withoutAt.replace('/', '__')}`;\n }\n return `@types/${packageName}`;\n}\n\n/**\n * Check if a package is a DefinitelyTyped types package\n */\nfunction isTypesPackage(packageName: string): boolean {\n return packageName.startsWith('@types/');\n}\n\n/**\n * Types Resolver Plugin\n * Fetches @types/* package when main package has no .d.ts files\n */\nexport const typesResolverPlugin: Plugin<ExtractorContext> = {\n name: 'types-resolver',\n version: '1.0.0',\n category: 'parser',\n\n install(kernel) {\n kernel.on('package:fetched', async (context) => {\n const { files, name } = context.package;\n\n // Skip if this is already a @types package\n if (isTypesPackage(name)) {\n return;\n }\n\n // Skip if package already has .d.ts files\n if (hasDtsFiles(files)) {\n return;\n }\n\n // Try to fetch @types package\n const typesPackageName = getTypesPackageName(name);\n\n try {\n const typesPackage = await fetchPackage(typesPackageName);\n\n // Merge .d.ts files from @types package into main package\n let mergedCount = 0;\n for (const [path, content] of typesPackage.files) {\n if (path.endsWith('.d.ts')) {\n // Prefix with __types__ to avoid conflicts and indicate source\n const newPath = `__types__/${path}`;\n files.set(newPath, content);\n mergedCount++;\n }\n }\n\n // Also set the types entry point if found\n if (typesPackage.types && !context.package.types) {\n context.package.types = `__types__/${typesPackage.types}`;\n }\n\n // Log success (will be captured in verbose mode)\n if (mergedCount > 0) {\n console.error(\n `[types-resolver] Merged ${mergedCount} .d.ts files from ${typesPackageName}`\n );\n }\n } catch (error) {\n // @types package doesn't exist - this is fine, not all packages have types\n // We silently continue without types\n }\n });\n },\n};\n\nexport default typesResolverPlugin;\n","/**\n * JSDoc comment parser\n * Extracts structured documentation from JSDoc comments\n * @module parsers/jsdoc\n */\n\nimport type { JSDocParsed } from '../types.js';\n\n/**\n * JSDoc tag patterns\n */\nconst TAG_PATTERNS = {\n /** @param {type} name - description */\n param: /@param\\s+(?:\\{([^}]*)\\})?\\s*(\\[?\\w+(?:\\.\\w+)*\\]?)\\s*(?:-\\s*)?(.*)$/gm,\n\n /** @returns {type} description */\n returns: /@returns?\\s+(?:\\{([^}]*)\\})?\\s*(.*)/g,\n\n /** @example ... */\n example: /@example\\s*([\\s\\S]*?)(?=@\\w|$)/g,\n\n /** @deprecated reason */\n deprecated: /@deprecated\\s*(.*)/g,\n\n /** @since version */\n since: /@since\\s*(.*)/g,\n\n /** @see reference */\n see: /@see\\s*(.*)/g,\n\n /** @throws {type} description */\n throws: /@throws?\\s+(?:\\{([^}]*)\\})?\\s*(.*)/g,\n\n /** @template T - description */\n typeParam: /@template\\s+(\\w+)\\s*(?:-\\s*)?(.*)/g,\n\n /** @type {type} */\n type: /@type\\s+\\{([^}]*)\\}/g,\n\n /** @typedef {type} name */\n typedef: /@typedef\\s+\\{([^}]*)\\}\\s*(\\w+)/g,\n\n /** @default value */\n default: /@default\\s+(.*)/g,\n};\n\n/**\n * Clean JSDoc comment by removing comment markers\n * @param comment - Raw JSDoc comment (including markers)\n * @returns Cleaned content\n */\nexport function cleanJSDocComment(comment: string): string {\n return comment\n .replace(/^\\/\\*\\*\\s*/, '') // Remove opening /**\n .replace(/\\s*\\*\\/$/, '') // Remove closing */\n .replace(/^\\s*\\*\\s?/gm, '') // Remove leading * on each line\n .trim();\n}\n\n/**\n * Extract description from JSDoc content\n * Description is text before first @tag\n * @param content - Cleaned JSDoc content\n * @returns Description text\n */\nexport function extractDescription(content: string): string | undefined {\n // Find first @tag\n const tagMatch = content.match(/@\\w+/);\n if (!tagMatch) {\n return content.trim() || undefined;\n }\n\n const description = content.slice(0, tagMatch.index).trim();\n return description || undefined;\n}\n\n/**\n * Parse a single @param tag\n */\ninterface ParsedParam {\n name: string;\n type?: string;\n description?: string;\n optional: boolean;\n defaultValue?: string;\n}\n\n/**\n * Parse @param tags\n * @param content - JSDoc content\n * @returns Array of parsed params\n */\nexport function parseParams(content: string): ParsedParam[] {\n const params: ParsedParam[] = [];\n const pattern = new RegExp(TAG_PATTERNS.param.source, 'gm');\n\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const [, type, rawName, description] = match;\n if (!rawName) continue;\n\n const name = rawName;\n // Check if optional (wrapped in [])\n const isOptional = name.startsWith('[') && name.endsWith(']');\n const cleanName = isOptional ? name.slice(1, -1) : name;\n\n params.push({\n name: cleanName,\n type: type?.trim(),\n description: description?.trim() || undefined,\n optional: isOptional,\n });\n }\n\n return params;\n}\n\n/**\n * Parse @returns tag\n * @param content - JSDoc content\n * @returns Parsed return info\n */\nexport function parseReturns(\n content: string\n): { type?: string; description?: string } | undefined {\n const pattern = new RegExp(TAG_PATTERNS.returns.source, 'g');\n const match = pattern.exec(content);\n\n if (!match) return undefined;\n\n const [, type, description] = match;\n return {\n type: type?.trim(),\n description: description?.trim() || undefined,\n };\n}\n\n/**\n * Parse @example tags\n * @param content - JSDoc content\n * @returns Array of examples\n */\nexport function parseExamples(content: string): string[] {\n const examples: string[] = [];\n const pattern = new RegExp(TAG_PATTERNS.example.source, 'g');\n\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const example = match[1]?.trim();\n if (example) {\n examples.push(example);\n }\n }\n\n return examples;\n}\n\n/**\n * Parse @deprecated tag\n * @param content - JSDoc content\n * @returns Deprecation message or undefined\n */\nexport function parseDeprecated(content: string): string | undefined {\n const pattern = new RegExp(TAG_PATTERNS.deprecated.source, 'g');\n const match = pattern.exec(content);\n return match ? (match[1]?.trim() || 'true') : undefined;\n}\n\n/**\n * Parse @since tag\n * @param content - JSDoc content\n * @returns Version string or undefined\n */\nexport function parseSince(content: string): string | undefined {\n const pattern = new RegExp(TAG_PATTERNS.since.source, 'g');\n const match = pattern.exec(content);\n return match ? match[1]?.trim() : undefined;\n}\n\n/**\n * Parse @see tags\n * @param content - JSDoc content\n * @returns Array of references\n */\nexport function parseSee(content: string): string[] {\n const refs: string[] = [];\n const pattern = new RegExp(TAG_PATTERNS.see.source, 'g');\n\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const ref = match[1]?.trim();\n if (ref) {\n refs.push(ref);\n }\n }\n\n return refs;\n}\n\n/**\n * Parse @throws tags\n * @param content - JSDoc content\n * @returns Array of throw info\n */\nexport function parseThrows(content: string): Array<{ type?: string; description?: string }> {\n const throws: Array<{ type?: string; description?: string }> = [];\n const pattern = new RegExp(TAG_PATTERNS.throws.source, 'g');\n\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const [, type, description] = match;\n throws.push({\n type: type?.trim(),\n description: description?.trim() || undefined,\n });\n }\n\n return throws;\n}\n\n/**\n * Parse @template tags (type parameters)\n * @param content - JSDoc content\n * @returns Array of type param info\n */\nexport function parseTypeParams(content: string): Array<{ name: string; description?: string }> {\n const params: Array<{ name: string; description?: string }> = [];\n const pattern = new RegExp(TAG_PATTERNS.typeParam.source, 'g');\n\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const [, name, description] = match;\n if (!name) continue;\n params.push({\n name: name.trim(),\n description: description?.trim() || undefined,\n });\n }\n\n return params;\n}\n\n/**\n * Parse a complete JSDoc comment\n * @param comment - Raw JSDoc comment (with /** ... *\\/)\n * @returns Parsed JSDoc object\n * @example\n * ```typescript\n * const parsed = parseJSDoc(`/**\n * * Adds two numbers.\n * * @param a - First number\n * * @param b - Second number\n * * @returns The sum\n * * @example add(1, 2) // 3\n * *\\/`);\n * console.log(parsed.description); // \"Adds two numbers.\"\n * console.log(parsed.params[0].name); // \"a\"\n * ```\n */\nexport function parseJSDoc(comment: string): JSDocParsed {\n const content = cleanJSDocComment(comment);\n\n return {\n description: extractDescription(content),\n params: parseParams(content).map((p) => ({\n name: p.name,\n type: p.type,\n description: p.description,\n optional: p.optional,\n defaultValue: p.defaultValue,\n })),\n returns: parseReturns(content),\n examples: parseExamples(content),\n deprecated: parseDeprecated(content),\n since: parseSince(content),\n see: parseSee(content),\n throws: parseThrows(content),\n typeParams: parseTypeParams(content),\n };\n}\n\n/**\n * Extract all JSDoc comments from source code\n * @param source - TypeScript/JavaScript source code\n * @returns Array of JSDoc comments with positions\n */\nexport function extractJSDocComments(\n source: string\n): Array<{ comment: string; start: number; end: number }> {\n const comments: Array<{ comment: string; start: number; end: number }> = [];\n const pattern = /\\/\\*\\*[\\s\\S]*?\\*\\//g;\n\n let match;\n while ((match = pattern.exec(source)) !== null) {\n comments.push({\n comment: match[0],\n start: match.index,\n end: match.index + match[0].length,\n });\n }\n\n return comments;\n}\n\n/**\n * Find the JSDoc comment immediately before a position\n * @param source - Source code\n * @param position - Position to search before\n * @param comments - Pre-extracted comments\n * @returns JSDoc comment if found\n */\nexport function findPrecedingJSDoc(\n source: string,\n position: number,\n comments?: Array<{ comment: string; start: number; end: number }>\n): JSDocParsed | undefined {\n const allComments = comments ?? extractJSDocComments(source);\n\n // Find comment that ends just before position (with only whitespace between)\n for (let i = allComments.length - 1; i >= 0; i--) {\n const comment = allComments[i];\n if (!comment || comment.end > position) continue;\n\n // Check if only whitespace between comment end and position\n const between = source.slice(comment.end, position);\n if (/^\\s*$/.test(between)) {\n return parseJSDoc(comment.comment);\n }\n\n // Comments are sorted by position, so stop searching\n if (comment.end < position - 500) break;\n }\n\n return undefined;\n}\n\n/**\n * Check if a comment is a JSDoc comment\n * @param comment - Comment text\n * @returns True if JSDoc format\n */\nexport function isJSDocComment(comment: string): boolean {\n return comment.startsWith('/**') && !comment.startsWith('/***');\n}\n\n/**\n * Merge JSDoc from multiple sources\n * @param sources - Array of JSDoc objects to merge\n * @returns Merged JSDoc\n */\nexport function mergeJSDoc(...sources: (JSDocParsed | undefined)[]): JSDocParsed {\n const result: JSDocParsed = {\n params: [],\n examples: [],\n see: [],\n throws: [],\n typeParams: [],\n };\n\n for (const source of sources) {\n if (!source) continue;\n\n // Use first non-empty description\n if (!result.description && source.description) {\n result.description = source.description;\n }\n\n // Merge params (by name, later wins)\n for (const param of source.params) {\n const existing = result.params.findIndex((p) => p.name === param.name);\n if (existing >= 0) {\n result.params[existing] = param;\n } else {\n result.params.push(param);\n }\n }\n\n // Use first returns\n if (!result.returns && source.returns) {\n result.returns = source.returns;\n }\n\n // Collect all unique examples\n for (const example of source.examples) {\n if (!result.examples.includes(example)) {\n result.examples.push(example);\n }\n }\n\n // Use first deprecated\n if (!result.deprecated && source.deprecated) {\n result.deprecated = source.deprecated;\n }\n\n // Use first since\n if (!result.since && source.since) {\n result.since = source.since;\n }\n\n // Collect all unique see refs\n for (const ref of source.see) {\n if (!result.see.includes(ref)) {\n result.see.push(ref);\n }\n }\n\n // Collect all throws\n result.throws.push(...source.throws);\n\n // Collect all type params\n for (const tp of source.typeParams) {\n const existing = result.typeParams.findIndex((p) => p.name === tp.name);\n if (existing >= 0) {\n result.typeParams[existing] = tp;\n } else {\n result.typeParams.push(tp);\n }\n }\n }\n\n return result;\n}\n","/**\n * TypeScript declaration file (.d.ts) parser\n * Extracts exported API entries from declaration files\n * @module parsers/dts\n */\n\nimport type { APIEntry, APIEntryKind, ParamDoc, ReturnDoc, JSDocParsed } from '../types.js';\nimport { parseJSDoc, extractJSDocComments, findPrecedingJSDoc } from './jsdoc.js';\n\n/**\n * Result of parsing a .d.ts file\n */\nexport interface DtsParseResult {\n /** Exported API entries */\n exports: APIEntry[];\n /** Imported types (for reference) */\n imports: string[];\n /** Module declaration if wrapped in declare module */\n moduleName?: string;\n}\n\n/**\n * Regex patterns for parsing declarations\n */\nconst PATTERNS = {\n /** Export function declaration */\n exportFunction:\n /export\\s+(?:declare\\s+)?function\\s+(\\w+)\\s*(<[^>]*>)?\\s*\\(([^)]*)\\)\\s*:\\s*([^;{]+)/g,\n\n /** Export const declaration */\n exportConst: /export\\s+(?:declare\\s+)?const\\s+(\\w+)\\s*:\\s*([^;=]+)/g,\n\n /** Export let declaration */\n exportLet: /export\\s+(?:declare\\s+)?let\\s+(\\w+)\\s*:\\s*([^;=]+)/g,\n\n /** Export class declaration */\n exportClass:\n /export\\s+(?:declare\\s+)?(?:abstract\\s+)?class\\s+(\\w+)(?:\\s*<([^>]*)>)?(?:\\s+extends\\s+([^\\s{]+))?(?:\\s+implements\\s+([^{]+))?\\s*\\{/g,\n\n /** Export interface declaration */\n exportInterface:\n /export\\s+(?:declare\\s+)?interface\\s+(\\w+)(?:\\s*<([^>]*)>)?(?:\\s+extends\\s+([^{]+))?\\s*\\{/g,\n\n /** Export type declaration */\n exportType: /export\\s+(?:declare\\s+)?type\\s+(\\w+)(?:\\s*<([^>]*)>)?\\s*=\\s*([^;]+)/g,\n\n /** Export enum declaration */\n exportEnum: /export\\s+(?:declare\\s+)?(?:const\\s+)?enum\\s+(\\w+)\\s*\\{/g,\n\n /** Export default */\n exportDefault: /export\\s+default\\s+(\\w+)/g,\n\n /** Re-export */\n reExport: /export\\s*\\{([^}]+)\\}\\s*from\\s*['\"]([^'\"]+)['\"]/g,\n\n /** Import statement */\n importStatement: /import\\s*(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+|\\w+)\\s*from\\s*['\"]([^'\"]+)['\"]/g,\n\n /** Declare module (module augmentation) */\n declareModule: /declare\\s+module\\s+['\"]([^'\"]+)['\"]\\s*\\{/g,\n\n /** Interface inside module augmentation (no export keyword) */\n moduleInterface: /interface\\s+(\\w+)(?:\\s*<([^>]*)>)?(?:\\s+extends\\s+([^{]+))?\\s*\\{/g,\n\n /** Declare namespace */\n declareNamespace: /declare\\s+namespace\\s+(\\w+)\\s*\\{/g,\n};\n\n/**\n * Parse function parameters from parameter string\n * @param paramStr - Parameter string (e.g., \"a: string, b?: number\")\n * @returns Array of parsed parameters\n */\nexport function parseParameters(paramStr: string): ParamDoc[] {\n if (!paramStr.trim()) return [];\n\n const params: ParamDoc[] = [];\n const parts = splitParameters(paramStr);\n\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n // Handle destructuring patterns\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n // Simplified: treat as single param\n const colonIndex = findTypeColonIndex(trimmed);\n if (colonIndex > 0) {\n params.push({\n name: 'options',\n type: trimmed.slice(colonIndex + 1).trim(),\n optional: trimmed.includes('?'),\n });\n }\n continue;\n }\n\n // Parse regular parameter: name?: type = default\n const match = trimmed.match(/^(\\w+)(\\?)?\\s*:\\s*(.+?)(?:\\s*=\\s*(.+))?$/);\n if (match) {\n const [, name, optional, type, defaultValue] = match;\n if (name && type) {\n params.push({\n name,\n type: type.trim(),\n optional: !!optional,\n defaultValue: defaultValue?.trim(),\n });\n }\n } else {\n // Just a name\n const nameMatch = trimmed.match(/^(\\w+)(\\?)?$/);\n if (nameMatch && nameMatch[1]) {\n params.push({\n name: nameMatch[1],\n type: 'unknown',\n optional: !!nameMatch[2],\n });\n }\n }\n }\n\n return params;\n}\n\n/**\n * Split parameters handling nested generics and objects\n */\nfunction splitParameters(paramStr: string): string[] {\n const parts: string[] = [];\n let current = '';\n let depth = 0;\n\n for (let i = 0; i < paramStr.length; i++) {\n const char = paramStr[i];\n\n if (char === '<' || char === '{' || char === '[' || char === '(') {\n depth++;\n current += char;\n } else if (char === '>' || char === '}' || char === ']' || char === ')') {\n depth--;\n current += char;\n } else if (char === ',' && depth === 0) {\n parts.push(current);\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current.trim()) {\n parts.push(current);\n }\n\n return parts;\n}\n\n/**\n * Find the colon separating name from type in complex patterns\n */\nfunction findTypeColonIndex(str: string): number {\n let depth = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n if (char === '{' || char === '[' || char === '<' || char === '(') {\n depth++;\n } else if (char === '}' || char === ']' || char === '>' || char === ')') {\n depth--;\n } else if (char === ':' && depth === 0) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Parse class/interface body to extract members\n * @param source - Full source content\n * @param startIndex - Index of opening brace\n * @returns Extracted body content\n */\nfunction extractBody(source: string, startIndex: number): string {\n let depth = 0;\n let i = startIndex;\n\n while (i < source.length) {\n if (source[i] === '{') depth++;\n else if (source[i] === '}') {\n depth--;\n if (depth === 0) break;\n }\n i++;\n }\n\n return source.slice(startIndex + 1, i);\n}\n\n/**\n * Parse class members from body\n */\nfunction parseClassMembers(\n body: string,\n comments: Array<{ comment: string; start: number; end: number }>,\n bodyOffset: number\n): { methods: APIEntry[]; properties: APIEntry[] } {\n const methods: APIEntry[] = [];\n const properties: APIEntry[] = [];\n\n // Parse methods\n const methodPattern = /(?:(?:public|private|protected|static|readonly)\\s+)*(\\w+)\\s*(<[^>]*>)?\\s*\\(([^)]*)\\)\\s*:\\s*([^;{]+)/g;\n let match;\n\n while ((match = methodPattern.exec(body)) !== null) {\n const [fullMatch, name, generics, params, returnType] = match;\n if (!name || !returnType) continue;\n\n const jsdoc = findPrecedingJSDoc(body, match.index, comments.map(c => ({\n ...c,\n start: c.start - bodyOffset,\n end: c.end - bodyOffset,\n })));\n\n methods.push({\n kind: 'function',\n name,\n signature: `${name}${generics || ''}(${params || ''}): ${returnType.trim()}`,\n description: jsdoc?.description,\n params: mergeParamDocs(parseParameters(params || ''), jsdoc?.params),\n returns: {\n type: returnType.trim(),\n description: jsdoc?.returns?.description,\n },\n examples: jsdoc?.examples,\n });\n }\n\n // Parse properties\n const propPattern = /(?:(?:public|private|protected|static|readonly)\\s+)*(\\w+)(\\?)?\\s*:\\s*([^;]+)/g;\n while ((match = propPattern.exec(body)) !== null) {\n const [, name, optional, type] = match;\n if (!name || !type) continue;\n // Skip if it looks like a method\n if (type.includes('=>') || type.includes('(')) continue;\n\n properties.push({\n kind: 'constant',\n name,\n signature: `${name}${optional || ''}: ${type.trim()}`,\n description: findPrecedingJSDoc(body, match.index)?.description,\n });\n }\n\n return { methods, properties };\n}\n\n/**\n * Merge param docs from signature and JSDoc\n */\nfunction mergeParamDocs(\n sigParams: ParamDoc[],\n jsdocParams?: JSDocParsed['params']\n): ParamDoc[] {\n if (!jsdocParams || jsdocParams.length === 0) return sigParams;\n\n return sigParams.map((param) => {\n const jsdocParam = jsdocParams.find((p) => p.name === param.name);\n if (jsdocParam) {\n return {\n ...param,\n description: jsdocParam.description || param.description,\n type: param.type || jsdocParam.type,\n optional: param.optional || jsdocParam.optional,\n defaultValue: param.defaultValue || jsdocParam.defaultValue,\n };\n }\n return param;\n });\n}\n\n/**\n * Parse enum members from body\n */\nfunction parseEnumMembers(body: string): Array<{ name: string; value?: string | number }> {\n const members: Array<{ name: string; value?: string | number }> = [];\n const pattern = /(\\w+)\\s*(?:=\\s*([^,}]+))?/g;\n\n let match;\n while ((match = pattern.exec(body)) !== null) {\n const [, name, value] = match;\n if (!name) continue;\n\n let parsedValue: string | number | undefined;\n if (value !== undefined) {\n const trimmed = value.trim();\n // Try to parse as number\n const num = Number(trimmed);\n if (!isNaN(num)) {\n parsedValue = num;\n } else {\n // Keep as string (remove quotes)\n parsedValue = trimmed.replace(/^['\"]|['\"]$/g, '');\n }\n }\n\n members.push({ name, value: parsedValue });\n }\n\n return members;\n}\n\n/**\n * Parse a .d.ts file content\n * @param content - File content\n * @param filePath - Optional file path for source location\n * @returns Parse result with exports\n * @example\n * ```typescript\n * const result = parseDts(`\n * export declare function greet(name: string): string;\n * export interface Options { timeout: number; }\n * `);\n * console.log(result.exports.length); // 2\n * ```\n */\nexport function parseDts(content: string, filePath?: string): DtsParseResult {\n const exports: APIEntry[] = [];\n const imports: string[] = [];\n let moduleName: string | undefined;\n\n // Pre-extract all JSDoc comments\n const comments = extractJSDocComments(content);\n\n // Check for module declaration\n const moduleMatch = PATTERNS.declareModule.exec(content);\n if (moduleMatch) {\n moduleName = moduleMatch[1];\n }\n\n // Parse functions\n let match;\n PATTERNS.exportFunction.lastIndex = 0;\n while ((match = PATTERNS.exportFunction.exec(content)) !== null) {\n const [fullMatch, name, generics, params, returnType] = match;\n if (!name || !returnType) continue;\n\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'function',\n name,\n signature: `function ${name}${generics || ''}(${params || ''}): ${returnType.trim()}`,\n description: jsdoc?.description,\n params: mergeParamDocs(parseParameters(params || ''), jsdoc?.params),\n returns: {\n type: returnType.trim(),\n description: jsdoc?.returns?.description,\n },\n examples: jsdoc?.examples,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n since: jsdoc?.since,\n see: jsdoc?.see,\n sourceFile: filePath,\n });\n }\n\n // Parse constants\n PATTERNS.exportConst.lastIndex = 0;\n while ((match = PATTERNS.exportConst.exec(content)) !== null) {\n const [, name, type] = match;\n if (!name || !type) continue;\n\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'constant',\n name,\n signature: `const ${name}: ${type.trim()}`,\n description: jsdoc?.description,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse classes\n PATTERNS.exportClass.lastIndex = 0;\n while ((match = PATTERNS.exportClass.exec(content)) !== null) {\n const [, name, generics, extendsClause, implementsClause] = match;\n if (!name) continue;\n\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n // Extract class body\n const bodyStart = match.index + match[0].length - 1;\n const body = extractBody(content, bodyStart);\n const { methods, properties } = parseClassMembers(body, comments, bodyStart);\n\n exports.push({\n kind: 'class',\n name,\n signature: `class ${name}${generics ? `<${generics}>` : ''}`,\n description: jsdoc?.description,\n extends: extendsClause ? [extendsClause.trim()] : undefined,\n implements: implementsClause\n ? implementsClause.split(',').map((s) => s.trim())\n : undefined,\n methods,\n properties,\n typeParams: generics\n ? generics.split(',').map((s) => s.trim())\n : undefined,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse interfaces\n PATTERNS.exportInterface.lastIndex = 0;\n while ((match = PATTERNS.exportInterface.exec(content)) !== null) {\n const [, name, generics, extendsClause] = match;\n if (!name) continue;\n\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n // Extract interface body\n const bodyStart = match.index + match[0].length - 1;\n const body = extractBody(content, bodyStart);\n const { methods, properties } = parseClassMembers(body, comments, bodyStart);\n\n exports.push({\n kind: 'interface',\n name,\n signature: `interface ${name}${generics ? `<${generics}>` : ''}`,\n description: jsdoc?.description,\n extends: extendsClause\n ? extendsClause.split(',').map((s) => s.trim())\n : undefined,\n methods,\n properties,\n typeParams: generics\n ? generics.split(',').map((s) => s.trim())\n : undefined,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse types\n PATTERNS.exportType.lastIndex = 0;\n while ((match = PATTERNS.exportType.exec(content)) !== null) {\n const [, name, generics, definition] = match;\n if (!name || !definition) continue;\n\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'type',\n name,\n signature: `type ${name}${generics ? `<${generics}>` : ''} = ${definition.trim()}`,\n description: jsdoc?.description,\n typeParams: generics\n ? generics.split(',').map((s) => s.trim())\n : undefined,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse enums\n PATTERNS.exportEnum.lastIndex = 0;\n while ((match = PATTERNS.exportEnum.exec(content)) !== null) {\n const [, name] = match;\n if (!name) continue;\n\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n // Extract enum body\n const bodyStart = match.index + match[0].length - 1;\n const body = extractBody(content, bodyStart);\n const members = parseEnumMembers(body);\n\n exports.push({\n kind: 'enum',\n name,\n signature: `enum ${name}`,\n description: jsdoc?.description,\n members,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse imports for reference\n PATTERNS.importStatement.lastIndex = 0;\n while ((match = PATTERNS.importStatement.exec(content)) !== null) {\n if (match[1]) {\n imports.push(match[1]);\n }\n }\n\n // Parse module augmentation (declare module \"...\" { ... })\n // This is common in @types packages like @types/lodash\n PATTERNS.declareModule.lastIndex = 0;\n while ((match = PATTERNS.declareModule.exec(content)) !== null) {\n const moduleBodyStart = match.index + match[0].length - 1;\n const moduleBody = extractBody(content, moduleBodyStart);\n\n // Parse interfaces inside module augmentation\n const moduleExports = parseModuleAugmentation(moduleBody, comments, moduleBodyStart, filePath);\n for (const entry of moduleExports) {\n exports.push(entry);\n }\n }\n\n return { exports, imports, moduleName };\n}\n\n/**\n * Parse module augmentation content (interfaces inside declare module blocks)\n * Extracts methods from interfaces like LoDashStatic as standalone functions\n */\nfunction parseModuleAugmentation(\n body: string,\n _comments: Array<{ comment: string; start: number; end: number }>,\n _bodyOffset: number,\n filePath?: string\n): APIEntry[] {\n const entries: APIEntry[] = [];\n\n // Extract JSDoc comments from the module body itself\n const moduleComments = extractJSDocComments(body);\n\n // Find interfaces inside the module augmentation\n const interfacePattern = /interface\\s+(\\w+)(?:\\s*<([^>]*)>)?(?:\\s+extends\\s+([^{]+))?\\s*\\{/g;\n let match;\n\n while ((match = interfacePattern.exec(body)) !== null) {\n const [, interfaceName, generics, extendsClause] = match;\n if (!interfaceName) continue;\n\n // Extract interface body\n const ifaceBodyStart = match.index + match[0].length - 1;\n const ifaceBody = extractBody(body, ifaceBodyStart);\n\n // For interfaces like LoDashStatic, extract methods as standalone functions\n // These are the main API methods of lodash\n if (interfaceName === 'LoDashStatic' || interfaceName.endsWith('Static')) {\n const methods = parseInterfaceMethodsAsExports(\n ifaceBody,\n moduleComments,\n ifaceBodyStart,\n filePath\n );\n for (const method of methods) {\n entries.push(method);\n }\n }\n }\n\n return entries;\n}\n\n/**\n * Parse interface methods and convert them to standalone function exports\n * Used for extracting lodash-style static methods from interfaces like LoDashStatic\n */\nfunction parseInterfaceMethodsAsExports(\n body: string,\n _comments: Array<{ comment: string; start: number; end: number }>,\n _bodyOffset: number,\n filePath?: string\n): APIEntry[] {\n const methods: APIEntry[] = [];\n\n // Extract JSDoc comments directly from the interface body\n const bodyComments = extractJSDocComments(body);\n\n // Pattern for method signatures: methodName<T>(params): ReturnType;\n // Don't include JSDoc in pattern - we'll find it separately\n const methodPattern = /(\\w+)\\s*(<[^>]*>)?\\s*\\(([^)]*)\\)\\s*:\\s*([^;]+);/g;\n let match;\n\n while ((match = methodPattern.exec(body)) !== null) {\n const [fullMatch, name, generics, params, returnType] = match;\n if (!name || !returnType) continue;\n\n // Skip common non-API methods\n if (['constructor', 'toString', 'valueOf', 'toJSON'].includes(name)) continue;\n\n // Find JSDoc comment for this method using body-relative positions\n const jsdoc = findPrecedingJSDoc(body, match.index, bodyComments);\n\n methods.push({\n kind: 'function',\n name,\n signature: `function ${name}${generics || ''}(${params || ''}): ${returnType.trim()}`,\n description: jsdoc?.description,\n params: mergeParamDocs(parseParameters(params || ''), jsdoc?.params),\n returns: {\n type: returnType.trim(),\n description: jsdoc?.returns?.description,\n },\n examples: jsdoc?.examples,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n since: jsdoc?.since,\n see: jsdoc?.see,\n sourceFile: filePath,\n });\n }\n\n return methods;\n}\n\n/**\n * Sort exports by kind priority\n * @param exports - Exports to sort\n * @returns Sorted exports\n */\nexport function sortExports(exports: APIEntry[]): APIEntry[] {\n const kindOrder: Record<APIEntryKind, number> = {\n function: 1,\n class: 2,\n interface: 3,\n type: 4,\n enum: 5,\n constant: 6,\n };\n\n return [...exports].sort((a, b) => {\n const kindDiff = kindOrder[a.kind] - kindOrder[b.kind];\n if (kindDiff !== 0) return kindDiff;\n return a.name.localeCompare(b.name);\n });\n}\n\n/**\n * Find the main entry point .d.ts file\n * @param files - Map of file paths to content\n * @param typesField - Types field from package.json\n * @returns Path to main .d.ts file\n */\nexport function findMainDtsFile(\n files: Map<string, string>,\n typesField?: string\n): string | undefined {\n // Priority 1: Explicit types field\n if (typesField) {\n const normalized = typesField.replace(/^\\.\\//, '');\n if (files.has(normalized)) return normalized;\n }\n\n // Priority 2: Common entry points (also check __types__/ for merged @types packages)\n const priorities = [\n 'index.d.ts',\n 'dist/index.d.ts',\n 'lib/index.d.ts',\n 'types/index.d.ts',\n 'src/index.d.ts',\n // @types packages merged via types-resolver plugin\n '__types__/index.d.ts',\n '__types__/dist/index.d.ts',\n '__types__/lib/index.d.ts',\n '__types__/types/index.d.ts',\n ];\n\n for (const path of priorities) {\n if (files.has(path)) return path;\n }\n\n // Priority 3: Any .d.ts file (prefer non-__types__ files)\n for (const path of files.keys()) {\n if (path.endsWith('.d.ts') && !path.startsWith('__types__/')) {\n return path;\n }\n }\n\n // Priority 4: Any .d.ts file from __types__\n for (const path of files.keys()) {\n if (path.endsWith('.d.ts') && path.startsWith('__types__/')) {\n return path;\n }\n }\n\n return undefined;\n}\n","/**\n * DTS Parser Plugin\n * Parses TypeScript declaration files to extract API information\n * @module plugins/core/dts-parser\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { parseDts, findMainDtsFile, sortExports } from '../../parsers/dts.js';\n\n/**\n * DTS Parser Plugin\n * Parses .d.ts files to extract API entries\n */\nexport const dtsParserPlugin: Plugin<ExtractorContext> = {\n name: 'dts-parser',\n version: '1.0.0',\n category: 'parser',\n\n install(kernel) {\n kernel.on('parse:start', async (context) => {\n const { files } = context.package;\n\n // Find main .d.ts file\n const mainDts = findMainDtsFile(files, context.package.types);\n\n if (!mainDts) {\n // No .d.ts files found, skip\n return;\n }\n\n // Get all .d.ts files, prioritizing main entry\n const dtsFiles = Array.from(files.entries())\n .filter(([path]) => path.endsWith('.d.ts'))\n .sort(([a], [b]) => {\n if (a === mainDts) return -1;\n if (b === mainDts) return 1;\n // Prioritize index files\n if (a.includes('index.d.ts')) return -1;\n if (b.includes('index.d.ts')) return 1;\n return a.localeCompare(b);\n });\n\n // Parse each file\n const seenNames = new Set<string>();\n\n for (const [path, content] of dtsFiles) {\n try {\n const result = parseDts(content, path);\n\n // Add unique exports\n for (const entry of result.exports) {\n if (!seenNames.has(entry.name)) {\n seenNames.add(entry.name);\n context.api.push(entry);\n }\n }\n } catch (error) {\n // Log error but continue with other files\n context.errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n // Sort exports by kind and name\n context.api = sortExports(context.api);\n });\n },\n};\n\nexport default dtsParserPlugin;\n","/**\n * TypeScript source file parser\n * Fallback parser for packages without .d.ts files\n * @module parsers/typescript\n */\n\nimport type { APIEntry, ParamDoc } from '../types.js';\nimport { parseJSDoc, extractJSDocComments, findPrecedingJSDoc } from './jsdoc.js';\n\n/**\n * Result of parsing TypeScript source\n */\nexport interface TsParseResult {\n exports: APIEntry[];\n hasTypes: boolean;\n}\n\n/**\n * Regex patterns for parsing TypeScript source\n */\nconst PATTERNS = {\n /** Export function */\n exportFunction:\n /export\\s+(?:async\\s+)?function\\s+(\\w+)\\s*(<[^>]*>)?\\s*\\(([^)]*)\\)(?:\\s*:\\s*([^{]+))?\\s*\\{/g,\n\n /** Export arrow function */\n exportArrow:\n /export\\s+const\\s+(\\w+)\\s*(?::\\s*([^=]+))?\\s*=\\s*(?:async\\s*)?\\([^)]*\\)\\s*(?::\\s*([^=]+))?\\s*=>/g,\n\n /** Export class */\n exportClass:\n /export\\s+(?:abstract\\s+)?class\\s+(\\w+)(?:\\s*<([^>]*)>)?(?:\\s+extends\\s+([^\\s{]+))?(?:\\s+implements\\s+([^{]+))?\\s*\\{/g,\n\n /** Export interface */\n exportInterface:\n /export\\s+interface\\s+(\\w+)(?:\\s*<([^>]*)>)?(?:\\s+extends\\s+([^{]+))?\\s*\\{/g,\n\n /** Export type */\n exportType: /export\\s+type\\s+(\\w+)(?:\\s*<([^>]*)>)?\\s*=\\s*([^;]+)/g,\n\n /** Export const/let */\n exportConst: /export\\s+(?:const|let)\\s+(\\w+)(?:\\s*:\\s*([^=]+))?\\s*=/g,\n\n /** Export enum */\n exportEnum: /export\\s+(?:const\\s+)?enum\\s+(\\w+)\\s*\\{/g,\n\n /** Named export */\n namedExport: /export\\s*\\{\\s*([^}]+)\\s*\\}/g,\n\n /** Default export */\n defaultExport: /export\\s+default\\s+(?:function\\s+)?(\\w+)/g,\n};\n\n/**\n * Parse function parameters from source\n */\nfunction parseSourceParams(paramStr: string): ParamDoc[] {\n if (!paramStr.trim()) return [];\n\n const params: ParamDoc[] = [];\n const parts = splitParams(paramStr);\n\n for (const part of parts) {\n const trimmed = part.trim();\n if (!trimmed) continue;\n\n // Handle destructuring\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n const colonIndex = findBalancedColon(trimmed);\n if (colonIndex > 0) {\n params.push({\n name: 'options',\n type: trimmed.slice(colonIndex + 1).trim(),\n optional: trimmed.includes('?'),\n });\n } else {\n params.push({\n name: 'options',\n type: 'object',\n });\n }\n continue;\n }\n\n // Regular param: name: type = default\n const match = trimmed.match(/^(\\w+)(\\?)?\\s*(?::\\s*(.+?))?(?:\\s*=\\s*(.+))?$/);\n if (match && match[1]) {\n const [, name, optional, type, defaultValue] = match;\n params.push({\n name,\n type: type?.trim() || inferTypeFromDefault(defaultValue),\n optional: !!optional || !!defaultValue,\n defaultValue: defaultValue?.trim(),\n });\n }\n }\n\n return params;\n}\n\n/**\n * Split parameters handling nesting\n */\nfunction splitParams(str: string): string[] {\n const parts: string[] = [];\n let current = '';\n let depth = 0;\n\n for (const char of str) {\n if (char === '<' || char === '{' || char === '[' || char === '(') {\n depth++;\n current += char;\n } else if (char === '>' || char === '}' || char === ']' || char === ')') {\n depth--;\n current += char;\n } else if (char === ',' && depth === 0) {\n parts.push(current);\n current = '';\n } else {\n current += char;\n }\n }\n\n if (current.trim()) parts.push(current);\n return parts;\n}\n\n/**\n * Find colon at depth 0\n */\nfunction findBalancedColon(str: string): number {\n let depth = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str[i];\n if (char === '{' || char === '[' || char === '<' || char === '(') {\n depth++;\n } else if (char === '}' || char === ']' || char === '>' || char === ')') {\n depth--;\n } else if (char === ':' && depth === 0) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Infer type from default value\n */\nfunction inferTypeFromDefault(defaultValue?: string): string {\n if (!defaultValue) return 'unknown';\n\n const trimmed = defaultValue.trim();\n\n if (trimmed === 'true' || trimmed === 'false') return 'boolean';\n if (trimmed.startsWith(\"'\") || trimmed.startsWith('\"') || trimmed.startsWith('`')) {\n return 'string';\n }\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return 'number';\n if (trimmed === 'null') return 'null';\n if (trimmed === 'undefined') return 'undefined';\n if (trimmed.startsWith('[')) return 'unknown[]';\n if (trimmed.startsWith('{')) return 'object';\n if (trimmed.startsWith('()') || trimmed.includes('=>')) return 'Function';\n\n return 'unknown';\n}\n\n/**\n * Parse TypeScript source file\n * @param content - Source file content\n * @param filePath - Optional file path\n * @returns Parse result\n */\nexport function parseTypeScript(content: string, filePath?: string): TsParseResult {\n const exports: APIEntry[] = [];\n let hasTypes = false;\n\n // Check if file has type annotations\n hasTypes = /:\\s*\\w+/.test(content) || content.includes('interface ') || content.includes('type ');\n\n // Pre-extract JSDoc comments\n const comments = extractJSDocComments(content);\n\n // Parse functions\n let match;\n PATTERNS.exportFunction.lastIndex = 0;\n while ((match = PATTERNS.exportFunction.exec(content)) !== null) {\n const [, name, generics, params, returnType] = match;\n if (!name) continue;\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n const paramStr = params || '';\n\n exports.push({\n kind: 'function',\n name,\n signature: `function ${name}${generics || ''}(${paramStr})${returnType ? `: ${returnType.trim()}` : ''}`,\n description: jsdoc?.description,\n params: mergeParams(parseSourceParams(paramStr), jsdoc?.params),\n returns: returnType\n ? { type: returnType.trim(), description: jsdoc?.returns?.description }\n : undefined,\n examples: jsdoc?.examples,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse arrow functions\n PATTERNS.exportArrow.lastIndex = 0;\n while ((match = PATTERNS.exportArrow.exec(content)) !== null) {\n const [fullMatch, name, typeAnnotation, returnType] = match;\n if (!name || !fullMatch) continue;\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n // Extract params from between ( and )\n const paramsStart = fullMatch.indexOf('(');\n const paramsEnd = fullMatch.indexOf(')', paramsStart);\n const params = fullMatch.slice(paramsStart + 1, paramsEnd);\n\n exports.push({\n kind: 'function',\n name,\n signature: typeAnnotation\n ? `const ${name}: ${typeAnnotation.trim()}`\n : `const ${name} = (${params})${returnType ? ` => ${returnType.trim()}` : ''}`,\n description: jsdoc?.description,\n params: mergeParams(parseSourceParams(params), jsdoc?.params),\n returns: returnType\n ? { type: returnType.trim(), description: jsdoc?.returns?.description }\n : undefined,\n examples: jsdoc?.examples,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse classes\n PATTERNS.exportClass.lastIndex = 0;\n while ((match = PATTERNS.exportClass.exec(content)) !== null) {\n const [, name, generics, extendsClause, implementsClause] = match;\n if (!name) continue;\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'class',\n name,\n signature: `class ${name}${generics ? `<${generics}>` : ''}`,\n description: jsdoc?.description,\n extends: extendsClause ? [extendsClause.trim()] : undefined,\n implements: implementsClause\n ? implementsClause.split(',').map((s) => s.trim())\n : undefined,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse interfaces\n PATTERNS.exportInterface.lastIndex = 0;\n while ((match = PATTERNS.exportInterface.exec(content)) !== null) {\n const [, name, generics, extendsClause] = match;\n if (!name) continue;\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'interface',\n name,\n signature: `interface ${name}${generics ? `<${generics}>` : ''}`,\n description: jsdoc?.description,\n extends: extendsClause\n ? extendsClause.split(',').map((s) => s.trim())\n : undefined,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse types\n PATTERNS.exportType.lastIndex = 0;\n while ((match = PATTERNS.exportType.exec(content)) !== null) {\n const [, name, generics, definition] = match;\n if (!name || !definition) continue;\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'type',\n name,\n signature: `type ${name}${generics ? `<${generics}>` : ''} = ${definition.trim()}`,\n description: jsdoc?.description,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse constants\n PATTERNS.exportConst.lastIndex = 0;\n while ((match = PATTERNS.exportConst.exec(content)) !== null) {\n const [, name, type] = match;\n if (!name) continue;\n // Skip if this is an arrow function (already parsed)\n if (content.slice(match.index, match.index + 200).includes('=>')) continue;\n\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'constant',\n name,\n signature: `const ${name}${type ? `: ${type.trim()}` : ''}`,\n description: jsdoc?.description,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n // Parse enums\n PATTERNS.exportEnum.lastIndex = 0;\n while ((match = PATTERNS.exportEnum.exec(content)) !== null) {\n const [, name] = match;\n if (!name) continue;\n const jsdoc = findPrecedingJSDoc(content, match.index, comments);\n\n exports.push({\n kind: 'enum',\n name,\n signature: `enum ${name}`,\n description: jsdoc?.description,\n deprecated: jsdoc?.deprecated ? jsdoc.deprecated : undefined,\n sourceFile: filePath,\n });\n }\n\n return { exports, hasTypes };\n}\n\n/**\n * Merge params from source and JSDoc\n */\nfunction mergeParams(sourceParams: ParamDoc[], jsdocParams?: typeof sourceParams): ParamDoc[] {\n if (!jsdocParams || jsdocParams.length === 0) return sourceParams;\n\n return sourceParams.map((param) => {\n const jsdocParam = jsdocParams.find((p) => p.name === param.name);\n if (jsdocParam) {\n return {\n ...param,\n description: jsdocParam.description || param.description,\n type: param.type !== 'unknown' ? param.type : jsdocParam.type,\n };\n }\n return param;\n });\n}\n\n/**\n * Find TypeScript source files in package\n * @param files - Map of file paths to content\n * @param mainField - Main field from package.json\n * @returns Paths to TypeScript source files\n */\nexport function findTypeScriptFiles(\n files: Map<string, string>,\n mainField?: string\n): string[] {\n const tsFiles: string[] = [];\n const priorities: string[] = [];\n\n // Priority: main field variants\n if (mainField) {\n const base = mainField.replace(/^\\.\\//, '').replace(/\\.[jt]sx?$/, '');\n priorities.push(\n `${base}.ts`,\n `${base}.tsx`,\n `src/${base}.ts`,\n `src/${base}.tsx`\n );\n }\n\n // Default priorities\n priorities.push(\n 'src/index.ts',\n 'src/index.tsx',\n 'index.ts',\n 'index.tsx',\n 'lib/index.ts',\n 'src/main.ts'\n );\n\n // Add prioritized files first\n for (const path of priorities) {\n if (files.has(path) && !tsFiles.includes(path)) {\n tsFiles.push(path);\n }\n }\n\n // Add remaining .ts/.tsx files\n for (const path of files.keys()) {\n if ((path.endsWith('.ts') || path.endsWith('.tsx')) && !path.endsWith('.d.ts')) {\n if (!tsFiles.includes(path)) {\n tsFiles.push(path);\n }\n }\n }\n\n return tsFiles;\n}\n","/**\n * TypeScript Source Parser Plugin\n * Fallback parser for packages without .d.ts files\n * @module plugins/core/ts-source-parser\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { parseTypeScript, findTypeScriptFiles } from '../../parsers/typescript.js';\nimport { sortExports } from '../../parsers/dts.js';\n\n/**\n * TypeScript Source Parser Plugin\n * Parses .ts/.tsx files when .d.ts files are not available\n */\nexport const tsSourceParserPlugin: Plugin<ExtractorContext> = {\n name: 'ts-source-parser',\n version: '1.0.0',\n category: 'parser',\n\n install(kernel) {\n kernel.on('parse:start', async (context) => {\n // Only run if no API entries found (no .d.ts files parsed)\n if (context.api.length > 0) {\n return;\n }\n\n const { files } = context.package;\n\n // Find TypeScript source files\n const tsFiles = findTypeScriptFiles(files, context.package.main);\n\n if (tsFiles.length === 0) {\n return;\n }\n\n // Parse each file\n const seenNames = new Set<string>();\n\n for (const path of tsFiles) {\n const content = files.get(path);\n if (!content) continue;\n\n try {\n const result = parseTypeScript(content, path);\n\n // Add unique exports\n for (const entry of result.exports) {\n if (!seenNames.has(entry.name)) {\n seenNames.add(entry.name);\n context.api.push(entry);\n }\n }\n } catch (error) {\n // Log error but continue with other files\n context.errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n // Sort exports by kind and name\n context.api = sortExports(context.api);\n });\n },\n};\n\nexport default tsSourceParserPlugin;\n","/**\n * README.md parser\n * Extracts structured content from package README files\n * @module parsers/readme\n */\n\nimport type { ParsedReadme } from '../types.js';\n\n/**\n * Common section headings for matching\n */\nconst SECTION_PATTERNS = {\n installation: /^#+\\s*(installation|install|setup|getting started)/i,\n quickStart: /^#+\\s*(quick\\s*start|usage|getting\\s*started|basic\\s*usage)/i,\n api: /^#+\\s*(api|api\\s*reference|reference|methods|functions)/i,\n examples: /^#+\\s*(examples?|code\\s*examples?)/i,\n features: /^#+\\s*(features?|highlights)/i,\n requirements: /^#+\\s*(requirements?|prerequisites?|dependencies)/i,\n contributing: /^#+\\s*(contributing|contribution)/i,\n license: /^#+\\s*(license|licensing)/i,\n changelog: /^#+\\s*(changelog|changes|version\\s*history)/i,\n};\n\n/**\n * Badge pattern matcher\n */\nconst BADGE_PATTERN =\n /\\[!\\[([^\\]]*)\\]\\(([^)]+)\\)\\]\\([^)]+\\)|\\!\\[([^\\]]*)\\]\\(([^)]+)\\)/g;\n\n/**\n * Code block pattern\n */\nconst CODE_BLOCK_PATTERN = /```(\\w+)?\\s*\\n([\\s\\S]*?)```/g;\n\n/**\n * Parse a README.md file\n * @param content - README content\n * @returns Parsed README structure\n * @example\n * ```typescript\n * const readme = parseReadme(readmeContent);\n * console.log(readme.title);\n * console.log(readme.installation);\n * ```\n */\nexport function parseReadme(content: string): ParsedReadme {\n const sections = extractSections(content);\n const badges = extractBadges(content);\n const { title, description } = extractTitleAndDescription(content, sections);\n\n // Find specific sections\n const installation = findSection(sections, SECTION_PATTERNS.installation);\n const quickStart = findSection(sections, SECTION_PATTERNS.quickStart);\n const api = findSection(sections, SECTION_PATTERNS.api);\n const examples = findExampleSections(sections);\n\n return {\n title,\n description,\n badges,\n installation: installation?.content,\n quickStart: quickStart?.content || findQuickStartFromCode(content),\n examples,\n api: api?.content,\n sections,\n };\n}\n\n/**\n * Section with title and content\n */\ninterface Section {\n title: string;\n content: string;\n level: number;\n startIndex: number;\n endIndex: number;\n}\n\n/**\n * Extract all sections from README\n * @param content - README content\n * @returns Array of sections\n */\nexport function extractSections(content: string): Section[] {\n const sections: Section[] = [];\n const lines = content.split('\\n');\n\n let currentSection: Section | null = null;\n let currentContent: string[] = [];\n let lineIndex = 0;\n let charIndex = 0;\n\n function finishSection(): void {\n if (currentSection) {\n currentSection.content = currentContent.join('\\n').trim();\n currentSection.endIndex = charIndex;\n sections.push(currentSection);\n currentContent = [];\n }\n }\n\n for (const line of lines) {\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n\n if (headingMatch && headingMatch[1] && headingMatch[2]) {\n finishSection();\n\n const level = headingMatch[1].length;\n const title = headingMatch[2].trim();\n\n currentSection = {\n title,\n content: '',\n level,\n startIndex: charIndex,\n endIndex: 0,\n };\n currentContent = [];\n } else if (currentSection) {\n currentContent.push(line);\n }\n\n charIndex += line.length + 1; // +1 for newline\n lineIndex++;\n }\n\n finishSection();\n\n return sections;\n}\n\n/**\n * Find a section matching a pattern\n */\nfunction findSection(sections: Section[], pattern: RegExp): Section | undefined {\n return sections.find((s) => pattern.test(`# ${s.title}`));\n}\n\n/**\n * Find example sections\n */\nfunction findExampleSections(sections: Section[]): string[] {\n const examples: string[] = [];\n\n for (const section of sections) {\n if (SECTION_PATTERNS.examples.test(`# ${section.title}`)) {\n // Extract code blocks from examples section\n const codeBlocks = extractCodeBlocks(section.content);\n examples.push(...codeBlocks);\n }\n }\n\n return examples;\n}\n\n/**\n * Extract code blocks from content\n * @param content - Content to extract from\n * @returns Array of code block contents\n */\nexport function extractCodeBlocks(content: string): string[] {\n const blocks: string[] = [];\n const pattern = new RegExp(CODE_BLOCK_PATTERN.source, 'g');\n\n let match;\n while ((match = pattern.exec(content)) !== null) {\n const [, language, code] = match;\n if (code && code.trim()) {\n // Include language for context\n blocks.push(language ? `\\`\\`\\`${language}\\n${code.trim()}\\n\\`\\`\\`` : code.trim());\n }\n }\n\n return blocks;\n}\n\n/**\n * Extract badges from README\n */\nfunction extractBadges(content: string): string[] {\n const badges: string[] = [];\n const pattern = new RegExp(BADGE_PATTERN.source, 'g');\n\n let match;\n while ((match = pattern.exec(content)) !== null) {\n // Get alt text\n const altText = match[1] || match[3] || '';\n if (altText) {\n badges.push(altText);\n }\n }\n\n return badges;\n}\n\n/**\n * Extract title and description from README\n */\nfunction extractTitleAndDescription(\n content: string,\n sections: Section[]\n): { title?: string; description?: string } {\n let title: string | undefined;\n let description: string | undefined;\n\n // Title is usually first heading or first line\n const firstHeading = sections[0];\n if (firstHeading?.level === 1) {\n title = firstHeading.title;\n } else {\n // Look for first line that's not a badge\n const lines = content.split('\\n');\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (trimmed.startsWith('!') || trimmed.startsWith('[!')) continue;\n if (trimmed.startsWith('#')) {\n title = trimmed.replace(/^#+\\s*/, '');\n break;\n }\n }\n }\n\n // Description is usually first paragraph after title\n const afterTitle = content.split('\\n').slice(1);\n let foundContent = false;\n\n for (const line of afterTitle) {\n const trimmed = line.trim();\n\n // Skip badges\n if (trimmed.startsWith('!') || trimmed.startsWith('[!')) continue;\n // Skip headings\n if (trimmed.startsWith('#')) break;\n // Skip empty lines before content\n if (!trimmed && !foundContent) continue;\n // End on empty line after content\n if (!trimmed && foundContent) break;\n\n if (trimmed) {\n foundContent = true;\n if (!description) {\n description = trimmed;\n } else {\n description += ' ' + trimmed;\n }\n }\n }\n\n // Clean up description - remove markdown formatting\n if (description) {\n description = description\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1') // Remove links\n .replace(/`([^`]+)`/g, '$1') // Remove inline code\n .replace(/\\*\\*([^*]+)\\*\\*/g, '$1') // Remove bold\n .replace(/\\*([^*]+)\\*/g, '$1') // Remove italic\n .trim();\n }\n\n return { title, description };\n}\n\n/**\n * Find quick start code from first code blocks\n */\nfunction findQuickStartFromCode(content: string): string | undefined {\n // Look for code block in first 1000 chars or after installation\n const installMatch = content.match(/installation|install|setup/i);\n const startIndex = installMatch?.index ?? 0;\n\n const searchArea = content.slice(startIndex, startIndex + 2000);\n const codeBlocks = extractCodeBlocks(searchArea);\n\n // Find first JS/TS code block\n for (const block of codeBlocks) {\n if (\n block.startsWith('```javascript') ||\n block.startsWith('```typescript') ||\n block.startsWith('```js') ||\n block.startsWith('```ts') ||\n block.startsWith('```jsx') ||\n block.startsWith('```tsx')\n ) {\n return block;\n }\n }\n\n // Fall back to any code block\n return codeBlocks[0];\n}\n\n/**\n * Extract installation command from content\n * @param content - README content or installation section\n * @returns Installation command or undefined\n */\nexport function extractInstallCommand(content: string): string | undefined {\n // Look for npm/yarn/pnpm install commands\n const patterns = [\n /npm\\s+(?:install|i)\\s+(?:-[gDPS]\\s+)?(\\S+)/,\n /yarn\\s+add\\s+(?:-[gDPS]\\s+)?(\\S+)/,\n /pnpm\\s+(?:add|install)\\s+(?:-[gDPS]\\s+)?(\\S+)/,\n ];\n\n for (const pattern of patterns) {\n const match = content.match(pattern);\n if (match) {\n return match[0];\n }\n }\n\n return undefined;\n}\n\n/**\n * Clean markdown formatting from text\n * @param text - Text with markdown\n * @returns Plain text\n */\nexport function cleanMarkdown(text: string): string {\n return text\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1') // Links\n .replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '') // Images\n .replace(/`{1,3}[^`]*`{1,3}/g, '') // Code\n .replace(/\\*\\*([^*]+)\\*\\*/g, '$1') // Bold\n .replace(/\\*([^*]+)\\*/g, '$1') // Italic\n .replace(/__([^_]+)__/g, '$1') // Bold underscore\n .replace(/_([^_]+)_/g, '$1') // Italic underscore\n .replace(/~~([^~]+)~~/g, '$1') // Strikethrough\n .replace(/^#+\\s*/gm, '') // Headings\n .replace(/^>\\s*/gm, '') // Blockquotes\n .replace(/^[-*+]\\s+/gm, '') // Lists\n .replace(/^\\d+\\.\\s+/gm, '') // Numbered lists\n .trim();\n}\n\n/**\n * Truncate README content intelligently\n * @param readme - Parsed README\n * @param maxLength - Maximum length in characters\n * @returns Truncated README\n */\nexport function truncateReadme(readme: ParsedReadme, maxLength: number): ParsedReadme {\n const result = { ...readme };\n let currentLength = 0;\n\n // Priority order for keeping content\n const priorities: Array<keyof ParsedReadme> = [\n 'title',\n 'description',\n 'installation',\n 'quickStart',\n 'api',\n 'examples',\n ];\n\n // Calculate total\n for (const key of priorities) {\n const value = result[key];\n if (typeof value === 'string') {\n currentLength += value.length;\n } else if (Array.isArray(value)) {\n currentLength += value.join('').length;\n }\n }\n\n if (currentLength <= maxLength) {\n return result;\n }\n\n // Truncate lower priority items first\n const lowPriority: Array<keyof ParsedReadme> = ['examples', 'api', 'sections'];\n\n for (const key of lowPriority) {\n if (currentLength <= maxLength) break;\n\n const value = result[key];\n if (Array.isArray(value)) {\n const saved = value.join('').length;\n (result as Record<string, unknown>)[key] = [];\n currentLength -= saved;\n } else if (typeof value === 'string') {\n const saved = value.length;\n (result as Record<string, unknown>)[key] = undefined;\n currentLength -= saved;\n }\n }\n\n return result;\n}\n","/**\n * README Parser Plugin\n * Parses README.md to extract documentation content\n * @module plugins/core/readme-parser\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { parseReadme } from '../../parsers/readme.js';\n\n/**\n * README Parser Plugin\n * Extracts structured content from package README\n */\nexport const readmeParserPlugin: Plugin<ExtractorContext> = {\n name: 'readme-parser',\n version: '1.0.0',\n category: 'parser',\n\n install(kernel) {\n kernel.on('parse:start', async (context) => {\n const { files } = context.package;\n\n // Find README file (case-insensitive)\n let readmeContent: string | undefined;\n let readmePath: string | undefined;\n\n const readmePatterns = [\n 'README.md',\n 'readme.md',\n 'Readme.md',\n 'README.MD',\n 'README',\n 'readme',\n ];\n\n for (const pattern of readmePatterns) {\n if (files.has(pattern)) {\n readmeContent = files.get(pattern);\n readmePath = pattern;\n break;\n }\n }\n\n if (!readmeContent) {\n // Try to find any readme file\n for (const [path, content] of files) {\n if (path.toLowerCase().includes('readme')) {\n readmeContent = content;\n readmePath = path;\n break;\n }\n }\n }\n\n if (!readmeContent) {\n return;\n }\n\n try {\n context.readme = parseReadme(readmeContent);\n\n // Update package description if not set\n if (!context.package.description && context.readme.description) {\n context.package.description = context.readme.description;\n }\n } catch (error) {\n context.errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n });\n },\n};\n\nexport default readmeParserPlugin;\n","/**\n * Token counting and truncation utilities\n * Approximates GPT-4/Claude tokenization for content budgeting\n * @module core/tokens\n */\n\nimport type { ContentPriority } from '../types.js';\n\n/**\n * Section of content with metadata\n */\nexport interface ContentSection {\n /** Section identifier */\n id: string;\n /** Section title */\n title: string;\n /** Section content */\n content: string;\n /** Section priority type */\n priority: ContentPriority;\n /** Estimated token count */\n tokens: number;\n}\n\n/**\n * Average characters per token for different content types\n * Based on empirical analysis of GPT-4/Claude tokenization\n */\nconst CHARS_PER_TOKEN = {\n /** English prose: ~4 chars per token */\n prose: 4,\n /** Code blocks: ~3 chars per token (more special tokens) */\n code: 3,\n /** Markdown: ~3.5 chars per token */\n markdown: 3.5,\n};\n\n/**\n * Priority order for content truncation (higher = more important)\n */\nconst PRIORITY_ORDER: Record<ContentPriority, number> = {\n functions: 100,\n examples: 90,\n classes: 80,\n interfaces: 70,\n types: 60,\n readme: 50,\n};\n\n/**\n * Count approximate tokens in text\n * Uses character-based heuristic optimized for LLM tokenization\n * @param text - Text to count tokens in\n * @returns Approximate token count\n * @example\n * ```typescript\n * const tokens = countTokens(\"Hello, world!\");\n * console.log(tokens); // ~4\n * ```\n */\nexport function countTokens(text: string): number {\n if (!text) return 0;\n\n let tokens = 0;\n\n // Split by code blocks to handle them separately\n const codeBlockRegex = /```[\\s\\S]*?```/g;\n const parts: Array<{ text: string; isCode: boolean }> = [];\n\n let lastIndex = 0;\n let match;\n\n while ((match = codeBlockRegex.exec(text)) !== null) {\n // Add prose before code block\n if (match.index > lastIndex) {\n parts.push({\n text: text.slice(lastIndex, match.index),\n isCode: false,\n });\n }\n // Add code block\n parts.push({\n text: match[0],\n isCode: true,\n });\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining prose\n if (lastIndex < text.length) {\n parts.push({\n text: text.slice(lastIndex),\n isCode: false,\n });\n }\n\n // Count tokens for each part\n for (const part of parts) {\n const charsPerToken = part.isCode ? CHARS_PER_TOKEN.code : CHARS_PER_TOKEN.prose;\n tokens += Math.ceil(part.text.length / charsPerToken);\n }\n\n return tokens;\n}\n\n/**\n * Count tokens in a code string (no code block detection)\n * @param code - Code to count\n * @returns Approximate token count\n */\nexport function countCodeTokens(code: string): number {\n if (!code) return 0;\n return Math.ceil(code.length / CHARS_PER_TOKEN.code);\n}\n\n/**\n * Count tokens in markdown content\n * @param markdown - Markdown content\n * @returns Approximate token count\n */\nexport function countMarkdownTokens(markdown: string): number {\n if (!markdown) return 0;\n\n // Simple heuristic: code blocks use code ratio, rest uses markdown ratio\n let codeTokens = 0;\n let textTokens = 0;\n\n const codeBlockRegex = /```[\\s\\S]*?```/g;\n let lastIndex = 0;\n let match;\n\n while ((match = codeBlockRegex.exec(markdown)) !== null) {\n // Text before code block\n if (match.index > lastIndex) {\n const textPart = markdown.slice(lastIndex, match.index);\n textTokens += Math.ceil(textPart.length / CHARS_PER_TOKEN.markdown);\n }\n // Code block\n codeTokens += Math.ceil(match[0].length / CHARS_PER_TOKEN.code);\n lastIndex = match.index + match[0].length;\n }\n\n // Remaining text\n if (lastIndex < markdown.length) {\n const remaining = markdown.slice(lastIndex);\n textTokens += Math.ceil(remaining.length / CHARS_PER_TOKEN.markdown);\n }\n\n return codeTokens + textTokens;\n}\n\n/**\n * Estimate if text will fit within token limit\n * @param text - Text to check\n * @param limit - Token limit\n * @returns True if text fits within limit\n */\nexport function fitsTokenLimit(text: string, limit: number): boolean {\n return countTokens(text) <= limit;\n}\n\n/**\n * Parse content into sections\n * @param text - Markdown text to parse\n * @returns Array of sections\n */\nexport function parseSections(text: string): ContentSection[] {\n const sections: ContentSection[] = [];\n const lines = text.split('\\n');\n\n let currentSection: ContentSection | null = null;\n let currentContent: string[] = [];\n\n function finishSection(): void {\n if (currentSection) {\n currentSection.content = currentContent.join('\\n').trim();\n currentSection.tokens = countTokens(currentSection.content);\n sections.push(currentSection);\n currentContent = [];\n }\n }\n\n for (const line of lines) {\n // Check for heading\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n\n if (headingMatch && headingMatch[2]) {\n finishSection();\n\n const title = headingMatch[2].trim();\n const priority = inferPriority(title);\n\n currentSection = {\n id: title.toLowerCase().replace(/[^a-z0-9]+/g, '-'),\n title,\n content: '',\n priority,\n tokens: 0,\n };\n currentContent = [line];\n } else if (currentSection) {\n currentContent.push(line);\n } else {\n // Content before first heading - treat as intro\n if (line.trim()) {\n if (!currentSection) {\n currentSection = {\n id: 'intro',\n title: 'Introduction',\n content: '',\n priority: 'readme',\n tokens: 0,\n };\n }\n currentContent.push(line);\n }\n }\n }\n\n finishSection();\n\n return sections;\n}\n\n/**\n * Infer content priority from section title\n */\nfunction inferPriority(title: string): ContentPriority {\n const lower = title.toLowerCase();\n\n if (lower.includes('function') || lower.includes('method') || lower.includes('api')) {\n return 'functions';\n }\n if (lower.includes('example') || lower.includes('usage') || lower.includes('quick start')) {\n return 'examples';\n }\n if (lower.includes('class')) {\n return 'classes';\n }\n if (lower.includes('interface')) {\n return 'interfaces';\n }\n if (lower.includes('type')) {\n return 'types';\n }\n\n return 'readme';\n}\n\n/**\n * Sort sections by priority\n * @param sections - Sections to sort\n * @param priorities - Priority order (first = highest)\n * @returns Sorted sections\n */\nexport function prioritizeSections(\n sections: ContentSection[],\n priorities: ContentPriority[] = ['functions', 'examples']\n): ContentSection[] {\n // Build custom priority map\n const customOrder: Record<ContentPriority, number> = { ...PRIORITY_ORDER };\n\n // Boost specified priorities\n priorities.forEach((p, i) => {\n customOrder[p] = 1000 - i;\n });\n\n return [...sections].sort((a, b) => {\n return (customOrder[b.priority] ?? 0) - (customOrder[a.priority] ?? 0);\n });\n}\n\n/**\n * Truncation result\n */\nexport interface TruncateResult {\n /** Truncated text */\n text: string;\n /** Whether truncation occurred */\n truncated: boolean;\n /** Actual token count */\n tokenCount: number;\n /** Sections included */\n includedSections: string[];\n /** Sections removed */\n removedSections: string[];\n}\n\n/**\n * Truncate text to fit within token limit while preserving structure\n * @param text - Text to truncate\n * @param limit - Token limit\n * @param priorities - Priority order for content\n * @returns Truncated text and metadata\n * @example\n * ```typescript\n * const result = truncateToTokenLimit(content, 2000);\n * if (result.truncated) {\n * console.log(`Removed: ${result.removedSections.join(', ')}`);\n * }\n * ```\n */\nexport function truncateToTokenLimit(\n text: string,\n limit: number,\n priorities: ContentPriority[] = ['functions', 'examples']\n): TruncateResult {\n const currentTokens = countTokens(text);\n\n // No truncation needed\n if (currentTokens <= limit) {\n return {\n text,\n truncated: false,\n tokenCount: currentTokens,\n includedSections: [],\n removedSections: [],\n };\n }\n\n // Parse and prioritize sections\n const sections = parseSections(text);\n const prioritized = prioritizeSections(sections, priorities);\n\n // Build output within limit\n const included: ContentSection[] = [];\n const removed: ContentSection[] = [];\n let usedTokens = 0;\n\n for (const section of prioritized) {\n if (usedTokens + section.tokens <= limit) {\n included.push(section);\n usedTokens += section.tokens;\n } else {\n // Try to include partial section\n const remaining = limit - usedTokens;\n if (remaining > 50 && section.tokens > 0) {\n // Truncate section content\n const truncated = truncateSectionContent(section, remaining);\n if (truncated) {\n included.push(truncated);\n usedTokens += truncated.tokens;\n }\n }\n removed.push(section);\n }\n }\n\n // Reconstruct text in original order\n const sectionOrder = sections.map((s) => s.id);\n included.sort((a, b) => sectionOrder.indexOf(a.id) - sectionOrder.indexOf(b.id));\n\n const output = included.map((s) => s.content).join('\\n\\n');\n\n return {\n text: output.trim(),\n truncated: true,\n tokenCount: countTokens(output),\n includedSections: included.map((s) => s.title),\n removedSections: removed.map((s) => s.title),\n };\n}\n\n/**\n * Truncate a single section's content to fit token limit\n */\nfunction truncateSectionContent(\n section: ContentSection,\n maxTokens: number\n): ContentSection | null {\n const lines = section.content.split('\\n');\n const truncatedLines: string[] = [];\n let tokens = 0;\n\n for (const line of lines) {\n const lineTokens = countTokens(line);\n if (tokens + lineTokens <= maxTokens) {\n truncatedLines.push(line);\n tokens += lineTokens;\n } else {\n break;\n }\n }\n\n if (truncatedLines.length === 0) {\n return null;\n }\n\n // Add truncation indicator\n truncatedLines.push('\\n...(truncated)');\n\n return {\n ...section,\n content: truncatedLines.join('\\n'),\n tokens: countTokens(truncatedLines.join('\\n')),\n };\n}\n\n/**\n * Format token count for display\n * @param tokens - Token count\n * @returns Formatted string\n */\nexport function formatTokenCount(tokens: number): string {\n if (tokens < 1000) {\n return `${tokens} tokens`;\n }\n return `${(tokens / 1000).toFixed(1)}k tokens`;\n}\n\n/**\n * Calculate token usage percentage\n * @param used - Tokens used\n * @param limit - Token limit\n * @returns Percentage (0-100)\n */\nexport function tokenUsagePercent(used: number, limit: number): number {\n if (limit <= 0) return 0;\n return Math.min(100, Math.round((used / limit) * 100));\n}\n","/**\n * llms.txt output generator\n * Generates concise LLM-optimized documentation within token limits\n * @module outputs/llms\n */\n\nimport type { ExtractorContext, APIEntry, ParsedReadme } from '../types.js';\nimport { countTokens, truncateToTokenLimit } from '../core/tokens.js';\n\n/**\n * Default token limit for llms.txt\n * Set to Infinity to include ALL content by default (complete documentation)\n * Users can override with --token-limit flag for size-constrained prompts\n */\nexport const DEFAULT_LLMS_TOKEN_LIMIT = Infinity;\n\n/**\n * Generate options for llms.txt\n */\nexport interface LlmsGenerateOptions {\n /** Maximum token count (default: Infinity = no limit) */\n tokenLimit?: number;\n /** Include installation instructions */\n includeInstall?: boolean;\n /** Include quick start example */\n includeQuickStart?: boolean;\n /** Maximum functions to include (default: Infinity = all) */\n maxFunctions?: number;\n /** Maximum classes to include (default: Infinity = all) */\n maxClasses?: number;\n}\n\n/**\n * Generate llms.txt content from context\n * @param context - Extractor context\n * @param options - Generation options\n * @returns Generated llms.txt content\n * @example\n * ```typescript\n * const llmsTxt = generateLlmsTxt(context);\n * await fs.writeFile('llms.txt', llmsTxt);\n * ```\n */\nexport function generateLlmsTxt(\n context: ExtractorContext,\n options: LlmsGenerateOptions = {}\n): string {\n const {\n tokenLimit = DEFAULT_LLMS_TOKEN_LIMIT,\n includeInstall = true,\n includeQuickStart = true,\n maxFunctions = Infinity,\n maxClasses = Infinity,\n } = options;\n\n const { package: pkg, api, readme } = context;\n const sections: string[] = [];\n\n // Header\n sections.push(`# ${pkg.name}`);\n if (pkg.description) {\n sections.push(`\\n> ${pkg.description}`);\n }\n sections.push('');\n\n // Installation\n if (includeInstall) {\n sections.push('## Install\\n');\n sections.push('```bash');\n sections.push(`npm install ${pkg.name}`);\n sections.push('```\\n');\n }\n\n // Quick Start\n if (includeQuickStart && readme?.quickStart) {\n sections.push('## Quick Start\\n');\n sections.push(readme.quickStart);\n sections.push('');\n }\n\n // API Summary\n sections.push('## API\\n');\n\n // Group by kind\n const functions = api.filter((e) => e.kind === 'function');\n const classes = api.filter((e) => e.kind === 'class');\n const interfaces = api.filter((e) => e.kind === 'interface');\n const types = api.filter((e) => e.kind === 'type');\n const constants = api.filter((e) => e.kind === 'constant');\n\n // Functions\n if (functions.length > 0) {\n sections.push('### Functions\\n');\n const limit = Math.min(functions.length, maxFunctions);\n for (let i = 0; i < limit; i++) {\n sections.push(formatFunctionBrief(functions[i]));\n }\n if (functions.length > maxFunctions && maxFunctions < Infinity) {\n sections.push(`\\n...and ${functions.length - maxFunctions} more functions.`);\n }\n sections.push('');\n }\n\n // Classes\n if (classes.length > 0) {\n sections.push('### Classes\\n');\n const limit = Math.min(classes.length, maxClasses);\n for (let i = 0; i < limit; i++) {\n sections.push(formatClassBrief(classes[i]));\n }\n if (classes.length > maxClasses && maxClasses < Infinity) {\n sections.push(`\\n...and ${classes.length - maxClasses} more classes.`);\n }\n sections.push('');\n }\n\n // Types\n if (interfaces.length > 0 || types.length > 0) {\n sections.push('### Types\\n');\n const allTypes = [...interfaces, ...types];\n for (const t of allTypes) {\n const desc = t.description ? ` - ${truncate(t.description, 80)}` : '';\n sections.push(`- \\`${t.name}\\`${desc}`);\n }\n sections.push('');\n }\n\n // Constants\n if (constants.length > 0) {\n sections.push('### Constants\\n');\n for (const c of constants) {\n const desc = c.description ? ` - ${truncate(c.description, 80)}` : '';\n sections.push(`- \\`${c.name}\\`${desc}`);\n }\n sections.push('');\n }\n\n // Assemble\n let output = sections.join('\\n');\n\n // Truncate if needed\n const currentTokens = countTokens(output);\n if (currentTokens > tokenLimit) {\n const result = truncateToTokenLimit(output, tokenLimit, ['functions', 'examples']);\n output = result.text;\n context.truncated = result.truncated;\n }\n\n context.tokenCount = countTokens(output);\n return output;\n}\n\n/**\n * Format a function for brief display\n */\nfunction formatFunctionBrief(fn: APIEntry): string {\n const params = fn.params?.map((p) => `${p.name}${p.optional ? '?' : ''}`).join(', ') || '';\n const returnType = fn.returns?.type ? `: ${simplifyType(fn.returns.type)}` : '';\n const desc = fn.description ? ` - ${truncate(fn.description, 60)}` : '';\n\n return `- \\`${fn.name}(${params})${returnType}\\`${desc}`;\n}\n\n/**\n * Format a class for brief display\n */\nfunction formatClassBrief(cls: APIEntry): string {\n const lines: string[] = [];\n const desc = cls.description ? ` - ${truncate(cls.description, 60)}` : '';\n lines.push(`- \\`${cls.name}\\`${desc}`);\n\n // Add key methods\n if (cls.methods && cls.methods.length > 0) {\n const keyMethods = cls.methods.slice(0, 3);\n for (const method of keyMethods) {\n lines.push(` - \\`${method.name}()\\``);\n }\n if (cls.methods.length > 3) {\n lines.push(` - ...${cls.methods.length - 3} more methods`);\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Simplify a type for display\n */\nfunction simplifyType(type: string): string {\n // Remove generic parameters if too complex\n if (type.length > 30) {\n const genericStart = type.indexOf('<');\n if (genericStart > 0) {\n return type.slice(0, genericStart) + '<...>';\n }\n }\n return type;\n}\n\n/**\n * Truncate text with ellipsis\n */\nfunction truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return text.slice(0, maxLength - 3) + '...';\n}\n\n/**\n * Generate minimal llms.txt for very small token limits\n * @param context - Extractor context\n * @returns Minimal llms.txt content\n */\nexport function generateMinimalLlmsTxt(context: ExtractorContext): string {\n const { package: pkg, api } = context;\n const lines: string[] = [];\n\n lines.push(`# ${pkg.name}`);\n if (pkg.description) {\n lines.push(`> ${pkg.description}`);\n }\n lines.push('');\n lines.push('```bash');\n lines.push(`npm i ${pkg.name}`);\n lines.push('```');\n lines.push('');\n\n // Just list top exports\n lines.push('## Exports');\n const topExports = api.slice(0, 10);\n for (const exp of topExports) {\n lines.push(`- ${exp.kind}: \\`${exp.name}\\``);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Check if content fits within token limit\n * @param content - Content to check\n * @param limit - Token limit\n * @returns True if content fits\n */\nexport function fitsTokenLimit(content: string, limit: number): boolean {\n return countTokens(content) <= limit;\n}\n\n/**\n * Estimate token count for llms.txt\n * @param context - Extractor context\n * @returns Estimated token count\n */\nexport function estimateLlmsTokens(context: ExtractorContext): number {\n const { package: pkg, api, readme } = context;\n\n let estimate = 0;\n\n // Header section\n estimate += countTokens(pkg.name + (pkg.description || ''));\n estimate += 50; // Install section\n\n // Quick start\n if (readme?.quickStart) {\n estimate += countTokens(readme.quickStart);\n }\n\n // API entries (rough estimate)\n for (const entry of api) {\n estimate += 20; // Base for each entry\n if (entry.description) {\n estimate += Math.ceil(entry.description.length / 4);\n }\n if (entry.params) {\n estimate += entry.params.length * 5;\n }\n }\n\n return estimate;\n}\n","/**\n * llms.txt Output Plugin\n * Generates concise LLM-optimized documentation\n * @module plugins/core/llms-output\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { generateLlmsTxt, DEFAULT_LLMS_TOKEN_LIMIT } from '../../outputs/llms.js';\n\n/**\n * llms.txt Output Plugin\n * Generates llms.txt within token limits\n */\nexport const llmsOutputPlugin: Plugin<ExtractorContext> = {\n name: 'llms-output',\n version: '1.0.0',\n category: 'output',\n\n install(kernel) {\n kernel.on('output:start', async (context) => {\n // Check if llms format is requested\n if (!context.options.formats?.includes('llms')) {\n return;\n }\n\n try {\n const tokenLimit = context.options.llmsTokenLimit ?? DEFAULT_LLMS_TOKEN_LIMIT;\n\n const output = generateLlmsTxt(context, {\n tokenLimit,\n includeInstall: true,\n includeQuickStart: true,\n });\n\n context.outputs.set('llms', output);\n } catch (error) {\n context.errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n });\n },\n};\n\nexport default llmsOutputPlugin;\n","/**\n * llms-full.txt output generator\n * Generates complete LLM-optimized documentation without token limits\n * @module outputs/llms-full\n */\n\nimport type { ExtractorContext, APIEntry, ParsedReadme } from '../types.js';\nimport { countTokens } from '../core/tokens.js';\n\n/**\n * Generate options for llms-full.txt\n */\nexport interface LlmsFullGenerateOptions {\n /** Include full examples */\n includeExamples?: boolean;\n /** Include full parameter descriptions */\n includeParamDescriptions?: boolean;\n /** Include source file locations */\n includeSourceLocations?: boolean;\n /** Include deprecation notices */\n includeDeprecations?: boolean;\n}\n\n/**\n * Generate llms-full.txt content from context\n * @param context - Extractor context\n * @param options - Generation options\n * @returns Generated llms-full.txt content\n * @example\n * ```typescript\n * const llmsFullTxt = generateLlmsFullTxt(context);\n * await fs.writeFile('llms-full.txt', llmsFullTxt);\n * ```\n */\nexport function generateLlmsFullTxt(\n context: ExtractorContext,\n options: LlmsFullGenerateOptions = {}\n): string {\n const {\n includeExamples = true,\n includeParamDescriptions = true,\n includeSourceLocations = false,\n includeDeprecations = true,\n } = options;\n\n const { package: pkg, api, readme } = context;\n const sections: string[] = [];\n\n // Header\n sections.push(`# ${pkg.name} v${pkg.version}`);\n if (pkg.description) {\n sections.push(`\\n> ${pkg.description}`);\n }\n sections.push('');\n\n // Package info\n sections.push('## Package Info\\n');\n sections.push(`- **Version:** ${pkg.version}`);\n if (pkg.license) {\n sections.push(`- **License:** ${pkg.license}`);\n }\n if (pkg.homepage) {\n sections.push(`- **Homepage:** ${pkg.homepage}`);\n }\n if (pkg.repository) {\n sections.push(`- **Repository:** ${pkg.repository.url}`);\n }\n sections.push('');\n\n // Installation\n sections.push('## Installation\\n');\n sections.push('```bash');\n sections.push(`# npm`);\n sections.push(`npm install ${pkg.name}`);\n sections.push('');\n sections.push(`# yarn`);\n sections.push(`yarn add ${pkg.name}`);\n sections.push('');\n sections.push(`# pnpm`);\n sections.push(`pnpm add ${pkg.name}`);\n sections.push('```\\n');\n\n // Quick Start\n if (readme?.quickStart) {\n sections.push('## Quick Start\\n');\n sections.push(readme.quickStart);\n sections.push('');\n }\n\n // API Reference\n sections.push('## API Reference\\n');\n\n // Group by kind\n const functions = api.filter((e) => e.kind === 'function');\n const classes = api.filter((e) => e.kind === 'class');\n const interfaces = api.filter((e) => e.kind === 'interface');\n const types = api.filter((e) => e.kind === 'type');\n const constants = api.filter((e) => e.kind === 'constant');\n const enums = api.filter((e) => e.kind === 'enum');\n\n // Functions\n if (functions.length > 0) {\n sections.push('### Functions\\n');\n for (const fn of functions) {\n sections.push(formatFunction(fn, { includeExamples, includeParamDescriptions, includeDeprecations, includeSourceLocations }));\n sections.push('');\n }\n }\n\n // Classes\n if (classes.length > 0) {\n sections.push('### Classes\\n');\n for (const cls of classes) {\n sections.push(formatClass(cls, { includeExamples, includeParamDescriptions, includeDeprecations, includeSourceLocations }));\n sections.push('');\n }\n }\n\n // Interfaces\n if (interfaces.length > 0) {\n sections.push('### Interfaces\\n');\n for (const iface of interfaces) {\n sections.push(formatInterface(iface, { includeDeprecations, includeSourceLocations }));\n sections.push('');\n }\n }\n\n // Types\n if (types.length > 0) {\n sections.push('### Types\\n');\n for (const type of types) {\n sections.push(formatType(type, { includeDeprecations }));\n sections.push('');\n }\n }\n\n // Enums\n if (enums.length > 0) {\n sections.push('### Enums\\n');\n for (const enumEntry of enums) {\n sections.push(formatEnum(enumEntry));\n sections.push('');\n }\n }\n\n // Constants\n if (constants.length > 0) {\n sections.push('### Constants\\n');\n for (const constant of constants) {\n sections.push(formatConstant(constant));\n sections.push('');\n }\n }\n\n const output = sections.join('\\n');\n context.tokenCount = countTokens(output);\n return output;\n}\n\n/**\n * Formatting options\n */\ninterface FormatOptions {\n includeExamples?: boolean;\n includeParamDescriptions?: boolean;\n includeDeprecations?: boolean;\n includeSourceLocations?: boolean;\n}\n\n/**\n * Format a function entry\n */\nfunction formatFunction(fn: APIEntry, options: FormatOptions): string {\n const lines: string[] = [];\n\n // Name and signature\n lines.push(`#### \\`${fn.name}\\``);\n\n if (options.includeDeprecations && fn.deprecated) {\n lines.push(`\\n> ⚠️ **Deprecated:** ${typeof fn.deprecated === 'string' ? fn.deprecated : 'This function is deprecated.'}`);\n }\n\n if (fn.description) {\n lines.push(`\\n${fn.description}`);\n }\n\n // Signature\n lines.push('\\n**Signature:**');\n lines.push('```typescript');\n lines.push(fn.signature);\n lines.push('```');\n\n // Parameters\n if (fn.params && fn.params.length > 0 && options.includeParamDescriptions) {\n lines.push('\\n**Parameters:**\\n');\n for (const param of fn.params) {\n const optional = param.optional ? ' (optional)' : '';\n const defaultVal = param.defaultValue ? ` = \\`${param.defaultValue}\\`` : '';\n lines.push(`- \\`${param.name}: ${param.type || 'unknown'}\\`${optional}${defaultVal}`);\n if (param.description) {\n lines.push(` - ${param.description}`);\n }\n }\n }\n\n // Returns\n if (fn.returns) {\n lines.push('\\n**Returns:**');\n lines.push(`- \\`${fn.returns.type}\\`${fn.returns.description ? ` - ${fn.returns.description}` : ''}`);\n }\n\n // Examples\n if (options.includeExamples && fn.examples && fn.examples.length > 0) {\n lines.push('\\n**Examples:**');\n for (const example of fn.examples) {\n if (example.includes('```')) {\n lines.push(example);\n } else {\n lines.push('```typescript');\n lines.push(example);\n lines.push('```');\n }\n }\n }\n\n // Source location\n if (options.includeSourceLocations && fn.sourceFile) {\n lines.push(`\\n*Source: ${fn.sourceFile}${fn.line ? `:${fn.line}` : ''}*`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format a class entry\n */\nfunction formatClass(cls: APIEntry, options: FormatOptions): string {\n const lines: string[] = [];\n\n // Name\n lines.push(`#### \\`${cls.name}\\``);\n\n if (options.includeDeprecations && cls.deprecated) {\n lines.push(`\\n> ⚠️ **Deprecated:** ${typeof cls.deprecated === 'string' ? cls.deprecated : 'This class is deprecated.'}`);\n }\n\n if (cls.description) {\n lines.push(`\\n${cls.description}`);\n }\n\n // Signature\n lines.push('\\n**Signature:**');\n lines.push('```typescript');\n let sig = cls.signature;\n if (cls.extends && cls.extends.length > 0) {\n sig += ` extends ${cls.extends.join(', ')}`;\n }\n if (cls.implements && cls.implements.length > 0) {\n sig += ` implements ${cls.implements.join(', ')}`;\n }\n lines.push(sig);\n lines.push('```');\n\n // Properties\n if (cls.properties && cls.properties.length > 0) {\n lines.push('\\n**Properties:**\\n');\n for (const prop of cls.properties) {\n lines.push(`- \\`${prop.name}\\`: \\`${prop.signature.split(':').slice(1).join(':').trim() || 'unknown'}\\``);\n if (prop.description) {\n lines.push(` - ${prop.description}`);\n }\n }\n }\n\n // Methods\n if (cls.methods && cls.methods.length > 0) {\n lines.push('\\n**Methods:**\\n');\n for (const method of cls.methods) {\n const params = method.params?.map((p) => `${p.name}: ${p.type || 'unknown'}`).join(', ') || '';\n const returnType = method.returns?.type || 'void';\n lines.push(`- \\`${method.name}(${params}): ${returnType}\\``);\n if (method.description) {\n lines.push(` - ${method.description}`);\n }\n }\n }\n\n // Examples\n if (options.includeExamples && cls.examples && cls.examples.length > 0) {\n lines.push('\\n**Examples:**');\n for (const example of cls.examples) {\n if (example.includes('```')) {\n lines.push(example);\n } else {\n lines.push('```typescript');\n lines.push(example);\n lines.push('```');\n }\n }\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format an interface entry\n */\nfunction formatInterface(iface: APIEntry, options: FormatOptions): string {\n const lines: string[] = [];\n\n lines.push(`#### \\`${iface.name}\\``);\n\n if (options.includeDeprecations && iface.deprecated) {\n lines.push(`\\n> ⚠️ **Deprecated**`);\n }\n\n if (iface.description) {\n lines.push(`\\n${iface.description}`);\n }\n\n // Signature with full definition\n lines.push('\\n```typescript');\n let sig = iface.signature;\n if (iface.extends && iface.extends.length > 0) {\n sig += ` extends ${iface.extends.join(', ')}`;\n }\n lines.push(sig + ' {');\n\n // Properties\n if (iface.properties && iface.properties.length > 0) {\n for (const prop of iface.properties) {\n lines.push(` ${prop.signature};`);\n }\n }\n\n // Methods\n if (iface.methods && iface.methods.length > 0) {\n for (const method of iface.methods) {\n lines.push(` ${method.signature};`);\n }\n }\n\n lines.push('}');\n lines.push('```');\n\n return lines.join('\\n');\n}\n\n/**\n * Format a type entry\n */\nfunction formatType(type: APIEntry, options: FormatOptions): string {\n const lines: string[] = [];\n\n lines.push(`#### \\`${type.name}\\``);\n\n if (options.includeDeprecations && type.deprecated) {\n lines.push(`\\n> ⚠️ **Deprecated**`);\n }\n\n if (type.description) {\n lines.push(`\\n${type.description}`);\n }\n\n lines.push('\\n```typescript');\n lines.push(type.signature);\n lines.push('```');\n\n return lines.join('\\n');\n}\n\n/**\n * Format an enum entry\n */\nfunction formatEnum(enumEntry: APIEntry): string {\n const lines: string[] = [];\n\n lines.push(`#### \\`${enumEntry.name}\\``);\n\n if (enumEntry.description) {\n lines.push(`\\n${enumEntry.description}`);\n }\n\n lines.push('\\n```typescript');\n lines.push(`enum ${enumEntry.name} {`);\n\n if (enumEntry.members) {\n for (const member of enumEntry.members) {\n if (member.value !== undefined) {\n lines.push(` ${member.name} = ${JSON.stringify(member.value)},`);\n } else {\n lines.push(` ${member.name},`);\n }\n }\n }\n\n lines.push('}');\n lines.push('```');\n\n return lines.join('\\n');\n}\n\n/**\n * Format a constant entry\n */\nfunction formatConstant(constant: APIEntry): string {\n const lines: string[] = [];\n\n lines.push(`#### \\`${constant.name}\\``);\n\n if (constant.description) {\n lines.push(`\\n${constant.description}`);\n }\n\n lines.push('\\n```typescript');\n lines.push(constant.signature);\n lines.push('```');\n\n return lines.join('\\n');\n}\n","/**\n * llms-full.txt Output Plugin\n * Generates complete LLM-optimized documentation\n * @module plugins/core/llms-full-output\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { generateLlmsFullTxt } from '../../outputs/llms-full.js';\n\n/**\n * llms-full.txt Output Plugin\n * Generates complete API documentation without token limits\n */\nexport const llmsFullOutputPlugin: Plugin<ExtractorContext> = {\n name: 'llms-full-output',\n version: '1.0.0',\n category: 'output',\n\n install(kernel) {\n kernel.on('output:start', async (context) => {\n // Check if llms-full format is requested\n if (!context.options.formats?.includes('llms-full')) {\n return;\n }\n\n try {\n const output = generateLlmsFullTxt(context, {\n includeExamples: true,\n includeParamDescriptions: true,\n includeDeprecations: true,\n });\n\n context.outputs.set('llms-full', output);\n } catch (error) {\n context.errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n });\n },\n};\n\nexport default llmsFullOutputPlugin;\n","/**\n * Markdown output generator\n * Generates formatted API documentation in Markdown format\n * @module outputs/markdown\n */\n\nimport type { ExtractorContext, APIEntry, ParamDoc } from '../types.js';\nimport { countTokens } from '../core/tokens.js';\n\n/**\n * Generate options for markdown output\n */\nexport interface MarkdownGenerateOptions {\n /** Include table of contents */\n includeToc?: boolean;\n /** Include parameter tables */\n includeParamTables?: boolean;\n /** Include badge section */\n includeBadges?: boolean;\n /** Repository URL for source links */\n repositoryUrl?: string;\n}\n\n/**\n * Generate markdown documentation from context\n * @param context - Extractor context\n * @param options - Generation options\n * @returns Generated markdown content\n */\nexport function generateMarkdown(\n context: ExtractorContext,\n options: MarkdownGenerateOptions = {}\n): string {\n const {\n includeToc = true,\n includeParamTables = true,\n includeBadges = true,\n repositoryUrl,\n } = options;\n\n const { package: pkg, api, readme } = context;\n const sections: string[] = [];\n\n // Title\n sections.push(`# ${pkg.name}`);\n sections.push('');\n\n // Badges\n if (includeBadges) {\n const badges: string[] = [];\n badges.push(`})`);\n if (pkg.license) {\n badges.push(`})`);\n }\n if (badges.length > 0) {\n sections.push(badges.join(' '));\n sections.push('');\n }\n }\n\n // Description\n if (pkg.description) {\n sections.push(`> ${pkg.description}`);\n sections.push('');\n }\n\n // Table of Contents\n if (includeToc) {\n sections.push('## Table of Contents\\n');\n sections.push('- [Installation](#installation)');\n if (readme?.quickStart) {\n sections.push('- [Quick Start](#quick-start)');\n }\n sections.push('- [API Reference](#api-reference)');\n\n const functions = api.filter((e) => e.kind === 'function');\n const classes = api.filter((e) => e.kind === 'class');\n const interfaces = api.filter((e) => e.kind === 'interface');\n const types = api.filter((e) => e.kind === 'type');\n\n if (functions.length > 0) {\n sections.push(' - [Functions](#functions)');\n }\n if (classes.length > 0) {\n sections.push(' - [Classes](#classes)');\n }\n if (interfaces.length > 0) {\n sections.push(' - [Interfaces](#interfaces)');\n }\n if (types.length > 0) {\n sections.push(' - [Types](#types)');\n }\n sections.push('');\n }\n\n // Installation\n sections.push('## Installation\\n');\n sections.push('```bash');\n sections.push(`npm install ${pkg.name}`);\n sections.push('```\\n');\n sections.push('Or with yarn:\\n');\n sections.push('```bash');\n sections.push(`yarn add ${pkg.name}`);\n sections.push('```\\n');\n\n // Quick Start\n if (readme?.quickStart) {\n sections.push('## Quick Start\\n');\n sections.push(readme.quickStart);\n sections.push('');\n }\n\n // API Reference\n sections.push('## API Reference\\n');\n\n // Group by kind\n const functions = api.filter((e) => e.kind === 'function');\n const classes = api.filter((e) => e.kind === 'class');\n const interfaces = api.filter((e) => e.kind === 'interface');\n const types = api.filter((e) => e.kind === 'type');\n const enums = api.filter((e) => e.kind === 'enum');\n const constants = api.filter((e) => e.kind === 'constant');\n\n // Functions\n if (functions.length > 0) {\n sections.push('### Functions\\n');\n for (const fn of functions) {\n sections.push(formatFunctionMd(fn, { includeParamTables, repositoryUrl }));\n sections.push('');\n sections.push('---\\n');\n }\n }\n\n // Classes\n if (classes.length > 0) {\n sections.push('### Classes\\n');\n for (const cls of classes) {\n sections.push(formatClassMd(cls, { includeParamTables, repositoryUrl }));\n sections.push('');\n sections.push('---\\n');\n }\n }\n\n // Interfaces\n if (interfaces.length > 0) {\n sections.push('### Interfaces\\n');\n for (const iface of interfaces) {\n sections.push(formatInterfaceMd(iface));\n sections.push('');\n sections.push('---\\n');\n }\n }\n\n // Types\n if (types.length > 0) {\n sections.push('### Types\\n');\n for (const type of types) {\n sections.push(formatTypeMd(type));\n sections.push('');\n }\n }\n\n // Enums\n if (enums.length > 0) {\n sections.push('### Enums\\n');\n for (const enumEntry of enums) {\n sections.push(formatEnumMd(enumEntry));\n sections.push('');\n }\n }\n\n // Constants\n if (constants.length > 0) {\n sections.push('### Constants\\n');\n for (const constant of constants) {\n sections.push(formatConstantMd(constant));\n }\n sections.push('');\n }\n\n const output = sections.join('\\n');\n context.tokenCount = countTokens(output);\n return output;\n}\n\n/**\n * Format options\n */\ninterface FormatMdOptions {\n includeParamTables?: boolean;\n repositoryUrl?: string;\n}\n\n/**\n * Format function for markdown\n */\nfunction formatFunctionMd(fn: APIEntry, options: FormatMdOptions): string {\n const lines: string[] = [];\n\n // Anchor and title\n const anchor = fn.name.toLowerCase();\n lines.push(`<a name=\"${anchor}\"></a>`);\n lines.push(`#### \\`${fn.name}()\\``);\n\n // Deprecation warning\n if (fn.deprecated) {\n lines.push(`\\n> ⚠️ **Deprecated:** ${typeof fn.deprecated === 'string' ? fn.deprecated : 'This function is deprecated.'}\\n`);\n }\n\n // Description\n if (fn.description) {\n lines.push(`\\n${fn.description}\\n`);\n }\n\n // Signature\n lines.push('**Signature:**\\n');\n lines.push('```typescript');\n lines.push(fn.signature);\n lines.push('```\\n');\n\n // Parameters table\n if (fn.params && fn.params.length > 0 && options.includeParamTables) {\n lines.push('**Parameters:**\\n');\n lines.push('| Name | Type | Required | Description |');\n lines.push('|------|------|----------|-------------|');\n for (const param of fn.params) {\n const required = param.optional ? 'No' : 'Yes';\n const desc = param.description || '-';\n const defaultVal = param.defaultValue ? ` (default: \\`${param.defaultValue}\\`)` : '';\n lines.push(`| \\`${param.name}\\` | \\`${param.type || 'unknown'}\\` | ${required} | ${desc}${defaultVal} |`);\n }\n lines.push('');\n }\n\n // Returns\n if (fn.returns) {\n lines.push('**Returns:**\\n');\n lines.push(`\\`${fn.returns.type}\\`${fn.returns.description ? ` - ${fn.returns.description}` : ''}\\n`);\n }\n\n // Examples\n if (fn.examples && fn.examples.length > 0) {\n lines.push('**Example:**\\n');\n for (const example of fn.examples) {\n if (example.includes('```')) {\n lines.push(example);\n } else {\n lines.push('```typescript');\n lines.push(example);\n lines.push('```');\n }\n }\n lines.push('');\n }\n\n // Source link\n if (options.repositoryUrl && fn.sourceFile) {\n const sourceUrl = `${options.repositoryUrl}/blob/main/${fn.sourceFile}${fn.line ? `#L${fn.line}` : ''}`;\n lines.push(`[View source](${sourceUrl})\\n`);\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format class for markdown\n */\nfunction formatClassMd(cls: APIEntry, options: FormatMdOptions): string {\n const lines: string[] = [];\n\n const anchor = cls.name.toLowerCase();\n lines.push(`<a name=\"${anchor}\"></a>`);\n lines.push(`#### \\`${cls.name}\\``);\n\n if (cls.deprecated) {\n lines.push(`\\n> ⚠️ **Deprecated**\\n`);\n }\n\n if (cls.description) {\n lines.push(`\\n${cls.description}\\n`);\n }\n\n // Inheritance\n if (cls.extends && cls.extends.length > 0) {\n lines.push(`**Extends:** ${cls.extends.map((e) => `\\`${e}\\``).join(', ')}\\n`);\n }\n if (cls.implements && cls.implements.length > 0) {\n lines.push(`**Implements:** ${cls.implements.map((e) => `\\`${e}\\``).join(', ')}\\n`);\n }\n\n // Constructor (if we have it)\n const constructor = cls.methods?.find((m) => m.name === 'constructor');\n if (constructor) {\n lines.push('**Constructor:**\\n');\n lines.push('```typescript');\n lines.push(`new ${cls.name}(${constructor.params?.map((p) => `${p.name}: ${p.type}`).join(', ') || ''})`);\n lines.push('```\\n');\n }\n\n // Properties\n if (cls.properties && cls.properties.length > 0) {\n lines.push('**Properties:**\\n');\n lines.push('| Name | Type | Description |');\n lines.push('|------|------|-------------|');\n for (const prop of cls.properties) {\n const type = prop.signature.split(':').slice(1).join(':').trim() || 'unknown';\n lines.push(`| \\`${prop.name}\\` | \\`${type}\\` | ${prop.description || '-'} |`);\n }\n lines.push('');\n }\n\n // Methods\n const methods = cls.methods?.filter((m) => m.name !== 'constructor') || [];\n if (methods.length > 0) {\n lines.push('**Methods:**\\n');\n lines.push('| Method | Returns | Description |');\n lines.push('|--------|---------|-------------|');\n for (const method of methods) {\n const params = method.params?.map((p) => `${p.name}`).join(', ') || '';\n const returnType = method.returns?.type || 'void';\n lines.push(`| \\`${method.name}(${params})\\` | \\`${returnType}\\` | ${method.description || '-'} |`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format interface for markdown\n */\nfunction formatInterfaceMd(iface: APIEntry): string {\n const lines: string[] = [];\n\n lines.push(`#### \\`${iface.name}\\``);\n\n if (iface.description) {\n lines.push(`\\n${iface.description}\\n`);\n }\n\n if (iface.extends && iface.extends.length > 0) {\n lines.push(`**Extends:** ${iface.extends.map((e) => `\\`${e}\\``).join(', ')}\\n`);\n }\n\n // Properties table\n if (iface.properties && iface.properties.length > 0) {\n lines.push('| Property | Type | Description |');\n lines.push('|----------|------|-------------|');\n for (const prop of iface.properties) {\n const type = prop.signature.split(':').slice(1).join(':').trim() || 'unknown';\n lines.push(`| \\`${prop.name}\\` | \\`${type}\\` | ${prop.description || '-'} |`);\n }\n lines.push('');\n }\n\n // Full definition\n lines.push('<details>');\n lines.push('<summary>Full Definition</summary>\\n');\n lines.push('```typescript');\n lines.push(`interface ${iface.name} {`);\n if (iface.properties) {\n for (const prop of iface.properties) {\n lines.push(` ${prop.signature};`);\n }\n }\n if (iface.methods) {\n for (const method of iface.methods) {\n lines.push(` ${method.signature};`);\n }\n }\n lines.push('}');\n lines.push('```');\n lines.push('</details>');\n\n return lines.join('\\n');\n}\n\n/**\n * Format type for markdown\n */\nfunction formatTypeMd(type: APIEntry): string {\n const lines: string[] = [];\n\n lines.push(`#### \\`${type.name}\\``);\n\n if (type.description) {\n lines.push(`\\n${type.description}\\n`);\n }\n\n lines.push('```typescript');\n lines.push(type.signature);\n lines.push('```');\n\n return lines.join('\\n');\n}\n\n/**\n * Format enum for markdown\n */\nfunction formatEnumMd(enumEntry: APIEntry): string {\n const lines: string[] = [];\n\n lines.push(`#### \\`${enumEntry.name}\\``);\n\n if (enumEntry.description) {\n lines.push(`\\n${enumEntry.description}\\n`);\n }\n\n if (enumEntry.members && enumEntry.members.length > 0) {\n lines.push('| Member | Value |');\n lines.push('|--------|-------|');\n for (const member of enumEntry.members) {\n const value = member.value !== undefined ? `\\`${JSON.stringify(member.value)}\\`` : '-';\n lines.push(`| \\`${member.name}\\` | ${value} |`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Format constant for markdown\n */\nfunction formatConstantMd(constant: APIEntry): string {\n const lines: string[] = [];\n\n lines.push(`- **\\`${constant.name}\\`**: \\`${constant.signature.split(':').slice(1).join(':').trim() || 'unknown'}\\``);\n if (constant.description) {\n lines.push(` - ${constant.description}`);\n }\n\n return lines.join('\\n');\n}\n","/**\n * Markdown Output Plugin\n * Generates API documentation in Markdown format\n * @module plugins/core/markdown-output\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { generateMarkdown } from '../../outputs/markdown.js';\n\n/**\n * Markdown Output Plugin\n * Generates formatted API documentation\n */\nexport const markdownOutputPlugin: Plugin<ExtractorContext> = {\n name: 'markdown-output',\n version: '1.0.0',\n category: 'output',\n\n install(kernel) {\n kernel.on('output:start', async (context) => {\n // Check if markdown format is requested\n if (!context.options.formats?.includes('markdown')) {\n return;\n }\n\n try {\n // Get repository URL if available\n const repositoryUrl = context.package.repository?.url\n ?.replace(/^git\\+/, '')\n .replace(/\\.git$/, '');\n\n const output = generateMarkdown(context, {\n includeToc: true,\n includeParamTables: true,\n includeBadges: true,\n repositoryUrl,\n });\n\n context.outputs.set('markdown', output);\n } catch (error) {\n context.errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n });\n },\n};\n\nexport default markdownOutputPlugin;\n","/**\n * JSON output generator\n * Generates structured JSON documentation for programmatic use\n * @module outputs/json\n */\n\nimport type { ExtractorContext, APIEntry, PackageMetadata } from '../types.js';\n\n/**\n * JSON output structure\n */\nexport interface JsonOutput {\n /** Schema version */\n $schema: string;\n /** Generation timestamp */\n generatedAt: string;\n /** Package metadata */\n package: {\n name: string;\n version: string;\n description?: string;\n license?: string;\n homepage?: string;\n repository?: string;\n keywords?: string[];\n };\n /** API entries */\n api: {\n functions: ApiFunction[];\n classes: ApiClass[];\n interfaces: ApiInterface[];\n types: ApiType[];\n enums: ApiEnum[];\n constants: ApiConstant[];\n };\n /** Statistics */\n stats: {\n totalExports: number;\n functions: number;\n classes: number;\n interfaces: number;\n types: number;\n enums: number;\n constants: number;\n documented: number;\n withExamples: number;\n };\n}\n\n/**\n * Function entry in JSON output\n */\nexport interface ApiFunction {\n name: string;\n signature: string;\n description?: string;\n params: Array<{\n name: string;\n type: string;\n optional: boolean;\n defaultValue?: string;\n description?: string;\n }>;\n returns?: {\n type: string;\n description?: string;\n };\n examples: string[];\n deprecated?: string | boolean;\n since?: string;\n see?: string[];\n sourceFile?: string;\n line?: number;\n}\n\n/**\n * Class entry in JSON output\n */\nexport interface ApiClass {\n name: string;\n signature: string;\n description?: string;\n extends?: string[];\n implements?: string[];\n typeParams?: string[];\n properties: Array<{\n name: string;\n type: string;\n description?: string;\n }>;\n methods: ApiFunction[];\n deprecated?: string | boolean;\n sourceFile?: string;\n}\n\n/**\n * Interface entry in JSON output\n */\nexport interface ApiInterface {\n name: string;\n signature: string;\n description?: string;\n extends?: string[];\n typeParams?: string[];\n properties: Array<{\n name: string;\n type: string;\n optional: boolean;\n description?: string;\n }>;\n methods: Array<{\n name: string;\n signature: string;\n description?: string;\n }>;\n deprecated?: string | boolean;\n}\n\n/**\n * Type entry in JSON output\n */\nexport interface ApiType {\n name: string;\n signature: string;\n description?: string;\n typeParams?: string[];\n deprecated?: string | boolean;\n}\n\n/**\n * Enum entry in JSON output\n */\nexport interface ApiEnum {\n name: string;\n description?: string;\n members: Array<{\n name: string;\n value?: string | number;\n }>;\n}\n\n/**\n * Constant entry in JSON output\n */\nexport interface ApiConstant {\n name: string;\n type: string;\n description?: string;\n}\n\n/**\n * Generate options for JSON output\n */\nexport interface JsonGenerateOptions {\n /** Pretty print with indentation */\n pretty?: boolean;\n /** Include empty arrays */\n includeEmpty?: boolean;\n /** Include source locations */\n includeSourceLocations?: boolean;\n}\n\n/**\n * Generate JSON documentation from context\n * @param context - Extractor context\n * @param options - Generation options\n * @returns Generated JSON string\n */\nexport function generateJson(\n context: ExtractorContext,\n options: JsonGenerateOptions = {}\n): string {\n const { pretty = true, includeEmpty = false, includeSourceLocations = true } = options;\n\n const output = generateJsonObject(context, { includeEmpty, includeSourceLocations });\n return pretty ? JSON.stringify(output, null, 2) : JSON.stringify(output);\n}\n\n/**\n * Generate JSON object from context\n * @param context - Extractor context\n * @param options - Generation options\n * @returns JSON output object\n */\nexport function generateJsonObject(\n context: ExtractorContext,\n options: { includeEmpty?: boolean; includeSourceLocations?: boolean } = {}\n): JsonOutput {\n const { includeEmpty = false, includeSourceLocations = true } = options;\n const { package: pkg, api } = context;\n\n // Group by kind\n const functions = api.filter((e) => e.kind === 'function');\n const classes = api.filter((e) => e.kind === 'class');\n const interfaces = api.filter((e) => e.kind === 'interface');\n const types = api.filter((e) => e.kind === 'type');\n const enums = api.filter((e) => e.kind === 'enum');\n const constants = api.filter((e) => e.kind === 'constant');\n\n // Calculate stats\n const documented = api.filter((e) => e.description).length;\n const withExamples = api.filter((e) => e.examples && e.examples.length > 0).length;\n\n const output: JsonOutput = {\n $schema: 'https://npm-llms.oxog.dev/schema/v1.json',\n generatedAt: new Date().toISOString(),\n package: {\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n license: pkg.license,\n homepage: pkg.homepage,\n repository: pkg.repository?.url,\n keywords: pkg.keywords,\n },\n api: {\n functions: functions.map((fn) => transformFunction(fn, includeSourceLocations)),\n classes: classes.map((cls) => transformClass(cls, includeSourceLocations)),\n interfaces: interfaces.map(transformInterface),\n types: types.map(transformType),\n enums: enums.map(transformEnum),\n constants: constants.map(transformConstant),\n },\n stats: {\n totalExports: api.length,\n functions: functions.length,\n classes: classes.length,\n interfaces: interfaces.length,\n types: types.length,\n enums: enums.length,\n constants: constants.length,\n documented,\n withExamples,\n },\n };\n\n // Remove empty arrays if not wanted\n if (!includeEmpty) {\n const apiObj = output.api as Record<string, unknown[]>;\n for (const [key, value] of Object.entries(apiObj)) {\n if (Array.isArray(value) && value.length === 0) {\n delete apiObj[key];\n }\n }\n }\n\n return output;\n}\n\n/**\n * Transform function entry\n */\nfunction transformFunction(entry: APIEntry, includeSource: boolean): ApiFunction {\n const result: ApiFunction = {\n name: entry.name,\n signature: entry.signature,\n description: entry.description,\n params: (entry.params || []).map((p) => ({\n name: p.name,\n type: p.type || 'unknown',\n optional: p.optional ?? false,\n defaultValue: p.defaultValue,\n description: p.description,\n })),\n returns: entry.returns\n ? {\n type: entry.returns.type,\n description: entry.returns.description,\n }\n : undefined,\n examples: entry.examples || [],\n deprecated: entry.deprecated,\n since: entry.since,\n see: entry.see,\n };\n\n if (includeSource) {\n result.sourceFile = entry.sourceFile;\n result.line = entry.line;\n }\n\n return result;\n}\n\n/**\n * Transform class entry\n */\nfunction transformClass(entry: APIEntry, includeSource: boolean): ApiClass {\n const result: ApiClass = {\n name: entry.name,\n signature: entry.signature,\n description: entry.description,\n extends: entry.extends,\n implements: entry.implements,\n typeParams: entry.typeParams,\n properties: (entry.properties || []).map((p) => ({\n name: p.name,\n type: p.signature.split(':').slice(1).join(':').trim() || 'unknown',\n description: p.description,\n })),\n methods: (entry.methods || []).map((m) => transformFunction(m, includeSource)),\n deprecated: entry.deprecated,\n };\n\n if (includeSource) {\n result.sourceFile = entry.sourceFile;\n }\n\n return result;\n}\n\n/**\n * Transform interface entry\n */\nfunction transformInterface(entry: APIEntry): ApiInterface {\n return {\n name: entry.name,\n signature: entry.signature,\n description: entry.description,\n extends: entry.extends,\n typeParams: entry.typeParams,\n properties: (entry.properties || []).map((p) => ({\n name: p.name,\n type: p.signature.split(':').slice(1).join(':').trim() || 'unknown',\n optional: p.signature.includes('?:'),\n description: p.description,\n })),\n methods: (entry.methods || []).map((m) => ({\n name: m.name,\n signature: m.signature,\n description: m.description,\n })),\n deprecated: entry.deprecated,\n };\n}\n\n/**\n * Transform type entry\n */\nfunction transformType(entry: APIEntry): ApiType {\n return {\n name: entry.name,\n signature: entry.signature,\n description: entry.description,\n typeParams: entry.typeParams,\n deprecated: entry.deprecated,\n };\n}\n\n/**\n * Transform enum entry\n */\nfunction transformEnum(entry: APIEntry): ApiEnum {\n return {\n name: entry.name,\n description: entry.description,\n members: entry.members || [],\n };\n}\n\n/**\n * Transform constant entry\n */\nfunction transformConstant(entry: APIEntry): ApiConstant {\n return {\n name: entry.name,\n type: entry.signature.split(':').slice(1).join(':').trim() || 'unknown',\n description: entry.description,\n };\n}\n\n/**\n * Validate JSON output against schema\n * @param json - JSON output object\n * @returns Validation result\n */\nexport function validateJsonOutput(json: unknown): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!json || typeof json !== 'object') {\n errors.push('Output must be an object');\n return { valid: false, errors };\n }\n\n const obj = json as Record<string, unknown>;\n\n // Required fields\n if (!obj.$schema) errors.push('Missing $schema field');\n if (!obj.generatedAt) errors.push('Missing generatedAt field');\n if (!obj.package) errors.push('Missing package field');\n if (!obj.api) errors.push('Missing api field');\n if (!obj.stats) errors.push('Missing stats field');\n\n // Package validation\n if (obj.package && typeof obj.package === 'object') {\n const pkg = obj.package as Record<string, unknown>;\n if (!pkg.name) errors.push('Missing package.name');\n if (!pkg.version) errors.push('Missing package.version');\n }\n\n return { valid: errors.length === 0, errors };\n}\n","/**\n * JSON Output Plugin\n * Generates structured JSON documentation\n * @module plugins/core/json-output\n */\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { generateJson } from '../../outputs/json.js';\n\n/**\n * JSON Output Plugin\n * Generates structured JSON for programmatic use\n */\nexport const jsonOutputPlugin: Plugin<ExtractorContext> = {\n name: 'json-output',\n version: '1.0.0',\n category: 'output',\n\n install(kernel) {\n kernel.on('output:start', async (context) => {\n // Check if json format is requested\n if (!context.options.formats?.includes('json')) {\n return;\n }\n\n try {\n const output = generateJson(context, {\n pretty: true,\n includeEmpty: false,\n includeSourceLocations: true,\n });\n\n context.outputs.set('json', output);\n } catch (error) {\n context.errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n });\n },\n};\n\nexport default jsonOutputPlugin;\n","/**\n * Core plugins for @oxog/npm-llms\n * @module plugins/core\n */\n\n// Pre-parser plugins (run before parsing)\nexport { typesResolverPlugin } from './types-resolver.js';\n\n// Parser plugins\nexport { dtsParserPlugin } from './dts-parser.js';\nexport { tsSourceParserPlugin } from './ts-source-parser.js';\nexport { readmeParserPlugin } from './readme-parser.js';\n\n// Output plugins\nexport { llmsOutputPlugin } from './llms-output.js';\nexport { llmsFullOutputPlugin } from './llms-full-output.js';\nexport { markdownOutputPlugin } from './markdown-output.js';\nexport { jsonOutputPlugin } from './json-output.js';\n\nimport type { Plugin, ExtractorContext } from '../../types.js';\nimport { typesResolverPlugin } from './types-resolver.js';\nimport { dtsParserPlugin } from './dts-parser.js';\nimport { tsSourceParserPlugin } from './ts-source-parser.js';\nimport { readmeParserPlugin } from './readme-parser.js';\nimport { llmsOutputPlugin } from './llms-output.js';\nimport { llmsFullOutputPlugin } from './llms-full-output.js';\nimport { markdownOutputPlugin } from './markdown-output.js';\nimport { jsonOutputPlugin } from './json-output.js';\n\n/**\n * All core parser plugins\n * Note: typesResolverPlugin must come first to fetch @types/* before parsing\n */\nexport const coreParserPlugins: Plugin<ExtractorContext>[] = [\n typesResolverPlugin,\n dtsParserPlugin,\n tsSourceParserPlugin,\n readmeParserPlugin,\n];\n\n/**\n * All core output plugins\n */\nexport const coreOutputPlugins: Plugin<ExtractorContext>[] = [\n llmsOutputPlugin,\n llmsFullOutputPlugin,\n markdownOutputPlugin,\n jsonOutputPlugin,\n];\n\n/**\n * All core plugins\n */\nexport const corePlugins: Plugin<ExtractorContext>[] = [\n ...coreParserPlugins,\n ...coreOutputPlugins,\n];\n","/**\n * AI Base Plugin\n * Provides common infrastructure for AI-powered documentation enrichment\n * @module plugins/optional/ai-base\n */\n\nimport type { Plugin, ExtractorContext, AIProvider, CompletionOptions, APIEntry } from '../../types.js';\nimport { AIError } from '../../errors.js';\n\n/**\n * AI enrichment task types\n */\nexport type AIEnrichmentTask = 'descriptions' | 'examples' | 'summary' | 'params' | 'returns';\n\n/**\n * AI enrichment options\n */\nexport interface AIEnrichmentOptions {\n /** Tasks to perform */\n tasks: AIEnrichmentTask[];\n /** Maximum tokens per request */\n maxTokensPerRequest?: number;\n /** Temperature for generation */\n temperature?: number;\n /** Batch size for processing entries */\n batchSize?: number;\n /** Whether to skip entries that already have content */\n skipExisting?: boolean;\n}\n\n/**\n * Default enrichment options\n */\nconst DEFAULT_OPTIONS: AIEnrichmentOptions = {\n tasks: ['descriptions', 'examples'],\n maxTokensPerRequest: 1000,\n temperature: 0.3,\n batchSize: 5,\n skipExisting: true,\n};\n\n/**\n * System prompts for different tasks\n */\nconst SYSTEM_PROMPTS: Record<AIEnrichmentTask, string> = {\n descriptions: `You are a technical documentation expert. Generate concise, clear descriptions for API entries.\nRules:\n- Be specific about what the function/class does\n- Mention important parameters and return values\n- Keep descriptions under 100 words\n- Use present tense (\"Returns...\" not \"Will return...\")\n- Don't include example code in descriptions`,\n\n examples: `You are a technical documentation expert. Generate practical usage examples for API entries.\nRules:\n- Create 1-2 realistic examples\n- Show common use cases\n- Include proper TypeScript/JavaScript syntax\n- Keep examples concise but complete\n- Use meaningful variable names`,\n\n summary: `You are a technical documentation expert. Generate a summary of an npm package.\nRules:\n- Describe the main purpose and use cases\n- Mention key features\n- Keep it under 150 words\n- Be objective and informative`,\n\n params: `You are a technical documentation expert. Generate parameter descriptions.\nRules:\n- Be specific about expected values\n- Mention valid ranges or formats\n- Note if parameter is optional\n- Keep each description under 20 words`,\n\n returns: `You are a technical documentation expert. Generate return value descriptions.\nRules:\n- Describe what is returned\n- Mention possible values or states\n- Keep descriptions under 30 words`,\n};\n\n/**\n * Generate prompt for enriching an API entry\n */\nfunction generateEntryPrompt(entry: APIEntry, task: AIEnrichmentTask): string {\n const parts = [`${entry.kind}: ${entry.name}`, `Signature: ${entry.signature}`];\n\n if (entry.description) {\n parts.push(`Current description: ${entry.description}`);\n }\n\n if (entry.params && entry.params.length > 0) {\n const paramList = entry.params.map((p) => `- ${p.name}: ${p.type || 'unknown'}`).join('\\n');\n parts.push(`Parameters:\\n${paramList}`);\n }\n\n if (entry.returns) {\n parts.push(`Returns: ${entry.returns.type}`);\n }\n\n switch (task) {\n case 'descriptions':\n parts.push('\\nGenerate a clear description for this API entry:');\n break;\n case 'examples':\n parts.push('\\nGenerate a practical usage example:');\n break;\n }\n\n return parts.join('\\n');\n}\n\n/**\n * Generate prompt for package summary\n */\nfunction generateSummaryPrompt(context: ExtractorContext): string {\n const { package: pkg, api } = context;\n\n const functionCount = api.filter((e) => e.kind === 'function').length;\n const classCount = api.filter((e) => e.kind === 'class').length;\n const typeCount = api.filter((e) => e.kind === 'type' || e.kind === 'interface').length;\n\n return `\nPackage: ${pkg.name}@${pkg.version}\nDescription: ${pkg.description || 'No description available'}\nFunctions: ${functionCount}\nClasses: ${classCount}\nTypes: ${typeCount}\n\nTop exports:\n${api\n .slice(0, 10)\n .map((e) => `- ${e.kind} ${e.name}`)\n .join('\\n')}\n\nGenerate a summary of this package that explains its purpose and main features:\n`.trim();\n}\n\n/**\n * Parse AI response for descriptions\n */\nfunction parseDescriptionResponse(response: string): string {\n // Clean up the response - first remove prefix, then quotes\n return response.trim().replace(/^Description:\\s*/i, '').replace(/^[\"']|[\"']$/g, '');\n}\n\n/**\n * Parse AI response for examples\n */\nfunction parseExampleResponse(response: string): string[] {\n const examples: string[] = [];\n\n // Try to extract code blocks\n const codeBlockRegex = /```(?:\\w+)?\\n?([\\s\\S]*?)```/g;\n let match;\n\n while ((match = codeBlockRegex.exec(response)) !== null) {\n if (match[1]?.trim()) {\n examples.push(match[1].trim());\n }\n }\n\n // If no code blocks found, use the whole response\n if (examples.length === 0 && response.trim()) {\n examples.push(response.trim());\n }\n\n return examples;\n}\n\n/**\n * Create AI enrichment plugin\n * @param provider - AI provider implementation\n * @param options - Enrichment options\n * @returns Plugin instance\n */\nexport function createAIEnrichmentPlugin(\n provider: AIProvider,\n options: Partial<AIEnrichmentOptions> = {}\n): Plugin {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n\n return {\n name: `ai-enrichment-${provider.name}`,\n version: '1.0.0',\n category: 'ai',\n\n install(kernel) {\n // Register AI enrichment event handler\n kernel.on('ai:enrich', async (context: ExtractorContext) => {\n if (!provider.isAvailable()) {\n throw new AIError(`AI provider ${provider.name} is not available`, provider.name);\n }\n\n // Enrich API entries\n if (opts.tasks.includes('descriptions') || opts.tasks.includes('examples')) {\n await enrichEntries(context, provider, opts);\n }\n\n // Generate summary\n if (opts.tasks.includes('summary')) {\n await enrichSummary(context, provider, opts);\n }\n });\n },\n };\n}\n\n/**\n * Enrich API entries with AI-generated content\n */\nasync function enrichEntries(\n context: ExtractorContext,\n provider: AIProvider,\n options: AIEnrichmentOptions\n): Promise<void> {\n const { api } = context;\n const { tasks, batchSize, skipExisting, maxTokensPerRequest, temperature } = options;\n\n // Filter entries that need enrichment\n const entriesToEnrich = api.filter((entry) => {\n if (skipExisting) {\n if (tasks.includes('descriptions') && entry.description) return false;\n if (tasks.includes('examples') && entry.examples && entry.examples.length > 0) return false;\n }\n // Only enrich functions and classes\n return entry.kind === 'function' || entry.kind === 'class';\n });\n\n // Process in batches\n for (let i = 0; i < entriesToEnrich.length; i += batchSize!) {\n const batch = entriesToEnrich.slice(i, i + batchSize!);\n\n await Promise.all(\n batch.map(async (entry) => {\n try {\n // Generate descriptions\n if (tasks.includes('descriptions') && (!skipExisting || !entry.description)) {\n const prompt = generateEntryPrompt(entry, 'descriptions');\n const response = await provider.complete(prompt, {\n maxTokens: maxTokensPerRequest,\n temperature,\n systemPrompt: SYSTEM_PROMPTS.descriptions,\n });\n entry.description = parseDescriptionResponse(response);\n }\n\n // Generate examples\n if (tasks.includes('examples') && (!skipExisting || !entry.examples?.length)) {\n const prompt = generateEntryPrompt(entry, 'examples');\n const response = await provider.complete(prompt, {\n maxTokens: maxTokensPerRequest,\n temperature,\n systemPrompt: SYSTEM_PROMPTS.examples,\n });\n entry.examples = parseExampleResponse(response);\n }\n } catch (error) {\n // Log but don't fail on individual entry errors\n context.errors.push(\n error instanceof Error ? error : new Error(`AI enrichment failed for ${entry.name}`)\n );\n }\n })\n );\n }\n}\n\n/**\n * Enrich package with AI-generated summary\n */\nasync function enrichSummary(\n context: ExtractorContext,\n provider: AIProvider,\n options: AIEnrichmentOptions\n): Promise<void> {\n try {\n const prompt = generateSummaryPrompt(context);\n const response = await provider.complete(prompt, {\n maxTokens: options.maxTokensPerRequest,\n temperature: options.temperature,\n systemPrompt: SYSTEM_PROMPTS.summary,\n });\n\n // Store summary in readme if available\n if (context.readme) {\n if (!context.readme.description) {\n context.readme.description = response.trim();\n }\n }\n } catch (error) {\n context.errors.push(\n error instanceof Error ? error : new Error('AI summary generation failed')\n );\n }\n}\n\n/**\n * Create a simple AI provider from a completion function\n */\nexport function createSimpleProvider(\n name: string,\n completeFn: (prompt: string, options?: CompletionOptions) => Promise<string>,\n isAvailableFn: () => boolean = () => true\n): AIProvider {\n return {\n name,\n isAvailable: isAvailableFn,\n complete: completeFn,\n };\n}\n","/**\n * Claude AI Plugin\n * Integrates Anthropic's Claude for documentation enrichment\n * @module plugins/optional/claude-ai\n */\n\nimport type { AIProvider, CompletionOptions } from '../../types.js';\nimport { AIError } from '../../errors.js';\nimport { createAIEnrichmentPlugin, type AIEnrichmentOptions } from './ai-base.js';\n\n/**\n * Claude API configuration\n */\nexport interface ClaudeConfig {\n /** API key (or set ANTHROPIC_API_KEY env var) */\n apiKey?: string;\n /** Model to use */\n model?:\n | 'claude-opus-4-5-20251101'\n | 'claude-sonnet-4-5-20250929'\n | 'claude-haiku-4-5-20251001'\n | 'claude-opus-4-5'\n | 'claude-sonnet-4-5'\n | 'claude-haiku-4-5'\n | string;\n /** API base URL */\n baseUrl?: string;\n /** Request timeout in ms */\n timeout?: number;\n}\n\n/**\n * Default Claude configuration\n */\nconst DEFAULT_CONFIG: Required<ClaudeConfig> = {\n apiKey: '',\n model: 'claude-haiku-4-5-20251001',\n baseUrl: 'https://api.anthropic.com',\n timeout: 30000,\n};\n\n/**\n * Claude API message format\n */\ninterface ClaudeMessage {\n role: 'user' | 'assistant';\n content: string;\n}\n\n/**\n * Claude API request body\n */\ninterface ClaudeRequest {\n model: string;\n max_tokens: number;\n messages: ClaudeMessage[];\n system?: string;\n temperature?: number;\n}\n\n/**\n * Claude API response\n */\ninterface ClaudeResponse {\n id: string;\n type: string;\n role: string;\n content: Array<{\n type: string;\n text: string;\n }>;\n model: string;\n stop_reason: string;\n usage: {\n input_tokens: number;\n output_tokens: number;\n };\n}\n\n/**\n * Create Claude AI provider\n * @param config - Claude configuration\n * @returns AI provider instance\n */\nexport function createClaudeProvider(config: ClaudeConfig = {}): AIProvider {\n const cfg = {\n ...DEFAULT_CONFIG,\n ...config,\n apiKey: config.apiKey || process.env['ANTHROPIC_API_KEY'] || '',\n };\n\n return {\n name: 'claude',\n\n isAvailable(): boolean {\n return !!cfg.apiKey;\n },\n\n async complete(prompt: string, options?: CompletionOptions): Promise<string> {\n if (!cfg.apiKey) {\n throw new AIError('ANTHROPIC_API_KEY not set', 'claude');\n }\n\n const requestBody: ClaudeRequest = {\n model: cfg.model,\n max_tokens: options?.maxTokens ?? 1000,\n messages: [{ role: 'user', content: prompt }],\n temperature: options?.temperature ?? 0.3,\n };\n\n if (options?.systemPrompt) {\n requestBody.system = options.systemPrompt;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), cfg.timeout);\n\n try {\n const response = await fetch(`${cfg.baseUrl}/v1/messages`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': cfg.apiKey,\n 'anthropic-version': '2023-06-01',\n },\n body: JSON.stringify(requestBody),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new AIError(\n `Claude API error: ${response.status} ${response.statusText} - ${errorText}`,\n 'claude'\n );\n }\n\n const data = (await response.json()) as ClaudeResponse;\n\n // Extract text from content blocks\n const textContent = data.content.find((c) => c.type === 'text');\n if (!textContent) {\n throw new AIError('No text content in Claude response', 'claude');\n }\n\n return textContent.text;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof AIError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new AIError('Claude API request timed out', 'claude');\n }\n\n throw new AIError(\n `Claude API request failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'claude'\n );\n }\n },\n };\n}\n\n/**\n * Create Claude AI enrichment plugin\n * @param config - Claude configuration\n * @param enrichmentOptions - Enrichment options\n * @returns Plugin instance\n */\nexport function createClaudePlugin(\n config: ClaudeConfig = {},\n enrichmentOptions?: Partial<AIEnrichmentOptions>\n) {\n const provider = createClaudeProvider(config);\n return createAIEnrichmentPlugin(provider, enrichmentOptions);\n}\n\nexport { createAIEnrichmentPlugin, type AIEnrichmentOptions };\n","/**\n * OpenAI Plugin\n * Integrates OpenAI and OpenAI-compatible APIs for documentation enrichment\n * @module plugins/optional/openai-ai\n */\n\nimport type { AIProvider, CompletionOptions } from '../../types.js';\nimport { AIError } from '../../errors.js';\nimport { createAIEnrichmentPlugin, type AIEnrichmentOptions } from './ai-base.js';\n\n/**\n * OpenAI-compatible provider presets\n */\nexport const OPENAI_COMPATIBLE_PRESETS = {\n openai: {\n name: 'openai',\n baseUrl: 'https://api.openai.com/v1',\n envKey: 'OPENAI_API_KEY',\n defaultModel: 'gpt-4.1-nano',\n },\n xai: {\n name: 'xai',\n baseUrl: 'https://api.x.ai/v1',\n envKey: 'XAI_API_KEY',\n defaultModel: 'grok-3-mini-fast',\n },\n zai: {\n name: 'zai',\n baseUrl: 'https://api.z.ai/api/paas/v4',\n envKey: 'ZAI_API_KEY',\n defaultModel: 'glm-4.7',\n },\n together: {\n name: 'together',\n baseUrl: 'https://api.together.xyz/v1',\n envKey: 'TOGETHER_API_KEY',\n defaultModel: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',\n },\n perplexity: {\n name: 'perplexity',\n baseUrl: 'https://api.perplexity.ai',\n envKey: 'PERPLEXITY_API_KEY',\n defaultModel: 'sonar-pro',\n },\n openrouter: {\n name: 'openrouter',\n baseUrl: 'https://openrouter.ai/api/v1',\n envKey: 'OPENROUTER_API_KEY',\n defaultModel: 'anthropic/claude-3.5-sonnet',\n },\n deepseek: {\n name: 'deepseek',\n baseUrl: 'https://api.deepseek.com/v1',\n envKey: 'DEEPSEEK_API_KEY',\n defaultModel: 'deepseek-chat',\n },\n mistral: {\n name: 'mistral',\n baseUrl: 'https://api.mistral.ai/v1',\n envKey: 'MISTRAL_API_KEY',\n defaultModel: 'mistral-small-latest',\n },\n} as const;\n\nexport type OpenAICompatiblePreset = keyof typeof OPENAI_COMPATIBLE_PRESETS;\n\n/**\n * OpenAI API configuration\n */\nexport interface OpenAIConfig {\n /** API key (or set OPENAI_API_KEY env var) */\n apiKey?: string;\n /** Model to use */\n model?:\n | 'gpt-4.1'\n | 'gpt-4.1-mini'\n | 'gpt-4.1-nano'\n | 'gpt-4o'\n | 'gpt-4o-mini'\n | 'o4-mini'\n | 'o3'\n | 'o3-mini'\n | 'o3-pro'\n | 'o1'\n | 'o1-pro'\n | string;\n /** API base URL (with /v1 suffix for chat/completions endpoint) */\n baseUrl?: string;\n /** Request timeout in ms */\n timeout?: number;\n /** Organization ID (OpenAI only) */\n organization?: string;\n /** Provider preset for OpenAI-compatible APIs */\n preset?: OpenAICompatiblePreset;\n}\n\n/**\n * Default OpenAI configuration\n */\nconst DEFAULT_CONFIG: Required<Omit<OpenAIConfig, 'organization' | 'preset'>> & {\n organization?: string;\n preset?: OpenAICompatiblePreset;\n} = {\n apiKey: '',\n model: 'gpt-4.1-nano',\n baseUrl: 'https://api.openai.com/v1',\n timeout: 30000,\n organization: undefined,\n preset: undefined,\n};\n\n/**\n * OpenAI chat message format\n */\ninterface OpenAIMessage {\n role: 'system' | 'user' | 'assistant';\n content: string;\n}\n\n/**\n * OpenAI API request body\n */\ninterface OpenAIRequest {\n model: string;\n messages: OpenAIMessage[];\n max_tokens?: number;\n temperature?: number;\n}\n\n/**\n * OpenAI API response\n */\ninterface OpenAIResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: string;\n content: string;\n };\n finish_reason: string;\n }>;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * Create OpenAI provider\n * @param config - OpenAI configuration\n * @returns AI provider instance\n */\nexport function createOpenAIProvider(config: OpenAIConfig = {}): AIProvider {\n // Apply preset if specified\n const preset = config.preset ? OPENAI_COMPATIBLE_PRESETS[config.preset] : null;\n\n const cfg = {\n ...DEFAULT_CONFIG,\n ...(preset && {\n baseUrl: preset.baseUrl,\n model: preset.defaultModel,\n }),\n ...config,\n apiKey: config.apiKey || process.env[preset?.envKey ?? 'OPENAI_API_KEY'] || '',\n };\n\n const providerName = preset?.name ?? 'openai';\n\n return {\n name: providerName,\n\n isAvailable(): boolean {\n return !!cfg.apiKey;\n },\n\n async complete(prompt: string, options?: CompletionOptions): Promise<string> {\n if (!cfg.apiKey) {\n throw new AIError(`${preset?.envKey ?? 'OPENAI_API_KEY'} not set`, providerName);\n }\n\n const messages: OpenAIMessage[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n\n messages.push({ role: 'user', content: prompt });\n\n const requestBody: OpenAIRequest = {\n model: cfg.model,\n messages,\n max_tokens: options?.maxTokens ?? 1000,\n temperature: options?.temperature ?? 0.3,\n };\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${cfg.apiKey}`,\n };\n\n if (cfg.organization) {\n headers['OpenAI-Organization'] = cfg.organization;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), cfg.timeout);\n\n try {\n const response = await fetch(`${cfg.baseUrl}/chat/completions`, {\n method: 'POST',\n headers,\n body: JSON.stringify(requestBody),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new AIError(\n `${providerName} API error: ${response.status} ${response.statusText} - ${errorText}`,\n providerName\n );\n }\n\n const data = (await response.json()) as OpenAIResponse;\n\n const choice = data.choices[0];\n if (!choice || !choice.message.content) {\n throw new AIError(`No content in ${providerName} response`, providerName);\n }\n\n return choice.message.content;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof AIError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new AIError(`${providerName} API request timed out`, providerName);\n }\n\n throw new AIError(\n `${providerName} API request failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n providerName\n );\n }\n },\n };\n}\n\n/**\n * Create OpenAI enrichment plugin\n * @param config - OpenAI configuration\n * @param enrichmentOptions - Enrichment options\n * @returns Plugin instance\n */\nexport function createOpenAIPlugin(\n config: OpenAIConfig = {},\n enrichmentOptions?: Partial<AIEnrichmentOptions>\n) {\n const provider = createOpenAIProvider(config);\n return createAIEnrichmentPlugin(provider, enrichmentOptions);\n}\n\n/**\n * Create x.ai (Grok) provider\n * @param config - Configuration (apiKey, model, etc.)\n */\nexport function createXAIProvider(config: Omit<OpenAIConfig, 'preset'> = {}): AIProvider {\n return createOpenAIProvider({ ...config, preset: 'xai' });\n}\n\n/**\n * Create z.ai (GLM) provider\n * @param config - Configuration (apiKey, model, etc.)\n */\nexport function createZAIProvider(config: Omit<OpenAIConfig, 'preset'> = {}): AIProvider {\n return createOpenAIProvider({ ...config, preset: 'zai' });\n}\n\n/**\n * Create Together AI provider\n * @param config - Configuration (apiKey, model, etc.)\n */\nexport function createTogetherProvider(config: Omit<OpenAIConfig, 'preset'> = {}): AIProvider {\n return createOpenAIProvider({ ...config, preset: 'together' });\n}\n\n/**\n * Create Perplexity provider\n * @param config - Configuration (apiKey, model, etc.)\n */\nexport function createPerplexityProvider(config: Omit<OpenAIConfig, 'preset'> = {}): AIProvider {\n return createOpenAIProvider({ ...config, preset: 'perplexity' });\n}\n\n/**\n * Create OpenRouter provider\n * @param config - Configuration (apiKey, model, etc.)\n */\nexport function createOpenRouterProvider(config: Omit<OpenAIConfig, 'preset'> = {}): AIProvider {\n return createOpenAIProvider({ ...config, preset: 'openrouter' });\n}\n\n/**\n * Create DeepSeek provider\n * @param config - Configuration (apiKey, model, etc.)\n */\nexport function createDeepSeekProvider(config: Omit<OpenAIConfig, 'preset'> = {}): AIProvider {\n return createOpenAIProvider({ ...config, preset: 'deepseek' });\n}\n\n/**\n * Create Mistral provider\n * @param config - Configuration (apiKey, model, etc.)\n */\nexport function createMistralProvider(config: Omit<OpenAIConfig, 'preset'> = {}): AIProvider {\n return createOpenAIProvider({ ...config, preset: 'mistral' });\n}\n\nexport { createAIEnrichmentPlugin, type AIEnrichmentOptions };\n","/**\n * Gemini AI plugin for @oxog/npm-llms\n * Uses Google's Gemini API for documentation enrichment\n * @module plugins/optional/gemini-ai\n */\n\nimport type { Plugin, AIProvider, CompletionOptions } from '../../types.js';\nimport { createAIEnrichmentPlugin, type AIEnrichmentOptions } from './ai-base.js';\n\n/**\n * Gemini configuration options\n */\nexport interface GeminiConfig {\n /** Gemini API key (defaults to GOOGLE_API_KEY or GEMINI_API_KEY env var) */\n apiKey?: string;\n /** Model to use */\n model?:\n | 'gemini-3-pro-preview'\n | 'gemini-3-pro-image-preview'\n | 'gemini-3-flash-preview'\n | 'gemini-2.5-flash-image'\n | 'gemini-2.5-pro'\n | 'gemini-2.5-flash'\n | 'gemini-2.5-flash-lite'\n | 'gemini-2.0-flash'\n | 'gemini-2.0-flash-lite'\n | 'gemini-flash-latest'\n | 'gemini-flash-lite-latest'\n | string;\n /** API base URL */\n baseUrl?: string;\n /** Request timeout in ms */\n timeout?: number;\n /** Maximum tokens to generate */\n maxTokens?: number;\n /** Temperature for generation */\n temperature?: number;\n}\n\nconst DEFAULT_CONFIG: Required<Omit<GeminiConfig, 'apiKey'>> = {\n model: 'gemini-3-flash-preview',\n baseUrl: 'https://generativelanguage.googleapis.com/v1beta',\n timeout: 60000,\n maxTokens: 1024,\n temperature: 0.3,\n};\n\n/**\n * Gemini API response types\n */\ninterface GeminiResponse {\n candidates?: Array<{\n content?: {\n parts?: Array<{\n text?: string;\n }>;\n };\n finishReason?: string;\n }>;\n error?: {\n code: number;\n message: string;\n status: string;\n };\n}\n\n/**\n * Create a Gemini AI provider\n * @param config - Gemini configuration\n * @returns AI provider instance\n */\nexport function createGeminiProvider(config: GeminiConfig = {}): AIProvider {\n const cfg = {\n ...DEFAULT_CONFIG,\n ...config,\n apiKey: config.apiKey || process.env['GOOGLE_API_KEY'] || process.env['GEMINI_API_KEY'] || '',\n };\n\n return {\n name: 'gemini',\n\n isAvailable(): boolean {\n return !!cfg.apiKey;\n },\n\n async complete(prompt: string, options?: CompletionOptions): Promise<string> {\n if (!cfg.apiKey) {\n throw new Error('Gemini API key not configured. Set GOOGLE_API_KEY or GEMINI_API_KEY environment variable.');\n }\n\n const url = `${cfg.baseUrl}/models/${cfg.model}:generateContent?key=${cfg.apiKey}`;\n\n // Build request body\n const contents: Array<{ role: string; parts: Array<{ text: string }> }> = [];\n\n // Add system prompt as user context if provided\n if (options?.systemPrompt) {\n contents.push({\n role: 'user',\n parts: [{ text: `System instruction: ${options.systemPrompt}\\n\\nNow respond to the following:` }],\n });\n contents.push({\n role: 'model',\n parts: [{ text: 'Understood. I will follow those instructions.' }],\n });\n }\n\n // Add main prompt\n contents.push({\n role: 'user',\n parts: [{ text: prompt }],\n });\n\n const body = {\n contents,\n generationConfig: {\n maxOutputTokens: options?.maxTokens ?? cfg.maxTokens,\n temperature: options?.temperature ?? cfg.temperature,\n },\n };\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), cfg.timeout);\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(`Gemini API error (${response.status}): ${errorText}`);\n }\n\n const data = (await response.json()) as GeminiResponse;\n\n if (data.error) {\n throw new Error(`Gemini API error: ${data.error.message}`);\n }\n\n const text = data.candidates?.[0]?.content?.parts?.[0]?.text;\n if (!text) {\n throw new Error('No response generated from Gemini');\n }\n\n return text;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(`Gemini request timed out after ${cfg.timeout}ms`);\n }\n\n throw error;\n }\n },\n };\n}\n\n/**\n * Create a Gemini enrichment plugin\n * @param config - Gemini configuration\n * @param enrichmentOptions - Enrichment options\n * @returns Gemini plugin\n */\nexport function createGeminiPlugin(\n config: GeminiConfig = {},\n enrichmentOptions?: Partial<AIEnrichmentOptions>\n): Plugin {\n const provider = createGeminiProvider(config);\n return createAIEnrichmentPlugin(provider, enrichmentOptions);\n}\n\n/**\n * Check if Gemini is available (API key is set)\n * @returns True if Gemini is available\n */\nexport function checkGeminiAvailable(): boolean {\n return !!(process.env['GOOGLE_API_KEY'] || process.env['GEMINI_API_KEY']);\n}\n","/**\n * Ollama Plugin\n * Integrates Ollama for local LLM-powered documentation enrichment\n * @module plugins/optional/ollama-ai\n */\n\nimport type { AIProvider, CompletionOptions } from '../../types.js';\nimport { AIError } from '../../errors.js';\nimport { createAIEnrichmentPlugin, type AIEnrichmentOptions } from './ai-base.js';\n\n/**\n * Ollama configuration\n */\nexport interface OllamaConfig {\n /** Model to use */\n model?: string;\n /** Ollama API base URL */\n baseUrl?: string;\n /** Request timeout in ms */\n timeout?: number;\n}\n\n/**\n * Default Ollama configuration\n */\nconst DEFAULT_CONFIG: Required<OllamaConfig> = {\n model: 'llama3.2',\n baseUrl: 'http://localhost:11434',\n timeout: 120000, // Longer timeout for local models\n};\n\n/**\n * Ollama generate request\n */\ninterface OllamaRequest {\n model: string;\n prompt: string;\n system?: string;\n options?: {\n temperature?: number;\n num_predict?: number;\n };\n stream: boolean;\n}\n\n/**\n * Ollama generate response\n */\ninterface OllamaResponse {\n model: string;\n created_at: string;\n response: string;\n done: boolean;\n context?: number[];\n total_duration?: number;\n load_duration?: number;\n prompt_eval_count?: number;\n prompt_eval_duration?: number;\n eval_count?: number;\n eval_duration?: number;\n}\n\n/**\n * Create Ollama provider\n * @param config - Ollama configuration\n * @returns AI provider instance\n */\nexport function createOllamaProvider(config: OllamaConfig = {}): AIProvider {\n const cfg = { ...DEFAULT_CONFIG, ...config };\n let available: boolean | null = null;\n\n return {\n name: 'ollama',\n\n isAvailable(): boolean {\n // Return cached result if available\n if (available !== null) {\n return available;\n }\n\n // Optimistically return true, actual check happens on first request\n return true;\n },\n\n async complete(prompt: string, options?: CompletionOptions): Promise<string> {\n const requestBody: OllamaRequest = {\n model: cfg.model,\n prompt,\n stream: false,\n options: {\n temperature: options?.temperature ?? 0.3,\n num_predict: options?.maxTokens ?? 1000,\n },\n };\n\n if (options?.systemPrompt) {\n requestBody.system = options.systemPrompt;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), cfg.timeout);\n\n try {\n const response = await fetch(`${cfg.baseUrl}/api/generate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n available = false;\n const errorText = await response.text();\n throw new AIError(\n `Ollama API error: ${response.status} ${response.statusText} - ${errorText}`,\n 'ollama'\n );\n }\n\n available = true;\n const data = (await response.json()) as OllamaResponse;\n\n if (!data.response) {\n throw new AIError('No response from Ollama', 'ollama');\n }\n\n return data.response;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof AIError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new AIError('Ollama request timed out', 'ollama');\n }\n\n // Connection refused likely means Ollama isn't running\n if (error instanceof Error && error.message.includes('ECONNREFUSED')) {\n available = false;\n throw new AIError('Ollama is not running. Start it with: ollama serve', 'ollama');\n }\n\n throw new AIError(\n `Ollama request failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'ollama'\n );\n }\n },\n };\n}\n\n/**\n * Create Ollama enrichment plugin\n * @param config - Ollama configuration\n * @param enrichmentOptions - Enrichment options\n * @returns Plugin instance\n */\nexport function createOllamaPlugin(\n config: OllamaConfig = {},\n enrichmentOptions?: Partial<AIEnrichmentOptions>\n) {\n const provider = createOllamaProvider(config);\n return createAIEnrichmentPlugin(provider, enrichmentOptions);\n}\n\n/**\n * Check if Ollama is available\n * @param baseUrl - Ollama base URL\n * @returns True if Ollama is running\n */\nexport async function checkOllamaAvailable(baseUrl = 'http://localhost:11434'): Promise<boolean> {\n try {\n const response = await fetch(`${baseUrl}/api/tags`, {\n method: 'GET',\n signal: AbortSignal.timeout(5000),\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * List available Ollama models\n * @param baseUrl - Ollama base URL\n * @returns List of model names\n */\nexport async function listOllamaModels(baseUrl = 'http://localhost:11434'): Promise<string[]> {\n try {\n const response = await fetch(`${baseUrl}/api/tags`, {\n method: 'GET',\n signal: AbortSignal.timeout(5000),\n });\n\n if (!response.ok) {\n return [];\n }\n\n const data = (await response.json()) as { models: Array<{ name: string }> };\n return data.models.map((m) => m.name);\n } catch {\n return [];\n }\n}\n\nexport { createAIEnrichmentPlugin, type AIEnrichmentOptions };\n","/**\n * Groq Plugin\n * Integrates Groq's fast inference for documentation enrichment\n * @module plugins/optional/groq-ai\n */\n\nimport type { AIProvider, CompletionOptions } from '../../types.js';\nimport { AIError } from '../../errors.js';\nimport { createAIEnrichmentPlugin, type AIEnrichmentOptions } from './ai-base.js';\n\n/**\n * Groq API configuration\n */\nexport interface GroqConfig {\n /** API key (or set GROQ_API_KEY env var) */\n apiKey?: string;\n /** Model to use */\n model?:\n | 'llama-3.3-70b-versatile'\n | 'llama-3.1-8b-instant'\n | 'meta-llama/llama-4-maverick-17b-128e-instruct'\n | 'meta-llama/llama-4-scout-17b-16e-instruct'\n | 'qwen/qwen3-32b'\n | 'moonshotai/kimi-k2-instruct-0905'\n | 'groq/compound'\n | 'groq/compound-mini'\n | 'openai/gpt-oss-120b'\n | 'openai/gpt-oss-20b'\n | string;\n /** API base URL */\n baseUrl?: string;\n /** Request timeout in ms */\n timeout?: number;\n}\n\n/**\n * Default Groq configuration\n */\nconst DEFAULT_CONFIG: Required<GroqConfig> = {\n apiKey: '',\n model: 'llama-3.1-8b-instant',\n baseUrl: 'https://api.groq.com/openai',\n timeout: 30000,\n};\n\n/**\n * Groq chat message format (OpenAI compatible)\n */\ninterface GroqMessage {\n role: 'system' | 'user' | 'assistant';\n content: string;\n}\n\n/**\n * Groq API request body\n */\ninterface GroqRequest {\n model: string;\n messages: GroqMessage[];\n max_tokens?: number;\n temperature?: number;\n}\n\n/**\n * Groq API response\n */\ninterface GroqResponse {\n id: string;\n object: string;\n created: number;\n model: string;\n choices: Array<{\n index: number;\n message: {\n role: string;\n content: string;\n };\n finish_reason: string;\n }>;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n}\n\n/**\n * Create Groq provider\n * @param config - Groq configuration\n * @returns AI provider instance\n */\nexport function createGroqProvider(config: GroqConfig = {}): AIProvider {\n const cfg = {\n ...DEFAULT_CONFIG,\n ...config,\n apiKey: config.apiKey || process.env['GROQ_API_KEY'] || '',\n };\n\n return {\n name: 'groq',\n\n isAvailable(): boolean {\n return !!cfg.apiKey;\n },\n\n async complete(prompt: string, options?: CompletionOptions): Promise<string> {\n if (!cfg.apiKey) {\n throw new AIError('GROQ_API_KEY not set', 'groq');\n }\n\n const messages: GroqMessage[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n\n messages.push({ role: 'user', content: prompt });\n\n const requestBody: GroqRequest = {\n model: cfg.model,\n messages,\n max_tokens: options?.maxTokens ?? 1000,\n temperature: options?.temperature ?? 0.3,\n };\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), cfg.timeout);\n\n try {\n const response = await fetch(`${cfg.baseUrl}/v1/chat/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${cfg.apiKey}`,\n },\n body: JSON.stringify(requestBody),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new AIError(\n `Groq API error: ${response.status} ${response.statusText} - ${errorText}`,\n 'groq'\n );\n }\n\n const data = (await response.json()) as GroqResponse;\n\n const choice = data.choices[0];\n if (!choice || !choice.message.content) {\n throw new AIError('No content in Groq response', 'groq');\n }\n\n return choice.message.content;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof AIError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new AIError('Groq API request timed out', 'groq');\n }\n\n throw new AIError(\n `Groq API request failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'groq'\n );\n }\n },\n };\n}\n\n/**\n * Create Groq enrichment plugin\n * @param config - Groq configuration\n * @param enrichmentOptions - Enrichment options\n * @returns Plugin instance\n */\nexport function createGroqPlugin(\n config: GroqConfig = {},\n enrichmentOptions?: Partial<AIEnrichmentOptions>\n) {\n const provider = createGroqProvider(config);\n return createAIEnrichmentPlugin(provider, enrichmentOptions);\n}\n\nexport { createAIEnrichmentPlugin, type AIEnrichmentOptions };\n","/**\n * Micro-kernel implementation for plugin management\n * Provides plugin registration, event bus, and error boundary\n * @module kernel\n */\n\nimport { PluginError } from './errors.js';\nimport type {\n Plugin,\n PluginInfo,\n EventHandler,\n Kernel,\n ExtractorContext,\n} from './types.js';\n\n/**\n * Internal event handler entry\n */\ninterface EventEntry<TContext> {\n handler: EventHandler<TContext>;\n pluginName: string;\n}\n\n/**\n * Create a new kernel instance\n * @returns Kernel instance\n * @example\n * ```typescript\n * const kernel = createKernel<MyContext>();\n * kernel.use(myPlugin);\n * await kernel.emit('event', context);\n * ```\n */\nexport function createKernel<TContext = ExtractorContext>(): Kernel<TContext> & {\n destroy(): Promise<void>;\n} {\n const plugins = new Map<string, Plugin<TContext>>();\n const eventHandlers = new Map<string, Set<EventEntry<TContext>>>();\n const handlerToPlugin = new Map<EventHandler<TContext>, string>();\n\n /**\n * Handle plugin error\n */\n function handlePluginError(error: Error, pluginName?: string): void {\n const plugin = pluginName ? plugins.get(pluginName) : undefined;\n if (plugin?.onError) {\n try {\n plugin.onError(error);\n } catch {\n // Ignore errors in error handlers\n }\n }\n }\n\n /**\n * Register a plugin\n */\n function use(plugin: Plugin<TContext>): Kernel<TContext> {\n // Validate plugin\n if (!plugin.name) {\n throw new PluginError('Plugin must have a name');\n }\n\n if (plugins.has(plugin.name)) {\n throw new PluginError(`Plugin \"${plugin.name}\" is already registered`, plugin.name);\n }\n\n // Check dependencies\n if (plugin.dependencies) {\n for (const dep of plugin.dependencies) {\n if (!plugins.has(dep)) {\n throw new PluginError(\n `Plugin \"${plugin.name}\" depends on \"${dep}\" which is not registered`,\n plugin.name\n );\n }\n }\n }\n\n // Install plugin\n try {\n plugin.install(kernel);\n plugins.set(plugin.name, plugin);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n throw new PluginError(\n `Failed to install plugin \"${plugin.name}\": ${err.message}`,\n plugin.name\n );\n }\n\n return kernel;\n }\n\n /**\n * Unregister a plugin\n */\n function unregister(name: string): boolean {\n const plugin = plugins.get(name);\n if (!plugin) {\n return false;\n }\n\n // Check if other plugins depend on this one\n for (const [, p] of plugins) {\n if (p.dependencies?.includes(name)) {\n throw new PluginError(\n `Cannot unregister \"${name}\": plugin \"${p.name}\" depends on it`,\n name\n );\n }\n }\n\n // Remove event handlers from this plugin\n for (const [event, handlers] of eventHandlers) {\n const toRemove: EventEntry<TContext>[] = [];\n for (const entry of handlers) {\n if (entry.pluginName === name) {\n toRemove.push(entry);\n handlerToPlugin.delete(entry.handler);\n }\n }\n for (const entry of toRemove) {\n handlers.delete(entry);\n }\n if (handlers.size === 0) {\n eventHandlers.delete(event);\n }\n }\n\n // Call destroy hook\n try {\n plugin.onDestroy?.();\n } catch {\n // Ignore errors in destroy\n }\n\n plugins.delete(name);\n return true;\n }\n\n /**\n * Subscribe to an event\n */\n function on(event: string, handler: EventHandler<TContext>): void {\n if (!eventHandlers.has(event)) {\n eventHandlers.set(event, new Set());\n }\n\n // Determine which plugin is registering this handler\n // (inferred from current install context)\n const pluginName = getCurrentPluginContext() ?? 'unknown';\n\n const entry: EventEntry<TContext> = { handler, pluginName };\n eventHandlers.get(event)!.add(entry);\n handlerToPlugin.set(handler, pluginName);\n }\n\n /**\n * Unsubscribe from an event\n */\n function off(event: string, handler: EventHandler<TContext>): void {\n const handlers = eventHandlers.get(event);\n if (!handlers) return;\n\n for (const entry of handlers) {\n if (entry.handler === handler) {\n handlers.delete(entry);\n handlerToPlugin.delete(handler);\n break;\n }\n }\n\n if (handlers.size === 0) {\n eventHandlers.delete(event);\n }\n }\n\n /**\n * Emit an event\n */\n async function emit(event: string, context: TContext, ...args: unknown[]): Promise<void> {\n const handlers = eventHandlers.get(event);\n if (!handlers || handlers.size === 0) return;\n\n // Process handlers sequentially\n for (const entry of handlers) {\n try {\n await entry.handler(context, ...args);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n handlePluginError(err, entry.pluginName);\n // Continue with other handlers\n }\n }\n }\n\n /**\n * List all plugins\n */\n function listPlugins(): PluginInfo[] {\n return Array.from(plugins.values()).map((p) => ({\n name: p.name,\n version: p.version,\n category: p.category,\n dependencies: p.dependencies ?? [],\n }));\n }\n\n /**\n * Get a plugin by name\n */\n function getPlugin(name: string): Plugin<TContext> | undefined {\n return plugins.get(name);\n }\n\n /**\n * Check if a plugin is registered\n */\n function hasPlugin(name: string): boolean {\n return plugins.has(name);\n }\n\n /**\n * Destroy the kernel and all plugins\n */\n async function destroy(): Promise<void> {\n // Destroy plugins in reverse order\n const pluginNames = Array.from(plugins.keys()).reverse();\n\n for (const name of pluginNames) {\n const plugin = plugins.get(name);\n if (plugin?.onDestroy) {\n try {\n await plugin.onDestroy();\n } catch {\n // Ignore errors during destroy\n }\n }\n }\n\n plugins.clear();\n eventHandlers.clear();\n handlerToPlugin.clear();\n }\n\n // Track which plugin is currently being installed\n let currentPluginContext: string | null = null;\n\n function getCurrentPluginContext(): string | null {\n return currentPluginContext;\n }\n\n // Wrap use to track plugin context\n const originalUse = use;\n function wrappedUse(plugin: Plugin<TContext>): Kernel<TContext> & { destroy(): Promise<void> } {\n currentPluginContext = plugin.name;\n try {\n originalUse(plugin);\n return kernel;\n } finally {\n currentPluginContext = null;\n }\n }\n\n const kernel: Kernel<TContext> & { destroy(): Promise<void> } = {\n use: wrappedUse,\n unregister,\n on,\n off,\n emit,\n listPlugins,\n getPlugin,\n hasPlugin,\n destroy,\n };\n\n return kernel;\n}\n\n/**\n * Create a plugin definition helper\n * @param definition - Plugin definition\n * @returns Plugin\n * @example\n * ```typescript\n * const myPlugin = definePlugin({\n * name: 'my-plugin',\n * version: '1.0.0',\n * category: 'parser',\n * install(kernel) {\n * kernel.on('parse:start', (ctx) => {\n * // Handle event\n * });\n * }\n * });\n * ```\n */\nexport function definePlugin<TContext = ExtractorContext>(\n definition: Plugin<TContext>\n): Plugin<TContext> {\n return definition;\n}\n\n/**\n * Compose multiple plugins into a single plugin\n * @param name - Composed plugin name\n * @param plugins - Plugins to compose\n * @returns Composed plugin\n * @example\n * ```typescript\n * const allParsers = composePlugins('all-parsers', [\n * dtsParser,\n * tsParser,\n * readmeParser,\n * ]);\n * ```\n */\nexport function composePlugins<TContext = ExtractorContext>(\n name: string,\n plugins: Plugin<TContext>[]\n): Plugin<TContext> {\n return {\n name,\n version: '1.0.0',\n category: 'utility',\n dependencies: plugins.flatMap((p) => p.dependencies ?? []),\n\n install(kernel) {\n for (const plugin of plugins) {\n kernel.use(plugin);\n }\n },\n\n async onDestroy() {\n // Individual plugins handle their own cleanup\n },\n };\n}\n","/**\n * Changelog parser plugin for @oxog/npm-llms\n * Parses CHANGELOG.md files in Keep a Changelog format\n * @module plugins/optional/changelog-parser\n */\n\nimport type {\n Plugin,\n ExtractorContext,\n Kernel,\n ParsedChangelog,\n ChangelogEntry,\n} from '../../types.js';\nimport { definePlugin } from '../../kernel.js';\n\n/**\n * Parse a changelog file into structured data\n * @param content - Raw changelog content\n * @returns Parsed changelog structure\n */\nexport function parseChangelog(content: string): ParsedChangelog {\n const versions: ChangelogEntry[] = [];\n const lines = content.split('\\n');\n\n let currentVersion: ChangelogEntry | null = null;\n let currentType: ChangelogEntry['changes'][0]['type'] = 'other';\n\n // Version header regex: ## [1.0.0] - 2024-01-01 or ## 1.0.0 (2024-01-01)\n const versionRegex = /^##\\s+\\[?(\\d+\\.\\d+\\.\\d+(?:-[\\w.]+)?)\\]?(?:\\s*[-–(]\\s*(\\d{4}-\\d{2}-\\d{2}))?/;\n\n // Change type headers\n const typeMap: Record<string, ChangelogEntry['changes'][0]['type']> = {\n added: 'added',\n changed: 'changed',\n deprecated: 'deprecated',\n removed: 'removed',\n fixed: 'fixed',\n security: 'security',\n };\n\n for (const line of lines) {\n // Check for version header\n const versionMatch = versionRegex.exec(line);\n if (versionMatch) {\n if (currentVersion) {\n versions.push(currentVersion);\n }\n currentVersion = {\n version: versionMatch[1]!,\n date: versionMatch[2],\n changes: [],\n };\n currentType = 'other';\n continue;\n }\n\n // Check for change type header (### Added, ### Fixed, etc.)\n if (line.startsWith('### ')) {\n const typeText = line.slice(4).toLowerCase().trim();\n currentType = typeMap[typeText] || 'other';\n continue;\n }\n\n // Check for change item (- or * bullet)\n const itemMatch = /^[-*]\\s+(.+)/.exec(line);\n if (itemMatch && currentVersion) {\n currentVersion.changes.push({\n type: currentType,\n description: itemMatch[1]!.trim(),\n });\n }\n }\n\n // Push last version\n if (currentVersion) {\n versions.push(currentVersion);\n }\n\n return { versions };\n}\n\n/**\n * Find changelog file in package files\n * @param files - Map of file paths to content\n * @returns Changelog content or undefined\n */\nexport function findChangelog(files: Map<string, string>): string | undefined {\n // Common changelog file names\n const names = [\n 'CHANGELOG.md',\n 'changelog.md',\n 'CHANGELOG',\n 'changelog',\n 'HISTORY.md',\n 'history.md',\n 'CHANGES.md',\n 'changes.md',\n ];\n\n for (const name of names) {\n // Check with and without package/ prefix\n const content = files.get(name) || files.get(`package/${name}`);\n if (content) {\n return content;\n }\n }\n\n return undefined;\n}\n\n/**\n * Get latest version from changelog\n * @param changelog - Parsed changelog\n * @returns Latest version entry or undefined\n */\nexport function getLatestVersion(changelog: ParsedChangelog): ChangelogEntry | undefined {\n return changelog.versions[0];\n}\n\n/**\n * Get version by number\n * @param changelog - Parsed changelog\n * @param version - Version number to find\n * @returns Version entry or undefined\n */\nexport function getVersion(changelog: ParsedChangelog, version: string): ChangelogEntry | undefined {\n return changelog.versions.find((v) => v.version === version);\n}\n\n/**\n * Format changelog entry as text\n * @param entry - Changelog entry\n * @returns Formatted text\n */\nexport function formatChangelogEntry(entry: ChangelogEntry): string {\n const lines: string[] = [];\n\n // Header\n lines.push(`## ${entry.version}${entry.date ? ` (${entry.date})` : ''}`);\n lines.push('');\n\n // Group changes by type\n const grouped = new Map<string, string[]>();\n for (const change of entry.changes) {\n const existing = grouped.get(change.type) || [];\n existing.push(change.description);\n grouped.set(change.type, existing);\n }\n\n // Format each type\n const typeLabels: Record<string, string> = {\n added: 'Added',\n changed: 'Changed',\n deprecated: 'Deprecated',\n removed: 'Removed',\n fixed: 'Fixed',\n security: 'Security',\n other: 'Other',\n };\n\n for (const [type, changes] of grouped) {\n lines.push(`### ${typeLabels[type] || type}`);\n for (const change of changes) {\n lines.push(`- ${change}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/**\n * Create changelog parser plugin\n * @returns Changelog parser plugin\n */\nexport function createChangelogParserPlugin(): Plugin {\n return definePlugin({\n name: 'changelog-parser',\n version: '1.0.0',\n category: 'parser',\n\n install(kernel: Kernel<ExtractorContext>) {\n // Register handler for changelog parsing\n kernel.on('parse:changelog', async (ctx: ExtractorContext) => {\n const changelogContent = findChangelog(ctx.package.files);\n\n if (changelogContent) {\n ctx.changelog = parseChangelog(changelogContent);\n }\n });\n },\n });\n}\n","/**\n * HTML output plugin for @oxog/npm-llms\n * Generates HTML documentation from API entries\n * @module plugins/optional/html-output\n */\n\nimport type {\n Plugin,\n ExtractorContext,\n Kernel,\n APIEntry,\n ParsedReadme,\n} from '../../types.js';\nimport { definePlugin } from '../../kernel.js';\n\n/**\n * HTML output options\n */\nexport interface HTMLOutputOptions {\n /** Page title (uses package name if not provided) */\n title?: string;\n /** Include inline styles */\n includeStyles?: boolean;\n /** Include syntax highlighting CSS classes */\n syntaxHighlighting?: boolean;\n /** Dark mode support */\n darkMode?: boolean;\n /** Custom CSS to inject */\n customCSS?: string;\n}\n\nconst DEFAULT_OPTIONS: HTMLOutputOptions = {\n includeStyles: true,\n syntaxHighlighting: true,\n darkMode: true,\n};\n\n/**\n * Escape HTML special characters\n * @param str - String to escape\n * @returns Escaped string\n */\nfunction escapeHTML(str: string): string {\n return str\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * Generate CSS styles\n * @param options - HTML options\n * @returns CSS string\n */\nfunction generateStyles(options: HTMLOutputOptions): string {\n if (!options.includeStyles) return '';\n\n let css = `\n :root {\n --bg: #ffffff;\n --text: #1a1a1a;\n --code-bg: #f5f5f5;\n --border: #e5e5e5;\n --link: #0066cc;\n --heading: #000000;\n --param-type: #0550ae;\n --deprecated: #d93025;\n }\n ${options.darkMode ? `\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #1a1a1a;\n --text: #e5e5e5;\n --code-bg: #2d2d2d;\n --border: #404040;\n --link: #58a6ff;\n --heading: #ffffff;\n --param-type: #79c0ff;\n --deprecated: #f85149;\n }\n }` : ''}\n * { box-sizing: border-box; }\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n line-height: 1.6;\n color: var(--text);\n background: var(--bg);\n max-width: 900px;\n margin: 0 auto;\n padding: 2rem;\n }\n h1, h2, h3, h4 { color: var(--heading); margin-top: 2rem; }\n h1 { border-bottom: 2px solid var(--border); padding-bottom: 0.5rem; }\n code {\n font-family: 'SFMono-Regular', Consolas, monospace;\n font-size: 0.9em;\n background: var(--code-bg);\n padding: 0.2em 0.4em;\n border-radius: 3px;\n }\n pre {\n background: var(--code-bg);\n padding: 1rem;\n overflow-x: auto;\n border-radius: 6px;\n border: 1px solid var(--border);\n }\n pre code { background: none; padding: 0; }\n a { color: var(--link); text-decoration: none; }\n a:hover { text-decoration: underline; }\n .api-entry {\n margin: 2rem 0;\n padding: 1.5rem;\n border: 1px solid var(--border);\n border-radius: 8px;\n }\n .api-entry h3 { margin-top: 0; }\n .signature { font-size: 0.95rem; }\n .param-type { color: var(--param-type); }\n .deprecated { color: var(--deprecated); font-style: italic; }\n .params-table {\n width: 100%;\n border-collapse: collapse;\n margin: 1rem 0;\n }\n .params-table th, .params-table td {\n text-align: left;\n padding: 0.5rem;\n border-bottom: 1px solid var(--border);\n }\n .params-table th { font-weight: 600; }\n .toc { background: var(--code-bg); padding: 1rem; border-radius: 6px; }\n .toc ul { margin: 0; padding-left: 1.5rem; }\n .badge {\n display: inline-block;\n padding: 0.2em 0.5em;\n font-size: 0.75rem;\n font-weight: 600;\n border-radius: 4px;\n margin-left: 0.5rem;\n }\n .badge-function { background: #ddf4ff; color: #0550ae; }\n .badge-class { background: #fff8c5; color: #735c0f; }\n .badge-interface { background: #dafbe1; color: #116329; }\n .badge-type { background: #f6e8ff; color: #8250df; }\n .badge-constant { background: #ffebe9; color: #cf222e; }\n .badge-enum { background: #fdf4ff; color: #bf3989; }\n `;\n\n if (options.customCSS) {\n css += options.customCSS;\n }\n\n return `<style>${css}</style>`;\n}\n\n/**\n * Generate kind badge\n * @param kind - API entry kind\n * @returns Badge HTML\n */\nfunction kindBadge(kind: string): string {\n return `<span class=\"badge badge-${kind}\">${kind}</span>`;\n}\n\n/**\n * Generate table of contents\n * @param entries - API entries\n * @returns TOC HTML\n */\nfunction generateTOC(entries: APIEntry[]): string {\n if (entries.length === 0) return '';\n\n const grouped = new Map<string, APIEntry[]>();\n for (const entry of entries) {\n const list = grouped.get(entry.kind) || [];\n list.push(entry);\n grouped.set(entry.kind, list);\n }\n\n let html = '<nav class=\"toc\"><h2>Table of Contents</h2>';\n\n for (const [kind, items] of grouped) {\n html += `<h4>${kind.charAt(0).toUpperCase() + kind.slice(1)}s</h4><ul>`;\n for (const item of items) {\n const id = `${kind}-${item.name}`.toLowerCase().replace(/[^a-z0-9-]/g, '-');\n html += `<li><a href=\"#${id}\">${escapeHTML(item.name)}</a></li>`;\n }\n html += '</ul>';\n }\n\n html += '</nav>';\n return html;\n}\n\n/**\n * Generate parameters table\n * @param entry - API entry\n * @returns Parameters HTML\n */\nfunction generateParams(entry: APIEntry): string {\n if (!entry.params || entry.params.length === 0) return '';\n\n let html = '<h4>Parameters</h4><table class=\"params-table\"><thead><tr>';\n html += '<th>Name</th><th>Type</th><th>Description</th></tr></thead><tbody>';\n\n for (const param of entry.params) {\n const name = param.optional ? `${param.name}?` : param.name;\n const type = param.type ? `<code class=\"param-type\">${escapeHTML(param.type)}</code>` : '-';\n const desc = param.description ? escapeHTML(param.description) : '-';\n html += `<tr><td><code>${escapeHTML(name)}</code></td><td>${type}</td><td>${desc}</td></tr>`;\n }\n\n html += '</tbody></table>';\n return html;\n}\n\n/**\n * Generate examples section\n * @param examples - Examples array\n * @returns Examples HTML\n */\nfunction generateExamples(examples: string[]): string {\n if (examples.length === 0) return '';\n\n let html = '<h4>Examples</h4>';\n for (const example of examples) {\n html += `<pre><code>${escapeHTML(example)}</code></pre>`;\n }\n return html;\n}\n\n/**\n * Generate single API entry HTML\n * @param entry - API entry\n * @returns Entry HTML\n */\nfunction generateEntry(entry: APIEntry): string {\n const id = `${entry.kind}-${entry.name}`.toLowerCase().replace(/[^a-z0-9-]/g, '-');\n\n let html = `<div class=\"api-entry\" id=\"${id}\">`;\n html += `<h3>${escapeHTML(entry.name)} ${kindBadge(entry.kind)}</h3>`;\n\n if (entry.deprecated) {\n const reason = typeof entry.deprecated === 'string' ? entry.deprecated : '';\n html += `<p class=\"deprecated\">Deprecated${reason ? `: ${escapeHTML(reason)}` : ''}</p>`;\n }\n\n if (entry.description) {\n html += `<p>${escapeHTML(entry.description)}</p>`;\n }\n\n html += `<pre class=\"signature\"><code>${escapeHTML(entry.signature)}</code></pre>`;\n\n html += generateParams(entry);\n\n if (entry.returns) {\n html += '<h4>Returns</h4>';\n html += `<p><code class=\"param-type\">${escapeHTML(entry.returns.type)}</code>`;\n if (entry.returns.description) {\n html += ` - ${escapeHTML(entry.returns.description)}`;\n }\n html += '</p>';\n }\n\n if (entry.examples && entry.examples.length > 0) {\n html += generateExamples(entry.examples);\n }\n\n html += '</div>';\n return html;\n}\n\n/**\n * Generate header section\n * @param name - Package name\n * @param version - Package version\n * @param description - Package description\n * @param readme - Parsed readme\n * @returns Header HTML\n */\nfunction generateHeader(\n name: string,\n version: string,\n description?: string,\n readme?: ParsedReadme\n): string {\n let html = `<header>`;\n html += `<h1>${escapeHTML(name)} <small>v${escapeHTML(version)}</small></h1>`;\n\n if (description) {\n html += `<p>${escapeHTML(description)}</p>`;\n }\n\n if (readme?.installation) {\n html += '<h2>Installation</h2>';\n html += `<pre><code>${escapeHTML(readme.installation)}</code></pre>`;\n }\n\n html += '</header>';\n return html;\n}\n\n/**\n * Generate full HTML document\n * @param ctx - Extractor context\n * @param options - HTML options\n * @returns HTML string\n */\nexport function generateHTML(ctx: ExtractorContext, options: HTMLOutputOptions = {}): string {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const title = opts.title || `${ctx.package.name} API Documentation`;\n\n let html = '<!DOCTYPE html>\\n<html lang=\"en\">\\n<head>\\n';\n html += '<meta charset=\"UTF-8\">\\n';\n html += '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\\n';\n html += `<title>${escapeHTML(title)}</title>\\n`;\n html += generateStyles(opts);\n html += '</head>\\n<body>\\n';\n\n html += generateHeader(ctx.package.name, ctx.package.version, ctx.package.description, ctx.readme);\n\n html += generateTOC(ctx.api);\n\n html += '<main>';\n\n // Group entries by kind\n const grouped = new Map<string, APIEntry[]>();\n for (const entry of ctx.api) {\n const list = grouped.get(entry.kind) || [];\n list.push(entry);\n grouped.set(entry.kind, list);\n }\n\n // Render each group\n const kindOrder = ['function', 'class', 'interface', 'type', 'constant', 'enum'];\n for (const kind of kindOrder) {\n const entries = grouped.get(kind);\n if (!entries || entries.length === 0) continue;\n\n html += `<section><h2>${kind.charAt(0).toUpperCase() + kind.slice(1)}s</h2>`;\n for (const entry of entries) {\n html += generateEntry(entry);\n }\n html += '</section>';\n }\n\n html += '</main>\\n';\n\n // Footer\n html += '<footer><p>Generated by <a href=\"https://github.com/oxog/npm-llms\">@oxog/npm-llms</a></p></footer>\\n';\n\n html += '</body>\\n</html>';\n\n return html;\n}\n\n/**\n * Create HTML output plugin\n * @param options - HTML options\n * @returns HTML output plugin\n */\nexport function createHTMLOutputPlugin(options: HTMLOutputOptions = {}): Plugin {\n return definePlugin({\n name: 'html-output',\n version: '1.0.0',\n category: 'output',\n\n install(kernel: Kernel<ExtractorContext>) {\n kernel.on('output:generate', async (ctx: ExtractorContext) => {\n // Only generate if html format is requested\n if (!ctx.options.formats?.includes('html')) return;\n\n const html = generateHTML(ctx, options);\n ctx.outputs.set('html', html);\n });\n },\n });\n}\n"]}
|