boss-css 0.0.1 → 0.0.3

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 (268) hide show
  1. package/README.md +1 -0
  2. package/dist/_virtual/rolldown_runtime.cjs +43 -0
  3. package/dist/_virtual/rolldown_runtime.mjs +20 -0
  4. package/dist/api/browser.cjs +54 -0
  5. package/dist/api/browser.mjs +48 -0
  6. package/dist/api/config.cjs +94 -0
  7. package/dist/api/config.mjs +91 -0
  8. package/dist/api/css.cjs +304 -0
  9. package/dist/api/css.mjs +303 -0
  10. package/dist/api/dictionary.cjs +218 -0
  11. package/dist/api/dictionary.mjs +215 -0
  12. package/dist/api/file/dts.cjs +21 -0
  13. package/dist/api/file/dts.mjs +21 -0
  14. package/dist/api/file/file.cjs +123 -0
  15. package/dist/api/file/file.mjs +120 -0
  16. package/dist/api/file/js.cjs +118 -0
  17. package/dist/api/file/js.mjs +116 -0
  18. package/dist/api/names.cjs +52 -0
  19. package/dist/api/names.mjs +46 -0
  20. package/dist/api/noopCss.cjs +37 -0
  21. package/dist/api/noopCss.mjs +36 -0
  22. package/dist/api/propTree.cjs +54 -0
  23. package/dist/api/propTree.mjs +48 -0
  24. package/dist/api/server.cjs +112 -0
  25. package/dist/api/server.mjs +106 -0
  26. package/dist/cli/build.cjs +1 -0
  27. package/dist/cli/build.mjs +3 -0
  28. package/dist/cli/index.cjs +30 -0
  29. package/dist/cli/index.mjs +29 -0
  30. package/dist/cli/tasks/build.cjs +24 -0
  31. package/dist/cli/tasks/build.mjs +23 -0
  32. package/dist/cli/tasks/choose.cjs +47 -0
  33. package/dist/cli/tasks/choose.mjs +46 -0
  34. package/dist/cli/tasks/compile.cjs +68 -0
  35. package/dist/cli/tasks/compile.mjs +67 -0
  36. package/dist/cli/tasks/dev.cjs +51 -0
  37. package/dist/cli/tasks/dev.mjs +48 -0
  38. package/dist/cli/tasks/init.cjs +1835 -0
  39. package/dist/cli/tasks/init.mjs +1831 -0
  40. package/dist/cli/tasks/watch.cjs +38 -0
  41. package/dist/cli/tasks/watch.mjs +37 -0
  42. package/dist/cli/templates/init.cjs +82 -0
  43. package/dist/cli/templates/init.mjs +78 -0
  44. package/dist/cli/types.cjs +13 -0
  45. package/dist/cli/types.mjs +13 -0
  46. package/dist/cli/utils.cjs +43 -0
  47. package/dist/cli/utils.mjs +41 -0
  48. package/dist/compile/classname-strategy.cjs +79 -0
  49. package/dist/compile/classname-strategy.mjs +77 -0
  50. package/dist/compile/classname.cjs +366 -0
  51. package/dist/compile/classname.mjs +360 -0
  52. package/dist/compile/index.cjs +238 -0
  53. package/dist/compile/index.mjs +235 -0
  54. package/dist/compile/jsx.cjs +803 -0
  55. package/dist/compile/jsx.mjs +800 -0
  56. package/dist/compile/prepared.cjs +88 -0
  57. package/dist/compile/prepared.mjs +87 -0
  58. package/dist/compile/runtime.cjs +33 -0
  59. package/dist/compile/runtime.mjs +32 -0
  60. package/dist/compile/transform.cjs +371 -0
  61. package/dist/compile/transform.mjs +369 -0
  62. package/dist/cx/index.cjs +93 -0
  63. package/dist/cx/index.mjs +85 -0
  64. package/dist/detect-fw/index.cjs +384 -0
  65. package/dist/detect-fw/index.mjs +379 -0
  66. package/dist/dev/client.cjs +39 -0
  67. package/dist/dev/client.mjs +38 -0
  68. package/dist/dev/plugin/browser.cjs +11 -0
  69. package/dist/dev/plugin/browser.mjs +9 -0
  70. package/dist/dev/plugin/server.cjs +86 -0
  71. package/dist/dev/plugin/server.mjs +78 -0
  72. package/dist/dev/port.cjs +46 -0
  73. package/dist/dev/port.mjs +43 -0
  74. package/dist/dev/runtime.cjs +28 -0
  75. package/dist/dev/runtime.mjs +29 -0
  76. package/dist/dev/server.cjs +808 -0
  77. package/dist/dev/server.mjs +805 -0
  78. package/dist/dev/shared.cjs +6 -0
  79. package/dist/dev/shared.mjs +5 -0
  80. package/dist/eslint-plugin/index.cjs +66 -0
  81. package/dist/eslint-plugin/index.mjs +66 -0
  82. package/dist/eslint-plugin/rules/classnames-only.cjs +68 -0
  83. package/dist/eslint-plugin/rules/classnames-only.mjs +68 -0
  84. package/dist/eslint-plugin/rules/format-classnames.cjs +137 -0
  85. package/dist/eslint-plugin/rules/format-classnames.mjs +136 -0
  86. package/dist/eslint-plugin/rules/no-unknown-classes.cjs +119 -0
  87. package/dist/eslint-plugin/rules/no-unknown-classes.mjs +119 -0
  88. package/dist/eslint-plugin/rules/prefer-classnames.cjs +69 -0
  89. package/dist/eslint-plugin/rules/prefer-classnames.mjs +69 -0
  90. package/dist/eslint-plugin/rules/prefer-token-values.cjs +197 -0
  91. package/dist/eslint-plugin/rules/prefer-token-values.mjs +197 -0
  92. package/dist/eslint-plugin/rules/props-only.cjs +115 -0
  93. package/dist/eslint-plugin/rules/props-only.mjs +115 -0
  94. package/dist/eslint-plugin/rules/redundant-cx.cjs +66 -0
  95. package/dist/eslint-plugin/rules/redundant-cx.mjs +66 -0
  96. package/dist/eslint-plugin/rules/require-prop-functions.cjs +130 -0
  97. package/dist/eslint-plugin/rules/require-prop-functions.mjs +130 -0
  98. package/dist/eslint-plugin/utils/api.cjs +30 -0
  99. package/dist/eslint-plugin/utils/api.mjs +29 -0
  100. package/dist/eslint-plugin/utils/ast.cjs +119 -0
  101. package/dist/eslint-plugin/utils/ast.mjs +112 -0
  102. package/dist/eslint-plugin/utils/boss-classes.cjs +185 -0
  103. package/dist/eslint-plugin/utils/boss-classes.mjs +175 -0
  104. package/dist/eslint-plugin/utils/defaults.cjs +99 -0
  105. package/dist/eslint-plugin/utils/defaults.mjs +93 -0
  106. package/dist/eslint-plugin/utils/format.cjs +20 -0
  107. package/dist/eslint-plugin/utils/format.mjs +19 -0
  108. package/dist/eslint-plugin/utils/order.cjs +76 -0
  109. package/dist/eslint-plugin/utils/order.mjs +76 -0
  110. package/dist/eslint-plugin/utils/property-order.cjs +449 -0
  111. package/dist/eslint-plugin/utils/property-order.mjs +448 -0
  112. package/dist/eslint-plugin/utils/static.cjs +36 -0
  113. package/dist/eslint-plugin/utils/static.mjs +35 -0
  114. package/dist/fontsource/directory.cjs +39588 -0
  115. package/dist/fontsource/directory.mjs +39587 -0
  116. package/dist/fontsource/server.cjs +291 -0
  117. package/dist/fontsource/server.mjs +282 -0
  118. package/dist/index.cjs +10 -0
  119. package/dist/index.mjs +6 -0
  120. package/dist/log/browser.cjs +28 -0
  121. package/dist/log/browser.mjs +28 -0
  122. package/dist/log/server.cjs +32 -0
  123. package/dist/log/server.mjs +30 -0
  124. package/dist/merge/index.cjs +590 -0
  125. package/dist/merge/index.mjs +586 -0
  126. package/dist/native/browser.cjs +78 -0
  127. package/dist/native/browser.mjs +77 -0
  128. package/dist/native/server.cjs +180 -0
  129. package/dist/native/server.mjs +176 -0
  130. package/dist/native/styleTypes.cjs +168 -0
  131. package/dist/native/styleTypes.mjs +164 -0
  132. package/dist/parser/classname/server.cjs +239 -0
  133. package/dist/parser/classname/server.mjs +232 -0
  134. package/dist/parser/jsx/browser.cjs +66 -0
  135. package/dist/parser/jsx/browser.mjs +63 -0
  136. package/dist/parser/jsx/extractCode.cjs +99 -0
  137. package/dist/parser/jsx/extractCode.mjs +98 -0
  138. package/dist/parser/jsx/extractPrepared.cjs +123 -0
  139. package/dist/parser/jsx/extractPrepared.mjs +122 -0
  140. package/dist/parser/jsx/extractProps.cjs +234 -0
  141. package/dist/parser/jsx/extractProps.mjs +232 -0
  142. package/dist/parser/jsx/isDOMProp.cjs +17 -0
  143. package/dist/parser/jsx/isDOMProp.mjs +15 -0
  144. package/dist/parser/jsx/native.cjs +110 -0
  145. package/dist/parser/jsx/native.mjs +108 -0
  146. package/dist/parser/jsx/runtime.cjs +4 -0
  147. package/dist/parser/jsx/runtime.mjs +3 -0
  148. package/dist/parser/jsx/server.cjs +278 -0
  149. package/dist/parser/jsx/server.mjs +268 -0
  150. package/dist/postcss/index.cjs +16 -0
  151. package/dist/postcss/index.mjs +16 -0
  152. package/dist/prop/at/runtime-only.cjs +90 -0
  153. package/dist/prop/at/runtime-only.mjs +88 -0
  154. package/dist/prop/at/server.cjs +282 -0
  155. package/dist/prop/at/server.mjs +268 -0
  156. package/dist/prop/at/shared.cjs +153 -0
  157. package/dist/prop/at/shared.mjs +144 -0
  158. package/dist/prop/bosswind/browser.cjs +18 -0
  159. package/dist/prop/bosswind/browser.mjs +16 -0
  160. package/dist/prop/bosswind/runtime-only.cjs +18 -0
  161. package/dist/prop/bosswind/runtime-only.mjs +16 -0
  162. package/dist/prop/bosswind/server.cjs +81 -0
  163. package/dist/prop/bosswind/server.mjs +72 -0
  164. package/dist/prop/bosswind/shared.cjs +861 -0
  165. package/dist/prop/bosswind/shared.mjs +855 -0
  166. package/dist/prop/bosswind/tailwind-theme.cjs +703 -0
  167. package/dist/prop/bosswind/tailwind-theme.mjs +702 -0
  168. package/dist/prop/child/runtime-only.cjs +18 -0
  169. package/dist/prop/child/runtime-only.mjs +15 -0
  170. package/dist/prop/child/server.cjs +81 -0
  171. package/dist/prop/child/server.mjs +72 -0
  172. package/dist/prop/css/getDtsTemplate.cjs +65 -0
  173. package/dist/prop/css/getDtsTemplate.mjs +63 -0
  174. package/dist/prop/css/runtime-only.cjs +14 -0
  175. package/dist/prop/css/runtime-only.mjs +13 -0
  176. package/dist/prop/css/server.cjs +99 -0
  177. package/dist/prop/css/server.mjs +90 -0
  178. package/dist/prop/pseudo/runtime-only.cjs +23 -0
  179. package/dist/prop/pseudo/runtime-only.mjs +21 -0
  180. package/dist/prop/pseudo/server.cjs +91 -0
  181. package/dist/prop/pseudo/server.mjs +82 -0
  182. package/dist/prop/pseudo/shared.cjs +61 -0
  183. package/dist/prop/pseudo/shared.mjs +60 -0
  184. package/dist/reset/server.cjs +34 -0
  185. package/dist/reset/server.mjs +26 -0
  186. package/dist/runtime/index.cjs +119 -0
  187. package/dist/runtime/index.mjs +118 -0
  188. package/dist/runtime/preact.cjs +4 -0
  189. package/dist/runtime/preact.mjs +3 -0
  190. package/dist/runtime/qwik.cjs +21 -0
  191. package/dist/runtime/qwik.mjs +18 -0
  192. package/dist/runtime/react.cjs +4 -0
  193. package/dist/runtime/react.mjs +3 -0
  194. package/dist/runtime/solid.cjs +15 -0
  195. package/dist/runtime/solid.mjs +14 -0
  196. package/dist/runtime/stencil.cjs +25 -0
  197. package/dist/runtime/stencil.mjs +21 -0
  198. package/dist/runtime/style.cjs +14 -0
  199. package/dist/runtime/style.mjs +13 -0
  200. package/dist/shared/boundaries.cjs +288 -0
  201. package/dist/shared/boundaries.mjs +285 -0
  202. package/dist/shared/customCss.cjs +212 -0
  203. package/dist/shared/customCss.mjs +211 -0
  204. package/dist/shared/debug.cjs +76 -0
  205. package/dist/shared/debug.mjs +74 -0
  206. package/dist/shared/file.cjs +21 -0
  207. package/dist/shared/file.mjs +19 -0
  208. package/dist/shared/framework.cjs +10 -0
  209. package/dist/shared/framework.mjs +9 -0
  210. package/dist/shared/json.cjs +58 -0
  211. package/dist/shared/json.mjs +57 -0
  212. package/dist/shared/types.cjs +11 -0
  213. package/dist/shared/types.mjs +10 -0
  214. package/dist/strategy/classic/runtime-only.cjs +190 -0
  215. package/dist/strategy/classic/runtime-only.mjs +186 -0
  216. package/dist/strategy/classname-first/runtime-only.cjs +138 -0
  217. package/dist/strategy/classname-first/runtime-only.mjs +134 -0
  218. package/dist/strategy/classname-first/server.cjs +139 -0
  219. package/dist/strategy/classname-first/server.mjs +133 -0
  220. package/dist/strategy/classname-only/server.cjs +43 -0
  221. package/dist/strategy/classname-only/server.mjs +35 -0
  222. package/dist/strategy/inline-first/browser.cjs +61 -0
  223. package/dist/strategy/inline-first/browser.mjs +58 -0
  224. package/dist/strategy/inline-first/runtime-only.cjs +159 -0
  225. package/dist/strategy/inline-first/runtime-only.mjs +155 -0
  226. package/dist/strategy/inline-first/server.cjs +92 -0
  227. package/dist/strategy/inline-first/server.mjs +83 -0
  228. package/dist/strategy/runtime/runtime-only.cjs +24 -0
  229. package/dist/strategy/runtime/runtime-only.mjs +22 -0
  230. package/dist/strategy/runtime/server.cjs +72 -0
  231. package/dist/strategy/runtime/server.mjs +63 -0
  232. package/dist/strategy/runtime-only/css.cjs +183 -0
  233. package/dist/strategy/runtime-only/css.mjs +181 -0
  234. package/dist/tasks/build.cjs +88 -0
  235. package/dist/tasks/build.mjs +84 -0
  236. package/dist/tasks/compile.cjs +12 -0
  237. package/dist/tasks/compile.mjs +12 -0
  238. package/dist/tasks/postcss.cjs +116 -0
  239. package/dist/tasks/postcss.mjs +113 -0
  240. package/dist/tasks/session.cjs +46 -0
  241. package/dist/tasks/session.mjs +42 -0
  242. package/dist/tasks/watch.cjs +102 -0
  243. package/dist/tasks/watch.mjs +99 -0
  244. package/dist/transform/cache.cjs +24 -0
  245. package/dist/transform/cache.mjs +21 -0
  246. package/dist/transform/processFile.cjs +26 -0
  247. package/dist/transform/processFile.mjs +24 -0
  248. package/dist/use/token/browser.cjs +65 -0
  249. package/dist/use/token/browser.mjs +61 -0
  250. package/dist/use/token/runtime-only.cjs +245 -0
  251. package/dist/use/token/runtime-only.mjs +239 -0
  252. package/dist/use/token/server.cjs +325 -0
  253. package/dist/use/token/server.mjs +313 -0
  254. package/dist/use/token/vars.cjs +47 -0
  255. package/dist/use/token/vars.mjs +46 -0
  256. package/package.json +300 -4
  257. package/src/api/config.d.ts +1 -0
  258. package/src/fontsource/types.d.ts +50 -0
  259. package/src/packages/document-create-element/createElement.browser.js +3 -0
  260. package/src/packages/document-create-element/createElement.js +7 -0
  261. package/src/packages/document-create-element/package.json +17 -0
  262. package/src/packages/is-css-prop/browser.js +13 -0
  263. package/src/packages/is-css-prop/index.js +13 -0
  264. package/src/packages/is-css-prop/package-lock.json +52 -0
  265. package/src/packages/is-css-prop/package.json +17 -0
  266. package/src/prop/css/csstype.json +4387 -0
  267. package/src/prop/css/package.json +3 -0
  268. package/src/reset/reset.css +259 -0
@@ -0,0 +1,366 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ let _swc_core = require("@swc/core");
3
+
4
+ //#region src/compile/classname.ts
5
+ const tokenPrefix = "$$.token.";
6
+ const rewriteClassNameTokens = (input) => {
7
+ if (!input.includes(tokenPrefix) && !input.includes("{")) return input;
8
+ return splitSelectors(input).flatMap((selector) => rewriteSelector(selector, { expandSingleGroup: false })).join(" ");
9
+ };
10
+ const rewriteClassNameTokensInText = (source, options = {}) => {
11
+ return rewriteQuotedSegments(source, ({ value, hasTemplateExpression }) => {
12
+ if (hasTemplateExpression) return null;
13
+ return rewriteClassNameTokensWithMap(value, options.mapToken);
14
+ });
15
+ };
16
+ const rewriteClassNameTokensInSource = (source, options) => {
17
+ const ext = options.filename.split(".").pop() ?? "";
18
+ const isTs = ext === "ts" || ext === "tsx";
19
+ const isJsx = [
20
+ "jsx",
21
+ "tsx",
22
+ "js",
23
+ "mjs",
24
+ "cjs"
25
+ ].includes(ext);
26
+ const classNameProp = options.classNameProp ?? "className";
27
+ const mapToken = options.mapToken;
28
+ const parsed = (0, _swc_core.parseSync)(source, {
29
+ syntax: isTs ? "typescript" : "ecmascript",
30
+ tsx: isTs && isJsx,
31
+ jsx: !isTs && isJsx
32
+ });
33
+ const visit = (node, context = {}) => {
34
+ if (!node || typeof node !== "object") return;
35
+ if (Array.isArray(node)) {
36
+ node.forEach((child) => visit(child, context));
37
+ return;
38
+ }
39
+ const current = node;
40
+ if (current.type === "JSXElement") rewriteClassNameTokensInElement(current, classNameProp, mapToken);
41
+ if (current.type === "CallExpression") rewriteClassNameTokensInCall(current, mapToken);
42
+ if (!context.inModuleSpecifier) {
43
+ if (current.type === "StringLiteral") {
44
+ const literal = current;
45
+ updateStringLiteral(literal, rewriteClassNameTokensWithMap(literal.value, mapToken));
46
+ }
47
+ if (current.type === "TemplateLiteral" && Array.isArray(current.expressions) && current.expressions.length === 0 && Array.isArray(current.quasis) && current.quasis.length) {
48
+ const firstQuasi = current.quasis[0];
49
+ if (firstQuasi) {
50
+ const rewritten = rewriteClassNameTokensWithMap(firstQuasi.cooked ?? "", mapToken);
51
+ firstQuasi.cooked = rewritten;
52
+ firstQuasi.raw = rewritten;
53
+ }
54
+ }
55
+ }
56
+ for (const key of Object.keys(current)) {
57
+ const nextContext = (current.type === "ImportDeclaration" || current.type === "ExportAllDeclaration" || current.type === "ExportNamedDeclaration") && key === "source" ? {
58
+ ...context,
59
+ inModuleSpecifier: true
60
+ } : context;
61
+ visit(current[key], nextContext);
62
+ }
63
+ };
64
+ visit(parsed);
65
+ return (0, _swc_core.printSync)(parsed).code;
66
+ };
67
+ const rewriteClassNameTokensInCall = (expr, mapToken) => {
68
+ const callee = expr.callee;
69
+ if (callee.type !== "Identifier" || callee.value !== "$$") return;
70
+ if (expr.arguments.length !== 1) return;
71
+ const arg = expr.arguments[0].expression;
72
+ rewriteStringExpression(arg, mapToken);
73
+ };
74
+ const rewriteStringExpression = (expression, mapToken) => {
75
+ if (!expression) return;
76
+ if (expression.type === "StringLiteral") {
77
+ updateStringLiteral(expression, rewriteClassNameTokensWithMap(expression.value, mapToken));
78
+ return;
79
+ }
80
+ if (expression.type === "TemplateLiteral" && expression.expressions.length === 0 && expression.quasis.length) {
81
+ const firstQuasi = expression.quasis[0];
82
+ if (!firstQuasi) return;
83
+ const rewritten = rewriteClassNameTokensWithMap(firstQuasi.cooked ?? "", mapToken);
84
+ firstQuasi.cooked = rewritten;
85
+ firstQuasi.raw = rewritten;
86
+ }
87
+ };
88
+ const rewriteClassNameTokensInElement = (element, classNameProp = "className", mapToken) => {
89
+ const attributes = element.opening.attributes;
90
+ for (const attr of attributes) {
91
+ if (attr.type !== "JSXAttribute") continue;
92
+ if (!isClassAttribute(attr, classNameProp)) continue;
93
+ if (!attr.value) continue;
94
+ if (attr.value.type === "StringLiteral") {
95
+ updateStringLiteral(attr.value, rewriteClassNameTokensWithMap(attr.value.value, mapToken));
96
+ continue;
97
+ }
98
+ if (attr.value.type === "JSXExpressionContainer") {
99
+ const expression = attr.value.expression;
100
+ rewriteStringExpression(expression, mapToken);
101
+ }
102
+ }
103
+ };
104
+ const isClassAttribute = (attr, classNameProp) => {
105
+ return attr.name.type === "Identifier" && attr.name.value === classNameProp;
106
+ };
107
+ const rewriteSelector = (selector, options) => {
108
+ const grouped = parseGroupedSelector(selector);
109
+ if (grouped) {
110
+ const nextEntries = grouped.entries.map((entry$1) => ({
111
+ name: entry$1.name,
112
+ rawValue: rewriteTokenValue(entry$1.rawValue)
113
+ }));
114
+ if (nextEntries.length > 1 || options.expandSingleGroup) return [...nextEntries].sort((a, b) => a.name.localeCompare(b.name)).map((entry$1) => `${grouped.prefix}:${entry$1.name}:${entry$1.rawValue}`);
115
+ const [entry] = nextEntries;
116
+ return [`${grouped.prefix}:{${entry.name}:${entry.rawValue}}`];
117
+ }
118
+ const fragments = splitFragments(selector);
119
+ if (fragments.length < 2) return [selector];
120
+ const rawValue = fragments.at(-1) ?? "";
121
+ const nextValue = rewriteTokenValue(rawValue);
122
+ if (nextValue === rawValue) return [selector];
123
+ return [`${fragments.slice(0, -1).join(":")}:${nextValue}`];
124
+ };
125
+ const rewriteClassNameTokensWithMap = (input, mapToken) => {
126
+ if (!mapToken) return rewriteClassNameTokens(input);
127
+ const selectors = splitSelectors(input).flatMap((selector) => rewriteSelector(selector, { expandSingleGroup: true }));
128
+ let didChange = selectors.join(" ") !== input;
129
+ const mapped = selectors.map((selector) => {
130
+ if (!mapToken) return selector;
131
+ const next = mapToken(selector);
132
+ if (next && next !== selector) {
133
+ didChange = true;
134
+ return next;
135
+ }
136
+ return selector;
137
+ });
138
+ if (!didChange) return input;
139
+ return mapped.join(" ");
140
+ };
141
+ const rewriteTokenValue = (rawValue) => {
142
+ if (!rawValue.startsWith(tokenPrefix)) return rawValue;
143
+ const fragments = rawValue.slice(9).split(".").filter(Boolean);
144
+ if (fragments.length < 2) return rawValue;
145
+ return fragments.slice(1).join(".");
146
+ };
147
+ const updateStringLiteral = (literal, nextValue) => {
148
+ literal.value = nextValue;
149
+ literal.raw = JSON.stringify(nextValue);
150
+ };
151
+ const splitSelectors = (input) => splitOutside(input, " ");
152
+ const splitFragments = (selector) => splitOutside(selector, ":");
153
+ const splitGroupedEntries = (body) => splitOutside(body, ";");
154
+ const splitGroupedEntry = (entry) => splitOnceOutside(entry, ":");
155
+ const parseGroupedSelector = (selector) => {
156
+ if (!selector.endsWith("}")) return null;
157
+ const groupStart = findGroupStart(selector);
158
+ if (groupStart === -1) return null;
159
+ const prefix = selector.slice(0, groupStart);
160
+ const entries = splitGroupedEntries(selector.slice(groupStart + 2, -1)).map((entry) => entry.trim()).filter((entry) => Boolean(entry)).map((entry) => {
161
+ const parts = splitGroupedEntry(entry);
162
+ if (!parts) return null;
163
+ const [name, rawValue] = parts;
164
+ return {
165
+ name: name.trim(),
166
+ rawValue: rawValue.trim()
167
+ };
168
+ }).filter((entry) => Boolean(entry));
169
+ if (!entries.length) return null;
170
+ return {
171
+ prefix,
172
+ entries
173
+ };
174
+ };
175
+ const splitOutside = (input, delimiter) => {
176
+ const results = [];
177
+ let current = "";
178
+ let braceDepth = 0;
179
+ let bracketDepth = 0;
180
+ for (const char of input) {
181
+ if (char === "{") braceDepth += 1;
182
+ if (char === "}") braceDepth = Math.max(0, braceDepth - 1);
183
+ if (char === "[") bracketDepth += 1;
184
+ if (char === "]") bracketDepth = Math.max(0, bracketDepth - 1);
185
+ if (char === delimiter && braceDepth === 0 && bracketDepth === 0) {
186
+ if (current) results.push(current);
187
+ current = "";
188
+ continue;
189
+ }
190
+ current += char;
191
+ }
192
+ if (current) results.push(current);
193
+ return results;
194
+ };
195
+ const splitOnceOutside = (input, delimiter) => {
196
+ let braceDepth = 0;
197
+ let bracketDepth = 0;
198
+ for (let i = 0; i < input.length; i += 1) {
199
+ const char = input[i];
200
+ if (char === "{") braceDepth += 1;
201
+ if (char === "}") braceDepth = Math.max(0, braceDepth - 1);
202
+ if (char === "[") bracketDepth += 1;
203
+ if (char === "]") bracketDepth = Math.max(0, bracketDepth - 1);
204
+ if (char === delimiter && braceDepth === 0 && bracketDepth === 0) return [input.slice(0, i), input.slice(i + 1)];
205
+ }
206
+ return null;
207
+ };
208
+ const findGroupStart = (selector) => {
209
+ let bracketDepth = 0;
210
+ for (let i = 0; i < selector.length - 1; i += 1) {
211
+ const char = selector[i];
212
+ if (char === "[") bracketDepth += 1;
213
+ if (char === "]") bracketDepth = Math.max(0, bracketDepth - 1);
214
+ if (bracketDepth === 0 && selector[i] === ":" && selector[i + 1] === "{") return i;
215
+ }
216
+ return -1;
217
+ };
218
+ const stripImportantSuffix = (fragment) => {
219
+ return fragment && fragment.endsWith("!") ? fragment.slice(0, -1) : fragment;
220
+ };
221
+ const getChildSelector = (fragment) => {
222
+ if (!fragment || !fragment.startsWith("[") || !fragment.endsWith("]")) return null;
223
+ return fragment.slice(1, -1);
224
+ };
225
+ const isSingleWordToken = (token) => /^[a-zA-Z]+$/.test(token);
226
+ const isBossSelectorToken = (selector, api) => {
227
+ if (isSingleWordToken(selector)) return false;
228
+ if (parseGroupedSelector(selector)) return true;
229
+ const rawFragments = splitFragments(selector);
230
+ if (!rawFragments.length) return false;
231
+ const resolveDescriptor = (fragment) => {
232
+ if (getChildSelector(fragment)) return api.dictionary.resolve("child");
233
+ return api.dictionary.resolve(fragment);
234
+ };
235
+ const firstDescriptor = resolveDescriptor(stripImportantSuffix(rawFragments[0])).descriptor;
236
+ if (!firstDescriptor) return false;
237
+ if (rawFragments.length === 1) return firstDescriptor.single === true;
238
+ const path = [];
239
+ for (const [index, fragment] of Object.entries(rawFragments)) {
240
+ const isLast = rawFragments.length === +index + 1;
241
+ if (path.length && isLast) continue;
242
+ const cleanedFragment = stripImportantSuffix(fragment);
243
+ const childSelector = getChildSelector(cleanedFragment);
244
+ if (childSelector) path.push("child", childSelector);
245
+ else path.push(cleanedFragment);
246
+ }
247
+ if (!path.length) return false;
248
+ const lastProp = path.at(-1);
249
+ const lastDescriptor = lastProp ? resolveDescriptor(lastProp).descriptor : null;
250
+ return Boolean(lastDescriptor?.isCSSProp);
251
+ };
252
+ const collectBossClassTokensInSource = (source, options) => {
253
+ const ext = options.filename.split(".").pop() ?? "";
254
+ const isTs = ext === "ts" || ext === "tsx";
255
+ const isJsx = [
256
+ "jsx",
257
+ "tsx",
258
+ "js",
259
+ "mjs",
260
+ "cjs"
261
+ ].includes(ext);
262
+ const parsed = (0, _swc_core.parseSync)(source, {
263
+ syntax: isTs ? "typescript" : "ecmascript",
264
+ tsx: isTs && isJsx,
265
+ jsx: !isTs && isJsx
266
+ });
267
+ const tokens = /* @__PURE__ */ new Set();
268
+ const visit = (node, context = {}) => {
269
+ if (!node || typeof node !== "object") return;
270
+ if (Array.isArray(node)) {
271
+ node.forEach((child) => visit(child, context));
272
+ return;
273
+ }
274
+ const current = node;
275
+ if (!context.inModuleSpecifier) {
276
+ if (current.type === "StringLiteral") splitSelectors(current.value).flatMap((selector) => rewriteSelector(selector, { expandSingleGroup: true })).forEach((selector) => {
277
+ if (isBossSelectorToken(selector, options.api)) tokens.add(selector);
278
+ });
279
+ if (current.type === "TemplateLiteral" && Array.isArray(current.expressions) && current.expressions.length === 0 && Array.isArray(current.quasis) && current.quasis.length) {
280
+ const firstQuasi = current.quasis[0];
281
+ if (firstQuasi?.cooked != null) splitSelectors(firstQuasi.cooked).flatMap((selector) => rewriteSelector(selector, { expandSingleGroup: true })).forEach((selector) => {
282
+ if (isBossSelectorToken(selector, options.api)) tokens.add(selector);
283
+ });
284
+ }
285
+ }
286
+ for (const key of Object.keys(current)) {
287
+ const nextContext = (current.type === "ImportDeclaration" || current.type === "ExportAllDeclaration" || current.type === "ExportNamedDeclaration") && key === "source" ? {
288
+ ...context,
289
+ inModuleSpecifier: true
290
+ } : context;
291
+ visit(current[key], nextContext);
292
+ }
293
+ };
294
+ visit(parsed);
295
+ return tokens;
296
+ };
297
+ const collectBossClassTokensInText = (source, options) => {
298
+ const tokens = /* @__PURE__ */ new Set();
299
+ rewriteQuotedSegments(source, ({ value, hasTemplateExpression }) => {
300
+ if (hasTemplateExpression) return null;
301
+ splitSelectors(value).flatMap((selector) => rewriteSelector(selector, { expandSingleGroup: true })).forEach((selector) => {
302
+ if (isBossSelectorToken(selector, options.api)) tokens.add(selector);
303
+ });
304
+ return null;
305
+ });
306
+ return tokens;
307
+ };
308
+ const rewriteQuotedSegments = (input, rewrite) => {
309
+ let output = "";
310
+ let index = 0;
311
+ const length = input.length;
312
+ while (index < length) {
313
+ const char = input[index];
314
+ if (char !== "\"" && char !== "'" && char !== "`") {
315
+ output += char;
316
+ index += 1;
317
+ continue;
318
+ }
319
+ const quote = char;
320
+ const start = index;
321
+ index += 1;
322
+ let value = "";
323
+ let escaped = false;
324
+ let hasTemplateExpression = false;
325
+ while (index < length) {
326
+ const current = input[index];
327
+ if (escaped) {
328
+ value += current;
329
+ escaped = false;
330
+ index += 1;
331
+ continue;
332
+ }
333
+ if (current === "\\") {
334
+ value += current;
335
+ escaped = true;
336
+ index += 1;
337
+ continue;
338
+ }
339
+ if (quote === "`" && current === "$" && input[index + 1] === "{") hasTemplateExpression = true;
340
+ if (current === quote) break;
341
+ value += current;
342
+ index += 1;
343
+ }
344
+ if (index >= length) {
345
+ output += input.slice(start);
346
+ break;
347
+ }
348
+ const replacement = rewrite({
349
+ value,
350
+ quote,
351
+ hasTemplateExpression
352
+ });
353
+ if (replacement === null) output += quote + value + quote;
354
+ else output += quote + replacement + quote;
355
+ index += 1;
356
+ }
357
+ return output;
358
+ };
359
+
360
+ //#endregion
361
+ exports.collectBossClassTokensInSource = collectBossClassTokensInSource;
362
+ exports.collectBossClassTokensInText = collectBossClassTokensInText;
363
+ exports.rewriteClassNameTokensInElement = rewriteClassNameTokensInElement;
364
+ exports.rewriteClassNameTokensInSource = rewriteClassNameTokensInSource;
365
+ exports.rewriteClassNameTokensInText = rewriteClassNameTokensInText;
366
+ exports.rewriteClassNameTokensWithMap = rewriteClassNameTokensWithMap;