@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/actions/package/clean-outputs.ts","../../../src/lib/deleteGlob.ts","../../../src/lib/initCwd.ts","../../../src/lib/loadConfig.ts","../../../src/lib/packageName.ts","../../../src/actions/package/clean-typescript.ts","../../../src/actions/package/clean.ts","../../../src/actions/package/compile/compile.ts","../../../src/actions/package/compile/packageCompileTsup.ts","../../../src/actions/package/compile/inputs.ts","../../../src/actions/package/compile/buildEntries.ts","../../../src/actions/package/compile/deepMerge.ts","../../../src/actions/package/compile/packageCompileTsc.ts","../../../src/actions/package/compile/getCompilerOptions.ts","../../../src/actions/package/compile/packageCompileTscTypes.ts","../../../src/actions/package/compile/XyConfig.ts","../../../src/actions/package/copy-assets.ts","../../../src/actions/package/cycle.ts","../../../src/actions/package/gen-docs.ts","../../../src/actions/package/lint.ts","../../../src/actions/package/publint.ts","../../../src/actions/package/recompile.ts"],"sourcesContent":["import path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport {\n deleteGlob, INIT_CWD, packageName,\n} from '../../lib/index.ts'\n\nexport const packageCleanOutputs = () => {\n const pkg = INIT_CWD()\n const pkgName = packageName()\n const folders: string[] = [path.join(pkg, 'dist'), path.join(pkg, 'build'), path.join(pkg, 'docs')]\n console.log(chalk.green(`Cleaning Outputs [${pkgName}]`))\n\n for (const folder of folders) {\n deleteGlob(folder)\n }\n\n return 0\n}\n","import fs from 'node:fs'\n\nimport { glob } from 'glob'\n\nexport const deleteGlob = (globPath: string) => {\n // Find all files matching the glob pattern\n const files = glob.sync(globPath)\n\n // Remove each file or directory\n for (const file of files) {\n fs.rmSync(file, { recursive: true, force: true })\n }\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n","import chalk from 'chalk'\nimport { cosmiconfig } from 'cosmiconfig'\nimport { TypeScriptLoader } from 'cosmiconfig-typescript-loader'\nimport deepmerge from 'deepmerge'\n\nlet config: Record<string, unknown>\nlet rootConfigPath: string | undefined\n\nconst workspaceConfigCache = new Map<string, Record<string, unknown>>()\nconst deprecationWarned = new Set<string>()\n\nfunction createExplorer() {\n return cosmiconfig('xy', { cache: true, loaders: { '.ts': TypeScriptLoader() } })\n}\n\nexport const loadConfig = async <T extends object>(params?: T): Promise<T> => {\n if (config === undefined) {\n const cosmicConfigResult = await createExplorer().search()\n config = (cosmicConfigResult?.config ?? {}) as Record<string, unknown>\n rootConfigPath = cosmicConfigResult?.filepath\n const configFilePath = cosmicConfigResult?.filepath\n if (configFilePath !== undefined) {\n console.log(chalk.green(`Loaded config from ${configFilePath}`))\n if (config.verbose) {\n console.log(chalk.gray(`${JSON.stringify(config, null, 2)}`))\n }\n }\n }\n return deepmerge(config, params ?? {}) as T\n}\n\n/**\n * Loads the xy.config from a specific workspace directory.\n * Returns an empty object if the workspace has no config or if\n * the found config is the root config (avoids double-applying).\n */\nasync function loadWorkspaceConfig(workspaceDir: string): Promise<Record<string, unknown>> {\n const cached = workspaceConfigCache.get(workspaceDir)\n if (cached !== undefined) return cached\n\n const result = await createExplorer().search(workspaceDir)\n\n // If no config found or it's the root config, no workspace override\n if (!result || result.filepath === rootConfigPath) {\n workspaceConfigCache.set(workspaceDir, {})\n return {}\n }\n\n const wsConfig = (result.config ?? {}) as Record<string, unknown>\n workspaceConfigCache.set(workspaceDir, wsConfig)\n return wsConfig\n}\n\n/** Deprecated top-level fields that should be under `commands`. */\nconst DEPRECATED_COMMAND_FIELDS = new Set(['deplint', 'publint'])\n\n/**\n * Resolves a command's config field from a config object.\n * Prefers `commands.[name]` over top-level `[name]`.\n * Warns once per config file when a deprecated top-level field is used.\n */\nfunction resolveCommandField(\n cfg: Record<string, unknown>,\n commandName: string,\n configPath?: string,\n): Record<string, unknown> {\n const commands = cfg.commands as Record<string, unknown> | undefined\n const fromCommands = commands?.[commandName]\n const fromTopLevel = cfg[commandName]\n\n if (fromCommands !== undefined && typeof fromCommands === 'object') {\n return fromCommands as Record<string, unknown>\n }\n\n if (fromTopLevel !== undefined && typeof fromTopLevel === 'object'\n && DEPRECATED_COMMAND_FIELDS.has(commandName)) {\n const key = `${configPath ?? 'unknown'}:${commandName}`\n if (!deprecationWarned.has(key)) {\n deprecationWarned.add(key)\n console.warn(chalk.yellow(\n `[xy] Deprecated: top-level \"${commandName}\" in ${configPath ?? 'xy.config'} — move to \"commands.${commandName}\"`,\n ))\n }\n return fromTopLevel as Record<string, unknown>\n }\n\n return {}\n}\n\n/**\n * Loads a command-specific config merged from root and workspace levels.\n * The root config provides defaults; the workspace config extends/overrides.\n * Arrays (e.g. `exclude`) are unioned and maps (e.g. `packages`) are merged\n * via deepmerge, with workspace entries overriding root entries for the same key.\n */\nexport async function loadWorkspaceCommandConfig<C>(\n workspaceDir: string,\n commandName: string,\n): Promise<C> {\n // Ensure root config is loaded\n const root = await loadConfig()\n const rootCmd = resolveCommandField(root as Record<string, unknown>, commandName, rootConfigPath)\n\n const wsConfig = await loadWorkspaceConfig(workspaceDir)\n const wsConfigPath = workspaceConfigCache.has(workspaceDir) ? workspaceDir : undefined\n const wsCmd = resolveCommandField(wsConfig, commandName, wsConfigPath)\n\n return deepmerge(rootCmd, wsCmd) as C\n}\n","import { readFileSync } from 'node:fs'\nimport path from 'node:path'\n\nimport { INIT_CWD } from './initCwd.ts'\n\nexport function packageName(): string | undefined {\n if (process.env.npm_package_name) {\n return process.env.npm_package_name\n }\n try {\n const pkgPath = path.join(INIT_CWD(), 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, unknown>\n return pkg.name as string | undefined\n } catch {\n return undefined\n }\n}\n","import path from 'node:path'\n\nimport chalk from 'chalk'\n\nimport {\n deleteGlob, INIT_CWD, packageName,\n} from '../../lib/index.ts'\n\nexport const packageCleanTypescript = () => {\n const pkg = INIT_CWD()\n const pkgName = packageName()\n console.log(chalk.green(`Cleaning Typescript [${pkgName}]`))\n const files: string[] = [path.join(pkg, '*.tsbuildinfo'), path.join(pkg, '.tsconfig.*'), path.join(pkg, '.eslintcache')]\n\n for (const file of files) {\n deleteGlob(file)\n }\n\n return 0\n}\n","import { packageCleanOutputs } from './clean-outputs.ts'\nimport { packageCleanTypescript } from './clean-typescript.ts'\n\nexport const packageClean = () => {\n return [packageCleanOutputs(), packageCleanTypescript()].reduce((prev, value) => prev + value, 0)\n}\n","import { cwd } from 'node:process'\n\nimport chalk from 'chalk'\n\nimport { loadConfig } from '../../../lib/index.ts'\nimport { packageCompileTsup } from './packageCompileTsup.ts'\nimport type { XyConfig } from './XyConfig.ts'\n\nexport const packageCompile = async (inConfig: XyConfig = {}): Promise<number> => {\n const pkg = cwd()\n console.log(chalk.green(`Compiling ${pkg}`))\n const config = await loadConfig(inConfig)\n\n return await packageCompileTsup(config)\n}\n","import chalk from 'chalk'\nimport type { Loader } from 'esbuild'\nimport type { Options } from 'tsup'\nimport { build, defineConfig } from 'tsup'\n\nimport { buildEntries } from './buildEntries.ts'\nimport { deepMergeObjects } from './deepMerge.ts'\nimport { packageCompileTsc } from './packageCompileTsc.ts'\nimport { packageCompileTscTypes } from './packageCompileTscTypes.ts'\nimport type { XyTsupConfig } from './XyConfig.ts'\n\nconst compileFolder = async (\n srcDir: string,\n entries: string[],\n buildDir: string,\n options?: Options,\n bundleTypes = false,\n verbose?: boolean,\n): Promise<number> => {\n const outDir = options?.outDir ?? 'dist'\n\n if (verbose) {\n console.log(`compileFolder [${srcDir}, ${options?.outDir}]`)\n }\n\n if (entries.length === 0) {\n console.warn(chalk.yellow(`No entries found in ${srcDir} to compile`))\n return 0\n }\n\n if (verbose) {\n console.log(chalk.gray(`buildDir [${buildDir}]`))\n }\n\n const validationResult = packageCompileTsc(options?.platform ?? 'neutral', entries, srcDir, buildDir, undefined, verbose)\n if (validationResult !== 0) {\n console.error(chalk.red(`Compile:Validation had ${validationResult} errors`))\n return validationResult\n }\n\n const optionsParams: Options = tsupOptions([{\n bundle: true,\n cjsInterop: true,\n clean: false,\n dts: false,\n format: ['esm'],\n outDir,\n silent: true,\n sourcemap: true,\n splitting: false,\n tsconfig: 'tsconfig.json',\n ...options,\n entry: entries.map(entry => `${srcDir}/${entry}`),\n }])\n\n const optionsResult = defineConfig(optionsParams)\n\n const optionsList = (\n await Promise.all(\n (Array.isArray(optionsResult) ? optionsResult : [optionsResult]).flatMap<Promise<Options[]>>(async (options) => {\n const result = typeof options === 'function' ? await options({}) : [options]\n return Array.isArray(result) ? result : [result]\n }),\n )\n ).flat()\n\n if (verbose) {\n console.log(chalk.cyan(`TSUP:build:start [${srcDir}]`))\n console.log(chalk.gray(`TSUP:build:options [${JSON.stringify(optionsList, null, 2)}]`))\n }\n\n await Promise.all(optionsList.map(options => build(options)))\n\n if (verbose) {\n console.log(chalk.cyan(`TSUP:build:stop [${srcDir}]`))\n }\n if (bundleTypes) {\n await packageCompileTscTypes(entries, outDir, options?.platform ?? 'neutral', buildDir, verbose)\n }\n\n return 0\n}\n\nexport const tsupOptions = (options: Options[] = []): Options => {\n const standardLoaders: Record<string, Loader> = {\n '.gif': 'copy', '.html': 'copy', '.jpg': 'copy', '.json': 'json', '.png': 'copy', '.svg': 'text', '.webp': 'copy',\n }\n\n const standardOptions: Options = {\n bundle: true,\n format: ['esm'],\n loader: standardLoaders,\n outExtension: ({ format }) => (format === 'esm' ? { js: '.mjs' } : { js: '.cjs' }),\n skipNodeModulesBundle: true,\n sourcemap: true,\n target: 'esnext',\n }\n\n return deepMergeObjects([standardOptions, ...options])\n}\n\nexport const packageCompileTsup = async (config?: XyTsupConfig) => {\n const compile = config?.compile\n const verbose = config?.verbose ?? false\n const outDirAsBuildDir = compile?.outDirAsBuildDir ?? true\n const bundleTypes = compile?.bundleTypes ?? false\n if (verbose) {\n console.log('Compiling with TSUP')\n }\n\n const compileForNode = compile?.node ?? { src: {} }\n const compileForBrowser = compile?.browser ?? { src: {} }\n const compileForNeutral = compile?.neutral ?? { src: {} }\n\n return (\n (\n await Promise.all(\n Object.entries(compileForNode).map(async ([srcDir, options]) => {\n const optionsObject: Options = typeof options === 'object' ? options : {}\n const inEsBuildOptions = typeof compile?.node?.esbuildOptions === 'object' ? compile?.node?.esbuildOptions : {}\n const entry = buildEntries(srcDir, compile?.entryMode, options, true, verbose)\n const platform = 'node'\n const rootOutDir = (optionsObject.outDir ?? 'dist')\n const outDir = rootOutDir + '/' + platform\n return typeof srcDir === 'string'\n ? await compileFolder(\n srcDir,\n entry,\n outDirAsBuildDir ? rootOutDir : 'build',\n tsupOptions([inEsBuildOptions,\n compile?.tsup?.options ?? {},\n (typeof options === 'object' ? options : {}),\n { platform: 'node', outDir }]),\n bundleTypes,\n verbose,\n )\n : 0\n }),\n )\n ).reduce((prev, value) => prev + value, 0)\n + (\n await Promise.all(\n Object.entries(compileForBrowser).map(async ([srcDir, options]) => {\n const optionsObject: Options = typeof options === 'object' ? options : {}\n const inEsBuildOptions = typeof compile?.browser?.esbuildOptions === 'object' ? compile?.browser?.esbuildOptions : {}\n const entry = buildEntries(srcDir, compile?.entryMode, options, true, verbose)\n const platform = 'browser'\n const rootOutDir = (optionsObject.outDir ?? 'dist')\n const outDir = rootOutDir + '/' + platform\n return typeof srcDir === 'string'\n ? await compileFolder(\n srcDir,\n entry,\n outDirAsBuildDir ? rootOutDir : 'build',\n tsupOptions([inEsBuildOptions,\n compile?.tsup?.options ?? {},\n (typeof options === 'object' ? options : {}),\n { platform: 'browser', outDir }]),\n bundleTypes,\n verbose,\n )\n : 0\n }),\n )\n ).reduce((prev, value) => prev + value, 0)\n + (\n await Promise.all(\n Object.entries(compileForNeutral).map(async ([srcDir, options]) => {\n const optionsObject: Options = typeof options === 'object' ? options : {}\n const inEsBuildOptions = typeof compile?.neutral?.esbuildOptions === 'object' ? compile?.neutral?.esbuildOptions : {}\n const entry = buildEntries(srcDir, compile?.entryMode, options, true, verbose)\n const platform = 'neutral'\n const rootOutDir = (optionsObject.outDir ?? 'dist')\n const outDir = rootOutDir + '/' + platform\n return typeof srcDir === 'string'\n ? await compileFolder(\n srcDir,\n entry,\n outDirAsBuildDir ? rootOutDir : 'build',\n tsupOptions([inEsBuildOptions,\n compile?.tsup?.options ?? {},\n (typeof options === 'object' ? options : {}),\n { platform: 'neutral', outDir }]),\n bundleTypes,\n verbose,\n )\n : 0\n }),\n )\n ).reduce((prev, value) => prev + value, 0)\n + 0\n )\n}\n","import chalk from 'chalk'\nimport { glob } from 'glob'\n\nexport const getAllInputs = (srcDir: string, verbose = false) => {\n /* tsup wants posix paths */\n return [...glob.sync(`${srcDir}/**/*.ts`, { posix: true }).map((file) => {\n const result = file.slice(Math.max(0, srcDir.length + 1)) // Remove the folder prefix\n if (verbose) {\n console.log(chalk.gray(`getAllInputs: ${JSON.stringify(result, null, 2)}`))\n }\n return result\n }), ...glob.sync(`${srcDir}/**/*.tsx`, { posix: true }).map((file) => {\n const result = file.slice(Math.max(0, srcDir.length + 1)) // Remove the folder prefix\n if (verbose) {\n console.log(chalk.gray(`getAllInputs: ${JSON.stringify(result, null, 2)}`))\n }\n return result\n })]\n}\n","import type { Options } from 'tsup'\n\nimport { getAllInputs } from './inputs.ts'\nimport type { EntryMode } from './XyConfig.ts'\n\nconst isSpecOrStory = (entry: string) => {\n return entry.includes('.spec.') || entry.includes('.stories.')\n || entry.startsWith('spec/') || entry.includes('/spec/')\n || entry.startsWith('stories/') || entry.includes('/stories/')\n || entry === 'spec.ts' || entry.endsWith('/spec.ts')\n || entry === 'stories.ts' || entry.endsWith('/stories.ts')\n}\n\nexport const buildEntries = (srcDir: string, entryMode: EntryMode = 'single', options?: Options | boolean, excludeSpecAndStories = true, verbose = false) => {\n let entries: string[]\n switch (entryMode) {\n case 'platform': {\n entries = ['index-node.ts', 'index-browser.ts']\n break\n }\n case 'all': {\n entries = (excludeSpecAndStories\n ? getAllInputs(srcDir).filter(entry => !isSpecOrStory(entry))\n : getAllInputs(srcDir)).filter(entry => !entry.endsWith('.d.ts'))\n break\n }\n case 'custom': {\n entries = []\n break\n }\n default: {\n entries = ['index.ts']\n break\n }\n }\n\n if (typeof options !== 'boolean' && Array.isArray(options?.entry)) {\n entries.push(...options.entry)\n }\n\n if (verbose) console.log(`buildEntries [${entryMode}] ${entries.length}`)\n return entries\n}\n","type AnyObject = Record<string, unknown>\n\nfunction deepMerge<T extends AnyObject>(target: AnyObject, source: AnyObject): T {\n if (!source || typeof source !== 'object') return target as T\n\n for (const key of Object.keys(source)) {\n const sourceVal = source[key]\n if (\n typeof sourceVal === 'object'\n && sourceVal !== null\n && !Array.isArray(sourceVal)\n ) {\n // Recursively merge nested objects\n if (!target[key] || typeof target[key] !== 'object') {\n target[key] = {}\n }\n deepMerge(target[key] as AnyObject, sourceVal as AnyObject)\n } else {\n // Overwrite with non-object values\n target[key] = sourceVal\n }\n }\n\n return target as T\n}\n\nexport function deepMergeObjects<T extends AnyObject>(objects: T[]): T {\n const result = {} as T\n for (const obj of objects) {\n deepMerge(result, obj)\n }\n return result\n}\n","import { cwd } from 'node:process'\n\nimport chalk from 'chalk'\nimport type { TsConfigCompilerOptions } from 'tsc-prog'\nimport { createProgramFromConfig } from 'tsc-prog'\nimport type { CompilerOptions } from 'typescript'\nimport ts, {\n DiagnosticCategory, formatDiagnosticsWithColorAndContext, getPreEmitDiagnostics, sys,\n} from 'typescript'\n\nimport { getCompilerOptions } from './getCompilerOptions.ts'\n\nexport const packageCompileTsc = (\n platform: 'browser' | 'neutral' | 'node',\n entries: string[],\n srcDir = 'src',\n outDir = 'dist',\n compilerOptionsParam?: CompilerOptions,\n verbose = false,\n): number => {\n const pkg = cwd()\n\n if (verbose) {\n console.log(chalk.cyan(`Validating code START: ${entries.length} files to ${outDir} from ${srcDir}`))\n }\n\n const configFilePath = ts.findConfigFile(\n pkg,\n (fileName: string) => ts.sys.fileExists(fileName),\n 'tsconfig.json',\n )\n\n if (configFilePath === undefined) {\n throw new Error('Could not find tsconfig.json')\n }\n\n const compilerOptions = {\n ...(getCompilerOptions({\n removeComments: false,\n skipDefaultLibCheck: true,\n skipLibCheck: true,\n sourceMap: false,\n })),\n ...compilerOptionsParam,\n outDir: `${outDir}/${platform}`,\n emitDeclarationOnly: true,\n noEmit: false,\n } as TsConfigCompilerOptions\n\n console.log(chalk.cyan(`Validating Files: ${entries.length}`))\n if (verbose) {\n for (const entry of entries) {\n console.log(chalk.grey(`Validating: ${entry}`))\n }\n }\n\n try {\n if (entries.length > 0) {\n const program = createProgramFromConfig({\n configFilePath,\n basePath: pkg,\n compilerOptions,\n files: entries.map(entry => `${srcDir}/${entry}`),\n include: [`${srcDir}/**/*.*`],\n })\n\n const diagnostics = getPreEmitDiagnostics(program)\n\n if (diagnostics.length > 0) {\n const formattedDiagnostics = formatDiagnosticsWithColorAndContext(\n diagnostics,\n {\n getCanonicalFileName: fileName => fileName,\n getCurrentDirectory: () => srcDir,\n getNewLine: () => sys.newLine,\n },\n )\n console.error(formattedDiagnostics)\n }\n\n // We use a custom writeFile callback to prevent non-entry files (like\n // .stories.* and .spec.* files) from emitting .d.ts output into dist.\n //\n // Background: The `include` glob above intentionally brings ALL source\n // files into the TypeScript program so they get type-checked during build\n // (catching errors in storybook/test files too). However, we only want\n // .d.ts output for the actual library entries — not for stories, specs,\n // or examples. Without this filter, every file matched by the include\n // glob would produce a .d.ts file in the dist folder.\n const nonEmitPatterns = ['.stories.', '/stories/', '/stories.', '.spec.', '/spec/', '/spec.', '.example.']\n program.emit(undefined, (fileName, text, writeByteOrderMark) => {\n if (nonEmitPatterns.some(pattern => fileName.includes(pattern))) {\n return\n }\n ts.sys.writeFile(fileName, text, writeByteOrderMark)\n })\n return diagnostics.reduce((acc, diag) => acc + (diag.category === DiagnosticCategory.Error ? 1 : 0), 0)\n }\n return 0\n } finally {\n if (verbose) {\n console.log(chalk.cyan(`Validating code FINISH: ${entries.length} files to ${outDir} from ${srcDir}`))\n }\n }\n}\n","import { cwd } from 'node:process'\n\nimport deepmerge from 'deepmerge'\nimport { getTsconfig } from 'get-tsconfig'\nimport type { CompilerOptions } from 'typescript'\n\nexport const getCompilerOptions = (options: CompilerOptions = {}, fileName = 'tsconfig.json'): CompilerOptions => {\n const resolvedTsConfigCompilerOptions = getTsconfig(cwd(), fileName)?.config?.compilerOptions ?? {}\n\n return deepmerge(resolvedTsConfigCompilerOptions, options)\n}\n","import path from 'node:path'\nimport { cwd } from 'node:process'\n\nimport chalk from 'chalk'\nimport { rollup } from 'rollup'\nimport type { Options } from 'rollup-plugin-dts'\nimport dts from 'rollup-plugin-dts'\nimport nodeExternals from 'rollup-plugin-node-externals'\n\nimport { getCompilerOptions } from './getCompilerOptions.ts'\n\nconst ignoredWarningCodes = new Set(['EMPTY_BUNDLE', 'UNRESOLVED_IMPORT'])\n\nexport async function bundleDts(inputPath: string, outputPath: string, platform: 'node' | 'browser' | 'neutral', options?: Options, verbose = false) {\n // Find the tsconfig.json path\n const pkg = cwd()\n const tsconfigPath = path.resolve(pkg, 'tsconfig.json')\n\n const nodePlugIns = platform === 'node' ? [nodeExternals()] : []\n try {\n const bundle = await rollup({\n input: inputPath,\n\n plugins: [dts({\n ...options,\n tsconfig: tsconfigPath,\n compilerOptions: {\n emitDeclarationOnly: true, noEmit: false, declarationMap: true,\n },\n\n }), ...nodePlugIns],\n onwarn(warning, warn) {\n if (ignoredWarningCodes.has(warning.code ?? '')) {\n return\n }\n console.warn(chalk.yellow(`[${warning.code}] ${warning.message}`))\n console.warn(chalk.gray(inputPath))\n warn(warning)\n },\n })\n await bundle.write({\n file: outputPath,\n format: 'es',\n })\n } catch (ex) {\n const error = ex as Error\n console.warn(chalk.red(error))\n console.warn(chalk.gray(inputPath))\n }\n\n if (verbose) {\n console.log(`Bundled declarations written to ${outputPath}`)\n }\n}\n\nexport const packageCompileTscTypes = async (\n entries: string[],\n outDir: string,\n platform: 'node' | 'browser' | 'neutral',\n srcDir = 'build',\n verbose = false,\n): Promise<number> => {\n if (verbose) {\n console.log(chalk.cyan(`Compiling Types START [${platform}]: ${entries.length} files to ${outDir} from ${srcDir}`))\n console.log(`Entries: ${entries.join(', ')}`)\n }\n const pkg = cwd()\n const srcRoot = `${pkg}/${srcDir}/${platform}`\n\n const entryNameToTypeName = (entry: string): string => {\n const splitEntryName = entry.split('.')\n const newEntryExtension = 'd.' + splitEntryName.at(-1)\n return [...splitEntryName.slice(0, -1), newEntryExtension].join('.')\n }\n\n const compilerOptions = getCompilerOptions({\n removeComments: false,\n skipDefaultLibCheck: true,\n skipLibCheck: true,\n declarationMap: true,\n emitDeclarationOnly: true,\n noEmit: true,\n })\n\n const entryNames = entries.map(entry => entry.split(`${srcDir}/`).at(-1) ?? entry)\n\n await Promise.all(entryNames.map(async (entryName) => {\n const entryTypeName = entryNameToTypeName(entryName)\n await bundleDts(`${srcRoot}/${entryTypeName}`, `${outDir}/${entryTypeName}`, platform, { compilerOptions }, verbose)\n }))\n\n if (verbose) {\n console.log(chalk.cyan(`Compiling Types FINISH: ${entries.length} files to ${outDir} from ${srcDir}`))\n }\n\n return 0\n}\n","import type { Options } from 'tsup'\n\nexport type EntryMode = 'all' | 'single' | 'auto' | 'platform' | 'custom'\n\n/**\n * Configuration for specifying which paths are targeted.\n */\nexport interface PathConfig {\n /**\n * Glob patterns to exclude (takes precedence over include).\n */\n exclude?: string[]\n /**\n * Glob patterns to include.\n */\n include?: string[]\n}\n\n/**\n * Configuration for Dynamic Share.\n */\n\nexport interface DynamicShareConfig extends PathConfig {}\n\n/**\n * Configuration for Live Share.\n */\n\nexport interface LiveShareConfig extends PathConfig {}\n\nexport interface CompileConfig {\n bundleTypes?: boolean\n /** @param entryMode all, single, custom, platform, or auto */\n entryMode?: EntryMode\n /** @param when building types with tsc, should it use the outDir to write to? */\n outDirAsBuildDir?: boolean\n}\n\nexport type PackageCompileTsupConfig = CompileConfig & {\n browser?: Record<string, Options | boolean>\n neutral?: Record<string, Options | boolean>\n node?: Record<string, Options | boolean>\n tsup?: { options?: Options }\n verbose?: boolean\n}\n\nexport type PackageCompileTscConfig = CompileConfig & { mode: 'tsc' }\n\n/**\n * How deplint should classify a dependency.\n * - `dep`: must stay in `dependencies` (never promoted to peerDependencies)\n * - `peer`: should be treated as a peerDependency (overrides a parent `dep` setting)\n */\nexport type DeplintRefType = 'dep' | 'peer'\n\n/**\n * Per-package configuration within deplint.\n */\nexport interface DeplintPackageConfig {\n /** How this dependency should be classified. */\n refType: DeplintRefType\n}\n\n/**\n * Configuration for deplint (dependency linting).\n */\nexport interface DeplintConfig {\n /**\n * Package names to exclude from unused-dependency checks.\n * Packages listed here will never be reported as \"unused\" by deplint,\n * even if no import for them is detected in source or dist files.\n * Useful for packages that are used implicitly (e.g. runtime plugins,\n * CSS-in-JS themes, or polyfills that have side effects on import).\n */\n exclude?: string[]\n /**\n * Per-dependency configuration keyed by package name.\n * Cascades from root to package configs (maps are merged, with\n * package-level entries overriding root-level entries for the same key).\n */\n packages?: Record<string, DeplintPackageConfig>\n}\n\n/**\n * Canonical names for individually toggleable publint checks.\n */\nexport type PublintCheckName\n = | 'files'\n | 'importToDefault'\n | 'main'\n | 'module'\n | 'peerDeps'\n | 'publint'\n | 'resolutions'\n | 'rootSource'\n | 'rootTypes'\n | 'sideEffects'\n | 'source'\n | 'types'\n\nexport const ALL_PUBLINT_CHECKS: PublintCheckName[] = [\n 'files', 'importToDefault', 'main', 'module', 'peerDeps', 'publint', 'resolutions', 'rootSource', 'rootTypes', 'sideEffects', 'source', 'types',\n]\n\n/** Checks that only apply to published (non-private) packages */\nexport const PUBLISH_ONLY_CHECKS: PublintCheckName[] = [\n 'files', 'importToDefault', 'main', 'module', 'publint', 'rootSource', 'rootTypes', 'sideEffects', 'source', 'types',\n]\n\n/**\n * Configuration for publint (package publishing linting).\n */\nexport interface PublintConfig {\n /**\n * Check names to exclude from publint runs.\n * All checks run by default; listed names are skipped.\n * Cannot be used together with `include`.\n */\n exclude?: PublintCheckName[]\n /**\n * Check names to include (whitelist) in publint runs.\n * Only listed checks will run; all others are skipped.\n * Cannot be used together with `exclude`.\n */\n include?: PublintCheckName[]\n /**\n * Whether to run `pack` when invoking the publint library.\n * When true (default), the package manager is used to determine which\n * files would be published. Set to false to skip packing for faster runs.\n */\n pack?: boolean\n}\n\n/**\n * Configuration for readme generation.\n */\nexport interface ReadmeConfig {\n /**\n * URL that the logo links to when clicked.\n * Replaces the placeholder in the template's [![logo][]](url) link.\n */\n logoLinkUrl?: string\n /**\n * Public URL for the logo image displayed at the top of generated READMEs.\n * Replaces the placeholder in the template's [logo] reference link.\n */\n logoUrl?: string\n}\n\n/**\n * Command-specific configuration that cascades from root to package.\n * Settings here override the legacy top-level equivalents.\n */\nexport interface CommandsConfig {\n deplint?: DeplintConfig\n publint?: boolean | PublintConfig\n}\n\nexport interface XyConfigBase {\n /**\n * Command-specific settings grouped under `commands`.\n * These cascade from root xy.config down to per-package xy.config files.\n * Takes precedence over the legacy top-level `deplint`/`publint` fields.\n */\n commands?: CommandsConfig\n compile?: CompileConfig\n /** @deprecated Use `commands.deplint` instead. */\n deplint?: DeplintConfig\n dynamicShare?: DynamicShareConfig\n liveShare?: LiveShareConfig\n /** @deprecated Use `commands.publint` instead. */\n publint?: boolean | PublintConfig\n\n readme?: ReadmeConfig\n verbose?: boolean\n}\n\nexport interface XyTsupConfig extends XyConfigBase { compile?: PackageCompileTsupConfig }\n\nexport interface XyTscConfig extends XyConfigBase { compile?: PackageCompileTscConfig }\n\nexport type XyConfigLegacy = XyTsupConfig | XyTscConfig\n\nexport type XyConfig = XyConfigLegacy & {\n dev?: {\n build?: {\n clean?: boolean /* default: true */\n compile?: boolean /* default: true */\n deplint?: boolean /* default: true */\n gendocs?: boolean /* default: false */\n gitlint?: boolean /* default: true */\n knip?: boolean /* default: true */\n license?: boolean /* default: true */\n lint?: boolean /* default: true */\n publint?: boolean /* default: true */\n statics?: boolean /* default: true */\n verbose?: boolean\n }\n compile?: PackageCompileTsupConfig\n verbose?: boolean\n }\n verbose?: boolean\n}\n","import path from 'node:path/posix'\n\nimport chalk from 'chalk'\nimport cpy from 'cpy'\n\nimport { INIT_CWD, packageName } from '../../lib/index.ts'\n\nexport interface PackageCopyAssetsParams { target?: 'esm' | 'cjs' }\n\nconst copyTargetAssets = async (target: 'esm' | 'cjs', name: string, location: string) => {\n try {\n const values = await cpy(\n ['**/*.jpg', '**/*.png', '**/*.gif', '**/*.svg', '**/*.webp', '**/*.sass', '**/*.scss', '**/*.gif', '**/*.css'],\n `../dist/${target}`,\n {\n cwd: path.join(location, 'src'),\n flat: false,\n },\n )\n if (values.length > 0) {\n console.log(chalk.green(`Copying Assets [${target.toUpperCase()}] - ${name} - ${location}`))\n }\n for (const value of values) {\n console.log(`${value.split('/').pop()} => ./dist/${target}`)\n }\n return 0\n } catch (ex) {\n const error = ex as Error\n console.log(`Copy Assets Failed: ${name}: ${error.message}`)\n return 1\n }\n}\n\nexport const packageCopyAssets = async ({ target }: PackageCopyAssetsParams) => {\n const pkg = INIT_CWD()\n const pkgName = packageName() ?? 'Unknown'\n switch (target) {\n case 'esm': {\n return await copyTargetAssets('esm', pkgName, pkg)\n }\n case 'cjs': {\n return await copyTargetAssets('cjs', pkgName, pkg)\n }\n default: {\n return (await copyTargetAssets('esm', pkgName, pkg)) || (await copyTargetAssets('cjs', pkgName, pkg))\n }\n }\n}\n","import type { ICruiseOptions } from 'dependency-cruiser'\nimport { cruise } from 'dependency-cruiser'\n\nimport { INIT_CWD, packageName } from '../../lib/index.ts'\n\nexport const packageCycle = async () => {\n const pkg = INIT_CWD()\n const pkgName = packageName()\n\n const cruiseOptions: ICruiseOptions = {\n ruleSet: {\n forbidden: [\n {\n name: 'no-circular',\n severity: 'error',\n comment: 'This dependency creates a circular reference',\n from: {},\n to: { circular: true },\n },\n ],\n },\n exclude: 'node_modules|packages/.*/packages',\n validate: true,\n doNotFollow: { path: 'node_modules|packages/.*/packages' },\n tsPreCompilationDeps: false,\n combinedDependencies: true,\n outputType: 'err',\n }\n\n const target = `${pkg}/src`\n\n console.log(`Checking for circular dependencies in ${target}...`)\n\n const result = await cruise([target], cruiseOptions)\n console.log(result.output)\n\n if (result.exitCode === 0) {\n console.log(`${pkgName} ✅ No dependency violations`)\n } else {\n console.error(`${pkgName} ❌ Dependency violations found`)\n }\n return result.exitCode\n}\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { existsSync } from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\nimport {\n Application, ArgumentsReader, TSConfigReader, TypeDocReader,\n} from 'typedoc'\n\nimport { INIT_CWD, packageName } from '../../lib/index.ts'\n\nconst ExitCodes = {\n CompileError: 3,\n ExceptionThrown: 6,\n NoEntryPoints: 2,\n Ok: 0,\n OptionError: 1,\n OutputError: 5,\n ValidationError: 4,\n}\n\nexport const packageGenDocs = async () => {\n const pkg = INIT_CWD()\n\n if (pkg !== undefined && !existsSync(path.join(pkg, 'typedoc.json'))) {\n return\n }\n\n const app = await Application.bootstrap({\n entryPointStrategy: 'merge',\n entryPoints: [`${pkg}/src/**/*.ts`, `${pkg}/packages/*/dist/docs.json`],\n excludeExternals: true,\n json: `${pkg}/dist/docs.json`,\n logLevel: 'Error',\n tsconfig: `${pkg}/tsconfig.json`,\n })\n\n app.options.addReader(new ArgumentsReader(0))\n app.options.addReader(new TypeDocReader())\n app.options.addReader(new TSConfigReader())\n app.options.addReader(new ArgumentsReader(300))\n\n return await runTypeDoc(app)\n}\n\nconst runTypeDoc = async (app: Application) => {\n const pkgName = packageName()\n if (app.options.getValue('version')) {\n console.log(app.toString())\n return ExitCodes.Ok\n }\n\n if (app.options.getValue('showConfig')) {\n console.log(app.options.getRawValues())\n return ExitCodes.Ok\n }\n\n if (app.logger.hasErrors()) {\n return ExitCodes.OptionError\n }\n if (app.options.getValue('treatWarningsAsErrors') && app.logger.hasWarnings()) {\n return ExitCodes.OptionError\n }\n\n if (app.options.getValue('entryPoints').length === 0) {\n app.logger.error('No entry points provided')\n return ExitCodes.NoEntryPoints\n }\n\n if (app.options.getValue('watch')) {\n await app.convertAndWatch(async (project) => {\n const out = app.options.getValue('out')\n if (out) {\n await app.generateDocs(project, out)\n }\n const json = app.options.getValue('json')\n if (json) {\n await app.generateJson(project, json)\n }\n\n if (!out && !json) {\n await app.generateDocs(project, './docs')\n }\n })\n return ExitCodes.Ok\n }\n\n const project = await app.convert()\n if (!project) {\n return ExitCodes.CompileError\n }\n if (app.options.getValue('treatWarningsAsErrors') && app.logger.hasWarnings()) {\n return ExitCodes.CompileError\n }\n\n app.validate(project)\n if (app.logger.hasErrors()) {\n return ExitCodes.ValidationError\n }\n if (app.options.getValue('treatWarningsAsErrors') && app.logger.hasWarnings()) {\n return ExitCodes.ValidationError\n }\n\n if (app.options.getValue('emit') !== 'none') {\n const out = app.options.getValue('out')\n if (out) {\n await app.generateDocs(project, out)\n }\n const json = app.options.getValue('json')\n if (json) {\n await app.generateJson(project, json)\n }\n\n if (!out && !json) {\n await app.generateDocs(project, './docs')\n }\n\n if (app.logger.hasErrors()) {\n return ExitCodes.OutputError\n }\n if (app.options.getValue('treatWarningsAsErrors') && app.logger.hasWarnings()) {\n return ExitCodes.OutputError\n }\n }\n console.log(chalk.green(`${pkgName} - Ok`))\n return ExitCodes.Ok\n}\n","import { readdirSync } from 'node:fs'\nimport path from 'node:path'\nimport { cwd } from 'node:process'\nimport { pathToFileURL } from 'node:url'\n\nimport chalk from 'chalk'\nimport { ESLint, type Linter } from 'eslint'\nimport { findUp } from 'find-up'\nimport picomatch from 'picomatch'\n\nimport { INIT_CWD } from '../../lib/index.ts'\n\nconst dumpMessages = (lintResults: ESLint.LintResult[]) => {\n const colors: ('white' | 'red' | 'yellow')[] = ['white', 'yellow', 'red']\n const severity: string[] = ['none', 'warning', 'error']\n\n for (const lintResult of lintResults) {\n if (lintResult.messages.length > 0) {\n console.log(chalk.gray(`\\n${lintResult.filePath}`))\n for (const message of lintResult.messages) {\n console.log(\n chalk.gray(`\\t${message.line}:${message.column}`),\n chalk[colors[message.severity]](`\\t${severity[message.severity]}`),\n chalk.white(`\\t${message.message}`),\n chalk.gray(`\\t${message.ruleId}`),\n )\n }\n }\n }\n}\n\nasync function getRootESLintConfig() {\n const configPath = await findUp(['eslint.config.ts', 'eslint.config.mjs'])\n\n if (configPath === undefined) {\n throw new Error('eslint.config.ts not found in the monorepo')\n }\n\n return pathToFileURL(configPath)\n}\n\nfunction getFiles(dir: string, ignoreFolders: string[]): string[] {\n const currentDirectory = cwd()\n const subDirectory = dir.split(currentDirectory)[1]?.split('/')[1]\n if (ignoreFolders.includes(subDirectory)) return []\n return readdirSync(dir, { withFileTypes: true })\n .flatMap((dirent) => {\n const res = path.resolve(dir, dirent.name)\n const relativePath = (subDirectory === undefined) ? dirent.name : `${subDirectory}/${dirent.name}`\n\n const ignoreMatchers = ignoreFolders.map(pattern => picomatch(pattern))\n\n // Exclude ignored paths\n if (ignoreMatchers.some(isMatch => isMatch(relativePath))) return []\n\n return dirent.isDirectory()\n ? getFiles(res, ignoreFolders)\n : [res]\n })\n}\n\nexport const packageLint = async (fix = false, verbose = false, cache = true) => {\n const pkg = INIT_CWD()\n const configPath = await getRootESLintConfig()\n const { default: eslintConfig } = await import(configPath.href) as { default: Linter.Config[] }\n\n const start = Date.now()\n\n // List of folders to ignore\n const ignoreFolders = ['node_modules', 'dist', 'packages', '.git', 'build', '.yarn', '.vscode', '.github']\n\n const engine = new ESLint({\n baseConfig: [...eslintConfig], fix, warnIgnored: false, cache,\n })\n\n const files = getFiles(cwd(), ignoreFolders)\n console.log(chalk.green(`Linting ${pkg} [files = ${files.length}]`))\n if (verbose) {\n for (const file of files) {\n console.log(chalk.gray(`\\t${file}`))\n }\n }\n const lintResults = await engine.lintFiles(files)\n\n dumpMessages(lintResults)\n\n if (fix) {\n await ESLint.outputFixes(lintResults)\n }\n const filesCountColor = files.length < 100 ? 'green' : files.length < 1000 ? 'yellow' : 'red'\n const lintTime = Date.now() - start\n const lintTimeColor = lintTime < 1000 ? 'green' : lintTime < 3000 ? 'yellow' : 'red'\n console.log(chalk.white(`Linted ${chalk[filesCountColor](files.length)} files in ${chalk[lintTimeColor](lintTime)}ms`))\n return lintResults.reduce((prev, lintResult) => prev + lintResult.errorCount, 0)\n}\n","import { promises as fs } from 'node:fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\nimport { glob } from 'glob'\nimport sortPackageJson from 'sort-package-json'\n\nimport { INIT_CWD } from '../../lib/index.ts'\n// eslint-disable-next-line import-x/no-internal-modules\nimport type { PublintCheckName } from './compile/XyConfig.ts'\n// eslint-disable-next-line import-x/no-internal-modules\nimport { PUBLISH_ONLY_CHECKS } from './compile/XyConfig.ts'\n\nexport interface PackagePublintParams {\n exclude?: Set<PublintCheckName>\n fix?: boolean\n pack?: boolean\n pkgDir?: string\n strict?: boolean\n verbose?: boolean\n}\n\nconst removeSourceFromExports = (exports: Record<string, unknown>): boolean => {\n let removed = false\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'source') {\n delete exports[key]\n removed = true\n } else if (typeof value === 'object' && value !== null && removeSourceFromExports(value as Record<string, unknown>)) removed = true\n }\n return removed\n}\n\nconst hasSourceInExports = (exports: Record<string, unknown>): boolean => {\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'source') return true\n if (typeof value === 'object' && value !== null && hasSourceInExports(value as Record<string, unknown>)) return true\n }\n return false\n}\n\nconst hasImportKeyInExports = (exports: Record<string, unknown>): boolean => {\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'import' && typeof value === 'string' && value.endsWith('.mjs')) return true\n if (typeof value === 'object' && value !== null && hasImportKeyInExports(value as Record<string, unknown>)) return true\n }\n return false\n}\n\nconst replaceImportWithDefault = (exports: Record<string, unknown>): boolean => {\n let modified = false\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'import' && typeof value === 'string' && value.endsWith('.mjs')) {\n if (exports.default === undefined) {\n exports.default = value\n }\n delete exports.import\n if (exports.types === undefined) {\n exports.types = value.replace(/\\.mjs$/, '.d.ts')\n }\n modified = true\n } else if (typeof value === 'object' && value !== null && replaceImportWithDefault(value as Record<string, unknown>)) modified = true\n }\n return modified\n}\n\nconst hasTypesInExports = (exports: Record<string, unknown>): boolean => {\n for (const [key, value] of Object.entries(exports)) {\n if (key === 'types') return true\n if (typeof value === 'object' && value !== null && hasTypesInExports(value as Record<string, unknown>)) return true\n }\n return false\n}\n\nfunction ensureExportsPath(value: string): string {\n if (value.startsWith('./') || value.startsWith('../')) return value\n return `./${value}`\n}\n\ninterface CustomLintResult {\n errors: number\n modified: boolean\n warnings: number\n}\n\nfunction emptyCustomResult(): CustomLintResult {\n return {\n errors: 0, modified: false, warnings: 0,\n }\n}\n\nfunction mergeResults(target: CustomLintResult, source: CustomLintResult): void {\n target.errors += source.errors\n target.warnings += source.warnings\n target.modified = target.modified || source.modified\n}\n\nfunction checkFiles(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n const files = pkg.files as string[] | undefined\n if (files === undefined) {\n console.warn(chalk.yellow('Publint [custom]: \"files\" field is missing'))\n result.warnings++\n }\n if (Array.isArray(files) && !files.includes('README.md')) {\n files.push('README.md')\n console.warn(chalk.yellow('Publint [custom]: added \"README.md\" to \"files\"'))\n result.modified = true\n result.warnings++\n }\n if (Array.isArray(files) && files.includes('src')) {\n if (fix) {\n pkg.files = files.filter((f: string) => f !== 'src')\n console.warn(chalk.yellow('Publint [custom]: removed \"src\" from \"files\"'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: \"src\" should not be in \"files\" (use --fix to remove)'))\n }\n result.warnings++\n }\n return result\n}\n\nfunction checkExportsSource(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (exports && typeof exports === 'object' && hasSourceInExports(exports)) {\n if (fix) {\n removeSourceFromExports(exports)\n console.warn(chalk.yellow('Publint [custom]: removed \"source\" entries from \"exports\"'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: \"source\" entries should not be in \"exports\" (use --fix to remove)'))\n }\n result.warnings++\n }\n return result\n}\n\nfunction migrateFieldToExports(\n pkg: Record<string, unknown>,\n field: string,\n exportKey: string,\n fix: boolean,\n): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg[field] === undefined) return result\n\n // Skip non-JS files (e.g. tsconfig packages use \"main\": \"./tsconfig.json\")\n const fieldValue = pkg[field] as string\n if (!fieldValue.endsWith('.js') && !fieldValue.endsWith('.mjs') && !fieldValue.endsWith('.cjs')) return result\n\n if (fix) {\n const exportValue = ensureExportsPath(fieldValue)\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (exports && typeof exports === 'object') {\n const dot = exports['.']\n if (dot && typeof dot === 'object' && !(dot as Record<string, unknown>)[exportKey]) {\n (dot as Record<string, unknown>)[exportKey] = exportValue\n console.warn(chalk.yellow(`Publint [custom]: migrated \"${field}\" to \"exports['.'].${exportKey}\" (${fieldValue})`))\n }\n } else if (!pkg.exports) {\n pkg.exports = { '.': { [exportKey]: exportValue } }\n console.warn(chalk.yellow(`Publint [custom]: migrated \"${field}\" to \"exports\" (.→${fieldValue})`))\n }\n delete pkg[field]\n console.warn(chalk.yellow(`Publint [custom]: removed deprecated \"${field}\" field`))\n result.modified = true\n } else {\n console.warn(chalk.yellow(`Publint [custom]: \"${field}\" field is deprecated, use \"exports\" instead (use --fix to remove)`))\n }\n result.warnings++\n return result\n}\n\nfunction checkSideEffects(pkg: Record<string, unknown>): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg.sideEffects !== false) {\n console.warn(chalk.yellow('Publint [custom]: \"sideEffects\" field should be set to false'))\n result.warnings++\n }\n return result\n}\n\nfunction checkRootSource(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n for (const field of ['source', 'src']) {\n if (pkg[field] !== undefined) {\n if (fix) {\n delete pkg[field]\n console.warn(chalk.yellow(`Publint [custom]: removed root-level \"${field}\" field`))\n result.modified = true\n } else {\n console.warn(chalk.yellow(`Publint [custom]: root-level \"${field}\" field should not be in package.json (use --fix to remove)`))\n }\n result.warnings++\n }\n }\n return result\n}\n\nfunction checkResolutions(pkg: Record<string, unknown>): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg.resolutions !== undefined) {\n console.warn(chalk.yellow('Publint [custom]: \"resolutions\" in use'))\n console.warn(chalk.gray(JSON.stringify(pkg.resolutions, null, 2)))\n result.warnings++\n }\n return result\n}\n\nfunction checkImportToDefault(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (!exports || typeof exports !== 'object') return result\n if (!hasImportKeyInExports(exports)) return result\n\n if (fix) {\n replaceImportWithDefault(exports)\n console.warn(chalk.yellow('Publint [custom]: renamed \"import\" to \"default\" in \"exports\" and ensured \"types\" siblings'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: \"import\" entries in \"exports\" should use \"default\" instead (use --fix to rename)'))\n }\n result.warnings++\n return result\n}\n\nfunction checkRootTypes(pkg: Record<string, unknown>, fix: boolean): CustomLintResult {\n const result = emptyCustomResult()\n if (pkg.types === undefined) return result\n const exports = pkg.exports as Record<string, unknown> | undefined\n if (!exports || typeof exports !== 'object' || !hasTypesInExports(exports)) return result\n\n if (fix) {\n delete pkg.types\n console.warn(chalk.yellow('Publint [custom]: removed redundant root \"types\" field (already defined in \"exports\")'))\n result.modified = true\n } else {\n console.warn(chalk.yellow('Publint [custom]: root \"types\" field is redundant when \"exports\" defines types (use --fix to remove)'))\n }\n result.warnings++\n return result\n}\n\nfunction customPubLint(\n pkg: Record<string, unknown>,\n fix = false,\n exclude = new Set<PublintCheckName>(),\n): [number, number, boolean] {\n const result = emptyCustomResult()\n if (!exclude.has('files')) mergeResults(result, checkFiles(pkg, fix))\n if (!exclude.has('source')) mergeResults(result, checkExportsSource(pkg, fix))\n if (!exclude.has('rootSource')) mergeResults(result, checkRootSource(pkg, fix))\n if (!exclude.has('main')) mergeResults(result, migrateFieldToExports(pkg, 'main', 'default', fix))\n if (!exclude.has('types')) mergeResults(result, migrateFieldToExports(pkg, 'types', 'types', fix))\n if (!exclude.has('module')) mergeResults(result, migrateFieldToExports(pkg, 'module', 'default', fix))\n if (!exclude.has('importToDefault')) mergeResults(result, checkImportToDefault(pkg, fix))\n if (!exclude.has('rootTypes')) mergeResults(result, checkRootTypes(pkg, fix))\n if (!exclude.has('sideEffects')) mergeResults(result, checkSideEffects(pkg))\n if (!exclude.has('resolutions')) mergeResults(result, checkResolutions(pkg))\n return [result.errors, result.warnings, result.modified]\n}\n\n// Always-included files that npm packs regardless of the \"files\" field\nconst ALWAYS_INCLUDED_PATTERNS = [\n 'package.json',\n 'README',\n 'README.*',\n 'LICENCE',\n 'LICENCE.*',\n 'LICENSE',\n 'LICENSE.*',\n 'CHANGELOG',\n 'CHANGELOG.*',\n]\n\ninterface PackFile {\n data: string\n name: string\n}\n\nasync function resolvePackFiles(pkgDir: string, filesField?: string[]): Promise<PackFile[]> {\n const patterns = [...ALWAYS_INCLUDED_PATTERNS]\n if (filesField) {\n for (const pattern of filesField) {\n // Negation patterns (e.g. \"!**/*.spec.*\") are exclusions, pass through as-is\n if (pattern.startsWith('!')) {\n patterns.push(pattern)\n } else {\n // Include pattern — glob both the pattern itself and its contents if it's a directory\n patterns.push(pattern, `${pattern}/**`)\n }\n }\n }\n\n const matched = await glob(patterns, {\n cwd: pkgDir,\n nodir: true,\n dot: false,\n })\n\n const files: PackFile[] = await Promise.all(\n matched.map(async (rel) => {\n const abs = path.join(pkgDir, rel)\n const data = await fs.readFile(abs, 'utf8').catch(() => '')\n // publint's tarball VFS looks up files by path.join(pkgDir, rel),\n // so names must be prefixed with pkgDir to match\n return { name: path.join(pkgDir, rel), data }\n }),\n )\n return files\n}\n\nasync function runPublintLibrary(pkgDir: string, pkg: Record<string, unknown>, strict: boolean, pack: boolean): Promise<{ errors: number; total: number }> {\n const { publint } = await import('publint')\n\n let packOption: { files: PackFile[] } | false = false\n if (pack) {\n const files = await resolvePackFiles(pkgDir, pkg.files as string[] | undefined)\n packOption = { files }\n }\n\n const { messages } = await publint({\n level: 'suggestion',\n pack: packOption,\n pkgDir,\n strict,\n })\n\n // eslint-disable-next-line import-x/no-internal-modules\n const { formatMessage } = await import('publint/utils')\n\n for (const message of messages) {\n switch (message.type) {\n case 'error': {\n console.error(chalk.red(`[${message.code}] ${formatMessage(message, pkg)}`))\n break\n }\n case 'warning': {\n console.warn(chalk.yellow(`[${message.code}] ${formatMessage(message, pkg)}`))\n break\n }\n default: {\n console.log(chalk.white(`[${message.code}] ${formatMessage(message, pkg)}`))\n break\n }\n }\n }\n\n return {\n errors: messages.filter(message => message.type === 'error').length,\n total: messages.length,\n }\n}\n\nexport const packagePublint = async ({\n exclude = new Set(), fix = false, pack = true, pkgDir: pkgDirParam, strict = true, verbose: _verbose = false,\n}: PackagePublintParams = {}): Promise<number> => {\n const pkgDir = pkgDirParam ?? INIT_CWD()\n\n const sortedPkg = sortPackageJson(await fs.readFile(`${pkgDir}/package.json`, 'utf8'))\n await fs.writeFile(`${pkgDir}/package.json`, sortedPkg)\n\n const pkg = JSON.parse(await fs.readFile(`${pkgDir}/package.json`, 'utf8')) as Record<string, unknown>\n\n const effectiveExclude = pkg.private\n ? new Set([...exclude, ...PUBLISH_ONLY_CHECKS])\n : exclude\n\n console.log(chalk.green(`Publint: ${String(pkg.name)}${pkg.private ? chalk.gray(' (private)') : ''}`))\n console.log(chalk.gray(pkgDir))\n\n let libraryErrors = 0\n if (!effectiveExclude.has('publint')) {\n const library = await runPublintLibrary(pkgDir, pkg, strict, pack)\n libraryErrors = library.errors\n }\n\n const [errorCount, _warningCount, modified] = customPubLint(pkg, fix, effectiveExclude)\n\n if (modified) {\n const sorted = sortPackageJson(JSON.stringify(pkg, null, 2))\n await fs.writeFile(`${pkgDir}/package.json`, sorted)\n }\n\n return libraryErrors + errorCount\n}\n","import { packageClean } from './clean.ts'\nimport { packageCompile } from './compile/index.ts'\n\nexport const packageRecompile = async () => {\n return packageClean() || await packageCompile()\n}\n"],"mappings":"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","names":["path","chalk","path","chalk","path","chalk","chalk","path","cwd","chalk","chalk","chalk","glob","cwd","chalk","deepmerge","cwd","chalk","path","cwd","chalk","cwd","path","chalk","chalk","options","config","cwd","chalk","config","path","chalk","path","chalk","path","chalk","path","project","chalk","path","cwd","chalk","chalk","cwd","path","fs","path","chalk","glob","chalk","glob","path","fs"]}
@@ -0,0 +1,87 @@
1
+ // src/actions/package/lint.ts
2
+ import { readdirSync } from "fs";
3
+ import path from "path";
4
+ import { cwd } from "process";
5
+ import { pathToFileURL } from "url";
6
+ import chalk from "chalk";
7
+ import { ESLint } from "eslint";
8
+ import { findUp } from "find-up";
9
+ import picomatch from "picomatch";
10
+
11
+ // src/lib/initCwd.ts
12
+ function INIT_CWD() {
13
+ return process.env.INIT_CWD ?? process.cwd();
14
+ }
15
+
16
+ // src/actions/package/lint.ts
17
+ var dumpMessages = (lintResults) => {
18
+ const colors = ["white", "yellow", "red"];
19
+ const severity = ["none", "warning", "error"];
20
+ for (const lintResult of lintResults) {
21
+ if (lintResult.messages.length > 0) {
22
+ console.log(chalk.gray(`
23
+ ${lintResult.filePath}`));
24
+ for (const message of lintResult.messages) {
25
+ console.log(
26
+ chalk.gray(` ${message.line}:${message.column}`),
27
+ chalk[colors[message.severity]](` ${severity[message.severity]}`),
28
+ chalk.white(` ${message.message}`),
29
+ chalk.gray(` ${message.ruleId}`)
30
+ );
31
+ }
32
+ }
33
+ }
34
+ };
35
+ async function getRootESLintConfig() {
36
+ const configPath = await findUp(["eslint.config.ts", "eslint.config.mjs"]);
37
+ if (configPath === void 0) {
38
+ throw new Error("eslint.config.ts not found in the monorepo");
39
+ }
40
+ return pathToFileURL(configPath);
41
+ }
42
+ function getFiles(dir, ignoreFolders) {
43
+ const currentDirectory = cwd();
44
+ const subDirectory = dir.split(currentDirectory)[1]?.split("/")[1];
45
+ if (ignoreFolders.includes(subDirectory)) return [];
46
+ return readdirSync(dir, { withFileTypes: true }).flatMap((dirent) => {
47
+ const res = path.resolve(dir, dirent.name);
48
+ const relativePath = subDirectory === void 0 ? dirent.name : `${subDirectory}/${dirent.name}`;
49
+ const ignoreMatchers = ignoreFolders.map((pattern) => picomatch(pattern));
50
+ if (ignoreMatchers.some((isMatch) => isMatch(relativePath))) return [];
51
+ return dirent.isDirectory() ? getFiles(res, ignoreFolders) : [res];
52
+ });
53
+ }
54
+ var packageLint = async (fix = false, verbose = false, cache = true) => {
55
+ const pkg = INIT_CWD();
56
+ const configPath = await getRootESLintConfig();
57
+ const { default: eslintConfig } = await import(configPath.href);
58
+ const start = Date.now();
59
+ const ignoreFolders = ["node_modules", "dist", "packages", ".git", "build", ".yarn", ".vscode", ".github"];
60
+ const engine = new ESLint({
61
+ baseConfig: [...eslintConfig],
62
+ fix,
63
+ warnIgnored: false,
64
+ cache
65
+ });
66
+ const files = getFiles(cwd(), ignoreFolders);
67
+ console.log(chalk.green(`Linting ${pkg} [files = ${files.length}]`));
68
+ if (verbose) {
69
+ for (const file of files) {
70
+ console.log(chalk.gray(` ${file}`));
71
+ }
72
+ }
73
+ const lintResults = await engine.lintFiles(files);
74
+ dumpMessages(lintResults);
75
+ if (fix) {
76
+ await ESLint.outputFixes(lintResults);
77
+ }
78
+ const filesCountColor = files.length < 100 ? "green" : files.length < 1e3 ? "yellow" : "red";
79
+ const lintTime = Date.now() - start;
80
+ const lintTimeColor = lintTime < 1e3 ? "green" : lintTime < 3e3 ? "yellow" : "red";
81
+ console.log(chalk.white(`Linted ${chalk[filesCountColor](files.length)} files in ${chalk[lintTimeColor](lintTime)}ms`));
82
+ return lintResults.reduce((prev, lintResult) => prev + lintResult.errorCount, 0);
83
+ };
84
+ export {
85
+ packageLint
86
+ };
87
+ //# sourceMappingURL=lint.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/package/lint.ts","../../../src/lib/initCwd.ts"],"sourcesContent":["import { readdirSync } from 'node:fs'\nimport path from 'node:path'\nimport { cwd } from 'node:process'\nimport { pathToFileURL } from 'node:url'\n\nimport chalk from 'chalk'\nimport { ESLint, type Linter } from 'eslint'\nimport { findUp } from 'find-up'\nimport picomatch from 'picomatch'\n\nimport { INIT_CWD } from '../../lib/index.ts'\n\nconst dumpMessages = (lintResults: ESLint.LintResult[]) => {\n const colors: ('white' | 'red' | 'yellow')[] = ['white', 'yellow', 'red']\n const severity: string[] = ['none', 'warning', 'error']\n\n for (const lintResult of lintResults) {\n if (lintResult.messages.length > 0) {\n console.log(chalk.gray(`\\n${lintResult.filePath}`))\n for (const message of lintResult.messages) {\n console.log(\n chalk.gray(`\\t${message.line}:${message.column}`),\n chalk[colors[message.severity]](`\\t${severity[message.severity]}`),\n chalk.white(`\\t${message.message}`),\n chalk.gray(`\\t${message.ruleId}`),\n )\n }\n }\n }\n}\n\nasync function getRootESLintConfig() {\n const configPath = await findUp(['eslint.config.ts', 'eslint.config.mjs'])\n\n if (configPath === undefined) {\n throw new Error('eslint.config.ts not found in the monorepo')\n }\n\n return pathToFileURL(configPath)\n}\n\nfunction getFiles(dir: string, ignoreFolders: string[]): string[] {\n const currentDirectory = cwd()\n const subDirectory = dir.split(currentDirectory)[1]?.split('/')[1]\n if (ignoreFolders.includes(subDirectory)) return []\n return readdirSync(dir, { withFileTypes: true })\n .flatMap((dirent) => {\n const res = path.resolve(dir, dirent.name)\n const relativePath = (subDirectory === undefined) ? dirent.name : `${subDirectory}/${dirent.name}`\n\n const ignoreMatchers = ignoreFolders.map(pattern => picomatch(pattern))\n\n // Exclude ignored paths\n if (ignoreMatchers.some(isMatch => isMatch(relativePath))) return []\n\n return dirent.isDirectory()\n ? getFiles(res, ignoreFolders)\n : [res]\n })\n}\n\nexport const packageLint = async (fix = false, verbose = false, cache = true) => {\n const pkg = INIT_CWD()\n const configPath = await getRootESLintConfig()\n const { default: eslintConfig } = await import(configPath.href) as { default: Linter.Config[] }\n\n const start = Date.now()\n\n // List of folders to ignore\n const ignoreFolders = ['node_modules', 'dist', 'packages', '.git', 'build', '.yarn', '.vscode', '.github']\n\n const engine = new ESLint({\n baseConfig: [...eslintConfig], fix, warnIgnored: false, cache,\n })\n\n const files = getFiles(cwd(), ignoreFolders)\n console.log(chalk.green(`Linting ${pkg} [files = ${files.length}]`))\n if (verbose) {\n for (const file of files) {\n console.log(chalk.gray(`\\t${file}`))\n }\n }\n const lintResults = await engine.lintFiles(files)\n\n dumpMessages(lintResults)\n\n if (fix) {\n await ESLint.outputFixes(lintResults)\n }\n const filesCountColor = files.length < 100 ? 'green' : files.length < 1000 ? 'yellow' : 'red'\n const lintTime = Date.now() - start\n const lintTimeColor = lintTime < 1000 ? 'green' : lintTime < 3000 ? 'yellow' : 'red'\n console.log(chalk.white(`Linted ${chalk[filesCountColor](files.length)} files in ${chalk[lintTimeColor](lintTime)}ms`))\n return lintResults.reduce((prev, lintResult) => prev + lintResult.errorCount, 0)\n}\n","export function INIT_CWD(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,336 @@
1
+ // src/actions/package/publint.ts
2
+ import { promises as fs } from "fs";
3
+ import path from "path";
4
+ import chalk from "chalk";
5
+ import { glob } from "glob";
6
+ import sortPackageJson from "sort-package-json";
7
+
8
+ // src/lib/initCwd.ts
9
+ function INIT_CWD() {
10
+ return process.env.INIT_CWD ?? process.cwd();
11
+ }
12
+
13
+ // src/actions/package/compile/XyConfig.ts
14
+ var PUBLISH_ONLY_CHECKS = [
15
+ "files",
16
+ "importToDefault",
17
+ "main",
18
+ "module",
19
+ "publint",
20
+ "rootSource",
21
+ "rootTypes",
22
+ "sideEffects",
23
+ "source",
24
+ "types"
25
+ ];
26
+
27
+ // src/actions/package/publint.ts
28
+ var removeSourceFromExports = (exports) => {
29
+ let removed = false;
30
+ for (const [key, value] of Object.entries(exports)) {
31
+ if (key === "source") {
32
+ delete exports[key];
33
+ removed = true;
34
+ } else if (typeof value === "object" && value !== null && removeSourceFromExports(value)) removed = true;
35
+ }
36
+ return removed;
37
+ };
38
+ var hasSourceInExports = (exports) => {
39
+ for (const [key, value] of Object.entries(exports)) {
40
+ if (key === "source") return true;
41
+ if (typeof value === "object" && value !== null && hasSourceInExports(value)) return true;
42
+ }
43
+ return false;
44
+ };
45
+ var hasImportKeyInExports = (exports) => {
46
+ for (const [key, value] of Object.entries(exports)) {
47
+ if (key === "import" && typeof value === "string" && value.endsWith(".mjs")) return true;
48
+ if (typeof value === "object" && value !== null && hasImportKeyInExports(value)) return true;
49
+ }
50
+ return false;
51
+ };
52
+ var replaceImportWithDefault = (exports) => {
53
+ let modified = false;
54
+ for (const [key, value] of Object.entries(exports)) {
55
+ if (key === "import" && typeof value === "string" && value.endsWith(".mjs")) {
56
+ if (exports.default === void 0) {
57
+ exports.default = value;
58
+ }
59
+ delete exports.import;
60
+ if (exports.types === void 0) {
61
+ exports.types = value.replace(/\.mjs$/, ".d.ts");
62
+ }
63
+ modified = true;
64
+ } else if (typeof value === "object" && value !== null && replaceImportWithDefault(value)) modified = true;
65
+ }
66
+ return modified;
67
+ };
68
+ var hasTypesInExports = (exports) => {
69
+ for (const [key, value] of Object.entries(exports)) {
70
+ if (key === "types") return true;
71
+ if (typeof value === "object" && value !== null && hasTypesInExports(value)) return true;
72
+ }
73
+ return false;
74
+ };
75
+ function ensureExportsPath(value) {
76
+ if (value.startsWith("./") || value.startsWith("../")) return value;
77
+ return `./${value}`;
78
+ }
79
+ function emptyCustomResult() {
80
+ return {
81
+ errors: 0,
82
+ modified: false,
83
+ warnings: 0
84
+ };
85
+ }
86
+ function mergeResults(target, source) {
87
+ target.errors += source.errors;
88
+ target.warnings += source.warnings;
89
+ target.modified = target.modified || source.modified;
90
+ }
91
+ function checkFiles(pkg, fix) {
92
+ const result = emptyCustomResult();
93
+ const files = pkg.files;
94
+ if (files === void 0) {
95
+ console.warn(chalk.yellow('Publint [custom]: "files" field is missing'));
96
+ result.warnings++;
97
+ }
98
+ if (Array.isArray(files) && !files.includes("README.md")) {
99
+ files.push("README.md");
100
+ console.warn(chalk.yellow('Publint [custom]: added "README.md" to "files"'));
101
+ result.modified = true;
102
+ result.warnings++;
103
+ }
104
+ if (Array.isArray(files) && files.includes("src")) {
105
+ if (fix) {
106
+ pkg.files = files.filter((f) => f !== "src");
107
+ console.warn(chalk.yellow('Publint [custom]: removed "src" from "files"'));
108
+ result.modified = true;
109
+ } else {
110
+ console.warn(chalk.yellow('Publint [custom]: "src" should not be in "files" (use --fix to remove)'));
111
+ }
112
+ result.warnings++;
113
+ }
114
+ return result;
115
+ }
116
+ function checkExportsSource(pkg, fix) {
117
+ const result = emptyCustomResult();
118
+ const exports = pkg.exports;
119
+ if (exports && typeof exports === "object" && hasSourceInExports(exports)) {
120
+ if (fix) {
121
+ removeSourceFromExports(exports);
122
+ console.warn(chalk.yellow('Publint [custom]: removed "source" entries from "exports"'));
123
+ result.modified = true;
124
+ } else {
125
+ console.warn(chalk.yellow('Publint [custom]: "source" entries should not be in "exports" (use --fix to remove)'));
126
+ }
127
+ result.warnings++;
128
+ }
129
+ return result;
130
+ }
131
+ function migrateFieldToExports(pkg, field, exportKey, fix) {
132
+ const result = emptyCustomResult();
133
+ if (pkg[field] === void 0) return result;
134
+ const fieldValue = pkg[field];
135
+ if (!fieldValue.endsWith(".js") && !fieldValue.endsWith(".mjs") && !fieldValue.endsWith(".cjs")) return result;
136
+ if (fix) {
137
+ const exportValue = ensureExportsPath(fieldValue);
138
+ const exports = pkg.exports;
139
+ if (exports && typeof exports === "object") {
140
+ const dot = exports["."];
141
+ if (dot && typeof dot === "object" && !dot[exportKey]) {
142
+ dot[exportKey] = exportValue;
143
+ console.warn(chalk.yellow(`Publint [custom]: migrated "${field}" to "exports['.'].${exportKey}" (${fieldValue})`));
144
+ }
145
+ } else if (!pkg.exports) {
146
+ pkg.exports = { ".": { [exportKey]: exportValue } };
147
+ console.warn(chalk.yellow(`Publint [custom]: migrated "${field}" to "exports" (.\u2192${fieldValue})`));
148
+ }
149
+ delete pkg[field];
150
+ console.warn(chalk.yellow(`Publint [custom]: removed deprecated "${field}" field`));
151
+ result.modified = true;
152
+ } else {
153
+ console.warn(chalk.yellow(`Publint [custom]: "${field}" field is deprecated, use "exports" instead (use --fix to remove)`));
154
+ }
155
+ result.warnings++;
156
+ return result;
157
+ }
158
+ function checkSideEffects(pkg) {
159
+ const result = emptyCustomResult();
160
+ if (pkg.sideEffects !== false) {
161
+ console.warn(chalk.yellow('Publint [custom]: "sideEffects" field should be set to false'));
162
+ result.warnings++;
163
+ }
164
+ return result;
165
+ }
166
+ function checkRootSource(pkg, fix) {
167
+ const result = emptyCustomResult();
168
+ for (const field of ["source", "src"]) {
169
+ if (pkg[field] !== void 0) {
170
+ if (fix) {
171
+ delete pkg[field];
172
+ console.warn(chalk.yellow(`Publint [custom]: removed root-level "${field}" field`));
173
+ result.modified = true;
174
+ } else {
175
+ console.warn(chalk.yellow(`Publint [custom]: root-level "${field}" field should not be in package.json (use --fix to remove)`));
176
+ }
177
+ result.warnings++;
178
+ }
179
+ }
180
+ return result;
181
+ }
182
+ function checkResolutions(pkg) {
183
+ const result = emptyCustomResult();
184
+ if (pkg.resolutions !== void 0) {
185
+ console.warn(chalk.yellow('Publint [custom]: "resolutions" in use'));
186
+ console.warn(chalk.gray(JSON.stringify(pkg.resolutions, null, 2)));
187
+ result.warnings++;
188
+ }
189
+ return result;
190
+ }
191
+ function checkImportToDefault(pkg, fix) {
192
+ const result = emptyCustomResult();
193
+ const exports = pkg.exports;
194
+ if (!exports || typeof exports !== "object") return result;
195
+ if (!hasImportKeyInExports(exports)) return result;
196
+ if (fix) {
197
+ replaceImportWithDefault(exports);
198
+ console.warn(chalk.yellow('Publint [custom]: renamed "import" to "default" in "exports" and ensured "types" siblings'));
199
+ result.modified = true;
200
+ } else {
201
+ console.warn(chalk.yellow('Publint [custom]: "import" entries in "exports" should use "default" instead (use --fix to rename)'));
202
+ }
203
+ result.warnings++;
204
+ return result;
205
+ }
206
+ function checkRootTypes(pkg, fix) {
207
+ const result = emptyCustomResult();
208
+ if (pkg.types === void 0) return result;
209
+ const exports = pkg.exports;
210
+ if (!exports || typeof exports !== "object" || !hasTypesInExports(exports)) return result;
211
+ if (fix) {
212
+ delete pkg.types;
213
+ console.warn(chalk.yellow('Publint [custom]: removed redundant root "types" field (already defined in "exports")'));
214
+ result.modified = true;
215
+ } else {
216
+ console.warn(chalk.yellow('Publint [custom]: root "types" field is redundant when "exports" defines types (use --fix to remove)'));
217
+ }
218
+ result.warnings++;
219
+ return result;
220
+ }
221
+ function customPubLint(pkg, fix = false, exclude = /* @__PURE__ */ new Set()) {
222
+ const result = emptyCustomResult();
223
+ if (!exclude.has("files")) mergeResults(result, checkFiles(pkg, fix));
224
+ if (!exclude.has("source")) mergeResults(result, checkExportsSource(pkg, fix));
225
+ if (!exclude.has("rootSource")) mergeResults(result, checkRootSource(pkg, fix));
226
+ if (!exclude.has("main")) mergeResults(result, migrateFieldToExports(pkg, "main", "default", fix));
227
+ if (!exclude.has("types")) mergeResults(result, migrateFieldToExports(pkg, "types", "types", fix));
228
+ if (!exclude.has("module")) mergeResults(result, migrateFieldToExports(pkg, "module", "default", fix));
229
+ if (!exclude.has("importToDefault")) mergeResults(result, checkImportToDefault(pkg, fix));
230
+ if (!exclude.has("rootTypes")) mergeResults(result, checkRootTypes(pkg, fix));
231
+ if (!exclude.has("sideEffects")) mergeResults(result, checkSideEffects(pkg));
232
+ if (!exclude.has("resolutions")) mergeResults(result, checkResolutions(pkg));
233
+ return [result.errors, result.warnings, result.modified];
234
+ }
235
+ var ALWAYS_INCLUDED_PATTERNS = [
236
+ "package.json",
237
+ "README",
238
+ "README.*",
239
+ "LICENCE",
240
+ "LICENCE.*",
241
+ "LICENSE",
242
+ "LICENSE.*",
243
+ "CHANGELOG",
244
+ "CHANGELOG.*"
245
+ ];
246
+ async function resolvePackFiles(pkgDir, filesField) {
247
+ const patterns = [...ALWAYS_INCLUDED_PATTERNS];
248
+ if (filesField) {
249
+ for (const pattern of filesField) {
250
+ if (pattern.startsWith("!")) {
251
+ patterns.push(pattern);
252
+ } else {
253
+ patterns.push(pattern, `${pattern}/**`);
254
+ }
255
+ }
256
+ }
257
+ const matched = await glob(patterns, {
258
+ cwd: pkgDir,
259
+ nodir: true,
260
+ dot: false
261
+ });
262
+ const files = await Promise.all(
263
+ matched.map(async (rel) => {
264
+ const abs = path.join(pkgDir, rel);
265
+ const data = await fs.readFile(abs, "utf8").catch(() => "");
266
+ return { name: path.join(pkgDir, rel), data };
267
+ })
268
+ );
269
+ return files;
270
+ }
271
+ async function runPublintLibrary(pkgDir, pkg, strict, pack) {
272
+ const { publint } = await import("publint");
273
+ let packOption = false;
274
+ if (pack) {
275
+ const files = await resolvePackFiles(pkgDir, pkg.files);
276
+ packOption = { files };
277
+ }
278
+ const { messages } = await publint({
279
+ level: "suggestion",
280
+ pack: packOption,
281
+ pkgDir,
282
+ strict
283
+ });
284
+ const { formatMessage } = await import("publint/utils");
285
+ for (const message of messages) {
286
+ switch (message.type) {
287
+ case "error": {
288
+ console.error(chalk.red(`[${message.code}] ${formatMessage(message, pkg)}`));
289
+ break;
290
+ }
291
+ case "warning": {
292
+ console.warn(chalk.yellow(`[${message.code}] ${formatMessage(message, pkg)}`));
293
+ break;
294
+ }
295
+ default: {
296
+ console.log(chalk.white(`[${message.code}] ${formatMessage(message, pkg)}`));
297
+ break;
298
+ }
299
+ }
300
+ }
301
+ return {
302
+ errors: messages.filter((message) => message.type === "error").length,
303
+ total: messages.length
304
+ };
305
+ }
306
+ var packagePublint = async ({
307
+ exclude = /* @__PURE__ */ new Set(),
308
+ fix = false,
309
+ pack = true,
310
+ pkgDir: pkgDirParam,
311
+ strict = true,
312
+ verbose: _verbose = false
313
+ } = {}) => {
314
+ const pkgDir = pkgDirParam ?? INIT_CWD();
315
+ const sortedPkg = sortPackageJson(await fs.readFile(`${pkgDir}/package.json`, "utf8"));
316
+ await fs.writeFile(`${pkgDir}/package.json`, sortedPkg);
317
+ const pkg = JSON.parse(await fs.readFile(`${pkgDir}/package.json`, "utf8"));
318
+ const effectiveExclude = pkg.private ? /* @__PURE__ */ new Set([...exclude, ...PUBLISH_ONLY_CHECKS]) : exclude;
319
+ console.log(chalk.green(`Publint: ${String(pkg.name)}${pkg.private ? chalk.gray(" (private)") : ""}`));
320
+ console.log(chalk.gray(pkgDir));
321
+ let libraryErrors = 0;
322
+ if (!effectiveExclude.has("publint")) {
323
+ const library = await runPublintLibrary(pkgDir, pkg, strict, pack);
324
+ libraryErrors = library.errors;
325
+ }
326
+ const [errorCount, _warningCount, modified] = customPubLint(pkg, fix, effectiveExclude);
327
+ if (modified) {
328
+ const sorted = sortPackageJson(JSON.stringify(pkg, null, 2));
329
+ await fs.writeFile(`${pkgDir}/package.json`, sorted);
330
+ }
331
+ return libraryErrors + errorCount;
332
+ };
333
+ export {
334
+ packagePublint
335
+ };
336
+ //# sourceMappingURL=publint.mjs.map