@codefast/cli 0.5.0-canary.4 → 0.5.0-canary.6

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 (274) hide show
  1. package/README.md +106 -480
  2. package/dist/arrange/analyze.js +25 -0
  3. package/dist/arrange/analyze.js.map +1 -0
  4. package/dist/arrange/cli-schema.js +29 -0
  5. package/dist/arrange/cli-schema.js.map +1 -0
  6. package/dist/arrange/command.js +170 -0
  7. package/dist/arrange/command.js.map +1 -0
  8. package/dist/arrange/domain/analyze-service.js +122 -0
  9. package/dist/arrange/domain/analyze-service.js.map +1 -0
  10. package/dist/arrange/domain/ast/ast-node.js +240 -0
  11. package/dist/arrange/domain/ast/ast-node.js.map +1 -0
  12. package/dist/arrange/domain/ast/collectors-cn.js +81 -0
  13. package/dist/arrange/domain/ast/collectors-cn.js.map +1 -0
  14. package/dist/arrange/domain/ast/collectors-jsx.js +24 -0
  15. package/dist/arrange/domain/ast/collectors-jsx.js.map +1 -0
  16. package/dist/arrange/domain/ast/collectors-tv.js +319 -0
  17. package/dist/arrange/domain/ast/collectors-tv.js.map +1 -0
  18. package/dist/arrange/domain/ast/helpers.js +151 -0
  19. package/dist/arrange/domain/ast/helpers.js.map +1 -0
  20. package/dist/arrange/domain/ast/simplify-targets.js +161 -0
  21. package/dist/arrange/domain/ast/simplify-targets.js.map +1 -0
  22. package/dist/arrange/domain/ast/targets.js +182 -0
  23. package/dist/arrange/domain/ast/targets.js.map +1 -0
  24. package/dist/arrange/domain/constants.js +225 -0
  25. package/dist/arrange/domain/constants.js.map +1 -0
  26. package/dist/arrange/domain/grouping-service.js +128 -0
  27. package/dist/arrange/domain/grouping-service.js.map +1 -0
  28. package/dist/arrange/domain/grouping.js +435 -0
  29. package/dist/arrange/domain/grouping.js.map +1 -0
  30. package/dist/arrange/domain/imports.js +160 -0
  31. package/dist/arrange/domain/imports.js.map +1 -0
  32. package/dist/arrange/domain/source-text-formatters.js +100 -0
  33. package/dist/arrange/domain/source-text-formatters.js.map +1 -0
  34. package/dist/arrange/domain/tailwind-token.js +50 -0
  35. package/dist/arrange/domain/tailwind-token.js.map +1 -0
  36. package/dist/arrange/domain/token-classifier.js +448 -0
  37. package/dist/arrange/domain/token-classifier.js.map +1 -0
  38. package/dist/arrange/domain/types.js +11 -0
  39. package/dist/arrange/domain/types.js.map +1 -0
  40. package/dist/arrange/output.js +120 -0
  41. package/dist/arrange/output.js.map +1 -0
  42. package/dist/arrange/process-file.js +44 -0
  43. package/dist/arrange/process-file.js.map +1 -0
  44. package/dist/arrange/resolve-target.js +33 -0
  45. package/dist/arrange/resolve-target.js.map +1 -0
  46. package/dist/arrange/scan-target.js +30 -0
  47. package/dist/arrange/scan-target.js.map +1 -0
  48. package/dist/arrange/simplify-process-file.js +29 -0
  49. package/dist/arrange/simplify-process-file.js.map +1 -0
  50. package/dist/arrange/simplify-sync.js +29 -0
  51. package/dist/arrange/simplify-sync.js.map +1 -0
  52. package/dist/arrange/source-parse.js +17 -0
  53. package/dist/arrange/source-parse.js.map +1 -0
  54. package/dist/arrange/suggest.js +14 -0
  55. package/dist/arrange/suggest.js.map +1 -0
  56. package/dist/arrange/sync.js +48 -0
  57. package/dist/arrange/sync.js.map +1 -0
  58. package/dist/arrange/typescript-ast-translator.js +455 -0
  59. package/dist/arrange/typescript-ast-translator.js.map +1 -0
  60. package/dist/arrange/workspace.js +31 -0
  61. package/dist/arrange/workspace.js.map +1 -0
  62. package/dist/audit/cli-schema.js +22 -0
  63. package/dist/audit/cli-schema.js.map +1 -0
  64. package/dist/audit/command.js +60 -0
  65. package/dist/audit/command.js.map +1 -0
  66. package/dist/audit/domain/audit-file.js +101 -0
  67. package/dist/audit/domain/audit-file.js.map +1 -0
  68. package/dist/audit/domain/mappings.js +103 -0
  69. package/dist/audit/domain/mappings.js.map +1 -0
  70. package/dist/audit/domain/tokenize.js +83 -0
  71. package/dist/audit/domain/tokenize.js.map +1 -0
  72. package/dist/audit/domain/types.js +2 -0
  73. package/dist/audit/domain/types.js.map +1 -0
  74. package/dist/audit/output.js +44 -0
  75. package/dist/audit/output.js.map +1 -0
  76. package/dist/audit/prepare.js +42 -0
  77. package/dist/audit/prepare.js.map +1 -0
  78. package/dist/audit/run.js +57 -0
  79. package/dist/audit/run.js.map +1 -0
  80. package/dist/{bin.mjs → bin.js} +2 -4
  81. package/dist/bin.js.map +1 -0
  82. package/dist/cli.js +45 -0
  83. package/dist/cli.js.map +1 -0
  84. package/dist/core/cli/format-error.js +19 -0
  85. package/dist/core/cli/format-error.js.map +1 -0
  86. package/dist/core/cli/global-options.js +10 -0
  87. package/dist/core/cli/global-options.js.map +1 -0
  88. package/dist/core/cli/positional.js +9 -0
  89. package/dist/core/cli/positional.js.map +1 -0
  90. package/dist/core/cli/result-handle.js +69 -0
  91. package/dist/core/cli/result-handle.js.map +1 -0
  92. package/dist/core/config/loader.js +88 -0
  93. package/dist/core/config/loader.js.map +1 -0
  94. package/dist/core/config/schema.js +97 -0
  95. package/dist/core/config/schema.js.map +1 -0
  96. package/dist/core/config/warnings.js +12 -0
  97. package/dist/core/config/warnings.js.map +1 -0
  98. package/dist/core/config.js +18 -0
  99. package/dist/core/config.js.map +1 -0
  100. package/dist/core/errors.js +58 -0
  101. package/dist/core/errors.js.map +1 -0
  102. package/dist/core/exit-codes.js +15 -0
  103. package/dist/core/exit-codes.js.map +1 -0
  104. package/dist/core/filesystem/node.js +33 -0
  105. package/dist/core/filesystem/node.js.map +1 -0
  106. package/dist/core/filesystem/port.js +2 -0
  107. package/dist/core/filesystem/port.js.map +1 -0
  108. package/dist/core/glob.js +20 -0
  109. package/dist/core/glob.js.map +1 -0
  110. package/dist/core/logger.js +13 -0
  111. package/dist/core/logger.js.map +1 -0
  112. package/dist/core/result.js +16 -0
  113. package/dist/core/result.js.map +1 -0
  114. package/dist/core/schema-parse.js +21 -0
  115. package/dist/core/schema-parse.js.map +1 -0
  116. package/dist/core/source-text-edit.js +62 -0
  117. package/dist/core/source-text-edit.js.map +1 -0
  118. package/dist/core/verbose-diagnostics.js +9 -0
  119. package/dist/core/verbose-diagnostics.js.map +1 -0
  120. package/dist/core/workspace/resolver.js +208 -0
  121. package/dist/core/workspace/resolver.js.map +1 -0
  122. package/dist/core/workspace/typescript-walk.js +41 -0
  123. package/dist/core/workspace/typescript-walk.js.map +1 -0
  124. package/dist/mirror/cli-result.js +20 -0
  125. package/dist/mirror/cli-result.js.map +1 -0
  126. package/dist/mirror/cli-schema.js +11 -0
  127. package/dist/mirror/cli-schema.js.map +1 -0
  128. package/dist/mirror/command.js +73 -0
  129. package/dist/mirror/command.js.map +1 -0
  130. package/dist/mirror/dist-filesystem-impl.js +53 -0
  131. package/dist/mirror/dist-filesystem-impl.js.map +1 -0
  132. package/dist/mirror/domain/constants.js +21 -0
  133. package/dist/mirror/domain/constants.js.map +1 -0
  134. package/dist/mirror/domain/dirent-guard.js +16 -0
  135. package/dist/mirror/domain/dirent-guard.js.map +1 -0
  136. package/dist/mirror/domain/dist-filesystem.js +2 -0
  137. package/dist/mirror/domain/dist-filesystem.js.map +1 -0
  138. package/dist/mirror/domain/errors.js +19 -0
  139. package/dist/mirror/domain/errors.js.map +1 -0
  140. package/dist/mirror/domain/exports.js +284 -0
  141. package/dist/mirror/domain/exports.js.map +1 -0
  142. package/dist/mirror/domain/package-display-name.js +10 -0
  143. package/dist/mirror/domain/package-display-name.js.map +1 -0
  144. package/dist/mirror/domain/path-normalizer.js +8 -0
  145. package/dist/mirror/domain/path-normalizer.js.map +1 -0
  146. package/dist/mirror/domain/types.js +2 -0
  147. package/dist/mirror/domain/types.js.map +1 -0
  148. package/dist/mirror/output.js +47 -0
  149. package/dist/mirror/output.js.map +1 -0
  150. package/dist/mirror/package-path.js +40 -0
  151. package/dist/mirror/package-path.js.map +1 -0
  152. package/dist/mirror/prepare.js +37 -0
  153. package/dist/mirror/prepare.js.map +1 -0
  154. package/dist/mirror/supplement-exports.js +157 -0
  155. package/dist/mirror/supplement-exports.js.map +1 -0
  156. package/dist/mirror/sync-reporter.js +125 -0
  157. package/dist/mirror/sync-reporter.js.map +1 -0
  158. package/dist/mirror/sync-types.js +2 -0
  159. package/dist/mirror/sync-types.js.map +1 -0
  160. package/dist/mirror/sync-workspace-package.js +117 -0
  161. package/dist/mirror/sync-workspace-package.js.map +1 -0
  162. package/dist/mirror/sync.js +90 -0
  163. package/dist/mirror/sync.js.map +1 -0
  164. package/dist/mirror/write-exports.js +145 -0
  165. package/dist/mirror/write-exports.js.map +1 -0
  166. package/dist/tag/cli-result.js +12 -0
  167. package/dist/tag/cli-result.js.map +1 -0
  168. package/dist/tag/cli-schema.js +13 -0
  169. package/dist/tag/cli-schema.js.map +1 -0
  170. package/dist/tag/command.js +69 -0
  171. package/dist/tag/command.js.map +1 -0
  172. package/dist/tag/domain/types.js +2 -0
  173. package/dist/tag/domain/types.js.map +1 -0
  174. package/dist/tag/output.js +101 -0
  175. package/dist/tag/output.js.map +1 -0
  176. package/dist/tag/prepare.js +30 -0
  177. package/dist/tag/prepare.js.map +1 -0
  178. package/dist/tag/resolve-target-path.js +14 -0
  179. package/dist/tag/resolve-target-path.js.map +1 -0
  180. package/dist/tag/since-writer.js +231 -0
  181. package/dist/tag/since-writer.js.map +1 -0
  182. package/dist/tag/sync.js +166 -0
  183. package/dist/tag/sync.js.map +1 -0
  184. package/dist/tag/target-candidates.js +79 -0
  185. package/dist/tag/target-candidates.js.map +1 -0
  186. package/dist/tag/target-runner.js +25 -0
  187. package/dist/tag/target-runner.js.map +1 -0
  188. package/dist/tag/version-resolver.js +28 -0
  189. package/dist/tag/version-resolver.js.map +1 -0
  190. package/package.json +25 -20
  191. package/dist/arrange/analyze.mjs +0 -24
  192. package/dist/arrange/cli-schema.mjs +0 -27
  193. package/dist/arrange/command.mjs +0 -130
  194. package/dist/arrange/domain/analyze-service.mjs +0 -102
  195. package/dist/arrange/domain/ast/ast-node.mjs +0 -215
  196. package/dist/arrange/domain/ast/collectors-cn.mjs +0 -64
  197. package/dist/arrange/domain/ast/collectors-jsx.mjs +0 -23
  198. package/dist/arrange/domain/ast/collectors-tv.mjs +0 -189
  199. package/dist/arrange/domain/ast/helpers.mjs +0 -108
  200. package/dist/arrange/domain/ast/simplify-targets.mjs +0 -109
  201. package/dist/arrange/domain/ast/targets.mjs +0 -134
  202. package/dist/arrange/domain/constants.mjs +0 -213
  203. package/dist/arrange/domain/grouping-service.mjs +0 -121
  204. package/dist/arrange/domain/grouping.mjs +0 -338
  205. package/dist/arrange/domain/imports.mjs +0 -107
  206. package/dist/arrange/domain/source-text-formatters.mjs +0 -88
  207. package/dist/arrange/domain/tailwind-token.mjs +0 -40
  208. package/dist/arrange/domain/token-classifier.mjs +0 -218
  209. package/dist/arrange/domain/types.mjs +0 -1
  210. package/dist/arrange/output.mjs +0 -87
  211. package/dist/arrange/process-file.mjs +0 -42
  212. package/dist/arrange/resolve-target.mjs +0 -24
  213. package/dist/arrange/scan-target.mjs +0 -29
  214. package/dist/arrange/simplify-process-file.mjs +0 -35
  215. package/dist/arrange/simplify-sync.mjs +0 -32
  216. package/dist/arrange/source-parse.mjs +0 -18
  217. package/dist/arrange/suggest.mjs +0 -15
  218. package/dist/arrange/sync.mjs +0 -51
  219. package/dist/arrange/typescript-ast-translator.mjs +0 -354
  220. package/dist/arrange/workspace.mjs +0 -31
  221. package/dist/cli.mjs +0 -34
  222. package/dist/core/cli/format-error.mjs +0 -15
  223. package/dist/core/cli/global-options.mjs +0 -10
  224. package/dist/core/cli/positional.mjs +0 -11
  225. package/dist/core/cli/result-handle.mjs +0 -51
  226. package/dist/core/config/loader.mjs +0 -79
  227. package/dist/core/config/schema.mjs +0 -60
  228. package/dist/core/config/warnings.mjs +0 -12
  229. package/dist/core/config.mjs +0 -19
  230. package/dist/core/errors.mjs +0 -35
  231. package/dist/core/exit-codes.mjs +0 -17
  232. package/dist/core/filesystem/node.mjs +0 -32
  233. package/dist/core/filesystem/port.mjs +0 -1
  234. package/dist/core/glob.mjs +0 -20
  235. package/dist/core/logger.mjs +0 -15
  236. package/dist/core/result.mjs +0 -21
  237. package/dist/core/schema-parse.mjs +0 -18
  238. package/dist/core/source-text-edit.mjs +0 -56
  239. package/dist/core/verbose-diagnostics.mjs +0 -11
  240. package/dist/core/workspace/resolver.mjs +0 -177
  241. package/dist/core/workspace/typescript-walk.mjs +0 -36
  242. package/dist/mirror/cli-result.mjs +0 -22
  243. package/dist/mirror/cli-schema.mjs +0 -13
  244. package/dist/mirror/command.mjs +0 -58
  245. package/dist/mirror/dist-filesystem-impl.mjs +0 -42
  246. package/dist/mirror/domain/constants.mjs +0 -31
  247. package/dist/mirror/domain/dirent-guard.mjs +0 -16
  248. package/dist/mirror/domain/dist-filesystem.mjs +0 -1
  249. package/dist/mirror/domain/errors.mjs +0 -21
  250. package/dist/mirror/domain/exports.mjs +0 -226
  251. package/dist/mirror/domain/package-display-name.mjs +0 -12
  252. package/dist/mirror/domain/path-normalizer.mjs +0 -10
  253. package/dist/mirror/domain/types.mjs +0 -1
  254. package/dist/mirror/output.mjs +0 -48
  255. package/dist/mirror/package-path.mjs +0 -32
  256. package/dist/mirror/prepare.mjs +0 -33
  257. package/dist/mirror/supplement-exports.mjs +0 -114
  258. package/dist/mirror/sync-reporter.mjs +0 -107
  259. package/dist/mirror/sync-types.mjs +0 -1
  260. package/dist/mirror/sync-workspace-package.mjs +0 -109
  261. package/dist/mirror/sync.mjs +0 -88
  262. package/dist/mirror/write-exports.mjs +0 -94
  263. package/dist/tag/cli-result.mjs +0 -11
  264. package/dist/tag/cli-schema.mjs +0 -15
  265. package/dist/tag/command.mjs +0 -56
  266. package/dist/tag/domain/types.mjs +0 -1
  267. package/dist/tag/output.mjs +0 -87
  268. package/dist/tag/prepare.mjs +0 -29
  269. package/dist/tag/resolve-target-path.mjs +0 -12
  270. package/dist/tag/since-writer.mjs +0 -131
  271. package/dist/tag/sync.mjs +0 -149
  272. package/dist/tag/target-candidates.mjs +0 -68
  273. package/dist/tag/target-runner.mjs +0 -26
  274. package/dist/tag/version-resolver.mjs +0 -25
@@ -0,0 +1,208 @@
1
+ import { globSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { parse as parseYaml } from "yaml";
5
+ import { messageFrom } from "#/core/errors";
6
+ import { createAnyGlobMatcher } from "#/core/glob";
7
+ import { logger } from "#/core/logger";
8
+ /**
9
+ * Resolve the monorepo root (directory containing `pnpm-workspace.yaml`).
10
+ *
11
+ * @since 0.3.16-canary.0
12
+ */
13
+ export function findRepoRoot(fromDirectory, fs) {
14
+ const candidates = [path.dirname(fileURLToPath(import.meta.url)), fromDirectory];
15
+ for (const start of candidates) {
16
+ let dir = path.resolve(start);
17
+ for (;;) {
18
+ if (fs.existsSync(path.join(dir, "pnpm-workspace.yaml"))) {
19
+ return dir;
20
+ }
21
+ const parent = path.dirname(dir);
22
+ if (parent === dir) {
23
+ break;
24
+ }
25
+ dir = parent;
26
+ }
27
+ }
28
+ throw new Error(`Could not locate monorepo root (missing pnpm-workspace.yaml). Searched from: ${candidates.join(", ")}`);
29
+ }
30
+ const workspaceYamlFileName = "pnpm-workspace.yaml";
31
+ const defaultIncludePatterns = ["packages/*"];
32
+ const packageJsonFileName = "package.json";
33
+ function toPosix(filePath) {
34
+ return filePath.split(path.sep).join("/");
35
+ }
36
+ function isGlobPermissionError(caughtError) {
37
+ if (typeof caughtError !== "object" || caughtError === null || !("code" in caughtError)) {
38
+ return false;
39
+ }
40
+ const code = caughtError.code;
41
+ return code === "EACCES" || code === "EPERM";
42
+ }
43
+ function workspacePatternToPackageJsonGlob(pattern) {
44
+ const normalizedPattern = toPosix(pattern.trim()).replace(/\/+$/, "");
45
+ if (!normalizedPattern) {
46
+ return `**/${packageJsonFileName}`;
47
+ }
48
+ return `${normalizedPattern}/${packageJsonFileName}`;
49
+ }
50
+ function splitPnpmWorkspacePackagesArray(raw) {
51
+ const include = [];
52
+ const exclude = [];
53
+ if (!Array.isArray(raw)) {
54
+ return { include, exclude };
55
+ }
56
+ for (const entry of raw) {
57
+ if (typeof entry !== "string") {
58
+ continue;
59
+ }
60
+ const trimmed = entry.trim();
61
+ if (!trimmed) {
62
+ continue;
63
+ }
64
+ if (trimmed.startsWith("!")) {
65
+ exclude.push(trimmed.slice(1).trim());
66
+ }
67
+ else {
68
+ include.push(trimmed);
69
+ }
70
+ }
71
+ return { include, exclude };
72
+ }
73
+ function parsePnpmWorkspaceDocument(doc) {
74
+ const wf = workspaceYamlFileName;
75
+ if (doc === null || doc === undefined) {
76
+ throw new Error(`${wf} root document must be an object (got empty or null)`);
77
+ }
78
+ if (typeof doc !== "object" || Array.isArray(doc)) {
79
+ throw new Error(`${wf} root must be a mapping, not an array or scalar`);
80
+ }
81
+ const parsedDoc = doc;
82
+ if (!Object.prototype.hasOwnProperty.call(parsedDoc, "packages")) {
83
+ return { include: [], exclude: [], hasPackagesKey: false, isEmptyPackagesArray: false };
84
+ }
85
+ const pkgs = parsedDoc.packages;
86
+ if (!Array.isArray(pkgs)) {
87
+ throw new Error(`${wf} field "packages" must be an array`);
88
+ }
89
+ if (pkgs.length === 0) {
90
+ return { include: [], exclude: [], hasPackagesKey: true, isEmptyPackagesArray: true };
91
+ }
92
+ return {
93
+ ...splitPnpmWorkspacePackagesArray(pkgs),
94
+ hasPackagesKey: true,
95
+ isEmptyPackagesArray: false,
96
+ };
97
+ }
98
+ async function readWorkspaceYaml(rootDir, fs) {
99
+ const wf = workspaceYamlFileName;
100
+ const workspaceYamlPath = path.join(rootDir, wf);
101
+ if (!fs.existsSync(workspaceYamlPath)) {
102
+ return { exists: false };
103
+ }
104
+ let raw;
105
+ try {
106
+ raw = await fs.readFile(workspaceYamlPath, "utf8");
107
+ }
108
+ catch (caughtReadError) {
109
+ throw new Error(`Failed to read ${wf}: ${messageFrom(caughtReadError)}`, {
110
+ cause: caughtReadError,
111
+ });
112
+ }
113
+ let doc;
114
+ try {
115
+ doc = parseYaml(raw);
116
+ }
117
+ catch (caughtYamlParseError) {
118
+ throw new Error(`Failed to parse ${wf}: ${messageFrom(caughtYamlParseError)}`, {
119
+ cause: caughtYamlParseError,
120
+ });
121
+ }
122
+ if (doc === null || doc === undefined) {
123
+ throw new Error(`${wf} must define a mapping at the document root`);
124
+ }
125
+ return { exists: true, doc };
126
+ }
127
+ /**
128
+ * @since 0.3.16-canary.0
129
+ */
130
+ export async function listWorkspacePackageDirectories(rootDirectoryPathAbsolute, fs, suppressGlobPermissionDiagnostics) {
131
+ const workspaceYaml = await readWorkspaceYaml(rootDirectoryPathAbsolute, fs);
132
+ const defInc = defaultIncludePatterns;
133
+ let include;
134
+ let exclude;
135
+ let layoutSource;
136
+ const hasPnpmWorkspaceYamlFile = workspaceYaml.exists;
137
+ if (!workspaceYaml.exists) {
138
+ include = [...defInc];
139
+ exclude = [];
140
+ layoutSource = "default-patterns";
141
+ }
142
+ else {
143
+ const parsed = parsePnpmWorkspaceDocument(workspaceYaml.doc);
144
+ if (!parsed.hasPackagesKey) {
145
+ include = [...defInc];
146
+ exclude = [];
147
+ layoutSource = "default-patterns";
148
+ }
149
+ else if (parsed.isEmptyPackagesArray) {
150
+ return {
151
+ packageDirectoryPathsAbsolute: [],
152
+ layoutSource: "declared-empty",
153
+ hasPnpmWorkspaceYamlFile: true,
154
+ };
155
+ }
156
+ else {
157
+ include = parsed.include;
158
+ exclude = parsed.exclude;
159
+ layoutSource = "pnpm-workspace-yaml";
160
+ }
161
+ }
162
+ const foundRelativePosixPackageRoots = new Set();
163
+ const globOpts = {
164
+ cwd: rootDirectoryPathAbsolute,
165
+ posix: true,
166
+ ...(path.sep === "\\" ? { windowsPathsNoEscape: true } : {}),
167
+ };
168
+ for (const pattern of include) {
169
+ const globPat = workspacePatternToPackageJsonGlob(pattern);
170
+ let matches;
171
+ try {
172
+ matches = globSync(globPat, globOpts);
173
+ }
174
+ catch (caughtGlobError) {
175
+ if (isGlobPermissionError(caughtGlobError)) {
176
+ if (!suppressGlobPermissionDiagnostics) {
177
+ logger.out(`⚠ Skipping workspace glob "${pattern}" (${messageFrom(caughtGlobError)})`);
178
+ }
179
+ continue;
180
+ }
181
+ throw new Error(`Invalid workspace glob "${pattern}": ${messageFrom(caughtGlobError)}`, {
182
+ cause: caughtGlobError,
183
+ });
184
+ }
185
+ for (const matchedPath of matches) {
186
+ const posix = toPosix(matchedPath);
187
+ const suffix = `/${packageJsonFileName}`;
188
+ if (!posix.endsWith(suffix)) {
189
+ continue;
190
+ }
191
+ const rel = posix.slice(0, -suffix.length);
192
+ if (!rel) {
193
+ continue;
194
+ }
195
+ foundRelativePosixPackageRoots.add(rel);
196
+ }
197
+ }
198
+ const isExcluded = createAnyGlobMatcher(exclude, { dot: true });
199
+ const filteredRelative = [...foundRelativePosixPackageRoots].filter((rel) => !isExcluded(rel));
200
+ filteredRelative.sort((a, b) => a.localeCompare(b));
201
+ const packageDirectoryPathsAbsolute = filteredRelative.map((rel) => path.resolve(rootDirectoryPathAbsolute, rel.split("/").join(path.sep)));
202
+ return {
203
+ packageDirectoryPathsAbsolute,
204
+ layoutSource,
205
+ hasPnpmWorkspaceYamlFile,
206
+ };
207
+ }
208
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/core/workspace/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import path from "node:path";
2
+ const defaultSkipDirectoryNames = new Set([
3
+ "node_modules",
4
+ "dist",
5
+ ".git",
6
+ ".turbo",
7
+ ".next",
8
+ ".cache",
9
+ "out",
10
+ "build",
11
+ "coverage",
12
+ ".vercel",
13
+ ".output",
14
+ ]);
15
+ /**
16
+ * @since 0.3.16-canary.0
17
+ */
18
+ export function walkTsxFiles(rootDirectoryPath, fs) {
19
+ const result = [];
20
+ visitTsxPaths(result, rootDirectoryPath, fs);
21
+ return result;
22
+ }
23
+ function visitTsxPaths(result, entryPath, fs) {
24
+ const entryStats = fs.statSync(entryPath);
25
+ if (entryStats.isDirectory()) {
26
+ for (const childName of fs.readdirSync(entryPath)) {
27
+ if (defaultSkipDirectoryNames.has(childName)) {
28
+ continue;
29
+ }
30
+ visitTsxPaths(result, path.join(entryPath, childName), fs);
31
+ }
32
+ return;
33
+ }
34
+ if (entryPath.endsWith(".d.ts")) {
35
+ return;
36
+ }
37
+ if (entryPath.endsWith(".tsx") || entryPath.endsWith(".ts")) {
38
+ result.push(entryPath);
39
+ }
40
+ }
41
+ //# sourceMappingURL=typescript-walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-walk.js","sourceRoot":"","sources":["../../../src/core/workspace/typescript-walk.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,cAAc;IACd,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK;IACL,OAAO;IACP,UAAU;IACV,SAAS;IACT,SAAS;CACV,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,iBAAyB,EAAE,EAAkB;IACxE,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAqB,EAAE,SAAiB,EAAE,EAAkB;IACjF,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAClD,IAAI,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,SAAS;YACX,CAAC;YACD,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { CLI_EXIT_GENERAL_ERROR, CLI_EXIT_SUCCESS } from "#/core/exit-codes";
2
+ /**
3
+ * @since 0.3.16-canary.0
4
+ */
5
+ export function exitCodeForMirrorSyncResult(stats) {
6
+ return stats.packagesErrored > 0 ? CLI_EXIT_GENERAL_ERROR : CLI_EXIT_SUCCESS;
7
+ }
8
+ /**
9
+ * @since 0.3.16-canary.0
10
+ */
11
+ export function formatMirrorSyncJsonOutput(stats, elapsedSeconds, write = true) {
12
+ return JSON.stringify({
13
+ schemaVersion: 1,
14
+ ok: stats.packagesErrored === 0,
15
+ write,
16
+ elapsedSeconds,
17
+ stats,
18
+ });
19
+ }
20
+ //# sourceMappingURL=cli-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-result.js","sourceRoot":"","sources":["../../src/mirror/cli-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG7E;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAkB;IAC5D,OAAO,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAkB,EAAE,cAAsB,EAAE,KAAK,GAAG,IAAI;IACjG,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,aAAa,EAAE,CAAU;QACzB,EAAE,EAAE,KAAK,CAAC,eAAe,KAAK,CAAC;QAC/B,KAAK;QACL,cAAc;QACd,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * @since 0.3.16-canary.0
4
+ */
5
+ export const mirrorSyncRunRequestSchema = z.object({
6
+ rootDir: z.string().min(1),
7
+ packageFilter: z.string().optional(),
8
+ config: z.unknown().optional(),
9
+ write: z.boolean().optional(),
10
+ });
11
+ //# sourceMappingURL=cli-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-schema.js","sourceRoot":"","sources":["../../src/mirror/cli-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAoC,CAAC,CAAC,MAAM,CAAC;IAClF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC"}
@@ -0,0 +1,73 @@
1
+ import process from "node:process";
2
+ import { Command } from "commander";
3
+ import { globalCliCommanderOptionsSchema } from "#/core/cli/global-options";
4
+ import { readOptionalPositionalArg } from "#/core/cli/positional";
5
+ import { consumeCliAppError } from "#/core/cli/result-handle";
6
+ import { nodeFilesystem } from "#/core/filesystem/node";
7
+ import { logger } from "#/core/logger";
8
+ import { parseWithSchema } from "#/core/schema-parse";
9
+ import { exitCodeForMirrorSyncResult, formatMirrorSyncJsonOutput } from "#/mirror/cli-result";
10
+ import { mirrorSyncRunRequestSchema } from "#/mirror/cli-schema";
11
+ import { MirrorSyncProgressPresenter } from "#/mirror/output";
12
+ import { prepareMirrorSync } from "#/mirror/prepare";
13
+ import { runMirrorSync } from "#/mirror/sync";
14
+ /**
15
+ * @since 0.3.16-canary.0
16
+ */
17
+ export function createMirrorCommand() {
18
+ const cmd = new Command("mirror")
19
+ .description("Write package.json exports from dist/ for workspace packages")
20
+ .argument("[package]", "Optional package path relative to repo root (e.g. packages/ui)")
21
+ .option("--dry-run", "Report what would change without writing package.json", false)
22
+ .option("-v, --verbose", "Print extra diagnostics", false)
23
+ .option("--json", "Print one JSON summary on stdout (suppresses human progress)", false)
24
+ .action(async (packageArg, opts, command) => {
25
+ const globalsOptionCarrier = command.optsWithGlobals?.() ??
26
+ command.opts();
27
+ const globalOptionsOutcome = parseWithSchema(globalCliCommanderOptionsSchema, globalsOptionCarrier);
28
+ if (!consumeCliAppError(globalOptionsOutcome)) {
29
+ return;
30
+ }
31
+ const prelude = await prepareMirrorSync(nodeFilesystem, {
32
+ currentWorkingDirectory: process.cwd(),
33
+ packageArg: readOptionalPositionalArg(packageArg),
34
+ globals: globalOptionsOutcome.value,
35
+ });
36
+ if (!consumeCliAppError(prelude)) {
37
+ return;
38
+ }
39
+ const write = !opts.dryRun;
40
+ const { rootDir, config, packageFilter } = prelude.value;
41
+ const parsed = parseWithSchema(mirrorSyncRunRequestSchema, {
42
+ rootDir,
43
+ config: config.mirror ?? {},
44
+ packageFilter,
45
+ write,
46
+ });
47
+ if (!consumeCliAppError(parsed)) {
48
+ return;
49
+ }
50
+ const json = !!opts.json;
51
+ const noColor = globalOptionsOutcome.value.color === false;
52
+ const verbose = !!opts.verbose;
53
+ const progressPresenter = new MirrorSyncProgressPresenter();
54
+ const listener = json ? undefined : progressPresenter;
55
+ if (!json) {
56
+ progressPresenter.configure({ noColor, verbose, dryRun: !write });
57
+ }
58
+ const startTime = performance.now();
59
+ const outcome = await runMirrorSync(nodeFilesystem, {
60
+ ...parsed.value,
61
+ listener,
62
+ });
63
+ if (!consumeCliAppError(outcome)) {
64
+ return;
65
+ }
66
+ if (json) {
67
+ logger.out(formatMirrorSyncJsonOutput(outcome.value, (performance.now() - startTime) / 1000, write));
68
+ }
69
+ process.exitCode = exitCodeForMirrorSyncResult(outcome.value);
70
+ });
71
+ return cmd;
72
+ }
73
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mirror/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import path from "node:path";
2
+ import { isDirentList } from "#/mirror/domain/dirent-guard";
3
+ import { normalizePath } from "#/mirror/domain/path-normalizer";
4
+ /**
5
+ * @since 0.3.16-canary.0
6
+ */
7
+ export function createMirrorDistFilesystem(fs) {
8
+ return {
9
+ async listRelativeFilesRecursively(dirPath) {
10
+ try {
11
+ const raw = await fs.readdir(dirPath, { recursive: true, withFileTypes: true });
12
+ if (!isDirentList(raw)) {
13
+ return [];
14
+ }
15
+ return raw
16
+ .filter((dirent) => dirent.isFile())
17
+ .map((dirent) => {
18
+ const fullPath = path.join(dirent.parentPath, dirent.name);
19
+ const relPath = path.relative(dirPath, fullPath);
20
+ return normalizePath(relPath);
21
+ });
22
+ }
23
+ catch (caughtError) {
24
+ if (isKnownReadDirError(caughtError)) {
25
+ return [];
26
+ }
27
+ throw caughtError;
28
+ }
29
+ },
30
+ async isDirectoryCssOnly(distDir, dirPath) {
31
+ try {
32
+ const raw = await fs.readdir(path.join(distDir, dirPath), { withFileTypes: true });
33
+ if (!isDirentList(raw)) {
34
+ return false;
35
+ }
36
+ if (raw.length === 0) {
37
+ return true;
38
+ }
39
+ return raw.every((dirent) => dirent.isFile() && dirent.name.endsWith(".css"));
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ },
45
+ };
46
+ }
47
+ function isKnownReadDirError(caughtError) {
48
+ return (typeof caughtError === "object" &&
49
+ caughtError !== null &&
50
+ "code" in caughtError &&
51
+ (caughtError.code === "ENOENT" || caughtError.code === "EACCES"));
52
+ }
53
+ //# sourceMappingURL=dist-filesystem-impl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist-filesystem-impl.js","sourceRoot":"","sources":["../../src/mirror/dist-filesystem-impl.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAkB;IAC3D,OAAO;QACL,KAAK,CAAC,4BAA4B,CAAC,OAAe;YAChD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,OAAO,GAAG;qBACP,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;qBACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBACjD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,WAAoB,EAAE,CAAC;gBAC9B,IAAI,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;oBACrC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,WAAW,CAAC;YACpB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,OAAe;YACvD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAChF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAoB;IAC/C,OAAO,CACL,OAAO,WAAW,KAAK,QAAQ;QAC/B,WAAW,KAAK,IAAI;QACpB,MAAM,IAAI,WAAW;QACrB,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,CACjE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @since 0.3.16-canary.0
3
+ */
4
+ export const DIST_DIR = "dist";
5
+ /**
6
+ * @since 0.3.16-canary.0
7
+ */
8
+ export const PACKAGE_JSON = "package.json";
9
+ /**
10
+ * @since 0.3.16-canary.0
11
+ */
12
+ export const VALID_JS_EXTENSIONS = new Set([".js", ".mjs", ".cjs"]);
13
+ /**
14
+ * @since 0.3.16-canary.0
15
+ */
16
+ export const VALID_DTS_EXTENSIONS = new Set([".d.ts", ".d.mts", ".d.cts"]);
17
+ /**
18
+ * @since 0.3.16-canary.0
19
+ */
20
+ export const PACKAGE_JSON_EXPORT = "./package.json";
21
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/mirror/domain/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AACpE;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC3E;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Narrow `fs.promises.readdir` overload result to `Dirent[]` when `withFileTypes: true`.
3
+ * Accepts both historical checks (`isFile` / `isDirectory`) in one guard.
4
+ * Returning `true` for an empty array is intentional: callers treat empty lists
5
+ * the same regardless of the element type, so `[]` is safely accepted as `Dirent[]`.
6
+ *
7
+ * @since 0.3.16-canary.0
8
+ */
9
+ export function isDirentList(x) {
10
+ if (x.length === 0) {
11
+ return true;
12
+ }
13
+ const first = x[0];
14
+ return typeof first === "object" && first !== null && "isFile" in first && "isDirectory" in first;
15
+ }
16
+ //# sourceMappingURL=dirent-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dirent-guard.js","sourceRoot":"","sources":["../../../src/mirror/domain/dirent-guard.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,CAAwC;IACnE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAA4B,CAAC;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,IAAI,aAAa,IAAI,KAAK,CAAC;AACpG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dist-filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist-filesystem.js","sourceRoot":"","sources":["../../../src/mirror/domain/dist-filesystem.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @since 0.3.16-canary.0
3
+ */
4
+ export const MirrorErrorCode = {
5
+ FATAL: "FATAL",
6
+ PACKAGE_WRITE: "PACKAGE_WRITE",
7
+ };
8
+ /**
9
+ * @since 0.3.16-canary.0
10
+ */
11
+ export class MirrorError extends Error {
12
+ code;
13
+ constructor(code, message, options) {
14
+ super(message, options);
15
+ this.name = "MirrorError";
16
+ this.code = code;
17
+ }
18
+ }
19
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/mirror/domain/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,eAAe;CACtB,CAAC;AAOX;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IAE/B,YAAY,IAAqB,EAAE,OAAe,EAAE,OAAsB;QACxE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}