@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/pm/detectPackageManager.ts","../../../../src/pm/registry.ts","../../../../src/lib/initCwd.ts","../../../../src/lib/latestVersions.ts","../../../../src/lib/runInstall.ts","../../../../src/actions/package-lint-deps.ts","../../../../src/actions/package-lint.ts","../../../../src/xy/common/repo/lintCommand.ts"],"sourcesContent":["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","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n","// Auto-generated — run `yarn update-latest-versions` to refresh\n// Source: nodejs.org/dist/index.json, npm registry\n\nexport const latestVersions = {\n node: '24.14.1',\n nodeLtsCodename: 'Krypton',\n npm: '11.11.0',\n pnpm: '10.33.0',\n yarn: '4.13.0',\n} as const\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 { 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 {\n existsSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\nimport picomatch from 'picomatch'\nimport semver from 'semver'\n\nimport {\n INIT_CWD, latestVersions, runInstall,\n} from '../lib/index.ts'\nimport { detectPackageManager, getPackageManager } from '../pm/index.ts'\nimport {\n checkInternalDepVersions,\n checkInternalPeerVersions,\n checkVersionConsistency,\n checkWorkspaceProtocol,\n fixInternalDepVersions,\n fixInternalPeerVersions,\n fixVersionConsistency,\n fixWorkspaceProtocol,\n} from './package-lint-deps.ts'\n\nexport interface LintResult {\n errors: string[]\n fixable: string[]\n warnings: string[]\n}\n\nfunction emptyResult(): LintResult {\n return {\n errors: [], fixable: [], warnings: [],\n }\n}\n\nfunction readRootPackageJson(cwd: string): Record<string, unknown> {\n const raw = readFileSync(PATH.resolve(cwd, 'package.json'), 'utf8')\n return JSON.parse(raw) as Record<string, unknown>\n}\n\nfunction writeRootPackageJson(cwd: string, pkg: Record<string, unknown>) {\n const path = PATH.resolve(cwd, 'package.json')\n writeFileSync(path, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n}\n\nfunction readPnpmWorkspaceGlobs(cwd: string): string[] | undefined {\n const wsPath = PATH.resolve(cwd, 'pnpm-workspace.yaml')\n if (!existsSync(wsPath)) return undefined\n const raw = readFileSync(wsPath, 'utf8')\n const globs: string[] = []\n let inPackages = false\n for (const line of raw.split('\\n')) {\n if (/^packages\\s*:/.test(line)) {\n inPackages = true\n continue\n }\n if (inPackages) {\n const match = /^\\s+-\\s+['\"]?([^'\"]+)['\"]?\\s*$/.exec(line)\n if (match) {\n globs.push(match[1])\n } else if (/^\\S/.test(line) && line.trim() !== '') {\n break\n }\n }\n }\n return globs.length > 0 ? globs : undefined\n}\n\nfunction isMonorepo(pkg: Record<string, unknown>, cwd: string): boolean {\n const workspaces = pkg.workspaces\n if (Array.isArray(workspaces) && workspaces.length > 0) return true\n return readPnpmWorkspaceGlobs(cwd) !== undefined\n}\n\nfunction checkPackagesFolder(workspaces: { location: string; name: string }[]): LintResult {\n const result = emptyResult()\n\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n if (!location.startsWith('packages/') && !location.startsWith('packages\\\\')) {\n result.errors.push(`${name} (${location}) is not inside a packages/ folder`)\n }\n }\n\n return result\n}\n\nfunction checkRootPrivate(pkg: Record<string, unknown>): LintResult {\n const result = emptyResult()\n\n if (!pkg.private) {\n result.fixable.push('Root package.json must be private to prevent accidental publishing')\n }\n\n return result\n}\n\nfunction fixRootPrivate(cwd: string, pkg: Record<string, unknown>) {\n pkg.private = true\n writeRootPackageJson(cwd, pkg)\n console.log(chalk.green(' ✔ Fixed: set \"private\": true in root package.json'))\n}\n\nfunction checkNoPublishConfigOnPrivate(pkg: Record<string, unknown>): LintResult {\n const result = emptyResult()\n\n if (pkg.private && pkg.publishConfig) {\n result.fixable.push('Root package.json has publishConfig but is private — publishConfig is unnecessary')\n }\n\n return result\n}\n\nfunction fixNoPublishConfigOnPrivate(cwd: string, pkg: Record<string, unknown>) {\n delete pkg.publishConfig\n writeRootPackageJson(cwd, pkg)\n console.log(chalk.green(' ✔ Fixed: removed publishConfig from private root package.json'))\n}\n\nfunction checkNoPackageManagerInWorkspaces(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result = emptyResult()\n\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const raw = readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n if (pkg.packageManager) {\n result.fixable.push(`${name} (${location}) has a packageManager field — only the root should define this`)\n }\n } catch {\n // skip unreadable packages\n }\n }\n\n return result\n}\n\nfunction fixNoPackageManagerInWorkspaces(cwd: string, _pkg: Record<string, unknown>, workspaces: { location: string; name: string }[]) {\n for (const { location } of workspaces) {\n if (location === '.') continue\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const raw = readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n if (pkg.packageManager) {\n delete pkg.packageManager\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n console.log(chalk.green(` ✔ Fixed: removed packageManager from ${location}/package.json`))\n }\n } catch {\n // skip unreadable packages\n }\n }\n}\n\nfunction checkWorkspacesFieldPlacement(\n cwd: string,\n pm: 'pnpm' | 'yarn',\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result = emptyResult()\n\n for (const { location, name } of workspaces) {\n // For pnpm: no package should have workspaces (including root)\n // For yarn: only root should have workspaces\n if (pm === 'pnpm' ? true : location !== '.') {\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n if (pkg.workspaces) {\n const label = location === '.' ? 'Root' : `${name} (${location})`\n const reason = pm === 'pnpm'\n ? 'pnpm uses pnpm-workspace.yaml instead'\n : 'only the root should define workspaces'\n result.fixable.push(`${label} has a workspaces field — ${reason}`)\n }\n } catch {\n // skip unreadable packages\n }\n }\n }\n\n return result\n}\n\nfunction fixWorkspacesFieldPlacement(\n cwd: string,\n pm: 'pnpm' | 'yarn',\n workspaces: { location: string; name: string }[],\n): void {\n for (const { location } of workspaces) {\n if (pm === 'pnpm' ? true : location !== '.') {\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n if (pkg.workspaces) {\n delete pkg.workspaces\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n const label = location === '.' ? 'root' : location\n console.log(chalk.green(` ✔ Fixed: removed workspaces from ${label}/package.json`))\n }\n } catch {\n // skip unreadable packages\n }\n }\n }\n}\n\nfunction checkWorkspaceGlobCoverage(\n pkg: Record<string, unknown>,\n cwd: string,\n pm: 'pnpm' | 'yarn',\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result = emptyResult()\n\n const globs = pm === 'pnpm'\n ? readPnpmWorkspaceGlobs(cwd) ?? []\n : (Array.isArray(pkg.workspaces) ? pkg.workspaces as string[] : [])\n\n if (globs.length === 0) {\n const source = pm === 'pnpm' ? 'pnpm-workspace.yaml' : 'root package.json workspaces'\n result.errors.push(`No workspace globs found in ${source}`)\n return result\n }\n\n const matchers = globs.map(glob => picomatch(glob))\n const isMatch = (location: string) => matchers.some(m => m(location))\n\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n if (!isMatch(location)) {\n const source = pm === 'pnpm' ? 'pnpm-workspace.yaml' : 'root package.json workspaces'\n result.errors.push(`${name} (${location}) is not matched by any glob in ${source}`)\n }\n }\n\n return result\n}\n\nfunction logResults(label: string, result: LintResult, fix: boolean): { errors: number; fixed: number } {\n let errors = 0\n let fixed = 0\n\n for (const error of result.errors) {\n console.log(chalk.red(` ✗ ${error}`))\n errors++\n }\n for (const fixable of result.fixable) {\n if (fix) {\n fixed++\n } else {\n console.log(chalk.red(` ✗ ${fixable} (fixable)`))\n errors++\n }\n }\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` ⚠ ${warning}`))\n }\n if (errors === 0 && fixed === 0 && result.warnings.length === 0) {\n console.log(chalk.green(` ✓ ${label}`))\n }\n\n return { errors, fixed }\n}\n\ninterface CheckEntry {\n check: () => LintResult\n fix?: (cwd: string, pkg: Record<string, unknown>) => void\n label: string\n}\n\nfunction runChecks(entries: CheckEntry[], cwd: string, pkg: Record<string, unknown>, fix: boolean): { errors: number; fixed: number } {\n let totalErrors = 0\n let totalFixed = 0\n\n for (const entry of entries) {\n const result = entry.check()\n const log = logResults(entry.label, result, fix)\n if (fix && entry.fix && result.fixable.length > 0) {\n entry.fix(cwd, pkg)\n }\n totalErrors += log.errors\n totalFixed += log.fixed\n }\n\n return { errors: totalErrors, fixed: totalFixed }\n}\n\nfunction checkVoltaOnlyInRoot(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result = emptyResult()\n\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n if (pkg.volta) {\n result.fixable.push(`${name} (${location}) has a volta field — only the root should define this`)\n }\n } catch {\n // skip unreadable packages\n }\n }\n\n return result\n}\n\nfunction fixVoltaOnlyInRoot(cwd: string, _pkg: Record<string, unknown>, workspaces: { location: string; name: string }[]) {\n for (const { location } of workspaces) {\n if (location === '.') continue\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const raw = readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n if (pkg.volta) {\n delete pkg.volta\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n console.log(chalk.green(` ✔ Fixed: removed volta from ${location}/package.json`))\n }\n } catch {\n // skip unreadable packages\n }\n }\n}\n\nfunction isTerminalPackage(pkg: Record<string, unknown>): boolean {\n return pkg.private === true\n}\n\nfunction checkEnginesOnlyInNonTerminal(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result = emptyResult()\n\n // Check root (always terminal/private) — should not have engines\n const rootPkg = JSON.parse(readFileSync(PATH.resolve(cwd, 'package.json'), 'utf8')) as Record<string, unknown>\n if (rootPkg.engines) {\n result.fixable.push('Root package.json has engines — terminal packages should not declare engines (use volta instead)')\n }\n\n for (const { location, name } of workspaces) {\n if (location === '.') continue\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n if (isTerminalPackage(pkg) && pkg.engines) {\n result.fixable.push(`${name} (${location}) is terminal (private) but has engines — terminal packages should not declare engines`)\n }\n if (!isTerminalPackage(pkg) && !pkg.engines) {\n result.fixable.push(`${name} (${location}) is a library but has no engines field`)\n }\n } catch {\n // skip unreadable packages\n }\n }\n\n return result\n}\n\nfunction fixEnginesOnlyInNonTerminal(cwd: string, _pkg: Record<string, unknown>, workspaces: { location: string; name: string }[]) {\n // Remove engines from root\n const rootPath = PATH.resolve(cwd, 'package.json')\n const rootRaw = readFileSync(rootPath, 'utf8')\n const rootPkg = JSON.parse(rootRaw) as Record<string, unknown>\n if (rootPkg.engines) {\n delete rootPkg.engines\n writeFileSync(rootPath, `${JSON.stringify(rootPkg, null, 2)}\\n`, 'utf8')\n console.log(chalk.green(' ✔ Fixed: removed engines from root package.json'))\n }\n\n // Remove engines from terminal workspace packages, add engines to libraries missing them\n const enginesTemplate = resolveEnginesTemplate(cwd, workspaces)\n for (const { location } of workspaces) {\n if (location === '.') continue\n const pkgPath = PATH.resolve(cwd, location, 'package.json')\n try {\n const raw = readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n if (isTerminalPackage(pkg) && pkg.engines) {\n delete pkg.engines\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n console.log(chalk.green(` ✔ Fixed: removed engines from ${location}/package.json`))\n }\n if (!isTerminalPackage(pkg) && !pkg.engines && enginesTemplate) {\n pkg.engines = enginesTemplate\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n console.log(chalk.green(` ✔ Fixed: added engines to ${location}/package.json`))\n }\n } catch {\n // skip unreadable packages\n }\n }\n}\n\nfunction resolveEnginesTemplate(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): Record<string, string> | undefined {\n // Use engines from the first sibling library package that has one\n for (const { location } of workspaces) {\n if (location === '.') continue\n try {\n const pkg = JSON.parse(readFileSync(PATH.resolve(cwd, location, 'package.json'), 'utf8')) as Record<string, unknown>\n if (!isTerminalPackage(pkg) && pkg.engines) {\n return pkg.engines as Record<string, string>\n }\n } catch {\n // skip\n }\n }\n return undefined\n}\n\nfunction checkVersionsIncludeLts(\n cwd: string,\n workspaces: { location: string; name: string }[],\n): LintResult {\n const result = emptyResult()\n\n const toolVersions: Record<string, string> = {\n node: latestVersions.node,\n npm: latestVersions.npm,\n pnpm: latestVersions.pnpm,\n yarn: latestVersions.yarn,\n }\n\n // Check engines in all non-terminal packages\n for (const { location, name } of workspaces) {\n const pkgPath = location === '.'\n ? PATH.resolve(cwd, 'package.json')\n : PATH.resolve(cwd, location, 'package.json')\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n const label = location === '.' ? 'root' : `${name} (${location})`\n\n // Check engines ranges\n const engines = pkg.engines as Record<string, string> | undefined\n if (engines) {\n for (const [tool, range] of Object.entries(engines)) {\n const latest = toolVersions[tool]\n if (latest && !semver.satisfies(latest, range)) {\n result.errors.push(\n `${label} engines.${tool} \"${range}\" does not include latest ${tool === 'node' ? 'LTS ' : ''}version ${latest}`,\n )\n }\n }\n }\n\n // Check volta pins\n const volta = pkg.volta as Record<string, string> | undefined\n if (volta) {\n for (const [tool, pinnedVersion] of Object.entries(volta)) {\n const latest = toolVersions[tool]\n if (latest && semver.lt(pinnedVersion, latest)) {\n result.warnings.push(\n `${label} volta.${tool} \"${pinnedVersion}\" is older than latest ${tool === 'node' ? 'LTS ' : ''}version ${latest}`,\n )\n }\n }\n }\n } catch {\n // skip unreadable packages\n }\n }\n\n return result\n}\n\nfunction logSummary(errors: number, fixed: number) {\n if (fixed > 0) {\n console.log(chalk.green(`\\n Fixed ${fixed} issue(s)`))\n }\n if (errors > 0) {\n console.log(chalk.red(`\\n ${errors} error(s) found`))\n } else if (fixed === 0) {\n console.log(chalk.green('\\n All checks passed'))\n }\n}\n\nexport function packageLintMonorepo(fix = false): number {\n const cwd = INIT_CWD()\n\n let pkg: Record<string, unknown>\n try {\n pkg = readRootPackageJson(cwd)\n } catch {\n console.error(chalk.red('Could not read package.json'))\n return 1\n }\n\n if (!isMonorepo(pkg, cwd)) {\n console.log(chalk.gray('Not a monorepo — skipping repo lint checks'))\n return 0\n }\n\n console.log(chalk.green('Repo Lint'))\n\n const pm = detectPackageManager()\n const workspaces = getPackageManager().listWorkspaces()\n\n const internalDepCheck: CheckEntry = pm === 'pnpm'\n ? {\n check: () => checkWorkspaceProtocol(cwd, workspaces),\n fix: () => fixWorkspaceProtocol(cwd, workspaces),\n label: 'Internal deps/devDeps use workspace: protocol',\n }\n : {\n check: () => checkInternalDepVersions(cwd, workspaces),\n fix: () => fixInternalDepVersions(cwd, workspaces),\n label: 'Internal deps/devDeps use correct version ranges',\n }\n\n const checks: CheckEntry[] = [\n {\n check: () => checkRootPrivate(pkg), fix: fixRootPrivate, label: 'Root package is private',\n },\n {\n check: () => checkNoPublishConfigOnPrivate(pkg), fix: fixNoPublishConfigOnPrivate, label: 'No publishConfig on private root',\n },\n { check: () => checkPackagesFolder(workspaces), label: 'All packages are in packages/ folder' },\n {\n check: () => checkWorkspacesFieldPlacement(cwd, pm, workspaces),\n fix: () => fixWorkspacesFieldPlacement(cwd, pm, workspaces),\n label: pm === 'pnpm' ? 'No workspaces field in package.json (use pnpm-workspace.yaml)' : 'Workspaces field only in root package.json',\n },\n {\n check: () => checkWorkspaceGlobCoverage(pkg, cwd, pm, workspaces),\n label: 'Workspace globs cover all packages',\n },\n {\n check: () => checkNoPackageManagerInWorkspaces(cwd, workspaces),\n fix: () => fixNoPackageManagerInWorkspaces(cwd, pkg, workspaces),\n label: 'No packageManager in workspace packages',\n },\n {\n check: () => checkVoltaOnlyInRoot(cwd, workspaces),\n fix: () => fixVoltaOnlyInRoot(cwd, pkg, workspaces),\n label: 'Volta only in root package.json',\n },\n {\n check: () => checkEnginesOnlyInNonTerminal(cwd, workspaces),\n fix: () => fixEnginesOnlyInNonTerminal(cwd, pkg, workspaces),\n label: 'Engines only in non-terminal (library) packages',\n },\n {\n check: () => checkVersionsIncludeLts(cwd, workspaces),\n label: 'Engine/volta versions include latest LTS',\n },\n {\n check: () => checkVersionConsistency(cwd, pkg, workspaces),\n fix: () => fixVersionConsistency(cwd, pkg, writeRootPackageJson, workspaces),\n label: 'Consistent versions across packages',\n },\n internalDepCheck,\n {\n check: () => checkInternalPeerVersions(cwd, workspaces),\n fix: () => fixInternalPeerVersions(cwd, workspaces),\n label: 'Internal peerDeps use semver ranges (not workspace: protocol)',\n },\n ]\n\n const { errors, fixed } = runChecks(checks, cwd, pkg, fix)\n logSummary(errors, fixed)\n\n if (fix && fixed > 0) {\n runInstall()\n }\n\n return errors > 0 ? 1 : 0\n}\n","import type { CommandModule } from 'yargs'\n\nimport { packageLintMonorepo } from '../../../actions/index.ts'\n\nexport const lintCommand: CommandModule = {\n command: 'lint',\n describe: 'Check monorepo package structure',\n builder: (yargs) => {\n return yargs.option('fix', {\n default: false,\n description: 'Auto-fix fixable issues',\n type: 'boolean',\n })\n },\n handler: (argv) => {\n if (argv.verbose) console.log('Repo Lint')\n process.exitCode = packageLintMonorepo(!!argv.fix)\n },\n}\n"],"mappings":"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","names":["chalk","writeRootPackageJson","chalk","expected","existsSync","readFileSync","writeFileSync","PATH","chalk","semver","readFileSync","PATH","writeFileSync","existsSync","chalk","semver"]}
@@ -0,0 +1,163 @@
1
+ // src/lib/checkResult.ts
2
+ import chalk from "chalk";
3
+ var checkResult = (name, result, level = "error", exitOnFail = false) => {
4
+ if (result) {
5
+ const exiting = exitOnFail ? "[Exiting Process]" : "[Continuing]";
6
+ const chalkFunc = level === "error" ? chalk.red : chalk.yellow;
7
+ console[level](chalkFunc(`${name} had ${result} failures ${exiting}`));
8
+ if (exitOnFail) {
9
+ process.exit(result);
10
+ }
11
+ }
12
+ };
13
+
14
+ // src/pm/detectPackageManager.ts
15
+ import { existsSync } from "fs";
16
+ function detectPackageManager() {
17
+ if (existsSync("pnpm-lock.yaml") || existsSync("pnpm-workspace.yaml")) return "pnpm";
18
+ return "yarn";
19
+ }
20
+
21
+ // src/pm/registry.ts
22
+ var implementations = /* @__PURE__ */ new Map();
23
+ function getPackageManager(name) {
24
+ const pmName = name ?? detectPackageManager();
25
+ const pm = implementations.get(pmName);
26
+ if (!pm) {
27
+ throw new Error(
28
+ `No package manager implementation registered for "${pmName}". Ensure registerPackageManager() has been called before getPackageManager().`
29
+ );
30
+ }
31
+ return pm;
32
+ }
33
+
34
+ // src/lib/processEx.ts
35
+ import chalk2 from "chalk";
36
+
37
+ // src/lib/withError.ts
38
+ var withError = (ex, closure, predicate = (ex2) => !!ex2.name && !!ex2.message) => {
39
+ return predicate(ex) ? closure(ex) : void 0;
40
+ };
41
+
42
+ // src/lib/withErrnoException.ts
43
+ var withErrnoException = (ex, closure) => {
44
+ return withError(ex, closure, (ex2) => ex2.errno !== void 0);
45
+ };
46
+
47
+ // src/lib/processEx.ts
48
+ var processEx = (ex) => {
49
+ const error = typeof ex === "string" ? new Error(ex) : ex;
50
+ const exitCode = withErrnoException(error, (error2) => {
51
+ if (error2.code === "ENOENT") {
52
+ console.error(chalk2.red(`'${error2.path}' not found.`));
53
+ } else {
54
+ console.error(chalk2.red(`Errno: ${error2.code}`));
55
+ }
56
+ return error2.errno ?? -1;
57
+ }) ?? withError(error, (error2) => {
58
+ console.error(chalk2.red(`${error2.name}: ${error2.message}`));
59
+ return -1;
60
+ }) ?? (() => {
61
+ console.error(chalk2.red(`Unexpected Error: ${JSON.stringify(ex, null, 2)}`));
62
+ return -1;
63
+ })();
64
+ process.exit(process.exitCode ?? exitCode);
65
+ };
66
+
67
+ // src/lib/safeExit.ts
68
+ var safeExit = (func, exitOnFail = true) => {
69
+ try {
70
+ const result = func();
71
+ if (result && exitOnFail) {
72
+ process.exit(result);
73
+ }
74
+ return result;
75
+ } catch (ex) {
76
+ return processEx(ex);
77
+ }
78
+ };
79
+
80
+ // src/lib/initCwd.ts
81
+ function INIT_CWD() {
82
+ return process.env.INIT_CWD ?? process.cwd();
83
+ }
84
+
85
+ // src/lib/packageName.ts
86
+ import { readFileSync } from "fs";
87
+ import path from "path";
88
+ function packageName() {
89
+ if (process.env.npm_package_name) {
90
+ return process.env.npm_package_name;
91
+ }
92
+ try {
93
+ const pkgPath = path.join(INIT_CWD(), "package.json");
94
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
95
+ return pkg.name;
96
+ } catch {
97
+ return void 0;
98
+ }
99
+ }
100
+
101
+ // src/lib/runSteps.ts
102
+ import { spawnSync } from "child_process";
103
+ import { existsSync as existsSync2 } from "fs";
104
+ import chalk3 from "chalk";
105
+ var runSteps = (name, steps, exitOnFail = true, messages) => {
106
+ return safeExit(() => {
107
+ const pkgName = packageName();
108
+ console.log(chalk3.green(`${name} [${pkgName}]`));
109
+ let totalStatus = 0;
110
+ for (const [i, [command, args, config]] of steps.entries()) {
111
+ if (messages?.[i]) {
112
+ console.log(chalk3.gray(messages?.[i]));
113
+ }
114
+ const argList = Array.isArray(args) ? args : args.split(" ");
115
+ if (command === "node" && !existsSync2(argList[0])) {
116
+ throw new Error(`File not found [${argList[0]}]`);
117
+ }
118
+ const status = spawnSync(command, Array.isArray(args) ? args : args.split(" "), {
119
+ ...config,
120
+ encoding: "utf8",
121
+ env: { FORCE_COLOR: "3", ...process.env },
122
+ shell: true,
123
+ stdio: "inherit"
124
+ }).status ?? 0;
125
+ checkResult(name, status, "error", exitOnFail);
126
+ totalStatus += status ?? 0;
127
+ }
128
+ return totalStatus;
129
+ }, !!exitOnFail);
130
+ };
131
+
132
+ // src/actions/retest.ts
133
+ var retest = ({ target } = {}) => {
134
+ const pm = getPackageManager();
135
+ if (target && pm.findWorkspace(target)) {
136
+ return runSteps(`Re-Test [${target}]`, [
137
+ pm.runInWorkspace(target, "vitest", ["--clearCache"]),
138
+ pm.runInWorkspace(target, "vitest", ["."])
139
+ ]);
140
+ }
141
+ const path2 = target ?? ".";
142
+ return runSteps("Re-Test", [
143
+ ["vitest", ["--clearCache"]],
144
+ ["vitest", [path2]]
145
+ ]);
146
+ };
147
+
148
+ // src/xy/common/retestCommand.ts
149
+ var retestCommand = {
150
+ command: "retest [target]",
151
+ describe: "Re-Test - Run Vitest Tests with cleaned cache",
152
+ builder: (yargs) => {
153
+ return yargs.positional("target", { describe: "Package name or file/folder path to test" });
154
+ },
155
+ handler: (argv) => {
156
+ if (argv.verbose) console.log(`Re-Testing: ${argv.target ?? "all"}`);
157
+ process.exitCode = retest({ target: argv.target });
158
+ }
159
+ };
160
+ export {
161
+ retestCommand
162
+ };
163
+ //# sourceMappingURL=retestCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/checkResult.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/initCwd.ts","../../../src/lib/packageName.ts","../../../src/lib/runSteps.ts","../../../src/actions/retest.ts","../../../src/xy/common/retestCommand.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 { 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","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\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'\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 { runSteps } from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\n\nexport interface RetestParams {\n target?: string\n}\n\nexport const retest = ({ target }: RetestParams = {}) => {\n const pm = getPackageManager()\n if (target && pm.findWorkspace(target)) {\n return runSteps(`Re-Test [${target}]`, [\n pm.runInWorkspace(target, 'vitest', ['--clearCache']),\n pm.runInWorkspace(target, 'vitest', ['.']),\n ])\n }\n const path = target ?? '.'\n return runSteps('Re-Test', [\n ['vitest', ['--clearCache']],\n ['vitest', [path]],\n ])\n}\n","import type { CommandModule } from 'yargs'\n\nimport { retest } from '../../actions/index.ts'\n\nexport const retestCommand: CommandModule = {\n command: 'retest [target]',\n describe: 'Re-Test - Run Vitest Tests with cleaned cache',\n builder: (yargs) => {\n return yargs.positional('target', { describe: 'Package name or file/folder path to test' })\n },\n handler: (argv) => {\n if (argv.verbose) console.log(`Re-Testing: ${(argv.target as string | undefined) ?? 'all'}`)\n process.exitCode = retest({ target: argv.target as string })\n },\n}\n"],"mappings":"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","names":["chalk","ex","ex","error","chalk","existsSync","chalk","chalk","existsSync","path"]}
@@ -0,0 +1,157 @@
1
+ // src/lib/checkResult.ts
2
+ import chalk from "chalk";
3
+ var checkResult = (name, result, level = "error", exitOnFail = false) => {
4
+ if (result) {
5
+ const exiting = exitOnFail ? "[Exiting Process]" : "[Continuing]";
6
+ const chalkFunc = level === "error" ? chalk.red : chalk.yellow;
7
+ console[level](chalkFunc(`${name} had ${result} failures ${exiting}`));
8
+ if (exitOnFail) {
9
+ process.exit(result);
10
+ }
11
+ }
12
+ };
13
+
14
+ // src/pm/detectPackageManager.ts
15
+ import { existsSync } from "fs";
16
+ function detectPackageManager() {
17
+ if (existsSync("pnpm-lock.yaml") || existsSync("pnpm-workspace.yaml")) return "pnpm";
18
+ return "yarn";
19
+ }
20
+
21
+ // src/pm/registry.ts
22
+ var implementations = /* @__PURE__ */ new Map();
23
+ function getPackageManager(name) {
24
+ const pmName = name ?? detectPackageManager();
25
+ const pm = implementations.get(pmName);
26
+ if (!pm) {
27
+ throw new Error(
28
+ `No package manager implementation registered for "${pmName}". Ensure registerPackageManager() has been called before getPackageManager().`
29
+ );
30
+ }
31
+ return pm;
32
+ }
33
+
34
+ // src/lib/processEx.ts
35
+ import chalk2 from "chalk";
36
+
37
+ // src/lib/withError.ts
38
+ var withError = (ex, closure, predicate = (ex2) => !!ex2.name && !!ex2.message) => {
39
+ return predicate(ex) ? closure(ex) : void 0;
40
+ };
41
+
42
+ // src/lib/withErrnoException.ts
43
+ var withErrnoException = (ex, closure) => {
44
+ return withError(ex, closure, (ex2) => ex2.errno !== void 0);
45
+ };
46
+
47
+ // src/lib/processEx.ts
48
+ var processEx = (ex) => {
49
+ const error = typeof ex === "string" ? new Error(ex) : ex;
50
+ const exitCode = withErrnoException(error, (error2) => {
51
+ if (error2.code === "ENOENT") {
52
+ console.error(chalk2.red(`'${error2.path}' not found.`));
53
+ } else {
54
+ console.error(chalk2.red(`Errno: ${error2.code}`));
55
+ }
56
+ return error2.errno ?? -1;
57
+ }) ?? withError(error, (error2) => {
58
+ console.error(chalk2.red(`${error2.name}: ${error2.message}`));
59
+ return -1;
60
+ }) ?? (() => {
61
+ console.error(chalk2.red(`Unexpected Error: ${JSON.stringify(ex, null, 2)}`));
62
+ return -1;
63
+ })();
64
+ process.exit(process.exitCode ?? exitCode);
65
+ };
66
+
67
+ // src/lib/safeExit.ts
68
+ var safeExit = (func, exitOnFail = true) => {
69
+ try {
70
+ const result = func();
71
+ if (result && exitOnFail) {
72
+ process.exit(result);
73
+ }
74
+ return result;
75
+ } catch (ex) {
76
+ return processEx(ex);
77
+ }
78
+ };
79
+
80
+ // src/lib/initCwd.ts
81
+ function INIT_CWD() {
82
+ return process.env.INIT_CWD ?? process.cwd();
83
+ }
84
+
85
+ // src/lib/packageName.ts
86
+ import { readFileSync } from "fs";
87
+ import path from "path";
88
+ function packageName() {
89
+ if (process.env.npm_package_name) {
90
+ return process.env.npm_package_name;
91
+ }
92
+ try {
93
+ const pkgPath = path.join(INIT_CWD(), "package.json");
94
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
95
+ return pkg.name;
96
+ } catch {
97
+ return void 0;
98
+ }
99
+ }
100
+
101
+ // src/lib/runSteps.ts
102
+ import { spawnSync } from "child_process";
103
+ import { existsSync as existsSync2 } from "fs";
104
+ import chalk3 from "chalk";
105
+ var runSteps = (name, steps, exitOnFail = true, messages) => {
106
+ return safeExit(() => {
107
+ const pkgName = packageName();
108
+ console.log(chalk3.green(`${name} [${pkgName}]`));
109
+ let totalStatus = 0;
110
+ for (const [i, [command, args, config]] of steps.entries()) {
111
+ if (messages?.[i]) {
112
+ console.log(chalk3.gray(messages?.[i]));
113
+ }
114
+ const argList = Array.isArray(args) ? args : args.split(" ");
115
+ if (command === "node" && !existsSync2(argList[0])) {
116
+ throw new Error(`File not found [${argList[0]}]`);
117
+ }
118
+ const status = spawnSync(command, Array.isArray(args) ? args : args.split(" "), {
119
+ ...config,
120
+ encoding: "utf8",
121
+ env: { FORCE_COLOR: "3", ...process.env },
122
+ shell: true,
123
+ stdio: "inherit"
124
+ }).status ?? 0;
125
+ checkResult(name, status, "error", exitOnFail);
126
+ totalStatus += status ?? 0;
127
+ }
128
+ return totalStatus;
129
+ }, !!exitOnFail);
130
+ };
131
+
132
+ // src/actions/test.ts
133
+ var test = ({ target } = {}) => {
134
+ const pm = getPackageManager();
135
+ if (target && pm.findWorkspace(target)) {
136
+ return runSteps(`Test [${target}]`, [pm.runInWorkspace(target, "vitest", ["."])]);
137
+ }
138
+ const path2 = target ?? ".";
139
+ return runSteps("Test", [["vitest", [path2]]]);
140
+ };
141
+
142
+ // src/xy/common/testCommand.ts
143
+ var testCommand = {
144
+ command: "test [target]",
145
+ describe: "Test - Run Vitest Tests",
146
+ builder: (yargs) => {
147
+ return yargs.positional("target", { describe: "Package name or file/folder path to test" });
148
+ },
149
+ handler: (argv) => {
150
+ if (argv.verbose) console.log(`Testing: ${argv.target ?? "all"}`);
151
+ process.exitCode = test({ target: argv.target });
152
+ }
153
+ };
154
+ export {
155
+ testCommand
156
+ };
157
+ //# sourceMappingURL=testCommand.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/checkResult.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/initCwd.ts","../../../src/lib/packageName.ts","../../../src/lib/runSteps.ts","../../../src/actions/test.ts","../../../src/xy/common/testCommand.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 { 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","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\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'\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 { runSteps } from '../lib/index.ts'\nimport { getPackageManager } from '../pm/index.ts'\n\nexport interface TestParams {\n target?: string\n}\n\nexport const test = ({ target }: TestParams = {}) => {\n const pm = getPackageManager()\n if (target && pm.findWorkspace(target)) {\n return runSteps(`Test [${target}]`, [pm.runInWorkspace(target, 'vitest', ['.'])])\n }\n const path = target ?? '.'\n return runSteps('Test', [['vitest', [path]]])\n}\n","import type { CommandModule } from 'yargs'\n\nimport { test } from '../../actions/index.ts'\n\nexport const testCommand: CommandModule = {\n command: 'test [target]',\n describe: 'Test - Run Vitest Tests',\n builder: (yargs) => {\n return yargs.positional('target', { describe: 'Package name or file/folder path to test' })\n },\n handler: (argv) => {\n if (argv.verbose) console.log(`Testing: ${(argv.target as string | undefined) ?? 'all'}`)\n process.exitCode = test({ target: argv.target as string })\n },\n}\n"],"mappings":"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","names":["chalk","ex","ex","error","chalk","existsSync","chalk","chalk","existsSync","path"]}