@codefast/cli 1.0.0-canary.6 → 1.0.0-canary.7

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 +27 -21
  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,448 @@
1
+ import { COMPATIBLE_BUCKET_SETS, RESPONSIVE_PREFIX, STATE_PREFIXES } from "#/arrange/domain/constants";
2
+ import { indexOfFirstVariantColon, stripVariants } from "#/arrange/domain/tailwind-token";
3
+ /**
4
+ * Bare-token classification is **total** (always returns a {@link Bucket}). The `Result` pattern
5
+ * (`isOk` / `isErr`) belongs at arrange use-case / I/O boundaries, not on this hot path.
6
+ *
7
+ * Variant stems not covered by a single entry in STATE_PREFIXES (compound `has-*`,
8
+ * numbered `nth-*`, media features, v4 `in-[…]`, child selectors `*` / `**`, …).
9
+ * When these are missed, `isStateToken` is false and the variant is stripped — the
10
+ * utility is then bucketed as if it were unconditional, which breaks preview grouping.
11
+ */
12
+ function isCompoundOrMediaVariantPrefix(prefix) {
13
+ if (prefix === "*" || prefix === "**") {
14
+ return true;
15
+ }
16
+ if (prefix === "inert") {
17
+ return true;
18
+ }
19
+ if (prefix.startsWith("has-")) {
20
+ return true;
21
+ }
22
+ if (prefix.startsWith("in-[")) {
23
+ return true;
24
+ }
25
+ if (/^nth(?:-last)?(?:-of-type)?(?:-\d+|-\[)/.test(prefix) ||
26
+ /^nth-of-type-\d+$/.test(prefix) ||
27
+ /^nth-last-of-type-\d+$/.test(prefix)) {
28
+ return true;
29
+ }
30
+ if (/^(?:user-valid|user-invalid|contrast-more|contrast-less|forced-colors|inverted-colors)$/.test(prefix)) {
31
+ return true;
32
+ }
33
+ if (/^(?:any-)?pointer-(?:fine|coarse|none)$/.test(prefix)) {
34
+ return true;
35
+ }
36
+ if (/^(?:portrait|landscape|noscript)$/.test(prefix)) {
37
+ return true;
38
+ }
39
+ return false;
40
+ }
41
+ /**
42
+ * Outermost variant segment: first `:` at bracket depth 0 → text before it.
43
+ */
44
+ function firstLeadingVariantPrefix(token) {
45
+ const colonIdx = indexOfFirstVariantColon(token);
46
+ if (colonIdx === -1) {
47
+ return undefined;
48
+ }
49
+ return token.slice(0, colonIdx);
50
+ }
51
+ function isSelectorVariantToken(token) {
52
+ const prefix = firstLeadingVariantPrefix(token);
53
+ if (prefix === undefined) {
54
+ return false;
55
+ }
56
+ if (prefix === "*" || prefix === "**") {
57
+ return true;
58
+ }
59
+ if (prefix.startsWith("has-")) {
60
+ return true;
61
+ }
62
+ if (prefix.startsWith("in-[")) {
63
+ return true;
64
+ }
65
+ if (prefix.startsWith("group-[")) {
66
+ return true;
67
+ }
68
+ if (prefix.startsWith("peer-[")) {
69
+ return true;
70
+ }
71
+ if (prefix.startsWith("not-[")) {
72
+ return true;
73
+ }
74
+ return false;
75
+ }
76
+ function isStateToken(token) {
77
+ const prefix = firstLeadingVariantPrefix(token);
78
+ if (prefix === undefined) {
79
+ return false;
80
+ }
81
+ if (RESPONSIVE_PREFIX.test(token)) {
82
+ return true;
83
+ }
84
+ if (STATE_PREFIXES.has(prefix)) {
85
+ return true;
86
+ }
87
+ if (prefix.startsWith("data-[")) {
88
+ return true;
89
+ }
90
+ if (prefix.startsWith("aria-[")) {
91
+ return true;
92
+ }
93
+ if (prefix.startsWith("supports-[")) {
94
+ return true;
95
+ }
96
+ // Tailwind v4: style when inside an ancestor with matching `data-*` (e.g. `in-data-side-left:`,
97
+ // `in-data-[slot=tooltip-content]:`). The short stem `in` is in STATE_PREFIXES but outer
98
+ // prefixes are `in-data-…`, so they must be recognized explicitly.
99
+ if (prefix.startsWith("in-data-")) {
100
+ return true;
101
+ }
102
+ if (/^data-(?!\[)/.test(prefix)) {
103
+ return true;
104
+ }
105
+ if (prefix.startsWith("aria-")) {
106
+ return true;
107
+ }
108
+ if (/^(group|peer)-/.test(prefix)) {
109
+ return true;
110
+ }
111
+ if (prefix.startsWith("not-")) {
112
+ return true;
113
+ }
114
+ if (isCompoundOrMediaVariantPrefix(prefix)) {
115
+ return true;
116
+ }
117
+ if (prefix.startsWith("[") && prefix.endsWith("]")) {
118
+ return true;
119
+ }
120
+ return false;
121
+ }
122
+ /**
123
+ * Secondary sort inside the **composite** bucket: opacity / blend / isolation →
124
+ * 3D context → 3D transforms → 2D transforms → filters → will-change.
125
+ *
126
+ * @since 0.3.16-canary.0
127
+ */
128
+ export function compositeSecondaryOrder(bareUtility) {
129
+ const b = bareUtility;
130
+ if (/^opacity(?:-|$)/.test(b) || b.startsWith("mix-blend-") || /^isolation(?:-|$)/.test(b) || b === "isolate") {
131
+ return 0;
132
+ }
133
+ if (b === "transform-3d" || /^perspective(?:-|$)/.test(b)) {
134
+ return 10;
135
+ }
136
+ if (/^rotate-[xyz](?:-|$)/.test(b) || /^translate-z(?:-|$)/.test(b) || /^scale-z(?:-|$)/.test(b)) {
137
+ return 20;
138
+ }
139
+ if (/^translate(?:-|$)/.test(b) || /^scale(?:-|$)/.test(b) || /^rotate(?:-|$)/.test(b) || /^skew(?:-|$)/.test(b)) {
140
+ return 30;
141
+ }
142
+ if (/^transform(?:-(?:gpu|cpu|none))?$/.test(b)) {
143
+ return 35;
144
+ }
145
+ if (/^blur(?:-|$)/.test(b) ||
146
+ b.startsWith("backdrop-") ||
147
+ /^filter(?:-|$)/.test(b) ||
148
+ b.startsWith("brightness-") ||
149
+ b.startsWith("contrast-") ||
150
+ /^grayscale(?:-|$)/.test(b) ||
151
+ b.startsWith("hue-rotate-") ||
152
+ /^invert(?:-|$)/.test(b) ||
153
+ b.startsWith("saturate-") ||
154
+ /^sepia(?:-|$)/.test(b)) {
155
+ return 40;
156
+ }
157
+ if (b.startsWith("will-change")) {
158
+ return 50;
159
+ }
160
+ return 99;
161
+ }
162
+ /**
163
+ * Classify a **bare** utility (no `hover:` / `md:` / … prefixes).
164
+ */
165
+ function classifyBareUtility(bareUtility) {
166
+ const b = bareUtility;
167
+ // --- Existence: display roots, containment, named groups/peers ---
168
+ if (/^@container(?:\/[a-z][a-z0-9-]*)?$/i.test(b)) {
169
+ return "existence";
170
+ }
171
+ if (/^(?:hidden|contents|sr-only|not-sr-only|list-item|flow-root)$/.test(b) ||
172
+ /^(?:block|inline-block|inline)$/.test(b)) {
173
+ return "existence";
174
+ }
175
+ if (/^table(?:$|-)/.test(b)) {
176
+ return "existence";
177
+ }
178
+ if (b.startsWith("contain-")) {
179
+ return "existence";
180
+ }
181
+ if (/^(?:group|peer)(?:\/[a-z][a-z0-9-]*)?$/.test(b)) {
182
+ return "existence";
183
+ }
184
+ // --- Position ---
185
+ if (/^(?:static|relative|absolute|fixed|sticky)$/.test(b)) {
186
+ return "position";
187
+ }
188
+ if (/^-?(?:inset|top|right|bottom|left|start|end)(?:-|\/|$)/.test(b) ||
189
+ /^-?(?:inset-x|inset-y|inset-s|inset-e)-/.test(b)) {
190
+ return "position";
191
+ }
192
+ if (/^-?z-/.test(b) || b === "z-auto") {
193
+ return "position";
194
+ }
195
+ // --- Layout ---
196
+ if (/^(?:flex|inline-flex|grid|inline-grid|subgrid|masonry)(?:$|-)/.test(b) ||
197
+ /^(?:items|justify|justify-items|justify-self|content|self|place|place-content|place-items|place-self)-/.test(b) ||
198
+ /^-?(?:gap|space-[xy]|col-|row-|grid-|auto-cols|auto-rows|order-|order$)/.test(b) ||
199
+ /^-?(?:auto-flow|grid-flow)-/.test(b) ||
200
+ /^(?:columns-|break-after|break-before|break-inside)-/.test(b) ||
201
+ /^(?:float|clear)-/.test(b) ||
202
+ /^(?:wrap-|flex-wrap|flex-nowrap|flex-row|flex-col|flex-auto|flex-initial|flex-none|flex-1|flex-\[)/.test(b) ||
203
+ /^container$/.test(b)) {
204
+ return "layout";
205
+ }
206
+ // --- Sizing ---
207
+ if (/^-?(?:w|h|min-w|max-w|min-h|max-h|size|aspect|shrink|grow|basis)-/.test(b) ||
208
+ /^(?:shrink|grow)(?:$|-)/.test(b) ||
209
+ /^-?overflow-/.test(b) ||
210
+ /^-?object-/.test(b)) {
211
+ return "sizing";
212
+ }
213
+ // --- Spacing (margin / padding only; gap lives in layout) ---
214
+ if (/^-?(?:p|px|py|pt|pb|pl|pr|ps|pe|m|mx|my|mt|mb|ml|mr|ms|me)-/.test(b)) {
215
+ return "spacing";
216
+ }
217
+ // --- Shape & border (no `outline-*` — see Shadow; outline paints in the overlay pass) ---
218
+ if (/^-?(?:rounded|border|ring|divide|inset-ring)(?:-|\/|$)/.test(b) ||
219
+ /^(?:rounded|border|ring|divide|inset-ring)$/.test(b) ||
220
+ b.startsWith("ring-offset-")) {
221
+ return "shape";
222
+ }
223
+ // --- Background & fill ---
224
+ if (/^-?bg-/.test(b) ||
225
+ /^(?:from|via|to)(?:-|\/|$)/.test(b) ||
226
+ /^bg-(?:linear|radial|conic)-/.test(b) ||
227
+ /^-?mask-/.test(b) ||
228
+ /^-?(?:fill|stroke)-/.test(b)) {
229
+ return "background";
230
+ }
231
+ // --- Shadow & depth (includes `outline-*` — same paint phase as box-shadow overlay) ---
232
+ if (/^-?(?:shadow|inset-shadow|drop-shadow|text-shadow)(?:-|\/|$)/.test(b) ||
233
+ /^(?:shadow|inset-shadow)$/.test(b) ||
234
+ /^-?outline(?:-|\/|$)/.test(b) ||
235
+ /^outline$/.test(b)) {
236
+ return "shadow";
237
+ }
238
+ // --- Typography ---
239
+ if (/^-?(?:font|leading|tracking|list|indent|align|decoration|underline-offset|text-wrap|text-balance|text-pretty)-/.test(b) ||
240
+ /^-?(?:text-(?!shadow))/.test(b) ||
241
+ /^-?(?:whitespace|break|line-clamp|hyphens)-/.test(b) ||
242
+ /^(?:antialiased|subpixel-antialiased|italic|not-italic|overline|line-through|underline|no-underline|uppercase|lowercase|capitalize|normal-case|truncate|text-wrap|text-balance|text-pretty)$/.test(b) ||
243
+ b.startsWith("text-wrap-") ||
244
+ /^tabular-nums$|^slashed-zero$|^lining-nums$|^oldstyle-nums$|^proportional-nums$/.test(b)) {
245
+ return "typography";
246
+ }
247
+ // --- Composite & transforms (GPU / filter stack) ---
248
+ if (/^opacity(?:-|$)/.test(b) ||
249
+ b.startsWith("mix-blend-") ||
250
+ /^isolation(?:-|$)/.test(b) ||
251
+ b === "isolate" ||
252
+ /^transform(?:-(?:gpu|cpu|none))?$/.test(b) ||
253
+ /^-?(?:translate|scale|rotate|skew)-/.test(b) ||
254
+ /^perspective(?:-|$)/.test(b) ||
255
+ b === "transform-3d" ||
256
+ /^blur(?:-|$)/.test(b) ||
257
+ b.startsWith("backdrop-") ||
258
+ /^filter(?:-|$)/.test(b) ||
259
+ b.startsWith("brightness-") ||
260
+ b.startsWith("contrast-") ||
261
+ /^grayscale(?:-|$)/.test(b) ||
262
+ b.startsWith("hue-rotate-") ||
263
+ /^invert(?:-|$)/.test(b) ||
264
+ b.startsWith("saturate-") ||
265
+ /^sepia(?:-|$)/.test(b) ||
266
+ b.startsWith("will-change")) {
267
+ return "composite";
268
+ }
269
+ // --- Motion ---
270
+ if (/^(?:transition|duration|ease|delay|animate)(?:-|$)/.test(b) || b.startsWith("ease-")) {
271
+ return "motion";
272
+ }
273
+ // --- Behavior & interaction ---
274
+ if (/^(?:cursor|pointer-events|select|touch|scroll|scroll-m|scroll-p|overscroll|snap|resize|field-sizing|appearance|scheme|color-scheme|accent|caret)(?:-|$)/.test(b) ||
275
+ /^(?:cursor|select|resize)$/.test(b) ||
276
+ b.startsWith("scroll-behavior") ||
277
+ b.startsWith("scroll-snap") ||
278
+ b.startsWith("touch-action") ||
279
+ b === "inert") {
280
+ return "behavior";
281
+ }
282
+ return "other";
283
+ }
284
+ /**
285
+ * Arbitrary **parent** selectors (`[&…]`, `[&>a]:…`, slot forms with `&` inside the bracket)
286
+ * scope utilities to descendants — bucket as `selector` so they chunk apart from base layout/typography
287
+ * and are labeled distinctly from interactive `state` variants (`hover:`, `data-[…]:`, …).
288
+ * Pure arbitrary **properties** (`[--x]:`, `[color:red]`) have no `&` in the leading `[…]` segment.
289
+ */
290
+ function isArbitraryParentSelectorStateToken(token) {
291
+ if (token.startsWith("[&")) {
292
+ return true;
293
+ }
294
+ if (!token.startsWith("[")) {
295
+ return false;
296
+ }
297
+ const colonIdx = indexOfFirstVariantColon(token);
298
+ if (colonIdx === -1 || colonIdx === 0 || token[colonIdx - 1] !== "]") {
299
+ return false;
300
+ }
301
+ const selector = token.slice(0, colonIdx);
302
+ return selector.includes("&");
303
+ }
304
+ /**
305
+ * @since 0.3.16-canary.0
306
+ */
307
+ export function classifyToken(token) {
308
+ // Before `[` arbitrary-property handling and `isStateToken`, parent-selector tokens must
309
+ // be `selector` so they flush into their own chunk after unconditional utilities.
310
+ if (isArbitraryParentSelectorStateToken(token)) {
311
+ return "selector";
312
+ }
313
+ if (isSelectorVariantToken(token)) {
314
+ return "selector";
315
+ }
316
+ if (/^@container(?:\/[a-z][a-z0-9-]*)?$/i.test(token)) {
317
+ return "existence";
318
+ }
319
+ if (token.startsWith("[")) {
320
+ const splitIdx = indexOfFirstVariantColon(token);
321
+ if (splitIdx === -1) {
322
+ return "arbitrary";
323
+ }
324
+ if (splitIdx === 0 || token[splitIdx - 1] !== "]") {
325
+ return "arbitrary";
326
+ }
327
+ }
328
+ const outer = firstLeadingVariantPrefix(token);
329
+ if (outer === "starting") {
330
+ return "starting";
331
+ }
332
+ if (isStateToken(token)) {
333
+ return "state";
334
+ }
335
+ const bareUtility = stripVariants(token);
336
+ return classifyBareUtility(bareUtility);
337
+ }
338
+ /**
339
+ * Stable key for `data-[…]` variants so unrelated selectors stay split, while
340
+ * **branching on the full bracket** (e.g. `data-[vaul-drawer-direction=bottom]`
341
+ * vs `=left`) keeps direction-specific utilities in separate state groups.
342
+ */
343
+ function dataAttributeStem(token) {
344
+ const match = token.match(/^data-\[([^\]]*)\]/);
345
+ return match ? `data-[${match[1]}]` : "data";
346
+ }
347
+ /**
348
+ * Same idea as {@link dataAttributeStem} for `aria-[…]:` variants.
349
+ */
350
+ function ariaAttributeStem(token) {
351
+ const match = token.match(/^aria-\[([^\]]*)\]/);
352
+ return match ? `aria-[${match[1]}]` : "aria";
353
+ }
354
+ /**
355
+ * `in-data-[…]:` — normalize on the full bracket expression like {@link dataAttributeStem}.
356
+ */
357
+ function inDataAttributeStem(token) {
358
+ const match = token.match(/^in-data-\[([^\]]*)\]/);
359
+ return match ? `in-data-[${match[1]}]` : "in-data";
360
+ }
361
+ /**
362
+ * Stable key for splitting adjacent `state` / `starting` tokens in {@link suggestCnGroups}
363
+ * (`selector` uses {@link selectorKey}).
364
+ * Uses the **full variant stack** (every `:` segment outside `[…]`), not only the
365
+ * outermost prefix, so `@md/foo:[&>*]:w-auto` and `@md/foo:has-[…]:mt-px` stay in
366
+ * separate groups while `hover:opacity` still keys as `hover` + `opacity`…
367
+ *
368
+ * `data-[…]` / `aria-[…]` normalize the first segment via {@link dataAttributeStem} /
369
+ * {@link ariaAttributeStem} (full token required for bracket capture).
370
+ *
371
+ * @since 0.3.16-canary.0
372
+ */
373
+ export function stateKey(token) {
374
+ const layers = [];
375
+ let rest = token;
376
+ while (rest.length > 0) {
377
+ const colonIdx = indexOfFirstVariantColon(rest);
378
+ if (colonIdx === -1) {
379
+ break;
380
+ }
381
+ layers.push(rest.slice(0, colonIdx));
382
+ rest = rest.slice(colonIdx + 1);
383
+ }
384
+ if (layers.length === 0) {
385
+ return token;
386
+ }
387
+ const firstLayer = layers[0];
388
+ if (firstLayer === undefined) {
389
+ return token;
390
+ }
391
+ if (firstLayer.startsWith("data-[")) {
392
+ layers[0] = dataAttributeStem(token);
393
+ }
394
+ else if (firstLayer.startsWith("aria-[")) {
395
+ layers[0] = ariaAttributeStem(token);
396
+ }
397
+ else if (firstLayer.startsWith("in-data-[")) {
398
+ layers[0] = inDataAttributeStem(token);
399
+ }
400
+ return layers.join("\u001f");
401
+ }
402
+ const SELECTOR_KEY_SEP = "\u001f";
403
+ /**
404
+ * Variant key for {@link Bucket} `"selector"` tokens in {@link suggestCnGroups}.
405
+ * Reuses {@link stateKey} layer splitting, then normalizes common Radix SVG patterns so
406
+ * `[&_svg]:…` and `[&_svg:not([class*='size-'])]:…` stay in one chunk.
407
+ *
408
+ * @since 0.3.16-canary.0
409
+ */
410
+ export function selectorKey(token) {
411
+ return stateKey(token).split(SELECTOR_KEY_SEP).map(normalizeSelectorVariantLayer).join(SELECTOR_KEY_SEP);
412
+ }
413
+ function normalizeSelectorVariantLayer(layer) {
414
+ if (layer === "[&_svg:not([class*='size-'])]") {
415
+ return "[&_svg]";
416
+ }
417
+ return layer;
418
+ }
419
+ /**
420
+ * @since 0.3.16-canary.0
421
+ */
422
+ export function bucketsCompatible(a, b) {
423
+ if (a === b) {
424
+ return true;
425
+ }
426
+ return COMPATIBLE_BUCKET_SETS.some((bucketSet) => bucketSet.has(a) && bucketSet.has(b));
427
+ }
428
+ /**
429
+ * Like {@link bucketsCompatible}, but never merge two distinct state / starting / selector variant blobs.
430
+ *
431
+ * @since 0.3.16-canary.0
432
+ */
433
+ export function bucketsMergeCompatible(a, b) {
434
+ if (a === "state" && b === "state") {
435
+ return false;
436
+ }
437
+ if (a === "starting" && b === "starting") {
438
+ return false;
439
+ }
440
+ if (a === "selector" && b === "selector") {
441
+ return false;
442
+ }
443
+ if (a === "arbitrary" || b === "arbitrary") {
444
+ return false;
445
+ }
446
+ return bucketsCompatible(a, b);
447
+ }
448
+ //# sourceMappingURL=token-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-classifier.js","sourceRoot":"","sources":["../../../src/arrange/domain/token-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shared types for the arrange pipeline (Tailwind `cn()` / `tv()` tooling).
3
+ *
4
+ * **Render Pipeline Order** (see `packages/cli/README.md`): Existence → Position → Layout
5
+ * → Sizing → Spacing → Shape → Background → Shadow → Typography → Composite → Motion
6
+ * → Starting → Behavior → State → Selector.
7
+ *
8
+ * `arbitrary` and `other` are non-pipeline tails for `[prop:value]` syntax and unknown utilities.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/arrange/domain/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,120 @@
1
+ import path from "node:path";
2
+ import { lineOf } from "#/arrange/domain/ast/helpers";
3
+ import { LONG_STRING_TOKEN_THRESHOLD, MAX_REPORT_LINES } from "#/arrange/domain/constants";
4
+ import { logger } from "#/core/logger";
5
+ /**
6
+ * @since 0.3.16-canary.0
7
+ */
8
+ export function printAnalyzeReport(resolvedTargetPath, report) {
9
+ logger.out(`Path: ${path.resolve(resolvedTargetPath)}`);
10
+ logger.out(`.ts/.tsx files: ${report.files}`);
11
+ logger.out(`cn(...) call sites: ${report.cnCallExpressions}`);
12
+ logger.out(`tv(...) call sites: ${report.tvCallExpressions}`);
13
+ logger.out(`\nLong cn(...) string literals (≥${LONG_STRING_TOKEN_THRESHOLD} tokens — consider splitting arguments): ${report.longCnStringLiterals.length}`);
14
+ for (const findingEntry of report.longCnStringLiterals.slice(0, MAX_REPORT_LINES)) {
15
+ logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
16
+ }
17
+ if (report.longCnStringLiterals.length > MAX_REPORT_LINES) {
18
+ logger.out(` … and ${report.longCnStringLiterals.length - MAX_REPORT_LINES} more`);
19
+ }
20
+ logger.out(`\nLong tv({...}) string literals in base/variants/… (≥${LONG_STRING_TOKEN_THRESHOLD} tokens): ${report.longTvStringLiterals.length}`);
21
+ for (const findingEntry of report.longTvStringLiterals.slice(0, MAX_REPORT_LINES)) {
22
+ logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
23
+ }
24
+ if (report.longTvStringLiterals.length > MAX_REPORT_LINES) {
25
+ logger.out(` … and ${report.longTvStringLiterals.length - MAX_REPORT_LINES} more`);
26
+ }
27
+ logger.out(`\nJSX className="..." or className={'...'} (static strings, ≥${LONG_STRING_TOKEN_THRESHOLD} tokens): ${report.longJsxClassNameLiterals.length}`);
28
+ for (const findingEntry of report.longJsxClassNameLiterals.slice(0, MAX_REPORT_LINES)) {
29
+ logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.tokenCount} tokens) ${findingEntry.preview}`);
30
+ }
31
+ if (report.longJsxClassNameLiterals.length > MAX_REPORT_LINES) {
32
+ logger.out(` … and ${report.longJsxClassNameLiterals.length - MAX_REPORT_LINES} more`);
33
+ }
34
+ logger.out(`\ncn(...) nested inside tv({...}) (prefer a string or array — preview/apply can rewrite): ${report.cnInsideTvCalls.length}`);
35
+ for (const findingEntry of report.cnInsideTvCalls.slice(0, MAX_REPORT_LINES)) {
36
+ logger.out(` ${findingEntry.file}:${findingEntry.line} (${findingEntry.argCount} args) ${findingEntry.preview}`);
37
+ }
38
+ if (report.cnInsideTvCalls.length > MAX_REPORT_LINES) {
39
+ logger.out(` … and ${report.cnInsideTvCalls.length - MAX_REPORT_LINES} more`);
40
+ }
41
+ }
42
+ /**
43
+ * @since 0.3.16-canary.0
44
+ */
45
+ export function printSyncResult(result, write) {
46
+ logger.out(`\nTotal: ${result.filePaths.length} file(s), ${result.totalFound} site(s) (cn/tv/JSX className) to review.`);
47
+ if (write) {
48
+ logger.out(`Applied: ${result.totalChanged} site(s) updated.`);
49
+ }
50
+ else {
51
+ logger.out(`(Re-run without --dry-run to write changes, or "pnpm cli:arrange" / "pnpm exec codefast arrange")`);
52
+ }
53
+ const shouldShowCascadeHint = write ? result.totalChanged > 0 : result.totalFound > 0;
54
+ if (shouldShowCascadeHint) {
55
+ logger.out("Note: class order may change across concern groups — smoke-test the UI if you rely on cascade order.");
56
+ }
57
+ if (result.hookError !== null) {
58
+ logger.err(result.hookError);
59
+ }
60
+ }
61
+ /**
62
+ * @since 0.3.16-canary.0
63
+ */
64
+ export function printSimplifyResult(result, write) {
65
+ logger.out(`\nTotal: ${result.filePaths.length} file(s), ${result.totalFound} site(s) to simplify.`);
66
+ if (write) {
67
+ logger.out(`Applied: ${result.totalChanged} site(s) updated.`);
68
+ }
69
+ else {
70
+ logger.out(`(Run "simplify" to write changes, or "pnpm cli:arrange-simplify" / "pnpm exec codefast arrange simplify")`);
71
+ }
72
+ }
73
+ /**
74
+ * @since 0.3.16-canary.0
75
+ */
76
+ export function printGroupFilePreviewFromWork(work) {
77
+ printGroupFilePreviewBody({
78
+ filePath: work.filePath,
79
+ reportTotal: work.reportTotal,
80
+ cnInTvNoReplacement: work.cnInTvNoReplacement,
81
+ cnInTvCalls: work.cnInTvCalls,
82
+ unwrapReplacementByCall: work.unwrapReplacementByCall,
83
+ sourceText: work.sourceText,
84
+ domainSf: work.domainSfForLineNumbers,
85
+ unwrapEdits: work.unwrapEdits,
86
+ plannedGroupEdits: work.plannedGroupEdits,
87
+ });
88
+ }
89
+ function printGroupFilePreviewBody(args) {
90
+ const { filePath, reportTotal, cnInTvNoReplacement, cnInTvCalls, unwrapReplacementByCall, sourceText, domainSf, unwrapEdits, plannedGroupEdits, } = args;
91
+ let header = `\n── ${filePath} (${reportTotal} site(s)`;
92
+ if (cnInTvNoReplacement > 0) {
93
+ header += `; plus ${cnInTvNoReplacement} cn() inside tv left unchanged (0 args)`;
94
+ }
95
+ header += `) ──`;
96
+ logger.out(header);
97
+ for (const call of cnInTvCalls) {
98
+ const replacement = unwrapReplacementByCall.get(call);
99
+ if (replacement === undefined) {
100
+ logger.out(` Line ${lineOf(domainSf, call)} [tv ⊃ cn]: cn(...) has no arguments — skipped`);
101
+ continue;
102
+ }
103
+ const start = call.pos;
104
+ const end = call.end;
105
+ if (sourceText.slice(start, end) === replacement) {
106
+ continue;
107
+ }
108
+ logger.out(` Line ${lineOf(domainSf, call)} [tv ⊃ cn → string/array]:`);
109
+ logger.out(` ${replacement.split("\n").join("\n ")}`);
110
+ }
111
+ if (unwrapEdits.length > 0 && plannedGroupEdits.length > 0) {
112
+ logger.out(" ([cn] / [tv] / [JSX className] lines below reflect content after unwrap of cn inside tv.)");
113
+ }
114
+ for (const plan of plannedGroupEdits) {
115
+ logger.out(` Line ${lineOf(plan.lineSf, plan.reportNode)} [${plan.label}]:`);
116
+ logger.out(` ${plan.replacement.split("\n").join("\n ")}`);
117
+ logger.out(` // Buckets: ${JSON.stringify(plan.bucketSummary)}`);
118
+ }
119
+ }
120
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/arrange/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { buildGroupFileUnwrapState, countPersistedGroupFileEdits, groupFileDryRunNoEdits, groupFileEditsTouchJsxCn, groupFilePreviewTotals, groupFileWorkHasNothingToReport, mergeGroupFileBodyText, tryBuildGroupFileWorkPlan, } from "#/arrange/domain/grouping-service";
2
+ import { ensureCnImport } from "#/arrange/domain/imports";
3
+ import { parseDomainSourceFile } from "#/arrange/source-parse";
4
+ /**
5
+ * @since 0.3.16-canary.0
6
+ */
7
+ export function processArrangeGroupFile(fs, args) {
8
+ const { filePath, options } = args;
9
+ const sourceText = fs.readFileSync(filePath, "utf8");
10
+ const domainSfInitial = parseDomainSourceFile(filePath, sourceText);
11
+ const unwrap = buildGroupFileUnwrapState(domainSfInitial, sourceText);
12
+ const domainSfGrouped = parseDomainSourceFile(filePath, unwrap.textAfterUnwrap);
13
+ const work = tryBuildGroupFileWorkPlan({
14
+ filePath,
15
+ sourceText,
16
+ domainSfInitial,
17
+ domainSfGrouped,
18
+ withClassName: options.withClassName,
19
+ unwrap,
20
+ });
21
+ if (work === null) {
22
+ return groupFileDryRunNoEdits(filePath);
23
+ }
24
+ if (!options.write) {
25
+ if (groupFileWorkHasNothingToReport(work)) {
26
+ return groupFileDryRunNoEdits(filePath);
27
+ }
28
+ return { ...groupFilePreviewTotals(work), workPlan: work };
29
+ }
30
+ const persistedEditCount = countPersistedGroupFileEdits(work);
31
+ let newText = mergeGroupFileBodyText(work);
32
+ if (persistedEditCount > 0) {
33
+ if (groupFileEditsTouchJsxCn(work)) {
34
+ newText = ensureCnImport(parseDomainSourceFile(filePath, newText), options.cnImport);
35
+ }
36
+ fs.writeFileSync(filePath, newText, "utf8");
37
+ }
38
+ return {
39
+ filePath,
40
+ totalFound: persistedEditCount + work.cnInTvNoReplacement,
41
+ changed: persistedEditCount,
42
+ };
43
+ }
44
+ //# sourceMappingURL=process-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-file.js","sourceRoot":"","sources":["../../src/arrange/process-file.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,EAAkB,EAClB,IAGC;IAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACnC,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,yBAAyB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;IAEhF,MAAM,IAAI,GAAG,yBAAyB,CAAC;QACrC,QAAQ;QACR,UAAU;QACV,eAAe;QACf,eAAe;QACf,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,kBAAkB,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,GAAG,cAAc,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvF,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,QAAQ;QACR,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC,mBAAmB;QACzD,OAAO,EAAE,kBAAkB;KAC5B,CAAC;AACJ,CAAC"}