@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,161 @@
1
+ import { forEachDomainChild, isDomainArrayLiteralExpression, isDomainCallExpression, isDomainJsxAttribute, isDomainJsxExpression, isDomainObjectLiteralExpression, isDomainPropertyAssignment, isDomainSpreadElement, isDomainTailwindClassLiteral, } from "#/arrange/domain/ast/ast-node";
2
+ import { buildKnownCnTvBindings, isCnOrTvIdentifier } from "#/arrange/domain/ast/helpers";
3
+ import { MAX_OBJECT_DEPTH } from "#/arrange/domain/constants";
4
+ import { escapeTsStringLiteralContent } from "#/arrange/domain/source-text-formatters";
5
+ import { indentOfLineContaining } from "#/core/source-text-edit";
6
+ function toFlatString(text) {
7
+ return `"${escapeTsStringLiteralContent(text.trim())}"`;
8
+ }
9
+ function joinLiterals(args) {
10
+ return args
11
+ .filter(isDomainTailwindClassLiteral)
12
+ .map((lit) => lit.text)
13
+ .join(" ");
14
+ }
15
+ function isAllStaticLiterals(args) {
16
+ return args.length > 0 && args.every(isDomainTailwindClassLiteral);
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // Mixed cn() merge: ALL static args → one string first, dynamic args follow
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * For a cn() call that has both static and dynamic args:
23
+ * - Merge ALL static string literals (regardless of position) into one string.
24
+ * - Place the merged string first.
25
+ * - Append all dynamic args in their original relative order.
26
+ *
27
+ * Returns `null` when nothing changes (0 statics, or already 1 static at arg[0]).
28
+ */
29
+ function buildMixedCnReplacement(call, sourceText) {
30
+ const args = [...call.arguments];
31
+ if (args.length === 0) {
32
+ return null;
33
+ }
34
+ const staticTexts = [];
35
+ const dynamicSrcs = [];
36
+ for (const arg of args) {
37
+ if (isDomainTailwindClassLiteral(arg)) {
38
+ staticTexts.push(arg.text);
39
+ }
40
+ else {
41
+ dynamicSrcs.push(sourceText.slice(arg.pos, arg.end));
42
+ }
43
+ }
44
+ if (staticTexts.length === 0) {
45
+ return null;
46
+ }
47
+ // Already simplest form: 1 static arg already at the front.
48
+ const firstArg = args[0];
49
+ if (staticTexts.length === 1 && firstArg !== undefined && isDomainTailwindClassLiteral(firstArg)) {
50
+ return null;
51
+ }
52
+ const flatStatic = staticTexts.join(" ").trim();
53
+ const baseIndent = indentOfLineContaining(sourceText, call.pos);
54
+ const argIndent = `${baseIndent} `;
55
+ const lines = [
56
+ `${argIndent}"${escapeTsStringLiteralContent(flatStatic)}",`,
57
+ ...dynamicSrcs.map((src) => `${argIndent}${src},`),
58
+ ];
59
+ return `cn(\n${lines.join("\n")}\n${baseIndent})`;
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // tv() array collector
63
+ // ---------------------------------------------------------------------------
64
+ function collectTvArrayEdits(obj, results, depth) {
65
+ if (depth > MAX_OBJECT_DEPTH) {
66
+ return;
67
+ }
68
+ for (const prop of obj.properties) {
69
+ if (!isDomainPropertyAssignment(prop)) {
70
+ continue;
71
+ }
72
+ const init = prop.initializer;
73
+ if (isDomainArrayLiteralExpression(init)) {
74
+ const elements = [...init.elements];
75
+ const hasSpread = elements.some(isDomainSpreadElement);
76
+ if (!hasSpread && elements.length > 0 && isAllStaticLiterals(elements)) {
77
+ results.push({
78
+ start: init.pos,
79
+ end: init.end,
80
+ replacement: toFlatString(joinLiterals(elements)),
81
+ label: "tv-array",
82
+ });
83
+ }
84
+ }
85
+ else if (isDomainObjectLiteralExpression(init)) {
86
+ collectTvArrayEdits(init, results, depth + 1);
87
+ }
88
+ }
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // Public collector
92
+ // ---------------------------------------------------------------------------
93
+ /**
94
+ * Collect all simplify edits for a source file:
95
+ * - Arrays of pure string literals inside tv() slots → flat string
96
+ * - cn() calls whose every argument is a static string literal → flat string (unwrap cn)
97
+ * - cn() calls with mixed static + dynamic args → merge adjacent statics into one string
98
+ * - JSX className={cn(...all-static...)} → className="flat string"
99
+ *
100
+ * @since 0.3.16-canary.0
101
+ */
102
+ export function collectSimplifyTargets(sourceFile) {
103
+ const sourceText = sourceFile.text;
104
+ const results = [];
105
+ const knownBindings = buildKnownCnTvBindings(sourceFile);
106
+ const seenCnPos = new Set();
107
+ const visitNode = (node) => {
108
+ if (isDomainCallExpression(node)) {
109
+ if (isCnOrTvIdentifier(node.expression, "tv", knownBindings)) {
110
+ const arg0 = node.arguments[0];
111
+ if (arg0 && isDomainObjectLiteralExpression(arg0)) {
112
+ collectTvArrayEdits(arg0, results, 0);
113
+ }
114
+ }
115
+ else if (isCnOrTvIdentifier(node.expression, "cn", knownBindings) && !seenCnPos.has(node.pos)) {
116
+ seenCnPos.add(node.pos);
117
+ const args = [...node.arguments];
118
+ if (isAllStaticLiterals(args)) {
119
+ // All static → remove cn() wrapper entirely
120
+ const flat = joinLiterals(args);
121
+ const parent = node.parent;
122
+ if (parent && isDomainJsxExpression(parent) && parent.parent && isDomainJsxAttribute(parent.parent)) {
123
+ // className={cn("a", "b")} → className="a b"
124
+ results.push({
125
+ start: parent.pos,
126
+ end: parent.end,
127
+ replacement: toFlatString(flat),
128
+ label: "jsx-cn",
129
+ });
130
+ }
131
+ else {
132
+ results.push({
133
+ start: node.pos,
134
+ end: node.end,
135
+ replacement: toFlatString(flat),
136
+ label: "cn-static",
137
+ });
138
+ }
139
+ }
140
+ else {
141
+ // Mixed static + dynamic → merge adjacent statics
142
+ const replacement = buildMixedCnReplacement(node, sourceText);
143
+ if (replacement !== null) {
144
+ results.push({
145
+ start: node.pos,
146
+ end: node.end,
147
+ replacement,
148
+ label: "cn-merge",
149
+ });
150
+ }
151
+ }
152
+ }
153
+ }
154
+ forEachDomainChild(node, visitNode);
155
+ };
156
+ for (const stmt of sourceFile.statements) {
157
+ visitNode(stmt);
158
+ }
159
+ return results;
160
+ }
161
+ //# sourceMappingURL=simplify-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simplify-targets.js","sourceRoot":"","sources":["../../../../src/arrange/domain/ast/simplify-targets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ import { isDomainArrayLiteralExpression, isDomainJsxAttribute, isDomainPropertyAssignment, isDomainTailwindClassLiteral, forEachDomainChild, } from "#/arrange/domain/ast/ast-node";
2
+ import { isUnsafeLiteralForCnStyleApplySplit } from "#/arrange/domain/ast/collectors-cn";
3
+ import { jsxClassNameStaticLiteral } from "#/arrange/domain/ast/collectors-jsx";
4
+ import { collectGroupableStringNodes, slotClassString } from "#/arrange/domain/ast/collectors-tv";
5
+ import { APPLY_MIN_TOKENS } from "#/arrange/domain/constants";
6
+ import { areCnTailwindPartitionsEquivalent, suggestCnGroups, summarizeGroupBucketLabels, } from "#/arrange/domain/grouping";
7
+ import { escapeTsStringLiteralContent, formatArray, formatArrayElementsAsSiblingLines, formatJsxCnAttributeValue, } from "#/arrange/domain/source-text-formatters";
8
+ import { tokenizeClassString } from "#/arrange/domain/tailwind-token";
9
+ import { endAfterOptionalCommaFollowingInSource, indentOfLineContaining, textPrefixFromLineStartToPosition, } from "#/core/source-text-edit";
10
+ /**
11
+ * @since 0.3.16-canary.0
12
+ */
13
+ export function targetReplaceStart(target) {
14
+ if (target.kind === "cnArg") {
15
+ return target.item.cnCall ? target.item.cnCall.pos : target.item.primaryClassLiteral.pos;
16
+ }
17
+ return target.valueNode.pos;
18
+ }
19
+ function collectLongJsxClassNameTargets(sourceFile) {
20
+ const results = [];
21
+ const visitTypeScriptSubtree = (tsNode) => {
22
+ if (isDomainJsxAttribute(tsNode)) {
23
+ const parsed = jsxClassNameStaticLiteral(tsNode);
24
+ if (parsed && tokenizeClassString(parsed.lit.text).length >= APPLY_MIN_TOKENS) {
25
+ results.push({
26
+ kind: "jsxClassName",
27
+ sf: sourceFile,
28
+ lit: parsed.lit,
29
+ valueNode: parsed.valueNode,
30
+ });
31
+ }
32
+ }
33
+ forEachDomainChild(tsNode, visitTypeScriptSubtree);
34
+ };
35
+ for (const stmt of sourceFile.statements) {
36
+ visitTypeScriptSubtree(stmt);
37
+ }
38
+ return results;
39
+ }
40
+ /**
41
+ * @since 0.3.16-canary.0
42
+ */
43
+ export function collectGroupTargets(sourceFile, filePath) {
44
+ const cnPart = collectGroupableStringNodes(sourceFile).map((stringNode) => ({
45
+ kind: "cnArg",
46
+ item: stringNode,
47
+ }));
48
+ if (!filePath.endsWith(".tsx")) {
49
+ return cnPart;
50
+ }
51
+ return [...cnPart, ...collectLongJsxClassNameTargets(sourceFile)];
52
+ }
53
+ function formatCnCallReplacement(stringNode, sourceText, withClassName) {
54
+ const call = stringNode.cnCall;
55
+ if (call === undefined) {
56
+ throw new Error("formatCnCallReplacement requires a cn() call on the string node");
57
+ }
58
+ const baseIndent = indentOfLineContaining(sourceText, call.pos);
59
+ const argIndent = `${baseIndent} `;
60
+ const dynamicArgTexts = [];
61
+ for (const arg of call.arguments) {
62
+ const isSimpleStatic = isDomainTailwindClassLiteral(arg) && !isUnsafeLiteralForCnStyleApplySplit(arg);
63
+ if (!isSimpleStatic) {
64
+ dynamicArgTexts.push(sourceText.slice(arg.pos, arg.end));
65
+ }
66
+ }
67
+ const pool = slotClassString(stringNode);
68
+ const groups = pool.trim() ? suggestCnGroups(pool) : [];
69
+ const allArgs = [];
70
+ if (groups.length > 1) {
71
+ for (const group of groups) {
72
+ allArgs.push(`${argIndent}"${escapeTsStringLiteralContent(group)}"`);
73
+ }
74
+ }
75
+ else if (groups.length === 1) {
76
+ const onlyGroup = groups[0];
77
+ if (onlyGroup === undefined) {
78
+ throw new Error("invariant: single cn group missing");
79
+ }
80
+ allArgs.push(`${argIndent}"${escapeTsStringLiteralContent(onlyGroup)}"`);
81
+ }
82
+ for (const dynamicArgumentSource of dynamicArgTexts) {
83
+ allArgs.push(`${argIndent}${dynamicArgumentSource}`);
84
+ }
85
+ if (withClassName) {
86
+ allArgs.push(`${argIndent}className`);
87
+ }
88
+ // Keep formatter behavior explicit: multiline cn() calls with multiple args use trailing comma.
89
+ const commaAfterLastArg = allArgs.length > 1;
90
+ const argLines = allArgs.map((argLine, lineIndex) => lineIndex < allArgs.length - 1 || commaAfterLastArg ? `${argLine},` : argLine);
91
+ return `cn(\n${argLines.join("\n")}\n${baseIndent})`;
92
+ }
93
+ /**
94
+ * @since 0.3.16-canary.0
95
+ */
96
+ export function planGroupEditForTarget(target, textAfterUnwrap, withClassName) {
97
+ if (target.kind === "jsxClassName") {
98
+ const groups = suggestCnGroups(target.lit.text);
99
+ if (groups.length <= 1) {
100
+ return undefined;
101
+ }
102
+ const start = target.valueNode.pos;
103
+ const end = target.valueNode.end;
104
+ const replacement = formatJsxCnAttributeValue(groups, textAfterUnwrap, start);
105
+ return {
106
+ start,
107
+ end,
108
+ replacement,
109
+ bucketSummary: summarizeGroupBucketLabels(groups),
110
+ jsxCn: true,
111
+ lineSf: target.sf,
112
+ reportNode: target.lit,
113
+ label: "JSX className",
114
+ };
115
+ }
116
+ const pool = slotClassString(target.item);
117
+ const groups = suggestCnGroups(pool);
118
+ if (groups.length <= 1) {
119
+ return undefined;
120
+ }
121
+ if (areCnTailwindPartitionsEquivalent(target.item.nodes.map((classLiteral) => classLiteral.text), groups)) {
122
+ return undefined;
123
+ }
124
+ if (!target.item.cnCall) {
125
+ const anchorClassLiteral = target.item.primaryClassLiteral;
126
+ const parentNode = anchorClassLiteral.parent;
127
+ const parentArray = target.item.nodes.length > 1 && parentNode !== null && isDomainArrayLiteralExpression(parentNode)
128
+ ? parentNode
129
+ : null;
130
+ // A bare string value of a property (e.g. `slot: "a b c"`) must be wrapped in
131
+ // an array literal. Emitting sibling lines would prepend the property prefix
132
+ // (`slot: `) to each continuation line, producing duplicate object keys.
133
+ const bareStringProperty = !parentArray && parentNode !== null && isDomainPropertyAssignment(parentNode);
134
+ if (parentArray || bareStringProperty) {
135
+ const start = parentArray ? parentArray.pos : anchorClassLiteral.pos;
136
+ const end = parentArray ? parentArray.end : anchorClassLiteral.end;
137
+ const baseIndent = indentOfLineContaining(textAfterUnwrap, start);
138
+ const replacement = formatArray(groups)
139
+ .split("\n")
140
+ .map((line, lineIndex) => (lineIndex === 0 ? line : `${baseIndent}${line}`))
141
+ .join("\n");
142
+ return {
143
+ start,
144
+ end,
145
+ replacement,
146
+ bucketSummary: summarizeGroupBucketLabels(groups),
147
+ jsxCn: false,
148
+ lineSf: target.item.sf,
149
+ reportNode: anchorClassLiteral,
150
+ label: target.item.isTvContext ? "tv" : "cn",
151
+ };
152
+ }
153
+ const start = anchorClassLiteral.pos;
154
+ const end = endAfterOptionalCommaFollowingInSource(textAfterUnwrap, anchorClassLiteral.end);
155
+ const replacement = formatArrayElementsAsSiblingLines(groups, textPrefixFromLineStartToPosition(textAfterUnwrap, start));
156
+ return {
157
+ start,
158
+ end,
159
+ replacement,
160
+ bucketSummary: summarizeGroupBucketLabels(groups),
161
+ jsxCn: false,
162
+ lineSf: target.item.sf,
163
+ reportNode: anchorClassLiteral,
164
+ label: target.item.isTvContext ? "tv" : "cn",
165
+ };
166
+ }
167
+ const call = target.item.cnCall;
168
+ const start = call.pos;
169
+ const end = call.end;
170
+ const replacement = formatCnCallReplacement(target.item, textAfterUnwrap, withClassName);
171
+ return {
172
+ start,
173
+ end,
174
+ replacement,
175
+ bucketSummary: summarizeGroupBucketLabels(groups),
176
+ jsxCn: false,
177
+ lineSf: target.item.sf,
178
+ reportNode: target.item.primaryClassLiteral,
179
+ label: target.item.isTvContext ? "tv" : "cn",
180
+ };
181
+ }
182
+ //# sourceMappingURL=targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targets.js","sourceRoot":"","sources":["../../../../src/arrange/domain/ast/targets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Analyze report: long literal threshold (token count).
3
+ *
4
+ * @since 0.3.16-canary.0
5
+ */
6
+ export const LONG_STRING_TOKEN_THRESHOLD = 18;
7
+ /**
8
+ * Minimum token count for a string to be considered a candidate for grouping
9
+ * in the apply/preview pipeline. Intentionally much lower than
10
+ * {@link LONG_STRING_TOKEN_THRESHOLD} (analyze only).
11
+ *
12
+ * @since 0.3.16-canary.0
13
+ */
14
+ export const APPLY_MIN_TOKENS = 2;
15
+ /**
16
+ * Minimum tokens a group must have to stand alone before singleton-merging.
17
+ * Set to 2 so single-token groups are not collapsed into unrelated buckets by the merger.
18
+ *
19
+ * @since 0.3.16-canary.0
20
+ */
21
+ export const MIN_GROUP_TOKENS = 2;
22
+ /**
23
+ * Dynamic max groups clamp: base bound.
24
+ *
25
+ * @since 0.3.16-canary.0
26
+ */
27
+ export const MAX_GROUPS_BASE = 4;
28
+ /**
29
+ * Dynamic max groups clamp: upper cap.
30
+ *
31
+ * @since 0.3.16-canary.0
32
+ */
33
+ export const MAX_GROUPS_CAP = 24;
34
+ /**
35
+ * Extra slots so a few state / aria groups do not force `capGroups` to merge
36
+ * unrelated buckets (e.g. `bg-border` + `outline-hidden`).
37
+ *
38
+ * @since 0.3.16-canary.0
39
+ */
40
+ export const MAX_GROUPS_HEADROOM = 2;
41
+ /**
42
+ * Maximum findings printed per category in the analyze report.
43
+ *
44
+ * @since 0.3.16-canary.0
45
+ */
46
+ export const MAX_REPORT_LINES = 40;
47
+ /**
48
+ * Maximum recursion depth when traversing `tv()` object literals.
49
+ *
50
+ * @since 0.3.16-canary.0
51
+ */
52
+ export const MAX_OBJECT_DEPTH = 12;
53
+ /**
54
+ * Maximum depth when peeling conditional / parens / arrays inside `cn(...)` args.
55
+ *
56
+ * @since 0.3.16-canary.0
57
+ */
58
+ export const MAX_CLASS_EXPR_DEPTH = 12;
59
+ /**
60
+ * Maximum variant-stripping passes in {@link stripVariants}.
61
+ * Real-world Tailwind stacks rarely exceed 4–5 segments (e.g. `@md/sidebar:group-hover:dark:focus-visible:`);
62
+ * 12 is a conservative safety cap that prevents runaway loops on malformed input.
63
+ *
64
+ * @since 0.3.16-canary.0
65
+ */
66
+ export const MAX_STRIP_VARIANT_PASSES = 12;
67
+ /**
68
+ * Passed when optional `knownBindings` is missing — size 0 disables matching
69
+ * for `cn` / `tv` identifier resolution.
70
+ *
71
+ * @since 0.3.16-canary.0
72
+ */
73
+ export const EMPTY_CN_TV_BINDINGS = new Set();
74
+ /**
75
+ * Bucket sort order — **render pipeline** (lower → earlier in `cn()` output).
76
+ *
77
+ * Matches README: Existence → Position → Layout → Sizing → Spacing → Shape → Background
78
+ * → Shadow → Typography → Composite → Motion → Starting → Behavior → State → Selector,
79
+ * then `other` and `arbitrary` as sort tails for unknown utilities and arbitrary properties.
80
+ *
81
+ * @since 0.3.16-canary.0
82
+ */
83
+ export const BUCKET_ORDER = {
84
+ existence: 0,
85
+ position: 1,
86
+ layout: 2,
87
+ sizing: 3,
88
+ spacing: 4,
89
+ shape: 5,
90
+ background: 6,
91
+ shadow: 7,
92
+ typography: 8,
93
+ composite: 9,
94
+ motion: 10,
95
+ starting: 11,
96
+ behavior: 12,
97
+ state: 13,
98
+ selector: 14,
99
+ other: 15,
100
+ arbitrary: 16,
101
+ };
102
+ /**
103
+ * Compatible bucket **pairs** — two adjacent tokens whose buckets appear in the same
104
+ * `Set` may stay in one `cn()` string chunk. Compatibility is **not transitive**: there is
105
+ * no `{position, sizing}` pair, so `fixed inset-0` and `overflow-auto` become **separate**
106
+ * literals unless **layout** tokens sit between them in sorted order; then
107
+ * `position↔layout` and `layout↔sizing` each justify one hop and the whole “box in flow”
108
+ * (place + tracks + scrollport) stays in one chunk — co-located because they jointly define
109
+ * stacking and scroll behavior for the same surface.
110
+ *
111
+ * @since 0.3.16-canary.0
112
+ */
113
+ export const COMPATIBLE_BUCKET_SETS = [
114
+ // existence + position: named container / group / peer context edited next to inset & z-index.
115
+ new Set(["existence", "position"]),
116
+ // existence + layout: `group/cmd` + `flex …` are one template row (context + grid/flex).
117
+ new Set(["existence", "layout"]),
118
+ // position + layout: `fixed inset-0` + `grid` describe the same stacking + track shell.
119
+ new Set(["position", "layout"]),
120
+ // layout + sizing: `grid` + `overflow-auto` / min size are one scrollport / track concern.
121
+ new Set(["layout", "sizing"]),
122
+ // shape + shadow: radius/border + shadow/outline overlay are one “chrome” literal in UIs.
123
+ new Set(["shape", "shadow"]),
124
+ // background + shadow: fill + depth (card surface) without splitting noise across args.
125
+ new Set(["background", "shadow"]),
126
+ // background + typography: destructive buttons etc. (`bg-*` + `text-*` on the same control).
127
+ new Set(["background", "typography"]),
128
+ // layout + typography: title rows (`flex` + `text-sm`) in one literal when adjacent in sort order.
129
+ new Set(["layout", "typography"]),
130
+ // sizing + typography: chart shell (`aspect-video` + `text-xs`) before selector-variant chunks.
131
+ new Set(["sizing", "typography"]),
132
+ // motion + behavior: `transition-*` with `pointer-events-*` / `select-*` on the same surface.
133
+ new Set(["motion", "behavior"]),
134
+ // motion + starting: `transition` beside `starting:*` for coordinated enter/exit motion.
135
+ new Set(["motion", "starting"]),
136
+ // composite + motion: transforms then transitions (`-translate-*` + `transition-*` + `ease-*`).
137
+ new Set(["composite", "motion"]),
138
+ // sizing + composite: width/position utilities with transforms in one interaction block.
139
+ new Set(["sizing", "composite"]),
140
+ // sizing + spacing: width utilities with padding on the same slot (`w-auto` + `px-3`).
141
+ new Set(["sizing", "spacing"]),
142
+ ];
143
+ /**
144
+ * Responsive / variant prefix — Tailwind v4 aware.
145
+ *
146
+ * v3: sm: md: … — v4: @sm:, @min-[600px]:, @[480px]:, named @md/sidebar:,
147
+ * viewport md/sidebar:, min-[100px]: / max-[100px]:, …
148
+ *
149
+ * @since 0.3.16-canary.0
150
+ */
151
+ export const RESPONSIVE_PREFIX = /^(?:@(?:min|max)-\[[^\]]+\]:|@\[[^\]]+\]:|@(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/[a-z][a-z0-9-]*)?:|(?:max-|min-)?(?:sm|md|lg|xl|2xl|3xl)(?:\/[a-z][a-z0-9-]*)?:|(?:max-|min-)\[[^\]]+\]:)/;
152
+ /**
153
+ * State variant stems — hoisted to module scope (not recreated per call).
154
+ *
155
+ * @since 0.3.16-canary.0
156
+ */
157
+ export const STATE_PREFIXES = new Set([
158
+ "hover",
159
+ "focus",
160
+ "focus-within",
161
+ "focus-visible",
162
+ "active",
163
+ "visited",
164
+ "link",
165
+ "any-link",
166
+ "disabled",
167
+ "enabled",
168
+ "checked",
169
+ "indeterminate",
170
+ "required",
171
+ "optional",
172
+ "valid",
173
+ "invalid",
174
+ "in-range",
175
+ "out-of-range",
176
+ "read-only",
177
+ "read-write",
178
+ "placeholder-shown",
179
+ "default",
180
+ "autofill",
181
+ "open",
182
+ "closed",
183
+ "first",
184
+ "last",
185
+ "only",
186
+ "odd",
187
+ "even",
188
+ "first-of-type",
189
+ "last-of-type",
190
+ "only-of-type",
191
+ "first-child",
192
+ "last-child",
193
+ "only-child",
194
+ "empty",
195
+ "target",
196
+ "group",
197
+ "peer",
198
+ "aria",
199
+ "data",
200
+ "dark",
201
+ "light",
202
+ "supports",
203
+ "motion-reduce",
204
+ "motion-safe",
205
+ "print",
206
+ "screen",
207
+ "ltr",
208
+ "rtl",
209
+ "not",
210
+ "has",
211
+ "in",
212
+ "nth",
213
+ "file",
214
+ "selection",
215
+ "marker",
216
+ "placeholder",
217
+ "before",
218
+ "after",
219
+ "first-line",
220
+ "first-letter",
221
+ "backdrop",
222
+ "details-content",
223
+ "popover-open",
224
+ ]);
225
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/arrange/domain/constants.ts"],"names":[],"mappings":"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"}