@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,774 @@
1
+ // src/actions/package-lint.ts
2
+ import {
3
+ existsSync as existsSync2,
4
+ readFileSync as readFileSync2,
5
+ writeFileSync as writeFileSync2
6
+ } from "fs";
7
+ import PATH2 from "path";
8
+ import chalk3 from "chalk";
9
+ import picomatch from "picomatch";
10
+ import semver2 from "semver";
11
+
12
+ // src/pm/detectPackageManager.ts
13
+ import { existsSync } from "fs";
14
+ function detectPackageManager() {
15
+ if (existsSync("pnpm-lock.yaml") || existsSync("pnpm-workspace.yaml")) return "pnpm";
16
+ return "yarn";
17
+ }
18
+
19
+ // src/pm/registry.ts
20
+ var implementations = /* @__PURE__ */ new Map();
21
+ function getPackageManager(name) {
22
+ const pmName = name ?? detectPackageManager();
23
+ const pm = implementations.get(pmName);
24
+ if (!pm) {
25
+ throw new Error(
26
+ `No package manager implementation registered for "${pmName}". Ensure registerPackageManager() has been called before getPackageManager().`
27
+ );
28
+ }
29
+ return pm;
30
+ }
31
+
32
+ // src/lib/initCwd.ts
33
+ function INIT_CWD() {
34
+ return process.env.INIT_CWD ?? process.cwd();
35
+ }
36
+
37
+ // src/lib/latestVersions.ts
38
+ var latestVersions = {
39
+ node: "24.14.1",
40
+ nodeLtsCodename: "Krypton",
41
+ npm: "11.11.0",
42
+ pnpm: "10.33.0",
43
+ yarn: "4.13.0"
44
+ };
45
+
46
+ // src/lib/runInstall.ts
47
+ import { spawnSync } from "child_process";
48
+ import chalk from "chalk";
49
+ function runInstall(cwd) {
50
+ const pm = detectPackageManager();
51
+ console.log(chalk.gray(`Running ${pm} install...`));
52
+ const result = spawnSync(pm, ["install"], {
53
+ cwd,
54
+ stdio: "inherit"
55
+ });
56
+ if (result.status !== 0) {
57
+ console.warn(chalk.yellow(`${pm} install failed`));
58
+ return false;
59
+ }
60
+ console.log(chalk.green("Dependencies installed"));
61
+ return true;
62
+ }
63
+
64
+ // src/actions/package-lint-deps.ts
65
+ import { readFileSync, writeFileSync } from "fs";
66
+ import PATH from "path";
67
+ import chalk2 from "chalk";
68
+ import semver from "semver";
69
+ function readWorkspacePackageJson(cwd, location) {
70
+ const pkgPath = PATH.resolve(cwd, location, "package.json");
71
+ try {
72
+ return JSON.parse(readFileSync(pkgPath, "utf8"));
73
+ } catch {
74
+ return void 0;
75
+ }
76
+ }
77
+ function writeWorkspacePackageJson(cwd, location, pkg) {
78
+ const pkgPath = PATH.resolve(cwd, location, "package.json");
79
+ writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}
80
+ `, "utf8");
81
+ }
82
+ function buildWorkspaceVersionMap(cwd, workspaces) {
83
+ const map = /* @__PURE__ */ new Map();
84
+ for (const { location, name } of workspaces) {
85
+ if (location === ".") continue;
86
+ const pkg = readWorkspacePackageJson(cwd, location);
87
+ if (!pkg) continue;
88
+ const version = pkg.version;
89
+ if (version) map.set(name, version);
90
+ }
91
+ return map;
92
+ }
93
+ function expectedPeerRange(devDepVersion, targetVersion) {
94
+ const parsed = semver.parse(targetVersion);
95
+ if (!parsed) return `~${targetVersion}`;
96
+ if (devDepVersion === "workspace:^") {
97
+ return `^${parsed.major}`;
98
+ }
99
+ return `~${parsed.major}.${parsed.minor}`;
100
+ }
101
+ function checkVersionConsistency(cwd, rootPkg, workspaces) {
102
+ const result = {
103
+ errors: [],
104
+ fixable: [],
105
+ warnings: []
106
+ };
107
+ if (rootPkg.version !== void 0) {
108
+ result.fixable.push('Root package.json should not have a "version" field in a monorepo');
109
+ }
110
+ const versions = /* @__PURE__ */ new Map();
111
+ for (const { location, name } of workspaces) {
112
+ if (location === ".") continue;
113
+ const pkg = readWorkspacePackageJson(cwd, location);
114
+ if (!pkg) continue;
115
+ const version = pkg.version;
116
+ if (version) {
117
+ versions.set(name, version);
118
+ } else {
119
+ result.errors.push(`${name} (${location}) is missing a "version" field`);
120
+ }
121
+ }
122
+ const uniqueVersions = new Set(versions.values());
123
+ if (uniqueVersions.size > 1) {
124
+ const versionList = [...uniqueVersions].toSorted(semver.rcompare);
125
+ for (const [name, version] of versions) {
126
+ if (version !== versionList[0]) {
127
+ result.fixable.push(`${name} has version ${version} (expected ${versionList[0]})`);
128
+ }
129
+ }
130
+ }
131
+ return result;
132
+ }
133
+ function fixVersionConsistency(cwd, rootPkg, writeRootPackageJson2, workspaces) {
134
+ if (rootPkg.version !== void 0) {
135
+ delete rootPkg.version;
136
+ writeRootPackageJson2(cwd, rootPkg);
137
+ console.log(chalk2.green(' \u2714 Fixed: removed "version" from root package.json'));
138
+ }
139
+ const versions = [];
140
+ for (const { location } of workspaces) {
141
+ if (location === ".") continue;
142
+ const pkg = readWorkspacePackageJson(cwd, location);
143
+ if (!pkg) continue;
144
+ const version = pkg.version;
145
+ if (version && semver.valid(version)) {
146
+ versions.push(version);
147
+ }
148
+ }
149
+ if (versions.length === 0) return;
150
+ const highest = versions.toSorted(semver.rcompare)[0];
151
+ for (const { location, name } of workspaces) {
152
+ if (location === ".") continue;
153
+ const pkg = readWorkspacePackageJson(cwd, location);
154
+ if (!pkg) continue;
155
+ if (pkg.version !== highest) {
156
+ pkg.version = highest;
157
+ writeWorkspacePackageJson(cwd, location, pkg);
158
+ console.log(chalk2.green(` \u2714 Fixed: set version to ${highest} in ${name} (${location})`));
159
+ }
160
+ }
161
+ }
162
+ function expectedDepVersion(targetVersion) {
163
+ const parsed = semver.parse(targetVersion);
164
+ if (!parsed) return `~${targetVersion}`;
165
+ return `~${targetVersion}`;
166
+ }
167
+ function checkInternalDepVersions(cwd, workspaces) {
168
+ const result = {
169
+ errors: [],
170
+ fixable: [],
171
+ warnings: []
172
+ };
173
+ const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces);
174
+ for (const { location, name } of workspaces) {
175
+ const pkg = readWorkspacePackageJson(cwd, location);
176
+ if (!pkg) continue;
177
+ for (const depField of ["dependencies", "devDependencies"]) {
178
+ const deps = pkg[depField];
179
+ if (!deps) continue;
180
+ for (const [dep, version] of Object.entries(deps)) {
181
+ const targetVersion = workspaceVersions.get(dep);
182
+ if (!targetVersion) continue;
183
+ const expected = expectedDepVersion(targetVersion);
184
+ if (version.startsWith("workspace:")) {
185
+ result.fixable.push(
186
+ `${name} (${location}) ${depField}.${dep} is "${version}" \u2014 should be "${expected}" (not workspace: protocol)`
187
+ );
188
+ } else if (version !== expected) {
189
+ result.fixable.push(
190
+ `${name} (${location}) ${depField}.${dep} is "${version}" \u2014 should be "${expected}"`
191
+ );
192
+ }
193
+ }
194
+ }
195
+ }
196
+ return result;
197
+ }
198
+ function fixInternalDepVersions(cwd, workspaces) {
199
+ const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces);
200
+ for (const { location, name } of workspaces) {
201
+ const pkg = readWorkspacePackageJson(cwd, location);
202
+ if (!pkg) continue;
203
+ let modified = false;
204
+ for (const depField of ["dependencies", "devDependencies"]) {
205
+ const deps = pkg[depField];
206
+ if (!deps) continue;
207
+ for (const [dep, version] of Object.entries(deps)) {
208
+ const targetVersion = workspaceVersions.get(dep);
209
+ if (!targetVersion) continue;
210
+ const expected = expectedDepVersion(targetVersion);
211
+ if (version !== expected) {
212
+ deps[dep] = expected;
213
+ console.log(chalk2.green(` \u2714 Fixed: set ${depField}.${dep} to "${expected}" in ${name} (${location})`));
214
+ modified = true;
215
+ }
216
+ }
217
+ }
218
+ if (modified) {
219
+ writeWorkspacePackageJson(cwd, location, pkg);
220
+ }
221
+ }
222
+ }
223
+ function checkWorkspaceProtocol(cwd, workspaces) {
224
+ const result = {
225
+ errors: [],
226
+ fixable: [],
227
+ warnings: []
228
+ };
229
+ const workspaceNames = new Set(workspaces.map((w) => w.name));
230
+ for (const { location, name } of workspaces) {
231
+ const pkg = readWorkspacePackageJson(cwd, location);
232
+ if (!pkg) continue;
233
+ for (const depField of ["dependencies", "devDependencies"]) {
234
+ const deps = pkg[depField];
235
+ if (!deps) continue;
236
+ for (const [dep, version] of Object.entries(deps)) {
237
+ if (!workspaceNames.has(dep)) continue;
238
+ if (!version.startsWith("workspace:")) {
239
+ result.fixable.push(
240
+ `${name} (${location}) ${depField}.${dep} is "${version}" \u2014 should use workspace: protocol`
241
+ );
242
+ }
243
+ }
244
+ }
245
+ }
246
+ return result;
247
+ }
248
+ function fixWorkspaceProtocol(cwd, workspaces) {
249
+ const workspaceNames = new Set(workspaces.map((w) => w.name));
250
+ for (const { location, name } of workspaces) {
251
+ const pkg = readWorkspacePackageJson(cwd, location);
252
+ if (!pkg) continue;
253
+ let modified = false;
254
+ for (const depField of ["dependencies", "devDependencies"]) {
255
+ const deps = pkg[depField];
256
+ if (!deps) continue;
257
+ for (const [dep, version] of Object.entries(deps)) {
258
+ if (!workspaceNames.has(dep)) continue;
259
+ if (!version.startsWith("workspace:")) {
260
+ deps[dep] = "workspace:~";
261
+ console.log(chalk2.green(` \u2714 Fixed: set ${depField}.${dep} to "workspace:~" in ${name} (${location})`));
262
+ modified = true;
263
+ }
264
+ }
265
+ }
266
+ if (modified) {
267
+ writeWorkspacePackageJson(cwd, location, pkg);
268
+ }
269
+ }
270
+ }
271
+ function checkInternalPeerVersions(cwd, workspaces) {
272
+ const result = {
273
+ errors: [],
274
+ fixable: [],
275
+ warnings: []
276
+ };
277
+ const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces);
278
+ for (const { location, name } of workspaces) {
279
+ const pkg = readWorkspacePackageJson(cwd, location);
280
+ if (!pkg) continue;
281
+ const peerDeps = pkg.peerDependencies;
282
+ if (!peerDeps) continue;
283
+ const devDeps = pkg.devDependencies;
284
+ for (const [dep, version] of Object.entries(peerDeps)) {
285
+ const targetVersion = workspaceVersions.get(dep);
286
+ if (!targetVersion) continue;
287
+ if (version.startsWith("workspace:")) {
288
+ const expected2 = expectedPeerRange(devDeps?.[dep], targetVersion);
289
+ result.fixable.push(
290
+ `${name} (${location}) peerDependencies.${dep} uses workspace: protocol \u2014 should be "${expected2}"`
291
+ );
292
+ continue;
293
+ }
294
+ const expected = expectedPeerRange(devDeps?.[dep], targetVersion);
295
+ if (version !== expected && !semver.satisfies(targetVersion, version)) {
296
+ result.fixable.push(
297
+ `${name} (${location}) peerDependencies.${dep} is "${version}" \u2014 current version ${targetVersion} is not satisfied; expected "${expected}"`
298
+ );
299
+ }
300
+ }
301
+ }
302
+ return result;
303
+ }
304
+ function fixInternalPeerVersions(cwd, workspaces) {
305
+ const workspaceVersions = buildWorkspaceVersionMap(cwd, workspaces);
306
+ for (const { location, name } of workspaces) {
307
+ const pkg = readWorkspacePackageJson(cwd, location);
308
+ if (!pkg) continue;
309
+ const peerDeps = pkg.peerDependencies;
310
+ if (!peerDeps) continue;
311
+ const devDeps = pkg.devDependencies;
312
+ let modified = false;
313
+ for (const [dep, version] of Object.entries(peerDeps)) {
314
+ const targetVersion = workspaceVersions.get(dep);
315
+ if (!targetVersion) continue;
316
+ const expected = expectedPeerRange(devDeps?.[dep], targetVersion);
317
+ if (version !== expected) {
318
+ peerDeps[dep] = expected;
319
+ console.log(chalk2.green(` \u2714 Fixed: set peerDependencies.${dep} to "${expected}" in ${name} (${location})`));
320
+ modified = true;
321
+ }
322
+ }
323
+ if (modified) {
324
+ writeWorkspacePackageJson(cwd, location, pkg);
325
+ }
326
+ }
327
+ }
328
+
329
+ // src/actions/package-lint.ts
330
+ function emptyResult() {
331
+ return {
332
+ errors: [],
333
+ fixable: [],
334
+ warnings: []
335
+ };
336
+ }
337
+ function readRootPackageJson(cwd) {
338
+ const raw = readFileSync2(PATH2.resolve(cwd, "package.json"), "utf8");
339
+ return JSON.parse(raw);
340
+ }
341
+ function writeRootPackageJson(cwd, pkg) {
342
+ const path = PATH2.resolve(cwd, "package.json");
343
+ writeFileSync2(path, `${JSON.stringify(pkg, null, 2)}
344
+ `, "utf8");
345
+ }
346
+ function readPnpmWorkspaceGlobs(cwd) {
347
+ const wsPath = PATH2.resolve(cwd, "pnpm-workspace.yaml");
348
+ if (!existsSync2(wsPath)) return void 0;
349
+ const raw = readFileSync2(wsPath, "utf8");
350
+ const globs = [];
351
+ let inPackages = false;
352
+ for (const line of raw.split("\n")) {
353
+ if (/^packages\s*:/.test(line)) {
354
+ inPackages = true;
355
+ continue;
356
+ }
357
+ if (inPackages) {
358
+ const match = /^\s+-\s+['"]?([^'"]+)['"]?\s*$/.exec(line);
359
+ if (match) {
360
+ globs.push(match[1]);
361
+ } else if (/^\S/.test(line) && line.trim() !== "") {
362
+ break;
363
+ }
364
+ }
365
+ }
366
+ return globs.length > 0 ? globs : void 0;
367
+ }
368
+ function isMonorepo(pkg, cwd) {
369
+ const workspaces = pkg.workspaces;
370
+ if (Array.isArray(workspaces) && workspaces.length > 0) return true;
371
+ return readPnpmWorkspaceGlobs(cwd) !== void 0;
372
+ }
373
+ function checkPackagesFolder(workspaces) {
374
+ const result = emptyResult();
375
+ for (const { location, name } of workspaces) {
376
+ if (location === ".") continue;
377
+ if (!location.startsWith("packages/") && !location.startsWith("packages\\")) {
378
+ result.errors.push(`${name} (${location}) is not inside a packages/ folder`);
379
+ }
380
+ }
381
+ return result;
382
+ }
383
+ function checkRootPrivate(pkg) {
384
+ const result = emptyResult();
385
+ if (!pkg.private) {
386
+ result.fixable.push("Root package.json must be private to prevent accidental publishing");
387
+ }
388
+ return result;
389
+ }
390
+ function fixRootPrivate(cwd, pkg) {
391
+ pkg.private = true;
392
+ writeRootPackageJson(cwd, pkg);
393
+ console.log(chalk3.green(' \u2714 Fixed: set "private": true in root package.json'));
394
+ }
395
+ function checkNoPublishConfigOnPrivate(pkg) {
396
+ const result = emptyResult();
397
+ if (pkg.private && pkg.publishConfig) {
398
+ result.fixable.push("Root package.json has publishConfig but is private \u2014 publishConfig is unnecessary");
399
+ }
400
+ return result;
401
+ }
402
+ function fixNoPublishConfigOnPrivate(cwd, pkg) {
403
+ delete pkg.publishConfig;
404
+ writeRootPackageJson(cwd, pkg);
405
+ console.log(chalk3.green(" \u2714 Fixed: removed publishConfig from private root package.json"));
406
+ }
407
+ function checkNoPackageManagerInWorkspaces(cwd, workspaces) {
408
+ const result = emptyResult();
409
+ for (const { location, name } of workspaces) {
410
+ if (location === ".") continue;
411
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
412
+ try {
413
+ const raw = readFileSync2(pkgPath, "utf8");
414
+ const pkg = JSON.parse(raw);
415
+ if (pkg.packageManager) {
416
+ result.fixable.push(`${name} (${location}) has a packageManager field \u2014 only the root should define this`);
417
+ }
418
+ } catch {
419
+ }
420
+ }
421
+ return result;
422
+ }
423
+ function fixNoPackageManagerInWorkspaces(cwd, _pkg, workspaces) {
424
+ for (const { location } of workspaces) {
425
+ if (location === ".") continue;
426
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
427
+ try {
428
+ const raw = readFileSync2(pkgPath, "utf8");
429
+ const pkg = JSON.parse(raw);
430
+ if (pkg.packageManager) {
431
+ delete pkg.packageManager;
432
+ writeFileSync2(pkgPath, `${JSON.stringify(pkg, null, 2)}
433
+ `, "utf8");
434
+ console.log(chalk3.green(` \u2714 Fixed: removed packageManager from ${location}/package.json`));
435
+ }
436
+ } catch {
437
+ }
438
+ }
439
+ }
440
+ function checkWorkspacesFieldPlacement(cwd, pm, workspaces) {
441
+ const result = emptyResult();
442
+ for (const { location, name } of workspaces) {
443
+ if (pm === "pnpm" ? true : location !== ".") {
444
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
445
+ try {
446
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
447
+ if (pkg.workspaces) {
448
+ const label = location === "." ? "Root" : `${name} (${location})`;
449
+ const reason = pm === "pnpm" ? "pnpm uses pnpm-workspace.yaml instead" : "only the root should define workspaces";
450
+ result.fixable.push(`${label} has a workspaces field \u2014 ${reason}`);
451
+ }
452
+ } catch {
453
+ }
454
+ }
455
+ }
456
+ return result;
457
+ }
458
+ function fixWorkspacesFieldPlacement(cwd, pm, workspaces) {
459
+ for (const { location } of workspaces) {
460
+ if (pm === "pnpm" ? true : location !== ".") {
461
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
462
+ try {
463
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
464
+ if (pkg.workspaces) {
465
+ delete pkg.workspaces;
466
+ writeFileSync2(pkgPath, `${JSON.stringify(pkg, null, 2)}
467
+ `, "utf8");
468
+ const label = location === "." ? "root" : location;
469
+ console.log(chalk3.green(` \u2714 Fixed: removed workspaces from ${label}/package.json`));
470
+ }
471
+ } catch {
472
+ }
473
+ }
474
+ }
475
+ }
476
+ function checkWorkspaceGlobCoverage(pkg, cwd, pm, workspaces) {
477
+ const result = emptyResult();
478
+ const globs = pm === "pnpm" ? readPnpmWorkspaceGlobs(cwd) ?? [] : Array.isArray(pkg.workspaces) ? pkg.workspaces : [];
479
+ if (globs.length === 0) {
480
+ const source = pm === "pnpm" ? "pnpm-workspace.yaml" : "root package.json workspaces";
481
+ result.errors.push(`No workspace globs found in ${source}`);
482
+ return result;
483
+ }
484
+ const matchers = globs.map((glob) => picomatch(glob));
485
+ const isMatch = (location) => matchers.some((m) => m(location));
486
+ for (const { location, name } of workspaces) {
487
+ if (location === ".") continue;
488
+ if (!isMatch(location)) {
489
+ const source = pm === "pnpm" ? "pnpm-workspace.yaml" : "root package.json workspaces";
490
+ result.errors.push(`${name} (${location}) is not matched by any glob in ${source}`);
491
+ }
492
+ }
493
+ return result;
494
+ }
495
+ function logResults(label, result, fix) {
496
+ let errors = 0;
497
+ let fixed = 0;
498
+ for (const error of result.errors) {
499
+ console.log(chalk3.red(` \u2717 ${error}`));
500
+ errors++;
501
+ }
502
+ for (const fixable of result.fixable) {
503
+ if (fix) {
504
+ fixed++;
505
+ } else {
506
+ console.log(chalk3.red(` \u2717 ${fixable} (fixable)`));
507
+ errors++;
508
+ }
509
+ }
510
+ for (const warning of result.warnings) {
511
+ console.log(chalk3.yellow(` \u26A0 ${warning}`));
512
+ }
513
+ if (errors === 0 && fixed === 0 && result.warnings.length === 0) {
514
+ console.log(chalk3.green(` \u2713 ${label}`));
515
+ }
516
+ return { errors, fixed };
517
+ }
518
+ function runChecks(entries, cwd, pkg, fix) {
519
+ let totalErrors = 0;
520
+ let totalFixed = 0;
521
+ for (const entry of entries) {
522
+ const result = entry.check();
523
+ const log = logResults(entry.label, result, fix);
524
+ if (fix && entry.fix && result.fixable.length > 0) {
525
+ entry.fix(cwd, pkg);
526
+ }
527
+ totalErrors += log.errors;
528
+ totalFixed += log.fixed;
529
+ }
530
+ return { errors: totalErrors, fixed: totalFixed };
531
+ }
532
+ function checkVoltaOnlyInRoot(cwd, workspaces) {
533
+ const result = emptyResult();
534
+ for (const { location, name } of workspaces) {
535
+ if (location === ".") continue;
536
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
537
+ try {
538
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
539
+ if (pkg.volta) {
540
+ result.fixable.push(`${name} (${location}) has a volta field \u2014 only the root should define this`);
541
+ }
542
+ } catch {
543
+ }
544
+ }
545
+ return result;
546
+ }
547
+ function fixVoltaOnlyInRoot(cwd, _pkg, workspaces) {
548
+ for (const { location } of workspaces) {
549
+ if (location === ".") continue;
550
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
551
+ try {
552
+ const raw = readFileSync2(pkgPath, "utf8");
553
+ const pkg = JSON.parse(raw);
554
+ if (pkg.volta) {
555
+ delete pkg.volta;
556
+ writeFileSync2(pkgPath, `${JSON.stringify(pkg, null, 2)}
557
+ `, "utf8");
558
+ console.log(chalk3.green(` \u2714 Fixed: removed volta from ${location}/package.json`));
559
+ }
560
+ } catch {
561
+ }
562
+ }
563
+ }
564
+ function isTerminalPackage(pkg) {
565
+ return pkg.private === true;
566
+ }
567
+ function checkEnginesOnlyInNonTerminal(cwd, workspaces) {
568
+ const result = emptyResult();
569
+ const rootPkg = JSON.parse(readFileSync2(PATH2.resolve(cwd, "package.json"), "utf8"));
570
+ if (rootPkg.engines) {
571
+ result.fixable.push("Root package.json has engines \u2014 terminal packages should not declare engines (use volta instead)");
572
+ }
573
+ for (const { location, name } of workspaces) {
574
+ if (location === ".") continue;
575
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
576
+ try {
577
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
578
+ if (isTerminalPackage(pkg) && pkg.engines) {
579
+ result.fixable.push(`${name} (${location}) is terminal (private) but has engines \u2014 terminal packages should not declare engines`);
580
+ }
581
+ if (!isTerminalPackage(pkg) && !pkg.engines) {
582
+ result.fixable.push(`${name} (${location}) is a library but has no engines field`);
583
+ }
584
+ } catch {
585
+ }
586
+ }
587
+ return result;
588
+ }
589
+ function fixEnginesOnlyInNonTerminal(cwd, _pkg, workspaces) {
590
+ const rootPath = PATH2.resolve(cwd, "package.json");
591
+ const rootRaw = readFileSync2(rootPath, "utf8");
592
+ const rootPkg = JSON.parse(rootRaw);
593
+ if (rootPkg.engines) {
594
+ delete rootPkg.engines;
595
+ writeFileSync2(rootPath, `${JSON.stringify(rootPkg, null, 2)}
596
+ `, "utf8");
597
+ console.log(chalk3.green(" \u2714 Fixed: removed engines from root package.json"));
598
+ }
599
+ const enginesTemplate = resolveEnginesTemplate(cwd, workspaces);
600
+ for (const { location } of workspaces) {
601
+ if (location === ".") continue;
602
+ const pkgPath = PATH2.resolve(cwd, location, "package.json");
603
+ try {
604
+ const raw = readFileSync2(pkgPath, "utf8");
605
+ const pkg = JSON.parse(raw);
606
+ if (isTerminalPackage(pkg) && pkg.engines) {
607
+ delete pkg.engines;
608
+ writeFileSync2(pkgPath, `${JSON.stringify(pkg, null, 2)}
609
+ `, "utf8");
610
+ console.log(chalk3.green(` \u2714 Fixed: removed engines from ${location}/package.json`));
611
+ }
612
+ if (!isTerminalPackage(pkg) && !pkg.engines && enginesTemplate) {
613
+ pkg.engines = enginesTemplate;
614
+ writeFileSync2(pkgPath, `${JSON.stringify(pkg, null, 2)}
615
+ `, "utf8");
616
+ console.log(chalk3.green(` \u2714 Fixed: added engines to ${location}/package.json`));
617
+ }
618
+ } catch {
619
+ }
620
+ }
621
+ }
622
+ function resolveEnginesTemplate(cwd, workspaces) {
623
+ for (const { location } of workspaces) {
624
+ if (location === ".") continue;
625
+ try {
626
+ const pkg = JSON.parse(readFileSync2(PATH2.resolve(cwd, location, "package.json"), "utf8"));
627
+ if (!isTerminalPackage(pkg) && pkg.engines) {
628
+ return pkg.engines;
629
+ }
630
+ } catch {
631
+ }
632
+ }
633
+ return void 0;
634
+ }
635
+ function checkVersionsIncludeLts(cwd, workspaces) {
636
+ const result = emptyResult();
637
+ const toolVersions = {
638
+ node: latestVersions.node,
639
+ npm: latestVersions.npm,
640
+ pnpm: latestVersions.pnpm,
641
+ yarn: latestVersions.yarn
642
+ };
643
+ for (const { location, name } of workspaces) {
644
+ const pkgPath = location === "." ? PATH2.resolve(cwd, "package.json") : PATH2.resolve(cwd, location, "package.json");
645
+ try {
646
+ const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
647
+ const label = location === "." ? "root" : `${name} (${location})`;
648
+ const engines = pkg.engines;
649
+ if (engines) {
650
+ for (const [tool, range] of Object.entries(engines)) {
651
+ const latest = toolVersions[tool];
652
+ if (latest && !semver2.satisfies(latest, range)) {
653
+ result.errors.push(
654
+ `${label} engines.${tool} "${range}" does not include latest ${tool === "node" ? "LTS " : ""}version ${latest}`
655
+ );
656
+ }
657
+ }
658
+ }
659
+ const volta = pkg.volta;
660
+ if (volta) {
661
+ for (const [tool, pinnedVersion] of Object.entries(volta)) {
662
+ const latest = toolVersions[tool];
663
+ if (latest && semver2.lt(pinnedVersion, latest)) {
664
+ result.warnings.push(
665
+ `${label} volta.${tool} "${pinnedVersion}" is older than latest ${tool === "node" ? "LTS " : ""}version ${latest}`
666
+ );
667
+ }
668
+ }
669
+ }
670
+ } catch {
671
+ }
672
+ }
673
+ return result;
674
+ }
675
+ function logSummary(errors, fixed) {
676
+ if (fixed > 0) {
677
+ console.log(chalk3.green(`
678
+ Fixed ${fixed} issue(s)`));
679
+ }
680
+ if (errors > 0) {
681
+ console.log(chalk3.red(`
682
+ ${errors} error(s) found`));
683
+ } else if (fixed === 0) {
684
+ console.log(chalk3.green("\n All checks passed"));
685
+ }
686
+ }
687
+ function packageLintMonorepo(fix = false) {
688
+ const cwd = INIT_CWD();
689
+ let pkg;
690
+ try {
691
+ pkg = readRootPackageJson(cwd);
692
+ } catch {
693
+ console.error(chalk3.red("Could not read package.json"));
694
+ return 1;
695
+ }
696
+ if (!isMonorepo(pkg, cwd)) {
697
+ console.log(chalk3.gray("Not a monorepo \u2014 skipping repo lint checks"));
698
+ return 0;
699
+ }
700
+ console.log(chalk3.green("Repo Lint"));
701
+ const pm = detectPackageManager();
702
+ const workspaces = getPackageManager().listWorkspaces();
703
+ const internalDepCheck = pm === "pnpm" ? {
704
+ check: () => checkWorkspaceProtocol(cwd, workspaces),
705
+ fix: () => fixWorkspaceProtocol(cwd, workspaces),
706
+ label: "Internal deps/devDeps use workspace: protocol"
707
+ } : {
708
+ check: () => checkInternalDepVersions(cwd, workspaces),
709
+ fix: () => fixInternalDepVersions(cwd, workspaces),
710
+ label: "Internal deps/devDeps use correct version ranges"
711
+ };
712
+ const checks = [
713
+ {
714
+ check: () => checkRootPrivate(pkg),
715
+ fix: fixRootPrivate,
716
+ label: "Root package is private"
717
+ },
718
+ {
719
+ check: () => checkNoPublishConfigOnPrivate(pkg),
720
+ fix: fixNoPublishConfigOnPrivate,
721
+ label: "No publishConfig on private root"
722
+ },
723
+ { check: () => checkPackagesFolder(workspaces), label: "All packages are in packages/ folder" },
724
+ {
725
+ check: () => checkWorkspacesFieldPlacement(cwd, pm, workspaces),
726
+ fix: () => fixWorkspacesFieldPlacement(cwd, pm, workspaces),
727
+ label: pm === "pnpm" ? "No workspaces field in package.json (use pnpm-workspace.yaml)" : "Workspaces field only in root package.json"
728
+ },
729
+ {
730
+ check: () => checkWorkspaceGlobCoverage(pkg, cwd, pm, workspaces),
731
+ label: "Workspace globs cover all packages"
732
+ },
733
+ {
734
+ check: () => checkNoPackageManagerInWorkspaces(cwd, workspaces),
735
+ fix: () => fixNoPackageManagerInWorkspaces(cwd, pkg, workspaces),
736
+ label: "No packageManager in workspace packages"
737
+ },
738
+ {
739
+ check: () => checkVoltaOnlyInRoot(cwd, workspaces),
740
+ fix: () => fixVoltaOnlyInRoot(cwd, pkg, workspaces),
741
+ label: "Volta only in root package.json"
742
+ },
743
+ {
744
+ check: () => checkEnginesOnlyInNonTerminal(cwd, workspaces),
745
+ fix: () => fixEnginesOnlyInNonTerminal(cwd, pkg, workspaces),
746
+ label: "Engines only in non-terminal (library) packages"
747
+ },
748
+ {
749
+ check: () => checkVersionsIncludeLts(cwd, workspaces),
750
+ label: "Engine/volta versions include latest LTS"
751
+ },
752
+ {
753
+ check: () => checkVersionConsistency(cwd, pkg, workspaces),
754
+ fix: () => fixVersionConsistency(cwd, pkg, writeRootPackageJson, workspaces),
755
+ label: "Consistent versions across packages"
756
+ },
757
+ internalDepCheck,
758
+ {
759
+ check: () => checkInternalPeerVersions(cwd, workspaces),
760
+ fix: () => fixInternalPeerVersions(cwd, workspaces),
761
+ label: "Internal peerDeps use semver ranges (not workspace: protocol)"
762
+ }
763
+ ];
764
+ const { errors, fixed } = runChecks(checks, cwd, pkg, fix);
765
+ logSummary(errors, fixed);
766
+ if (fix && fixed > 0) {
767
+ runInstall();
768
+ }
769
+ return errors > 0 ? 1 : 0;
770
+ }
771
+ export {
772
+ packageLintMonorepo
773
+ };
774
+ //# sourceMappingURL=package-lint.mjs.map