@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/kernel.ts","../src/utils/fs.ts","../src/core/cache.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/core/extractor.ts"],"names":["access","fsConstants","mkdir","readFile","dirname","writeFile","unlink","rm","readdir","join","stat","tmpdir","createHash","path","gunzipSync","url","exports","PATTERNS","functions","classes","interfaces","types","extract"],"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 * 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 * File system utilities for async file operations\n * Uses Node.js built-in fs/promises module\n * @module utils/fs\n */\n\nimport { mkdir, readFile, writeFile, unlink, readdir, stat, rm, access } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { constants as fsConstants } from 'node:fs';\n\n/**\n * Check if a path exists\n * @param path - Path to check\n * @returns True if path exists\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await access(path, fsConstants.F_OK);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a path is a directory\n * @param path - Path to check\n * @returns True if path is a directory\n */\nexport async function isDirectory(path: string): Promise<boolean> {\n try {\n const stats = await stat(path);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a path is a file\n * @param path - Path to check\n * @returns True if path is a file\n */\nexport async function isFile(path: string): Promise<boolean> {\n try {\n const stats = await stat(path);\n return stats.isFile();\n } catch {\n return false;\n }\n}\n\n/**\n * Ensure a directory exists, creating it if necessary\n * @param dirPath - Directory path\n * @returns True if created, false if already exists\n */\nexport async function ensureDir(dirPath: string): Promise<boolean> {\n try {\n await mkdir(dirPath, { recursive: true });\n return true;\n } catch (error) {\n // Directory already exists\n if ((error as NodeJS.ErrnoException).code === 'EEXIST') {\n return false;\n }\n throw error;\n }\n}\n\n/**\n * Read a text file\n * @param filePath - Path to file\n * @returns File content\n */\nexport async function readTextFile(filePath: string): Promise<string> {\n return readFile(filePath, 'utf-8');\n}\n\n/**\n * Read a JSON file\n * @param filePath - Path to file\n * @returns Parsed JSON\n */\nexport async function readJsonFile<T = unknown>(filePath: string): Promise<T> {\n const content = await readFile(filePath, 'utf-8');\n return JSON.parse(content) as T;\n}\n\n/**\n * Write a text file, creating parent directories if needed\n * @param filePath - Path to file\n * @param content - File content\n */\nexport async function writeTextFile(filePath: string, content: string): Promise<void> {\n await ensureDir(dirname(filePath));\n await writeFile(filePath, content, 'utf-8');\n}\n\n/**\n * Write a JSON file, creating parent directories if needed\n * @param filePath - Path to file\n * @param data - Data to serialize\n * @param pretty - Whether to format the output\n */\nexport async function writeJsonFile(\n filePath: string,\n data: unknown,\n pretty: boolean = true\n): Promise<void> {\n const content = pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);\n await writeTextFile(filePath, content);\n}\n\n/**\n * Delete a file if it exists\n * @param filePath - Path to file\n * @returns True if deleted, false if didn't exist\n */\nexport async function deleteFile(filePath: string): Promise<boolean> {\n try {\n await unlink(filePath);\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return false;\n }\n throw error;\n }\n}\n\n/**\n * Delete a directory recursively\n * @param dirPath - Path to directory\n * @returns True if deleted, false if didn't exist\n */\nexport async function deleteDir(dirPath: string): Promise<boolean> {\n try {\n await rm(dirPath, { recursive: true, force: true });\n return true;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return false;\n }\n throw error;\n }\n}\n\n/**\n * List files in a directory\n * @param dirPath - Path to directory\n * @param recursive - Whether to list recursively\n * @returns Array of file paths (relative to dirPath)\n */\nexport async function listFiles(dirPath: string, recursive: boolean = false): Promise<string[]> {\n const files: string[] = [];\n\n async function scanDir(currentPath: string, prefix: string = ''): Promise<void> {\n const entries = await readdir(currentPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n\n if (entry.isFile()) {\n files.push(relativePath);\n } else if (entry.isDirectory() && recursive) {\n await scanDir(join(currentPath, entry.name), relativePath);\n }\n }\n }\n\n try {\n await scanDir(dirPath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n return [];\n }\n throw error;\n }\n\n return files;\n}\n\n/**\n * Get file size in bytes\n * @param filePath - Path to file\n * @returns File size in bytes, or -1 if file doesn't exist\n */\nexport async function getFileSize(filePath: string): Promise<number> {\n try {\n const stats = await stat(filePath);\n return stats.size;\n } catch {\n return -1;\n }\n}\n\n/**\n * Get directory size in bytes (sum of all files)\n * @param dirPath - Path to directory\n * @returns Total size in bytes\n */\nexport async function getDirSize(dirPath: string): Promise<number> {\n let totalSize = 0;\n\n async function scanDir(currentPath: string): Promise<void> {\n try {\n const entries = await readdir(currentPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(currentPath, entry.name);\n if (entry.isFile()) {\n const stats = await stat(fullPath);\n totalSize += stats.size;\n } else if (entry.isDirectory()) {\n await scanDir(fullPath);\n }\n }\n } catch {\n // Ignore errors\n }\n }\n\n await scanDir(dirPath);\n return totalSize;\n}\n\n/**\n * Get file modification time\n * @param filePath - Path to file\n * @returns Modification time as Date, or null if file doesn't exist\n */\nexport async function getModTime(filePath: string): Promise<Date | null> {\n try {\n const stats = await stat(filePath);\n return stats.mtime;\n } catch {\n return null;\n }\n}\n\n/**\n * Copy a file\n * @param src - Source path\n * @param dest - Destination path\n */\nexport async function copyFile(src: string, dest: string): Promise<void> {\n await ensureDir(dirname(dest));\n const content = await readFile(src);\n await writeFile(dest, content);\n}\n\n/**\n * Find files matching a pattern in a directory\n * @param dirPath - Directory to search\n * @param pattern - Regex pattern to match file names\n * @param recursive - Whether to search recursively\n * @returns Array of matching file paths\n */\nexport async function findFiles(\n dirPath: string,\n pattern: RegExp,\n recursive: boolean = true\n): Promise<string[]> {\n const allFiles = await listFiles(dirPath, recursive);\n return allFiles.filter((file) => pattern.test(file));\n}\n","/**\n * File-based cache with TTL support\n * Caches package data and AI responses to reduce API calls\n * @module core/cache\n */\n\nimport { createHash } from 'node:crypto';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { CacheError } from '../errors.js';\nimport type { CacheStats, CacheOptions } from '../types.js';\nimport {\n ensureDir,\n readJsonFile,\n writeJsonFile,\n deleteFile,\n deleteDir,\n listFiles,\n getFileSize,\n exists,\n getDirSize,\n} from '../utils/fs.js';\n\n/**\n * Default cache directory\n */\nexport const DEFAULT_CACHE_DIR = '.npm-llms-cache';\n\n/**\n * Default TTL: 7 days in milliseconds\n */\nexport const DEFAULT_TTL = 7 * 24 * 60 * 60 * 1000;\n\n/**\n * Cache entry metadata\n */\ninterface CacheEntry<T> {\n /** Cached data */\n data: T;\n /** Timestamp when cached */\n timestamp: number;\n /** TTL in milliseconds */\n ttl: number;\n /** Cache key */\n key: string;\n /** Version for cache invalidation */\n version: number;\n}\n\n/**\n * Current cache format version\n */\nconst CACHE_VERSION = 1;\n\n/**\n * File-based cache implementation\n * @example\n * ```typescript\n * const cache = new FileCache('.cache', 3600000); // 1 hour TTL\n *\n * // Get cached data\n * const data = await cache.get<MyData>('my-key');\n *\n * // Set cached data\n * await cache.set('my-key', myData);\n *\n * // Clear cache\n * await cache.clear();\n * ```\n */\nexport class FileCache {\n private readonly dir: string;\n private readonly defaultTtl: number;\n\n /**\n * Create a new FileCache\n * @param dir - Cache directory path\n * @param defaultTtl - Default TTL in milliseconds\n */\n constructor(dir?: string, defaultTtl: number = DEFAULT_TTL) {\n this.dir = dir ?? join(tmpdir(), DEFAULT_CACHE_DIR);\n this.defaultTtl = defaultTtl;\n }\n\n /**\n * Generate a cache key hash\n * @param input - Input string\n * @returns Hashed key\n */\n private getKey(input: string): string {\n return createHash('sha256').update(input).digest('hex').slice(0, 16);\n }\n\n /**\n * Get file path for a cache key\n * @param key - Cache key\n * @returns File path\n */\n private getPath(key: string): string {\n const hash = this.getKey(key);\n // Use first 2 chars as subdirectory for better file system performance\n return join(this.dir, hash.slice(0, 2), `${hash}.json`);\n }\n\n /**\n * Get cached data\n * @param key - Cache key\n * @returns Cached data or null if not found/expired\n */\n async get<T>(key: string): Promise<T | null> {\n const path = this.getPath(key);\n\n try {\n if (!(await exists(path))) {\n return null;\n }\n\n const entry = await readJsonFile<CacheEntry<T>>(path);\n\n // Check version\n if (entry.version !== CACHE_VERSION) {\n await this.delete(key);\n return null;\n }\n\n // Check TTL\n const age = Date.now() - entry.timestamp;\n if (age > entry.ttl) {\n await this.delete(key);\n return null;\n }\n\n return entry.data;\n } catch {\n // Cache miss or corrupted entry - delete silently\n await this.delete(key).catch(() => {});\n return null;\n }\n }\n\n /**\n * Set cached data\n * @param key - Cache key\n * @param data - Data to cache\n * @param ttl - Optional TTL override\n */\n async set<T>(key: string, data: T, ttl?: number): Promise<void> {\n const path = this.getPath(key);\n\n const entry: CacheEntry<T> = {\n data,\n timestamp: Date.now(),\n ttl: ttl ?? this.defaultTtl,\n key,\n version: CACHE_VERSION,\n };\n\n try {\n await writeJsonFile(path, entry, false);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new CacheError(`Failed to write cache: ${message}`);\n }\n }\n\n /**\n * Delete a cached entry\n * @param key - Cache key\n * @returns True if deleted, false if not found\n */\n async delete(key: string): Promise<boolean> {\n const path = this.getPath(key);\n return deleteFile(path);\n }\n\n /**\n * Check if a key is cached and not expired\n * @param key - Cache key\n * @returns True if cached and valid\n */\n async has(key: string): Promise<boolean> {\n const data = await this.get(key);\n return data !== null;\n }\n\n /**\n * Clear all cached data\n */\n async clear(): Promise<void> {\n try {\n await deleteDir(this.dir);\n await ensureDir(this.dir);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new CacheError(`Failed to clear cache: ${message}`);\n }\n }\n\n /**\n * Remove expired entries\n * @returns Number of entries removed\n */\n async prune(): Promise<number> {\n let removed = 0;\n\n try {\n const files = await listFiles(this.dir, true);\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n const path = join(this.dir, file);\n try {\n const entry = await readJsonFile<CacheEntry<unknown>>(path);\n\n // Check version and TTL\n const expired =\n entry.version !== CACHE_VERSION || Date.now() - entry.timestamp > entry.ttl;\n\n if (expired) {\n await deleteFile(path);\n removed++;\n }\n } catch {\n // Remove corrupted entries\n await deleteFile(path);\n removed++;\n }\n }\n } catch {\n // Ignore errors during pruning\n }\n\n return removed;\n }\n\n /**\n * Get cache statistics\n * @returns Cache stats\n */\n async getStats(): Promise<CacheStats> {\n try {\n if (!(await exists(this.dir))) {\n return { entries: 0, size: 0, dir: this.dir };\n }\n\n const files = await listFiles(this.dir, true);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n const size = await getDirSize(this.dir);\n\n return {\n entries: jsonFiles.length,\n size,\n dir: this.dir,\n };\n } catch {\n return { entries: 0, size: 0, dir: this.dir };\n }\n }\n\n /**\n * Get cache directory path\n */\n getDir(): string {\n return this.dir;\n }\n\n /**\n * Get default TTL\n */\n getDefaultTtl(): number {\n return this.defaultTtl;\n }\n}\n\n/**\n * Create a file cache from options\n * @param options - Cache options\n * @returns FileCache instance or null if disabled\n */\nexport function createCache(options?: CacheOptions): FileCache | null {\n if (options?.enabled === false) {\n return null;\n }\n\n const dir = options?.dir ?? join(process.cwd(), DEFAULT_CACHE_DIR);\n const ttl = options?.ttl ?? DEFAULT_TTL;\n\n return new FileCache(dir, ttl);\n}\n\n/**\n * Format bytes for display\n * @param bytes - Byte count\n * @returns Formatted string\n */\nexport function formatBytes(bytes: number): string {\n if (bytes < 1024) {\n return `${bytes} B`;\n }\n if (bytes < 1024 * 1024) {\n return `${(bytes / 1024).toFixed(1)} KB`;\n }\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\n/**\n * Build cache key for a package\n * @param name - Package name\n * @param version - Package version\n * @param type - Cache type\n * @returns Cache key\n */\nexport function buildPackageCacheKey(\n name: string,\n version: string,\n type: 'metadata' | 'files' | 'result' = 'result'\n): string {\n return `pkg:${name}@${version}:${type}`;\n}\n\n/**\n * Build cache key for AI response\n * @param provider - AI provider name\n * @param promptHash - Hash of the prompt\n * @returns Cache key\n */\nexport function buildAICacheKey(provider: string, promptHash: string): string {\n return `ai:${provider}:${promptHash}`;\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 * Main extractor implementation\n * Ties together fetching, parsing, and output generation\n * @module core/extractor\n */\n\nimport type {\n Extractor,\n ExtractorOptions,\n ExtractOptions,\n ExtractResult,\n ExtractorContext,\n PackageInfo,\n Plugin,\n PluginInfo,\n CacheStats,\n OutputFormat,\n} from '../types.js';\nimport { createKernel } from '../kernel.js';\nimport { FileCache, createCache, buildPackageCacheKey } from './cache.js';\nimport { fetchPackage, parsePackageSpec } from './fetcher.js';\nimport { corePlugins } from '../plugins/core/index.js';\n\n/**\n * Default output formats\n */\nconst DEFAULT_FORMATS: OutputFormat[] = ['llms', 'llms-full', 'markdown', 'json'];\n\n/**\n * Create a new extractor instance\n * @param options - Extractor configuration options\n * @returns Extractor instance\n * @example\n * ```typescript\n * const extractor = createExtractor();\n * const result = await extractor.extract('lodash@4.17.21');\n * console.log(result.outputs.llms);\n * ```\n */\nexport function createExtractor(options: ExtractorOptions = {}): Extractor {\n // Create kernel\n const kernel = createKernel<ExtractorContext>();\n\n // Create cache\n const cache = createCache(options.cache);\n\n // Register core plugins\n for (const plugin of corePlugins) {\n kernel.use(plugin);\n }\n\n // Register additional plugins\n if (options.plugins) {\n for (const plugin of options.plugins) {\n kernel.use(plugin);\n }\n }\n\n /**\n * Extract documentation from a package\n */\n async function extract(\n packageSpec: string,\n extractOptions: ExtractOptions = {}\n ): Promise<ExtractResult> {\n const startTime = Date.now();\n\n // Parse package spec\n const { name, version } = parsePackageSpec(packageSpec);\n\n // Check cache\n const cacheKey = buildPackageCacheKey(name, version ?? 'latest', 'result');\n let fromCache = false;\n\n if (cache && !extractOptions.ignoreCache) {\n const cached = await cache.get<ExtractResult>(cacheKey);\n if (cached) {\n return {\n ...cached,\n fromCache: true,\n };\n }\n }\n\n // Fetch package\n const pkg = await fetchPackage(packageSpec, {\n registry: options.registry,\n timeout: options.ai?.timeout,\n });\n\n // Create context\n const context = createContext(pkg, extractOptions);\n\n // Emit events for processing\n await kernel.emit('package:fetched', context);\n await kernel.emit('parse:start', context);\n await kernel.emit('parse:complete', context);\n\n // AI enrichment if enabled\n if (extractOptions.enrichWithAI && options.ai) {\n await kernel.emit('enrich:start', context);\n await kernel.emit('enrich:complete', context);\n }\n\n // Generate outputs\n await kernel.emit('output:start', context);\n await kernel.emit('output:complete', context);\n\n // Build result\n const result: ExtractResult = {\n package: {\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n tarball: pkg.tarball,\n types: pkg.types,\n main: pkg.main,\n exports: pkg.exports,\n repository: pkg.repository,\n keywords: pkg.keywords,\n author: pkg.author,\n license: pkg.license,\n homepage: pkg.homepage,\n },\n api: context.api,\n outputs: Object.fromEntries(context.outputs),\n tokenCount: context.tokenCount,\n truncated: context.truncated,\n duration: Date.now() - startTime,\n fromCache,\n };\n\n // Cache result\n if (cache && !extractOptions.ignoreCache) {\n await cache.set(cacheKey, result);\n }\n\n return result;\n }\n\n /**\n * Fetch package without extraction\n */\n async function fetchOnly(packageSpec: string): Promise<PackageInfo> {\n return fetchPackage(packageSpec, {\n registry: options.registry,\n });\n }\n\n /**\n * Register a plugin\n */\n function use(plugin: Plugin): Extractor {\n kernel.use(plugin);\n return extractor;\n }\n\n /**\n * Unregister a plugin\n */\n function unregister(name: string): boolean {\n return kernel.unregister(name);\n }\n\n /**\n * List all registered plugins\n */\n function listPlugins(): PluginInfo[] {\n return kernel.listPlugins();\n }\n\n /**\n * Clear cache\n */\n async function clearCache(): Promise<void> {\n if (cache) {\n await cache.clear();\n }\n }\n\n /**\n * Get cache stats\n */\n async function getCacheStats(): Promise<CacheStats> {\n if (cache) {\n return cache.getStats();\n }\n return { entries: 0, size: 0, dir: '' };\n }\n\n const extractor: Extractor = {\n extract,\n fetch: fetchOnly,\n use,\n unregister,\n listPlugins,\n clearCache,\n getCacheStats,\n };\n\n return extractor;\n}\n\n/**\n * Create an extractor context\n */\nfunction createContext(pkg: PackageInfo, options: ExtractOptions): ExtractorContext {\n return {\n package: pkg,\n api: [],\n readme: undefined,\n changelog: undefined,\n options: {\n formats: options.formats ?? DEFAULT_FORMATS,\n enrichWithAI: options.enrichWithAI ?? false,\n aiTasks: options.aiTasks ?? ['descriptions', 'examples', 'summary'],\n llmsTokenLimit: options.llmsTokenLimit ?? 2000,\n prioritize: options.prioritize ?? ['functions', 'examples'],\n ignoreCache: options.ignoreCache ?? false,\n },\n outputs: new Map(),\n tokenCount: 0,\n truncated: false,\n startTime: Date.now(),\n fromCache: false,\n errors: [],\n };\n}\n\n/**\n * Quick extract function for simple use cases\n * @param packageSpec - Package specifier\n * @param options - Extract options\n * @returns Extract result\n * @example\n * ```typescript\n * const result = await extract('lodash');\n * console.log(result.outputs.llms);\n * ```\n */\nexport async function extract(\n packageSpec: string,\n options?: ExtractOptions\n): Promise<ExtractResult> {\n const extractor = createExtractor();\n return extractor.extract(packageSpec, options);\n}\n"]}
|