@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,81 @@
1
+ import { DomainBinaryOperator, DomainSyntaxKind, isDomainArrayLiteralExpression, isDomainTailwindClassLiteral, } from "#/arrange/domain/ast/ast-node";
2
+ import { MAX_CLASS_EXPR_DEPTH } from "#/arrange/domain/constants";
3
+ /**
4
+ * @since 0.3.16-canary.0
5
+ */
6
+ export function forEachStringLiteralInClassExpression(expr, sink, depth = 0, options) {
7
+ if (depth > MAX_CLASS_EXPR_DEPTH) {
8
+ return;
9
+ }
10
+ if (isDomainTailwindClassLiteral(expr)) {
11
+ sink(expr);
12
+ return;
13
+ }
14
+ if (expr.kind === DomainSyntaxKind.ParenthesizedExpression) {
15
+ forEachStringLiteralInClassExpression(expr.expression, sink, depth + 1, options);
16
+ return;
17
+ }
18
+ if (expr.kind === DomainSyntaxKind.AsExpression || expr.kind === DomainSyntaxKind.SatisfiesExpression) {
19
+ forEachStringLiteralInClassExpression(expr.expression, sink, depth + 1, options);
20
+ return;
21
+ }
22
+ if (expr.kind === DomainSyntaxKind.NonNullExpression) {
23
+ forEachStringLiteralInClassExpression(expr.expression, sink, depth + 1, options);
24
+ return;
25
+ }
26
+ if (expr.kind === DomainSyntaxKind.ConditionalExpression) {
27
+ if (options?.descendIntoConditional === false) {
28
+ return;
29
+ }
30
+ forEachStringLiteralInClassExpression(expr.whenTrue, sink, depth + 1, options);
31
+ forEachStringLiteralInClassExpression(expr.whenFalse, sink, depth + 1, options);
32
+ return;
33
+ }
34
+ if (expr.kind === DomainSyntaxKind.BinaryExpression && expr.operator === DomainBinaryOperator.Plus) {
35
+ forEachStringLiteralInClassExpression(expr.left, sink, depth + 1, options);
36
+ forEachStringLiteralInClassExpression(expr.right, sink, depth + 1, options);
37
+ return;
38
+ }
39
+ if (isDomainArrayLiteralExpression(expr)) {
40
+ for (const arrayElement of expr.elements) {
41
+ if (arrayElement.kind === DomainSyntaxKind.SpreadElement) {
42
+ continue;
43
+ }
44
+ forEachStringLiteralInClassExpression(arrayElement, sink, depth + 1, options);
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * @since 0.3.16-canary.0
50
+ */
51
+ export function isUnsafeLiteralForCnStyleApplySplit(classLiteral) {
52
+ return classLiteral.parent !== null && isDomainArrayLiteralExpression(classLiteral.parent);
53
+ }
54
+ /**
55
+ * @since 0.3.16-canary.0
56
+ */
57
+ export const CN_APPLY_LITERAL_WALK_OPTS = {
58
+ descendIntoConditional: false,
59
+ };
60
+ /**
61
+ * @since 0.3.16-canary.0
62
+ */
63
+ export function collectUnconditionalTailwindLiteralsFromCnArguments(args) {
64
+ const staticLits = [];
65
+ for (const arg of args) {
66
+ if (isDomainTailwindClassLiteral(arg)) {
67
+ if (!isUnsafeLiteralForCnStyleApplySplit(arg)) {
68
+ staticLits.push(arg);
69
+ }
70
+ }
71
+ else {
72
+ forEachStringLiteralInClassExpression(arg, (lit) => {
73
+ if (!isUnsafeLiteralForCnStyleApplySplit(lit)) {
74
+ staticLits.push(lit);
75
+ }
76
+ }, 0, CN_APPLY_LITERAL_WALK_OPTS);
77
+ }
78
+ }
79
+ return staticLits;
80
+ }
81
+ //# sourceMappingURL=collectors-cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectors-cn.js","sourceRoot":"","sources":["../../../../src/arrange/domain/ast/collectors-cn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { isDomainIdentifier, isDomainJsxExpression, isDomainTailwindClassLiteral } from "#/arrange/domain/ast/ast-node";
2
+ /**
3
+ * @since 0.3.16-canary.0
4
+ */
5
+ export function jsxClassNameStaticLiteral(jsxClassNameAttribute) {
6
+ if (!isDomainIdentifier(jsxClassNameAttribute.name) || jsxClassNameAttribute.name.text !== "className") {
7
+ return undefined;
8
+ }
9
+ const init = jsxClassNameAttribute.initializer;
10
+ if (!init) {
11
+ return undefined;
12
+ }
13
+ if (isDomainTailwindClassLiteral(init)) {
14
+ return { lit: init, valueNode: init };
15
+ }
16
+ if (isDomainJsxExpression(init) && init.expression) {
17
+ const jsxExpressionBody = init.expression;
18
+ if (isDomainTailwindClassLiteral(jsxExpressionBody)) {
19
+ return { lit: jsxExpressionBody, valueNode: init };
20
+ }
21
+ }
22
+ return undefined;
23
+ }
24
+ //# sourceMappingURL=collectors-jsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectors-jsx.js","sourceRoot":"","sources":["../../../../src/arrange/domain/ast/collectors-jsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAIxH;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,qBAAyC;IACjF,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACvG,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,WAAW,CAAC;IAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACxC,CAAC;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1C,IAAI,4BAA4B,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACpD,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,319 @@
1
+ import { isDomainArrayLiteralExpression, isDomainCallExpression, isDomainObjectLiteralExpression, isDomainPropertyAssignment, isDomainSpreadElement, isDomainTailwindClassLiteral, forEachDomainChild, } from "#/arrange/domain/ast/ast-node";
2
+ import { CN_APPLY_LITERAL_WALK_OPTS, collectUnconditionalTailwindLiteralsFromCnArguments, forEachStringLiteralInClassExpression, isUnsafeLiteralForCnStyleApplySplit, } from "#/arrange/domain/ast/collectors-cn";
3
+ import { buildKnownCnTvBindings, isCnOrTvIdentifier, propertyAssignmentNameText } from "#/arrange/domain/ast/helpers";
4
+ import { APPLY_MIN_TOKENS, MAX_OBJECT_DEPTH } from "#/arrange/domain/constants";
5
+ import { tokenizeClassString } from "#/arrange/domain/tailwind-token";
6
+ /**
7
+ * @since 0.3.16-canary.0
8
+ */
9
+ export function traverseTvObject(sourceFile, obj, visitor, depth = 0, knownBindings) {
10
+ if (depth > MAX_OBJECT_DEPTH) {
11
+ return;
12
+ }
13
+ for (const prop of obj.properties) {
14
+ if (!isDomainPropertyAssignment(prop)) {
15
+ continue;
16
+ }
17
+ const init = prop.initializer;
18
+ if (isDomainTailwindClassLiteral(init)) {
19
+ visitor(init, sourceFile, undefined);
20
+ }
21
+ else if (isDomainArrayLiteralExpression(init)) {
22
+ for (const arrayElement of init.elements) {
23
+ if (isDomainSpreadElement(arrayElement)) {
24
+ continue;
25
+ }
26
+ if (isDomainTailwindClassLiteral(arrayElement)) {
27
+ visitor(arrayElement, sourceFile, undefined);
28
+ }
29
+ else if (isDomainCallExpression(arrayElement) &&
30
+ isCnOrTvIdentifier(arrayElement.expression, "cn", knownBindings)) {
31
+ for (const arg of arrayElement.arguments) {
32
+ forEachStringLiteralInClassExpression(arg, (lit) => {
33
+ visitor(lit, sourceFile, arrayElement);
34
+ });
35
+ }
36
+ }
37
+ else if (isDomainObjectLiteralExpression(arrayElement)) {
38
+ for (const objectProperty of arrayElement.properties) {
39
+ if (!isDomainPropertyAssignment(objectProperty)) {
40
+ continue;
41
+ }
42
+ const propName = propertyAssignmentNameText(objectProperty);
43
+ if (propName !== "className" && propName !== "class") {
44
+ continue;
45
+ }
46
+ const innerInit = objectProperty.initializer;
47
+ if (isDomainTailwindClassLiteral(innerInit)) {
48
+ visitor(innerInit, sourceFile, undefined);
49
+ }
50
+ else if (isDomainArrayLiteralExpression(innerInit)) {
51
+ for (const nestedArrayElement of innerInit.elements) {
52
+ if (isDomainSpreadElement(nestedArrayElement)) {
53
+ continue;
54
+ }
55
+ if (isDomainTailwindClassLiteral(nestedArrayElement)) {
56
+ visitor(nestedArrayElement, sourceFile, undefined);
57
+ }
58
+ }
59
+ }
60
+ else if (isDomainCallExpression(innerInit) &&
61
+ isCnOrTvIdentifier(innerInit.expression, "cn", knownBindings)) {
62
+ for (const arg of innerInit.arguments) {
63
+ forEachStringLiteralInClassExpression(arg, (lit) => {
64
+ visitor(lit, sourceFile, innerInit);
65
+ });
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
71
+ }
72
+ else if (isDomainObjectLiteralExpression(init)) {
73
+ traverseTvObject(sourceFile, init, visitor, depth + 1, knownBindings);
74
+ }
75
+ else if (isDomainCallExpression(init) && isCnOrTvIdentifier(init.expression, "cn", knownBindings)) {
76
+ for (const arg of init.arguments) {
77
+ forEachStringLiteralInClassExpression(arg, (lit) => {
78
+ visitor(lit, sourceFile, init);
79
+ });
80
+ }
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * @since 0.3.16-canary.0
86
+ */
87
+ export function collectCnCallsInsideTv(sourceFile, obj, knownBindings, depth = 0) {
88
+ if (depth > MAX_OBJECT_DEPTH) {
89
+ return [];
90
+ }
91
+ const calls = [];
92
+ for (const prop of obj.properties) {
93
+ if (!isDomainPropertyAssignment(prop)) {
94
+ continue;
95
+ }
96
+ const init = prop.initializer;
97
+ if (isDomainArrayLiteralExpression(init)) {
98
+ for (const arrayElement of init.elements) {
99
+ if (isDomainSpreadElement(arrayElement)) {
100
+ continue;
101
+ }
102
+ if (isDomainCallExpression(arrayElement) && isCnOrTvIdentifier(arrayElement.expression, "cn", knownBindings)) {
103
+ calls.push(arrayElement);
104
+ }
105
+ else if (isDomainObjectLiteralExpression(arrayElement)) {
106
+ for (const objectProperty of arrayElement.properties) {
107
+ if (!isDomainPropertyAssignment(objectProperty)) {
108
+ continue;
109
+ }
110
+ const propName = propertyAssignmentNameText(objectProperty);
111
+ if (propName !== "className" && propName !== "class") {
112
+ continue;
113
+ }
114
+ const innerInit = objectProperty.initializer;
115
+ if (isDomainCallExpression(innerInit) && isCnOrTvIdentifier(innerInit.expression, "cn", knownBindings)) {
116
+ calls.push(innerInit);
117
+ }
118
+ }
119
+ }
120
+ }
121
+ }
122
+ else if (isDomainObjectLiteralExpression(init)) {
123
+ calls.push(...collectCnCallsInsideTv(sourceFile, init, knownBindings, depth + 1));
124
+ }
125
+ else if (isDomainCallExpression(init) && isCnOrTvIdentifier(init.expression, "cn", knownBindings)) {
126
+ calls.push(init);
127
+ }
128
+ }
129
+ return calls;
130
+ }
131
+ /**
132
+ * @since 0.3.16-canary.0
133
+ */
134
+ export function listAllCnCallsInsideTvInSourceFile(sourceFile, knownBindings) {
135
+ const calls = [];
136
+ const visitSubtree = (tsNode) => {
137
+ if (isDomainCallExpression(tsNode) && isCnOrTvIdentifier(tsNode.expression, "tv", knownBindings)) {
138
+ const arg0 = tsNode.arguments[0];
139
+ if (arg0 && isDomainObjectLiteralExpression(arg0)) {
140
+ calls.push(...collectCnCallsInsideTv(sourceFile, arg0, knownBindings, 0));
141
+ }
142
+ }
143
+ forEachDomainChild(tsNode, visitSubtree);
144
+ };
145
+ for (const stmt of sourceFile.statements) {
146
+ visitSubtree(stmt);
147
+ }
148
+ return calls;
149
+ }
150
+ function makeStringNode(nodes, sourceFile, isTvContext, cnCall) {
151
+ return {
152
+ nodes,
153
+ sf: sourceFile,
154
+ isTvContext,
155
+ cnCall,
156
+ get primaryClassLiteral() {
157
+ const first = this.nodes[0];
158
+ if (first === undefined) {
159
+ throw new Error("invariant: StringNode requires at least one class literal");
160
+ }
161
+ return first;
162
+ },
163
+ };
164
+ }
165
+ /**
166
+ * @since 0.3.16-canary.0
167
+ */
168
+ export function slotClassString(stringNode) {
169
+ return stringNode.nodes.map((literal) => literal.text).join(" ");
170
+ }
171
+ function emitTvSlot(lits, sourceFile, cnCall, results, seenNodePos) {
172
+ if (lits.length === 0) {
173
+ return;
174
+ }
175
+ const firstLit = lits[0];
176
+ if (firstLit === undefined) {
177
+ return;
178
+ }
179
+ const firstPos = firstLit.pos;
180
+ if (seenNodePos.has(firstPos)) {
181
+ return;
182
+ }
183
+ seenNodePos.add(firstPos);
184
+ const totalTokens = lits.reduce((accumulatedTokenCount, literal) => accumulatedTokenCount + tokenizeClassString(literal.text).length, 0);
185
+ if (totalTokens < APPLY_MIN_TOKENS) {
186
+ return;
187
+ }
188
+ results.push(makeStringNode(lits, sourceFile, true, cnCall));
189
+ }
190
+ function collectTvSlots(sourceFile, obj, knownBindings, results, seenNodePos, depth = 0) {
191
+ if (depth > MAX_OBJECT_DEPTH) {
192
+ return;
193
+ }
194
+ for (const prop of obj.properties) {
195
+ if (!isDomainPropertyAssignment(prop)) {
196
+ continue;
197
+ }
198
+ const init = prop.initializer;
199
+ if (isDomainTailwindClassLiteral(init)) {
200
+ emitTvSlot([init], sourceFile, undefined, results, seenNodePos);
201
+ }
202
+ else if (isDomainArrayLiteralExpression(init)) {
203
+ const arrayPos = init.pos;
204
+ if (seenNodePos.has(arrayPos)) {
205
+ continue;
206
+ }
207
+ seenNodePos.add(arrayPos);
208
+ const staticLits = [];
209
+ for (const arrayElement of init.elements) {
210
+ if (isDomainSpreadElement(arrayElement)) {
211
+ continue;
212
+ }
213
+ if (isDomainTailwindClassLiteral(arrayElement)) {
214
+ staticLits.push(arrayElement);
215
+ }
216
+ else if (isDomainCallExpression(arrayElement) &&
217
+ isCnOrTvIdentifier(arrayElement.expression, "cn", knownBindings)) {
218
+ for (const arg of arrayElement.arguments) {
219
+ forEachStringLiteralInClassExpression(arg, (lit) => {
220
+ if (!isUnsafeLiteralForCnStyleApplySplit(lit)) {
221
+ staticLits.push(lit);
222
+ }
223
+ }, 0, CN_APPLY_LITERAL_WALK_OPTS);
224
+ }
225
+ }
226
+ else if (isDomainObjectLiteralExpression(arrayElement)) {
227
+ for (const objectProperty of arrayElement.properties) {
228
+ if (!isDomainPropertyAssignment(objectProperty)) {
229
+ continue;
230
+ }
231
+ const propName = propertyAssignmentNameText(objectProperty);
232
+ if (propName !== "className" && propName !== "class") {
233
+ continue;
234
+ }
235
+ const innerInit = objectProperty.initializer;
236
+ if (isDomainTailwindClassLiteral(innerInit)) {
237
+ emitTvSlot([innerInit], sourceFile, undefined, results, seenNodePos);
238
+ }
239
+ else if (isDomainArrayLiteralExpression(innerInit)) {
240
+ const innerLits = [];
241
+ for (const nestedArrayElement of innerInit.elements) {
242
+ if (!isDomainSpreadElement(nestedArrayElement) && isDomainTailwindClassLiteral(nestedArrayElement)) {
243
+ innerLits.push(nestedArrayElement);
244
+ }
245
+ }
246
+ emitTvSlot(innerLits, sourceFile, undefined, results, seenNodePos);
247
+ }
248
+ else if (isDomainCallExpression(innerInit) &&
249
+ isCnOrTvIdentifier(innerInit.expression, "cn", knownBindings)) {
250
+ const cnLits = [];
251
+ for (const arg of innerInit.arguments) {
252
+ forEachStringLiteralInClassExpression(arg, (lit) => {
253
+ if (!isUnsafeLiteralForCnStyleApplySplit(lit)) {
254
+ cnLits.push(lit);
255
+ }
256
+ }, 0, CN_APPLY_LITERAL_WALK_OPTS);
257
+ }
258
+ emitTvSlot(cnLits, sourceFile, innerInit, results, seenNodePos);
259
+ }
260
+ }
261
+ }
262
+ }
263
+ if (staticLits.length > 0) {
264
+ emitTvSlot(staticLits, sourceFile, undefined, results, seenNodePos);
265
+ }
266
+ }
267
+ else if (isDomainObjectLiteralExpression(init)) {
268
+ collectTvSlots(sourceFile, init, knownBindings, results, seenNodePos, depth + 1);
269
+ }
270
+ else if (isDomainCallExpression(init) && isCnOrTvIdentifier(init.expression, "cn", knownBindings)) {
271
+ const cnLits = [];
272
+ for (const arg of init.arguments) {
273
+ forEachStringLiteralInClassExpression(arg, (lit) => {
274
+ if (!isUnsafeLiteralForCnStyleApplySplit(lit)) {
275
+ cnLits.push(lit);
276
+ }
277
+ }, 0, CN_APPLY_LITERAL_WALK_OPTS);
278
+ }
279
+ emitTvSlot(cnLits, sourceFile, init, results, seenNodePos);
280
+ }
281
+ }
282
+ }
283
+ /**
284
+ * @since 0.3.16-canary.0
285
+ */
286
+ export function collectGroupableStringNodes(sourceFile) {
287
+ const results = [];
288
+ const seenNodePos = new Set();
289
+ const knownBindings = buildKnownCnTvBindings(sourceFile);
290
+ const visitTypeScriptSubtree = (tsNode) => {
291
+ if (isDomainCallExpression(tsNode)) {
292
+ if (isCnOrTvIdentifier(tsNode.expression, "cn", knownBindings)) {
293
+ const callPos = tsNode.pos;
294
+ if (seenNodePos.has(callPos)) {
295
+ forEachDomainChild(tsNode, visitTypeScriptSubtree);
296
+ return;
297
+ }
298
+ seenNodePos.add(callPos);
299
+ const staticLits = collectUnconditionalTailwindLiteralsFromCnArguments(tsNode.arguments);
300
+ const totalTokens = staticLits.reduce((accumulatedTokenCount, literal) => accumulatedTokenCount + tokenizeClassString(literal.text).length, 0);
301
+ if (staticLits.length > 0 && totalTokens >= APPLY_MIN_TOKENS) {
302
+ results.push(makeStringNode(staticLits, sourceFile, false, tsNode));
303
+ }
304
+ }
305
+ else if (isCnOrTvIdentifier(tsNode.expression, "tv", knownBindings)) {
306
+ const arg0 = tsNode.arguments[0];
307
+ if (arg0 && isDomainObjectLiteralExpression(arg0)) {
308
+ collectTvSlots(sourceFile, arg0, knownBindings, results, seenNodePos);
309
+ }
310
+ }
311
+ }
312
+ forEachDomainChild(tsNode, visitTypeScriptSubtree);
313
+ };
314
+ for (const stmt of sourceFile.statements) {
315
+ visitTypeScriptSubtree(stmt);
316
+ }
317
+ return results;
318
+ }
319
+ //# sourceMappingURL=collectors-tv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectors-tv.js","sourceRoot":"","sources":["../../../../src/arrange/domain/ast/collectors-tv.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,EACtB,+BAA+B,EAC/B,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EACL,0BAA0B,EAC1B,mDAAmD,EACnD,qCAAqC,EACrC,mCAAmC,GACpC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AACtH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAStE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAA4B,EAC5B,GAAkC,EAClC,OAA0B,EAC1B,KAAK,GAAG,CAAC,EACT,aAA2B;IAE3B,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAE9B,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC;oBACxC,SAAS;gBACX,CAAC;gBACD,IAAI,4BAA4B,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC/C,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC/C,CAAC;qBAAM,IACL,sBAAsB,CAAC,YAAY,CAAC;oBACpC,kBAAkB,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAChE,CAAC;oBACD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;wBACzC,qCAAqC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;4BACjD,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;wBACzC,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,IAAI,+BAA+B,CAAC,YAAY,CAAC,EAAE,CAAC;oBACzD,KAAK,MAAM,cAAc,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;wBACrD,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,EAAE,CAAC;4BAChD,SAAS;wBACX,CAAC;wBACD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;wBAC5D,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;4BACrD,SAAS;wBACX,CAAC;wBACD,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC;wBAC7C,IAAI,4BAA4B,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC5C,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;wBAC5C,CAAC;6BAAM,IAAI,8BAA8B,CAAC,SAAS,CAAC,EAAE,CAAC;4BACrD,KAAK,MAAM,kBAAkB,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gCACpD,IAAI,qBAAqB,CAAC,kBAAkB,CAAC,EAAE,CAAC;oCAC9C,SAAS;gCACX,CAAC;gCACD,IAAI,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,CAAC;oCACrD,OAAO,CAAC,kBAAkB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gCACrD,CAAC;4BACH,CAAC;wBACH,CAAC;6BAAM,IACL,sBAAsB,CAAC,SAAS,CAAC;4BACjC,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAC7D,CAAC;4BACD,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gCACtC,qCAAqC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;oCACjD,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gCACtC,CAAC,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YACpG,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjC,qCAAqC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;oBACjD,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAA4B,EAC5B,GAAkC,EAClC,aAA0B,EAC1B,KAAK,GAAG,CAAC;IAET,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAgC,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAE9B,IAAI,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC;oBACxC,SAAS;gBACX,CAAC;gBACD,IAAI,sBAAsB,CAAC,YAAY,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;oBAC7G,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC3B,CAAC;qBAAM,IAAI,+BAA+B,CAAC,YAAY,CAAC,EAAE,CAAC;oBACzD,KAAK,MAAM,cAAc,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;wBACrD,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,EAAE,CAAC;4BAChD,SAAS;wBACX,CAAC;wBACD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;wBAC5D,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;4BACrD,SAAS;wBACX,CAAC;wBACD,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC;wBAC7C,IAAI,sBAAsB,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;4BACvG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACxB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;aAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YACpG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC,CAChD,UAA4B,EAC5B,aAA0B;IAE1B,MAAM,KAAK,GAAgC,EAAE,CAAC;IAC9C,MAAM,YAAY,GAAG,CAAC,MAAqB,EAAQ,EAAE;QACnD,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YACjG,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QACzC,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CACrB,KAAkC,EAClC,UAA4B,EAC5B,WAAoB,EACpB,MAA6B;IAE7B,OAAO;QACL,KAAK;QACL,EAAE,EAAE,UAAU;QACd,WAAW;QACX,MAAM;QACN,IAAI,mBAAmB;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC/E,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAsB;IACpD,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,UAAU,CACjB,IAAiC,EACjC,UAA4B,EAC5B,MAAwC,EACxC,OAA0B,EAC1B,WAAwB;IAExB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC;IAC9B,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAC7B,CAAC,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EACpG,CAAC,CACF,CAAC;IACF,IAAI,WAAW,GAAG,gBAAgB,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CACrB,UAA4B,EAC5B,GAAkC,EAClC,aAA0B,EAC1B,OAA0B,EAC1B,WAAwB,EACxB,KAAK,GAAG,CAAC;IAET,IAAI,KAAK,GAAG,gBAAgB,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAE9B,IAAI,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAClE,CAAC;aAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;YAC1B,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE1B,MAAM,UAAU,GAAgC,EAAE,CAAC;YACnD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzC,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC;oBACxC,SAAS;gBACX,CAAC;gBACD,IAAI,4BAA4B,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC/C,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAChC,CAAC;qBAAM,IACL,sBAAsB,CAAC,YAAY,CAAC;oBACpC,kBAAkB,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAChE,CAAC;oBACD,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;wBACzC,qCAAqC,CACnC,GAAG,EACH,CAAC,GAAG,EAAE,EAAE;4BACN,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC9C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACvB,CAAC;wBACH,CAAC,EACD,CAAC,EACD,0BAA0B,CAC3B,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,IAAI,+BAA+B,CAAC,YAAY,CAAC,EAAE,CAAC;oBACzD,KAAK,MAAM,cAAc,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;wBACrD,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,EAAE,CAAC;4BAChD,SAAS;wBACX,CAAC;wBACD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;wBAC5D,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;4BACrD,SAAS;wBACX,CAAC;wBACD,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,CAAC;wBAC7C,IAAI,4BAA4B,CAAC,SAAS,CAAC,EAAE,CAAC;4BAC5C,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;wBACvE,CAAC;6BAAM,IAAI,8BAA8B,CAAC,SAAS,CAAC,EAAE,CAAC;4BACrD,MAAM,SAAS,GAAgC,EAAE,CAAC;4BAClD,KAAK,MAAM,kBAAkB,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;gCACpD,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,4BAA4B,CAAC,kBAAkB,CAAC,EAAE,CAAC;oCACnG,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gCACrC,CAAC;4BACH,CAAC;4BACD,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;wBACrE,CAAC;6BAAM,IACL,sBAAsB,CAAC,SAAS,CAAC;4BACjC,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAC7D,CAAC;4BACD,MAAM,MAAM,GAAgC,EAAE,CAAC;4BAC/C,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gCACtC,qCAAqC,CACnC,GAAG,EACH,CAAC,GAAG,EAAE,EAAE;oCACN,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,EAAE,CAAC;wCAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oCACnB,CAAC;gCACH,CAAC,EACD,CAAC,EACD,0BAA0B,CAC3B,CAAC;4BACJ,CAAC;4BACD,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;wBAClE,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;aAAM,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YACpG,MAAM,MAAM,GAAgC,EAAE,CAAC;YAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjC,qCAAqC,CACnC,GAAG,EACH,CAAC,GAAG,EAAE,EAAE;oBACN,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC,EACD,CAAC,EACD,0BAA0B,CAC3B,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,UAA4B;IACtE,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,aAAa,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAEzD,MAAM,sBAAsB,GAAG,CAAC,MAAqB,EAAQ,EAAE;QAC7D,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;gBAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;gBAC3B,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7B,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;oBACnD,OAAO;gBACT,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAEzB,MAAM,UAAU,GAAG,mDAAmD,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAEzF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CACnC,CAAC,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC,qBAAqB,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EACpG,CAAC,CACF,CAAC;gBACF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,gBAAgB,EAAE,CAAC;oBAC7D,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;iBAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,IAAI,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClD,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;QACD,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QACzC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,151 @@
1
+ import { isDomainIdentifier, isDomainImportDeclaration, isDomainNamedImports, isDomainNamespaceImport, isDomainPropertyAccessExpression, isDomainStringLiteral, lineOfSourcePosition, } from "#/arrange/domain/ast/ast-node";
2
+ import { EMPTY_CN_TV_BINDINGS } from "#/arrange/domain/constants";
3
+ import { applyEditsDescending, indentOfLineContaining } from "#/core/source-text-edit";
4
+ /**
5
+ * Known module specifiers that export `cn` / `tv`.
6
+ */
7
+ const KNOWN_CN_TV_MODULES = new Set([
8
+ "@codefast/tailwind-variants",
9
+ "clsx",
10
+ "class-variance-authority",
11
+ // Backward compatibility only: keep detection for existing user code that still imports
12
+ // from "tailwind-variants"; new code should prefer "@codefast/tailwind-variants".
13
+ "tailwind-variants",
14
+ "#lib/utils",
15
+ "~/lib/utils",
16
+ "@/lib/utils",
17
+ ]);
18
+ /**
19
+ * True for typical utils re-exports: `./utils`, `@/lib/utils`, `…/utils/…`,
20
+ * or a dedicated `cn.ts` / `cn.tsx` module.
21
+ */
22
+ function moduleLooksLikeCnTvReexport(moduleSpecifier) {
23
+ const norm = moduleSpecifier.replace(/\\/g, "/");
24
+ if (/(?:^|[./])utils(?:\/|$)/.test(norm)) {
25
+ return true;
26
+ }
27
+ if (/\/utils\//.test(norm) || norm.endsWith("/utils")) {
28
+ return true;
29
+ }
30
+ if (/(?:^|\/)cn\.tsx?$/.test(norm)) {
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+ /**
36
+ * Build a set of local binding names that are imported from a known cn/tv
37
+ * module in `sourceFile`.
38
+ *
39
+ * @since 0.3.16-canary.0
40
+ */
41
+ export function buildKnownCnTvBindings(sourceFile) {
42
+ const bindings = new Set();
43
+ for (const stmt of sourceFile.statements) {
44
+ if (!isDomainImportDeclaration(stmt) || !stmt.importClause) {
45
+ continue;
46
+ }
47
+ if (stmt.importClause.isTypeOnly) {
48
+ continue;
49
+ }
50
+ const spec = stmt.moduleSpecifier;
51
+ if (!isDomainStringLiteral(spec)) {
52
+ continue;
53
+ }
54
+ const moduleSpecifierText = spec.text;
55
+ const isKnown = KNOWN_CN_TV_MODULES.has(moduleSpecifierText);
56
+ if (!isKnown && !moduleLooksLikeCnTvReexport(moduleSpecifierText)) {
57
+ continue;
58
+ }
59
+ const clause = stmt.importClause;
60
+ if (clause.name) {
61
+ bindings.add(clause.name.text);
62
+ }
63
+ const { namedBindings } = clause;
64
+ if (!namedBindings) {
65
+ continue;
66
+ }
67
+ if (isDomainNamedImports(namedBindings)) {
68
+ for (const namedImport of namedBindings.elements) {
69
+ bindings.add(namedImport.name.text);
70
+ }
71
+ continue;
72
+ }
73
+ if (isDomainNamespaceImport(namedBindings)) {
74
+ bindings.add(namedBindings.name.text);
75
+ }
76
+ }
77
+ return bindings;
78
+ }
79
+ /**
80
+ * Returns true when `expr` is an identifier whose name matches `name` AND
81
+ * that name is listed in `knownBindings` from a recognized import.
82
+ *
83
+ * @since 0.3.16-canary.0
84
+ */
85
+ export function isCnOrTvIdentifier(expr, name, knownBindings = EMPTY_CN_TV_BINDINGS) {
86
+ if (knownBindings.size === 0) {
87
+ return false;
88
+ }
89
+ if (isDomainIdentifier(expr) && expr.text === name) {
90
+ return knownBindings.has(expr.text);
91
+ }
92
+ if (isDomainPropertyAccessExpression(expr) && expr.name.text === name) {
93
+ return isDomainIdentifier(expr.expression) && knownBindings.has(expr.expression.text);
94
+ }
95
+ return false;
96
+ }
97
+ /**
98
+ * @since 0.3.16-canary.0
99
+ */
100
+ export function propertyAssignmentNameText(prop) {
101
+ if (isDomainIdentifier(prop.name)) {
102
+ return prop.name.text;
103
+ }
104
+ if (isDomainStringLiteral(prop.name)) {
105
+ return prop.name.text;
106
+ }
107
+ return undefined;
108
+ }
109
+ /**
110
+ * @since 0.3.16-canary.0
111
+ */
112
+ export function lineOf(sourceFile, node) {
113
+ return lineOfSourcePosition(sourceFile.text, node.pos);
114
+ }
115
+ export { applyEditsDescending };
116
+ /**
117
+ * Replace `cn(...)` nested in `tv({...})` with a plain string (one arg) or a string
118
+ * array (multiple args). Returns undefined when there are zero arguments.
119
+ *
120
+ * @since 0.3.16-canary.0
121
+ */
122
+ export function unwrapCnInsideTvCallReplacement(call, sourceText) {
123
+ const args = call.arguments;
124
+ if (args.length === 0) {
125
+ return undefined;
126
+ }
127
+ const baseIndent = indentOfLineContaining(sourceText, call.pos);
128
+ const innerIndent = `${baseIndent} `;
129
+ if (args.length === 1) {
130
+ const firstArg = args[0];
131
+ if (firstArg === undefined) {
132
+ return undefined;
133
+ }
134
+ return sourceText.slice(firstArg.pos, firstArg.end);
135
+ }
136
+ const lines = ["["];
137
+ for (let i = 0; i < args.length; i++) {
138
+ const arg = args[i];
139
+ if (arg === undefined) {
140
+ throw new Error("invariant: unwrapCnInsideTvCall argument missing");
141
+ }
142
+ const piece = sourceText.slice(arg.pos, arg.end);
143
+ // Trailing comma on every element — intentional (Prettier-compatible style;
144
+ // keeps array diffs clean when arguments are later added or removed).
145
+ const comma = i < args.length - 1 || args.length > 1 ? "," : "";
146
+ lines.push(`${innerIndent}${piece}${comma}`);
147
+ }
148
+ lines.push(`${baseIndent}]`);
149
+ return lines.join("\n");
150
+ }
151
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/arrange/domain/ast/helpers.ts"],"names":[],"mappings":"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"}