@xylabs/toolchain 7.10.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 (622) hide show
  1. package/dist/actions/analyze.mjs +140 -0
  2. package/dist/actions/analyze.mjs.map +1 -0
  3. package/dist/actions/build.mjs +173 -0
  4. package/dist/actions/build.mjs.map +1 -0
  5. package/dist/actions/claude-check.mjs +199 -0
  6. package/dist/actions/claude-check.mjs.map +1 -0
  7. package/dist/actions/claude-clean.mjs +70 -0
  8. package/dist/actions/claude-clean.mjs.map +1 -0
  9. package/dist/actions/claude-commands.mjs +126 -0
  10. package/dist/actions/claude-commands.mjs.map +1 -0
  11. package/dist/actions/claude-rules.mjs +151 -0
  12. package/dist/actions/claude-rules.mjs.map +1 -0
  13. package/dist/actions/claude-settings.mjs +99 -0
  14. package/dist/actions/claude-settings.mjs.map +1 -0
  15. package/dist/actions/claude-skills.mjs +131 -0
  16. package/dist/actions/claude-skills.mjs.map +1 -0
  17. package/dist/actions/clean-docs.mjs +66 -0
  18. package/dist/actions/clean-docs.mjs.map +1 -0
  19. package/dist/actions/clean-eslint.mjs +47 -0
  20. package/dist/actions/clean-eslint.mjs.map +1 -0
  21. package/dist/actions/clean.mjs +166 -0
  22. package/dist/actions/clean.mjs.map +1 -0
  23. package/dist/actions/compile.mjs +184 -0
  24. package/dist/actions/compile.mjs.map +1 -0
  25. package/dist/actions/copy-assets.mjs +81 -0
  26. package/dist/actions/copy-assets.mjs.map +1 -0
  27. package/dist/actions/cycle.mjs +275 -0
  28. package/dist/actions/cycle.mjs.map +1 -0
  29. package/dist/actions/dead.mjs +119 -0
  30. package/dist/actions/dead.mjs.map +1 -0
  31. package/dist/actions/deplint/checkPackage/checkPackage.mjs +1556 -0
  32. package/dist/actions/deplint/checkPackage/checkPackage.mjs.map +1 -0
  33. package/dist/actions/deplint/checkPackage/checkPackageTypes.mjs +1 -0
  34. package/dist/actions/deplint/checkPackage/checkPackageTypes.mjs.map +1 -0
  35. package/dist/actions/deplint/checkPackage/getMismatchedPeerDevVersions.mjs +77 -0
  36. package/dist/actions/deplint/checkPackage/getMismatchedPeerDevVersions.mjs.map +1 -0
  37. package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs +158 -0
  38. package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs.map +1 -0
  39. package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs +125 -0
  40. package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs.map +1 -0
  41. package/dist/actions/deplint/checkPackage/getUnnecessaryPeerDependencies.mjs +207 -0
  42. package/dist/actions/deplint/checkPackage/getUnnecessaryPeerDependencies.mjs.map +1 -0
  43. package/dist/actions/deplint/checkPackage/getUnsatisfiedPeerDependencies.mjs +318 -0
  44. package/dist/actions/deplint/checkPackage/getUnsatisfiedPeerDependencies.mjs.map +1 -0
  45. package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs +163 -0
  46. package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs.map +1 -0
  47. package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs +408 -0
  48. package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs.map +1 -0
  49. package/dist/actions/deplint/checkPackage/getUnusedPeerDependencies.mjs +75 -0
  50. package/dist/actions/deplint/checkPackage/getUnusedPeerDependencies.mjs.map +1 -0
  51. package/dist/actions/deplint/checkPackage/getWorkspaceVersionProblems.mjs +128 -0
  52. package/dist/actions/deplint/checkPackage/getWorkspaceVersionProblems.mjs.map +1 -0
  53. package/dist/actions/deplint/checkPackage/index.mjs +1609 -0
  54. package/dist/actions/deplint/checkPackage/index.mjs.map +1 -0
  55. package/dist/actions/deplint/deplint.mjs +1840 -0
  56. package/dist/actions/deplint/deplint.mjs.map +1 -0
  57. package/dist/actions/deplint/engine.mjs +1736 -0
  58. package/dist/actions/deplint/engine.mjs.map +1 -0
  59. package/dist/actions/deplint/findFiles.mjs +39 -0
  60. package/dist/actions/deplint/findFiles.mjs.map +1 -0
  61. package/dist/actions/deplint/findFilesByGlob.mjs +14 -0
  62. package/dist/actions/deplint/findFilesByGlob.mjs.map +1 -0
  63. package/dist/actions/deplint/fixer.mjs +103 -0
  64. package/dist/actions/deplint/fixer.mjs.map +1 -0
  65. package/dist/actions/deplint/getBasePackageName.mjs +13 -0
  66. package/dist/actions/deplint/getBasePackageName.mjs.map +1 -0
  67. package/dist/actions/deplint/getCliReferencedPackagesFromFiles.mjs +140 -0
  68. package/dist/actions/deplint/getCliReferencedPackagesFromFiles.mjs.map +1 -0
  69. package/dist/actions/deplint/getDependenciesFromPackageJson.mjs +29 -0
  70. package/dist/actions/deplint/getDependenciesFromPackageJson.mjs.map +1 -0
  71. package/dist/actions/deplint/getExtendsFromTsconfigs.mjs +68 -0
  72. package/dist/actions/deplint/getExtendsFromTsconfigs.mjs.map +1 -0
  73. package/dist/actions/deplint/getExternalImportsFromFiles.mjs +143 -0
  74. package/dist/actions/deplint/getExternalImportsFromFiles.mjs.map +1 -0
  75. package/dist/actions/deplint/getImportsFromFile.mjs +85 -0
  76. package/dist/actions/deplint/getImportsFromFile.mjs.map +1 -0
  77. package/dist/actions/deplint/getRequiredPeerDependencies.mjs +37 -0
  78. package/dist/actions/deplint/getRequiredPeerDependencies.mjs.map +1 -0
  79. package/dist/actions/deplint/getScriptReferencedPackages.mjs +83 -0
  80. package/dist/actions/deplint/getScriptReferencedPackages.mjs.map +1 -0
  81. package/dist/actions/deplint/implicitDevDependencies.mjs +116 -0
  82. package/dist/actions/deplint/implicitDevDependencies.mjs.map +1 -0
  83. package/dist/actions/deplint/index.mjs +1848 -0
  84. package/dist/actions/deplint/index.mjs.map +1 -0
  85. package/dist/actions/deplint/packageEditor.mjs +82 -0
  86. package/dist/actions/deplint/packageEditor.mjs.map +1 -0
  87. package/dist/actions/deplint/packageJsonEditor.mjs +101 -0
  88. package/dist/actions/deplint/packageJsonEditor.mjs.map +1 -0
  89. package/dist/actions/deplint/reporters.mjs +36 -0
  90. package/dist/actions/deplint/reporters.mjs.map +1 -0
  91. package/dist/actions/deplint/rules.mjs +1223 -0
  92. package/dist/actions/deplint/rules.mjs.map +1 -0
  93. package/dist/actions/deplint/snapshot.mjs +372 -0
  94. package/dist/actions/deplint/snapshot.mjs.map +1 -0
  95. package/dist/actions/deplint/tsScriptsAliases.mjs +20 -0
  96. package/dist/actions/deplint/tsScriptsAliases.mjs.map +1 -0
  97. package/dist/actions/deplint/types.mjs +1 -0
  98. package/dist/actions/deplint/types.mjs.map +1 -0
  99. package/dist/actions/deploy.mjs +194 -0
  100. package/dist/actions/deploy.mjs.map +1 -0
  101. package/dist/actions/dupdeps.mjs +226 -0
  102. package/dist/actions/dupdeps.mjs.map +1 -0
  103. package/dist/actions/eject.mjs +142 -0
  104. package/dist/actions/eject.mjs.map +1 -0
  105. package/dist/actions/fix.mjs +359 -0
  106. package/dist/actions/fix.mjs.map +1 -0
  107. package/dist/actions/gen-docs.mjs +155 -0
  108. package/dist/actions/gen-docs.mjs.map +1 -0
  109. package/dist/actions/gitignore.mjs +159 -0
  110. package/dist/actions/gitignore.mjs.map +1 -0
  111. package/dist/actions/gitlint-fix.mjs +27 -0
  112. package/dist/actions/gitlint-fix.mjs.map +1 -0
  113. package/dist/actions/gitlint.mjs +48 -0
  114. package/dist/actions/gitlint.mjs.map +1 -0
  115. package/dist/actions/index.mjs +8259 -0
  116. package/dist/actions/index.mjs.map +1 -0
  117. package/dist/actions/knip.mjs +119 -0
  118. package/dist/actions/knip.mjs.map +1 -0
  119. package/dist/actions/license.mjs +92 -0
  120. package/dist/actions/license.mjs.map +1 -0
  121. package/dist/actions/lint-init.mjs +275 -0
  122. package/dist/actions/lint-init.mjs.map +1 -0
  123. package/dist/actions/lint.mjs +356 -0
  124. package/dist/actions/lint.mjs.map +1 -0
  125. package/dist/actions/lintNext.mjs +209 -0
  126. package/dist/actions/lintNext.mjs.map +1 -0
  127. package/dist/actions/lintlint.mjs +341 -0
  128. package/dist/actions/lintlint.mjs.map +1 -0
  129. package/dist/actions/npmignore-gen.mjs +90 -0
  130. package/dist/actions/npmignore-gen.mjs.map +1 -0
  131. package/dist/actions/orphan.mjs +110 -0
  132. package/dist/actions/orphan.mjs.map +1 -0
  133. package/dist/actions/package/clean-outputs.mjs +50 -0
  134. package/dist/actions/package/clean-outputs.mjs.map +1 -0
  135. package/dist/actions/package/clean-typescript.mjs +50 -0
  136. package/dist/actions/package/clean-typescript.mjs.map +1 -0
  137. package/dist/actions/package/clean.mjs +69 -0
  138. package/dist/actions/package/clean.mjs.map +1 -0
  139. package/dist/actions/package/compile/XyConfig.mjs +32 -0
  140. package/dist/actions/package/compile/XyConfig.mjs.map +1 -0
  141. package/dist/actions/package/compile/buildEntries.mjs +53 -0
  142. package/dist/actions/package/compile/buildEntries.mjs.map +1 -0
  143. package/dist/actions/package/compile/compile.mjs +439 -0
  144. package/dist/actions/package/compile/compile.mjs.map +1 -0
  145. package/dist/actions/package/compile/copyTypeFiles.mjs +34 -0
  146. package/dist/actions/package/compile/copyTypeFiles.mjs.map +1 -0
  147. package/dist/actions/package/compile/deepMerge.mjs +27 -0
  148. package/dist/actions/package/compile/deepMerge.mjs.map +1 -0
  149. package/dist/actions/package/compile/getCompilerOptions.mjs +12 -0
  150. package/dist/actions/package/compile/getCompilerOptions.mjs.map +1 -0
  151. package/dist/actions/package/compile/index.mjs +472 -0
  152. package/dist/actions/package/compile/index.mjs.map +1 -0
  153. package/dist/actions/package/compile/inputs.mjs +22 -0
  154. package/dist/actions/package/compile/inputs.mjs.map +1 -0
  155. package/dist/actions/package/compile/packageCompileTsc.mjs +93 -0
  156. package/dist/actions/package/compile/packageCompileTsc.mjs.map +1 -0
  157. package/dist/actions/package/compile/packageCompileTscTypes.mjs +92 -0
  158. package/dist/actions/package/compile/packageCompileTscTypes.mjs.map +1 -0
  159. package/dist/actions/package/compile/packageCompileTsup.mjs +402 -0
  160. package/dist/actions/package/compile/packageCompileTsup.mjs.map +1 -0
  161. package/dist/actions/package/copy-assets.mjs +69 -0
  162. package/dist/actions/package/copy-assets.mjs.map +1 -0
  163. package/dist/actions/package/cycle.mjs +62 -0
  164. package/dist/actions/package/cycle.mjs.map +1 -0
  165. package/dist/actions/package/gen-docs.mjs +137 -0
  166. package/dist/actions/package/gen-docs.mjs.map +1 -0
  167. package/dist/actions/package/index.mjs +1131 -0
  168. package/dist/actions/package/index.mjs.map +1 -0
  169. package/dist/actions/package/lint.mjs +87 -0
  170. package/dist/actions/package/lint.mjs.map +1 -0
  171. package/dist/actions/package/publint.mjs +336 -0
  172. package/dist/actions/package/publint.mjs.map +1 -0
  173. package/dist/actions/package/recompile.mjs +510 -0
  174. package/dist/actions/package/recompile.mjs.map +1 -0
  175. package/dist/actions/package-lint-deps.mjs +348 -0
  176. package/dist/actions/package-lint-deps.mjs.map +1 -0
  177. package/dist/actions/package-lint.mjs +774 -0
  178. package/dist/actions/package-lint.mjs.map +1 -0
  179. package/dist/actions/packman/clean.mjs +144 -0
  180. package/dist/actions/packman/clean.mjs.map +1 -0
  181. package/dist/actions/packman/convert.mjs +1331 -0
  182. package/dist/actions/packman/convert.mjs.map +1 -0
  183. package/dist/actions/packman/convertToPnpm.mjs +295 -0
  184. package/dist/actions/packman/convertToPnpm.mjs.map +1 -0
  185. package/dist/actions/packman/convertToYarn.mjs +307 -0
  186. package/dist/actions/packman/convertToYarn.mjs.map +1 -0
  187. package/dist/actions/packman/index.mjs +1493 -0
  188. package/dist/actions/packman/index.mjs.map +1 -0
  189. package/dist/actions/packman/lint.mjs +109 -0
  190. package/dist/actions/packman/lint.mjs.map +1 -0
  191. package/dist/actions/packman/rewriteScripts.mjs +52 -0
  192. package/dist/actions/packman/rewriteScripts.mjs.map +1 -0
  193. package/dist/actions/packman/rewriteSourceImports.mjs +60 -0
  194. package/dist/actions/packman/rewriteSourceImports.mjs.map +1 -0
  195. package/dist/actions/packman/swapTsScriptsDependency.mjs +57 -0
  196. package/dist/actions/packman/swapTsScriptsDependency.mjs.map +1 -0
  197. package/dist/actions/publint.mjs +748 -0
  198. package/dist/actions/publint.mjs.map +1 -0
  199. package/dist/actions/publish.mjs +208 -0
  200. package/dist/actions/publish.mjs.map +1 -0
  201. package/dist/actions/reactTest.mjs +142 -0
  202. package/dist/actions/reactTest.mjs.map +1 -0
  203. package/dist/actions/readme-gen.mjs +362 -0
  204. package/dist/actions/readme-gen.mjs.map +1 -0
  205. package/dist/actions/readme-init.mjs +89 -0
  206. package/dist/actions/readme-init.mjs.map +1 -0
  207. package/dist/actions/readme-lint.mjs +147 -0
  208. package/dist/actions/readme-lint.mjs.map +1 -0
  209. package/dist/actions/rebuild.mjs +143 -0
  210. package/dist/actions/rebuild.mjs.map +1 -0
  211. package/dist/actions/recompile.mjs +196 -0
  212. package/dist/actions/recompile.mjs.map +1 -0
  213. package/dist/actions/reinstall.mjs +283 -0
  214. package/dist/actions/reinstall.mjs.map +1 -0
  215. package/dist/actions/relint.mjs +355 -0
  216. package/dist/actions/relint.mjs.map +1 -0
  217. package/dist/actions/repo-init.mjs +217 -0
  218. package/dist/actions/repo-init.mjs.map +1 -0
  219. package/dist/actions/retest.mjs +150 -0
  220. package/dist/actions/retest.mjs.map +1 -0
  221. package/dist/actions/sitemap.mjs +121 -0
  222. package/dist/actions/sitemap.mjs.map +1 -0
  223. package/dist/actions/sonar.mjs +119 -0
  224. package/dist/actions/sonar.mjs.map +1 -0
  225. package/dist/actions/start.mjs +142 -0
  226. package/dist/actions/start.mjs.map +1 -0
  227. package/dist/actions/statics.mjs +225 -0
  228. package/dist/actions/statics.mjs.map +1 -0
  229. package/dist/actions/test.mjs +144 -0
  230. package/dist/actions/test.mjs.map +1 -0
  231. package/dist/actions/up.mjs +140 -0
  232. package/dist/actions/up.mjs.map +1 -0
  233. package/dist/actions/updo.mjs +533 -0
  234. package/dist/actions/updo.mjs.map +1 -0
  235. package/dist/actions/upplug.mjs +124 -0
  236. package/dist/actions/upplug.mjs.map +1 -0
  237. package/dist/actions/upyarn.mjs +119 -0
  238. package/dist/actions/upyarn.mjs.map +1 -0
  239. package/dist/actions/yarn3only.mjs +60 -0
  240. package/dist/actions/yarn3only.mjs.map +1 -0
  241. package/dist/bin/package/build-only.mjs +451 -0
  242. package/dist/bin/package/build-only.mjs.map +1 -0
  243. package/dist/bin/package/build.mjs +451 -0
  244. package/dist/bin/package/build.mjs.map +1 -0
  245. package/dist/bin/package/clean-outputs.mjs +50 -0
  246. package/dist/bin/package/clean-outputs.mjs.map +1 -0
  247. package/dist/bin/package/clean-typescript.mjs +50 -0
  248. package/dist/bin/package/clean-typescript.mjs.map +1 -0
  249. package/dist/bin/package/clean.mjs +75 -0
  250. package/dist/bin/package/clean.mjs.map +1 -0
  251. package/dist/bin/package/compile-only.mjs +447 -0
  252. package/dist/bin/package/compile-only.mjs.map +1 -0
  253. package/dist/bin/package/compile-tsup.mjs +409 -0
  254. package/dist/bin/package/compile-tsup.mjs.map +1 -0
  255. package/dist/bin/package/compile.mjs +451 -0
  256. package/dist/bin/package/compile.mjs.map +1 -0
  257. package/dist/bin/package/copy-assets-cjs.mjs +75 -0
  258. package/dist/bin/package/copy-assets-cjs.mjs.map +1 -0
  259. package/dist/bin/package/copy-assets-esm.mjs +75 -0
  260. package/dist/bin/package/copy-assets-esm.mjs.map +1 -0
  261. package/dist/bin/package/cycle.mjs +72 -0
  262. package/dist/bin/package/cycle.mjs.map +1 -0
  263. package/dist/bin/package/fix.mjs +97 -0
  264. package/dist/bin/package/fix.mjs.map +1 -0
  265. package/dist/bin/package/gen-docs.mjs +142 -0
  266. package/dist/bin/package/gen-docs.mjs.map +1 -0
  267. package/dist/bin/package/lint-verbose.mjs +97 -0
  268. package/dist/bin/package/lint-verbose.mjs.map +1 -0
  269. package/dist/bin/package/lint.mjs +97 -0
  270. package/dist/bin/package/lint.mjs.map +1 -0
  271. package/dist/bin/package/publint.mjs +423 -0
  272. package/dist/bin/package/publint.mjs.map +1 -0
  273. package/dist/bin/package/recompile.mjs +516 -0
  274. package/dist/bin/package/recompile.mjs.map +1 -0
  275. package/dist/bin/package/relint.mjs +97 -0
  276. package/dist/bin/package/relint.mjs.map +1 -0
  277. package/dist/bin/run-or-exec.mjs +20 -0
  278. package/dist/bin/run-or-exec.mjs.map +1 -0
  279. package/dist/bin/xy.mjs +8885 -0
  280. package/dist/bin/xy.mjs.map +1 -0
  281. package/dist/index.d.ts +1102 -0
  282. package/dist/index.mjs +9986 -0
  283. package/dist/index.mjs.map +1 -0
  284. package/dist/lib/checkResult.mjs +16 -0
  285. package/dist/lib/checkResult.mjs.map +1 -0
  286. package/dist/lib/claudeMdTemplate.mjs +69 -0
  287. package/dist/lib/claudeMdTemplate.mjs.map +1 -0
  288. package/dist/lib/concurrency.mjs +38 -0
  289. package/dist/lib/concurrency.mjs.map +1 -0
  290. package/dist/lib/createBuildConfig.mjs +55 -0
  291. package/dist/lib/createBuildConfig.mjs.map +1 -0
  292. package/dist/lib/defaultBuildConfig.mjs +23 -0
  293. package/dist/lib/defaultBuildConfig.mjs.map +1 -0
  294. package/dist/lib/deleteGlob.mjs +13 -0
  295. package/dist/lib/deleteGlob.mjs.map +1 -0
  296. package/dist/lib/dependencies/DuplicateDetector.mjs +99 -0
  297. package/dist/lib/dependencies/DuplicateDetector.mjs.map +1 -0
  298. package/dist/lib/dependencies/detectDuplicateDependencies.mjs +203 -0
  299. package/dist/lib/dependencies/detectDuplicateDependencies.mjs.map +1 -0
  300. package/dist/lib/dependencies/index.mjs +281 -0
  301. package/dist/lib/dependencies/index.mjs.map +1 -0
  302. package/dist/lib/dependencies/workspaceCycles.mjs +79 -0
  303. package/dist/lib/dependencies/workspaceCycles.mjs.map +1 -0
  304. package/dist/lib/file/ReadFileSyncOptions.mjs +6 -0
  305. package/dist/lib/file/ReadFileSyncOptions.mjs.map +1 -0
  306. package/dist/lib/file/constants.mjs +8 -0
  307. package/dist/lib/file/constants.mjs.map +1 -0
  308. package/dist/lib/file/fileLines.mjs +32 -0
  309. package/dist/lib/file/fileLines.mjs.map +1 -0
  310. package/dist/lib/file/index.mjs +42 -0
  311. package/dist/lib/file/index.mjs.map +1 -0
  312. package/dist/lib/file/tryReadFileSync.mjs +14 -0
  313. package/dist/lib/file/tryReadFileSync.mjs.map +1 -0
  314. package/dist/lib/fillTemplate.mjs +8 -0
  315. package/dist/lib/fillTemplate.mjs.map +1 -0
  316. package/dist/lib/generateIgnoreFiles.mjs +86 -0
  317. package/dist/lib/generateIgnoreFiles.mjs.map +1 -0
  318. package/dist/lib/generateReadmeFiles.mjs +323 -0
  319. package/dist/lib/generateReadmeFiles.mjs.map +1 -0
  320. package/dist/lib/gitignoreTemplate.mjs +12 -0
  321. package/dist/lib/gitignoreTemplate.mjs.map +1 -0
  322. package/dist/lib/index.mjs +1627 -0
  323. package/dist/lib/index.mjs.map +1 -0
  324. package/dist/lib/initCwd.mjs +8 -0
  325. package/dist/lib/initCwd.mjs.map +1 -0
  326. package/dist/lib/jsonFormatters.mjs +11 -0
  327. package/dist/lib/jsonFormatters.mjs.map +1 -0
  328. package/dist/lib/latestVersions.mjs +12 -0
  329. package/dist/lib/latestVersions.mjs.map +1 -0
  330. package/dist/lib/loadConfig.mjs +72 -0
  331. package/dist/lib/loadConfig.mjs.map +1 -0
  332. package/dist/lib/packageName.mjs +26 -0
  333. package/dist/lib/packageName.mjs.map +1 -0
  334. package/dist/lib/parsedPackageJSON.mjs +11 -0
  335. package/dist/lib/parsedPackageJSON.mjs.map +1 -0
  336. package/dist/lib/processEx.mjs +36 -0
  337. package/dist/lib/processEx.mjs.map +1 -0
  338. package/dist/lib/repoTemplates.mjs +34 -0
  339. package/dist/lib/repoTemplates.mjs.map +1 -0
  340. package/dist/lib/runInstall.mjs +30 -0
  341. package/dist/lib/runInstall.mjs.map +1 -0
  342. package/dist/lib/runSteps.mjs +118 -0
  343. package/dist/lib/runSteps.mjs.map +1 -0
  344. package/dist/lib/runStepsAsync.mjs +136 -0
  345. package/dist/lib/runStepsAsync.mjs.map +1 -0
  346. package/dist/lib/runXy.mjs +147 -0
  347. package/dist/lib/runXy.mjs.map +1 -0
  348. package/dist/lib/runXyWithWarning.mjs +36 -0
  349. package/dist/lib/runXyWithWarning.mjs.map +1 -0
  350. package/dist/lib/safeExit.mjs +61 -0
  351. package/dist/lib/safeExit.mjs.map +1 -0
  352. package/dist/lib/string/empty.mjs +8 -0
  353. package/dist/lib/string/empty.mjs.map +1 -0
  354. package/dist/lib/string/index.mjs +12 -0
  355. package/dist/lib/string/index.mjs.map +1 -0
  356. package/dist/lib/string/union.mjs +6 -0
  357. package/dist/lib/string/union.mjs.map +1 -0
  358. package/dist/lib/tryRunLocalScript.mjs +57 -0
  359. package/dist/lib/tryRunLocalScript.mjs.map +1 -0
  360. package/dist/lib/updo/applyUpdates.mjs +44 -0
  361. package/dist/lib/updo/applyUpdates.mjs.map +1 -0
  362. package/dist/lib/updo/collectWorkspaceDeps.mjs +48 -0
  363. package/dist/lib/updo/collectWorkspaceDeps.mjs.map +1 -0
  364. package/dist/lib/updo/fetchRegistryInfo.mjs +53 -0
  365. package/dist/lib/updo/fetchRegistryInfo.mjs.map +1 -0
  366. package/dist/lib/updo/index.mjs +594 -0
  367. package/dist/lib/updo/index.mjs.map +1 -0
  368. package/dist/lib/updo/interactiveSelect.mjs +185 -0
  369. package/dist/lib/updo/interactiveSelect.mjs.map +1 -0
  370. package/dist/lib/updo/interfaces.mjs +1 -0
  371. package/dist/lib/updo/interfaces.mjs.map +1 -0
  372. package/dist/lib/updo/renderTable.mjs +79 -0
  373. package/dist/lib/updo/renderTable.mjs.map +1 -0
  374. package/dist/lib/updo/resolveVersions.mjs +49 -0
  375. package/dist/lib/updo/resolveVersions.mjs.map +1 -0
  376. package/dist/lib/updo/runUpdo.mjs +511 -0
  377. package/dist/lib/updo/runUpdo.mjs.map +1 -0
  378. package/dist/lib/withErrnoException.mjs +13 -0
  379. package/dist/lib/withErrnoException.mjs.map +1 -0
  380. package/dist/lib/withError.mjs +8 -0
  381. package/dist/lib/withError.mjs.map +1 -0
  382. package/dist/lib/yarn/index.mjs +39 -0
  383. package/dist/lib/yarn/index.mjs.map +1 -0
  384. package/dist/lib/yarn/isYarnVersionOrGreater.mjs +18 -0
  385. package/dist/lib/yarn/isYarnVersionOrGreater.mjs.map +1 -0
  386. package/dist/lib/yarn/workspace/Workspace.mjs +1 -0
  387. package/dist/lib/yarn/workspace/Workspace.mjs.map +1 -0
  388. package/dist/lib/yarn/workspace/index.mjs +23 -0
  389. package/dist/lib/yarn/workspace/index.mjs.map +1 -0
  390. package/dist/lib/yarn/workspace/yarnWorkspace.mjs +22 -0
  391. package/dist/lib/yarn/workspace/yarnWorkspace.mjs.map +1 -0
  392. package/dist/lib/yarn/workspace/yarnWorkspaces.mjs +15 -0
  393. package/dist/lib/yarn/workspace/yarnWorkspaces.mjs.map +1 -0
  394. package/dist/lib/yarn/yarnInitCwd.mjs +8 -0
  395. package/dist/lib/yarn/yarnInitCwd.mjs.map +1 -0
  396. package/dist/loadPackageConfig.mjs +18 -0
  397. package/dist/loadPackageConfig.mjs.map +1 -0
  398. package/dist/pm/PackageManager.mjs +1 -0
  399. package/dist/pm/PackageManager.mjs.map +1 -0
  400. package/dist/pm/detectPackageManager.mjs +10 -0
  401. package/dist/pm/detectPackageManager.mjs.map +1 -0
  402. package/dist/pm/detectReact.mjs +52 -0
  403. package/dist/pm/detectReact.mjs.map +1 -0
  404. package/dist/pm/index.mjs +263 -0
  405. package/dist/pm/index.mjs.map +1 -0
  406. package/dist/pm/pnpmPackageManager.mjs +97 -0
  407. package/dist/pm/pnpmPackageManager.mjs.map +1 -0
  408. package/dist/pm/registry.mjs +27 -0
  409. package/dist/pm/registry.mjs.map +1 -0
  410. package/dist/pm/yarnPackageManager.mjs +112 -0
  411. package/dist/pm/yarnPackageManager.mjs.map +1 -0
  412. package/dist/types.d.mjs +1 -0
  413. package/dist/types.d.mjs.map +1 -0
  414. package/dist/xy/build/buildCommand.mjs +194 -0
  415. package/dist/xy/build/buildCommand.mjs.map +1 -0
  416. package/dist/xy/build/compileCommand.mjs +203 -0
  417. package/dist/xy/build/compileCommand.mjs.map +1 -0
  418. package/dist/xy/build/compileOnlyCommand.mjs +204 -0
  419. package/dist/xy/build/compileOnlyCommand.mjs.map +1 -0
  420. package/dist/xy/build/copyAssetsCommand.mjs +92 -0
  421. package/dist/xy/build/copyAssetsCommand.mjs.map +1 -0
  422. package/dist/xy/build/index.mjs +487 -0
  423. package/dist/xy/build/index.mjs.map +1 -0
  424. package/dist/xy/build/rebuildCommand.mjs +156 -0
  425. package/dist/xy/build/rebuildCommand.mjs.map +1 -0
  426. package/dist/xy/build/recompileCommand.mjs +215 -0
  427. package/dist/xy/build/recompileCommand.mjs.map +1 -0
  428. package/dist/xy/common/checkCommand.mjs +1909 -0
  429. package/dist/xy/common/checkCommand.mjs.map +1 -0
  430. package/dist/xy/common/claude/checkCommand.mjs +207 -0
  431. package/dist/xy/common/claude/checkCommand.mjs.map +1 -0
  432. package/dist/xy/common/claude/cleanCommand.mjs +78 -0
  433. package/dist/xy/common/claude/cleanCommand.mjs.map +1 -0
  434. package/dist/xy/common/claude/commandsCommand.mjs +134 -0
  435. package/dist/xy/common/claude/commandsCommand.mjs.map +1 -0
  436. package/dist/xy/common/claude/index.mjs +734 -0
  437. package/dist/xy/common/claude/index.mjs.map +1 -0
  438. package/dist/xy/common/claude/initCommand.mjs +458 -0
  439. package/dist/xy/common/claude/initCommand.mjs.map +1 -0
  440. package/dist/xy/common/claude/rulesCommand.mjs +167 -0
  441. package/dist/xy/common/claude/rulesCommand.mjs.map +1 -0
  442. package/dist/xy/common/claude/settingsCommand.mjs +115 -0
  443. package/dist/xy/common/claude/settingsCommand.mjs.map +1 -0
  444. package/dist/xy/common/claude/skillsCommand.mjs +140 -0
  445. package/dist/xy/common/claude/skillsCommand.mjs.map +1 -0
  446. package/dist/xy/common/cleanDocsCommand.mjs +74 -0
  447. package/dist/xy/common/cleanDocsCommand.mjs.map +1 -0
  448. package/dist/xy/common/deadCommand.mjs +137 -0
  449. package/dist/xy/common/deadCommand.mjs.map +1 -0
  450. package/dist/xy/common/genDocsCommand.mjs +175 -0
  451. package/dist/xy/common/genDocsCommand.mjs.map +1 -0
  452. package/dist/xy/common/gitignoreCommand.mjs +165 -0
  453. package/dist/xy/common/gitignoreCommand.mjs.map +1 -0
  454. package/dist/xy/common/gitlintCommand.mjs +89 -0
  455. package/dist/xy/common/gitlintCommand.mjs.map +1 -0
  456. package/dist/xy/common/index.mjs +4654 -0
  457. package/dist/xy/common/index.mjs.map +1 -0
  458. package/dist/xy/common/licenseCommand.mjs +108 -0
  459. package/dist/xy/common/licenseCommand.mjs.map +1 -0
  460. package/dist/xy/common/npmignoreGenCommand.mjs +100 -0
  461. package/dist/xy/common/npmignoreGenCommand.mjs.map +1 -0
  462. package/dist/xy/common/orphan/cleanCommand.mjs +102 -0
  463. package/dist/xy/common/orphan/cleanCommand.mjs.map +1 -0
  464. package/dist/xy/common/orphan/index.mjs +138 -0
  465. package/dist/xy/common/orphan/index.mjs.map +1 -0
  466. package/dist/xy/common/orphan/listCommand.mjs +100 -0
  467. package/dist/xy/common/orphan/listCommand.mjs.map +1 -0
  468. package/dist/xy/common/packmanCommand.mjs +1538 -0
  469. package/dist/xy/common/packmanCommand.mjs.map +1 -0
  470. package/dist/xy/common/readme/genCommand.mjs +395 -0
  471. package/dist/xy/common/readme/genCommand.mjs.map +1 -0
  472. package/dist/xy/common/readme/index.mjs +538 -0
  473. package/dist/xy/common/readme/index.mjs.map +1 -0
  474. package/dist/xy/common/readme/initCommand.mjs +109 -0
  475. package/dist/xy/common/readme/initCommand.mjs.map +1 -0
  476. package/dist/xy/common/readme/lintCommand.mjs +181 -0
  477. package/dist/xy/common/readme/lintCommand.mjs.map +1 -0
  478. package/dist/xy/common/repo/index.mjs +1070 -0
  479. package/dist/xy/common/repo/index.mjs.map +1 -0
  480. package/dist/xy/common/repo/initCommand.mjs +273 -0
  481. package/dist/xy/common/repo/initCommand.mjs.map +1 -0
  482. package/dist/xy/common/repo/lintCommand.mjs +789 -0
  483. package/dist/xy/common/repo/lintCommand.mjs.map +1 -0
  484. package/dist/xy/common/retestCommand.mjs +163 -0
  485. package/dist/xy/common/retestCommand.mjs.map +1 -0
  486. package/dist/xy/common/testCommand.mjs +157 -0
  487. package/dist/xy/common/testCommand.mjs.map +1 -0
  488. package/dist/xy/deploy/deployCommand.mjs +214 -0
  489. package/dist/xy/deploy/deployCommand.mjs.map +1 -0
  490. package/dist/xy/deploy/index.mjs +289 -0
  491. package/dist/xy/deploy/index.mjs.map +1 -0
  492. package/dist/xy/deploy/publishCommand.mjs +218 -0
  493. package/dist/xy/deploy/publishCommand.mjs.map +1 -0
  494. package/dist/xy/index.mjs +8887 -0
  495. package/dist/xy/index.mjs.map +1 -0
  496. package/dist/xy/install/cleanCommand.mjs +182 -0
  497. package/dist/xy/install/cleanCommand.mjs.map +1 -0
  498. package/dist/xy/install/dupdepsCommand.mjs +234 -0
  499. package/dist/xy/install/dupdepsCommand.mjs.map +1 -0
  500. package/dist/xy/install/index.mjs +1006 -0
  501. package/dist/xy/install/index.mjs.map +1 -0
  502. package/dist/xy/install/reinstallCommand.mjs +292 -0
  503. package/dist/xy/install/reinstallCommand.mjs.map +1 -0
  504. package/dist/xy/install/staticsCommand.mjs +233 -0
  505. package/dist/xy/install/staticsCommand.mjs.map +1 -0
  506. package/dist/xy/install/upCommand.mjs +150 -0
  507. package/dist/xy/install/upCommand.mjs.map +1 -0
  508. package/dist/xy/install/updoCommand.mjs +550 -0
  509. package/dist/xy/install/updoCommand.mjs.map +1 -0
  510. package/dist/xy/lint/cycleCommand.mjs +289 -0
  511. package/dist/xy/lint/cycleCommand.mjs.map +1 -0
  512. package/dist/xy/lint/deplintCommand.mjs +1897 -0
  513. package/dist/xy/lint/deplintCommand.mjs.map +1 -0
  514. package/dist/xy/lint/fixCommand.mjs +398 -0
  515. package/dist/xy/lint/fixCommand.mjs.map +1 -0
  516. package/dist/xy/lint/index.mjs +3759 -0
  517. package/dist/xy/lint/index.mjs.map +1 -0
  518. package/dist/xy/lint/knipCommand.mjs +142 -0
  519. package/dist/xy/lint/knipCommand.mjs.map +1 -0
  520. package/dist/xy/lint/lint/index.mjs +695 -0
  521. package/dist/xy/lint/lint/index.mjs.map +1 -0
  522. package/dist/xy/lint/lint/initCommand.mjs +282 -0
  523. package/dist/xy/lint/lint/initCommand.mjs.map +1 -0
  524. package/dist/xy/lint/lint/runCommand.mjs +405 -0
  525. package/dist/xy/lint/lint/runCommand.mjs.map +1 -0
  526. package/dist/xy/lint/lintCommand.mjs +695 -0
  527. package/dist/xy/lint/lintCommand.mjs.map +1 -0
  528. package/dist/xy/lint/lintlintCommand.mjs +359 -0
  529. package/dist/xy/lint/lintlintCommand.mjs.map +1 -0
  530. package/dist/xy/lint/publintCommand.mjs +778 -0
  531. package/dist/xy/lint/publintCommand.mjs.map +1 -0
  532. package/dist/xy/lint/relintCommand.mjs +381 -0
  533. package/dist/xy/lint/relintCommand.mjs.map +1 -0
  534. package/dist/xy/lint/sonarCommand.mjs +137 -0
  535. package/dist/xy/lint/sonarCommand.mjs.map +1 -0
  536. package/dist/xy/param.mjs +8 -0
  537. package/dist/xy/param.mjs.map +1 -0
  538. package/dist/xy/react/analyzeCommand.mjs +150 -0
  539. package/dist/xy/react/analyzeCommand.mjs.map +1 -0
  540. package/dist/xy/react/ejectCommand.mjs +150 -0
  541. package/dist/xy/react/ejectCommand.mjs.map +1 -0
  542. package/dist/xy/react/index.mjs +202 -0
  543. package/dist/xy/react/index.mjs.map +1 -0
  544. package/dist/xy/react/sitemapCommand.mjs +129 -0
  545. package/dist/xy/react/sitemapCommand.mjs.map +1 -0
  546. package/dist/xy/react/startCommand.mjs +150 -0
  547. package/dist/xy/react/startCommand.mjs.map +1 -0
  548. package/dist/xy/xy.mjs +8879 -0
  549. package/dist/xy/xy.mjs.map +1 -0
  550. package/dist/xy/xyParseOptions.mjs +117 -0
  551. package/dist/xy/xyParseOptions.mjs.map +1 -0
  552. package/dist/xy/yarn/index.mjs +188 -0
  553. package/dist/xy/yarn/index.mjs.map +1 -0
  554. package/dist/xy/yarn/upplugCommand.mjs +134 -0
  555. package/dist/xy/yarn/upplugCommand.mjs.map +1 -0
  556. package/dist/xy/yarn/upyarnCommand.mjs +129 -0
  557. package/dist/xy/yarn/upyarnCommand.mjs.map +1 -0
  558. package/dist/xy/yarn/yarn3OnlyCommand.mjs +70 -0
  559. package/dist/xy/yarn/yarn3OnlyCommand.mjs.map +1 -0
  560. package/package.json +119 -0
  561. package/templates/claude/CLAUDE-local.md +4 -0
  562. package/templates/claude/CLAUDE-project.md +4 -0
  563. package/templates/claude/commands/xy-build.md +7 -0
  564. package/templates/claude/commands/xy-clean.md +7 -0
  565. package/templates/claude/commands/xy-compile.md +7 -0
  566. package/templates/claude/commands/xy-cycle.md +7 -0
  567. package/templates/claude/commands/xy-dead.md +7 -0
  568. package/templates/claude/commands/xy-deplint.md +7 -0
  569. package/templates/claude/commands/xy-deps.md +24 -0
  570. package/templates/claude/commands/xy-dupdeps.md +7 -0
  571. package/templates/claude/commands/xy-fix.md +7 -0
  572. package/templates/claude/commands/xy-gen-docs.md +7 -0
  573. package/templates/claude/commands/xy-gitignore.md +7 -0
  574. package/templates/claude/commands/xy-gitlint.md +7 -0
  575. package/templates/claude/commands/xy-knip.md +7 -0
  576. package/templates/claude/commands/xy-license.md +7 -0
  577. package/templates/claude/commands/xy-lint-rules.md +44 -0
  578. package/templates/claude/commands/xy-lint.md +7 -0
  579. package/templates/claude/commands/xy-publint.md +7 -0
  580. package/templates/claude/commands/xy-rebuild.md +7 -0
  581. package/templates/claude/commands/xy-recompile.md +7 -0
  582. package/templates/claude/commands/xy-reinstall.md +7 -0
  583. package/templates/claude/commands/xy-relint.md +7 -0
  584. package/templates/claude/commands/xy-retest.md +7 -0
  585. package/templates/claude/commands/xy-sonar.md +7 -0
  586. package/templates/claude/commands/xy-test.md +7 -0
  587. package/templates/claude/commands/xy-up.md +9 -0
  588. package/templates/claude/rules/xylabs-architecture.md +8 -0
  589. package/templates/claude/rules/xylabs-git-workflow.md +7 -0
  590. package/templates/claude/rules/xylabs-naming.md +7 -0
  591. package/templates/claude/rules/xylabs-style.md +17 -0
  592. package/templates/claude/skills/xylabs-e2e-setup/SKILL.md +223 -0
  593. package/templates/claude/skills/xylabs-xy-cli/SKILL.md +236 -0
  594. package/templates/claude/skills/xylabs-xy-deplint-fix/SKILL.md +122 -0
  595. package/templates/gitignore/gitignore/template.gitignore +51 -0
  596. package/templates/gitignore/template.gitignore +51 -0
  597. package/templates/readme/README.body.md +25 -0
  598. package/templates/readme/README.template.md +22 -0
  599. package/templates/repo/cli/package/package.json.tmpl +63 -0
  600. package/templates/repo/cli/package/src/__packageName__.ts.tmpl +21 -0
  601. package/templates/repo/cli/package/src/actions/index.ts +1 -0
  602. package/templates/repo/cli/package/src/actions/printVersion.ts.tmpl +8 -0
  603. package/templates/repo/cli/package/src/bin/__packageName__.ts.tmpl +12 -0
  604. package/templates/repo/cli/package/src/commands/index.ts +1 -0
  605. package/templates/repo/cli/package/src/commands/versionCommand.ts.tmpl +11 -0
  606. package/templates/repo/cli/package/src/index.ts.tmpl +1 -0
  607. package/templates/repo/cli/package/tsconfig.build.json +25 -0
  608. package/templates/repo/cli/package/tsconfig.json +4 -0
  609. package/templates/repo/cli/package/tsup.config.ts +15 -0
  610. package/templates/repo/cli/package/xy.config.ts +3 -0
  611. package/templates/repo/cli/root/CLAUDE.md.tmpl +38 -0
  612. package/templates/repo/cli/root/cspell.json.tmpl +13 -0
  613. package/templates/repo/cli/root/eslint.config.ts +28 -0
  614. package/templates/repo/cli/root/github/workflows/build-pnpm.yml.tmpl +34 -0
  615. package/templates/repo/cli/root/github/workflows/build-yarn.yml.tmpl +32 -0
  616. package/templates/repo/cli/root/gitignore.tmpl +47 -0
  617. package/templates/repo/cli/root/knip.config.ts +16 -0
  618. package/templates/repo/cli/root/package.json.tmpl +54 -0
  619. package/templates/repo/cli/root/pnpm-workspace.yaml +2 -0
  620. package/templates/repo/cli/root/tsconfig.json +4 -0
  621. package/templates/repo/cli/root/vitest.config.ts +31 -0
  622. package/templates/repo/cli/root/xy.config.ts.tmpl +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/checkResult.ts","../../../src/lib/concurrency.ts","../../../src/pm/detectPackageManager.ts","../../../src/pm/registry.ts","../../../src/lib/processEx.ts","../../../src/lib/withError.ts","../../../src/lib/withErrnoException.ts","../../../src/lib/safeExit.ts","../../../src/lib/dependencies/workspaceCycles.ts","../../../src/lib/initCwd.ts","../../../src/lib/loadConfig.ts","../../../src/lib/packageName.ts","../../../src/lib/runInstall.ts","../../../src/lib/runSteps.ts","../../../src/actions/cycle.ts","../../../src/actions/deplint/deplint.ts","../../../src/actions/deplint/packageJsonEditor.ts","../../../src/actions/deplint/getRequiredPeerDependencies.ts","../../../src/actions/deplint/packageEditor.ts","../../../src/actions/deplint/fixer.ts","../../../src/actions/deplint/findFiles.ts","../../../src/actions/deplint/findFilesByGlob.ts","../../../src/actions/deplint/getDependenciesFromPackageJson.ts","../../../src/actions/deplint/getExtendsFromTsconfigs.ts","../../../src/actions/deplint/getBasePackageName.ts","../../../src/actions/deplint/getExternalImportsFromFiles.ts","../../../src/actions/deplint/getImportsFromFile.ts","../../../src/actions/deplint/checkPackage/getMismatchedPeerDevVersions.ts","../../../src/actions/deplint/checkPackage/getUnlistedDependencies.ts","../../../src/actions/deplint/tsScriptsAliases.ts","../../../src/actions/deplint/checkPackage/getUnlistedDevDependencies.ts","../../../src/actions/deplint/checkPackage/getUnnecessaryPeerDependencies.ts","../../../src/actions/deplint/checkPackage/getUnsatisfiedPeerDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedDevDependencies.ts","../../../src/actions/deplint/getCliReferencedPackagesFromFiles.ts","../../../src/actions/deplint/getScriptReferencedPackages.ts","../../../src/actions/deplint/implicitDevDependencies.ts","../../../src/actions/deplint/checkPackage/getUnusedPeerDependencies.ts","../../../src/actions/deplint/checkPackage/getWorkspaceVersionProblems.ts","../../../src/actions/deplint/rules.ts","../../../src/actions/deplint/snapshot.ts","../../../src/actions/deplint/engine.ts","../../../src/actions/deplint/reporters.ts","../../../src/actions/package-lint-deps.ts","../../../src/actions/lintNext.ts","../../../src/actions/lint.ts","../../../src/actions/fix.ts","../../../src/actions/knip.ts","../../../src/actions/lint-init.ts","../../../src/actions/lintlint.ts","../../../src/actions/package/compile/XyConfig.ts","../../../src/actions/package/publint.ts","../../../src/actions/publint.ts","../../../src/actions/relint.ts","../../../src/actions/sonar.ts","../../../src/xy/param.ts","../../../src/xy/lint/cycleCommand.ts","../../../src/xy/lint/deplintCommand.ts","../../../src/xy/lint/fixCommand.ts","../../../src/xy/lint/knipCommand.ts","../../../src/xy/lint/lint/index.ts","../../../src/xy/lint/lint/initCommand.ts","../../../src/xy/lint/lint/runCommand.ts","../../../src/xy/lint/lintlintCommand.ts","../../../src/xy/lint/publintCommand.ts","../../../src/xy/lint/relintCommand.ts","../../../src/xy/lint/sonarCommand.ts","../../../src/xy/lint/index.ts"],"sourcesContent":["import chalk from 'chalk'\n\nexport const checkResult = (name: string, result: number, level: 'error' | 'warn' = 'error', exitOnFail = false) => {\n if (result) {\n const exiting = exitOnFail ? '[Exiting Process]' : '[Continuing]'\n const chalkFunc = level === 'error' ? chalk.red : chalk.yellow\n console[level](chalkFunc(`${name} had ${result} failures ${exiting}`))\n if (exitOnFail) {\n process.exit(result)\n }\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nexport const outputStorage = new AsyncLocalStorage<string[]>()\n\nlet captureInstalled = false\n\nexport function installOutputCapture(): void {\n if (captureInstalled) return\n captureInstalled = true\n\n const originalStdoutWrite = process.stdout.write.bind(process.stdout)\n const originalStderrWrite = process.stderr.write.bind(process.stderr)\n\n function intercept(\n original: typeof process.stdout.write,\n ): typeof process.stdout.write {\n return function (chunk: string | Uint8Array, ...args: unknown[]) {\n const buffer = outputStorage.getStore()\n if (buffer) {\n buffer.push(typeof chunk === 'string' ? chunk : new TextDecoder().decode(chunk))\n return true\n }\n return (original as (...params: unknown[]) => boolean)(chunk, ...args)\n } as typeof process.stdout.write\n }\n\n process.stdout.write = intercept(originalStdoutWrite)\n process.stderr.write = intercept(originalStderrWrite)\n}\n\nexport async function runWithConcurrency<T>(\n items: T[],\n concurrency: number,\n fn: (item: T) => Promise<void>,\n): Promise<void> {\n let next = 0\n async function worker(): Promise<void> {\n while (next < items.length) {\n const i = next++\n await fn(items[i])\n }\n }\n await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, () => worker()))\n}\n","import { existsSync } from 'node:fs'\n\nexport type PackageManagerName = 'pnpm' | 'yarn'\n\nexport function detectPackageManager(): PackageManagerName {\n if (existsSync('pnpm-lock.yaml') || existsSync('pnpm-workspace.yaml')) return 'pnpm'\n return 'yarn'\n}\n","import type { PackageManagerName } from './detectPackageManager.ts'\nimport { detectPackageManager } from './detectPackageManager.ts'\nimport type { PackageManager } from './PackageManager.ts'\n\nconst implementations = new Map<PackageManagerName, PackageManager>()\n\nexport function registerPackageManager(pm: PackageManager): void {\n implementations.set(pm.name, pm)\n}\n\nexport function getPackageManager(name?: PackageManagerName): PackageManager {\n const pmName = name ?? detectPackageManager()\n const pm = implementations.get(pmName)\n if (!pm) {\n throw new Error(\n `No package manager implementation registered for \"${pmName}\". `\n + 'Ensure registerPackageManager() has been called before getPackageManager().',\n )\n }\n return pm\n}\n","import chalk from 'chalk'\n\nimport { withErrnoException } from './withErrnoException.ts'\nimport { withError } from './withError.ts'\n\nexport const processEx = (ex: unknown) => {\n const error = typeof ex === 'string' ? new Error(ex) : ex\n const exitCode\n = withErrnoException(error, (error) => {\n if (error.code === 'ENOENT') {\n console.error(chalk.red(`'${error.path}' not found.`))\n } else {\n console.error(chalk.red(`Errno: ${error.code}`))\n }\n return error.errno ?? -1\n })\n ?? withError(error, (error) => {\n console.error(chalk.red(`${error.name}: ${error.message}`))\n return -1\n })\n ?? (() => {\n console.error(chalk.red(`Unexpected Error: ${JSON.stringify(ex, null, 2)}`))\n return -1\n })()\n // This allows us to use a previously set exit code\n process.exit(process.exitCode ?? exitCode)\n}\n","export const withError = <T extends Error = Error>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ex: any,\n closure: (error: T) => number,\n predicate = (ex: T) => (!!ex.name && !!ex.message),\n) => {\n return predicate(ex as T) ? closure(ex as T) : undefined\n}\n","import { withError } from './withError.ts'\n\nexport const withErrnoException = <T extends NodeJS.ErrnoException = NodeJS.ErrnoException>(\n ex: unknown, closure: (error: T) => number,\n) => {\n return withError<T>(ex, closure, (ex: unknown) => (ex as NodeJS.ErrnoException).errno !== undefined)\n}\n","/** Catch child process a crash and returns the code */\n\nimport { processEx } from './processEx.ts'\n\nconst safeExit = (func: () => number, exitOnFail = true): number => {\n try {\n const result = func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nconst safeExitAsync = async (func: () => Promise<number>, exitOnFail = true): Promise<number> => {\n try {\n const result = await func()\n if (result && exitOnFail) {\n process.exit(result)\n }\n return result\n } catch (ex) {\n return processEx(ex)\n }\n}\n\nexport { safeExit, safeExitAsync }\n","import { readFileSync } from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../pm/index.ts'\n\ninterface WorkspaceEdge {\n name: string\n type: 'dep' | 'devDep'\n}\n\nexport interface CycleEdge {\n from: string\n to: string\n type: 'dep' | 'devDep'\n}\n\n/**\n * Detects cycles in the workspace dependency graph (including devDependencies).\n * This catches cycles that break `yarn workspaces foreach --topological-dev`\n * but are invisible to source-level import analysis.\n * @returns An array of cycle paths, each represented as an array of edges. Empty if no cycles.\n */\nexport function detectWorkspaceCycles(workspaces: Workspace[]): CycleEdge[][] {\n const workspaceNames = new Set(workspaces.map(ws => ws.name))\n\n // Build adjacency list: edges from deps + devDeps to other workspace packages\n const graph = new Map<string, WorkspaceEdge[]>()\n for (const ws of workspaces) {\n const pkgPath = PATH.join(ws.location, 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n const deps: Record<string, string> = (pkg.dependencies ?? {}) as Record<string, string>\n const devDeps: Record<string, string> = (pkg.devDependencies ?? {}) as Record<string, string>\n const edges: WorkspaceEdge[] = []\n for (const dep of Object.keys(deps)) {\n if (workspaceNames.has(dep)) edges.push({ name: dep, type: 'dep' })\n }\n for (const dep of Object.keys(devDeps)) {\n if (workspaceNames.has(dep)) edges.push({ name: dep, type: 'devDep' })\n }\n graph.set(ws.name, edges)\n }\n\n // DFS with explicit path stack to correctly extract cycles\n const WHITE = 0\n const GRAY = 1\n const BLACK = 2\n const color = new Map<string, number>()\n const cycles: CycleEdge[][] = []\n // path tracks the current DFS recursion stack as [nodeName, edgeType used to reach it]\n const path: { edgeType?: 'dep' | 'devDep'; name: string }[] = []\n const onPath = new Set<string>()\n\n for (const name of workspaceNames) color.set(name, WHITE)\n\n function dfs(u: string, incomingEdgeType?: 'dep' | 'devDep'): void {\n color.set(u, GRAY)\n onPath.add(u)\n path.push({ name: u, edgeType: incomingEdgeType })\n\n for (const edge of graph.get(u) ?? []) {\n const v = edge.name\n if (onPath.has(v)) {\n // Found a cycle — extract from path\n const cycleEdges: CycleEdge[] = []\n const startIdx = path.findIndex(p => p.name === v)\n for (let i = startIdx; i < path.length - 1; i++) {\n const nextEdgeType = path[i + 1].edgeType ?? 'dep'\n cycleEdges.push({\n from: path[i].name, to: path[i + 1].name, type: nextEdgeType,\n })\n }\n // Close: last node back to v\n cycleEdges.push({\n from: u, to: v, type: edge.type,\n })\n cycles.push(cycleEdges)\n } else if (color.get(v) === WHITE) {\n dfs(v, edge.type)\n }\n }\n\n path.pop()\n onPath.delete(u)\n color.set(u, BLACK)\n }\n\n for (const name of workspaceNames) {\n if (color.get(name) === WHITE) dfs(name)\n }\n\n return cycles\n}\n\nexport function printWorkspaceCycles(cycles: CycleEdge[][]): void {\n for (const cycle of cycles) {\n console.error(chalk.red(' Workspace dependency cycle:'))\n for (const edge of cycle) {\n const edgeLabel = edge.type === 'devDep' ? chalk.yellow('devDep') : chalk.cyan('dep')\n console.error(` ${chalk.white(edge.from)} --(${edgeLabel})--> ${chalk.white(edge.to)}`)\n }\n }\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n","import chalk from 'chalk'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { TypeScriptLoader } from 'cosmiconfig-typescript-loader'\nimport deepmerge from 'deepmerge'\n\nlet config: Record<string, unknown>\nlet rootConfigPath: string | undefined\n\nconst workspaceConfigCache = new Map<string, Record<string, unknown>>()\nconst deprecationWarned = new Set<string>()\n\nfunction createExplorer() {\n return cosmiconfig('xy', { cache: true, loaders: { '.ts': TypeScriptLoader() } })\n}\n\nexport const loadConfig = async <T extends object>(params?: T): Promise<T> => {\n if (config === undefined) {\n const cosmicConfigResult = await createExplorer().search()\n config = (cosmicConfigResult?.config ?? {}) as Record<string, unknown>\n rootConfigPath = cosmicConfigResult?.filepath\n const configFilePath = cosmicConfigResult?.filepath\n if (configFilePath !== undefined) {\n console.log(chalk.green(`Loaded config from ${configFilePath}`))\n if (config.verbose) {\n console.log(chalk.gray(`${JSON.stringify(config, null, 2)}`))\n }\n }\n }\n return deepmerge(config, params ?? {}) as T\n}\n\n/**\n * Loads the xy.config from a specific workspace directory.\n * Returns an empty object if the workspace has no config or if\n * the found config is the root config (avoids double-applying).\n */\nasync function loadWorkspaceConfig(workspaceDir: string): Promise<Record<string, unknown>> {\n const cached = workspaceConfigCache.get(workspaceDir)\n if (cached !== undefined) return cached\n\n const result = await createExplorer().search(workspaceDir)\n\n // If no config found or it's the root config, no workspace override\n if (!result || result.filepath === rootConfigPath) {\n workspaceConfigCache.set(workspaceDir, {})\n return {}\n }\n\n const wsConfig = (result.config ?? {}) as Record<string, unknown>\n workspaceConfigCache.set(workspaceDir, wsConfig)\n return wsConfig\n}\n\n/** Deprecated top-level fields that should be under `commands`. */\nconst DEPRECATED_COMMAND_FIELDS = new Set(['deplint', 'publint'])\n\n/**\n * Resolves a command's config field from a config object.\n * Prefers `commands.[name]` over top-level `[name]`.\n * Warns once per config file when a deprecated top-level field is used.\n */\nfunction resolveCommandField(\n cfg: Record<string, unknown>,\n commandName: string,\n configPath?: string,\n): Record<string, unknown> {\n const commands = cfg.commands as Record<string, unknown> | undefined\n const fromCommands = commands?.[commandName]\n const fromTopLevel = cfg[commandName]\n\n if (fromCommands !== undefined && typeof fromCommands === 'object') {\n return fromCommands as Record<string, unknown>\n }\n\n if (fromTopLevel !== undefined && typeof fromTopLevel === 'object'\n && DEPRECATED_COMMAND_FIELDS.has(commandName)) {\n const key = `${configPath ?? 'unknown'}:${commandName}`\n if (!deprecationWarned.has(key)) {\n deprecationWarned.add(key)\n console.warn(chalk.yellow(\n `[xy] Deprecated: top-level \"${commandName}\" in ${configPath ?? 'xy.config'} — move to \"commands.${commandName}\"`,\n ))\n }\n return fromTopLevel as Record<string, unknown>\n }\n\n return {}\n}\n\n/**\n * Loads a command-specific config merged from root and workspace levels.\n * The root config provides defaults; the workspace config extends/overrides.\n * Arrays (e.g. `exclude`) are unioned and maps (e.g. `packages`) are merged\n * via deepmerge, with workspace entries overriding root entries for the same key.\n */\nexport async function loadWorkspaceCommandConfig<C>(\n workspaceDir: string,\n commandName: string,\n): Promise<C> {\n // Ensure root config is loaded\n const root = await loadConfig()\n const rootCmd = resolveCommandField(root as Record<string, unknown>, commandName, rootConfigPath)\n\n const wsConfig = await loadWorkspaceConfig(workspaceDir)\n const wsConfigPath = workspaceConfigCache.has(workspaceDir) ? workspaceDir : undefined\n const wsCmd = resolveCommandField(wsConfig, commandName, wsConfigPath)\n\n return deepmerge(rootCmd, wsCmd) as C\n}\n","import { readFileSync } from 'node:fs'\nimport path from 'node:path'\n\nimport { INIT_CWD } from './initCwd.ts'\n\nexport function packageName(): string | undefined {\n if (process.env.npm_package_name) {\n return process.env.npm_package_name\n }\n try {\n const pkgPath = path.join(INIT_CWD(), 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n return pkg.name as string | undefined\n } catch {\n return undefined\n }\n}\n","import { spawnSync } from 'node:child_process'\n\nimport chalk from 'chalk'\n\nimport { detectPackageManager } from '../pm/index.ts'\n\nexport function runInstall(cwd?: string): boolean {\n const pm = detectPackageManager()\n console.log(chalk.gray(`Running ${pm} install...`))\n const result = spawnSync(pm, ['install'], {\n cwd,\n stdio: 'inherit',\n })\n if (result.status !== 0) {\n console.warn(chalk.yellow(`${pm} install failed`))\n return false\n }\n console.log(chalk.green('Dependencies installed'))\n return true\n}\n","import { spawnSync } from 'node:child_process'\nimport { existsSync } from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport type { ScriptStep } from '../pm/index.ts'\nimport { checkResult } from './checkResult.ts'\nimport { packageName } from './packageName.ts'\nimport { safeExit } from './safeExit.ts'\n\nexport const runSteps = (name: string, steps: ScriptStep[], exitOnFail = true, messages?: string[]): number => {\n return safeExit(() => {\n const pkgName = packageName()\n console.log(chalk.green(`${name} [${pkgName}]`))\n let totalStatus = 0\n for (const [i, [command, args, config]] of steps.entries()) {\n if (messages?.[i]) {\n console.log(chalk.gray(messages?.[i]))\n }\n const argList = Array.isArray(args) ? args : args.split(' ')\n if (command === 'node' && !existsSync(argList[0])) {\n throw new Error(`File not found [${argList[0]}]`)\n }\n const status\n = spawnSync(command, Array.isArray(args) ? args : args.split(' '), {\n ...config,\n encoding: 'utf8',\n env: { FORCE_COLOR: '3', ...process.env },\n shell: true,\n stdio: 'inherit',\n }).status ?? 0\n checkResult(name, status, 'error', exitOnFail)\n totalStatus += status ?? 0\n }\n return totalStatus\n }, !!exitOnFail)\n}\n","import { cruise, type ICruiseOptions } from 'dependency-cruiser'\n\nimport {\n detectWorkspaceCycles, packageName, printWorkspaceCycles, runSteps,\n} from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\n\nexport interface CycleParams {\n incremental?: boolean\n jobs: number\n pkg?: string\n verbose?: boolean\n}\n\ninterface CyclePackageParams {\n pkg: string\n verbose?: boolean\n}\n\nexport const cycle = async ({ verbose, pkg }: CycleParams) => {\n return pkg\n ? cyclePackage({ pkg, verbose })\n : await cycleAll({ verbose })\n}\n\nexport const cyclePackage = ({ pkg, verbose }: CyclePackageParams) => {\n const pm = getPackageManager()\n const verboseOptions = verbose ? ['--verbose'] : ['--no-verbose']\n return runSteps(\n `Cycle [${pkg}]`,\n [pm.runInWorkspace(pkg, 'package-cycle', verboseOptions)],\n )\n}\n\nexport const cycleAll = async ({ verbose = false }: { verbose?: boolean }) => {\n const pkgName = packageName()\n let exitCode = 0\n\n // Check workspace package.json dependency graph for cycles (including devDependencies).\n // These cycles break `yarn workspaces foreach --topological-dev` but are invisible\n // to source-level import analysis.\n const pm = getPackageManager()\n const workspaces = pm.listWorkspaces()\n const workspaceCycles = detectWorkspaceCycles(workspaces)\n if (workspaceCycles.length > 0) {\n console.error(`${pkgName} workspace dependency graph has ${workspaceCycles.length} cycle(s):`)\n printWorkspaceCycles(workspaceCycles)\n exitCode = 1\n } else if (verbose) {\n console.log(`${pkgName} workspace dependency graph has no cycles`)\n }\n\n const cruiseOptions: ICruiseOptions = {\n ruleSet: {\n forbidden: [\n {\n name: 'no-circular',\n severity: 'error',\n comment: 'This dependency creates a circular reference',\n from: {},\n to: { circular: true },\n },\n ],\n },\n exclude: 'node_modules|packages/.*/packages',\n validate: true,\n doNotFollow: { path: 'node_modules|packages/.*/packages' },\n tsPreCompilationDeps: false,\n combinedDependencies: true,\n outputType: verbose ? 'text' : 'err',\n }\n\n const target = '**/packages/*/src'\n\n console.log(`Checking for circular dependencies in ${target}...`)\n\n const result = await cruise([target], cruiseOptions)\n if (result.output) {\n console.log(result.output)\n }\n\n if (result.exitCode !== 0) {\n exitCode = result.exitCode\n }\n\n if (exitCode === 0) {\n console.log(`${pkgName} ✅ No dependency violations`)\n } else {\n console.error(`${pkgName} ❌ Dependency violations found`)\n }\n return exitCode\n}\n","import chalk from 'chalk'\n\nimport { runInstall } from '../../lib/index.ts'\nimport { getPackageManager } from '../../pm/index.ts'\nimport { runDeplint } from './engine.ts'\nimport { getDeplintReporter } from './reporters.ts'\n\nexport interface DepLintOptions {\n /** Package names to exclude, passed via --exclude on the command line */\n cliExclude?: string[]\n deps?: boolean\n devDeps?: boolean\n fix?: boolean\n format?: 'human' | 'json'\n peerDeps?: boolean\n pkg?: string\n verbose?: boolean\n}\n\nexport const deplint = async ({\n pkg, deps, devDeps, fix, peerDeps, verbose, cliExclude, format = 'human',\n}: DepLintOptions) => {\n const pm = getPackageManager()\n const workspaces = pm.listWorkspaces()\n\n // For pnpm repos, enforce workspace: protocol on internal deps\n const workspaceNames = pm.name === 'pnpm'\n ? new Set(workspaces.map(ws => ws.name))\n : undefined\n\n if (pkg === undefined && format === 'human') {\n console.info('Deplint Started...')\n }\n\n const targetWorkspace = pkg === undefined ? undefined : pm.findWorkspace(pkg)\n const targetWorkspaces = pkg === undefined ? workspaces : targetWorkspace ? [targetWorkspace] : []\n if (targetWorkspaces.length === 0) {\n console.error(chalk.red(`Workspace not found: ${pkg}`))\n return 1\n }\n\n const result = await runDeplint(targetWorkspaces, {\n cliExclude, deps, devDeps, fix, peerDeps, reporter: format, verbose,\n }, workspaceNames)\n\n getDeplintReporter(format).render(result)\n\n if (fix && result.summary.appliedFixes > 0) {\n runInstall()\n }\n\n return result.summary.errorCount > 0 ? 1 : 0\n}\n","import fs from 'node:fs'\n\nimport chalk from 'chalk'\nimport sortPackageJson from 'sort-package-json'\n\nimport type { Workspace } from '../../pm/index.ts'\nimport { findDepPackageJson } from './getRequiredPeerDependencies.ts'\n\nexport interface PackageJson {\n [key: string]: unknown\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n}\n\nexport function readPackageJson(location: string): PackageJson {\n return JSON.parse(fs.readFileSync(`${location}/package.json`, 'utf8')) as PackageJson\n}\n\nexport function writePackageJson(location: string, pkg: PackageJson): void {\n const sorted = sortPackageJson(JSON.stringify(pkg, null, 2))\n fs.writeFileSync(`${location}/package.json`, `${sorted}\\n`)\n}\n\n/**\n * Move a dependency from one section to another (e.g. dependencies → devDependencies).\n */\nexport function moveDep(pkg: PackageJson, dep: string, from: string, to: string): void {\n const fromSection = pkg[from] as Record<string, string> | undefined\n if (!fromSection?.[dep]) return\n\n const version = fromSection[dep]\n delete fromSection[dep]\n if (Object.keys(fromSection).length === 0) {\n delete pkg[from]\n }\n\n const toSection = (pkg[to] ?? {}) as Record<string, string>\n toSection[dep] = version\n pkg[to] = toSection\n}\n\n/**\n * Remove a dependency from a section.\n */\nexport function removeDep(pkg: PackageJson, dep: string, section: string): void {\n const sectionObj = pkg[section] as Record<string, string> | undefined\n if (!sectionObj?.[dep]) return\n\n delete sectionObj[dep]\n if (Object.keys(sectionObj).length === 0) {\n delete pkg[section]\n }\n}\n\n/**\n * Add a dependency to a section with a resolved version.\n */\nexport function addDep(pkg: PackageJson, dep: string, version: string, section: string): void {\n const sectionObj = (pkg[section] ?? {}) as Record<string, string>\n sectionObj[dep] = version\n pkg[section] = sectionObj\n}\n\n/**\n * Resolve the version for a missing dependency.\n * Looks in node_modules first, then falls back to '*'.\n */\nexport function resolveDepVersion(location: string, dep: string): string {\n const depPkgPath = findDepPackageJson(location, dep)\n if (depPkgPath) {\n try {\n const depPkg = JSON.parse(fs.readFileSync(depPkgPath, 'utf8')) as Record<string, unknown>\n const version = depPkg.version as string | undefined\n if (version) return `~${version}`\n } catch {\n // Fall through\n }\n }\n return '*'\n}\n\n/**\n * Compute the expected peerDependency version range for a dependency,\n * preserving the current range style (^ vs ~).\n *\n * - If the current range uses ^, returns ^<major> (e.g. ^7)\n * - Otherwise returns ~<major>.<minor> (e.g. ~7.6)\n * - Falls back to resolveDepVersion if no installed version found\n */\nexport function resolveExpectedPeerVersion(location: string, dep: string, currentRange?: string): string {\n const depPkgPath = findDepPackageJson(location, dep)\n if (depPkgPath) {\n try {\n const depPkg = JSON.parse(fs.readFileSync(depPkgPath, 'utf8')) as Record<string, unknown>\n const version = depPkg.version as string | undefined\n if (version) {\n const match = /^(\\d+)\\.(\\d+)/.exec(version)\n if (match) {\n if (currentRange?.startsWith('^')) {\n return `^${match[1]}`\n }\n return `~${match[1]}.${match[2]}`\n }\n return `~${version}`\n }\n } catch {\n // Fall through\n }\n }\n return '*'\n}\n\nexport function logFix(workspace: Workspace, action: string, dep: string, detail?: string): void {\n const detailStr = detail ? ` (${detail})` : ''\n console.log(`[${chalk.blue(workspace.name)}] Fixed: ${action} ${chalk.green(dep)}${detailStr}`)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport function findDepPackageJson(location: string, dep: string): string | undefined {\n let dir = location\n while (true) {\n const candidate = path.join(dir, 'node_modules', dep, 'package.json')\n if (fs.existsSync(candidate)) return candidate\n const parent = path.dirname(dir)\n if (parent === dir) return undefined\n dir = parent\n }\n}\n\n/**\n * Collects the peerDependencies declared by all of a package's\n * dependencies and devDependencies. A devDependency that satisfies\n * one of these peer requirements should not be flagged as unused.\n */\nexport function getRequiredPeerDependencies(\n location: string,\n allDeps: string[],\n): Set<string> {\n const required = new Set<string>()\n for (const dep of allDeps) {\n const depPkgPath = findDepPackageJson(location, dep)\n if (!depPkgPath) continue\n try {\n const raw = fs.readFileSync(depPkgPath, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n const peerDeps = pkg.peerDependencies as Record<string, string> | undefined\n if (peerDeps) {\n for (const peer of Object.keys(peerDeps)) {\n required.add(peer)\n }\n }\n } catch {\n // Package not readable — skip\n }\n }\n return required\n}\n","import type { Workspace } from '../../pm/index.ts'\nimport {\n addDep,\n moveDep,\n type PackageJson,\n readPackageJson,\n removeDep,\n writePackageJson,\n} from './packageJsonEditor.ts'\nimport type { DeplintAppliedFix, DeplintFix } from './types.ts'\n\nexport class DeplintPackageEditor {\n private readonly pkg: PackageJson\n\n constructor(\n private readonly workspace: Workspace,\n ) {\n this.pkg = readPackageJson(workspace.location)\n }\n\n applyFix(fix: DeplintFix): DeplintAppliedFix {\n switch (fix.action) {\n case 'add': {\n addDep(this.pkg, fix.dependency, fix.version, fix.section)\n break\n }\n case 'move': {\n moveDep(this.pkg, fix.dependency, fix.fromSection, fix.toSection)\n if (fix.version !== undefined && this.pkg[fix.toSection]?.[fix.dependency] !== undefined) {\n this.pkg[fix.toSection]![fix.dependency] = fix.version\n }\n break\n }\n case 'remove': {\n removeDep(this.pkg, fix.dependency, fix.section)\n break\n }\n case 'set-version': {\n addDep(this.pkg, fix.dependency, fix.version, fix.section)\n break\n }\n }\n\n return {\n dependency: fix.dependency,\n detail: fix.detail,\n workspace: this.workspace,\n }\n }\n\n save(): void {\n writePackageJson(this.workspace.location, this.pkg)\n }\n}\n","import { DeplintPackageEditor } from './packageEditor.ts'\nimport type { DeplintAppliedFix, DeplintDiagnostic } from './types.ts'\n\nexport function applyDeplintFixes(diagnostics: DeplintDiagnostic[]): DeplintAppliedFix[] {\n const editors = new Map<string, DeplintPackageEditor>()\n const applied: DeplintAppliedFix[] = []\n\n for (const diagnostic of diagnostics) {\n for (const fix of diagnostic.fixes ?? []) {\n const workspaceKey = diagnostic.workspace.location\n let editor = editors.get(workspaceKey)\n if (!editor) {\n editor = new DeplintPackageEditor(diagnostic.workspace)\n editors.set(workspaceKey, editor)\n }\n applied.push(editor.applyFix(fix))\n }\n }\n\n for (const editor of editors.values()) {\n editor.save()\n }\n\n return applied\n}\n","import fs from 'node:fs'\n\nimport { findFilesByGlob } from './findFilesByGlob.ts'\n\nconst codeExtensions = '*.{ts,tsx,mts,cts,js,mjs,cjs}'\n\nfunction getWorkspaceIgnores(location: string): string[] {\n try {\n const raw = fs.readFileSync(`${location}/package.json`, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n return (pkg.workspaces ?? []) as string[]\n } catch {\n return []\n }\n}\n\nexport function findFiles(location: string) {\n const workspaceIgnores = getWorkspaceIgnores(location).map(w => `${w}/**`)\n const ignore = ['**/node_modules/**', 'dist/**', ...workspaceIgnores]\n const allFiles = findFilesByGlob(location, `./**/${codeExtensions}`, ignore)\n const distFiles = [\n ...findFilesByGlob(location, './dist/**/*.d.ts'),\n ...findFilesByGlob(location, `./dist/**/${codeExtensions}`),\n ]\n\n return { allFiles, distFiles }\n}\n","import { globSync } from 'glob'\n\nexport function findFilesByGlob(cwd: string, pattern: string, ignore?: string[]) {\n return globSync(pattern, {\n cwd, absolute: true, ignore, nodir: true,\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nexport function getDependenciesFromPackageJson(packageJsonPath: string) {\n const packageJsonFullPath = path.resolve(packageJsonPath)\n const rawContent = fs.readFileSync(packageJsonFullPath, 'utf8')\n const packageJson = JSON.parse(rawContent) as Record<string, unknown>\n\n const depsRecord = (packageJson.dependencies ?? {}) as Record<string, string>\n const devDepsRecord = (packageJson.devDependencies ?? {}) as Record<string, string>\n const peerDepsRecord = (packageJson.peerDependencies ?? {}) as Record<string, string>\n\n const dependencies = Object.keys(depsRecord)\n const devDependencies = Object.keys(devDepsRecord)\n const peerDependencies = Object.keys(peerDepsRecord)\n\n const dependencyVersions = depsRecord\n const devDependencyVersions = devDepsRecord\n const peerDependencyVersions = peerDepsRecord\n\n return {\n dependencies,\n dependencyVersions,\n devDependencies,\n devDependencyVersions,\n peerDependencies,\n peerDependencyVersions,\n }\n}\n","import fs from 'node:fs'\n\nimport { globSync } from 'glob'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\n\nconst isExternalReference = (ref: string) => !ref.startsWith('.') && !ref.startsWith('/')\n\nfunction parseExtendsField(value: unknown): string[] {\n if (typeof value === 'string') return [value]\n if (Array.isArray(value)) return value.filter((v): v is string => typeof v === 'string')\n return []\n}\n\nfunction parseTypesField(value: unknown): string[] {\n if (Array.isArray(value)) return value.filter((v): v is string => typeof v === 'string')\n return []\n}\n\nfunction parseTsconfig(file: string): Record<string, unknown> {\n const content = fs.readFileSync(file, 'utf8')\n // Strip single-line comments (tsconfig allows them) and trailing commas before parsing\n const cleaned = content\n .replaceAll(/\\/\\/.*/g, '')\n .replaceAll(/,\\s*([}\\]])/g, '$1')\n return JSON.parse(cleaned) as Record<string, unknown>\n}\n\nexport function getExtendsFromTsconfigs(location: string): string[] {\n const tsconfigFiles = globSync('./tsconfig*.json', { cwd: location, absolute: true })\n const packages = new Set<string>()\n\n for (const file of tsconfigFiles) {\n try {\n const parsed = parseTsconfig(file)\n const refs = parseExtendsField(parsed.extends)\n for (const ref of refs) {\n if (isExternalReference(ref)) {\n packages.add(getBasePackageName(ref))\n }\n }\n } catch {\n // Skip files that can't be parsed\n }\n }\n\n return [...packages]\n}\n\nexport function getTypesFromTsconfigs(location: string): string[] {\n const tsconfigFiles = globSync('./tsconfig*.json', { cwd: location, absolute: true })\n const packages = new Set<string>()\n\n for (const file of tsconfigFiles) {\n try {\n const parsed = parseTsconfig(file)\n const compilerOptions = parsed.compilerOptions as Record<string, unknown> | undefined\n const refs = parseTypesField(compilerOptions?.types)\n for (const ref of refs) {\n packages.add(getBasePackageName(ref))\n }\n } catch {\n // Skip files that can't be parsed\n }\n }\n\n return [...packages]\n}\n","export function getBasePackageName(importName: string) {\n const importNameScrubbed = importName.replaceAll('\"', '').trim()\n if (importNameScrubbed.startsWith('@')) {\n const parts = importNameScrubbed.split('/')\n return parts.length >= 2 ? `${parts[0]}/${parts[1]}` : importNameScrubbed\n }\n return importNameScrubbed.split('/')[0]\n}\n","import fs from 'node:fs'\n\nimport type { CheckSourceParams } from './checkPackage/index.ts'\nimport { getImportsFromFile } from './getImportsFromFile.ts'\n\nconst internalImportPrefixes = ['.', '#', 'node:']\n\nconst removeInternalImports = (imports: string[]) => {\n return imports.filter(imp => !internalImportPrefixes.some(prefix => imp.startsWith(prefix)))\n}\n\nconst isDeclarationFile = (file: string) =>\n file.endsWith('.d.ts') || file.endsWith('.d.cts') || file.endsWith('.d.mts')\n\nfunction shipsTsconfig(location: string): boolean {\n try {\n const raw = fs.readFileSync(`${location}/package.json`, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n const files = pkg.files as string[] | undefined\n return files?.some((f: string) => f === 'tsconfig.json' || f.includes('tsconfig')) ?? false\n } catch {\n return false\n }\n}\n\nexport function getExternalImportsFromFiles({\n allFiles, distFiles, location, tsconfigExtends = [], tsconfigTypes = [],\n}: {\n allFiles: string[]\n distFiles: string[]\n location: string\n tsconfigExtends?: string[]\n tsconfigTypes?: string[]\n}): CheckSourceParams {\n const allImportPaths: Record<string, string[]> = {}\n const distImportPaths: Record<string, string[]> = {}\n const distTypeImportPaths: Record<string, string[]> = {}\n\n for (const path of allFiles) getImportsFromFile(path, allImportPaths, allImportPaths).flat()\n\n const distTypeFiles = distFiles.filter(isDeclarationFile)\n const distCodeFiles = distFiles.filter(file => !isDeclarationFile(file))\n for (const path of distCodeFiles) getImportsFromFile(path, distImportPaths, distImportPaths).flat()\n for (const path of distTypeFiles) getImportsFromFile(path, distTypeImportPaths, distTypeImportPaths).flat()\n\n const allImports = Object.keys(allImportPaths)\n const distImports = Object.keys(distImportPaths)\n\n const externalAllImports = removeInternalImports(allImports)\n const externalDistImports = removeInternalImports(distImports)\n const externalDistTypeImports = removeInternalImports(Object.keys(distTypeImportPaths))\n\n // Tsconfig extends references count as used imports.\n // If the package ships its tsconfig.json, extends refs are dist imports\n // (consumers need them), otherwise they are build-time only (devDep).\n const isDistTsconfig = shipsTsconfig(location)\n for (const ext of tsconfigExtends) {\n if (!externalAllImports.includes(ext)) externalAllImports.push(ext)\n if (isDistTsconfig && !externalDistImports.includes(ext)) externalDistImports.push(ext)\n }\n\n // Tsconfig compilerOptions.types references count as build-time imports (devDep).\n for (const typ of tsconfigTypes) {\n if (!externalAllImports.includes(typ)) externalAllImports.push(typ)\n }\n\n return {\n allImportPaths,\n allImports,\n distImportPaths,\n distImports,\n externalAllImports,\n externalDistImports,\n externalDistTypeImports,\n tsconfigExtends: [...tsconfigExtends],\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport ts from 'typescript'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\n\nexport function isTypeOnlyImportClause(clause?: ts.ImportClause): boolean {\n if (clause === undefined) {\n return false\n }\n // Newer TS: clause.phaseModifier -> token or number\n if ('phaseModifier' in clause) {\n const mod = clause.phaseModifier\n // handle number enum or token node with .kind\n const kind: number | undefined = typeof mod === 'number' ? mod : (mod as { kind?: number } | undefined)?.kind\n return kind === ts.SyntaxKind.TypeKeyword\n }\n // Older TS fallback\n return (clause as unknown as { isTypeOnly?: boolean }).isTypeOnly ?? false\n}\n\nexport function getImportsFromFile(filePath: string, importPaths: Record<string, string[]>, typeImportPaths: Record<string, string[]>) {\n const sourceCode = fs.readFileSync(filePath, 'utf8')\n\n const isMjsFile = filePath.endsWith('.mjs')\n\n const sourceFile = ts.createSourceFile(\n path.basename(filePath),\n sourceCode,\n ts.ScriptTarget.Latest,\n true,\n isMjsFile ? ts.ScriptKind.JS : undefined,\n )\n\n const imports: string[] = []\n const typeImports: string[] = []\n\n const isDeclarationFile = filePath.endsWith('.d.ts')\n\n function visit(node: ts.Node) {\n if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {\n const moduleSpecifier = (node.moduleSpecifier)?.getFullText()\n const isTypeImport = ts.isImportDeclaration(node) ? isTypeOnlyImportClause(node.importClause) : false\n if (typeof moduleSpecifier === 'string') {\n const trimmed = moduleSpecifier.replaceAll(\"'\", '').replaceAll('\"', '').trim()\n // we are determining if the type import is being imported in an exported d.ts file\n if (isTypeImport || isDeclarationFile) {\n typeImports.push(trimmed)\n } else {\n imports.push(trimmed)\n }\n }\n } else if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword) {\n const [arg] = node.arguments\n if (ts.isStringLiteral(arg)) {\n imports.push(arg.text)\n }\n } else if (\n ts.isCallExpression(node)\n && ts.isIdentifier(node.expression)\n && node.expression.text === 'require'\n && node.arguments.length > 0\n && ts.isStringLiteral(node.arguments[0])\n ) {\n imports.push(node.arguments[0].text)\n }\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n\n // Detect /// <reference types=\"package\" /> directives\n for (const ref of sourceFile.typeReferenceDirectives) {\n typeImports.push(ref.fileName)\n }\n\n const importsStartsWithExcludes = ['.', '#', 'node:']\n\n const isValidImport = (imp: string) =>\n !importsStartsWithExcludes.some(exc => imp.startsWith(exc))\n && !imp.includes('*')\n && !imp.includes('!')\n\n const cleanedImports = imports.filter(isValidImport).map(getBasePackageName)\n const cleanedTypeImports = typeImports.filter(isValidImport).map(getBasePackageName)\n\n for (const imp of cleanedImports) {\n importPaths[imp] = importPaths[imp] ?? []\n importPaths[imp].push(filePath)\n }\n\n for (const imp of cleanedTypeImports) {\n typeImportPaths[imp] = typeImportPaths[imp] ?? []\n typeImportPaths[imp].push(filePath)\n }\n\n return [cleanedImports, cleanedTypeImports]\n}\n","import chalk from 'chalk'\nimport semver from 'semver'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport { readPackageJson, writePackageJson } from '../packageJsonEditor.ts'\nimport type { CheckPackageParams } from './checkPackageTypes.ts'\n\nexport interface PeerDevMismatch {\n dep: string\n devVersion: string\n peerVersion: string\n}\n\nexport function findMismatchedPeerDevVersions(\n {\n peerDependencies, peerDependencyVersions, devDependencyVersions,\n }: CheckPackageParams,\n exclude?: Set<string>,\n): PeerDevMismatch[] {\n const mismatches: PeerDevMismatch[] = []\n for (const dep of peerDependencies) {\n if (exclude?.has(dep)) continue\n const peerVersion = peerDependencyVersions[dep]\n const devVersion = devDependencyVersions[dep]\n // Skip semver comparison for workspace protocol versions — they resolve at install time\n const hasWorkspaceProtocol = devVersion?.startsWith('workspace:') || peerVersion?.startsWith('workspace:')\n if (devVersion && peerVersion !== devVersion && !hasWorkspaceProtocol && !semver.subset(devVersion, peerVersion)) {\n mismatches.push({\n dep, devVersion, peerVersion,\n })\n }\n }\n return mismatches\n}\n\nexport function getMismatchedPeerDevVersions(\n { name, location }: Workspace,\n packageParams: CheckPackageParams,\n exclude?: Set<string>,\n): number {\n const mismatches = findMismatchedPeerDevVersions(packageParams, exclude)\n\n for (const {\n dep, peerVersion, devVersion,\n } of mismatches) {\n console.log(\n `[${chalk.blue(name)}] Peer/dev version mismatch ${chalk.red(dep)}`\n + ` — peer: ${chalk.yellow(peerVersion)}, dev: ${chalk.cyan(devVersion)}`,\n )\n }\n if (mismatches.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return mismatches.length\n}\n\nexport function fixMismatchedPeerDevVersions(\n workspace: Workspace,\n packageParams: CheckPackageParams,\n exclude?: Set<string>,\n): number {\n const mismatches = findMismatchedPeerDevVersions(packageParams, exclude)\n if (mismatches.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const { dep, devVersion } of mismatches) {\n if (pkg.peerDependencies?.[dep]) {\n pkg.peerDependencies[dep] = devVersion\n console.log(\n `[${chalk.blue(workspace.name)}] Fixed: synced peerDependency ${chalk.green(dep)}`\n + ` to devDependency version ${chalk.cyan(devVersion)}`,\n )\n }\n }\n\n writePackageJson(workspace.location, pkg)\n return mismatches.length\n}\n","import fs from 'node:fs'\nimport { builtinModules } from 'node:module'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport { findDepPackageJson } from '../getRequiredPeerDependencies.ts'\nimport {\n addDep, logFix, readPackageJson, resolveDepVersion, writePackageJson,\n} from '../packageJsonEditor.ts'\nimport { isSatisfiedByTsScriptsVariant } from '../tsScriptsAliases.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\n/**\n * Checks if a runtime import is satisfied by a listed dependency.\n * An `@types` package alone is not enough since it only provides\n * type declarations, not runnable code.\n */\nfunction isRuntimeImportListed(\n imp: string,\n name: string,\n dependencies: string[],\n peerDependencies: string[],\n) {\n return dependencies.includes(imp)\n || imp === name\n || peerDependencies.includes(imp)\n || builtinModules.includes(imp)\n}\n\n/**\n * Checks if a type-only dist import is satisfied by a listed dependency.\n * These appear in published .d.ts files, so consumers need them installed.\n * They must be in dependencies or peerDependencies (not just devDependencies)\n * because they ship in the published package.\n */\nfunction isDistTypeImportListed(\n imp: string,\n name: string,\n dependencies: string[],\n devDependencies: string[],\n peerDependencies: string[],\n) {\n return dependencies.includes(imp)\n || imp === name\n || dependencies.includes(`@types/${imp}`)\n || devDependencies.includes(`@types/${imp}`)\n || peerDependencies.includes(imp)\n || peerDependencies.includes(`@types/${imp}`)\n || builtinModules.includes(imp)\n}\n\nfunction logMissing(name: string, imp: string, importPaths: Record<string, string[]>) {\n console.log(`[${chalk.blue(name)}] Missing dependency in package.json: ${chalk.red(imp)}`)\n if (importPaths[imp]) {\n console.log(` ${importPaths[imp].join('\\n ')}`)\n }\n}\n\n/**\n * Determines whether an import should be a peerDependency in a library\n * package. Returns true when all of the import's own peer dependencies\n * are both listed in the package's peerDependencies AND directly imported\n * in the dist output. This distinguishes companion packages like react-dom\n * (whose peers the library independently imports) from implementation\n * dependencies like a widget library that merely consume a framework.\n */\nexport function shouldBePeerDependency(\n imp: string,\n location: string,\n currentPeers: string[],\n distImports: string[],\n): boolean {\n if (currentPeers.length === 0) return false\n const depPkgPath = findDepPackageJson(location, imp)\n if (!depPkgPath) return false\n try {\n const pkg = JSON.parse(fs.readFileSync(depPkgPath, 'utf8')) as Record<string, unknown>\n const importPeers = Object.keys((pkg.peerDependencies ?? {}) as Record<string, unknown>)\n // Every peer of the import must be a first-class peer of the package —\n // i.e. both listed as a peerDependency and directly imported in dist.\n return importPeers.length > 0 && importPeers.every(\n peer => currentPeers.includes(peer) && distImports.includes(peer),\n )\n } catch {\n return false\n }\n}\n\nexport interface UnlistedDep {\n imp: string\n section: 'dependencies' | 'devDependencies'\n}\n\nexport function findUnlistedDependencies(\n name: string,\n dependencies: string[],\n devDependencies: string[],\n peerDependencies: string[],\n externalDistImports: string[],\n externalDistTypeImports: string[],\n): UnlistedDep[] {\n const allDeps = [...dependencies, ...devDependencies, ...peerDependencies]\n const results: UnlistedDep[] = []\n\n for (const imp of externalDistImports) {\n if (!isRuntimeImportListed(imp, name, dependencies, peerDependencies)\n && !isSatisfiedByTsScriptsVariant(imp, allDeps)) {\n results.push({ imp, section: 'dependencies' })\n }\n }\n\n for (const imp of externalDistTypeImports) {\n if (!isDistTypeImportListed(imp, name, dependencies, devDependencies, peerDependencies)\n && !isSatisfiedByTsScriptsVariant(imp, allDeps)) {\n results.push({ imp, section: 'dependencies' })\n }\n }\n\n return results\n}\n\nexport function getUnlistedDependencies(\n { name, location }: Workspace,\n {\n dependencies, devDependencies, peerDependencies,\n }: CheckPackageParams,\n {\n externalDistImports, externalDistTypeImports, distImportPaths,\n }: CheckSourceParams,\n) {\n const unlisted = findUnlistedDependencies(name, dependencies, devDependencies, peerDependencies, externalDistImports, externalDistTypeImports)\n\n for (const { imp } of unlisted) {\n logMissing(name, imp, distImportPaths)\n }\n if (unlisted.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return unlisted.length\n}\n\nexport function fixUnlistedDependencies(\n workspace: Workspace,\n {\n dependencies, devDependencies, peerDependencies,\n }: CheckPackageParams,\n { externalDistImports, externalDistTypeImports }: CheckSourceParams,\n) {\n const unlisted = findUnlistedDependencies(workspace.name, dependencies, devDependencies, peerDependencies, externalDistImports, externalDistTypeImports)\n if (unlisted.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n const isTerminal = pkg.private === true\n\n for (const { imp, section } of unlisted) {\n const version = resolveDepVersion(workspace.location, imp)\n // For library packages, if the import shares peers with existing\n // peerDependencies, add it as a peer + dev instead of a dependency.\n const isPeer = !isTerminal\n && section === 'dependencies'\n && shouldBePeerDependency(imp, workspace.location, peerDependencies, externalDistImports)\n if (isPeer) {\n addDep(pkg, imp, version, 'peerDependencies')\n logFix(workspace, 'added to peerDependencies', imp, version)\n addDep(pkg, imp, version, 'devDependencies')\n logFix(workspace, 'added to devDependencies', imp, version)\n } else {\n addDep(pkg, imp, version, section)\n logFix(workspace, `added to ${section}`, imp, version)\n }\n }\n\n writePackageJson(workspace.location, pkg)\n return unlisted.length\n}\n","/**\n * After a packman convert, source files may still import from the old\n * ts-scripts variant (e.g. yarn3 → pnpm). Deplint should not flag\n * these as missing when the correct PM variant is installed.\n *\n * Maps each ts-scripts package to the variant it can be satisfied by.\n */\nconst VARIANT_MAP: Record<string, string> = {\n '@xylabs/ts-scripts-yarn3': '@xylabs/ts-scripts-pnpm',\n '@xylabs/ts-scripts-pnpm': '@xylabs/ts-scripts-yarn3',\n '@xylabs/ts-scripts-react-yarn3': '@xylabs/ts-scripts-react-pnpm',\n '@xylabs/ts-scripts-react-pnpm': '@xylabs/ts-scripts-react-yarn3',\n}\n\n/**\n * Returns true if `imp` is a ts-scripts import whose other PM variant\n * is present in the dependency lists, meaning the import is satisfied.\n */\nexport function isSatisfiedByTsScriptsVariant(\n imp: string,\n allDeps: string[],\n): boolean {\n const variant = VARIANT_MAP[imp]\n return variant !== undefined && allDeps.includes(variant)\n}\n\n/**\n * Returns true if `dep` is a ts-scripts package whose other PM variant\n * appears in the import list, meaning the dep is effectively used.\n */\nexport function isUsedViaTsScriptsVariant(\n dep: string,\n imports: string[],\n): boolean {\n const variant = VARIANT_MAP[dep]\n return variant !== undefined && imports.includes(variant)\n}\n","import { builtinModules } from 'node:module'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport {\n addDep, logFix, readPackageJson, resolveDepVersion, writePackageJson,\n} from '../packageJsonEditor.ts'\nimport { isSatisfiedByTsScriptsVariant } from '../tsScriptsAliases.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nexport function findUnlistedDevDeps(\n name: string,\n dependencies: string[],\n devDependencies: string[],\n peerDependencies: string[],\n externalAllImports: string[],\n distImports: string[],\n externalDistTypeImports: string[],\n): string[] {\n const results: string[] = []\n for (const imp of externalAllImports) {\n if (!distImports.includes(imp)\n && !externalDistTypeImports.includes(imp)\n && imp !== name\n && !dependencies.includes(imp)\n && !dependencies.includes(`@types/${imp}`)\n && !peerDependencies.includes(imp)\n && !peerDependencies.includes(`@types/${imp}`)\n && !devDependencies.includes(imp)\n && !devDependencies.includes(`@types/${imp}`)\n && !builtinModules.includes(imp)\n && !isSatisfiedByTsScriptsVariant(imp, [...dependencies, ...devDependencies, ...peerDependencies])\n ) {\n results.push(imp)\n }\n }\n return results\n}\n\nexport function getUnlistedDevDependencies(\n { name, location }: Workspace,\n {\n devDependencies, dependencies, peerDependencies,\n }: CheckPackageParams,\n {\n allImportPaths, externalAllImports, distImports, externalDistTypeImports,\n }: CheckSourceParams,\n) {\n const unlisted = findUnlistedDevDeps(name, dependencies, devDependencies, peerDependencies, externalAllImports, distImports, externalDistTypeImports)\n\n for (const imp of unlisted) {\n console.log(`[${chalk.blue(name)}] Missing devDependency in package.json: ${chalk.red(imp)}`)\n if (allImportPaths[imp]) {\n console.log(` ${allImportPaths[imp].join('\\n ')}`)\n }\n }\n if (unlisted.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return unlisted.length\n}\n\nexport function fixUnlistedDevDependencies(\n workspace: Workspace,\n {\n devDependencies, dependencies, peerDependencies,\n }: CheckPackageParams,\n {\n externalAllImports, distImports, externalDistTypeImports,\n }: CheckSourceParams,\n) {\n const unlisted = findUnlistedDevDeps(workspace.name, dependencies, devDependencies, peerDependencies, externalAllImports, distImports, externalDistTypeImports)\n if (unlisted.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const imp of unlisted) {\n const version = resolveDepVersion(workspace.location, imp)\n addDep(pkg, imp, version, 'devDependencies')\n logFix(workspace, 'added to devDependencies', imp, version)\n }\n\n writePackageJson(workspace.location, pkg)\n return unlisted.length\n}\n","import fs from 'node:fs'\n\nimport chalk from 'chalk'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport {\n logFix, readPackageJson, removeDep, writePackageJson,\n} from '../packageJsonEditor.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\nimport { getRequiredTransitivePeers } from './getUnsatisfiedPeerDependencies.ts'\n\n// --- Check A: Unrequested peers (imported but no dep requires it as a peer) ---\n\nfunction isPeerImportedInDist(dep: string, externalDistImports: string[], externalDistTypeImports: string[]): boolean {\n const baseName = dep.replace(/^@types\\//, '')\n return externalDistImports.includes(dep)\n || externalDistImports.includes(baseName)\n || externalDistTypeImports.includes(dep)\n || externalDistTypeImports.includes(baseName)\n}\n\nexport function findUnrequestedPeerDeps(\n location: string,\n packageParams: CheckPackageParams,\n { externalDistImports, externalDistTypeImports }: CheckSourceParams,\n exclude?: Set<string>,\n): string[] {\n const requiredPeers = getRequiredTransitivePeers(location, packageParams)\n\n const unrequested: string[] = []\n for (const dep of packageParams.peerDependencies) {\n if (exclude?.has(dep)) continue\n if (packageParams.dependencies.includes(dep)) continue\n if (!isPeerImportedInDist(dep, externalDistImports, externalDistTypeImports)) continue\n if (!requiredPeers.has(dep)) {\n unrequested.push(dep)\n }\n }\n return unrequested\n}\n\nexport function getUnrequestedPeerDependencies(\n { name, location }: Workspace,\n packageParams: CheckPackageParams,\n sourceParams: CheckSourceParams,\n exclude?: Set<string>,\n): number {\n // For library packages, importing a peerDep in dist is the normal pattern —\n // the library uses it but wants consumers to provide it.\n if (!isTerminalPackage(location)) return 0\n\n const unrequested = findUnrequestedPeerDeps(location, packageParams, sourceParams, exclude)\n\n for (const dep of unrequested) {\n console.log(\n `[${chalk.blue(name)}] Unnecessary peerDependency ${chalk.red(dep)}`\n + ' — imported in dist but no dependency requires it as a peer; should be a dependency',\n )\n }\n if (unrequested.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return unrequested.length\n}\n\nfunction isTerminalPackage(location: string): boolean {\n try {\n const pkg = JSON.parse(fs.readFileSync(`${location}/package.json`, 'utf8')) as Record<string, unknown>\n return pkg.private === true\n } catch {\n return false\n }\n}\n\nexport function fixUnrequestedPeerDependencies(\n workspace: Workspace,\n packageParams: CheckPackageParams,\n sourceParams: CheckSourceParams,\n exclude?: Set<string>,\n): number {\n const unrequested = findUnrequestedPeerDeps(workspace.location, packageParams, sourceParams, exclude)\n if (unrequested.length === 0) return 0\n\n const isTerminal = isTerminalPackage(workspace.location)\n const tsconfigExtendsSet = new Set(sourceParams.tsconfigExtends)\n\n // For library packages (non-private), unrequested peers are intentional —\n // the library wants consumers to provide them. Only move to dependencies\n // for terminal/private packages (apps, CLIs) or when the dep is only\n // referenced via tsconfig extends (a build-time need, not a runtime peer).\n const fixable = isTerminal\n ? unrequested\n : unrequested.filter(dep => tsconfigExtendsSet.has(dep))\n\n if (fixable.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const dep of fixable) {\n const version = packageParams.peerDependencyVersions[dep] ?? '*'\n removeDep(pkg, dep, 'peerDependencies')\n pkg.dependencies = pkg.dependencies ?? {}\n pkg.dependencies[dep] = version\n logFix(workspace, 'moved from peerDependencies to dependencies', dep)\n }\n\n writePackageJson(workspace.location, pkg)\n return fixable.length\n}\n\n// --- Check B: Redundant peers (also in dependencies) ---\n\nexport function findRedundantPeerDeps(\n { peerDependencies, dependencies }: CheckPackageParams,\n exclude?: Set<string>,\n): string[] {\n const depsSet = new Set(dependencies)\n const redundant: string[] = []\n for (const dep of peerDependencies) {\n if (exclude?.has(dep)) continue\n if (depsSet.has(dep)) {\n redundant.push(dep)\n }\n }\n return redundant\n}\n\nexport function getRedundantPeerDependencies(\n { name, location }: Workspace,\n packageParams: CheckPackageParams,\n exclude?: Set<string>,\n): number {\n const redundant = findRedundantPeerDeps(packageParams, exclude)\n\n for (const dep of redundant) {\n console.log(\n `[${chalk.blue(name)}] Redundant peerDependency ${chalk.red(dep)}`\n + ' — already listed in dependencies',\n )\n }\n if (redundant.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return redundant.length\n}\n\nexport function fixRedundantPeerDependencies(\n workspace: Workspace,\n packageParams: CheckPackageParams,\n exclude?: Set<string>,\n): number {\n const redundant = findRedundantPeerDeps(packageParams, exclude)\n if (redundant.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const dep of redundant) {\n removeDep(pkg, dep, 'peerDependencies')\n logFix(workspace, 'removed redundant peerDependency (kept in dependencies)', dep)\n }\n\n writePackageJson(workspace.location, pkg)\n return redundant.length\n}\n","import fs from 'node:fs'\n\nimport chalk from 'chalk'\nimport semver from 'semver'\nimport sortPackageJson from 'sort-package-json'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport { findDepPackageJson } from '../getRequiredPeerDependencies.ts'\nimport type { CheckPackageParams } from './checkPackageTypes.ts'\n\nexport interface PeerSource {\n /** Dependency chain for transitive peers, e.g. ['direct-dep', 'transitive-dep'] */\n chain?: string[]\n isRuntimeDep: boolean\n requiredBy: string\n}\n\nexport interface UnsatisfiedPeer {\n hasRuntimeSource: boolean\n installedVersion?: string\n peer: string\n reason: 'missing' | 'version-mismatch'\n sources: PeerSource[]\n versionRange: string\n}\n\nfunction readDepPackageJson(location: string, dep: string): Record<string, unknown> | undefined {\n const depPkgPath = findDepPackageJson(location, dep)\n if (!depPkgPath) return undefined\n try {\n return JSON.parse(fs.readFileSync(depPkgPath, 'utf8')) as Record<string, unknown>\n } catch {\n return undefined\n }\n}\n\nfunction readPeerDeps(location: string, dep: string): string[] {\n const pkg = readDepPackageJson(location, dep)\n if (!pkg) return []\n const peers = pkg.peerDependencies as Record<string, string> | undefined\n return Object.keys(peers ?? {})\n}\n\nfunction readPeerVersionRange(location: string, dep: string, peer: string): string | undefined {\n const pkg = readDepPackageJson(location, dep)\n if (!pkg) return undefined\n const peers = pkg.peerDependencies as Record<string, string> | undefined\n return peers?.[peer]\n}\n\nfunction readInstalledVersion(location: string, dep: string): string | undefined {\n const pkg = readDepPackageJson(location, dep)\n if (!pkg) return undefined\n return pkg.version as string | undefined\n}\n\nfunction isPeerOptionalInAll(location: string, peer: string, sources: PeerSource[]): boolean {\n for (const source of sources) {\n const pkg = readDepPackageJson(location, source.requiredBy)\n if (!pkg) continue\n const meta = (pkg.peerDependenciesMeta as Record<string, { optional?: boolean }> | undefined)?.[peer]\n if (!meta?.optional) return false\n }\n return true\n}\n\nconst MAX_TRANSITIVE_DEPTH = 2\n\nfunction collectPeerSources(\n location: string,\n dependencies: string[],\n devDependencies: string[],\n): Map<string, PeerSource[]> {\n const peerSources = new Map<string, PeerSource[]>()\n const visited = new Set<string>()\n\n function addPeerSource(peer: string, source: PeerSource): void {\n const sources = peerSources.get(peer) ?? []\n sources.push(source)\n peerSources.set(peer, sources)\n }\n\n function collectFromDeps(deps: string[], isRuntime: boolean, chain: string[]): void {\n for (const dep of deps) {\n const visitKey = `${dep}:${chain.join('>')}`\n if (visited.has(visitKey)) continue\n visited.add(visitKey)\n\n for (const peer of readPeerDeps(location, dep)) {\n addPeerSource(peer, {\n chain: chain.length > 0 ? [...chain, dep] : undefined,\n isRuntimeDep: isRuntime,\n requiredBy: dep,\n })\n }\n\n // Recurse into this dep's own runtime dependencies (not devDeps)\n if (chain.length < MAX_TRANSITIVE_DEPTH) {\n const depPkg = readDepPackageJson(location, dep)\n if (depPkg) {\n const transitiveDeps = Object.keys((depPkg.dependencies as Record<string, string> | undefined) ?? {})\n collectFromDeps(transitiveDeps, isRuntime, [...chain, dep])\n }\n }\n }\n }\n\n collectFromDeps(dependencies, true, [])\n\n const devOnly = devDependencies.filter(d => !dependencies.includes(d))\n collectFromDeps(devOnly, false, [])\n\n return peerSources\n}\n\nfunction formatChain(sources: PeerSource[]): string {\n const chainsWithDepth = sources.filter(s => s.chain && s.chain.length > 0)\n if (chainsWithDepth.length === 0) return ''\n const first = chainsWithDepth[0]\n return ` (via ${chalk.dim(first.chain!.join(' → '))})`\n}\n\n/**\n * Returns the full set of peer dependency names required by all deps and devDeps.\n * Used to prevent the unused-dependency checks from removing deps that satisfy\n * transitive peer requirements.\n */\nexport function getRequiredTransitivePeers(\n location: string,\n { dependencies, devDependencies }: CheckPackageParams,\n): Set<string> {\n const peerSources = collectPeerSources(location, dependencies, devDependencies)\n return new Set(peerSources.keys())\n}\n\nfunction logUnsatisfiedPeer(name: string, unsatisfied: UnsatisfiedPeer): void {\n const {\n peer, sources, reason, hasRuntimeSource, installedVersion, versionRange,\n } = unsatisfied\n const chainInfo = formatChain(sources)\n\n if (reason === 'version-mismatch') {\n const requiredByList = sources.map(s => s.requiredBy)\n console.log(\n `[${chalk.blue(name)}] Peer dependency version mismatch ${chalk.red(peer)}`\n + ` — installed ${chalk.yellow(installedVersion ?? 'unknown')}`\n + ` does not satisfy ${chalk.cyan(versionRange)}`\n + ` (required by ${chalk.cyan(requiredByList.join(', '))})`\n + chainInfo,\n )\n } else if (hasRuntimeSource) {\n const requiredByList = sources.filter(s => s.isRuntimeDep).map(s => s.requiredBy)\n console.log(\n `[${chalk.blue(name)}] Unsatisfied peer dependency ${chalk.red(peer)}`\n + ` (required by ${chalk.cyan(requiredByList.join(', '))})`\n + chainInfo\n + ' — must be in dependencies or peerDependencies',\n )\n } else {\n const requiredByList = sources.map(s => s.requiredBy)\n console.log(\n `[${chalk.blue(name)}] Unsatisfied peer dependency ${chalk.red(peer)}`\n + ` (required by devDependency ${chalk.cyan(requiredByList.join(', '))})`\n + chainInfo\n + ' — must be in dependencies, devDependencies, or peerDependencies',\n )\n }\n}\n\nfunction resolveVersionRange(location: string, sources: PeerSource[], peer: string): string {\n for (const source of sources) {\n const range = readPeerVersionRange(location, source.requiredBy, peer)\n if (range) return range\n }\n return '*'\n}\n\nfunction checkVersionSatisfaction(location: string, peer: string, requestedRange: string): { installedVersion?: string; satisfied: boolean } {\n const installedVersion = readInstalledVersion(location, peer)\n if (!installedVersion) return { satisfied: true }\n if (requestedRange === '*') return { installedVersion, satisfied: true }\n // workspace: protocol versions resolve at install time — always satisfied\n if (requestedRange.startsWith('workspace:')) return { installedVersion, satisfied: true }\n\n try {\n const satisfied = semver.satisfies(installedVersion, requestedRange, { includePrerelease: true })\n return { installedVersion, satisfied }\n } catch {\n // Invalid semver range or version — skip version check\n return { installedVersion, satisfied: true }\n }\n}\n\nfunction findDeclaredPeerVersionMismatches(\n name: string,\n location: string,\n peerDependencies: string[],\n peerDependencyVersions: Record<string, string>,\n exclude?: Set<string>,\n): UnsatisfiedPeer[] {\n const results: UnsatisfiedPeer[] = []\n for (const peer of peerDependencies) {\n if (exclude?.has(peer) || peer === name) continue\n const declaredRange = peerDependencyVersions[peer]\n if (!declaredRange || declaredRange === '*') continue\n const { installedVersion, satisfied } = checkVersionSatisfaction(location, peer, declaredRange)\n if (!satisfied) {\n results.push({\n hasRuntimeSource: true,\n installedVersion,\n peer,\n reason: 'version-mismatch',\n sources: [{ isRuntimeDep: true, requiredBy: name }],\n versionRange: declaredRange,\n })\n }\n }\n return results\n}\n\nexport function findUnsatisfiedPeers(\n { name, location }: Workspace,\n {\n dependencies, devDependencies, peerDependencies, peerDependencyVersions,\n }: CheckPackageParams,\n exclude?: Set<string>,\n): UnsatisfiedPeer[] {\n const peerSources = collectPeerSources(location, dependencies, devDependencies)\n const depsSet = new Set(dependencies)\n const devDepsSet = new Set(devDependencies)\n const unsatisfied: UnsatisfiedPeer[] = []\n\n for (const [peer, sources] of peerSources) {\n if (exclude?.has(peer) || peer === name) continue\n if (isPeerOptionalInAll(location, peer, sources)) continue\n\n const hasRuntimeSource = sources.some(s => s.isRuntimeDep)\n // A peer is provided if it's in dependencies or devDependencies.\n // Being in peerDependencies alone only passes the requirement to consumers\n // but doesn't actually provide the package (yarn will warn \"doesn't provide\").\n const isPresent = depsSet.has(peer) || devDepsSet.has(peer)\n\n if (!isPresent) {\n const versionRange = resolveVersionRange(location, sources, peer)\n unsatisfied.push({\n hasRuntimeSource, peer, reason: 'missing', sources, versionRange,\n })\n continue\n }\n\n const versionRange = resolveVersionRange(location, sources, peer)\n const { installedVersion, satisfied } = checkVersionSatisfaction(location, peer, versionRange)\n if (!satisfied) {\n unsatisfied.push({\n hasRuntimeSource, installedVersion, peer, reason: 'version-mismatch', sources, versionRange,\n })\n }\n }\n\n return [\n ...unsatisfied,\n ...findDeclaredPeerVersionMismatches(name, location, peerDependencies, peerDependencyVersions, exclude),\n ]\n}\n\n/**\n * Checks that peerDependencies of all dependencies and devDependencies are\n * properly satisfied — both present and version-compatible.\n *\n * Rules:\n * - If a dep in `dependencies` requires peer P, then P must be in\n * `dependencies` or `peerDependencies`.\n * - If a dep in `devDependencies` requires peer P, then P can also be\n * in `devDependencies`.\n * - If multiple deps require the same peer P and at least one is a runtime\n * dependency, the runtime rule applies (P must be in deps or peerDeps).\n * - Checks peers transitively up to 2 levels deep in the dependency tree.\n * - Validates that installed versions satisfy the requested peer ranges.\n */\nexport interface CheckPeerResult {\n count: number\n unsatisfiedPeers: Set<string>\n}\n\nexport function getUnsatisfiedPeerDependencies(\n workspace: Workspace,\n packageParams: CheckPackageParams,\n exclude?: Set<string>,\n): CheckPeerResult {\n const unsatisfied = findUnsatisfiedPeers(workspace, packageParams, exclude)\n\n for (const entry of unsatisfied) {\n logUnsatisfiedPeer(workspace.name, entry)\n }\n\n if (unsatisfied.length > 0) {\n console.log(` ${chalk.yellow(`${workspace.location}/package.json`)}\\n`)\n }\n return {\n count: unsatisfied.length,\n unsatisfiedPeers: new Set(unsatisfied.map(u => u.peer)),\n }\n}\n\n/**\n * Determines if a package is \"terminal\" (an app, CLI, or website — not a library).\n * Terminal packages have their peers added to dependencies; libraries use peerDependencies.\n */\nfunction isTerminalPackage(packageJsonPath: string): boolean {\n try {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as Record<string, unknown>\n return pkg.private === true\n } catch {\n return false\n }\n}\n\n/**\n * Fixes unsatisfied peer dependencies by adding them to package.json.\n *\n * - Terminal packages (private: true): runtime peers go to dependencies,\n * dev-only peers go to devDependencies\n * - Library packages: runtime peers go to peerDependencies,\n * dev-only peers go to devDependencies\n * - Version mismatches are reported but not auto-fixed (requires manual review)\n */\nexport interface FixPeerResult {\n addedPeers: Set<string>\n count: number\n}\n\nfunction fixVersionMismatch(\n workspaceName: string,\n entry: UnsatisfiedPeer,\n pkg: Record<string, Record<string, string>>,\n): boolean {\n const {\n installedVersion, peer, versionRange,\n } = entry\n if (!installedVersion) {\n logUnsatisfiedPeer(workspaceName, entry)\n console.log(\n ` ${chalk.dim('(version mismatch — could not resolve installed version)')}`,\n )\n return false\n }\n\n const match = /^(\\d+)\\.(\\d+)/.exec(installedVersion)\n if (!match) {\n logUnsatisfiedPeer(workspaceName, entry)\n console.log(\n ` ${chalk.dim('(version mismatch — could not resolve installed version)')}`,\n )\n return false\n }\n\n const expectedVersion = versionRange.startsWith('^')\n ? `^${match[1]}`\n : `~${match[1]}.${match[2]}`\n\n if (pkg.peerDependencies?.[peer]) {\n pkg.peerDependencies[peer] = expectedVersion\n }\n if (pkg.devDependencies?.[peer] && !pkg.devDependencies[peer].startsWith('workspace:')) {\n pkg.devDependencies[peer] = expectedVersion\n }\n\n console.log(\n `[${chalk.blue(workspaceName)}] Fixed: updated ${chalk.green(peer)}`\n + ` version to ${chalk.cyan(expectedVersion)} (was ${chalk.yellow(versionRange)})`,\n )\n return true\n}\n\nexport function fixUnsatisfiedPeerDependencies(\n workspace: Workspace,\n packageParams: CheckPackageParams,\n exclude?: Set<string>,\n): FixPeerResult {\n const unsatisfied = findUnsatisfiedPeers(workspace, packageParams, exclude)\n if (unsatisfied.length === 0) return { addedPeers: new Set(), count: 0 }\n\n const packageJsonPath = `${workspace.location}/package.json`\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as Record<string, Record<string, string>>\n const isTerminal = isTerminalPackage(packageJsonPath)\n\n const addedPeers = new Set<string>()\n let fixedCount = 0\n for (const entry of unsatisfied) {\n const {\n hasRuntimeSource,\n peer,\n reason,\n sources,\n versionRange,\n } = entry\n\n if (reason === 'version-mismatch') {\n if (fixVersionMismatch(workspace.name, entry, pkg)) fixedCount++\n continue\n }\n\n const sections = resolvePeerTargetSections(hasRuntimeSource, isTerminal)\n for (const section of sections) {\n pkg[section] = pkg[section] ?? {}\n pkg[section][peer] = versionRange\n }\n addedPeers.add(peer)\n\n const requiredByList = sources.map(s => s.requiredBy).join(', ')\n console.log(\n `[${chalk.blue(workspace.name)}] Fixed: added ${chalk.green(peer)}@${versionRange}`\n + ` to ${chalk.cyan(sections.join(' + '))} (required by ${requiredByList})`,\n )\n fixedCount++\n }\n\n if (fixedCount > 0) {\n const sorted = sortPackageJson(JSON.stringify(pkg, null, 2))\n fs.writeFileSync(packageJsonPath, `${sorted}\\n`)\n }\n\n return { addedPeers, count: unsatisfied.length }\n}\n\n/**\n * For terminal packages (apps): runtime peers → dependencies, dev-only → devDependencies.\n * For library packages: runtime peers → peerDependencies + devDependencies (peer passes\n * the requirement to consumers, devDep satisfies it for the library's own development).\n * Dev-only peers → devDependencies only.\n */\nexport function resolvePeerTargetSections(hasRuntimeSource: boolean, isTerminal: boolean): string[] {\n if (!hasRuntimeSource) return ['devDependencies']\n if (isTerminal) return ['dependencies']\n return ['peerDependencies', 'devDependencies']\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport { getRequiredPeerDependencies } from '../getRequiredPeerDependencies.ts'\nimport {\n logFix, moveDep, readPackageJson, removeDep, writePackageJson,\n} from '../packageJsonEditor.ts'\nimport { isUsedViaTsScriptsVariant } from '../tsScriptsAliases.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nfunction isDepImported(dep: string, distImports: string[], distTypeImports: string[]): boolean {\n const baseName = dep.replace(/^@types\\//, '')\n return distImports.includes(dep)\n || distImports.includes(baseName)\n || distTypeImports.includes(dep)\n || distTypeImports.includes(baseName)\n}\n\nexport type UnusedDepKind = 'move-to-dev' | 'remove'\n\nexport interface UnusedDep {\n dep: string\n kind: UnusedDepKind\n reason?: string\n}\n\nexport function findUnusedDependencies(\n location: string,\n dependencies: string[],\n devDependencies: string[],\n externalDistImports: string[],\n externalDistTypeImports: string[],\n externalAllImports: string[],\n exclude?: Set<string>,\n): UnusedDep[] {\n const runtimeRequiredPeers = getRequiredPeerDependencies(location, dependencies)\n const devRequiredPeers = getRequiredPeerDependencies(location, devDependencies)\n const results: UnusedDep[] = []\n\n for (const dep of dependencies) {\n if (exclude?.has(dep)) continue\n if (runtimeRequiredPeers.has(dep)) continue\n\n const isImported = isDepImported(dep, externalDistImports, externalDistTypeImports)\n if (isImported || isUsedViaTsScriptsVariant(dep, [...externalDistImports, ...externalDistTypeImports])) continue\n\n if (devRequiredPeers.has(dep)) {\n results.push({\n dep, kind: 'move-to-dev', reason: 'only needed as peer of devDependencies',\n })\n } else if (externalAllImports.includes(dep)) {\n results.push({ dep, kind: 'move-to-dev' })\n } else {\n results.push({ dep, kind: 'remove' })\n }\n }\n\n return results\n}\n\nexport function getUnusedDependencies(\n { name, location }: Workspace,\n { dependencies, devDependencies }: CheckPackageParams,\n {\n externalDistImports,\n externalDistTypeImports,\n externalAllImports,\n }: CheckSourceParams,\n exclude?: Set<string>,\n) {\n const unused = findUnusedDependencies(location, dependencies, devDependencies, externalDistImports, externalDistTypeImports, externalAllImports, exclude)\n\n for (const {\n dep, kind, reason,\n } of unused) {\n const reasonStr = reason ? ` (${reason})` : ''\n if (kind === 'move-to-dev') {\n console.log(`[${chalk.blue(name)}] dependency should be devDependency in package.json: ${chalk.red(dep)}${reasonStr}`)\n } else {\n console.log(`[${chalk.blue(name)}] Unused dependency in package.json: ${chalk.red(dep)}`)\n }\n }\n if (unused.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return unused.length\n}\n\nexport function fixUnusedDependencies(\n workspace: Workspace,\n { dependencies, devDependencies }: CheckPackageParams,\n {\n externalDistImports,\n externalDistTypeImports,\n externalAllImports,\n }: CheckSourceParams,\n exclude?: Set<string>,\n) {\n const unused = findUnusedDependencies(workspace.location, dependencies, devDependencies, externalDistImports, externalDistTypeImports, externalAllImports, exclude)\n if (unused.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const { dep, kind } of unused) {\n if (kind === 'move-to-dev') {\n moveDep(pkg, dep, 'dependencies', 'devDependencies')\n logFix(workspace, 'moved to devDependencies', dep)\n } else {\n removeDep(pkg, dep, 'dependencies')\n logFix(workspace, 'removed from dependencies', dep)\n }\n }\n\n writePackageJson(workspace.location, pkg)\n return unused.length\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport { getCliReferencedPackagesFromFiles } from '../getCliReferencedPackagesFromFiles.ts'\nimport { getRequiredPeerDependencies } from '../getRequiredPeerDependencies.ts'\nimport { getScriptReferencedPackages } from '../getScriptReferencedPackages.ts'\nimport type { FileContext } from '../implicitDevDependencies.ts'\nimport { getImplicitDevDependencies } from '../implicitDevDependencies.ts'\nimport {\n logFix, readPackageJson, removeDep, writePackageJson,\n} from '../packageJsonEditor.ts'\nimport { isUsedViaTsScriptsVariant } from '../tsScriptsAliases.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nconst allExternalImports = ({\n externalAllImports,\n externalDistImports,\n externalDistTypeImports,\n}: CheckSourceParams) => {\n return new Set<string>([\n ...externalAllImports,\n ...externalDistImports,\n ...externalDistTypeImports,\n ])\n}\n\nfunction isDevDepUsed(\n dep: string,\n allImports: Set<string>,\n implicitDeps: Set<string>,\n requiredPeers: Set<string>,\n scriptRefs: Set<string>,\n cliRefs: Set<string>,\n) {\n if (implicitDeps.has(dep)) return true\n if (requiredPeers.has(dep)) return true\n if (scriptRefs.has(dep)) return true\n if (cliRefs.has(dep)) return true\n\n if (dep.startsWith('@types/')) {\n const baseName = dep.replace(/^@types\\//, '')\n return allImports.has(baseName) || allImports.has(dep) || implicitDeps.has(baseName)\n }\n\n if (allImports.has(dep)) return true\n return isUsedViaTsScriptsVariant(dep, [...allImports])\n}\n\nexport function findUnusedDevDeps(\n location: string,\n dependencies: string[],\n devDependencies: string[],\n peerDependencies: string[],\n sourceParams: CheckSourceParams,\n fileContext: FileContext,\n exclude?: Set<string>,\n): string[] {\n const allImports = allExternalImports(sourceParams)\n const allDeps = [...dependencies, ...devDependencies, ...peerDependencies]\n const implicitDeps = getImplicitDevDependencies({\n ...fileContext, allDependencies: allDeps, location,\n })\n const requiredPeers = getRequiredPeerDependencies(location, allDeps)\n const scriptRefs = getScriptReferencedPackages(location, allDeps)\n const cliRefs = getCliReferencedPackagesFromFiles(fileContext.allFiles, location, allDeps)\n const unused: string[] = []\n\n for (const dep of devDependencies) {\n if (exclude?.has(dep)) continue\n if (dependencies.includes(dep) || peerDependencies.includes(dep)) continue\n\n if (!isDevDepUsed(dep, allImports, implicitDeps, requiredPeers, scriptRefs, cliRefs)) {\n unused.push(dep)\n }\n }\n\n return unused\n}\n\nexport function getUnusedDevDependencies(\n { name, location }: Workspace,\n {\n devDependencies, dependencies, peerDependencies,\n }: CheckPackageParams,\n sourceParams: CheckSourceParams,\n fileContext: FileContext,\n exclude?: Set<string>,\n) {\n const unused = findUnusedDevDeps(location, dependencies, devDependencies, peerDependencies, sourceParams, fileContext, exclude)\n\n for (const dep of unused) {\n console.log(`[${chalk.blue(name)}] Unused devDependency in package.json: ${chalk.red(dep)}`)\n }\n if (unused.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return unused.length\n}\n\nexport function fixUnusedDevDependencies(\n workspace: Workspace,\n {\n devDependencies, dependencies, peerDependencies,\n }: CheckPackageParams,\n sourceParams: CheckSourceParams,\n fileContext: FileContext,\n exclude?: Set<string>,\n) {\n const unused = findUnusedDevDeps(workspace.location, dependencies, devDependencies, peerDependencies, sourceParams, fileContext, exclude)\n if (unused.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const dep of unused) {\n removeDep(pkg, dep, 'devDependencies')\n logFix(workspace, 'removed from devDependencies', dep)\n }\n\n writePackageJson(workspace.location, pkg)\n return unused.length\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport ts from 'typescript'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\nimport { getBinNames, tokenizeScript } from './getScriptReferencedPackages.ts'\n\n/**\n * Names of child_process functions that execute shell commands as a single\n * string (first argument is a command string to tokenize).\n */\nconst shellCommandFunctions = new Set(['execSync', 'exec'])\n\n/**\n * Names of child_process functions where the first argument is the\n * executable name directly (not a full shell command string).\n */\nconst directExecFunctions = new Set(['spawn', 'spawnSync', 'execFile', 'execFileSync'])\n\n/**\n * All child_process function names we scan for.\n */\nconst allExecFunctions = new Set([...shellCommandFunctions, ...directExecFunctions])\n\n/**\n * Extracts command strings from child_process calls (execSync, spawn, etc.)\n * found in a single source file.\n *\n * For shell-style calls (execSync, exec) the first argument is a command\n * string like \"npx typedoc --options foo\" — we tokenize it and return the\n * tokens. For direct-exec calls (spawn, spawnSync, execFile, execFileSync)\n * the first argument is the executable name itself.\n */\nfunction getCommandTokensFromFile(filePath: string): Set<string> {\n const tokens = new Set<string>()\n let sourceCode: string\n try {\n sourceCode = fs.readFileSync(filePath, 'utf8')\n } catch {\n return tokens\n }\n\n const isMjsFile = filePath.endsWith('.mjs')\n const sourceFile = ts.createSourceFile(\n path.basename(filePath),\n sourceCode,\n ts.ScriptTarget.Latest,\n true,\n isMjsFile ? ts.ScriptKind.JS : undefined,\n )\n\n function visit(node: ts.Node) {\n if (ts.isCallExpression(node) && node.arguments.length > 0) {\n const fnName = getFunctionName(node.expression)\n if (fnName && allExecFunctions.has(fnName)) {\n const firstArg = node.arguments[0]\n if (ts.isStringLiteral(firstArg) || ts.isNoSubstitutionTemplateLiteral(firstArg)) {\n const value = firstArg.text\n if (shellCommandFunctions.has(fnName)) {\n // Shell command string — tokenize to extract the executable and args\n for (const token of tokenizeScript(value)) {\n tokens.add(token)\n }\n } else {\n // Direct exec — first arg is the executable name\n tokens.add(value)\n }\n } else if (ts.isTemplateExpression(firstArg)) {\n // Template literal like `npx typedoc --options ${path}` — extract\n // the static head which usually contains the command name\n const head = firstArg.head.text\n if (head) {\n for (const token of tokenizeScript(head)) {\n tokens.add(token)\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit)\n }\n\n visit(sourceFile)\n return tokens\n}\n\n/**\n * Resolves the function name from a call expression, handling both direct\n * calls like `execSync(...)` and qualified calls like `child_process.execSync(...)`.\n */\nfunction getFunctionName(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr)) {\n return expr.text\n }\n if (ts.isPropertyAccessExpression(expr) && ts.isIdentifier(expr.name)) {\n return expr.name.text\n }\n return undefined\n}\n\n/**\n * Scans source files for child_process calls (execSync, spawn, etc.) and\n * resolves referenced packages by matching command tokens against known\n * dependency binary names.\n *\n * This complements getScriptReferencedPackages (which scans package.json\n * scripts) by catching CLI usage in actual source code, e.g.:\n * execSync(`npx typedoc --options ${configPath}`)\n * spawnSync('eslint', ['--fix', '.'])\n */\nexport function getCliReferencedPackagesFromFiles(\n allFiles: string[],\n location: string,\n allDeps: string[],\n): Set<string> {\n // Collect all command tokens from every source file\n const allTokens = new Set<string>()\n for (const file of allFiles) {\n for (const token of getCommandTokensFromFile(file)) {\n allTokens.add(token)\n }\n }\n\n if (allTokens.size === 0) return new Set()\n\n // Build bin-name -> package-name map (same approach as getScriptReferencedPackages)\n const binToPackage = new Map<string, string>()\n for (const dep of allDeps) {\n for (const bin of getBinNames(location, dep)) {\n binToPackage.set(bin, dep)\n }\n }\n\n const referenced = new Set<string>()\n for (const token of allTokens) {\n // Direct package name match\n const baseName = getBasePackageName(token)\n if (allDeps.includes(baseName)) {\n referenced.add(baseName)\n }\n // Binary name match (e.g. token \"typedoc\" -> package \"typedoc\")\n const pkg = binToPackage.get(token)\n if (pkg) {\n referenced.add(pkg)\n }\n }\n\n return referenced\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport { getBasePackageName } from './getBasePackageName.ts'\nimport { findDepPackageJson } from './getRequiredPeerDependencies.ts'\n\nexport function getBinNames(location: string, dep: string): string[] {\n const depPkgPath = findDepPackageJson(location, dep)\n if (!depPkgPath) return []\n try {\n const raw = fs.readFileSync(depPkgPath, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n if (!pkg.bin) return []\n if (typeof pkg.bin === 'string') return [((pkg.name as string | undefined)?.split('/').pop()) ?? dep]\n return Object.keys(pkg.bin as Record<string, unknown>)\n } catch {\n return []\n }\n}\n\nexport function tokenizeScript(script: string): string[] {\n // Split on shell operators and whitespace to get command tokens\n return script\n .split(/[&|;$()\"`\\s]+/)\n .map(t => t.trim())\n .filter(Boolean)\n}\n\n/**\n * Scans package.json scripts for references to installed packages,\n * either by package name or by binary name they provide.\n */\nexport function getScriptReferencedPackages(\n location: string,\n allDeps: string[],\n): Set<string> {\n const pkgPath = path.join(location, 'package.json')\n let scripts: Record<string, string>\n try {\n const raw = fs.readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n scripts = (pkg.scripts ?? {}) as Record<string, string>\n } catch {\n return new Set()\n }\n\n const scriptText = Object.values(scripts).join(' ')\n const tokens = new Set(tokenizeScript(scriptText))\n\n // Build a map from bin name -> package name\n const binToPackage = new Map<string, string>()\n for (const dep of allDeps) {\n const bins = getBinNames(location, dep)\n for (const bin of bins) {\n binToPackage.set(bin, dep)\n }\n }\n\n const referenced = new Set<string>()\n for (const token of tokens) {\n // Direct package name match (e.g. \"yarn rimraf\" -> token \"rimraf\")\n const baseName = getBasePackageName(token)\n if (allDeps.includes(baseName)) {\n referenced.add(baseName)\n }\n // Binary name match (e.g. \"tsup\" -> @xylabs/ts-scripts-yarn3 provides \"tsup\"? no, tsup provides \"tsup\")\n const pkg = binToPackage.get(token)\n if (pkg) {\n referenced.add(pkg)\n }\n }\n\n return referenced\n}\n","import fs from 'node:fs'\n\nimport { detectPackageManager } from '../../pm/index.ts'\nimport { findDepPackageJson } from './getRequiredPeerDependencies.ts'\n\nexport interface ImplicitDevDependencyRule {\n isNeeded: (context: ImplicitDepContext) => boolean\n package: string\n}\n\nexport interface FileContext {\n allFiles: string[]\n distFiles: string[]\n}\n\nexport interface ImplicitDepContext extends FileContext {\n allDependencies: string[]\n location: string\n}\n\nconst hasFileWithExtension = (files: string[], extensions: string[]) =>\n files.some(f => extensions.some(ext => f.endsWith(ext)))\n\nconst tsExtensions = ['.ts', '.tsx', '.mts', '.cts']\n\nconst hasTypescriptFiles = ({ allFiles }: ImplicitDepContext) =>\n hasFileWithExtension(allFiles, tsExtensions)\n\n// Matches decorator usage: @something at the start of a line (after optional whitespace).\n// Safe from JSDoc false positives since those appear after * in comment blocks.\nconst decoratorPattern = /^\\s*@[a-zA-Z]\\w*/m\n\nconst hasDecorators = ({ allFiles }: ImplicitDepContext) =>\n allFiles\n .filter(f => tsExtensions.some(ext => f.endsWith(ext)))\n .some((file) => {\n try {\n const content = fs.readFileSync(file, 'utf8')\n return decoratorPattern.test(content)\n } catch {\n return false\n }\n })\n\n/**\n * Checks if any direct dependency declares tslib as a peer dependency.\n * Many compiled TypeScript packages require tslib at runtime even when\n * the consuming package doesn't use decorators itself.\n */\nconst hasDependencyRequiringTslib = ({ location, allDependencies }: ImplicitDepContext) =>\n allDependencies.some((dep) => {\n const pkgPath = findDepPackageJson(location, dep)\n if (!pkgPath) return false\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n const peers = pkg.peerDependencies as Record<string, string> | undefined\n return peers !== undefined && 'tslib' in peers\n } catch {\n return false\n }\n })\n\nconst importPlugins = new Set(['eslint-plugin-import-x', 'eslint-plugin-import'])\n\n/**\n * Checks whether any dependency (direct or transitive) pulls in\n * one of the eslint import plugins that require a resolver.\n */\nfunction hasImportPlugin({ location, allDependencies }: ImplicitDepContext): boolean {\n // Direct dependency on the plugin\n if (allDependencies.some(d => importPlugins.has(d))) return true\n\n // Transitive: a dependency bundles the plugin as a dep or peer\n for (const dep of allDependencies) {\n const pkgPath = findDepPackageJson(location, dep)\n if (!pkgPath) continue\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n const transitiveDeps = [\n ...Object.keys((pkg.dependencies ?? {}) as Record<string, unknown>),\n ...Object.keys((pkg.peerDependencies ?? {}) as Record<string, unknown>),\n ]\n if (transitiveDeps.some(d => importPlugins.has(d))) return true\n } catch {\n // skip unreadable packages\n }\n }\n return false\n}\n\nconst hasVitest = ({ allDependencies }: ImplicitDepContext) =>\n allDependencies.includes('vitest')\n\nconst isYarnRepo = () => detectPackageManager() === 'yarn'\nconst isPnpmRepo = () => detectPackageManager() === 'pnpm'\n\nconst rules: ImplicitDevDependencyRule[] = [\n {\n package: 'typescript',\n isNeeded: hasTypescriptFiles,\n },\n {\n package: 'eslint-import-resolver-typescript',\n isNeeded: context =>\n hasTypescriptFiles(context)\n && context.allDependencies.includes('eslint')\n && hasImportPlugin(context),\n },\n {\n package: 'tslib',\n isNeeded: context => hasDecorators(context) || hasDependencyRequiringTslib(context),\n },\n {\n package: '@vitest/coverage-v8',\n isNeeded: hasVitest,\n },\n {\n package: '@xylabs/ts-scripts-yarn3',\n isNeeded: isYarnRepo,\n },\n {\n package: '@xylabs/ts-scripts-react-yarn3',\n isNeeded: isYarnRepo,\n },\n {\n package: '@xylabs/ts-scripts-pnpm',\n isNeeded: isPnpmRepo,\n },\n {\n package: '@xylabs/ts-scripts-react-pnpm',\n isNeeded: isPnpmRepo,\n },\n]\n\nexport function getImplicitDevDependencies(context: ImplicitDepContext): Set<string> {\n const implicit = new Set<string>()\n for (const rule of rules) {\n if (rule.isNeeded(context)) {\n implicit.add(rule.package)\n }\n }\n return implicit\n}\n","import chalk from 'chalk'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport {\n logFix, readPackageJson, removeDep, writePackageJson,\n} from '../packageJsonEditor.ts'\nimport type { CheckPackageParams, CheckSourceParams } from './checkPackageTypes.ts'\n\nfunction isPeerUsed(dep: string, externalDistImports: string[], externalDistTypeImports: string[]): boolean {\n const baseName = dep.replace(/^@types\\//, '')\n return externalDistImports.includes(dep)\n || externalDistImports.includes(baseName)\n || externalDistTypeImports.includes(dep)\n || externalDistTypeImports.includes(baseName)\n}\n\nexport function findUnusedPeerDeps(\n peerDependencies: string[],\n externalDistImports: string[],\n externalDistTypeImports: string[],\n exclude?: Set<string>,\n): string[] {\n const unused: string[] = []\n for (const dep of peerDependencies) {\n if (exclude?.has(dep)) continue\n if (!isPeerUsed(dep, externalDistImports, externalDistTypeImports)) {\n unused.push(dep)\n }\n }\n return unused\n}\n\nexport function getUnusedPeerDependencies(\n { name, location }: Workspace,\n { peerDependencies, dependencies }: CheckPackageParams,\n { externalDistImports, externalDistTypeImports }: CheckSourceParams,\n exclude?: Set<string>,\n) {\n const unused = findUnusedPeerDeps(peerDependencies, externalDistImports, externalDistTypeImports, exclude)\n\n for (const dep of unused) {\n if (dependencies.includes(dep)) {\n console.log(`[${chalk.blue(name)}] Unused peerDependency [already a dependency] in package.json: ${chalk.red(dep)}`)\n } else {\n console.log(`[${chalk.blue(name)}] Unused peerDependency in package.json: ${chalk.red(dep)}`)\n }\n }\n if (unused.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return unused.length\n}\n\nexport function fixUnusedPeerDependencies(\n workspace: Workspace,\n { peerDependencies }: CheckPackageParams,\n { externalDistImports, externalDistTypeImports }: CheckSourceParams,\n exclude?: Set<string>,\n) {\n const unused = findUnusedPeerDeps(peerDependencies, externalDistImports, externalDistTypeImports, exclude)\n if (unused.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const dep of unused) {\n removeDep(pkg, dep, 'peerDependencies')\n logFix(workspace, 'removed from peerDependencies', dep)\n }\n\n writePackageJson(workspace.location, pkg)\n return unused.length\n}\n","import chalk from 'chalk'\nimport semver from 'semver'\n\nimport type { Workspace } from '../../../pm/index.ts'\nimport {\n addDep, logFix, readPackageJson, resolveDepVersion, writePackageJson,\n} from '../packageJsonEditor.ts'\nimport type { CheckPackageParams } from './checkPackageTypes.ts'\n\ntype DepSection = 'dependencies' | 'devDependencies' | 'peerDependencies'\n\nexport interface VersionProblem {\n dep: string\n section: DepSection\n version: string\n}\n\nexport interface PeerVersionIncompatibility {\n actualVersion: string\n declaredRange: string\n dep: string\n}\n\nfunction checkSection(\n deps: string[],\n versions: Record<string, string>,\n section: DepSection,\n workspaceNames: Set<string>,\n problems: VersionProblem[],\n): void {\n for (const dep of deps) {\n if (!workspaceNames.has(dep)) continue\n const version = versions[dep]\n if (version && !version.startsWith('workspace:')) {\n problems.push({\n dep, section, version,\n })\n }\n }\n}\n\nexport function findWorkspaceVersionProblems(\n packageParams: CheckPackageParams,\n workspaceNames: Set<string>,\n): VersionProblem[] {\n const problems: VersionProblem[] = []\n\n checkSection(packageParams.dependencies, packageParams.dependencyVersions, 'dependencies', workspaceNames, problems)\n checkSection(packageParams.devDependencies, packageParams.devDependencyVersions, 'devDependencies', workspaceNames, problems)\n\n return problems\n}\n\nexport function findWorkspacePeerVersionProblems(\n packageParams: CheckPackageParams,\n workspaceNames: Set<string>,\n location: string,\n): PeerVersionIncompatibility[] {\n const problems: PeerVersionIncompatibility[] = []\n\n for (const dep of packageParams.peerDependencies) {\n if (!workspaceNames.has(dep)) continue\n const declaredRange = packageParams.peerDependencyVersions[dep]\n if (!declaredRange || declaredRange.startsWith('workspace:')) continue\n\n const resolved = resolveDepVersion(location, dep)\n // resolveDepVersion returns ~X.Y.Z or *, extract the raw version\n const actualVersion = resolved.startsWith('~') ? resolved.slice(1) : resolved\n if (actualVersion === '*') continue\n\n if (!semver.satisfies(actualVersion, declaredRange)) {\n problems.push({\n actualVersion, declaredRange, dep,\n })\n }\n }\n\n return problems\n}\n\nexport function getWorkspaceVersionProblems(\n { name, location }: Workspace,\n packageParams: CheckPackageParams,\n workspaceNames: Set<string>,\n): number {\n const problems = findWorkspaceVersionProblems(packageParams, workspaceNames)\n\n for (const {\n dep, section, version,\n } of problems) {\n console.log(\n `[${chalk.blue(name)}] Workspace dependency ${chalk.red(dep)} in ${chalk.cyan(section)}`\n + ` should use workspace: protocol — found ${chalk.yellow(version)}`,\n )\n }\n if (problems.length > 0) {\n console.log(` ${chalk.yellow(`${location}/package.json`)}\\n`)\n }\n return problems.length\n}\n\nexport function fixWorkspaceVersionProblems(\n workspace: Workspace,\n packageParams: CheckPackageParams,\n workspaceNames: Set<string>,\n): number {\n const problems = findWorkspaceVersionProblems(packageParams, workspaceNames)\n if (problems.length === 0) return 0\n\n const pkg = readPackageJson(workspace.location)\n\n for (const { dep, section } of problems) {\n addDep(pkg, dep, 'workspace:~', section)\n logFix(workspace, `set workspace:~ for ${section}`, dep)\n }\n\n writePackageJson(workspace.location, pkg)\n return problems.length\n}\n","import type { UnsatisfiedPeer } from './checkPackage/index.ts'\nimport {\n findMismatchedPeerDevVersions,\n findRedundantPeerDeps,\n findUnlistedDependencies,\n findUnlistedDevDeps,\n findUnrequestedPeerDeps,\n findUnsatisfiedPeers,\n findUnusedDependencies,\n findUnusedDevDeps,\n findUnusedPeerDeps,\n findWorkspacePeerVersionProblems,\n findWorkspaceVersionProblems,\n resolvePeerTargetSections,\n shouldBePeerDependency,\n} from './checkPackage/index.ts'\nimport { resolveDepVersion, resolveExpectedPeerVersion } from './packageJsonEditor.ts'\nimport type {\n DeplintDiagnostic, DeplintFix, DeplintRule, DeplintSection, DeplintWorkspaceContext,\n} from './types.ts'\n\nfunction diagnostic(\n context: DeplintWorkspaceContext,\n id: string,\n message: string,\n dependency?: string,\n evidence?: string[],\n fixes?: DeplintFix[],\n): DeplintDiagnostic {\n return {\n dependency,\n evidence,\n file: context.packageJsonPath,\n fixes,\n id,\n message,\n severity: 'error',\n workspace: context.workspace,\n }\n}\n\nfunction resolvedAddFix(\n context: DeplintWorkspaceContext,\n dependency: string,\n section: DeplintSection,\n detail: string,\n): DeplintFix {\n return {\n action: 'add',\n dependency,\n detail,\n section,\n version: resolveDepVersion(context.workspace.location, dependency),\n }\n}\n\nconst unlistedDependenciesRule: DeplintRule = {\n category: 'dependencies',\n id: 'deplint.dependencies.unlisted',\n evaluate(context) {\n const findings = findUnlistedDependencies(\n context.workspace.name,\n context.packageParams.dependencies,\n context.packageParams.devDependencies,\n context.packageParams.peerDependencies,\n context.sourceParams.externalDistImports,\n context.sourceParams.externalDistTypeImports,\n )\n\n return findings.map(({ imp, section }) => {\n // For library packages, check if this import shares peers with the\n // package's existing peerDependencies (e.g. react-dom peers on react).\n // If so, it should be a peerDependency + devDependency, not a dependency.\n const isPeer = !context.isTerminalPackage\n && section === 'dependencies'\n && !context.forceDeps.has(imp)\n && shouldBePeerDependency(imp, context.workspace.location, context.packageParams.peerDependencies, context.sourceParams.externalDistImports)\n\n const fixes = isPeer\n ? (['peerDependencies', 'devDependencies'] as DeplintSection[]).map(\n s => resolvedAddFix(context, imp, s, `added to ${s}`),\n )\n : [resolvedAddFix(context, imp, section, `added to ${section}`)]\n\n return diagnostic(\n context,\n 'deplint.dependencies.unlisted',\n `Missing dependency in package.json: ${imp}`,\n imp,\n context.sourceParams.distImportPaths[imp],\n fixes,\n )\n })\n },\n}\n\nconst unusedDependenciesRule: DeplintRule = {\n category: 'dependencies',\n id: 'deplint.dependencies.unused',\n evaluate(context) {\n const findings = findUnusedDependencies(\n context.workspace.location,\n context.packageParams.dependencies,\n context.packageParams.devDependencies,\n context.sourceParams.externalDistImports,\n context.sourceParams.externalDistTypeImports,\n context.sourceParams.externalAllImports,\n context.unusedDependencyExclude,\n )\n\n return findings.map(({\n dep, kind, reason,\n }) => diagnostic(\n context,\n 'deplint.dependencies.unused',\n kind === 'move-to-dev'\n ? `dependency should be devDependency in package.json: ${dep}${reason ? ` (${reason})` : ''}`\n : `Unused dependency in package.json: ${dep}`,\n dep,\n undefined,\n [kind === 'move-to-dev'\n ? {\n action: 'move',\n dependency: dep,\n detail: 'moved to devDependencies',\n fromSection: 'dependencies',\n toSection: 'devDependencies',\n }\n : {\n action: 'remove',\n dependency: dep,\n detail: 'removed from dependencies',\n section: 'dependencies',\n }],\n ))\n },\n}\n\nconst unlistedDevDependenciesRule: DeplintRule = {\n category: 'devDependencies',\n id: 'deplint.devDependencies.unlisted',\n evaluate(context) {\n const findings = findUnlistedDevDeps(\n context.workspace.name,\n context.packageParams.dependencies,\n context.packageParams.devDependencies,\n context.packageParams.peerDependencies,\n context.sourceParams.externalAllImports,\n context.sourceParams.distImports,\n context.sourceParams.externalDistTypeImports,\n )\n\n return findings.map(imp => diagnostic(\n context,\n 'deplint.devDependencies.unlisted',\n `Missing devDependency in package.json: ${imp}`,\n imp,\n context.sourceParams.allImportPaths[imp],\n [resolvedAddFix(context, imp, 'devDependencies', 'added to devDependencies')],\n ))\n },\n}\n\nconst unusedDevDependenciesRule: DeplintRule = {\n category: 'devDependencies',\n id: 'deplint.devDependencies.unused',\n evaluate(context) {\n const findings = findUnusedDevDeps(\n context.workspace.location,\n context.packageParams.dependencies,\n context.packageParams.devDependencies,\n context.packageParams.peerDependencies,\n context.sourceParams,\n context.fileContext,\n context.unusedDependencyExclude,\n )\n\n return findings.map(dep => diagnostic(\n context,\n 'deplint.devDependencies.unused',\n `Unused devDependency in package.json: ${dep}`,\n dep,\n undefined,\n [{\n action: 'remove', dependency: dep, detail: 'removed from devDependencies', section: 'devDependencies',\n }],\n ))\n },\n}\n\nconst redundantDevDependenciesRule: DeplintRule = {\n category: 'devDependencies',\n id: 'deplint.devDependencies.redundant',\n evaluate(context) {\n const diagnostics: DeplintDiagnostic[] = []\n\n for (const dep of context.packageParams.devDependencies) {\n if (!context.packageParams.dependencies.includes(dep)) continue\n // Skip if this dep will be moved to peerDependencies (the devDep is needed as the peer's companion)\n if (!context.isTerminalPackage\n && !context.forceDeps.has(dep)\n && shouldBePeerDependency(dep, context.workspace.location, context.packageParams.peerDependencies, context.sourceParams.externalDistImports)) {\n continue\n }\n diagnostics.push(diagnostic(\n context,\n 'deplint.devDependencies.redundant',\n `Redundant devDependency ${dep} — already listed in dependencies`,\n dep,\n undefined,\n [{\n action: 'remove', dependency: dep, detail: 'removed redundant devDependency (kept in dependencies)', section: 'devDependencies',\n }],\n ))\n }\n\n return diagnostics\n },\n}\n\nfunction generateVersionMismatchFixes(\n context: DeplintWorkspaceContext,\n finding: UnsatisfiedPeer,\n): DeplintFix[] {\n const expectedVersion = resolveExpectedPeerVersion(\n context.workspace.location,\n finding.peer,\n finding.versionRange,\n )\n if (expectedVersion === '*') return []\n\n const fixes: DeplintFix[] = []\n\n // Fix peerDependencies if the package declares this peer\n if (context.packageParams.peerDependencies.includes(finding.peer)) {\n fixes.push({\n action: 'set-version',\n dependency: finding.peer,\n detail: `updated peerDependency version to match installed (${finding.installedVersion})`,\n section: 'peerDependencies',\n version: expectedVersion,\n })\n }\n\n // Fix devDependencies if it also has a mismatched version\n if (context.packageParams.devDependencies.includes(finding.peer)) {\n const devVersion = context.packageParams.devDependencyVersions[finding.peer]\n // Only fix non-workspace devDep versions\n if (devVersion && !devVersion.startsWith('workspace:')) {\n fixes.push({\n action: 'set-version',\n dependency: finding.peer,\n detail: `updated devDependency version to match installed (${finding.installedVersion})`,\n section: 'devDependencies',\n version: expectedVersion,\n })\n }\n }\n\n return fixes\n}\n\nconst unsatisfiedPeersRule: DeplintRule = {\n category: 'peerDependencies',\n id: 'deplint.peerDependencies.unsatisfied',\n evaluate(context) {\n const findings = findUnsatisfiedPeers(context.workspace, context.packageParams, context.exclude)\n\n return findings.map((finding) => {\n const requiredBy = finding.sources.map(source => source.requiredBy).join(', ')\n const chain = finding.sources.find(source => source.chain && source.chain.length > 0)?.chain?.join(' -> ')\n const evidence = chain ? [`via ${chain}`] : undefined\n const message = finding.reason === 'version-mismatch'\n ? `Peer dependency version mismatch ${finding.peer} — installed ${finding.installedVersion ?? 'unknown'} does not satisfy ${finding.versionRange} (required by ${requiredBy})`\n : finding.hasRuntimeSource\n ? `Unsatisfied peer dependency ${finding.peer} (required by ${requiredBy}) — must be in dependencies or peerDependencies`\n : `Unsatisfied peer dependency ${finding.peer} (required by devDependency ${requiredBy}) — must be in dependencies, devDependencies, or peerDependencies`\n\n const fixes = finding.reason === 'missing'\n ? resolvePeerTargetSections(finding.hasRuntimeSource, context.isTerminalPackage).map((section): DeplintFix => ({\n action: 'add',\n dependency: finding.peer,\n detail: `added to ${section}`,\n section: section as DeplintSection,\n version: finding.versionRange,\n }))\n : finding.reason === 'version-mismatch'\n ? generateVersionMismatchFixes(context, finding)\n : undefined\n\n return diagnostic(\n context,\n 'deplint.peerDependencies.unsatisfied',\n message,\n finding.peer,\n evidence,\n fixes,\n )\n })\n },\n}\n\nconst unusedPeerDependenciesRule: DeplintRule = {\n category: 'peerDependencies',\n id: 'deplint.peerDependencies.unused',\n evaluate(context) {\n const findings = findUnusedPeerDeps(\n context.packageParams.peerDependencies,\n context.sourceParams.externalDistImports,\n context.sourceParams.externalDistTypeImports,\n context.unusedDependencyExclude,\n )\n\n return findings.map(dep => diagnostic(\n context,\n 'deplint.peerDependencies.unused',\n context.packageParams.dependencies.includes(dep)\n ? `Unused peerDependency [already a dependency] in package.json: ${dep}`\n : `Unused peerDependency in package.json: ${dep}`,\n dep,\n undefined,\n [{\n action: 'remove', dependency: dep, detail: 'removed from peerDependencies', section: 'peerDependencies',\n }],\n ))\n },\n}\n\nconst unrequestedPeerDependenciesRule: DeplintRule = {\n category: 'peerDependencies',\n id: 'deplint.peerDependencies.unrequested',\n evaluate(context) {\n if (!context.isTerminalPackage) return []\n\n const findings = findUnrequestedPeerDeps(\n context.workspace.location,\n context.packageParams,\n context.sourceParams,\n context.exclude,\n )\n\n return findings.map(dep => diagnostic(\n context,\n 'deplint.peerDependencies.unrequested',\n `Unnecessary peerDependency ${dep} — imported in dist but no dependency requires it as a peer; should be a dependency`,\n dep,\n undefined,\n [{\n action: 'move',\n dependency: dep,\n detail: 'moved from peerDependencies to dependencies',\n fromSection: 'peerDependencies',\n toSection: 'dependencies',\n version: context.packageParams.peerDependencyVersions[dep] ?? '*',\n }],\n ))\n },\n}\n\nconst misplacedDependenciesRule: DeplintRule = {\n category: 'dependencies',\n id: 'deplint.dependencies.misplaced',\n evaluate(context) {\n // Only applies to library packages — terminal packages keep deps in dependencies\n if (context.isTerminalPackage) return []\n\n const diagnostics: DeplintDiagnostic[] = []\n\n for (const dep of context.packageParams.dependencies) {\n // Skip packages explicitly configured as dependencies via deplint.deps\n if (context.forceDeps.has(dep)) continue\n // Check if this dependency is configured as refType 'peer', or if it shares peers\n // with the package's existing peerDependencies (e.g. react-dom peers on react)\n if (context.forcePeers.has(dep)\n || shouldBePeerDependency(dep, context.workspace.location, context.packageParams.peerDependencies, context.sourceParams.externalDistImports)) {\n const fixes: DeplintFix[] = [{\n action: 'move',\n dependency: dep,\n detail: 'moved from dependencies to peerDependencies',\n fromSection: 'dependencies',\n toSection: 'peerDependencies',\n }]\n // Also ensure it's in devDependencies if not already\n if (!context.packageParams.devDependencies.includes(dep)) {\n fixes.push(resolvedAddFix(context, dep, 'devDependencies', 'added to devDependencies'))\n }\n\n const reason = context.forcePeers.has(dep)\n ? 'configured as refType \"peer\"'\n : 'it shares peers with existing peerDependencies'\n diagnostics.push(diagnostic(\n context,\n 'deplint.dependencies.misplaced',\n `dependency ${dep} should be a peerDependency — ${reason}`,\n dep,\n undefined,\n fixes,\n ))\n }\n }\n\n return diagnostics\n },\n}\n\nconst misplacedPeerDependenciesRule: DeplintRule = {\n category: 'peerDependencies',\n id: 'deplint.peerDependencies.misplaced',\n evaluate(context) {\n const diagnostics: DeplintDiagnostic[] = []\n\n for (const dep of context.packageParams.peerDependencies) {\n if (context.forceDeps.has(dep)) {\n const fixes: DeplintFix[] = [{\n action: 'move',\n dependency: dep,\n detail: 'moved from peerDependencies to dependencies',\n fromSection: 'peerDependencies',\n toSection: 'dependencies',\n version: context.packageParams.peerDependencyVersions[dep] ?? '*',\n }]\n\n diagnostics.push(diagnostic(\n context,\n 'deplint.peerDependencies.misplaced',\n `peerDependency ${dep} should be a dependency — configured as refType \"dep\"`,\n dep,\n undefined,\n fixes,\n ))\n }\n }\n\n return diagnostics\n },\n}\n\nconst redundantPeerDependenciesRule: DeplintRule = {\n category: 'peerDependencies',\n id: 'deplint.peerDependencies.redundant',\n evaluate(context) {\n const findings = findRedundantPeerDeps(context.packageParams, context.exclude)\n\n return findings.map(dep => diagnostic(\n context,\n 'deplint.peerDependencies.redundant',\n `Redundant peerDependency ${dep} — already listed in dependencies`,\n dep,\n undefined,\n [{\n action: 'remove', dependency: dep, detail: 'removed redundant peerDependency (kept in dependencies)', section: 'peerDependencies',\n }],\n ))\n },\n}\n\nconst mismatchedPeerDevVersionsRule: DeplintRule = {\n category: 'peerDependencies',\n id: 'deplint.peerDependencies.version-mismatch',\n evaluate(context) {\n const findings = findMismatchedPeerDevVersions(context.packageParams, context.exclude)\n\n return findings.map(({\n dep, devVersion, peerVersion,\n }) => diagnostic(\n context,\n 'deplint.peerDependencies.version-mismatch',\n `Peer/dev version mismatch ${dep} — peer: ${peerVersion}, dev: ${devVersion}`,\n dep,\n undefined,\n [{\n action: 'set-version', dependency: dep, detail: 'synced peerDependency to devDependency version', section: 'peerDependencies', version: devVersion,\n }],\n ))\n },\n}\n\nconst workspaceVersionProblemsRule: DeplintRule = {\n category: 'peerDependencies',\n id: 'deplint.workspace.protocol',\n evaluate(context) {\n if (!context.workspaceNames) return []\n\n const protocolFindings = findWorkspaceVersionProblems(context.packageParams, context.workspaceNames)\n const protocolDiagnostics = protocolFindings.map(({\n dep, section, version,\n }) => diagnostic(\n context,\n 'deplint.workspace.protocol',\n `Workspace dependency ${dep} in ${section} should use workspace: protocol — found ${version}`,\n dep,\n undefined,\n [{\n action: 'set-version', dependency: dep, detail: `set workspace:~ for ${section}`, section, version: 'workspace:~',\n }],\n ))\n\n const peerFindings = findWorkspacePeerVersionProblems(\n context.packageParams,\n context.workspaceNames,\n context.workspace.location,\n )\n const peerDiagnostics = peerFindings.map(({\n dep, actualVersion, declaredRange,\n }) => {\n const expectedRange = resolveExpectedPeerVersion(\n context.workspace.location,\n dep,\n declaredRange,\n )\n return diagnostic(\n context,\n 'deplint.workspace.protocol',\n `Workspace peerDependency ${dep} range ${declaredRange} does not satisfy workspace version ${actualVersion}`,\n dep,\n undefined,\n expectedRange === '*'\n ? undefined\n : [{\n action: 'set-version', dependency: dep, detail: 'updated peerDependency to match workspace version', section: 'peerDependencies', version: expectedRange,\n }],\n )\n })\n\n return [...protocolDiagnostics, ...peerDiagnostics]\n },\n}\n\nexport const deplintRules: DeplintRule[] = [\n unlistedDependenciesRule,\n unusedDependenciesRule,\n misplacedDependenciesRule,\n unlistedDevDependenciesRule,\n unusedDevDependenciesRule,\n redundantDevDependenciesRule,\n unsatisfiedPeersRule,\n unusedPeerDependenciesRule,\n unrequestedPeerDependenciesRule,\n misplacedPeerDependenciesRule,\n redundantPeerDependenciesRule,\n mismatchedPeerDevVersionsRule,\n workspaceVersionProblemsRule,\n]\n","import fs from 'node:fs'\n\nimport type { Workspace } from '../../pm/index.ts'\nimport { getRequiredTransitivePeers } from './checkPackage/index.ts'\nimport { findFiles } from './findFiles.ts'\nimport { getDependenciesFromPackageJson } from './getDependenciesFromPackageJson.ts'\nimport { getExtendsFromTsconfigs, getTypesFromTsconfigs } from './getExtendsFromTsconfigs.ts'\nimport { getExternalImportsFromFiles } from './getExternalImportsFromFiles.ts'\nimport type { DeplintWorkspaceContext } from './types.ts'\n\nfunction isTerminalPackage(location: string): boolean {\n try {\n const pkg = JSON.parse(fs.readFileSync(`${location}/package.json`, 'utf8')) as Record<string, unknown>\n return pkg.private === true\n } catch {\n return false\n }\n}\n\nexport function buildWorkspaceContext(\n workspace: Workspace,\n exclude?: Set<string>,\n workspaceNames?: Set<string>,\n forceDeps?: Set<string>,\n forcePeers?: Set<string>,\n): DeplintWorkspaceContext {\n const { allFiles, distFiles } = findFiles(workspace.location)\n const tsconfigExtends = getExtendsFromTsconfigs(workspace.location)\n const tsconfigTypes = getTypesFromTsconfigs(workspace.location)\n const sourceParams = getExternalImportsFromFiles({\n allFiles, distFiles, location: workspace.location, tsconfigExtends, tsconfigTypes,\n })\n const packageJsonPath = `${workspace.location}/package.json`\n const packageParams = getDependenciesFromPackageJson(packageJsonPath)\n const requiredTransitivePeers = getRequiredTransitivePeers(workspace.location, packageParams)\n\n return {\n exclude,\n fileContext: { allFiles, distFiles },\n forceDeps: forceDeps ?? new Set(),\n forcePeers: forcePeers ?? new Set(),\n isTerminalPackage: isTerminalPackage(workspace.location),\n packageJsonPath,\n packageParams,\n sourceParams,\n unusedDependencyExclude: new Set([...(exclude ?? []), ...requiredTransitivePeers]),\n workspace,\n workspaceNames,\n }\n}\n","import { loadWorkspaceCommandConfig } from '../../lib/index.ts'\nimport type { Workspace } from '../../pm/index.ts'\nimport type { DeplintConfig } from '../package/index.ts'\nimport { applyDeplintFixes } from './fixer.ts'\nimport { deplintRules } from './rules.ts'\nimport { buildWorkspaceContext } from './snapshot.ts'\nimport type {\n DeplintDiagnostic, DeplintRunOptions, DeplintRunResult,\n} from './types.ts'\n\nfunction resolveCheckFlags(deps = false, devDeps = false, peerDeps = false) {\n const noneExplicit = !(deps || devDeps || peerDeps)\n return {\n checkDependencies: deps || noneExplicit,\n checkDevDependencies: devDeps || noneExplicit,\n checkPeerDependencies: peerDeps || noneExplicit,\n }\n}\n\nfunction shouldRunRule(\n category: 'dependencies' | 'devDependencies' | 'peerDependencies',\n ruleId: string,\n options: DeplintRunOptions,\n): boolean {\n const flags = resolveCheckFlags(options.deps, options.devDeps, options.peerDeps)\n if (ruleId === 'deplint.peerDependencies.unsatisfied') {\n return flags.checkDependencies || flags.checkDevDependencies || flags.checkPeerDependencies\n }\n if (ruleId === 'deplint.workspace.protocol') {\n return flags.checkDependencies || flags.checkDevDependencies || flags.checkPeerDependencies\n }\n if (category === 'dependencies') return flags.checkDependencies\n if (category === 'devDependencies') return flags.checkDevDependencies\n return flags.checkPeerDependencies\n}\n\nasync function evaluateWorkspaces(\n workspaces: Workspace[],\n options: DeplintRunOptions,\n workspaceNames?: Set<string>,\n): Promise<DeplintDiagnostic[]> {\n const diagnostics: DeplintDiagnostic[] = []\n\n for (const workspace of workspaces) {\n // Load per-workspace deplint config (root merged with package-level)\n const wsConfig = await loadWorkspaceCommandConfig<DeplintConfig>(workspace.location, 'deplint')\n\n // Build exclude set: config + CLI overrides\n const exclude = new Set([\n ...(wsConfig.exclude ?? []),\n ...(options.cliExclude ?? []),\n ])\n\n // Build forceDeps/forcePeers from packages map\n const packageEntries = Object.entries(wsConfig.packages ?? {})\n const forceDeps = new Set(\n packageEntries.filter(([, cfg]) => cfg.refType === 'dep').map(([name]) => name),\n )\n const forcePeers = new Set(\n packageEntries.filter(([, cfg]) => cfg.refType === 'peer').map(([name]) => name),\n )\n\n const context = buildWorkspaceContext(workspace, exclude, workspaceNames, forceDeps, forcePeers)\n if (options.verbose) {\n console.info(`Checking package: ${workspace.name} at ${workspace.location}`)\n console.info(`All files: ${context.fileContext.allFiles.length}, Distribution files: ${context.fileContext.distFiles.length}`)\n }\n\n for (const rule of deplintRules) {\n if (shouldRunRule(rule.category, rule.id, options)) {\n diagnostics.push(...rule.evaluate(context))\n }\n }\n }\n\n return diagnostics\n}\n\nexport async function runDeplint(\n workspaces: Workspace[],\n options: DeplintRunOptions,\n workspaceNames?: Set<string>,\n): Promise<DeplintRunResult> {\n let diagnostics = await evaluateWorkspaces(workspaces, options, workspaceNames)\n const appliedFixes = [] as DeplintRunResult['appliedFixes']\n\n // Fix loop: fixes can cascade (e.g. moving a dep to peer may make a devDep redundant),\n // so re-evaluate and fix until stable or a safety cap is reached.\n const MAX_FIX_PASSES = 5\n for (let pass = 0; options.fix && diagnostics.length > 0 && pass < MAX_FIX_PASSES; pass++) {\n appliedFixes.push(...applyDeplintFixes(diagnostics))\n diagnostics = await evaluateWorkspaces(workspaces, options, workspaceNames)\n }\n\n const errorCount = diagnostics.filter(diagnostic => diagnostic.severity === 'error').length\n const warningCount = diagnostics.filter(diagnostic => diagnostic.severity === 'warning').length\n\n return {\n appliedFixes,\n diagnostics,\n summary: {\n appliedFixes: appliedFixes.length,\n errorCount,\n warningCount,\n workspacesChecked: workspaces.length,\n },\n }\n}\n","import chalk from 'chalk'\n\nimport type { DeplintReporter } from './types.ts'\n\nexport const humanDeplintReporter: DeplintReporter = {\n render(result) {\n for (const fix of result.appliedFixes) {\n console.log(`[${chalk.blue(fix.workspace.name)}] Fixed: ${fix.detail} ${chalk.green(fix.dependency)}`)\n }\n\n for (const diagnostic of result.diagnostics) {\n console.log(`[${chalk.blue(diagnostic.workspace.name)}] ${diagnostic.message}`)\n for (const line of diagnostic.evidence ?? []) {\n console.log(` ${line}`)\n }\n console.log(` ${chalk.yellow(diagnostic.file)}\\n`)\n }\n\n if (result.summary.errorCount > 0) {\n console.warn(`Deplint: Found ${chalk.red(result.summary.errorCount)} dependency problems. ${chalk.red('✖')}`)\n return\n }\n\n console.info(`Deplint: Found no dependency problems. ${chalk.green('✔')}`)\n },\n}\n\nexport const jsonDeplintReporter: DeplintReporter = {\n render(result) {\n console.log(JSON.stringify(result, null, 2))\n },\n}\n\nexport function getDeplintReporter(format: 'human' | 'json'): DeplintReporter {\n return format === 'json' ? jsonDeplintReporter : humanDeplintReporter\n}\n","import { readFileSync, writeFileSync } from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\nimport semver from 'semver'\n\nimport { INIT_CWD } from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\nimport type { LintResult } from './package-lint.ts'\n\nfunction readWorkspacePackageJson(cwd: string, location: string): Record<string, unknown> | undefined {\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n return JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n } catch {\n return undefined\n }\n}\n\nfunction writeWorkspacePackageJson(cwd: string, location: string, pkg: Record<string, unknown>) {\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n}\n\nfunction buildWorkspaceVersionMap(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): Map<string, string> {\n const map = new Map<string, string>()\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n const version = pkg.version as string | undefined\n if (version) map.set(name, version)\n }\n return map\n}\n\n/**\n * Derives the expected peerDep range from the workspace protocol used in\n * the matching devDependency and the current version of the target package.\n *\n * workspace:~ + version 7.6.21 → ~7.6\n * workspace:^ + version 7.6.21 → ^7\n *\n * Falls back to ~major.minor if no matching devDep is found.\n */\nfunction expectedPeerRange(devDepVersion: string | undefined, targetVersion: string): string {\n const parsed = semver.parse(targetVersion)\n if (!parsed) return `~${targetVersion}`\n\n if (devDepVersion === 'workspace:^') {\n return `^${parsed.major}`\n }\n return `~${parsed.major}.${parsed.minor}`\n}\n\n// --- Version consistency checks ---\n\nexport function checkVersionConsistency(\n cwd: string,\n rootPkg: Record<string, unknown>,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result: LintResult = {\n errors: [], fixable: [], warnings: [],\n }\n\n if (rootPkg.version !== undefined) {\n result.fixable.push('Root package.json should not have a \"version\" field in a monorepo')\n }\n\n const versions = new Map<string, string>()\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n const version = pkg.version as string | undefined\n if (version) {\n versions.set(name, version)\n } else {\n result.errors.push(`${name} (${location}) is missing a \"version\" field`)\n }\n }\n\n const uniqueVersions = new Set(versions.values())\n if (uniqueVersions.size > 1) {\n const versionList = [...uniqueVersions].toSorted(semver.rcompare)\n for (const [name, version] of versions) {\n if (version !== versionList[0]) {\n result.fixable.push(`${name} has version ${version} (expected ${versionList[0]})`)\n }\n }\n }\n\n return result\n}\n\nexport function fixVersionConsistency(\n cwd: string,\n rootPkg: Record<string, unknown>,\n writeRootPackageJson: (cwd: string, pkg: Record<string, unknown>) => void,\n workspaces: { location: string; name: string }[],\n): void {\n if (rootPkg.version !== undefined) {\n delete rootPkg.version\n writeRootPackageJson(cwd, rootPkg)\n console.log(chalk.green(' ✔ Fixed: removed \"version\" from root package.json'))\n }\n\n const versions: string[] = []\n for (const { location } of workspaces) {\n if (location === '.') continue\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n const version = pkg.version as string | undefined\n if (version && semver.valid(version)) {\n versions.push(version)\n }\n }\n\n if (versions.length === 0) return\n\n const highest = versions.toSorted(semver.rcompare)[0]\n\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n if (pkg.version !== highest) {\n pkg.version = highest\n writeWorkspacePackageJson(cwd, location, pkg)\n console.log(chalk.green(` ✔ Fixed: set version to ${highest} in ${name} (${location})`))\n }\n }\n}\n\n// --- Internal dependency version checks (dependencies and devDependencies only) ---\n\nfunction expectedDepVersion(targetVersion: string): string {\n const parsed = semver.parse(targetVersion)\n if (!parsed) return `~${targetVersion}`\n return `~${targetVersion}`\n}\n\nexport function checkInternalDepVersions(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result: LintResult = {\n errors: [], fixable: [], warnings: [],\n }\n const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces)\n\n for (const { location, name } of workspaces) {\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n\n for (const depField of ['dependencies', 'devDependencies'] as const) {\n const deps = pkg[depField] as Record<string, string> | undefined\n if (!deps) continue\n for (const [dep, version] of Object.entries(deps)) {\n const targetVersion = workspaceVersions.get(dep)\n if (!targetVersion) continue\n const expected = expectedDepVersion(targetVersion)\n if (version.startsWith('workspace:')) {\n result.fixable.push(\n `${name} (${location}) ${depField}.${dep} is \"${version}\" — should be \"${expected}\" (not workspace: protocol)`,\n )\n } else if (version !== expected) {\n result.fixable.push(\n `${name} (${location}) ${depField}.${dep} is \"${version}\" — should be \"${expected}\"`,\n )\n }\n }\n }\n }\n\n return result\n}\n\nexport function fixInternalDepVersions(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): void {\n const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces)\n\n for (const { location, name } of workspaces) {\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n let modified = false\n\n for (const depField of ['dependencies', 'devDependencies'] as const) {\n const deps = pkg[depField] as Record<string, string> | undefined\n if (!deps) continue\n for (const [dep, version] of Object.entries(deps)) {\n const targetVersion = workspaceVersions.get(dep)\n if (!targetVersion) continue\n const expected = expectedDepVersion(targetVersion)\n if (version !== expected) {\n deps[dep] = expected\n console.log(chalk.green(` ✔ Fixed: set ${depField}.${dep} to \"${expected}\" in ${name} (${location})`))\n modified = true\n }\n }\n }\n\n if (modified) {\n writeWorkspacePackageJson(cwd, location, pkg)\n }\n }\n}\n\n// --- Workspace protocol checks (pnpm — dependencies and devDependencies only) ---\n\nexport function checkWorkspaceProtocol(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result: LintResult = {\n errors: [], fixable: [], warnings: [],\n }\n const workspaceNames = new Set(workspaces.map(w => w.name))\n\n for (const { location, name } of workspaces) {\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n\n for (const depField of ['dependencies', 'devDependencies'] as const) {\n const deps = pkg[depField] as Record<string, string> | undefined\n if (!deps) continue\n for (const [dep, version] of Object.entries(deps)) {\n if (!workspaceNames.has(dep)) continue\n if (!version.startsWith('workspace:')) {\n result.fixable.push(\n `${name} (${location}) ${depField}.${dep} is \"${version}\" — should use workspace: protocol`,\n )\n }\n }\n }\n }\n\n return result\n}\n\nexport function fixWorkspaceProtocol(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): void {\n const workspaceNames = new Set(workspaces.map(w => w.name))\n\n for (const { location, name } of workspaces) {\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n let modified = false\n\n for (const depField of ['dependencies', 'devDependencies'] as const) {\n const deps = pkg[depField] as Record<string, string> | undefined\n if (!deps) continue\n for (const [dep, version] of Object.entries(deps)) {\n if (!workspaceNames.has(dep)) continue\n if (!version.startsWith('workspace:')) {\n deps[dep] = 'workspace:~'\n console.log(chalk.green(` ✔ Fixed: set ${depField}.${dep} to \"workspace:~\" in ${name} (${location})`))\n modified = true\n }\n }\n }\n\n if (modified) {\n writeWorkspacePackageJson(cwd, location, pkg)\n }\n }\n}\n\n// --- Internal peerDependency version checks ---\n\nexport function checkInternalPeerVersions(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result: LintResult = {\n errors: [], fixable: [], warnings: [],\n }\n const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces)\n\n for (const { location, name } of workspaces) {\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n\n const peerDeps = pkg.peerDependencies as Record<string, string> | undefined\n if (!peerDeps) continue\n const devDeps = pkg.devDependencies as Record<string, string> | undefined\n\n for (const [dep, version] of Object.entries(peerDeps)) {\n const targetVersion = workspaceVersions.get(dep)\n if (!targetVersion) continue\n\n if (version.startsWith('workspace:')) {\n const expected = expectedPeerRange(devDeps?.[dep], targetVersion)\n result.fixable.push(\n `${name} (${location}) peerDependencies.${dep} uses workspace: protocol — should be \"${expected}\"`,\n )\n continue\n }\n\n const expected = expectedPeerRange(devDeps?.[dep], targetVersion)\n if (version !== expected && !semver.satisfies(targetVersion, version)) {\n result.fixable.push(\n `${name} (${location}) peerDependencies.${dep} is \"${version}\" — current version ${targetVersion} is not satisfied; expected \"${expected}\"`,\n )\n }\n }\n }\n\n return result\n}\n\nexport function fixInternalPeerVersions(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): void {\n const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces)\n\n for (const { location, name } of workspaces) {\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n\n const peerDeps = pkg.peerDependencies as Record<string, string> | undefined\n if (!peerDeps) continue\n const devDeps = pkg.devDependencies as Record<string, string> | undefined\n let modified = false\n\n for (const [dep, version] of Object.entries(peerDeps)) {\n const targetVersion = workspaceVersions.get(dep)\n if (!targetVersion) continue\n\n const expected = expectedPeerRange(devDeps?.[dep], targetVersion)\n if (version !== expected) {\n peerDeps[dep] = expected\n console.log(chalk.green(` ✔ Fixed: set peerDependencies.${dep} to \"${expected}\" in ${name} (${location})`))\n modified = true\n }\n }\n\n if (modified) {\n writeWorkspacePackageJson(cwd, location, pkg)\n }\n }\n}\n\n/**\n * Syncs all internal peerDependency versions to match current workspace versions.\n * Called by xy publish to ensure peerDeps are correct before publishing.\n */\nexport function syncInternalPeerVersions(): number {\n const cwd = INIT_CWD()\n const workspaces = getPackageManager().listWorkspaces()\n const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces)\n let updated = 0\n\n for (const { location, name } of workspaces) {\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n\n const peerDeps = pkg.peerDependencies as Record<string, string> | undefined\n if (!peerDeps) continue\n const devDeps = pkg.devDependencies as Record<string, string> | undefined\n let modified = false\n\n for (const [dep, version] of Object.entries(peerDeps)) {\n const targetVersion = workspaceVersions.get(dep)\n if (!targetVersion) continue\n\n const expected = expectedPeerRange(devDeps?.[dep], targetVersion)\n if (version !== expected) {\n peerDeps[dep] = expected\n console.log(chalk.green(`Publish: updated ${name} peerDependencies.${dep} to \"${expected}\"`))\n modified = true\n updated++\n }\n }\n\n if (modified) {\n writeWorkspacePackageJson(cwd, location, pkg)\n }\n }\n\n return updated\n}\n\n/**\n * Reads the shared monorepo version from the first non-root workspace\n * and logs it. Call at the end of deploy to report the new version.\n */\nexport function logMonorepoVersion(): void {\n const cwd = INIT_CWD()\n const workspaces = getPackageManager().listWorkspaces()\n\n for (const { location } of workspaces) {\n if (location === '.') continue\n const pkg = readWorkspacePackageJson(cwd, location)\n if (!pkg) continue\n const version = pkg.version as string | undefined\n if (version) {\n console.log(chalk.green(`\\nDeployed version: ${chalk.bold(version)}`))\n return\n }\n }\n}\n","import path from 'node:path'\n\nimport chalk from 'chalk'\nimport { ESLint } from 'eslint'\n\nimport {\n INIT_CWD,\n installOutputCapture,\n outputStorage,\n runWithConcurrency,\n} from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\n\nexport interface LintNextParams {\n cache?: boolean\n fix?: boolean\n jobs: number\n pkg?: string\n verbose?: boolean\n}\n\ninterface PackageLintResult {\n errors: number\n files: number\n output: string[]\n pkg: string\n timeMs: number\n warnings: number\n}\n\nconst dumpMessages = (lintResults: ESLint.LintResult[]): void => {\n const colors: ('white' | 'red' | 'yellow')[] = ['white', 'yellow', 'red']\n const severity: string[] = ['none', 'warning', 'error']\n\n for (const lintResult of lintResults) {\n if (lintResult.messages.length > 0) {\n console.log(chalk.gray(`\\n${lintResult.filePath}`))\n for (const message of lintResult.messages) {\n console.log(\n chalk.gray(`\\t${message.line}:${message.column}`),\n chalk[colors[message.severity]](`\\t${severity[message.severity]}`),\n chalk.white(`\\t${message.message}`),\n chalk.gray(`\\t${message.ruleId}`),\n )\n }\n }\n }\n}\n\nasync function lintOnePackage({\n cache, cwd, fix, verbose,\n}: {\n cache: boolean\n cwd: string\n fix: boolean\n verbose: boolean\n}): Promise<{ errors: number; files: number; warnings: number }> {\n const engine = new ESLint({\n cache,\n cacheLocation: path.join(cwd, '.eslintcache'),\n cacheStrategy: 'content',\n cwd,\n fix,\n warnIgnored: false,\n })\n\n const lintResults = await engine.lintFiles('.')\n\n dumpMessages(lintResults)\n\n if (fix) {\n await ESLint.outputFixes(lintResults)\n }\n\n const errors = lintResults.reduce((sum, r) => sum + r.errorCount, 0)\n const warnings = lintResults.reduce((sum, r) => sum + r.warningCount, 0)\n const files = lintResults.length\n\n if (verbose) {\n const filesColor = files < 100 ? 'green' : files < 1000 ? 'yellow' : 'red'\n console.log(chalk.white(` ${chalk[filesColor](files)} files linted`))\n }\n\n return {\n errors, files, warnings,\n }\n}\n\nexport async function lintNext({\n cache = false,\n fix = false,\n jobs,\n pkg,\n verbose = false,\n}: LintNextParams): Promise<number> {\n const rootDir = INIT_CWD()\n const pm = getPackageManager()\n const allWorkspaces = pm.listWorkspaces()\n\n const workspaces = pkg\n ? allWorkspaces.filter(ws => ws.name === pkg)\n : allWorkspaces\n\n if (workspaces.length === 0) {\n console.log(chalk.red(pkg ? `Package \"${pkg}\" not found` : 'No workspaces found'))\n return 1\n }\n\n const concurrency = jobs\n const label = fix ? 'Fix' : 'Lint'\n\n installOutputCapture()\n\n const results: PackageLintResult[] = Array.from(\n { length: workspaces.length },\n () => ({\n errors: 0, files: 0, output: [], pkg: '', timeMs: 0, warnings: 0,\n }),\n )\n\n await runWithConcurrency(\n workspaces.map((ws, i) => ({ i, ws })),\n concurrency,\n async ({ i, ws }) => {\n const output: string[] = []\n await outputStorage.run(output, async () => {\n const pkgStart = Date.now()\n const absCwd = path.resolve(rootDir, ws.location)\n\n console.log(chalk.green(`${label} [${ws.name}]`))\n\n try {\n const {\n errors, files, warnings,\n } = await lintOnePackage({\n cache, cwd: absCwd, fix, verbose,\n })\n const timeMs = Date.now() - pkgStart\n results[i] = {\n errors, files, output, pkg: ws.name, timeMs, warnings,\n }\n } catch (ex) {\n output.push(chalk.red(`${label} failed for ${ws.name}: ${(ex as Error).message}\\n`))\n results[i] = {\n errors: 1, files: 0, output, pkg: ws.name, timeMs: Date.now() - pkgStart, warnings: 0,\n }\n }\n })\n },\n )\n\n // Flush results sequentially, grouped by package\n let totalErrors = 0\n let totalWarnings = 0\n let totalFiles = 0\n\n for (const result of results) {\n for (const line of result.output) {\n process.stdout.write(line)\n }\n totalErrors += result.errors\n totalWarnings += result.warnings\n totalFiles += result.files\n }\n\n // Summary\n const errColor = totalErrors > 0 ? 'red' : 'green'\n const warnColor = totalWarnings > 0 ? 'yellow' : 'green'\n\n console.log(\n chalk[errColor](`${totalErrors} errors`)\n + chalk.gray(', ')\n + chalk[warnColor](`${totalWarnings} warnings`)\n + chalk.gray(` across ${totalFiles} files in ${workspaces.length} packages`),\n )\n\n return totalErrors\n}\n","import { runSteps } from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\nimport { lintNext } from './lintNext.ts'\n\nexport interface LintParams {\n cache?: boolean\n fix?: boolean\n incremental?: boolean\n jobs: number\n next?: boolean\n pkg?: string\n verbose?: boolean\n}\n\nexport interface LintPackageParams {\n pkg: string\n verbose?: boolean\n}\n\nexport const lintPackage = ({\n pkg, fix, verbose,\n}: { fix?: boolean; pkg: string; verbose?: boolean }) => {\n const pm = getPackageManager()\n return runSteps(`${fix ? 'Fix' : 'Lint'} [${pkg}]`, [\n pm.runInWorkspace(pkg, fix ? 'package-fix' : verbose ? 'package-lint-verbose' : 'package-lint'),\n ])\n}\n\nexport const lint = ({\n cache, fix, jobs, next, pkg, verbose,\n}: LintParams): number | Promise<number> => {\n if (next) {\n return lintNext({\n cache, fix, jobs, pkg, verbose,\n })\n }\n return pkg === undefined\n ? lintAllPackages({ fix })\n : lintPackage({\n pkg, fix, verbose,\n })\n}\n\nexport const lintAllPackages = ({ fix = false }: { fix?: boolean } = {}) => {\n const fixOptions = fix ? ['--fix'] : []\n return runSteps(`${fix ? 'Fix' : 'Lint'} [All-Packages]`, [\n ['eslint', ['--cache', '--cache-location', '.eslintcache', '--cache-strategy', 'content', ...fixOptions]],\n ])\n}\n","import type { LintParams } from './lint.ts'\nimport { lint } from './lint.ts'\n\nexport const fix = (params: LintParams) => {\n return lint({ ...params, fix: true })\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const knip = () => {\n return runSteps('Knip', [['knip', ['--dependencies', '--no-exit-code']]])\n}\n","import {\n existsSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\nimport { createInterface } from 'node:readline'\n\nimport chalk from 'chalk'\nimport { globSync } from 'glob'\n\nimport { INIT_CWD, runInstall } from '../lib/index.ts'\n\nexport interface LintInitParams {\n verbose?: boolean\n}\n\nfunction askConfirmation(question: string): Promise<boolean> {\n const rl = createInterface({ input: process.stdin, output: process.stdout })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes')\n })\n })\n}\n\nconst DISALLOWED_IMPORTS_XYLABS = [\n '@xylabs/api',\n '@xylabs/array',\n '@xylabs/arraybuffer',\n '@xylabs/assert',\n '@xylabs/axios',\n '@xylabs/base',\n '@xylabs/bignumber',\n '@xylabs/buffer',\n '@xylabs/creatable',\n '@xylabs/decimal-precision',\n '@xylabs/delay',\n '@xylabs/enum',\n '@xylabs/error',\n '@xylabs/eth-address',\n '@xylabs/events',\n '@xylabs/exists',\n '@xylabs/forget',\n '@xylabs/function-name',\n '@xylabs/hex',\n '@xylabs/log',\n '@xylabs/logger',\n '@xylabs/object',\n '@xylabs/platform',\n '@xylabs/profile',\n '@xylabs/promise',\n '@xylabs/retry',\n '@xylabs/set',\n '@xylabs/static-implements',\n '@xylabs/storage',\n '@xylabs/telemetry',\n '@xylabs/telemetry-exporter',\n '@xylabs/timer',\n '@xylabs/typeof',\n '@xylabs/url',\n '@xylabs/zod',\n]\n\nconst DISALLOWED_IMPORTS_XYO = [\n '@xyo-network/core-payload-plugins',\n '@xyo-network/manifest',\n '@xyo-network/modules',\n '@xyo-network/protocol',\n '@xyo-network/sdk-utils',\n '@xyo-network/shared',\n '@xyo-network/manifest-model',\n '@xyo-network/manifest-wrapper',\n '@xyo-network/boundwitness',\n '@xyo-network/core',\n '@xyo-network/crypto',\n '@xyo-network/payload',\n '@xyo-network/api',\n '@xyo-network/api-models',\n '@xyo-network/dns',\n '@xyo-network/metamask-connector',\n '@xyo-network/module-factory-locator',\n '@xyo-network/schema-payload-plugin',\n '@xyo-network/archivist-memory',\n '@xyo-network/id-payload-plugin',\n '@xyo-network/wallet',\n '@xyo-network/network',\n '@xyo-network/payload-plugin',\n '@xyo-network/payloadset-plugin',\n '@xyo-network/quadkey',\n '@xyo-network/schema-cache',\n '@xyo-network/schema-name-validator',\n '@xyo-network/witnesses',\n]\n\nfunction getRequiredDevDependencies(react: boolean): Record<string, string> {\n const configPkg = react ? '@xylabs/eslint-config-react-flat' : '@xylabs/eslint-config-flat'\n return {\n [configPkg]: 'workspace:^',\n eslint: '^10.0.0',\n }\n}\n\nfunction formatDisallowedArray(name: string, imports: readonly string[]): string {\n const items = imports.map(i => ` '${i}',`).join('\\n')\n return `const ${name} = [\\n${items}\\n]`\n}\n\nfunction generateEslintConfig({\n react, useXyLabsBarrel, useXyoBarrel,\n}: { react: boolean; useXyLabsBarrel: boolean; useXyoBarrel: boolean }): string {\n const configPkg = react ? '@xylabs/eslint-config-react-flat' : '@xylabs/eslint-config-flat'\n const lines: string[] = [\n \"import type { Linter } from 'eslint'\",\n '',\n `import { config as xylabsConfig } from '${configPkg}'`,\n '',\n ]\n\n if (useXyLabsBarrel) {\n lines.push(formatDisallowedArray('disallowedImportsXyLabs', DISALLOWED_IMPORTS_XYLABS), '')\n }\n\n if (useXyoBarrel) {\n lines.push(formatDisallowedArray('disallowedImportsXyo', DISALLOWED_IMPORTS_XYO), '')\n }\n\n // eslint-disable-next-line @stylistic/max-len\n lines.push('const config: Linter.Config[] = [', \" { ignores: ['.yarn/**', 'build', '**/build/**', '**/dist/**', 'dist', 'node_modules/**', '**/node_modules/**', '**/*.md/**', '.claude/worktrees/*'] },\", ' ...xylabsConfig,')\n\n if (useXyLabsBarrel || useXyoBarrel) {\n lines.push(' {', ' rules:', ' {', \" 'no-restricted-imports': [\", \" 'warn',\", ' {')\n\n if (useXyLabsBarrel && useXyoBarrel) {\n lines.push(' paths: [', ' ...disallowedImportsXyLabs,', ' ...disallowedImportsXyo,', ' ],')\n } else if (useXyLabsBarrel) {\n lines.push(' paths: [', ' ...disallowedImportsXyLabs,', ' ],')\n } else {\n lines.push(' paths: [', ' ...disallowedImportsXyo,', ' ],')\n }\n\n lines.push(' },', ' ],', ' },', ' },')\n }\n\n lines.push(']', '', 'export default config', '')\n\n return lines.join('\\n')\n}\n\nfunction addDevDependencies(packageJsonPath: string, requiredDeps: Record<string, string>, verbose?: boolean): boolean {\n const content = readFileSync(packageJsonPath, 'utf8')\n const pkg = JSON.parse(content) as Record<string, unknown>\n const devDeps = (pkg.devDependencies ?? {}) as Record<string, string>\n let changed = false\n\n for (const [name, version] of Object.entries(requiredDeps)) {\n if (!devDeps[name]) {\n devDeps[name] = version\n changed = true\n if (verbose) console.log(chalk.gray(` Added ${name}@${version} to devDependencies`))\n } else if (verbose) {\n console.log(chalk.gray(` ${name} already in devDependencies`))\n }\n }\n\n if (changed) {\n // sort devDependencies alphabetically\n const sorted = Object.fromEntries(Object.entries(devDeps).toSorted(([a], [b]) => a.localeCompare(b)))\n pkg.devDependencies = sorted\n writeFileSync(packageJsonPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n console.log(chalk.green('Updated package.json devDependencies'))\n } else {\n console.log(chalk.gray('package.json devDependencies already up to date'))\n }\n return changed\n}\n\nexport function detectReactInMonorepo(cwd: string, verbose?: boolean): boolean {\n const packageJsonPaths = globSync('packages/**/package.json', {\n cwd,\n ignore: ['**/node_modules/**'],\n })\n\n for (const relPath of packageJsonPaths) {\n const fullPath = PATH.resolve(cwd, relPath)\n try {\n const content = readFileSync(fullPath, 'utf8')\n const pkg = JSON.parse(content) as Record<string, unknown>\n // Only check dependencies and peerDependencies — devDependencies on react\n // can appear in tooling packages (eslint configs, test utilities) that don't\n // indicate the repo actually uses React\n const deps = pkg.dependencies as Record<string, string> | undefined\n const peerDeps = pkg.peerDependencies as Record<string, string> | undefined\n if (deps?.react || peerDeps?.react) {\n if (verbose) console.log(chalk.gray(` React detected in ${relPath}`))\n return true\n }\n } catch {\n // skip unreadable package.json\n }\n }\n return false\n}\n\nfunction findExistingConfig(configPath: string, legacyConfigPath: string): string | undefined {\n if (existsSync(configPath)) return configPath\n if (existsSync(legacyConfigPath)) return legacyConfigPath\n return undefined\n}\n\nfunction removeLegacyConfig(legacyConfigPath: string): void {\n if (existsSync(legacyConfigPath)) {\n unlinkSync(legacyConfigPath)\n console.log(chalk.gray('Removed legacy eslint.config.mjs'))\n }\n}\n\nfunction updateDependencies(packageJsonPath: string, react: boolean, cwd: string, verbose?: boolean): void {\n if (!existsSync(packageJsonPath)) {\n console.log(chalk.yellow('No package.json found — skipping dependency updates'))\n return\n }\n const changed = addDevDependencies(packageJsonPath, getRequiredDevDependencies(react), verbose)\n if (changed) {\n runInstall(cwd)\n }\n}\n\nexport async function lintInit({ verbose }: LintInitParams = {}): Promise<number> {\n const cwd = INIT_CWD()\n const configPath = PATH.resolve(cwd, 'eslint.config.ts')\n const legacyConfigPath = PATH.resolve(cwd, 'eslint.config.mjs')\n\n const existingPath = findExistingConfig(configPath, legacyConfigPath)\n if (existingPath) {\n const filename = PATH.basename(existingPath)\n const confirmed = await askConfirmation(\n chalk.yellow(`${filename} already exists. Replace it with eslint.config.ts? (y/N) `),\n )\n if (!confirmed) {\n console.log(chalk.gray(`Skipped — existing ${filename} preserved`))\n return 0\n }\n }\n\n const react = detectReactInMonorepo(cwd, verbose)\n if (react) {\n console.log(chalk.cyan('Detected React packages — using @xylabs/eslint-config-react-flat'))\n } else if (verbose) {\n console.log(chalk.gray(' No React packages detected — using @xylabs/eslint-config-flat'))\n }\n\n const useXyLabsBarrel = await askConfirmation(\n chalk.cyan('Disallow @xylabs/sdk-js barrel imports? (y/N) '),\n )\n const useXyoBarrel = await askConfirmation(\n chalk.cyan('Disallow @xyo-network/sdk-js barrel imports? (y/N) '),\n )\n\n const config = generateEslintConfig({\n react, useXyLabsBarrel, useXyoBarrel,\n })\n writeFileSync(configPath, config, 'utf8')\n console.log(chalk.green('Generated eslint.config.ts'))\n\n removeLegacyConfig(legacyConfigPath)\n updateDependencies(PATH.resolve(cwd, 'package.json'), react, cwd, verbose)\n\n return 0\n}\n","import { spawnSync } from 'node:child_process'\nimport {\n existsSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\nimport { findUp } from 'find-up'\n\nimport { runInstall } from '../lib/index.ts'\nimport { detectReactInMonorepo } from './lint-init.ts'\n\ninterface RuleEntry {\n level: string\n options?: unknown[]\n}\n\ninterface LintlintParams {\n fix?: boolean\n verbose?: boolean\n}\n\ninterface ConfigBlock {\n rules?: Record<string, unknown>\n}\n\ninterface RuleComparison {\n additions: { local: RuleEntry; rule: string }[]\n overrides: { local: RuleEntry; rule: string; shared: RuleEntry }[]\n redundant: { local: RuleEntry; rule: string; shared: RuleEntry }[]\n}\n\nfunction parseRuleValue(value: unknown): RuleEntry | undefined {\n if (typeof value === 'string') {\n return { level: value }\n }\n if (typeof value === 'number') {\n return { level: String(value) }\n }\n if (Array.isArray(value) && value.length > 0) {\n return {\n level: String(value[0]),\n options: value.length > 1 ? value.slice(1) : undefined,\n }\n }\n return undefined\n}\n\nfunction normalizeLevel(level: string): string {\n if (level === '0' || level === 'off') return 'off'\n if (level === '1' || level === 'warn') return 'warn'\n if (level === '2' || level === 'error') return 'error'\n return level\n}\n\nfunction rulesMatch(a: RuleEntry, b: RuleEntry): boolean {\n if (normalizeLevel(a.level) !== normalizeLevel(b.level)) return false\n return JSON.stringify(a.options) === JSON.stringify(b.options)\n}\n\nfunction formatRule(entry: RuleEntry): string {\n if (entry.options) {\n return JSON.stringify([entry.level, ...entry.options])\n }\n return JSON.stringify([entry.level])\n}\n\nfunction mergeRulesFromBlocks(blocks: ConfigBlock[]): Map<string, RuleEntry> {\n const merged = new Map<string, RuleEntry>()\n for (const block of blocks) {\n if (!block.rules) continue\n for (const [name, value] of Object.entries(block.rules)) {\n const parsed = parseRuleValue(value)\n if (parsed) merged.set(name, parsed)\n }\n }\n return merged\n}\n\nfunction detectSharedPackage(source: string): string | undefined {\n if (source.includes('@xylabs/eslint-config-react-flat')) return '@xylabs/eslint-config-react-flat'\n if (source.includes('@xylabs/eslint-config-flat')) return '@xylabs/eslint-config-flat'\n return undefined\n}\n\nfunction extractLocalRuleBlocks(source: string): string[] {\n const blocks: string[] = []\n const ruleBlockRegex = /\\{\\s*(?:files\\s*:\\s*\\[.*?\\]\\s*,\\s*)?rules\\s*:\\s*\\{([^}]*(?:\\{[^}]*\\}[^}]*)*)\\}/g\n let match\n while ((match = ruleBlockRegex.exec(source)) !== null) {\n blocks.push(match[1])\n }\n return blocks\n}\n\nfunction extractRulesFromSourceBlocks(blocks: string[]): Map<string, string> {\n const rules = new Map<string, string>()\n for (const block of blocks) {\n const ruleRegex = /['\"]([^'\"]+)['\"]\\s*:\\s*(\\[[\\s\\S]*?\\](?=\\s*,|\\s*$))/gm\n let match\n while ((match = ruleRegex.exec(block)) !== null) {\n rules.set(match[1], match[2])\n }\n }\n return rules\n}\n\nfunction extractConfigBlocks(sharedModule: Record<string, unknown>): ConfigBlock[] {\n const config = sharedModule.config ?? sharedModule.default\n if (Array.isArray(config)) return config as ConfigBlock[]\n return []\n}\n\nasync function resolveSharedConfig(configDir: string, sharedPkg: string): Promise<ConfigBlock[]> {\n try {\n const sharedModule = await import(sharedPkg) as Record<string, unknown>\n return extractConfigBlocks(sharedModule)\n } catch {\n const distPath = PATH.resolve(configDir, 'node_modules', sharedPkg, 'dist', 'node', 'index.mjs')\n try {\n const sharedModule = await import(distPath) as Record<string, unknown>\n return extractConfigBlocks(sharedModule)\n } catch {\n const neutralPath = PATH.resolve(configDir, 'node_modules', sharedPkg, 'dist', 'neutral', 'index.mjs')\n const sharedModule = await import(neutralPath) as Record<string, unknown>\n return extractConfigBlocks(sharedModule)\n }\n return []\n }\n}\n\nasync function loadSharedRules(configDir: string, sharedPkg: string, verbose: boolean): Promise<Map<string, RuleEntry> | undefined> {\n const sharedBlocks = await resolveSharedConfig(configDir, sharedPkg)\n const sharedRules = mergeRulesFromBlocks(sharedBlocks)\n\n if (verbose) {\n console.log(chalk.gray(`Shared config defines ${sharedRules.size} rules`))\n }\n\n if (sharedRules.size === 0) {\n console.error(chalk.red('Could not load rules from shared config. Is it installed and built?'))\n return undefined\n }\n\n return sharedRules\n}\n\nasync function loadLocalRules(eslintConfigPath: string, source: string, verbose: boolean): Promise<{ explicit: Map<string, string>; resolved: Map<string, RuleEntry> }> {\n const localModule = await import(eslintConfigPath) as Record<string, unknown>\n const localConfig = localModule.default ?? localModule\n const localBlocks: ConfigBlock[] = Array.isArray(localConfig) ? localConfig as ConfigBlock[] : [localConfig as ConfigBlock]\n const resolved = mergeRulesFromBlocks(localBlocks)\n\n const localRuleBlocks = extractLocalRuleBlocks(source)\n const explicit = extractRulesFromSourceBlocks(localRuleBlocks)\n\n if (verbose) {\n console.log(chalk.gray(`Local config has ${explicit.size} explicit rule setting(s)`))\n }\n\n return { explicit, resolved }\n}\n\nfunction compareRules(\n explicitRuleNames: Map<string, string>,\n allResolvedRules: Map<string, RuleEntry>,\n sharedRules: Map<string, RuleEntry>,\n): RuleComparison {\n const redundant: RuleComparison['redundant'] = []\n const overrides: RuleComparison['overrides'] = []\n const additions: RuleComparison['additions'] = []\n\n for (const ruleName of explicitRuleNames.keys()) {\n const resolvedEntry = allResolvedRules.get(ruleName)\n const sharedEntry = sharedRules.get(ruleName)\n\n if (!resolvedEntry) continue\n\n if (!sharedEntry) {\n additions.push({ local: resolvedEntry, rule: ruleName })\n } else if (rulesMatch(resolvedEntry, sharedEntry)) {\n redundant.push({\n local: resolvedEntry, rule: ruleName, shared: sharedEntry,\n })\n } else {\n overrides.push({\n local: resolvedEntry, rule: ruleName, shared: sharedEntry,\n })\n }\n }\n\n return {\n additions,\n overrides,\n redundant,\n }\n}\n\nfunction reportResults({\n additions, overrides, redundant,\n}: RuleComparison, verbose: boolean): void {\n if (redundant.length > 0) {\n console.log(chalk.yellow(`\\n${redundant.length} redundant rule(s) (same as shared config — can be removed):`))\n for (const { rule, local } of redundant) {\n console.log(chalk.yellow(` ${rule}: ${formatRule(local)}`))\n }\n }\n\n if (overrides.length > 0) {\n console.log(chalk.cyan(`\\n${overrides.length} rule override(s) (different from shared config):`))\n for (const {\n rule, local, shared,\n } of overrides) {\n console.log(chalk.cyan(` ${rule}:`))\n console.log(chalk.gray(` shared: ${formatRule(shared)}`))\n console.log(chalk.white(` local: ${formatRule(local)}`))\n }\n }\n\n if (additions.length > 0 && verbose) {\n console.log(chalk.gray(`\\n${additions.length} local addition(s) (not in shared config):`))\n for (const { rule, local } of additions) {\n console.log(chalk.gray(` ${rule}: ${formatRule(local)}`))\n }\n }\n\n if (redundant.length === 0 && overrides.length === 0) {\n console.log(chalk.green('No redundant or overridden rules found'))\n }\n}\n\nfunction fixRedundantRules(eslintConfigPath: string, redundant: RuleComparison['redundant']): void {\n let updated = readFileSync(eslintConfigPath, 'utf8')\n const original = updated\n for (const { rule } of redundant) {\n const escaped = rule.replaceAll('/', String.raw`\\/`)\n const pattern = new RegExp(String.raw`[ \\t]*['\"]${escaped}['\"]\\s*:\\s*\\[[^\\]]*\\],?[ \\t]*\\n?`, 'g')\n updated = updated.replace(pattern, '')\n }\n // Clean up empty rule blocks left behind\n updated = updated.replaceAll(/\\{\\s*rules\\s*:\\s*\\{\\s*\\}\\s*,?\\s*\\}\\s*,?/g, '')\n updated = updated.replaceAll(/\\n{3,}/g, '\\n\\n')\n\n if (updated !== original) {\n writeFileSync(eslintConfigPath, updated, 'utf8')\n console.log(chalk.green(`\\nFixed: removed ${redundant.length} redundant rule(s)`))\n }\n}\n\nfunction formatConfigFile(eslintConfigPath: string): void {\n spawnSync('eslint', ['--fix', eslintConfigPath], { stdio: 'inherit' })\n}\n\nfunction fixConfigMismatch(\n eslintConfigPath: string,\n configDir: string,\n source: string,\n sharedPkg: string,\n expectedPkg: string,\n): void {\n const updated = source.replaceAll(sharedPkg, expectedPkg)\n writeFileSync(eslintConfigPath, updated, 'utf8')\n console.log(chalk.green(`Fixed: replaced ${sharedPkg} with ${expectedPkg}`))\n\n const packageJsonPath = PATH.resolve(configDir, 'package.json')\n if (!existsSync(packageJsonPath)) return\n\n const content = readFileSync(packageJsonPath, 'utf8')\n const pkg = JSON.parse(content) as Record<string, unknown>\n const devDeps = (pkg.devDependencies ?? {}) as Record<string, string>\n const oldVersion = devDeps[sharedPkg]\n if (!oldVersion) return\n\n delete devDeps[sharedPkg]\n devDeps[expectedPkg] = oldVersion\n const sorted = Object.fromEntries(Object.entries(devDeps).toSorted(([a], [b]) => a.localeCompare(b)))\n pkg.devDependencies = sorted\n writeFileSync(packageJsonPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n console.log(chalk.green(`Updated package.json: ${sharedPkg} → ${expectedPkg}`))\n runInstall(configDir)\n}\n\nfunction checkConfigVariant(\n eslintConfigPath: string,\n configDir: string,\n source: string,\n sharedPkg: string,\n fix: boolean,\n verbose: boolean,\n): boolean {\n const hasReact = detectReactInMonorepo(configDir, verbose)\n const expectedPkg = hasReact ? '@xylabs/eslint-config-react-flat' : '@xylabs/eslint-config-flat'\n\n if (sharedPkg === expectedPkg) return false\n\n console.log(chalk.yellow(`\\nConfig mismatch: using ${sharedPkg} but ${hasReact ? 'React packages detected' : 'no React packages found'}`))\n console.log(chalk.yellow(` Expected: ${expectedPkg}`))\n\n if (fix) {\n fixConfigMismatch(eslintConfigPath, configDir, source, sharedPkg, expectedPkg)\n }\n\n return true\n}\n\nexport async function lintlint({ fix, verbose }: LintlintParams = {}): Promise<number> {\n const eslintConfigPath = await findUp(['eslint.config.ts', 'eslint.config.mjs'])\n if (!eslintConfigPath) {\n console.error(chalk.red('No eslint.config.ts found'))\n return 1\n }\n\n const configDir = PATH.dirname(eslintConfigPath)\n\n if (verbose) {\n console.log(chalk.gray(`Found config: ${eslintConfigPath}`))\n }\n\n const source = readFileSync(eslintConfigPath, 'utf8')\n const sharedPkg = detectSharedPackage(source)\n\n if (!sharedPkg) {\n console.log(chalk.yellow('No @xylabs/eslint-config-flat or @xylabs/eslint-config-react-flat imports found'))\n return 0\n }\n\n if (verbose) {\n console.log(chalk.gray(`Shared package: ${sharedPkg}`))\n }\n\n const hasMismatch = checkConfigVariant(eslintConfigPath, configDir, source, sharedPkg, !!fix, !!verbose)\n\n // Re-read source after potential mismatch fix to avoid overwriting changes\n const currentSource = (hasMismatch && fix) ? readFileSync(eslintConfigPath, 'utf8') : source\n\n const sharedRules = await loadSharedRules(configDir, sharedPkg, !!verbose)\n if (!sharedRules) return 1\n\n const { explicit, resolved } = await loadLocalRules(eslintConfigPath, currentSource, !!verbose)\n const results = compareRules(explicit, resolved, sharedRules)\n\n reportResults(results, !!verbose)\n\n if (results.redundant.length > 0 && fix) {\n fixRedundantRules(eslintConfigPath, results.redundant)\n }\n\n const didFix = fix && (hasMismatch || results.redundant.length > 0)\n if (didFix) {\n formatConfigFile(eslintConfigPath)\n }\n\n const hasUnfixedMismatch = hasMismatch && !fix\n const hasUnfixedRedundant = results.redundant.length > 0 && !fix\n return hasUnfixedMismatch || hasUnfixedRedundant ? 1 : 0\n}\n","import type { Options } from 'tsup'\n\nexport type EntryMode = 'all' | 'single' | 'auto' | 'platform' | 'custom'\n\n/**\n * Configuration for specifying which paths are targeted.\n */\nexport interface PathConfig {\n /**\n * Glob patterns to exclude (takes precedence over include).\n */\n exclude?: string[]\n /**\n * Glob patterns to include.\n */\n include?: string[]\n}\n\n/**\n * Configuration for Dynamic Share.\n */\n\nexport interface DynamicShareConfig extends PathConfig {}\n\n/**\n * Configuration for Live Share.\n */\n\nexport interface LiveShareConfig extends PathConfig {}\n\nexport interface CompileConfig {\n bundleTypes?: boolean\n /** @param entryMode all, single, custom, platform, or auto */\n entryMode?: EntryMode\n /** @param when building types with tsc, should it use the outDir to write to? */\n outDirAsBuildDir?: boolean\n}\n\nexport type PackageCompileTsupConfig = CompileConfig & {\n browser?: Record<string, Options | boolean>\n neutral?: Record<string, Options | boolean>\n node?: Record<string, Options | boolean>\n tsup?: { options?: Options }\n verbose?: boolean\n}\n\nexport type PackageCompileTscConfig = CompileConfig & { mode: 'tsc' }\n\n/**\n * How deplint should classify a dependency.\n * - `dep`: must stay in `dependencies` (never promoted to peerDependencies)\n * - `peer`: should be treated as a peerDependency (overrides a parent `dep` setting)\n */\nexport type DeplintRefType = 'dep' | 'peer'\n\n/**\n * Per-package configuration within deplint.\n */\nexport interface DeplintPackageConfig {\n /** How this dependency should be classified. */\n refType: DeplintRefType\n}\n\n/**\n * Configuration for deplint (dependency linting).\n */\nexport interface DeplintConfig {\n /**\n * Package names to exclude from unused-dependency checks.\n * Packages listed here will never be reported as \"unused\" by deplint,\n * even if no import for them is detected in source or dist files.\n * Useful for packages that are used implicitly (e.g. runtime plugins,\n * CSS-in-JS themes, or polyfills that have side effects on import).\n */\n exclude?: string[]\n /**\n * Per-dependency configuration keyed by package name.\n * Cascades from root to package configs (maps are merged, with\n * package-level entries overriding root-level entries for the same key).\n */\n packages?: Record<string, DeplintPackageConfig>\n}\n\n/**\n * Canonical names for individually toggleable publint checks.\n */\nexport type PublintCheckName\n = | 'files'\n | 'importToDefault'\n | 'main'\n | 'module'\n | 'peerDeps'\n | 'publint'\n | 'resolutions'\n | 'rootSource'\n | 'rootTypes'\n | 'sideEffects'\n | 'source'\n | 'types'\n\nexport const ALL_PUBLINT_CHECKS: PublintCheckName[] = [\n 'files', 'importToDefault', 'main', 'module', 'peerDeps', 'publint', 'resolutions', 'rootSource', 'rootTypes', 'sideEffects', 'source', 'types',\n]\n\n/** Checks that only apply to published (non-private) packages */\nexport const PUBLISH_ONLY_CHECKS: PublintCheckName[] = [\n 'files', 'importToDefault', 'main', 'module', 'publint', 'rootSource', 'rootTypes', 'sideEffects', 'source', 'types',\n]\n\n/**\n * Configuration for publint (package publishing linting).\n */\nexport interface PublintConfig {\n /**\n * Check names to exclude from publint runs.\n * All checks run by default; listed names are skipped.\n * Cannot be used together with `include`.\n */\n exclude?: PublintCheckName[]\n /**\n * Check names to include (whitelist) in publint runs.\n * Only listed checks will run; all others are skipped.\n * Cannot be used together with `exclude`.\n */\n include?: PublintCheckName[]\n /**\n * Whether to run `pack` when invoking the publint library.\n * When true (default), the package manager is used to determine which\n * files would be published. Set to false to skip packing for faster runs.\n */\n pack?: boolean\n}\n\n/**\n * Configuration for readme generation.\n */\nexport interface ReadmeConfig {\n /**\n * URL that the logo links to when clicked.\n * Replaces the placeholder in the template's [![logo][]](url) link.\n */\n logoLinkUrl?: string\n /**\n * Public URL for the logo image displayed at the top of generated READMEs.\n * Replaces the placeholder in the template's [logo] reference link.\n */\n logoUrl?: string\n}\n\n/**\n * Command-specific configuration that cascades from root to package.\n * Settings here override the legacy top-level equivalents.\n */\nexport interface CommandsConfig {\n deplint?: DeplintConfig\n publint?: boolean | PublintConfig\n}\n\nexport interface XyConfigBase {\n /**\n * Command-specific settings grouped under `commands`.\n * These cascade from root xy.config down to per-package xy.config files.\n * Takes precedence over the legacy top-level `deplint`/`publint` fields.\n */\n commands?: CommandsConfig\n compile?: CompileConfig\n /** @deprecated Use `commands.deplint` instead. */\n deplint?: DeplintConfig\n dynamicShare?: DynamicShareConfig\n liveShare?: LiveShareConfig\n /** @deprecated Use `commands.publint` instead. */\n publint?: boolean | PublintConfig\n\n readme?: ReadmeConfig\n verbose?: boolean\n}\n\nexport interface XyTsupConfig extends XyConfigBase { compile?: PackageCompileTsupConfig }\n\nexport interface XyTscConfig extends XyConfigBase { compile?: PackageCompileTscConfig }\n\nexport type XyConfigLegacy = XyTsupConfig | XyTscConfig\n\nexport type XyConfig = XyConfigLegacy & {\n dev?: {\n build?: {\n clean?: boolean /* default: true */\n compile?: boolean /* default: true */\n deplint?: boolean /* default: true */\n gendocs?: boolean /* default: false */\n gitlint?: boolean /* default: true */\n knip?: boolean /* default: true */\n license?: boolean /* default: true */\n lint?: boolean /* default: true */\n publint?: boolean /* default: true */\n statics?: boolean /* default: true */\n verbose?: boolean\n }\n compile?: PackageCompileTsupConfig\n verbose?: boolean\n }\n verbose?: boolean\n}\n","import { promises as fs } from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\nimport { glob } from 'glob'\nimport sortPackageJson from 'sort-package-json'\n\nimport { INIT_CWD } from '../../lib/index.ts'\n// eslint-disable-next-line import-x/no-internal-modules\nimport type { PublintCheckName } from './compile/XyConfig.ts'\n// eslint-disable-next-line import-x/no-internal-modules\nimport { PUBLISH_ONLY_CHECKS } from './compile/XyConfig.ts'\n\nexport interface PackagePublintParams {\n exclude?: Set<PublintCheckName>\n fix?: boolean\n pack?: boolean\n pkgDir?: string\n strict?: boolean\n verbose?: boolean\n}\n\nconst removeSourceFromExports = (exports: Record<string, unknown>): boolean => {\n let removed = false\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'source') {\n delete exports[key]\n removed = true\n } else if (typeof value === 'object' && value !== null && removeSourceFromExports(value as Record<string, unknown>)) removed = true\n }\n return removed\n}\n\nconst hasSourceInExports = (exports: Record<string, unknown>): boolean => {\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'source') return true\n if (typeof value === 'object' && value !== null && hasSourceInExports(value as Record<string, unknown>)) return true\n }\n return false\n}\n\nconst hasImportKeyInExports = (exports: Record<string, unknown>): boolean => {\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'import' && typeof value === 'string' && value.endsWith('.mjs')) return true\n if (typeof value === 'object' && value !== null && hasImportKeyInExports(value as Record<string, unknown>)) return true\n }\n return false\n}\n\nconst replaceImportWithDefault = (exports: Record<string, unknown>): boolean => {\n let modified = false\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'import' && typeof value === 'string' && value.endsWith('.mjs')) {\n if (exports.default === undefined) {\n exports.default = value\n }\n delete exports.import\n if (exports.types === undefined) {\n exports.types = value.replace(/\\.mjs$/, '.d.ts')\n }\n modified = true\n } else if (typeof value === 'object' && value !== null && replaceImportWithDefault(value as Record<string, unknown>)) modified = true\n }\n return modified\n}\n\nconst hasTypesInExports = (exports: Record<string, unknown>): boolean => {\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'types') return true\n if (typeof value === 'object' && value !== null && hasTypesInExports(value as Record<string, unknown>)) return true\n }\n return false\n}\n\nfunction ensureExportsPath(value: string): string {\n if (value.startsWith('./') || value.startsWith('../')) return value\n return `./${value}`\n}\n\ninterface CustomLintResult {\n errors: number\n modified: boolean\n warnings: number\n}\n\nfunction emptyCustomResult(): CustomLintResult {\n return {\n errors: 0, modified: false, warnings: 0,\n }\n}\n\nfunction mergeResults(target: CustomLintResult, source: CustomLintResult): void {\n target.errors += source.errors\n target.warnings += source.warnings\n target.modified = target.modified || source.modified\n}\n\nfunction checkFiles(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n const files = pkg.files as string[] | undefined\n if (files === undefined) {\n console.warn(chalk.yellow('Publint [custom]: \"files\" field is missing'))\n result.warnings++\n }\n if (Array.isArray(files) && !files.includes('README.md')) {\n files.push('README.md')\n console.warn(chalk.yellow('Publint [custom]: added \"README.md\" to \"files\"'))\n result.modified = true\n result.warnings++\n }\n if (Array.isArray(files) && files.includes('src')) {\n if (fix) {\n pkg.files = files.filter((f: string) => f !== 'src')\n console.warn(chalk.yellow('Publint [custom]: removed \"src\" from \"files\"'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: \"src\" should not be in \"files\" (use --fix to remove)'))\n }\n result.warnings++\n }\n return result\n}\n\nfunction checkExportsSource(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (exports && typeof exports === 'object' && hasSourceInExports(exports)) {\n if (fix) {\n removeSourceFromExports(exports)\n console.warn(chalk.yellow('Publint [custom]: removed \"source\" entries from \"exports\"'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: \"source\" entries should not be in \"exports\" (use --fix to remove)'))\n }\n result.warnings++\n }\n return result\n}\n\nfunction migrateFieldToExports(\n pkg: Record<string, unknown>,\n field: string,\n exportKey: string,\n fix: boolean,\n): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg[field] === undefined) return result\n\n // Skip non-JS files (e.g. tsconfig packages use \"main\": \"./tsconfig.json\")\n const fieldValue = pkg[field] as string\n if (!fieldValue.endsWith('.js') && !fieldValue.endsWith('.mjs') && !fieldValue.endsWith('.cjs')) return result\n\n if (fix) {\n const exportValue = ensureExportsPath(fieldValue)\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (exports && typeof exports === 'object') {\n const dot = exports['.']\n if (dot && typeof dot === 'object' && !(dot as Record<string, unknown>)[exportKey]) {\n (dot as Record<string, unknown>)[exportKey] = exportValue\n console.warn(chalk.yellow(`Publint [custom]: migrated \"${field}\" to \"exports['.'].${exportKey}\" (${fieldValue})`))\n }\n } else if (!pkg.exports) {\n pkg.exports = { '.': { [exportKey]: exportValue } }\n console.warn(chalk.yellow(`Publint [custom]: migrated \"${field}\" to \"exports\" (.→${fieldValue})`))\n }\n delete pkg[field]\n console.warn(chalk.yellow(`Publint [custom]: removed deprecated \"${field}\" field`))\n result.modified = true\n } else {\n console.warn(chalk.yellow(`Publint [custom]: \"${field}\" field is deprecated, use \"exports\" instead (use --fix to remove)`))\n }\n result.warnings++\n return result\n}\n\nfunction checkSideEffects(pkg: Record<string, unknown>): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg.sideEffects !== false) {\n console.warn(chalk.yellow('Publint [custom]: \"sideEffects\" field should be set to false'))\n result.warnings++\n }\n return result\n}\n\nfunction checkRootSource(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n for (const field of ['source', 'src']) {\n if (pkg[field] !== undefined) {\n if (fix) {\n delete pkg[field]\n console.warn(chalk.yellow(`Publint [custom]: removed root-level \"${field}\" field`))\n result.modified = true\n } else {\n console.warn(chalk.yellow(`Publint [custom]: root-level \"${field}\" field should not be in package.json (use --fix to remove)`))\n }\n result.warnings++\n }\n }\n return result\n}\n\nfunction checkResolutions(pkg: Record<string, unknown>): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg.resolutions !== undefined) {\n console.warn(chalk.yellow('Publint [custom]: \"resolutions\" in use'))\n console.warn(chalk.gray(JSON.stringify(pkg.resolutions, null, 2)))\n result.warnings++\n }\n return result\n}\n\nfunction checkImportToDefault(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (!exports || typeof exports !== 'object') return result\n if (!hasImportKeyInExports(exports)) return result\n\n if (fix) {\n replaceImportWithDefault(exports)\n console.warn(chalk.yellow('Publint [custom]: renamed \"import\" to \"default\" in \"exports\" and ensured \"types\" siblings'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: \"import\" entries in \"exports\" should use \"default\" instead (use --fix to rename)'))\n }\n result.warnings++\n return result\n}\n\nfunction checkRootTypes(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg.types === undefined) return result\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (!exports || typeof exports !== 'object' || !hasTypesInExports(exports)) return result\n\n if (fix) {\n delete pkg.types\n console.warn(chalk.yellow('Publint [custom]: removed redundant root \"types\" field (already defined in \"exports\")'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: root \"types\" field is redundant when \"exports\" defines types (use --fix to remove)'))\n }\n result.warnings++\n return result\n}\n\nfunction customPubLint(\n pkg: Record<string, unknown>,\n fix = false,\n exclude = new Set<PublintCheckName>(),\n): [number, number, boolean] {\n const result = emptyCustomResult()\n if (!exclude.has('files')) mergeResults(result, checkFiles(pkg, fix))\n if (!exclude.has('source')) mergeResults(result, checkExportsSource(pkg, fix))\n if (!exclude.has('rootSource')) mergeResults(result, checkRootSource(pkg, fix))\n if (!exclude.has('main')) mergeResults(result, migrateFieldToExports(pkg, 'main', 'default', fix))\n if (!exclude.has('types')) mergeResults(result, migrateFieldToExports(pkg, 'types', 'types', fix))\n if (!exclude.has('module')) mergeResults(result, migrateFieldToExports(pkg, 'module', 'default', fix))\n if (!exclude.has('importToDefault')) mergeResults(result, checkImportToDefault(pkg, fix))\n if (!exclude.has('rootTypes')) mergeResults(result, checkRootTypes(pkg, fix))\n if (!exclude.has('sideEffects')) mergeResults(result, checkSideEffects(pkg))\n if (!exclude.has('resolutions')) mergeResults(result, checkResolutions(pkg))\n return [result.errors, result.warnings, result.modified]\n}\n\n// Always-included files that npm packs regardless of the \"files\" field\nconst ALWAYS_INCLUDED_PATTERNS = [\n 'package.json',\n 'README',\n 'README.*',\n 'LICENCE',\n 'LICENCE.*',\n 'LICENSE',\n 'LICENSE.*',\n 'CHANGELOG',\n 'CHANGELOG.*',\n]\n\ninterface PackFile {\n data: string\n name: string\n}\n\nasync function resolvePackFiles(pkgDir: string, filesField?: string[]): Promise<PackFile[]> {\n const patterns = [...ALWAYS_INCLUDED_PATTERNS]\n if (filesField) {\n for (const pattern of filesField) {\n // Negation patterns (e.g. \"!**/*.spec.*\") are exclusions, pass through as-is\n if (pattern.startsWith('!')) {\n patterns.push(pattern)\n } else {\n // Include pattern — glob both the pattern itself and its contents if it's a directory\n patterns.push(pattern, `${pattern}/**`)\n }\n }\n }\n\n const matched = await glob(patterns, {\n cwd: pkgDir,\n nodir: true,\n dot: false,\n })\n\n const files: PackFile[] = await Promise.all(\n matched.map(async (rel) => {\n const abs = path.join(pkgDir, rel)\n const data = await fs.readFile(abs, 'utf8').catch(() => '')\n // publint's tarball VFS looks up files by path.join(pkgDir, rel),\n // so names must be prefixed with pkgDir to match\n return { name: path.join(pkgDir, rel), data }\n }),\n )\n return files\n}\n\nasync function runPublintLibrary(pkgDir: string, pkg: Record<string, unknown>, strict: boolean, pack: boolean): Promise<{ errors: number; total: number }> {\n const { publint } = await import('publint')\n\n let packOption: { files: PackFile[] } | false = false\n if (pack) {\n const files = await resolvePackFiles(pkgDir, pkg.files as string[] | undefined)\n packOption = { files }\n }\n\n const { messages } = await publint({\n level: 'suggestion',\n pack: packOption,\n pkgDir,\n strict,\n })\n\n // eslint-disable-next-line import-x/no-internal-modules\n const { formatMessage } = await import('publint/utils')\n\n for (const message of messages) {\n switch (message.type) {\n case 'error': {\n console.error(chalk.red(`[${message.code}] ${formatMessage(message, pkg)}`))\n break\n }\n case 'warning': {\n console.warn(chalk.yellow(`[${message.code}] ${formatMessage(message, pkg)}`))\n break\n }\n default: {\n console.log(chalk.white(`[${message.code}] ${formatMessage(message, pkg)}`))\n break\n }\n }\n }\n\n return {\n errors: messages.filter(message => message.type === 'error').length,\n total: messages.length,\n }\n}\n\nexport const packagePublint = async ({\n exclude = new Set(), fix = false, pack = true, pkgDir: pkgDirParam, strict = true, verbose: _verbose = false,\n}: PackagePublintParams = {}): Promise<number> => {\n const pkgDir = pkgDirParam ?? INIT_CWD()\n\n const sortedPkg = sortPackageJson(await fs.readFile(`${pkgDir}/package.json`, 'utf8'))\n await fs.writeFile(`${pkgDir}/package.json`, sortedPkg)\n\n const pkg = JSON.parse(await fs.readFile(`${pkgDir}/package.json`, 'utf8')) as Record<string, unknown>\n\n const effectiveExclude = pkg.private\n ? new Set([...exclude, ...PUBLISH_ONLY_CHECKS])\n : exclude\n\n console.log(chalk.green(`Publint: ${String(pkg.name)}${pkg.private ? chalk.gray(' (private)') : ''}`))\n console.log(chalk.gray(pkgDir))\n\n let libraryErrors = 0\n if (!effectiveExclude.has('publint')) {\n const library = await runPublintLibrary(pkgDir, pkg, strict, pack)\n libraryErrors = library.errors\n }\n\n const [errorCount, _warningCount, modified] = customPubLint(pkg, fix, effectiveExclude)\n\n if (modified) {\n const sorted = sortPackageJson(JSON.stringify(pkg, null, 2))\n await fs.writeFile(`${pkgDir}/package.json`, sorted)\n }\n\n return libraryErrors + errorCount\n}\n","import chalk from 'chalk'\n\nimport {\n INIT_CWD,\n installOutputCapture,\n loadConfig,\n loadWorkspaceCommandConfig,\n outputStorage,\n runInstall,\n runWithConcurrency,\n} from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\nimport type {\n PublintCheckName, PublintConfig, XyConfig,\n} from './package/index.ts'\nimport { ALL_PUBLINT_CHECKS, packagePublint } from './package/index.ts'\nimport {\n checkInternalPeerVersions,\n fixInternalPeerVersions,\n} from './package-lint-deps.ts'\n\nexport interface PublintParams {\n cliExclude?: string[]\n cliInclude?: string[]\n fix?: boolean\n jobs: number\n pack?: boolean\n pkg?: string\n verbose?: boolean\n}\n\nexport interface PublintPackageParams {\n exclude: Set<PublintCheckName>\n fix?: boolean\n pack?: boolean\n pkg: string\n verbose?: boolean\n}\n\nfunction resolveExclude(\n publintConfig: { exclude?: PublintCheckName[]; include?: PublintCheckName[] },\n cliExclude?: string[],\n cliInclude?: string[],\n): Set<PublintCheckName> | undefined {\n const hasExclude = (publintConfig.exclude?.length ?? 0) > 0 || (cliExclude?.length ?? 0) > 0\n const hasInclude = (publintConfig.include?.length ?? 0) > 0 || (cliInclude?.length ?? 0) > 0\n\n if (hasExclude && hasInclude) {\n console.error(chalk.red('Publint: --include and --exclude cannot be used together'))\n return undefined\n }\n\n if (hasInclude) {\n const include = new Set<PublintCheckName>([\n ...((publintConfig.include ?? [])),\n ...((cliInclude ?? []) as PublintCheckName[]),\n ])\n return new Set(ALL_PUBLINT_CHECKS.filter(c => !include.has(c)))\n }\n\n return new Set<PublintCheckName>([\n ...(publintConfig.exclude ?? []),\n ...((cliExclude ?? []) as PublintCheckName[]),\n ])\n}\n\nfunction normalizePublintConfig(value: boolean | PublintConfig | undefined): PublintConfig {\n if (typeof value === 'object') return value\n return {}\n}\n\nexport interface ResolvedPublintOptions {\n exclude: Set<PublintCheckName>\n pack: boolean\n}\n\nexport async function loadPublintOptions(): Promise<ResolvedPublintOptions> {\n const config = await loadConfig<XyConfig>()\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const publintConfig = normalizePublintConfig(config.commands?.publint ?? config.publint)\n const exclude = resolveExclude(publintConfig) ?? new Set<PublintCheckName>()\n return { exclude, pack: publintConfig.pack ?? true }\n}\n\nexport const publint = async ({\n cliExclude, cliInclude, fix, jobs, pack, verbose, pkg,\n}: PublintParams) => {\n return pkg === undefined\n ? await publintAll({\n cliExclude, cliInclude, fix, jobs, pack, verbose,\n })\n : await publintSingle({\n cliExclude, cliInclude, fix, pack, pkg, verbose,\n })\n}\n\nfunction logPublintSummary(packages: number, errors: number, ms: number): void {\n const color = errors > 0 ? chalk.red : chalk.blue\n console.log(color(`Checked ${packages} package(s) in ${ms.toFixed(0)}ms with ${errors} issue(s) found.`))\n}\n\ninterface PublintSingleParams {\n cliExclude?: string[]\n cliInclude?: string[]\n fix?: boolean\n pack?: boolean\n pkg: string\n verbose?: boolean\n}\n\nexport const publintSingle = async ({\n cliExclude, cliInclude, fix, pack, pkg, verbose,\n}: PublintSingleParams) => {\n const start = performance.now()\n const pm = getPackageManager()\n const workspace = pm.findWorkspace(pkg)\n if (!workspace) {\n console.error(chalk.red(`Publint: workspace \"${pkg}\" not found`))\n return 1\n }\n const wsPublintConfig = normalizePublintConfig(\n await loadWorkspaceCommandConfig<boolean | PublintConfig>(workspace.location, 'publint'),\n )\n const exclude = resolveExclude(wsPublintConfig, cliExclude, cliInclude)\n if (!exclude) return 1\n const shouldPack = pack ?? wsPublintConfig.pack ?? true\n\n const errors = await packagePublint({\n exclude, fix, pack: shouldPack, pkgDir: workspace.location, verbose,\n })\n logPublintSummary(1, errors, performance.now() - start)\n return errors\n}\n\ninterface PublintAllParams {\n cliExclude?: string[]\n cliInclude?: string[]\n fix?: boolean\n jobs: number\n pack?: boolean\n verbose?: boolean\n}\n\ninterface CapturedResult {\n errors: number\n output: string[]\n}\n\nexport const publintAll = async ({\n cliExclude, cliInclude, fix, jobs, pack, verbose,\n}: PublintAllParams) => {\n const start = performance.now()\n const pm = getPackageManager()\n const workspaces = pm.listWorkspaces()\n const concurrency = jobs\n\n const results: CapturedResult[] = Array.from({ length: workspaces.length }, () => ({ errors: 0, output: [] }))\n\n installOutputCapture()\n\n await runWithConcurrency(\n workspaces.map((ws, i) => ({ i, ws })),\n concurrency,\n async ({ i, ws }) => {\n const output: string[] = []\n await outputStorage.run(output, async () => {\n try {\n const wsPublintConfig = normalizePublintConfig(\n await loadWorkspaceCommandConfig<boolean | PublintConfig>(ws.location, 'publint'),\n )\n const exclude = resolveExclude(wsPublintConfig, cliExclude, cliInclude)\n ?? new Set<PublintCheckName>()\n const shouldPack = pack ?? wsPublintConfig.pack ?? true\n\n const errors = await packagePublint({\n exclude, fix, pack: shouldPack, pkgDir: ws.location, verbose,\n })\n results[i] = { errors, output }\n } catch (ex) {\n output.push(chalk.red(`Publint failed for ${ws.name}: ${(ex as Error).message}\\n`))\n results[i] = { errors: 1, output }\n }\n })\n },\n )\n\n let totalErrors = 0\n for (const { errors, output } of results) {\n for (const line of output) {\n process.stdout.write(line)\n }\n totalErrors += errors\n }\n\n // Check internal peerDependencies use semver ranges (not workspace: protocol)\n const allExclude = resolveExclude({}, cliExclude, cliInclude) ?? new Set<PublintCheckName>()\n if (!allExclude.has('peerDeps')) {\n const cwd = INIT_CWD()\n const peerResult = checkInternalPeerVersions(cwd, workspaces)\n if (peerResult.fixable.length > 0) {\n if (fix) {\n fixInternalPeerVersions(cwd, workspaces)\n runInstall()\n } else {\n for (const msg of peerResult.fixable) {\n console.log(chalk.red(` ✗ ${msg} (fixable)`))\n }\n totalErrors += peerResult.fixable.length\n }\n }\n totalErrors += peerResult.errors.length\n }\n\n logPublintSummary(workspaces.length, totalErrors, performance.now() - start)\n return totalErrors\n}\n","import { runSteps } from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\nimport { lintNext } from './lintNext.ts'\n\nexport interface RelintParams {\n cache?: boolean\n fix?: boolean\n incremental?: boolean\n jobs: number\n next?: boolean\n pkg?: string\n verbose?: boolean\n}\n\nexport interface RelintPackageParams {\n pkg: string\n verbose?: boolean\n}\n\nexport const relintPackage = ({\n pkg, fix, verbose,\n}: { fix?: boolean; pkg: string; verbose?: boolean }) => {\n const pm = getPackageManager()\n return runSteps(`${fix ? 'Fix' : 'Lint'} [${pkg}]`, [\n pm.runInWorkspace(pkg, fix ? 'package-fix' : verbose ? 'package-lint-verbose' : 'package-lint'),\n ])\n}\n\nexport const relint = ({\n fix, jobs, next, pkg, verbose,\n}: RelintParams): number | Promise<number> => {\n if (next) {\n return lintNext({\n cache: false, fix, jobs, pkg, verbose,\n })\n }\n return pkg === undefined\n ? relintAllPackages({ fix })\n : relintPackage({\n pkg, fix, verbose,\n })\n}\n\nexport const relintAllPackages = ({ fix = false }: { fix?: boolean } = {}) => {\n const fixOptions = fix ? ['--fix'] : []\n return runSteps(`${fix ? 'Fix' : 'Lint'} [All-Packages]`, [\n ['eslint', fixOptions],\n ])\n}\n","import { runSteps } from '../lib/index.ts'\n\nexport const sonar = () => {\n return runSteps('Sonar', [['eslint', ['-c', 'sonar.eslintrc', '.']]])\n}\n","import type { Argv } from 'yargs'\n\nexport const packagePositionalParam = (yargs: Argv<unknown>) => {\n return yargs.positional('package', { describe: 'Specific package to target', type: 'string' })\n}\n","import type { CommandModule } from 'yargs'\n\nimport { cycle } from '../../actions/index.ts'\nimport { packagePositionalParam } from '../param.ts'\n\nexport const cycleCommand: CommandModule = {\n command: 'cycle [package]',\n describe: 'Cycle - Check for dependency cycles',\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n },\n handler: async (argv) => {\n if (argv.verbose) console.log('Cycle')\n process.exitCode = await cycle({ jobs: argv.jobs as number, pkg: argv.package as string })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { deplint } from '../../actions/index.ts'\nimport { packagePositionalParam } from '../param.ts'\n\nexport const deplintCommand: CommandModule = {\n command: 'deplint [package]',\n describe: 'Deplint - Run Deplint',\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n .option('deps', {\n alias: 'd',\n default: false,\n description: 'Check dependencies',\n type: 'boolean',\n })\n .option('devDeps', {\n alias: 'v',\n default: false,\n description: 'Check devDependencies',\n type: 'boolean',\n })\n .option('peerDeps', {\n alias: 'p',\n default: true,\n description: 'Check peerDependencies',\n type: 'boolean',\n })\n .option('exclude', {\n alias: 'e',\n description: 'Package names to exclude from unused checks (comma-separated or repeated)',\n type: 'array',\n })\n .option('fix', {\n alias: 'f',\n default: false,\n description: 'Fix unsatisfied peer dependencies by adding them to package.json',\n type: 'boolean',\n })\n .option('format', {\n choices: ['human', 'json'],\n default: 'human',\n description: 'Output format',\n type: 'string',\n })\n },\n handler: async (argv) => {\n if (argv.verbose) console.log('Deplint')\n // Flatten comma-separated values so both --exclude a,b and --exclude a --exclude b work\n const cliExclude = (argv.exclude as string[] | undefined)\n ?.flatMap(v => String(v).split(','))\n .map(v => v.trim())\n .filter(Boolean)\n process.exitCode = await deplint({\n cliExclude, pkg: argv.package as string, deps: !!argv.deps, devDeps: !!argv.devDeps, fix: !!argv.fix, format: argv.format as 'human' | 'json', peerDeps: !!argv.peerDeps, verbose: !!argv.verbose,\n })\n },\n}\n","import chalk from 'chalk'\nimport type { CommandModule } from 'yargs'\n\nimport { fix } from '../../actions/index.ts'\nimport { packagePositionalParam } from '../param.ts'\n\nexport const fixCommand: CommandModule = {\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n .option('cache', {\n alias: 'c',\n default: false,\n description: 'Use caching for performance',\n type: 'boolean',\n })\n .option('next', {\n alias: 'n',\n default: false,\n description: 'Fix per-package (lower memory, parallel)',\n type: 'boolean',\n })\n },\n command: 'fix [package]',\n deprecated: 'Use \"xy lint --fix\" instead',\n describe: 'Fix - Run Eslint w/fix',\n handler: async (argv) => {\n console.warn(chalk.yellow('Deprecated: use \"xy lint --fix\" instead of \"xy fix\"'))\n if (argv.verbose) console.log('Fix')\n process.exitCode = await fix({\n cache: argv.cache as boolean,\n jobs: argv.jobs as number,\n next: argv.next as boolean,\n pkg: argv.package as string,\n verbose: !!argv.verbose,\n })\n },\n}\n","import chalk from 'chalk'\nimport type { CommandModule } from 'yargs'\n\nimport { knip } from '../../actions/index.ts'\nimport { packagePositionalParam } from '../param.ts'\n\nexport const knipCommand: CommandModule = {\n command: 'knip',\n describe: 'Knip - Run Knip',\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n },\n handler: (argv) => {\n if (argv.verbose) console.log('Knip')\n const start = Date.now()\n process.exitCode = knip()\n console.log(chalk.blue(`Knip finished in ${Date.now() - start}ms`))\n },\n}\n","import chalk from 'chalk'\nimport type { CommandModule } from 'yargs'\n\nimport { lintInit } from '../../../actions/index.ts'\nimport { initCommand } from './initCommand.ts'\nimport { runCommand } from './runCommand.ts'\n\nexport const lintCommand: CommandModule = {\n builder: (yargs) => {\n return yargs\n .command(runCommand)\n .command(initCommand)\n .option('init', {\n default: false,\n description: 'Generate eslint.config.ts and add ESLint dependencies',\n hidden: true,\n type: 'boolean',\n })\n },\n command: 'lint',\n describe: 'Lint - Run ESLint',\n handler: async (argv) => {\n if (argv.init) {\n console.warn(chalk.yellow('Deprecated: use \"xy lint init\" instead of \"xy lint --init\"'))\n process.exitCode = await lintInit({ verbose: !!argv.verbose })\n }\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { lintInit } from '../../../actions/index.ts'\n\nexport const initCommand: CommandModule = {\n command: 'init',\n describe: 'Generate eslint.config.ts and add ESLint dependencies',\n handler: async (argv) => {\n if (argv.verbose) console.log('Lint Init')\n process.exitCode = await lintInit({ verbose: !!argv.verbose })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { fix, lint } from '../../../actions/index.ts'\nimport { packagePositionalParam } from '../../param.ts'\n\nexport const runCommand: CommandModule = {\n aliases: ['$0'],\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n .option('fix', {\n alias: 'f',\n default: false,\n description: 'Fix fixable issues',\n type: 'boolean',\n })\n .option('cache', {\n alias: 'c',\n default: false,\n description: 'Use caching for performance',\n type: 'boolean',\n })\n .option('next', {\n alias: 'n',\n default: false,\n description: 'Lint per-package (lower memory, parallel)',\n type: 'boolean',\n })\n },\n command: 'run [package]',\n describe: 'Run ESLint',\n handler: async (argv) => {\n if (argv.verbose) console.log('Lint')\n process.exitCode\n = argv.fix\n ? await fix({\n cache: argv.cache as boolean,\n jobs: argv.jobs as number,\n next: argv.next as boolean,\n pkg: argv.package as string,\n verbose: !!argv.verbose,\n })\n : await lint({\n cache: argv.cache as boolean,\n jobs: argv.jobs as number,\n next: argv.next as boolean,\n pkg: argv.package as string,\n verbose: !!argv.verbose,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { lintlint } from '../../actions/index.ts'\n\nexport const lintlintCommand: CommandModule = {\n command: 'lintlint',\n describe: 'Lint Lint - Check for redundant or overridden ESLint rules vs shared config',\n builder: (yargs) => {\n return yargs.option('fix', {\n default: false,\n description: 'Remove redundant rules from local config',\n type: 'boolean',\n })\n },\n handler: async (argv) => {\n if (argv.verbose) console.log('Lint Lint')\n process.exitCode = await lintlint({\n fix: argv.fix as boolean,\n verbose: !!argv.verbose,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { publint } from '../../actions/index.ts'\nimport { packagePositionalParam } from '../param.ts'\n\nexport const publintCommand: CommandModule = {\n command: 'publint [package]',\n describe: 'Publint - Run Publint',\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n .option('fix', {\n describe: 'Auto-fix issues (e.g. remove \"src\" from files, \"source\" from exports, root-level \"source\"/\"src\" fields)',\n type: 'boolean',\n default: false,\n })\n .option('exclude', {\n alias: 'e',\n description: 'Checks to skip (comma-separated): publint, files, source, rootSource, main, types, module, sideEffects, resolutions, peerDeps',\n type: 'string',\n })\n .option('include', {\n description: 'Only run these checks (comma-separated): publint, files, source, rootSource, main, types, module, sideEffects, resolutions, peerDeps',\n type: 'string',\n })\n .option('pack', {\n description: 'Run pack before publint to verify published files (default: true)',\n type: 'boolean',\n })\n },\n handler: async (argv) => {\n if (argv.verbose) console.log('Publint')\n const parseList = (raw: string | undefined) => raw\n ?.split(',')\n .map(v => v.trim())\n .filter(Boolean)\n process.exitCode = await publint({\n cliExclude: parseList(argv.exclude as string | undefined),\n cliInclude: parseList(argv.include as string | undefined),\n fix: !!argv.fix,\n jobs: argv.jobs as number,\n pack: argv.pack as boolean | undefined,\n pkg: argv.package as string,\n verbose: !!argv.verbose,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { relint } from '../../actions/index.ts'\nimport { packagePositionalParam } from '../param.ts'\n\nexport const relintCommand: CommandModule = {\n command: 'relint [package]',\n describe: 'Relint - Clean & Lint',\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n .option('next', {\n alias: 'n',\n default: false,\n description: 'Relint per-package (lower memory, parallel)',\n type: 'boolean',\n })\n },\n handler: async (argv) => {\n if (argv.verbose) console.log('Relinting')\n process.exitCode = await relint({\n jobs: argv.jobs as number,\n next: argv.next as boolean,\n pkg: argv.package as string,\n verbose: !!argv.verbose,\n })\n },\n}\n","import type { CommandModule } from 'yargs'\n\nimport { sonar } from '../../actions/index.ts'\nimport { packagePositionalParam } from '../param.ts'\n\nexport const sonarCommand: CommandModule = {\n command: 'sonar',\n describe: 'Sonar - Run Sonar Check',\n builder: (yargs) => {\n return packagePositionalParam(yargs)\n },\n handler: (argv) => {\n if (argv.verbose) console.log('Sonar Check')\n process.exitCode = sonar()\n },\n}\n","import type { Argv } from 'yargs'\n\nimport { cycleCommand } from './cycleCommand.ts'\nimport { deplintCommand } from './deplintCommand.ts'\nimport { fixCommand } from './fixCommand.ts'\nimport { knipCommand } from './knipCommand.ts'\nimport { lintCommand } from './lintCommand.ts'\nimport { lintlintCommand } from './lintlintCommand.ts'\nimport { publintCommand } from './publintCommand.ts'\nimport { relintCommand } from './relintCommand.ts'\nimport { sonarCommand } from './sonarCommand.ts'\n\nexport const xyLintCommands = (args: Argv) => {\n return args\n .command(cycleCommand)\n .command(lintCommand)\n .command(lintlintCommand)\n .command(deplintCommand)\n .command(fixCommand)\n .command(relintCommand)\n .command(publintCommand)\n .command(knipCommand)\n .command(sonarCommand)\n}\n"],"mappings":"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","names":["chalk","ex","ex","error","chalk","chalk","path","cycle","chalk","readFileSync","readFileSync","chalk","chalk","spawnSync","existsSync","chalk","chalk","config","existsSync","spawnSync","chalk","fs","chalk","path","fs","fix","diagnostic","fix","fs","fs","fs","path","fs","globSync","fs","globSync","fs","fs","path","fs","path","isDeclarationFile","fs","path","chalk","fs","chalk","fs","builtinModules","chalk","builtinModules","fs","chalk","fs","chalk","semver","sortPackageJson","fs","semver","versionRange","chalk","chalk","fs","path","ts","fs","path","fs","path","fs","ts","path","fs","fs","chalk","chalk","semver","semver","fs","fs","diagnostic","chalk","fix","diagnostic","fix","chalk","readFileSync","PATH","chalk","semver","PATH","readFileSync","semver","expected","semver","chalk","path","chalk","chalk","fix","path","fix","existsSync","readFileSync","writeFileSync","PATH","chalk","globSync","readFileSync","chalk","writeFileSync","globSync","PATH","existsSync","config","spawnSync","existsSync","readFileSync","writeFileSync","PATH","chalk","rules","config","PATH","chalk","readFileSync","writeFileSync","spawnSync","existsSync","fix","fs","path","chalk","sortPackageJson","fix","chalk","path","fs","publint","sortPackageJson","chalk","chalk","fix","chalk","fix","chalk","chalk","chalk","chalk","chalk","chalk"]}