@eldrforge/kodrdriv 0.0.51 → 0.1.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.
Files changed (61) hide show
  1. package/README.md +2 -1
  2. package/dist/application.js +5 -3
  3. package/dist/application.js.map +1 -1
  4. package/dist/arguments.js +97 -70
  5. package/dist/arguments.js.map +1 -1
  6. package/dist/commands/audio-commit.js +7 -7
  7. package/dist/commands/audio-commit.js.map +1 -1
  8. package/dist/commands/audio-review.js +13 -13
  9. package/dist/commands/audio-review.js.map +1 -1
  10. package/dist/commands/clean.js +2 -2
  11. package/dist/commands/clean.js.map +1 -1
  12. package/dist/commands/commit.js +301 -36
  13. package/dist/commands/commit.js.map +1 -1
  14. package/dist/commands/link.js +7 -7
  15. package/dist/commands/link.js.map +1 -1
  16. package/dist/commands/publish.js +285 -306
  17. package/dist/commands/publish.js.map +1 -1
  18. package/dist/commands/release.js +171 -14
  19. package/dist/commands/release.js.map +1 -1
  20. package/dist/commands/review.js +52 -40
  21. package/dist/commands/review.js.map +1 -1
  22. package/dist/commands/select-audio.js +4 -4
  23. package/dist/commands/select-audio.js.map +1 -1
  24. package/dist/commands/tree.js +347 -34
  25. package/dist/commands/tree.js.map +1 -1
  26. package/dist/commands/unlink.js +5 -5
  27. package/dist/commands/unlink.js.map +1 -1
  28. package/dist/constants.js +28 -9
  29. package/dist/constants.js.map +1 -1
  30. package/dist/content/diff.js +122 -1
  31. package/dist/content/diff.js.map +1 -1
  32. package/dist/content/issues.js +17 -46
  33. package/dist/content/issues.js.map +1 -1
  34. package/dist/logging.js +3 -3
  35. package/dist/logging.js.map +1 -1
  36. package/dist/prompt/commit.js +2 -2
  37. package/dist/prompt/commit.js.map +1 -1
  38. package/dist/prompt/release.js +2 -2
  39. package/dist/prompt/release.js.map +1 -1
  40. package/dist/prompt/review.js +2 -2
  41. package/dist/prompt/review.js.map +1 -1
  42. package/dist/types.js +18 -5
  43. package/dist/types.js.map +1 -1
  44. package/dist/util/child.js +60 -4
  45. package/dist/util/child.js.map +1 -1
  46. package/dist/util/general.js +149 -13
  47. package/dist/util/general.js.map +1 -1
  48. package/dist/util/github.js +12 -8
  49. package/dist/util/github.js.map +1 -1
  50. package/dist/util/interactive.js +297 -0
  51. package/dist/util/interactive.js.map +1 -0
  52. package/dist/util/openai.js +87 -8
  53. package/dist/util/openai.js.map +1 -1
  54. package/dist/util/performance.js +8 -8
  55. package/dist/util/performance.js.map +1 -1
  56. package/dist/util/safety.js +4 -4
  57. package/dist/util/safety.js.map +1 -1
  58. package/dist/util/storage.js +2 -2
  59. package/dist/util/storage.js.map +1 -1
  60. package/package.json +6 -6
  61. package/test-increment.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sources":["../../src/commands/link.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport path from 'path';\nimport { ValidationError, CommandError } from '../error/CommandErrors';\nimport { getLogger, getDryRunLogger } from '../logging';\nimport { Config } from '../types';\nimport { create as createStorage } from '../util/storage';\nimport { safeJsonParse, validateLinkBackup, type LinkBackup } from '../util/validation';\nimport {\n PerformanceTimer,\n PackageJson,\n PackageJsonLocation,\n findAllPackageJsonFiles,\n scanDirectoryForPackages\n} from '../util/performance';\nimport { smartNpmInstall } from '../util/npmOptimizations';\n\ninterface ExtendedPackageJson extends PackageJson {\n overrides?: Record<string, string>;\n}\n\n\n\nconst EXCLUDED_DIRECTORIES = [\n 'node_modules',\n 'dist',\n 'build',\n 'coverage',\n '.git',\n '.next',\n '.nuxt',\n 'out',\n 'public',\n 'static',\n 'assets'\n];\n\nconst findPackagesToLink = async (scopeRoots: Record<string, string>, storage: any): Promise<Map<string, string>> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Finding packages to link');\n const packagesToLink = new Map<string, string>();\n\n logger.silly(`Finding packages to link from scope roots: ${JSON.stringify(scopeRoots)}`);\n\n // Scan all scope roots to build a comprehensive map of packages that can be linked\n const scopeTimer = PerformanceTimer.start(logger, 'Scanning all scope roots for linkable packages');\n const allScopePackages = new Map<string, string>(); // packageName -> relativePath\n\n // Process all scopes in parallel for better performance\n const scopePromises = Object.entries(scopeRoots).map(async ([scope, rootDir]) => {\n logger.verbose(`Scanning scope ${scope} at root directory: ${rootDir}`);\n const scopePackages = await scanDirectoryForPackages(rootDir, storage);\n\n // Add packages from this scope to the overall map\n const scopeResults: Array<[string, string]> = [];\n for (const [packageName, packagePath] of scopePackages) {\n if (packageName.startsWith(scope)) {\n scopeResults.push([packageName, packagePath]);\n logger.debug(`Linkable package: ${packageName} -> ${packagePath}`);\n }\n }\n return scopeResults;\n });\n\n const allScopeResults = await Promise.all(scopePromises);\n\n // Flatten results\n for (const scopeResults of allScopeResults) {\n for (const [packageName, packagePath] of scopeResults) {\n allScopePackages.set(packageName, packagePath);\n }\n }\n\n scopeTimer.end(`Scanned ${Object.keys(scopeRoots).length} scope roots, found ${allScopePackages.size} packages`);\n\n // Now we have all scope packages, we can resolve the ones we want to link\n for (const [packageName, packagePath] of allScopePackages) {\n packagesToLink.set(packageName, packagePath);\n }\n\n timer.end(`Found ${packagesToLink.size} packages to link`);\n return packagesToLink;\n};\n\nconst readLinkBackup = async (storage: any, logger?: any): Promise<LinkBackup> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n if (await storage.exists(backupPath)) {\n try {\n const content = await storage.readFile(backupPath, 'utf-8');\n return JSON.parse(content) as LinkBackup;\n } catch (error) {\n // Log warning but continue with empty backup instead of throwing\n if (logger) {\n logger.warn(`Failed to parse link backup file: ${error}`);\n }\n return {};\n }\n }\n return {};\n};\n\nconst writeLinkBackup = async (backup: LinkBackup, storage: any): Promise<void> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n await storage.writeFile(backupPath, JSON.stringify(backup, null, 2), 'utf-8');\n};\n\nconst updatePackageJson = async (\n packageJsonLocation: PackageJsonLocation,\n packagesToLink: Map<string, string>,\n backup: LinkBackup,\n storage: any\n): Promise<number> => {\n const logger = getLogger();\n let linkedCount = 0;\n const { packageJson, path: packageJsonPath, relativePath } = packageJsonLocation;\n\n // Process dependencies, devDependencies, and peerDependencies\n const depTypes: Array<keyof Pick<PackageJson, 'dependencies' | 'devDependencies' | 'peerDependencies'>> = [\n 'dependencies', 'devDependencies', 'peerDependencies'\n ];\n\n for (const depType of depTypes) {\n const dependencies = packageJson[depType];\n if (!dependencies) continue;\n\n for (const [packageName, targetPath] of packagesToLink) {\n if (dependencies[packageName]) {\n // Backup original version before linking\n const backupKey = `${relativePath}:${packageName}`;\n if (!backup[backupKey]) {\n backup[backupKey] = {\n originalVersion: dependencies[packageName],\n dependencyType: depType,\n relativePath\n };\n }\n\n // Update to file: dependency\n const targetAbsolutePath = path.resolve(process.cwd(), targetPath);\n const fileReferencePath = path.relative(path.dirname(packageJsonPath), targetAbsolutePath);\n dependencies[packageName] = `file:${fileReferencePath}`;\n linkedCount++;\n logger.verbose(`Linked ${relativePath}/${depType}.${packageName}: ${backup[backupKey].originalVersion} -> file:${fileReferencePath}`);\n }\n }\n }\n\n // NOTE: Don't write the file here - let the caller handle all modifications\n return linkedCount;\n};\n\nconst executeInternal = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || runConfig.link?.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const overallTimer = PerformanceTimer.start(logger, 'Link command execution');\n const storage = createStorage({ log: logger.info });\n\n logger.info('🔗 Linking workspace packages...');\n\n // Get configuration\n const configTimer = PerformanceTimer.start(logger, 'Reading configuration');\n const scopeRoots = runConfig.link?.scopeRoots || {};\n configTimer.end('Configuration loaded');\n\n if (Object.keys(scopeRoots).length === 0) {\n logger.info('No scope roots configured. Skipping link management.');\n overallTimer.end('Link command (no scope roots)');\n return 'No scope roots configured. Skipping link management.';\n }\n\n // Find all package.json files in current directory tree\n const packageJsonFiles = await findAllPackageJsonFiles(process.cwd(), storage);\n\n if (packageJsonFiles.length === 0) {\n overallTimer.end('Link command (no package.json files)');\n throw new ValidationError('No package.json files found in current directory or subdirectories.');\n }\n\n logger.info(`Found ${packageJsonFiles.length} package.json file(s) to process`);\n logger.info(`Scanning ${Object.keys(scopeRoots).length} scope root(s): ${Object.keys(scopeRoots).join(', ')}`);\n\n // Check if any package.json files already have file: dependencies (safety check)\n const safetyTimer = PerformanceTimer.start(logger, 'Safety check for existing file: dependencies');\n // checkForFileDependencies(packageJsonFiles); // This function is no longer imported\n safetyTimer.end('Safety check completed');\n\n // Collect all dependencies from all package.json files using optimized function\n // const allDependencies = collectAllDependencies(packageJsonFiles); // This function is no longer imported\n\n // logger.verbose(`Found ${Object.keys(allDependencies).length} total unique dependencies across all package.json files`);\n\n // Find matching sibling packages\n const packagesToLink = await findPackagesToLink(scopeRoots, storage);\n\n if (packagesToLink.size === 0) {\n logger.info('✅ No matching sibling packages found for linking.');\n overallTimer.end('Link command (no packages to link)');\n return 'No matching sibling packages found for linking.';\n }\n\n logger.info(`Found ${packagesToLink.size} package(s) to link: ${[...packagesToLink.keys()].join(', ')}`);\n\n // Read existing backup\n const backupTimer = PerformanceTimer.start(logger, 'Reading link backup');\n const backup = await readLinkBackup(storage, logger);\n backupTimer.end('Link backup loaded');\n\n if (isDryRun) {\n logger.info('Would update package.json files with file: dependencies and run npm install');\n for (const { relativePath } of packageJsonFiles) {\n logger.verbose(`Would process ${relativePath}/package.json`);\n }\n for (const [packageName, packagePath] of packagesToLink.entries()) {\n logger.verbose(`Would link ${packageName} -> file:${packagePath}`);\n }\n overallTimer.end('Link command (dry run)');\n return `DRY RUN: Would link ${packagesToLink.size} packages across ${packageJsonFiles.length} package.json files`;\n } else {\n // Update all package.json files with file: dependencies\n const updateTimer = PerformanceTimer.start(logger, 'Updating package.json files');\n let totalLinksCreated = 0;\n for (const packageJsonLocation of packageJsonFiles) {\n const linksCreated = await updatePackageJson(packageJsonLocation, packagesToLink, backup, storage);\n totalLinksCreated += linksCreated;\n\n // Write the modified package.json file to disk\n if (linksCreated > 0) {\n await storage.writeFile(packageJsonLocation.path, JSON.stringify(packageJsonLocation.packageJson, null, 2) + '\\n', 'utf-8');\n logger.verbose(`Updated ${packageJsonLocation.relativePath}/package.json with ${linksCreated} file: dependencies`);\n }\n }\n updateTimer.end(`Updated ${packageJsonFiles.length} package.json files, created ${totalLinksCreated} links`);\n\n if (totalLinksCreated === 0) {\n logger.info('✅ No dependencies were linked (packages may not be referenced).');\n overallTimer.end('Link command (no links created)');\n return 'No dependencies were linked.';\n }\n\n // Save backup after all changes\n const saveTimer = PerformanceTimer.start(logger, 'Saving link backup');\n await writeLinkBackup(backup, storage);\n saveTimer.end('Link backup saved');\n logger.info(`Updated ${packageJsonFiles.length} package.json file(s) with file: dependencies`);\n\n // Run optimized npm install to create symlinks\n logger.info('⏳ Installing dependencies to create symlinks...');\n try {\n const installResult = await smartNpmInstall({\n skipIfNotNeeded: false, // Always install after linking changes\n preferCi: false, // Use npm install to handle new file: dependencies\n verbose: false\n });\n\n if (installResult.skipped) {\n logger.info(`⚡ Dependencies were up to date (${installResult.method})`);\n } else {\n logger.info(`✅ Links applied successfully using ${installResult.method} (${installResult.duration}ms)`);\n }\n } catch (error) {\n logger.warn(`Failed to install dependencies: ${error}. You may need to run 'npm install' manually.`);\n }\n\n const summary = `Successfully linked ${totalLinksCreated} dependency reference(s) across ${packageJsonFiles.length} package.json file(s):\\n${[...packagesToLink.entries()].map(([name, path]) => ` - ${name}: file:${path}`).join('\\n')}`;\n\n overallTimer.end('Link command execution completed');\n return summary;\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n try {\n return await executeInternal(runConfig);\n } catch (error: any) {\n const logger = getLogger();\n\n if (error instanceof ValidationError || error instanceof CommandError) {\n logger.error(`link failed: ${error.message}`);\n if (error.cause) {\n logger.debug(`Caused by: ${error.cause.message}`);\n }\n process.exit(1);\n }\n\n // Unexpected errors\n logger.error(`link encountered unexpected error: ${error.message}`);\n process.exit(1);\n }\n};\n"],"names":["findPackagesToLink","scopeRoots","storage","logger","getLogger","timer","PerformanceTimer","start","packagesToLink","Map","silly","JSON","stringify","scopeTimer","allScopePackages","scopePromises","Object","entries","map","scope","rootDir","verbose","scopePackages","scanDirectoryForPackages","scopeResults","packageName","packagePath","startsWith","push","debug","allScopeResults","Promise","all","set","end","keys","length","size","readLinkBackup","backupPath","path","join","process","cwd","exists","content","readFile","parse","error","warn","writeLinkBackup","backup","writeFile","updatePackageJson","packageJsonLocation","linkedCount","packageJson","packageJsonPath","relativePath","depTypes","depType","dependencies","targetPath","backupKey","originalVersion","dependencyType","targetAbsolutePath","resolve","fileReferencePath","relative","dirname","executeInternal","runConfig","isDryRun","dryRun","link","getDryRunLogger","overallTimer","createStorage","log","info","configTimer","packageJsonFiles","findAllPackageJsonFiles","ValidationError","safetyTimer","backupTimer","updateTimer","totalLinksCreated","linksCreated","saveTimer","installResult","smartNpmInstall","skipIfNotNeeded","preferCi","skipped","method","duration","summary","name","execute","CommandError","message","cause","exit"],"mappings":"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"}
1
+ {"version":3,"file":"link.js","sources":["../../src/commands/link.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport path from 'path';\nimport { ValidationError, CommandError } from '../error/CommandErrors';\nimport { getLogger, getDryRunLogger } from '../logging';\nimport { Config } from '../types';\nimport { create as createStorage } from '../util/storage';\nimport { safeJsonParse, validateLinkBackup, type LinkBackup } from '../util/validation';\nimport {\n PerformanceTimer,\n PackageJson,\n PackageJsonLocation,\n findAllPackageJsonFiles,\n scanDirectoryForPackages\n} from '../util/performance';\nimport { smartNpmInstall } from '../util/npmOptimizations';\n\ninterface ExtendedPackageJson extends PackageJson {\n overrides?: Record<string, string>;\n}\n\n\n\nconst EXCLUDED_DIRECTORIES = [\n 'node_modules',\n 'dist',\n 'build',\n 'coverage',\n '.git',\n '.next',\n '.nuxt',\n 'out',\n 'public',\n 'static',\n 'assets'\n];\n\nconst findPackagesToLink = async (scopeRoots: Record<string, string>, storage: any): Promise<Map<string, string>> => {\n const logger = getLogger();\n const timer = PerformanceTimer.start(logger, 'Finding packages to link');\n const packagesToLink = new Map<string, string>();\n\n logger.silly(`Finding packages to link from scope roots: ${JSON.stringify(scopeRoots)}`);\n\n // Scan all scope roots to build a comprehensive map of packages that can be linked\n const scopeTimer = PerformanceTimer.start(logger, 'Scanning all scope roots for linkable packages');\n const allScopePackages = new Map<string, string>(); // packageName -> relativePath\n\n // Process all scopes in parallel for better performance\n const scopePromises = Object.entries(scopeRoots).map(async ([scope, rootDir]) => {\n logger.verbose(`Scanning scope ${scope} at root directory: ${rootDir}`);\n const scopePackages = await scanDirectoryForPackages(rootDir, storage);\n\n // Add packages from this scope to the overall map\n const scopeResults: Array<[string, string]> = [];\n for (const [packageName, packagePath] of scopePackages) {\n if (packageName.startsWith(scope)) {\n scopeResults.push([packageName, packagePath]);\n logger.debug(`Linkable package: ${packageName} -> ${packagePath}`);\n }\n }\n return scopeResults;\n });\n\n const allScopeResults = await Promise.all(scopePromises);\n\n // Flatten results\n for (const scopeResults of allScopeResults) {\n for (const [packageName, packagePath] of scopeResults) {\n allScopePackages.set(packageName, packagePath);\n }\n }\n\n scopeTimer.end(`Scanned ${Object.keys(scopeRoots).length} scope roots, found ${allScopePackages.size} packages`);\n\n // Now we have all scope packages, we can resolve the ones we want to link\n for (const [packageName, packagePath] of allScopePackages) {\n packagesToLink.set(packageName, packagePath);\n }\n\n timer.end(`Found ${packagesToLink.size} packages to link`);\n return packagesToLink;\n};\n\nconst readLinkBackup = async (storage: any, logger?: any): Promise<LinkBackup> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n if (await storage.exists(backupPath)) {\n try {\n const content = await storage.readFile(backupPath, 'utf-8');\n return JSON.parse(content) as LinkBackup;\n } catch (error) {\n // Log warning but continue with empty backup instead of throwing\n if (logger) {\n logger.warn(`Failed to parse link backup file: ${error}`);\n }\n return {};\n }\n }\n return {};\n};\n\nconst writeLinkBackup = async (backup: LinkBackup, storage: any): Promise<void> => {\n const backupPath = path.join(process.cwd(), '.kodrdriv-link-backup.json');\n await storage.writeFile(backupPath, JSON.stringify(backup, null, 2), 'utf-8');\n};\n\nconst updatePackageJson = async (\n packageJsonLocation: PackageJsonLocation,\n packagesToLink: Map<string, string>,\n backup: LinkBackup,\n storage: any\n): Promise<number> => {\n const logger = getLogger();\n let linkedCount = 0;\n const { packageJson, path: packageJsonPath, relativePath } = packageJsonLocation;\n\n // Process dependencies, devDependencies, and peerDependencies\n const depTypes: Array<keyof Pick<PackageJson, 'dependencies' | 'devDependencies' | 'peerDependencies'>> = [\n 'dependencies', 'devDependencies', 'peerDependencies'\n ];\n\n for (const depType of depTypes) {\n const dependencies = packageJson[depType];\n if (!dependencies) continue;\n\n for (const [packageName, targetPath] of packagesToLink) {\n if (dependencies[packageName]) {\n // Backup original version before linking\n const backupKey = `${relativePath}:${packageName}`;\n if (!backup[backupKey]) {\n backup[backupKey] = {\n originalVersion: dependencies[packageName],\n dependencyType: depType,\n relativePath\n };\n }\n\n // Update to file: dependency\n const targetAbsolutePath = path.resolve(process.cwd(), targetPath);\n const fileReferencePath = path.relative(path.dirname(packageJsonPath), targetAbsolutePath);\n dependencies[packageName] = `file:${fileReferencePath}`;\n linkedCount++;\n logger.verbose(`Linked ${relativePath}/${depType}.${packageName}: ${backup[backupKey].originalVersion} -> file:${fileReferencePath}`);\n }\n }\n }\n\n // NOTE: Don't write the file here - let the caller handle all modifications\n return linkedCount;\n};\n\nconst executeInternal = async (runConfig: Config): Promise<string> => {\n const isDryRun = runConfig.dryRun || runConfig.link?.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const overallTimer = PerformanceTimer.start(logger, 'Link command execution');\n const storage = createStorage({ log: logger.info });\n\n logger.info('🔗 Linking workspace packages...');\n\n // Get configuration\n const configTimer = PerformanceTimer.start(logger, 'Reading configuration');\n const scopeRoots = runConfig.link?.scopeRoots || {};\n configTimer.end('Configuration loaded');\n\n if (Object.keys(scopeRoots).length === 0) {\n logger.info('No scope roots configured. Skipping link management.');\n overallTimer.end('Link command (no scope roots)');\n return 'No scope roots configured. Skipping link management.';\n }\n\n // Find all package.json files in current directory tree\n const packageJsonFiles = await findAllPackageJsonFiles(process.cwd(), storage);\n\n if (packageJsonFiles.length === 0) {\n overallTimer.end('Link command (no package.json files)');\n throw new ValidationError('No package.json files found in current directory or subdirectories.');\n }\n\n logger.info(`Found ${packageJsonFiles.length} package.json file(s) to process`);\n logger.info(`Scanning ${Object.keys(scopeRoots).length} scope root(s): ${Object.keys(scopeRoots).join(', ')}`);\n\n // Check if any package.json files already have file: dependencies (safety check)\n const safetyTimer = PerformanceTimer.start(logger, 'Safety check for existing file: dependencies');\n // checkForFileDependencies(packageJsonFiles); // This function is no longer imported\n safetyTimer.end('Safety check completed');\n\n // Collect all dependencies from all package.json files using optimized function\n // const allDependencies = collectAllDependencies(packageJsonFiles); // This function is no longer imported\n\n // logger.verbose(`Found ${Object.keys(allDependencies).length} total unique dependencies across all package.json files`);\n\n // Find matching sibling packages\n const packagesToLink = await findPackagesToLink(scopeRoots, storage);\n\n if (packagesToLink.size === 0) {\n logger.info('✅ No matching sibling packages found for linking.');\n overallTimer.end('Link command (no packages to link)');\n return 'No matching sibling packages found for linking.';\n }\n\n logger.info(`Found ${packagesToLink.size} package(s) to link: ${[...packagesToLink.keys()].join(', ')}`);\n\n // Read existing backup\n const backupTimer = PerformanceTimer.start(logger, 'Reading link backup');\n const backup = await readLinkBackup(storage, logger);\n backupTimer.end('Link backup loaded');\n\n if (isDryRun) {\n logger.info('Would update package.json files with file: dependencies and run npm install');\n for (const { relativePath } of packageJsonFiles) {\n logger.verbose(`Would process ${relativePath}/package.json`);\n }\n for (const [packageName, packagePath] of packagesToLink.entries()) {\n logger.verbose(`Would link ${packageName} -> file:${packagePath}`);\n }\n overallTimer.end('Link command (dry run)');\n return `DRY RUN: Would link ${packagesToLink.size} packages across ${packageJsonFiles.length} package.json files`;\n } else {\n // Update all package.json files with file: dependencies\n const updateTimer = PerformanceTimer.start(logger, 'Updating package.json files');\n let totalLinksCreated = 0;\n for (const packageJsonLocation of packageJsonFiles) {\n const linksCreated = await updatePackageJson(packageJsonLocation, packagesToLink, backup, storage);\n totalLinksCreated += linksCreated;\n\n // Write the modified package.json file to disk\n if (linksCreated > 0) {\n await storage.writeFile(packageJsonLocation.path, JSON.stringify(packageJsonLocation.packageJson, null, 2) + '\\n', 'utf-8');\n logger.verbose(`Updated ${packageJsonLocation.relativePath}/package.json with ${linksCreated} file: dependencies`);\n }\n }\n updateTimer.end(`Updated ${packageJsonFiles.length} package.json files, created ${totalLinksCreated} links`);\n\n if (totalLinksCreated === 0) {\n logger.info('✅ No dependencies were linked (packages may not be referenced).');\n overallTimer.end('Link command (no links created)');\n return 'No dependencies were linked.';\n }\n\n // Save backup after all changes\n const saveTimer = PerformanceTimer.start(logger, 'Saving link backup');\n await writeLinkBackup(backup, storage);\n saveTimer.end('Link backup saved');\n logger.info(`Updated ${packageJsonFiles.length} package.json file(s) with file: dependencies`);\n\n // Run optimized npm install to create symlinks\n logger.info('⏳ Installing dependencies to create symlinks...');\n try {\n const installResult = await smartNpmInstall({\n skipIfNotNeeded: false, // Always install after linking changes\n preferCi: false, // Use npm install to handle new file: dependencies\n verbose: false\n });\n\n if (installResult.skipped) {\n logger.info(`⚡ Dependencies were up to date (${installResult.method})`);\n } else {\n logger.info(`✅ Links applied successfully using ${installResult.method} (${installResult.duration}ms)`);\n }\n } catch (error) {\n logger.warn(`Failed to install dependencies: ${error}. You may need to run 'npm install' manually.`);\n }\n\n const summary = `Successfully linked ${totalLinksCreated} dependency reference(s) across ${packageJsonFiles.length} package.json file(s):\\n${[...packagesToLink.entries()].map(([name, path]) => ` - ${name}: file:${path}`).join('\\n')}`;\n\n overallTimer.end('Link command execution completed');\n return summary;\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n try {\n return await executeInternal(runConfig);\n } catch (error: any) {\n const logger = getLogger();\n\n if (error instanceof ValidationError || error instanceof CommandError) {\n logger.error(`link failed: ${error.message}`);\n if (error.cause) {\n logger.debug(`Caused by: ${error.cause.message}`);\n }\n throw error;\n }\n\n // Unexpected errors\n logger.error(`link encountered unexpected error: ${error.message}`);\n throw error;\n }\n};\n"],"names":["findPackagesToLink","scopeRoots","storage","logger","getLogger","timer","PerformanceTimer","start","packagesToLink","Map","silly","JSON","stringify","scopeTimer","allScopePackages","scopePromises","Object","entries","map","scope","rootDir","verbose","scopePackages","scanDirectoryForPackages","scopeResults","packageName","packagePath","startsWith","push","debug","allScopeResults","Promise","all","set","end","keys","length","size","readLinkBackup","backupPath","path","join","process","cwd","exists","content","readFile","parse","error","warn","writeLinkBackup","backup","writeFile","updatePackageJson","packageJsonLocation","linkedCount","packageJson","packageJsonPath","relativePath","depTypes","depType","dependencies","targetPath","backupKey","originalVersion","dependencyType","targetAbsolutePath","resolve","fileReferencePath","relative","dirname","executeInternal","runConfig","isDryRun","dryRun","link","getDryRunLogger","overallTimer","createStorage","log","info","configTimer","packageJsonFiles","findAllPackageJsonFiles","ValidationError","safetyTimer","backupTimer","updateTimer","totalLinksCreated","linksCreated","saveTimer","installResult","smartNpmInstall","skipIfNotNeeded","preferCi","skipped","method","duration","summary","name","execute","CommandError","message","cause"],"mappings":"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"}