@codefast/cli 0.3.12 → 0.3.13-canary.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 (225) hide show
  1. package/README.md +206 -51
  2. package/dist/analyze-DvtJ3j9m.mjs +92 -0
  3. package/dist/arrange-Bbh62DrU.mjs +107 -0
  4. package/dist/arrange-BqP2DI3w.mjs +8 -0
  5. package/dist/ast-helpers-MDRYuIAk.mjs +115 -0
  6. package/dist/{bin.js → bin.mjs} +4 -1
  7. package/dist/caught-unknown-message-CRhkDWO7.mjs +20 -0
  8. package/dist/collectors-cn-BS8TTQ8O.mjs +61 -0
  9. package/dist/collectors-jsx-D9tL2ZPM.mjs +20 -0
  10. package/dist/collectors-tv-D2PXZaRt.mjs +170 -0
  11. package/dist/colors-BjdkCfGK.mjs +12 -0
  12. package/dist/commands/arrange.mjs +2 -0
  13. package/dist/commands/mirror.mjs +2 -0
  14. package/dist/commands/mirror.test.mjs +48 -0
  15. package/dist/commands/tag.mjs +2 -0
  16. package/dist/config-DVia_f9a.mjs +3 -0
  17. package/dist/config-reporter-SCcWDZc1.mjs +10 -0
  18. package/dist/constants-AtPhF-Ct.mjs +169 -0
  19. package/dist/constants-Bq5wdyLC.mjs +8 -0
  20. package/dist/dirent-list-BSDeRG5i.mjs +14 -0
  21. package/dist/engine-CcWEHSCq.mjs +287 -0
  22. package/dist/engine-DRTdkc5u.mjs +236 -0
  23. package/dist/errors-CFH4w6ic.mjs +15 -0
  24. package/dist/errors-CpU1ogfA.mjs +19 -0
  25. package/dist/formatters-DGE8jJ53.mjs +52 -0
  26. package/dist/group-file-ClW7XdD6.mjs +113 -0
  27. package/dist/grouping-c1grpCQT.mjs +235 -0
  28. package/dist/imports-DSVq1xhB.mjs +54 -0
  29. package/dist/lib/arrange/application/analyze.mjs +2 -0
  30. package/dist/lib/arrange/application/analyze.test.mjs +171 -0
  31. package/dist/lib/arrange/application/group-file.mjs +2 -0
  32. package/dist/lib/arrange/application/group-file.test.mjs +273 -0
  33. package/dist/lib/arrange/application/run-target.mjs +2 -0
  34. package/dist/lib/arrange/application/run-target.test.mjs +97 -0
  35. package/dist/lib/arrange/domain/ast/ast-helpers.mjs +2 -0
  36. package/dist/lib/arrange/domain/ast/ast-helpers.test.mjs +148 -0
  37. package/dist/lib/arrange/domain/ast/collectors-cn.mjs +2 -0
  38. package/dist/lib/arrange/domain/ast/collectors-cn.test.mjs +58 -0
  39. package/dist/lib/arrange/domain/ast/collectors-jsx.mjs +2 -0
  40. package/dist/lib/arrange/domain/ast/collectors-jsx.test.mjs +20 -0
  41. package/dist/lib/arrange/domain/ast/collectors-tv.mjs +2 -0
  42. package/dist/lib/arrange/domain/ast/collectors-tv.test.mjs +145 -0
  43. package/dist/lib/arrange/domain/ast/targets.mjs +2 -0
  44. package/dist/lib/arrange/domain/ast/targets.test.mjs +50 -0
  45. package/dist/lib/arrange/domain/constants.mjs +2 -0
  46. package/dist/lib/arrange/domain/errors.mjs +2 -0
  47. package/dist/lib/arrange/domain/grouping.mjs +2 -0
  48. package/dist/lib/arrange/domain/grouping.test.mjs +186 -0
  49. package/dist/lib/arrange/domain/imports.mjs +2 -0
  50. package/dist/lib/arrange/domain/imports.test.mjs +48 -0
  51. package/dist/lib/arrange/domain/tokenizer.mjs +2 -0
  52. package/dist/lib/arrange/domain/tokenizer.test.mjs +165 -0
  53. package/dist/lib/arrange/index.mjs +16 -0
  54. package/dist/lib/arrange/infra/walk.mjs +2 -0
  55. package/dist/lib/arrange/infra/walk.test.mjs +50 -0
  56. package/dist/lib/arrange/presentation/formatters.mjs +2 -0
  57. package/dist/lib/arrange/presentation/formatters.test.mjs +73 -0
  58. package/dist/lib/arrange/presentation/report.mjs +2 -0
  59. package/dist/lib/config/domain/schema.mjs +2 -0
  60. package/dist/lib/config/index.mjs +4 -0
  61. package/dist/lib/config/infra/loader.mjs +2 -0
  62. package/dist/lib/config/infra/loader.test.mjs +116 -0
  63. package/dist/lib/infra/caught-unknown-message.mjs +2 -0
  64. package/dist/lib/infra/config-reporter.mjs +2 -0
  65. package/dist/lib/infra/node-io.mjs +2 -0
  66. package/dist/lib/infra/workspace/repo-root.mjs +2 -0
  67. package/dist/lib/infra/workspace/repo-root.test.mjs +45 -0
  68. package/dist/lib/mirror/application/engine.mjs +2 -0
  69. package/dist/lib/mirror/application/sync.mjs +2 -0
  70. package/dist/lib/mirror/application/sync.test.mjs +482 -0
  71. package/dist/lib/mirror/domain/constants.mjs +2 -0
  72. package/dist/lib/mirror/domain/errors.mjs +2 -0
  73. package/dist/lib/mirror/domain/types.mjs +1 -0
  74. package/dist/lib/mirror/index.mjs +3 -0
  75. package/dist/lib/mirror/infra/dirent-list.mjs +2 -0
  76. package/dist/lib/mirror/infra/dirent-list.test.mjs +18 -0
  77. package/dist/lib/mirror/infra/package-filter.mjs +2 -0
  78. package/dist/lib/mirror/infra/package-filter.test.mjs +32 -0
  79. package/dist/lib/mirror/infra/path-normalizer.mjs +2 -0
  80. package/dist/lib/mirror/infra/update-pkg.mjs +2 -0
  81. package/dist/lib/mirror/infra/workspace-packages.mjs +2 -0
  82. package/dist/lib/mirror/infra/workspace-packages.test.mjs +167 -0
  83. package/dist/lib/mirror/presentation/reporter.mjs +2 -0
  84. package/dist/lib/tag/application/engine.mjs +2 -0
  85. package/dist/lib/tag/application/engine.test.mjs +159 -0
  86. package/dist/lib/tag/domain/types.mjs +1 -0
  87. package/dist/lib/tag/index.mjs +5 -0
  88. package/dist/lib/tag/infra/target-resolver.mjs +2 -0
  89. package/dist/lib/tag/presentation/colors.mjs +2 -0
  90. package/dist/lib/tag/presentation/tag-presenter.mjs +2 -0
  91. package/dist/lib/tag/presentation/tag-presenter.test.mjs +29 -0
  92. package/dist/loader-DpN-zl5g.mjs +78 -0
  93. package/dist/mirror-CbGiLXKT.mjs +2 -0
  94. package/dist/mirror-DqJE3ejL.mjs +66 -0
  95. package/dist/node-io-DFRbHO6m.mjs +30 -0
  96. package/dist/package-filter-C_8ryqvz.mjs +26 -0
  97. package/dist/path-normalizer-D4ceBO3l.mjs +7 -0
  98. package/dist/program-DR-H4tH3.mjs +34 -0
  99. package/dist/program.mjs +2 -0
  100. package/dist/repo-root-HmtIEm6J.mjs +22 -0
  101. package/dist/report-DYxvw34T.mjs +24 -0
  102. package/dist/reporter-CwIe_tAM.mjs +108 -0
  103. package/dist/run-target-CJWrqNT4.mjs +65 -0
  104. package/dist/schema-Or8RAARd.mjs +25 -0
  105. package/dist/sync-e1Sp-shi.mjs +157 -0
  106. package/dist/tag-Cd9JujU5.mjs +2 -0
  107. package/dist/tag-hEKVZ_-7.mjs +58 -0
  108. package/dist/tag-presenter-Cs66UBsH.mjs +63 -0
  109. package/dist/target-resolver-CR3FXMTy.mjs +170 -0
  110. package/dist/targets-pCTslnFh.mjs +106 -0
  111. package/dist/tokenizer-CeZx73Zu.mjs +216 -0
  112. package/dist/update-pkg-CnGfjWBy.mjs +37 -0
  113. package/dist/walk-DjgQn66n.mjs +33 -0
  114. package/dist/workspace-packages-K2NYTHJq.mjs +159 -0
  115. package/package.json +11 -11
  116. package/dist/bin.d.ts +0 -3
  117. package/dist/bin.d.ts.map +0 -1
  118. package/dist/commands/arrange.d.ts +0 -3
  119. package/dist/commands/arrange.d.ts.map +0 -1
  120. package/dist/commands/arrange.js +0 -114
  121. package/dist/commands/mirror.d.ts +0 -4
  122. package/dist/commands/mirror.d.ts.map +0 -1
  123. package/dist/commands/mirror.js +0 -63
  124. package/dist/lib/arrange/analyze.d.ts +0 -4
  125. package/dist/lib/arrange/analyze.d.ts.map +0 -1
  126. package/dist/lib/arrange/analyze.js +0 -105
  127. package/dist/lib/arrange/ast/collectors-cn.d.ts +0 -10
  128. package/dist/lib/arrange/ast/collectors-cn.d.ts.map +0 -1
  129. package/dist/lib/arrange/ast/collectors-cn.js +0 -84
  130. package/dist/lib/arrange/ast/collectors-jsx.d.ts +0 -4
  131. package/dist/lib/arrange/ast/collectors-jsx.d.ts.map +0 -1
  132. package/dist/lib/arrange/ast/collectors-jsx.js +0 -18
  133. package/dist/lib/arrange/ast/collectors-tv.d.ts +0 -13
  134. package/dist/lib/arrange/ast/collectors-tv.d.ts.map +0 -1
  135. package/dist/lib/arrange/ast/collectors-tv.js +0 -273
  136. package/dist/lib/arrange/ast/targets.d.ts +0 -8
  137. package/dist/lib/arrange/ast/targets.d.ts.map +0 -1
  138. package/dist/lib/arrange/ast/targets.js +0 -143
  139. package/dist/lib/arrange/ast/utils.d.ts +0 -36
  140. package/dist/lib/arrange/ast/utils.d.ts.map +0 -1
  141. package/dist/lib/arrange/ast/utils.js +0 -138
  142. package/dist/lib/arrange/constants.d.ts +0 -68
  143. package/dist/lib/arrange/constants.d.ts.map +0 -1
  144. package/dist/lib/arrange/constants.js +0 -179
  145. package/dist/lib/arrange/errors.d.ts +0 -14
  146. package/dist/lib/arrange/errors.d.ts.map +0 -1
  147. package/dist/lib/arrange/errors.js +0 -16
  148. package/dist/lib/arrange/formatters.d.ts +0 -16
  149. package/dist/lib/arrange/formatters.d.ts.map +0 -1
  150. package/dist/lib/arrange/formatters.js +0 -57
  151. package/dist/lib/arrange/group-file.d.ts +0 -4
  152. package/dist/lib/arrange/group-file.d.ts.map +0 -1
  153. package/dist/lib/arrange/group-file.js +0 -115
  154. package/dist/lib/arrange/grouping.d.ts +0 -41
  155. package/dist/lib/arrange/grouping.d.ts.map +0 -1
  156. package/dist/lib/arrange/grouping.js +0 -280
  157. package/dist/lib/arrange/imports.d.ts +0 -6
  158. package/dist/lib/arrange/imports.d.ts.map +0 -1
  159. package/dist/lib/arrange/imports.js +0 -74
  160. package/dist/lib/arrange/report.d.ts +0 -4
  161. package/dist/lib/arrange/report.d.ts.map +0 -1
  162. package/dist/lib/arrange/report.js +0 -37
  163. package/dist/lib/arrange/run-target.d.ts +0 -4
  164. package/dist/lib/arrange/run-target.d.ts.map +0 -1
  165. package/dist/lib/arrange/run-target.js +0 -28
  166. package/dist/lib/arrange/tokenizer.d.ts +0 -37
  167. package/dist/lib/arrange/tokenizer.d.ts.map +0 -1
  168. package/dist/lib/arrange/tokenizer.js +0 -390
  169. package/dist/lib/arrange/types.d.ts +0 -104
  170. package/dist/lib/arrange/types.d.ts.map +0 -1
  171. package/dist/lib/arrange/types.js +0 -7
  172. package/dist/lib/arrange/walk.d.ts +0 -4
  173. package/dist/lib/arrange/walk.d.ts.map +0 -1
  174. package/dist/lib/arrange/walk.js +0 -34
  175. package/dist/lib/arrange.d.ts +0 -41
  176. package/dist/lib/arrange.d.ts.map +0 -1
  177. package/dist/lib/arrange.js +0 -38
  178. package/dist/lib/infra/fs-contract.d.ts +0 -28
  179. package/dist/lib/infra/fs-contract.d.ts.map +0 -1
  180. package/dist/lib/infra/node-io.d.ts +0 -4
  181. package/dist/lib/infra/node-io.d.ts.map +0 -1
  182. package/dist/lib/infra/node-io.js +0 -27
  183. package/dist/lib/mirror/config.d.ts +0 -7
  184. package/dist/lib/mirror/config.d.ts.map +0 -1
  185. package/dist/lib/mirror/config.js +0 -146
  186. package/dist/lib/mirror/constants.d.ts +0 -10
  187. package/dist/lib/mirror/constants.d.ts.map +0 -1
  188. package/dist/lib/mirror/constants.js +0 -13
  189. package/dist/lib/mirror/engine.d.ts +0 -12
  190. package/dist/lib/mirror/engine.d.ts.map +0 -1
  191. package/dist/lib/mirror/engine.js +0 -248
  192. package/dist/lib/mirror/errors.d.ts +0 -10
  193. package/dist/lib/mirror/errors.d.ts.map +0 -1
  194. package/dist/lib/mirror/errors.js +0 -12
  195. package/dist/lib/mirror/package-filter.d.ts +0 -8
  196. package/dist/lib/mirror/package-filter.d.ts.map +0 -1
  197. package/dist/lib/mirror/package-filter.js +0 -33
  198. package/dist/lib/mirror/reporter.d.ts +0 -24
  199. package/dist/lib/mirror/reporter.d.ts.map +0 -1
  200. package/dist/lib/mirror/reporter.js +0 -126
  201. package/dist/lib/mirror/sync.d.ts +0 -4
  202. package/dist/lib/mirror/sync.d.ts.map +0 -1
  203. package/dist/lib/mirror/sync.js +0 -135
  204. package/dist/lib/mirror/types.d.ts +0 -81
  205. package/dist/lib/mirror/types.d.ts.map +0 -1
  206. package/dist/lib/mirror/update-pkg.d.ts +0 -13
  207. package/dist/lib/mirror/update-pkg.d.ts.map +0 -1
  208. package/dist/lib/mirror/update-pkg.js +0 -39
  209. package/dist/lib/mirror/workspace-packages.d.ts +0 -26
  210. package/dist/lib/mirror/workspace-packages.d.ts.map +0 -1
  211. package/dist/lib/mirror/workspace-packages.js +0 -160
  212. package/dist/lib/mirror.d.ts +0 -7
  213. package/dist/lib/mirror.d.ts.map +0 -1
  214. package/dist/lib/mirror.js +0 -5
  215. package/dist/lib/repo-root.d.ts +0 -7
  216. package/dist/lib/repo-root.d.ts.map +0 -1
  217. package/dist/lib/repo-root.js +0 -23
  218. package/dist/lib/shared/utils.d.ts +0 -9
  219. package/dist/lib/shared/utils.d.ts.map +0 -1
  220. package/dist/lib/shared/utils.js +0 -12
  221. package/dist/program.d.ts +0 -4
  222. package/dist/program.d.ts.map +0 -1
  223. package/dist/program.js +0 -38
  224. /package/dist/lib/{infra/fs-contract.js → arrange/domain/types.mjs} +0 -0
  225. /package/dist/lib/{mirror/types.js → infra/fs-contract.mjs} +0 -0
@@ -1,126 +0,0 @@
1
- import process from "node:process";
2
- const Colors = {
3
- RESET: "\x1b[0m",
4
- BOLD: "\x1b[1m",
5
- DIM: "\x1b[2m",
6
- GREEN: "\x1b[32m",
7
- YELLOW: "\x1b[33m",
8
- CYAN: "\x1b[36m",
9
- GRAY: "\x1b[90m",
10
- MAGENTA: "\x1b[35m",
11
- BRIGHT_GREEN: "\x1b[92m",
12
- BRIGHT_YELLOW: "\x1b[93m",
13
- BRIGHT_CYAN: "\x1b[96m",
14
- disable() {
15
- for (const key of Object.keys(this)) {
16
- if (typeof this[key] === "string") {
17
- this[key] = "";
18
- }
19
- }
20
- },
21
- };
22
- export function configureMirrorColors(noColor) {
23
- if (!process.stdout.isTTY || noColor) {
24
- Colors.disable();
25
- }
26
- }
27
- export function printMirrorConfigWarnings(logger, warnings) {
28
- const { out } = logger;
29
- for (const w of warnings) {
30
- out(`${Colors.YELLOW}⚠ ${w}${Colors.RESET}`);
31
- }
32
- }
33
- export function mirrorGlobWarning(logger, message) {
34
- const { out } = logger;
35
- out(`${Colors.YELLOW}⚠ ${message}${Colors.RESET}`);
36
- }
37
- export function logSkippedWorkspacePackage(logger, index, total, displayName, reason) {
38
- const { out } = logger;
39
- const progress = `${Colors.DIM}[${index}/${total}]${Colors.RESET}`;
40
- out(`${progress} ${Colors.GRAY}○${Colors.RESET} ${Colors.DIM}${displayName}${Colors.RESET}`);
41
- out(` ${Colors.DIM}└─${Colors.RESET} ${Colors.GRAY}Skipped: ${reason}${Colors.RESET}`);
42
- out("");
43
- }
44
- export function mirrorBanner(logger) {
45
- const { out } = logger;
46
- out(`\n${Colors.BOLD}${Colors.CYAN}📦 Mirror — package exports${Colors.RESET}`);
47
- out(`${Colors.DIM}${"═".repeat(60)}${Colors.RESET}\n`);
48
- }
49
- export function mirrorProcessingMode(logger, mode) {
50
- const { out } = logger;
51
- if (mode.kind === "single") {
52
- out(`${Colors.DIM}Processing single package...${Colors.RESET}\n`);
53
- return;
54
- }
55
- switch (mode.source) {
56
- case "default-patterns":
57
- out(`${Colors.DIM}Discovering workspace packages using default patterns (packages/*)…${Colors.RESET}\n`);
58
- break;
59
- case "pnpm-workspace-yaml":
60
- out(`${Colors.DIM}Discovering workspace packages from pnpm-workspace.yaml…${Colors.RESET}\n`);
61
- break;
62
- case "declared-empty":
63
- out(`${Colors.DIM}pnpm-workspace.yaml declares an empty workspace package list.${Colors.RESET}\n`);
64
- break;
65
- }
66
- }
67
- export function mirrorNoPackages(logger) {
68
- logger.out(`${Colors.YELLOW}⚠ No packages found${Colors.RESET}`);
69
- }
70
- export function logPackageSuccess(logger, index, total, pkgStats, res, verbose) {
71
- const { out } = logger;
72
- const progress = `${Colors.DIM}[${index}/${total}]${Colors.RESET}`;
73
- out(`${progress} ${Colors.BRIGHT_GREEN}✓${Colors.RESET} ${Colors.BOLD}${pkgStats.name}${Colors.RESET}`);
74
- if (verbose) {
75
- out(` ${Colors.DIM}├─${Colors.RESET} Path: ${pkgStats.path}`);
76
- if (pkgStats.hasTransform)
77
- out(` ${Colors.DIM}├─${Colors.RESET} ${Colors.CYAN}Custom path transformation${Colors.RESET}`);
78
- if (pkgStats.cssConfigStatus)
79
- out(` ${Colors.DIM}├─${Colors.RESET} ${Colors.CYAN}${pkgStats.cssConfigStatus === "disabled" ? "CSS disabled" : "CSS configured"}${Colors.RESET}`);
80
- }
81
- const breakdown = [];
82
- if (res.jsCount > 0)
83
- breakdown.push(`${Colors.GREEN}${res.jsCount} modules${Colors.RESET}`);
84
- if (res.cssCount > 0)
85
- breakdown.push(`${Colors.MAGENTA}${res.cssCount} CSS${Colors.RESET}`);
86
- if (pkgStats.customExports > 0)
87
- breakdown.push(`${Colors.YELLOW}${pkgStats.customExports} custom${Colors.RESET}`);
88
- if (breakdown.length > 0) {
89
- out(` ${Colors.DIM}└─${Colors.RESET} ${breakdown.join(" + ")} = ${Colors.BRIGHT_CYAN}${pkgStats.totalExports} exports${Colors.RESET}`);
90
- }
91
- else {
92
- out(` ${Colors.DIM}└─${Colors.RESET} ${Colors.BRIGHT_CYAN}${pkgStats.totalExports} exports${Colors.RESET}`);
93
- }
94
- out("");
95
- }
96
- export function logPackageError(logger, index, total, displayName, errValue, verbose) {
97
- const { out, err: errLine } = logger;
98
- out(`${Colors.DIM}[${index}/${total}]${Colors.RESET} ${Colors.YELLOW}✗${Colors.RESET} ${Colors.BOLD}${displayName}${Colors.RESET}`);
99
- out(` ${Colors.DIM}└─${Colors.RESET} ${Colors.YELLOW}Error: ${String(errValue)}${Colors.RESET}\n`);
100
- if (verbose)
101
- errLine(errValue instanceof Error && errValue.stack ? errValue.stack : String(errValue));
102
- }
103
- export function mirrorSummarySeparator(logger) {
104
- logger.out(`${Colors.DIM}${"═".repeat(60)}${Colors.RESET}`);
105
- }
106
- export function mirrorSummary(logger, stats, elapsedSeconds) {
107
- const { out } = logger;
108
- out(`${Colors.BOLD}📊 Summary${Colors.RESET} ${Colors.DIM}(completed in ${elapsedSeconds.toFixed(2)}s)${Colors.RESET}\n`);
109
- out(` ${Colors.BOLD}Packages:${Colors.RESET}`);
110
- out(` ${Colors.DIM}├─${Colors.RESET} Processed: ${Colors.GREEN}${stats.packagesProcessed}${Colors.RESET}`);
111
- if (stats.packagesSkipped > 0)
112
- out(` ${Colors.DIM}├─${Colors.RESET} Skipped: ${Colors.GRAY}${stats.packagesSkipped}${Colors.RESET}`);
113
- if (stats.packagesErrored > 0)
114
- out(` ${Colors.DIM}├─${Colors.RESET} Errors: ${Colors.YELLOW}${stats.packagesErrored}${Colors.RESET}`);
115
- out(` ${Colors.DIM}└─${Colors.RESET} Total found: ${stats.packagesFound}\n`);
116
- out(` ${Colors.BOLD}Exports:${Colors.RESET}`);
117
- out(` ${Colors.DIM}├─${Colors.RESET} JS Modules: ${Colors.CYAN}${stats.totalJsModules}${Colors.RESET}`);
118
- out(` ${Colors.DIM}├─${Colors.RESET} CSS Files: ${Colors.MAGENTA}${stats.totalCssExports}${Colors.RESET}`);
119
- out(` ${Colors.DIM}└─${Colors.RESET} Total: ${Colors.BRIGHT_CYAN}${stats.totalExports}${Colors.RESET}\n`);
120
- out(`${Colors.DIM}${"═".repeat(60)}${Colors.RESET}\n`);
121
- }
122
- export function mirrorFatalError(logger, e) {
123
- const { out, err: errLine } = logger;
124
- out(`${Colors.YELLOW}Fatal error: ${String(e)}${Colors.RESET}`);
125
- errLine(e instanceof Error && e.stack ? e.stack : String(e));
126
- }
@@ -1,4 +0,0 @@
1
- import type { MirrorOptions } from "#lib/mirror/types";
2
- /** @returns Process exit code (0 or 1). */
3
- export declare function runMirrorSync(opts: MirrorOptions): Promise<number>;
4
- //# sourceMappingURL=sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/lib/mirror/sync.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAA6B,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AA6GhG,2CAA2C;AAC3C,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAuExE"}
@@ -1,135 +0,0 @@
1
- import path from "node:path";
2
- import { createNodeCliFs, createNodeCliLogger } from "#lib/infra/node-io";
3
- import { loadMirrorConfig } from "#lib/mirror/config";
4
- import { DIST_DIR, PACKAGE_JSON } from "#lib/mirror/constants";
5
- import { createPathTransform, generateExports, normalizePath } from "#lib/mirror/engine";
6
- import { resolvePackageFilterUnderRoot } from "#lib/mirror/package-filter";
7
- import { configureMirrorColors, logPackageError, logPackageSuccess, logSkippedWorkspacePackage, mirrorBanner, mirrorFatalError, mirrorNoPackages, mirrorProcessingMode, mirrorSummary, mirrorSummarySeparator, printMirrorConfigWarnings, } from "#lib/mirror/reporter";
8
- import { readPackageJsonDisplayName, resolvePackageDisplayName, writePackageJsonExportsAtomic, } from "#lib/mirror/update-pkg";
9
- import { findWorkspacePackageRelPaths } from "#lib/mirror/workspace-packages";
10
- async function processPackage(fs, logger, rootDir, packagePathStr, index, total, config, verbose, stats) {
11
- const packageDir = path.resolve(rootDir, packagePathStr);
12
- const distDir = path.join(packageDir, DIST_DIR);
13
- const packageJsonPath = path.join(packageDir, PACKAGE_JSON);
14
- const relativePath = normalizePath(path.relative(rootDir, packageDir));
15
- const pkgName = path.basename(packageDir);
16
- const pkgStats = {
17
- name: pkgName,
18
- path: packageDir,
19
- jsModules: 0,
20
- cssExports: 0,
21
- customExports: 0,
22
- totalExports: 0,
23
- hasTransform: false,
24
- cssConfigStatus: "",
25
- skipped: false,
26
- skipReason: "",
27
- error: null,
28
- };
29
- if (config.skipPackages?.includes(relativePath)) {
30
- pkgStats.skipped = true;
31
- pkgStats.skipReason = "configured to skip";
32
- stats.packagesSkipped++;
33
- pkgStats.name = await readPackageJsonDisplayName(fs, packageJsonPath, pkgName);
34
- logSkippedWorkspacePackage(logger, index, total, pkgStats.name, pkgStats.skipReason);
35
- return pkgStats;
36
- }
37
- if (!fs.existsSync(packageJsonPath)) {
38
- pkgStats.skipped = true;
39
- pkgStats.skipReason = "package.json not found";
40
- stats.packagesSkipped++;
41
- logSkippedWorkspacePackage(logger, index, total, pkgName, pkgStats.skipReason);
42
- return pkgStats;
43
- }
44
- if (!fs.existsSync(distDir)) {
45
- pkgStats.skipped = true;
46
- pkgStats.skipReason = "dist/ not found";
47
- stats.packagesSkipped++;
48
- pkgStats.name = await readPackageJsonDisplayName(fs, packageJsonPath, pkgName);
49
- logSkippedWorkspacePackage(logger, index, total, pkgStats.name, pkgStats.skipReason);
50
- return pkgStats;
51
- }
52
- try {
53
- const pkgContent = await fs.readFile(packageJsonPath, "utf8");
54
- const packageJson = JSON.parse(pkgContent);
55
- pkgStats.name = resolvePackageDisplayName(packageJson, pkgName);
56
- const pathTransform = createPathTransform(config, relativePath);
57
- pkgStats.hasTransform = !!pathTransform;
58
- const cssConfig = config.cssExports?.[relativePath];
59
- if (cssConfig === false)
60
- pkgStats.cssConfigStatus = "disabled";
61
- else if (cssConfig !== undefined)
62
- pkgStats.cssConfigStatus = "configured";
63
- const customExports = config.customExports?.[relativePath] || {};
64
- const generatedExports = await generateExports(fs, distDir, pathTransform, cssConfig, customExports);
65
- await writePackageJsonExportsAtomic(fs, packageJsonPath, generatedExports.exports);
66
- pkgStats.jsModules = generatedExports.jsCount;
67
- pkgStats.cssExports = generatedExports.cssCount;
68
- pkgStats.customExports = Object.keys(customExports).length;
69
- pkgStats.totalExports = Object.keys(generatedExports.exports).length;
70
- stats.packagesProcessed++;
71
- stats.totalExports += pkgStats.totalExports;
72
- stats.totalJsModules += pkgStats.jsModules;
73
- stats.totalCssExports += pkgStats.cssExports;
74
- logPackageSuccess(logger, index, total, pkgStats, generatedExports, verbose);
75
- }
76
- catch (e) {
77
- pkgStats.error = String(e);
78
- stats.packagesErrored++;
79
- const displayName = await readPackageJsonDisplayName(fs, packageJsonPath, pkgName);
80
- logPackageError(logger, index, total, displayName, e, verbose);
81
- }
82
- return pkgStats;
83
- }
84
- /** @returns Process exit code (0 or 1). */
85
- export async function runMirrorSync(opts) {
86
- const fs = opts.fs ?? createNodeCliFs();
87
- const logger = opts.logger ?? createNodeCliLogger();
88
- configureMirrorColors(!!opts.noColor);
89
- mirrorBanner(logger);
90
- const startTime = performance.now();
91
- const verbose = !!opts.verbose;
92
- try {
93
- const { config, warnings } = await loadMirrorConfig(opts.rootDir, fs);
94
- printMirrorConfigWarnings(logger, warnings);
95
- const stats = {
96
- packagesFound: 0,
97
- packagesProcessed: 0,
98
- packagesSkipped: 0,
99
- packagesErrored: 0,
100
- totalExports: 0,
101
- totalJsModules: 0,
102
- totalCssExports: 0,
103
- packageDetails: [],
104
- };
105
- let targetPackages = [];
106
- if (opts.packageFilter) {
107
- const safe = resolvePackageFilterUnderRoot(opts.rootDir, opts.packageFilter);
108
- targetPackages = [safe];
109
- mirrorProcessingMode(logger, { kind: "single" });
110
- }
111
- else {
112
- const { relPaths, multiSource } = await findWorkspacePackageRelPaths(opts.rootDir, fs, logger);
113
- targetPackages = relPaths;
114
- mirrorProcessingMode(logger, { kind: "multi", source: multiSource });
115
- }
116
- stats.packagesFound = targetPackages.length;
117
- if (targetPackages.length === 0) {
118
- mirrorNoPackages(logger);
119
- return 0;
120
- }
121
- let nextPackageOrdinal = 1;
122
- for (const pkgPath of targetPackages) {
123
- const pkgStats = await processPackage(fs, logger, opts.rootDir, pkgPath, nextPackageOrdinal++, targetPackages.length, config, verbose, stats);
124
- stats.packageDetails.push(pkgStats);
125
- }
126
- const elapsed = (performance.now() - startTime) / 1000;
127
- mirrorSummarySeparator(logger);
128
- mirrorSummary(logger, stats, elapsed);
129
- return stats.packagesErrored > 0 ? 1 : 0;
130
- }
131
- catch (e) {
132
- mirrorFatalError(logger, e);
133
- return 1;
134
- }
135
- }
@@ -1,81 +0,0 @@
1
- import type { CliFs, CliLogger } from "#lib/infra/fs-contract";
2
- export interface ExportEntry {
3
- types: string;
4
- import?: string;
5
- require?: string;
6
- }
7
- /** Final `package.json#exports` map (conditional exports + string shims + `./package.json`). */
8
- export type ExportMapData = Record<string, ExportEntry | string>;
9
- /** Alias for the exports object shape produced by the mirror engine. */
10
- export type ExportMap = ExportMapData;
11
- export interface ModuleFiles {
12
- js: string | null;
13
- cjs: string | null;
14
- dts: string | null;
15
- }
16
- export interface Module {
17
- path: string;
18
- files: ModuleFiles;
19
- }
20
- export interface MirrorConfig {
21
- skipPackages?: string[];
22
- pathTransformations?: Record<string, {
23
- removePrefix?: string;
24
- }>;
25
- customExports?: Record<string, Record<string, string>>;
26
- cssExports?: Record<string, boolean | {
27
- enabled?: boolean;
28
- customExports?: Record<string, string>;
29
- forceExportFiles?: boolean;
30
- }>;
31
- }
32
- /** Parsed `package.json` — only fields mirror reads/writes are typed strictly. */
33
- export type PackageJsonShape = {
34
- name?: unknown;
35
- exports?: unknown;
36
- [key: string]: unknown;
37
- };
38
- export interface GenerateExportsResult {
39
- exports: ExportMapData;
40
- jsCount: number;
41
- cssCount: number;
42
- }
43
- export interface PackageStats {
44
- name: string;
45
- path: string;
46
- jsModules: number;
47
- cssExports: number;
48
- customExports: number;
49
- totalExports: number;
50
- hasTransform: boolean;
51
- cssConfigStatus: "disabled" | "configured" | "";
52
- skipped: boolean;
53
- skipReason: string;
54
- error: string | null;
55
- }
56
- export interface GlobalStats {
57
- packagesFound: number;
58
- packagesProcessed: number;
59
- packagesSkipped: number;
60
- packagesErrored: number;
61
- totalExports: number;
62
- totalJsModules: number;
63
- totalCssExports: number;
64
- packageDetails: PackageStats[];
65
- }
66
- /** How workspace packages were resolved when scanning the repo (for logging / UX). */
67
- export type WorkspaceMultiDiscoverySource = "default-patterns" | "pnpm-workspace-yaml" | "declared-empty";
68
- export type FindWorkspacePackagesResult = {
69
- relPaths: string[];
70
- multiSource: WorkspaceMultiDiscoverySource;
71
- };
72
- export interface MirrorOptions {
73
- rootDir: string;
74
- verbose?: boolean;
75
- noColor?: boolean;
76
- /** Path under `rootDir` (relative or absolute within the repo), e.g. `packages/ui`. */
77
- packageFilter?: string;
78
- fs?: CliFs;
79
- logger?: CliLogger;
80
- }
81
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/mirror/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,gGAAgG;AAChG,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC,CAAC;AAEjE,wEAAwE;AACxE,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CACjB,MAAM,EACJ,OAAO,GACP;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,CAC5F,CAAC;CACH;AAED,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,UAAU,GAAG,YAAY,GAAG,EAAE,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,YAAY,EAAE,CAAC;CAChC;AAED,sFAAsF;AACtF,MAAM,MAAM,6BAA6B,GACrC,kBAAkB,GAClB,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,6BAA6B,CAAC;CAC5C,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB"}
@@ -1,13 +0,0 @@
1
- import type { CliFs } from "#lib/infra/fs-contract";
2
- import type { ExportMapData } from "#lib/mirror/types";
3
- /** Shared rule: show `package.json#name` when it is a non-empty string; else folder basename. */
4
- export declare function resolvePackageDisplayName(packageJson: {
5
- name?: unknown;
6
- }, folderBasename: string): string;
7
- export declare function readPackageJsonDisplayName(fs: CliFs, packageJsonPath: string, folderBasename: string): Promise<string>;
8
- /**
9
- * Writes `exports` into `package.json` via a temp file + rename (atomic on same volume).
10
- * Preserves a trailing newline after JSON.
11
- */
12
- export declare function writePackageJsonExportsAtomic(fs: CliFs, packageJsonPath: string, nextExports: ExportMapData): Promise<void>;
13
- //# sourceMappingURL=update-pkg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-pkg.d.ts","sourceRoot":"","sources":["../../../src/lib/mirror/update-pkg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAEzE,iGAAiG;AACjG,wBAAgB,yBAAyB,CACvC,WAAW,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAC/B,cAAc,EAAE,MAAM,GACrB,MAAM,CAKR;AAED,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,KAAK,EACT,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,EAAE,EAAE,KAAK,EACT,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,IAAI,CAAC,CAmBf"}
@@ -1,39 +0,0 @@
1
- import { MirrorError, MirrorErrorCode } from "#lib/mirror/errors";
2
- /** Shared rule: show `package.json#name` when it is a non-empty string; else folder basename. */
3
- export function resolvePackageDisplayName(packageJson, folderBasename) {
4
- const declaredName = packageJson.name;
5
- return typeof declaredName === "string" && declaredName.length > 0
6
- ? declaredName
7
- : folderBasename;
8
- }
9
- export async function readPackageJsonDisplayName(fs, packageJsonPath, folderBasename) {
10
- if (!fs.existsSync(packageJsonPath))
11
- return folderBasename;
12
- try {
13
- const raw = await fs.readFile(packageJsonPath, "utf8");
14
- const parsed = JSON.parse(raw);
15
- return resolvePackageDisplayName(parsed, folderBasename);
16
- }
17
- catch {
18
- return folderBasename;
19
- }
20
- }
21
- /**
22
- * Writes `exports` into `package.json` via a temp file + rename (atomic on same volume).
23
- * Preserves a trailing newline after JSON.
24
- */
25
- export async function writePackageJsonExportsAtomic(fs, packageJsonPath, nextExports) {
26
- const raw = await fs.readFile(packageJsonPath, "utf8");
27
- const packageJson = JSON.parse(raw);
28
- packageJson.exports = nextExports;
29
- const serialized = JSON.stringify(packageJson, null, 2) + "\n";
30
- const tmpPath = `${packageJsonPath}.tmp`;
31
- await fs.writeFile(tmpPath, serialized, "utf8");
32
- try {
33
- await fs.rename(tmpPath, packageJsonPath);
34
- }
35
- catch (e) {
36
- await fs.unlink(tmpPath).catch(() => { });
37
- throw new MirrorError(MirrorErrorCode.PACKAGE_WRITE, `Failed to atomically update ${packageJsonPath}: ${String(e)}`, e instanceof Error ? { cause: e } : undefined);
38
- }
39
- }
@@ -1,26 +0,0 @@
1
- import type { CliFs, CliLogger } from "#lib/infra/fs-contract";
2
- import type { FindWorkspacePackagesResult } from "#lib/mirror/types";
3
- /** Turn a pnpm `packages` glob into a `globSync` pattern that finds `package.json` files. */
4
- export declare function workspacePatternToPackageJsonGlob(pattern: string): string;
5
- export declare function splitWorkspacePackageEntries(raw: unknown): {
6
- include: string[];
7
- exclude: string[];
8
- };
9
- /**
10
- * Reads `packages` from a parsed pnpm workspace document.
11
- * @throws If the document is invalid or `packages` is present but not an array.
12
- */
13
- export declare function parsePnpmWorkspaceDocument(doc: unknown): {
14
- include: string[];
15
- exclude: string[];
16
- hasPackagesKey: boolean;
17
- /** True only when `packages` exists and the YAML array is literally `[]`. */
18
- isEmptyPackagesArray: boolean;
19
- };
20
- /**
21
- * Workspace package directories relative to `rootDir` (POSIX slashes), sorted.
22
- * Reads `pnpm-workspace.yaml` when present; otherwise uses `packages/*`.
23
- * Only paths with a `package.json` are returned (same practical rule as pnpm).
24
- */
25
- export declare function findWorkspacePackageRelPaths(rootDir: string, fs: CliFs, logger: CliLogger): Promise<FindWorkspacePackagesResult>;
26
- //# sourceMappingURL=workspace-packages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-packages.d.ts","sourceRoot":"","sources":["../../../src/lib/mirror/workspace-packages.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAG/D,OAAO,KAAK,EAAE,2BAA2B,EAAiC,MAAM,mBAAmB,CAAC;AAiBpG,6FAA6F;AAC7F,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAYA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG;IACxD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,6EAA6E;IAC7E,oBAAoB,EAAE,OAAO,CAAC;CAC/B,CAuBA;AAiCD;;;;GAIG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,KAAK,EACT,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,2BAA2B,CAAC,CAgEtC"}
@@ -1,160 +0,0 @@
1
- import { globSync } from "node:fs";
2
- import path from "node:path";
3
- import picomatch from "picomatch";
4
- import { parse as parseYaml } from "yaml";
5
- import { normalizePath } from "#lib/mirror/engine";
6
- import { mirrorGlobWarning } from "#lib/mirror/reporter";
7
- const PNPM_WORKSPACE = "pnpm-workspace.yaml";
8
- /** Default when the workspace file is missing or has no `packages` key. */
9
- const DEFAULT_INCLUDE = ["packages/*"];
10
- function toPosix(filePath) {
11
- return filePath.split(path.sep).join("/");
12
- }
13
- function isGlobPermissionError(err) {
14
- if (typeof err !== "object" || err === null || !("code" in err))
15
- return false;
16
- const code = err.code;
17
- return code === "EACCES" || code === "EPERM";
18
- }
19
- /** Turn a pnpm `packages` glob into a `globSync` pattern that finds `package.json` files. */
20
- export function workspacePatternToPackageJsonGlob(pattern) {
21
- const normalizedPattern = toPosix(pattern.trim()).replace(/\/+$/, "");
22
- if (!normalizedPattern)
23
- return "**/package.json";
24
- return `${normalizedPattern}/package.json`;
25
- }
26
- export function splitWorkspacePackageEntries(raw) {
27
- const include = [];
28
- const exclude = [];
29
- if (!Array.isArray(raw))
30
- return { include, exclude };
31
- for (const entry of raw) {
32
- if (typeof entry !== "string")
33
- continue;
34
- const trimmed = entry.trim();
35
- if (!trimmed)
36
- continue;
37
- if (trimmed.startsWith("!"))
38
- exclude.push(trimmed.slice(1).trim());
39
- else
40
- include.push(trimmed);
41
- }
42
- return { include, exclude };
43
- }
44
- /**
45
- * Reads `packages` from a parsed pnpm workspace document.
46
- * @throws If the document is invalid or `packages` is present but not an array.
47
- */
48
- export function parsePnpmWorkspaceDocument(doc) {
49
- if (doc === null || doc === undefined) {
50
- throw new Error(`${PNPM_WORKSPACE} root document must be an object (got empty or null)`);
51
- }
52
- if (typeof doc !== "object" || Array.isArray(doc)) {
53
- throw new Error(`${PNPM_WORKSPACE} root must be a mapping, not an array or scalar`);
54
- }
55
- const parsedDoc = doc;
56
- if (!Object.prototype.hasOwnProperty.call(parsedDoc, "packages")) {
57
- return { include: [], exclude: [], hasPackagesKey: false, isEmptyPackagesArray: false };
58
- }
59
- const pkgs = parsedDoc.packages;
60
- if (!Array.isArray(pkgs)) {
61
- throw new Error(`${PNPM_WORKSPACE} field "packages" must be an array`);
62
- }
63
- if (pkgs.length === 0) {
64
- return { include: [], exclude: [], hasPackagesKey: true, isEmptyPackagesArray: true };
65
- }
66
- return {
67
- ...splitWorkspacePackageEntries(pkgs),
68
- hasPackagesKey: true,
69
- isEmptyPackagesArray: false,
70
- };
71
- }
72
- async function readWorkspaceYaml(rootDir, fs) {
73
- const workspaceYamlPath = path.join(rootDir, PNPM_WORKSPACE);
74
- if (!fs.existsSync(workspaceYamlPath)) {
75
- return { exists: false };
76
- }
77
- let raw;
78
- try {
79
- raw = await fs.readFile(workspaceYamlPath, "utf8");
80
- }
81
- catch (error) {
82
- throw new Error(`Failed to read ${PNPM_WORKSPACE}: ${error instanceof Error ? error.message : String(error)}`);
83
- }
84
- let doc;
85
- try {
86
- doc = parseYaml(raw);
87
- }
88
- catch (error) {
89
- throw new Error(`Failed to parse ${PNPM_WORKSPACE}: ${error instanceof Error ? error.message : String(error)}`);
90
- }
91
- if (doc === null || doc === undefined) {
92
- throw new Error(`${PNPM_WORKSPACE} must define a mapping at the document root`);
93
- }
94
- return { exists: true, doc };
95
- }
96
- /**
97
- * Workspace package directories relative to `rootDir` (POSIX slashes), sorted.
98
- * Reads `pnpm-workspace.yaml` when present; otherwise uses `packages/*`.
99
- * Only paths with a `package.json` are returned (same practical rule as pnpm).
100
- */
101
- export async function findWorkspacePackageRelPaths(rootDir, fs, logger) {
102
- const workspaceYaml = await readWorkspaceYaml(rootDir, fs);
103
- let include;
104
- let exclude;
105
- let multiSource;
106
- if (!workspaceYaml.exists) {
107
- include = [...DEFAULT_INCLUDE];
108
- exclude = [];
109
- multiSource = "default-patterns";
110
- }
111
- else {
112
- const parsed = parsePnpmWorkspaceDocument(workspaceYaml.doc);
113
- if (!parsed.hasPackagesKey) {
114
- include = [...DEFAULT_INCLUDE];
115
- exclude = [];
116
- multiSource = "default-patterns";
117
- }
118
- else if (parsed.isEmptyPackagesArray) {
119
- return { relPaths: [], multiSource: "declared-empty" };
120
- }
121
- else {
122
- include = parsed.include;
123
- exclude = parsed.exclude;
124
- multiSource = "pnpm-workspace-yaml";
125
- }
126
- }
127
- const found = new Set();
128
- const globOpts = {
129
- cwd: rootDir,
130
- posix: true,
131
- ...(path.sep === "\\" ? { windowsPathsNoEscape: true } : {}),
132
- };
133
- for (const pattern of include) {
134
- const globPat = workspacePatternToPackageJsonGlob(pattern);
135
- let matches;
136
- try {
137
- matches = globSync(globPat, globOpts);
138
- }
139
- catch (error) {
140
- if (isGlobPermissionError(error)) {
141
- mirrorGlobWarning(logger, `Skipping workspace glob "${pattern}" (${error instanceof Error ? error.message : String(error)})`);
142
- continue;
143
- }
144
- throw new Error(`Invalid workspace glob "${pattern}": ${error instanceof Error ? error.message : String(error)}`);
145
- }
146
- for (const matchedPath of matches) {
147
- const posix = toPosix(matchedPath);
148
- if (!posix.endsWith("/package.json"))
149
- continue;
150
- const rel = posix.slice(0, -"/package.json".length);
151
- if (!rel)
152
- continue;
153
- found.add(normalizePath(rel));
154
- }
155
- }
156
- const excludeMatchers = exclude.map((pat) => picomatch(pat, { dot: true }));
157
- const relPaths = [...found].filter((rel) => !excludeMatchers.some((isMatch) => isMatch(rel)));
158
- relPaths.sort((a, b) => a.localeCompare(b));
159
- return { relPaths, multiSource };
160
- }
@@ -1,7 +0,0 @@
1
- export { runMirrorSync } from "#lib/mirror/sync";
2
- export type { ExportMap, ExportMapData, FindWorkspacePackagesResult, MirrorOptions, WorkspaceMultiDiscoverySource, } from "#lib/mirror/types";
3
- export { MirrorError, MirrorErrorCode } from "#lib/mirror/errors";
4
- export { resolvePackageFilterUnderRoot } from "#lib/mirror/package-filter";
5
- export { parsePnpmWorkspaceDocument } from "#lib/mirror/workspace-packages";
6
- export { createPathTransform, generateExports, getExportGroup, groupFilesByModule, normalizePath, toExportPath, } from "#lib/mirror/engine";
7
- //# sourceMappingURL=mirror.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mirror.d.ts","sourceRoot":"","sources":["../../src/lib/mirror.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,SAAS,EACT,aAAa,EACb,2BAA2B,EAC3B,aAAa,EACb,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,oBAAoB,CAAC"}
@@ -1,5 +0,0 @@
1
- export { runMirrorSync } from "#lib/mirror/sync";
2
- export { MirrorError, MirrorErrorCode } from "#lib/mirror/errors";
3
- export { resolvePackageFilterUnderRoot } from "#lib/mirror/package-filter";
4
- export { parsePnpmWorkspaceDocument } from "#lib/mirror/workspace-packages";
5
- export { createPathTransform, generateExports, getExportGroup, groupFilesByModule, normalizePath, toExportPath, } from "#lib/mirror/engine";
@@ -1,7 +0,0 @@
1
- import type { CliFs } from "#lib/infra/fs-contract";
2
- /**
3
- * Resolve the monorepo root (directory containing `pnpm-workspace.yaml`).
4
- * Tries the compiled package location first, then `process.cwd()`.
5
- */
6
- export declare function findRepoRoot(fs: CliFs): string;
7
- //# sourceMappingURL=repo-root.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repo-root.d.ts","sourceRoot":"","sources":["../../src/lib/repo-root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,CAoB9C"}
@@ -1,23 +0,0 @@
1
- import path from "node:path";
2
- import { fileURLToPath } from "node:url";
3
- /**
4
- * Resolve the monorepo root (directory containing `pnpm-workspace.yaml`).
5
- * Tries the compiled package location first, then `process.cwd()`.
6
- */
7
- export function findRepoRoot(fs) {
8
- const candidates = [path.dirname(fileURLToPath(import.meta.url)), process.cwd()];
9
- for (const start of candidates) {
10
- let dir = path.resolve(start);
11
- for (;;) {
12
- if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml"))) {
13
- return dir;
14
- }
15
- const parent = path.dirname(dir);
16
- if (parent === dir) {
17
- break;
18
- }
19
- dir = parent;
20
- }
21
- }
22
- throw new Error(`Could not locate monorepo root (missing pnpm-workspace.yaml). Searched from: ${candidates.join(", ")}`);
23
- }