@buoy-design/scanners 0.1.0 → 0.1.1

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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/dist/base/scanner.d.ts +36 -0
  3. package/dist/base/scanner.d.ts.map +1 -1
  4. package/dist/base/scanner.js +112 -0
  5. package/dist/base/scanner.js.map +1 -1
  6. package/dist/figma/client.d.ts +46 -5
  7. package/dist/figma/client.d.ts.map +1 -1
  8. package/dist/figma/client.js +109 -6
  9. package/dist/figma/client.js.map +1 -1
  10. package/dist/figma/index.d.ts +2 -2
  11. package/dist/figma/index.d.ts.map +1 -1
  12. package/dist/figma/index.js +2 -2
  13. package/dist/figma/index.js.map +1 -1
  14. package/dist/git/angular-scanner.d.ts +2 -2
  15. package/dist/git/angular-scanner.d.ts.map +1 -1
  16. package/dist/git/angular-scanner.js +53 -43
  17. package/dist/git/angular-scanner.js.map +1 -1
  18. package/dist/git/react-scanner.d.ts +4 -3
  19. package/dist/git/react-scanner.d.ts.map +1 -1
  20. package/dist/git/react-scanner.js +89 -120
  21. package/dist/git/react-scanner.js.map +1 -1
  22. package/dist/git/svelte-scanner.d.ts +2 -2
  23. package/dist/git/svelte-scanner.d.ts.map +1 -1
  24. package/dist/git/svelte-scanner.js +90 -59
  25. package/dist/git/svelte-scanner.js.map +1 -1
  26. package/dist/git/token-scanner.d.ts +2 -2
  27. package/dist/git/token-scanner.d.ts.map +1 -1
  28. package/dist/git/token-scanner.js +135 -116
  29. package/dist/git/token-scanner.js.map +1 -1
  30. package/dist/git/vue-scanner.d.ts +2 -2
  31. package/dist/git/vue-scanner.d.ts.map +1 -1
  32. package/dist/git/vue-scanner.js +64 -46
  33. package/dist/git/vue-scanner.js.map +1 -1
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/tailwind/arbitrary-detector.d.ts +26 -0
  39. package/dist/tailwind/arbitrary-detector.d.ts.map +1 -0
  40. package/dist/tailwind/arbitrary-detector.js +190 -0
  41. package/dist/tailwind/arbitrary-detector.js.map +1 -0
  42. package/dist/tailwind/config-parser.d.ts +29 -0
  43. package/dist/tailwind/config-parser.d.ts.map +1 -0
  44. package/dist/tailwind/config-parser.js +221 -0
  45. package/dist/tailwind/config-parser.js.map +1 -0
  46. package/dist/tailwind/index.d.ts +4 -0
  47. package/dist/tailwind/index.d.ts.map +1 -0
  48. package/dist/tailwind/index.js +4 -0
  49. package/dist/tailwind/index.js.map +1 -0
  50. package/dist/tailwind/scanner.d.ts +26 -0
  51. package/dist/tailwind/scanner.d.ts.map +1 -0
  52. package/dist/tailwind/scanner.js +49 -0
  53. package/dist/tailwind/scanner.js.map +1 -0
  54. package/package.json +23 -13
@@ -1,26 +1,32 @@
1
- import { Scanner } from '../base/scanner.js';
2
- import { createComponentId } from '@buoy-design/core';
3
- import { glob } from 'glob';
4
- import { readFile } from 'fs/promises';
5
- import { relative, basename } from 'path';
1
+ import { Scanner, parallelProcess, extractResults, } from "../base/scanner.js";
2
+ import { createComponentId } from "@buoy-design/core";
3
+ import { glob } from "glob";
4
+ import { readFile } from "fs/promises";
5
+ import { relative, basename } from "path";
6
6
  export class VueComponentScanner extends Scanner {
7
7
  async scan() {
8
8
  const startTime = Date.now();
9
9
  const files = await this.findComponentFiles();
10
10
  const components = [];
11
11
  const errors = [];
12
- for (const file of files) {
13
- try {
14
- const parsed = await this.parseFile(file);
15
- if (parsed)
16
- components.push(parsed);
17
- }
18
- catch (err) {
19
- const message = err instanceof Error ? err.message : String(err);
12
+ // Process files in parallel
13
+ const results = await parallelProcess(files, async (file) => ({ file, component: await this.parseFile(file) }), this.concurrency);
14
+ const { successes } = extractResults(results);
15
+ for (const success of successes) {
16
+ if (success.component)
17
+ components.push(success.component);
18
+ }
19
+ // Map failures to errors
20
+ for (let i = 0; i < results.length; i++) {
21
+ const result = results[i];
22
+ if (result.status === "rejected") {
23
+ const message = result.reason instanceof Error
24
+ ? result.reason.message
25
+ : String(result.reason);
20
26
  errors.push({
21
- file,
27
+ file: files[i],
22
28
  message,
23
- code: 'PARSE_ERROR',
29
+ code: "PARSE_ERROR",
24
30
  });
25
31
  }
26
32
  }
@@ -32,17 +38,17 @@ export class VueComponentScanner extends Scanner {
32
38
  return { items: components, errors, stats };
33
39
  }
34
40
  getSourceType() {
35
- return 'vue';
41
+ return "vue";
36
42
  }
37
43
  async findComponentFiles() {
38
- const patterns = this.config.include || ['**/*.vue'];
44
+ const patterns = this.config.include || ["**/*.vue"];
39
45
  const ignore = this.config.exclude || [
40
- '**/node_modules/**',
41
- '**/*.test.*',
42
- '**/*.spec.*',
43
- '**/*.stories.*',
44
- '**/dist/**',
45
- '**/build/**',
46
+ "**/node_modules/**",
47
+ "**/*.test.*",
48
+ "**/*.spec.*",
49
+ "**/*.stories.*",
50
+ "**/dist/**",
51
+ "**/build/**",
46
52
  ];
47
53
  const allFiles = [];
48
54
  for (const pattern of patterns) {
@@ -56,21 +62,21 @@ export class VueComponentScanner extends Scanner {
56
62
  return [...new Set(allFiles)];
57
63
  }
58
64
  async parseFile(filePath) {
59
- const content = await readFile(filePath, 'utf-8');
65
+ const content = await readFile(filePath, "utf-8");
60
66
  const relativePath = relative(this.config.projectRoot, filePath);
61
67
  // Extract component name from filename (e.g., MyButton.vue -> MyButton)
62
- const name = basename(filePath, '.vue');
68
+ const name = basename(filePath, ".vue");
63
69
  // Only process PascalCase component names
64
70
  if (!/^[A-Z]/.test(name))
65
71
  return null;
66
72
  // Extract script content
67
73
  const scriptMatch = content.match(/<script[^>]*>([\s\S]*?)<\/script>/);
68
74
  const scriptSetupMatch = content.match(/<script\s+setup[^>]*>([\s\S]*?)<\/script>/);
69
- const scriptContent = scriptSetupMatch?.[1] || scriptMatch?.[1] || '';
75
+ const scriptContent = scriptSetupMatch?.[1] || scriptMatch?.[1] || "";
70
76
  const props = this.extractProps(scriptContent, !!scriptSetupMatch);
71
77
  const dependencies = this.extractDependencies(content);
72
78
  const source = {
73
- type: 'vue',
79
+ type: "vue",
74
80
  path: relativePath,
75
81
  exportName: name,
76
82
  line: 1,
@@ -95,16 +101,16 @@ export class VueComponentScanner extends Scanner {
95
101
  * Handles nested braces like: { cb: () => { value: string } }
96
102
  */
97
103
  extractBalancedBraces(content, startIndex) {
98
- if (content[startIndex] !== '{')
104
+ if (content[startIndex] !== "{")
99
105
  return null;
100
106
  let depth = 0;
101
107
  let i = startIndex;
102
108
  while (i < content.length) {
103
109
  const char = content[i];
104
- if (char === '{') {
110
+ if (char === "{") {
105
111
  depth++;
106
112
  }
107
- else if (char === '}') {
113
+ else if (char === "}") {
108
114
  depth--;
109
115
  if (depth === 0) {
110
116
  // Return content between braces (excluding the braces themselves)
@@ -124,7 +130,7 @@ export class VueComponentScanner extends Scanner {
124
130
  let i = 0;
125
131
  while (i < propsContent.length) {
126
132
  // Skip whitespace
127
- while (i < propsContent.length && /\s/.test(propsContent[i] ?? ''))
133
+ while (i < propsContent.length && /\s/.test(propsContent[i] ?? ""))
128
134
  i++;
129
135
  if (i >= propsContent.length)
130
136
  break;
@@ -132,7 +138,7 @@ export class VueComponentScanner extends Scanner {
132
138
  const nameMatch = propsContent.substring(i).match(/^(\w+)(\?)?:\s*/);
133
139
  if (!nameMatch || !nameMatch[1]) {
134
140
  // Skip to next comma or end
135
- while (i < propsContent.length && propsContent[i] !== ',')
141
+ while (i < propsContent.length && propsContent[i] !== ",")
136
142
  i++;
137
143
  i++; // skip comma
138
144
  continue;
@@ -141,9 +147,16 @@ export class VueComponentScanner extends Scanner {
141
147
  const isOptional = !!nameMatch[2];
142
148
  i += nameMatch[0].length;
143
149
  // Now extract the type - need to handle nested braces, parens, and generics
144
- let typeStr = '';
150
+ let typeStr = "";
145
151
  let depth = 0;
146
- const depthChars = { '{': 1, '}': -1, '(': 1, ')': -1, '<': 1, '>': -1 };
152
+ const depthChars = {
153
+ "{": 1,
154
+ "}": -1,
155
+ "(": 1,
156
+ ")": -1,
157
+ "<": 1,
158
+ ">": -1,
159
+ };
147
160
  while (i < propsContent.length) {
148
161
  const char = propsContent[i];
149
162
  if (char === undefined)
@@ -152,7 +165,7 @@ export class VueComponentScanner extends Scanner {
152
165
  depth += depthChars[char] ?? 0;
153
166
  }
154
167
  // Stop at comma or semicolon only when not nested
155
- if (depth === 0 && (char === ',' || char === ';')) {
168
+ if (depth === 0 && (char === "," || char === ";")) {
156
169
  i++; // skip the delimiter
157
170
  break;
158
171
  }
@@ -178,7 +191,7 @@ export class VueComponentScanner extends Scanner {
178
191
  // Need to handle nested types like: defineProps<{ cb: () => { value: string } }>()
179
192
  const typePropsStartMatch = scriptContent.match(/defineProps<\{/);
180
193
  if (typePropsStartMatch) {
181
- const startIdx = scriptContent.indexOf('defineProps<{') + 'defineProps<'.length;
194
+ const startIdx = scriptContent.indexOf("defineProps<{") + "defineProps<".length;
182
195
  const propsContent = this.extractBalancedBraces(scriptContent, startIdx);
183
196
  if (propsContent) {
184
197
  const parsedProps = this.parseTypeProps(propsContent);
@@ -189,7 +202,7 @@ export class VueComponentScanner extends Scanner {
189
202
  if (props.length === 0) {
190
203
  const objPropsStartMatch = scriptContent.match(/defineProps\(\{/);
191
204
  if (objPropsStartMatch) {
192
- const startIdx = scriptContent.indexOf('defineProps({') + 'defineProps('.length;
205
+ const startIdx = scriptContent.indexOf("defineProps({") + "defineProps(".length;
193
206
  const propsContent = this.extractBalancedBraces(scriptContent, startIdx);
194
207
  if (propsContent) {
195
208
  this.parseObjectProps(propsContent, props);
@@ -203,8 +216,8 @@ export class VueComponentScanner extends Scanner {
203
216
  if (propNames) {
204
217
  for (const p of propNames) {
205
218
  props.push({
206
- name: p.replace(/['"]/g, ''),
207
- type: 'unknown',
219
+ name: p.replace(/['"]/g, ""),
220
+ type: "unknown",
208
221
  required: false,
209
222
  });
210
223
  }
@@ -215,7 +228,7 @@ export class VueComponentScanner extends Scanner {
215
228
  // Options API: props: { ... } or props: [...]
216
229
  const propsObjStartMatch = scriptContent.match(/props:\s*\{/);
217
230
  if (propsObjStartMatch && propsObjStartMatch.index !== undefined) {
218
- const braceIdx = scriptContent.indexOf('{', propsObjStartMatch.index);
231
+ const braceIdx = scriptContent.indexOf("{", propsObjStartMatch.index);
219
232
  const propsContent = this.extractBalancedBraces(scriptContent, braceIdx);
220
233
  if (propsContent) {
221
234
  this.parseObjectProps(propsContent, props);
@@ -227,8 +240,8 @@ export class VueComponentScanner extends Scanner {
227
240
  if (propNames) {
228
241
  for (const p of propNames) {
229
242
  props.push({
230
- name: p.replace(/['"]/g, ''),
231
- type: 'unknown',
243
+ name: p.replace(/['"]/g, ""),
244
+ type: "unknown",
232
245
  required: false,
233
246
  });
234
247
  }
@@ -254,9 +267,11 @@ export class VueComponentScanner extends Scanner {
254
267
  for (const m of complexMatch) {
255
268
  if (m[1] && m[2]) {
256
269
  const isRequired = propsStr.includes(`${m[1]}:`) &&
257
- propsStr.substring(propsStr.indexOf(`${m[1]}:`)).match(/required:\s*true/);
270
+ propsStr
271
+ .substring(propsStr.indexOf(`${m[1]}:`))
272
+ .match(/required:\s*true/);
258
273
  // Avoid duplicates
259
- if (!props.some(p => p.name === m[1])) {
274
+ if (!props.some((p) => p.name === m[1])) {
260
275
  props.push({
261
276
  name: m[1],
262
277
  type: m[2].toLowerCase(),
@@ -282,7 +297,10 @@ export class VueComponentScanner extends Scanner {
282
297
  const kebabMatches = template.matchAll(/<([a-z]+-[a-z0-9-]+)/g);
283
298
  for (const m of kebabMatches) {
284
299
  if (m[1]) {
285
- const pascal = m[1].split('-').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('');
300
+ const pascal = m[1]
301
+ .split("-")
302
+ .map((s) => s.charAt(0).toUpperCase() + s.slice(1))
303
+ .join("");
286
304
  deps.add(pascal);
287
305
  }
288
306
  }
@@ -290,7 +308,7 @@ export class VueComponentScanner extends Scanner {
290
308
  return Array.from(deps);
291
309
  }
292
310
  hasDeprecatedComment(content) {
293
- return content.includes('@deprecated') || content.includes('* @deprecated');
311
+ return content.includes("@deprecated") || content.includes("* @deprecated");
294
312
  }
295
313
  }
296
314
  //# sourceMappingURL=vue-scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vue-scanner.js","sourceRoot":"","sources":["../../src/git/vue-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAmD,MAAM,oBAAoB,CAAC;AAE9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAM1C,MAAM,OAAO,mBAAoB,SAAQ,OAAoC;IAC3E,KAAK,CAAC,IAAI;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAgB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,MAAM;oBAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI;oBACJ,OAAO;oBACP,IAAI,EAAE,aAAa;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAc;YACvB,YAAY,EAAE,KAAK,CAAC,MAAM;YAC1B,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACjC,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI;YACpC,oBAAoB;YACpB,aAAa;YACb,aAAa;YACb,gBAAgB;YAChB,YAAY;YACZ,aAAa;SACd,CAAC;QAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;gBAClC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;gBAC5B,MAAM;gBACN,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,QAAgB;QACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAEjE,wEAAwE;QACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAExC,0CAA0C;QAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,yBAAyB;QACzB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAEpF,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAc;YACxB,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC;SACR,CAAC;QAEF,OAAO;YACL,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC;YACnC,IAAI;YACJ,MAAM;YACN,KAAK;YACL,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;YACV,YAAY;YACZ,QAAQ,EAAE;gBACR,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;gBAC9C,IAAI,EAAE,EAAE;aACT;YACD,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,OAAe,EAAE,UAAkB;QAC/D,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAE7C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,UAAU,CAAC;QAEnB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,KAAK,EAAE,CAAC;gBACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBAChB,kEAAkE;oBAClE,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,oBAAoB;IACnC,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,YAAoB;QACzC,MAAM,KAAK,GAAqB,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/B,kBAAkB;YAClB,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,IAAI,YAAY,CAAC,MAAM;gBAAE,MAAM;YAEpC,kBAAkB;YAClB,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,4BAA4B;gBAC5B,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,GAAG;oBAAE,CAAC,EAAE,CAAC;gBAC/D,CAAC,EAAE,CAAC,CAAC,aAAa;gBAClB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAEzB,4EAA4E;YAC5E,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,UAAU,GAA2B,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YAEjG,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,IAAI,KAAK,SAAS;oBAAE,MAAM;gBAE9B,IAAI,IAAI,IAAI,UAAU,EAAE,CAAC;oBACvB,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC;gBAED,kDAAkD;gBAClD,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBAClD,CAAC,EAAE,CAAC,CAAC,qBAAqB;oBAC1B,MAAM;gBACR,CAAC;gBAED,OAAO,IAAI,IAAI,CAAC;gBAChB,CAAC,EAAE,CAAC;YACN,CAAC;YAED,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,CAAC,UAAU;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,YAAY,CAAC,aAAqB,EAAE,OAAgB;QAC1D,MAAM,KAAK,GAAqB,EAAE,CAAC;QAEnC,IAAI,OAAO,EAAE,CAAC;YACZ,wCAAwC;YACxC,mDAAmD;YACnD,mFAAmF;YACnF,MAAM,mBAAmB,GAAG,aAAa,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAClE,IAAI,mBAAmB,EAAE,CAAC;gBACxB,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;gBAChF,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACzE,IAAI,YAAY,EAAE,CAAC;oBACjB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;oBACtD,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;YAED,2EAA2E;YAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,kBAAkB,GAAG,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAClE,IAAI,kBAAkB,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;oBAChF,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;oBACzE,IAAI,YAAY,EAAE,CAAC;wBACjB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,kCAAkC;YAClC,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC3E,IAAI,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChE,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC7D,IAAI,SAAS,EAAE,CAAC;oBACd,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;wBAC1B,KAAK,CAAC,IAAI,CAAC;4BACT,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;4BAC5B,IAAI,EAAE,SAAS;4BACf,QAAQ,EAAE,KAAK;yBAChB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,MAAM,kBAAkB,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC9D,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACjE,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBACtE,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACzE,IAAI,YAAY,EAAE,CAAC;oBACjB,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAED,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACrE,IAAI,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChE,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC7D,IAAI,SAAS,EAAE,CAAC;oBACd,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;wBAC1B,KAAK,CAAC,IAAI,CAAC;4BACT,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;4BAC5B,IAAI,EAAE,SAAS;4BACf,QAAQ,EAAE,KAAK;yBAChB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB,CAAC,QAAgB,EAAE,KAAuB;QAChE,oEAAoE;QACpE,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,yDAAyD,CAAC,CAAC;QACjG,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACV,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;oBACxB,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;QAChF,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC9C,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAE7E,mBAAmB;gBACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtC,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;wBACV,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;wBACxB,QAAQ,EAAE,CAAC,CAAC,UAAU;qBACvB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,OAAe;QACzC,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAE,CAAC;QAEpC,sEAAsE;QACtE,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7E,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAElC,wBAAwB;YACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;YACjE,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YAED,gDAAgD;YAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;YAChE,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACT,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzF,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,oBAAoB,CAAC,OAAe;QAC1C,OAAO,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC9E,CAAC;CACF"}
1
+ {"version":3,"file":"vue-scanner.js","sourceRoot":"","sources":["../../src/git/vue-scanner.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,5 +3,7 @@ export { ReactComponentScanner, type ReactScannerConfig } from './git/index.js';
3
3
  export { TokenScanner, type TokenScannerConfig } from './git/index.js';
4
4
  export { FigmaClient, FigmaComponentScanner, type FigmaScannerConfig } from './figma/index.js';
5
5
  export { StorybookScanner, type StorybookScannerConfig } from './storybook/index.js';
6
+ export { TailwindScanner, TailwindConfigParser, ArbitraryValueDetector } from './tailwind/index.js';
7
+ export type { TailwindScannerConfig, TailwindScanResult, TailwindTheme, ArbitraryValue } from './tailwind/index.js';
6
8
  export { createPluginFromScanner } from './plugin-adapter.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/G,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG/F,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG/G,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG/F,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGrF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACpG,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGpH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -7,6 +7,8 @@ export { TokenScanner } from './git/index.js';
7
7
  export { FigmaClient, FigmaComponentScanner } from './figma/index.js';
8
8
  // Storybook scanner
9
9
  export { StorybookScanner } from './storybook/index.js';
10
+ // Tailwind scanner
11
+ export { TailwindScanner, TailwindConfigParser, ArbitraryValueDetector } from './tailwind/index.js';
10
12
  // Plugin adapter
11
13
  export { createPluginFromScanner } from './plugin-adapter.js';
12
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO;AACP,OAAO,EAAE,OAAO,EAAuE,MAAM,iBAAiB,CAAC;AAE/G,qBAAqB;AACrB,OAAO,EAAE,qBAAqB,EAA2B,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAEvE,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAA2B,MAAM,kBAAkB,CAAC;AAE/F,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAA+B,MAAM,sBAAsB,CAAC;AAErF,iBAAiB;AACjB,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO;AACP,OAAO,EAAE,OAAO,EAAuE,MAAM,iBAAiB,CAAC;AAE/G,qBAAqB;AACrB,OAAO,EAAE,qBAAqB,EAA2B,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAEvE,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAA2B,MAAM,kBAAkB,CAAC;AAE/F,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAA+B,MAAM,sBAAsB,CAAC;AAErF,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAGpG,iBAAiB;AACjB,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { DriftSignal } from '@buoy-design/core';
2
+ export interface ArbitraryValue {
3
+ type: 'color' | 'spacing' | 'size' | 'other';
4
+ value: string;
5
+ fullClass: string;
6
+ file: string;
7
+ line: number;
8
+ column: number;
9
+ }
10
+ export interface ArbitraryDetectorConfig {
11
+ projectRoot: string;
12
+ include?: string[];
13
+ exclude?: string[];
14
+ }
15
+ export declare class ArbitraryValueDetector {
16
+ private config;
17
+ constructor(config: ArbitraryDetectorConfig);
18
+ detect(): Promise<ArbitraryValue[]>;
19
+ detectAsDriftSignals(): Promise<DriftSignal[]>;
20
+ private findSourceFiles;
21
+ private scanFile;
22
+ private isHardcodedColor;
23
+ private valuesToDriftSignals;
24
+ private createDriftSignal;
25
+ }
26
+ //# sourceMappingURL=arbitrary-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arbitrary-detector.d.ts","sourceRoot":"","sources":["../../src/tailwind/arbitrary-detector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAoBD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA0B;gBAE5B,MAAM,EAAE,uBAAuB;IAIrC,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAYnC,oBAAoB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAKtC,eAAe;IAqC7B,OAAO,CAAC,QAAQ;IA+DhB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,oBAAoB;IA8C5B,OAAO,CAAC,iBAAiB;CAsC1B"}
@@ -0,0 +1,190 @@
1
+ import { readFileSync } from 'fs';
2
+ import { glob } from 'glob';
3
+ import { relative } from 'path';
4
+ // Patterns for arbitrary values in Tailwind classes
5
+ const ARBITRARY_PATTERNS = {
6
+ // Colors: text-[#fff], bg-[#ff6b6b], border-[rgb(...)], etc.
7
+ color: /\b(?:text|bg|border|ring|fill|stroke|from|via|to|accent|caret|decoration|outline|shadow)-\[([#\w(),.%\s]+)\]/g,
8
+ // Spacing: p-[17px], m-[2rem], gap-[10px], etc.
9
+ spacing: /\b(?:p|px|py|pt|pr|pb|pl|m|mx|my|mt|mr|mb|ml|gap|gap-x|gap-y|space-x|space-y|inset|top|right|bottom|left)-\[([^\]]+)\]/g,
10
+ // Sizing: w-[100px], h-[50vh], min-w-[300px], etc.
11
+ size: /\b(?:w|h|min-w|max-w|min-h|max-h|size)-\[([^\]]+)\]/g,
12
+ // Font size: text-[14px], text-[1.5rem]
13
+ fontSize: /\btext-\[(\d+(?:\.\d+)?(?:px|rem|em))\]/g,
14
+ // Other arbitrary values
15
+ other: /\b[\w-]+-\[([^\]]+)\]/g,
16
+ };
17
+ export class ArbitraryValueDetector {
18
+ config;
19
+ constructor(config) {
20
+ this.config = config;
21
+ }
22
+ async detect() {
23
+ const files = await this.findSourceFiles();
24
+ const arbitraryValues = [];
25
+ for (const file of files) {
26
+ const values = this.scanFile(file);
27
+ arbitraryValues.push(...values);
28
+ }
29
+ return arbitraryValues;
30
+ }
31
+ async detectAsDriftSignals() {
32
+ const values = await this.detect();
33
+ return this.valuesToDriftSignals(values);
34
+ }
35
+ async findSourceFiles() {
36
+ const patterns = this.config.include || [
37
+ '**/*.html',
38
+ '**/*.jsx',
39
+ '**/*.tsx',
40
+ '**/*.vue',
41
+ '**/*.svelte',
42
+ '**/*.astro',
43
+ '**/*.php',
44
+ '**/*.blade.php',
45
+ '**/*.erb',
46
+ '**/*.twig',
47
+ '**/*.cshtml',
48
+ ];
49
+ const ignore = this.config.exclude || [
50
+ '**/node_modules/**',
51
+ '**/dist/**',
52
+ '**/build/**',
53
+ '**/.next/**',
54
+ '**/vendor/**',
55
+ ];
56
+ const allFiles = [];
57
+ for (const pattern of patterns) {
58
+ const matches = await glob(pattern, {
59
+ cwd: this.config.projectRoot,
60
+ ignore,
61
+ absolute: true,
62
+ });
63
+ allFiles.push(...matches);
64
+ }
65
+ return [...new Set(allFiles)];
66
+ }
67
+ scanFile(filePath) {
68
+ const content = readFileSync(filePath, 'utf-8');
69
+ const lines = content.split('\n');
70
+ const values = [];
71
+ const relativePath = relative(this.config.projectRoot, filePath);
72
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
73
+ const line = lines[lineNum];
74
+ // Check for color arbitrary values
75
+ for (const match of line.matchAll(ARBITRARY_PATTERNS.color)) {
76
+ if (this.isHardcodedColor(match[1])) {
77
+ values.push({
78
+ type: 'color',
79
+ value: match[1],
80
+ fullClass: match[0],
81
+ file: relativePath,
82
+ line: lineNum + 1,
83
+ column: match.index + 1,
84
+ });
85
+ }
86
+ }
87
+ // Check for spacing arbitrary values
88
+ for (const match of line.matchAll(ARBITRARY_PATTERNS.spacing)) {
89
+ values.push({
90
+ type: 'spacing',
91
+ value: match[1],
92
+ fullClass: match[0],
93
+ file: relativePath,
94
+ line: lineNum + 1,
95
+ column: match.index + 1,
96
+ });
97
+ }
98
+ // Check for size arbitrary values
99
+ for (const match of line.matchAll(ARBITRARY_PATTERNS.size)) {
100
+ values.push({
101
+ type: 'size',
102
+ value: match[1],
103
+ fullClass: match[0],
104
+ file: relativePath,
105
+ line: lineNum + 1,
106
+ column: match.index + 1,
107
+ });
108
+ }
109
+ // Check for font size arbitrary values
110
+ for (const match of line.matchAll(ARBITRARY_PATTERNS.fontSize)) {
111
+ values.push({
112
+ type: 'size',
113
+ value: match[1],
114
+ fullClass: match[0],
115
+ file: relativePath,
116
+ line: lineNum + 1,
117
+ column: match.index + 1,
118
+ });
119
+ }
120
+ }
121
+ return values;
122
+ }
123
+ isHardcodedColor(value) {
124
+ if (/^#[0-9a-fA-F]{3,8}$/.test(value)) {
125
+ return true;
126
+ }
127
+ if (/^(?:rgb|rgba|hsl|hsla)\s*\(/.test(value)) {
128
+ return true;
129
+ }
130
+ // CSS variable references are OK
131
+ if (/^var\(/.test(value)) {
132
+ return false;
133
+ }
134
+ return false;
135
+ }
136
+ valuesToDriftSignals(values) {
137
+ const byFile = new Map();
138
+ for (const value of values) {
139
+ const existing = byFile.get(value.file) || [];
140
+ existing.push(value);
141
+ byFile.set(value.file, existing);
142
+ }
143
+ const signals = [];
144
+ for (const [file, fileValues] of byFile) {
145
+ const colors = fileValues.filter(v => v.type === 'color');
146
+ const spacing = fileValues.filter(v => v.type === 'spacing');
147
+ const sizes = fileValues.filter(v => v.type === 'size');
148
+ if (colors.length > 0) {
149
+ signals.push(this.createDriftSignal('color', file, colors, `${colors.length} hardcoded color${colors.length > 1 ? 's' : ''} found. Use theme colors instead.`));
150
+ }
151
+ if (spacing.length > 0) {
152
+ signals.push(this.createDriftSignal('spacing', file, spacing, `${spacing.length} arbitrary spacing value${spacing.length > 1 ? 's' : ''} found. Use theme spacing instead.`));
153
+ }
154
+ if (sizes.length > 0) {
155
+ signals.push(this.createDriftSignal('size', file, sizes, `${sizes.length} arbitrary size value${sizes.length > 1 ? 's' : ''} found. Consider using theme values.`));
156
+ }
157
+ }
158
+ return signals;
159
+ }
160
+ createDriftSignal(valueType, file, values, message) {
161
+ const source = {
162
+ entityType: 'component',
163
+ entityId: `tailwind:${file}`,
164
+ entityName: file,
165
+ location: `${file}:${values[0].line}`,
166
+ };
167
+ const examples = values.slice(0, 5).map(v => `${v.fullClass} at line ${v.line}`);
168
+ return {
169
+ id: `drift:hardcoded-value:tailwind:${file}:${valueType}`,
170
+ type: 'hardcoded-value',
171
+ severity: valueType === 'color' ? 'warning' : 'info',
172
+ source,
173
+ message,
174
+ details: {
175
+ expected: 'Use Tailwind theme tokens',
176
+ actual: `${values.length} arbitrary ${valueType} values`,
177
+ affectedFiles: [file],
178
+ suggestions: [
179
+ valueType === 'color'
180
+ ? 'Replace arbitrary colors with theme colors: text-primary, bg-secondary, etc.'
181
+ : 'Replace arbitrary values with theme tokens: p-4, gap-2, w-full, etc.',
182
+ 'Add missing values to tailwind.config.js theme.extend if needed',
183
+ `Examples: ${examples.slice(0, 3).join(', ')}`,
184
+ ],
185
+ },
186
+ detectedAt: new Date(),
187
+ };
188
+ }
189
+ }
190
+ //# sourceMappingURL=arbitrary-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arbitrary-detector.js","sourceRoot":"","sources":["../../src/tailwind/arbitrary-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { DesignToken } from '@buoy-design/core';
2
+ export interface TailwindTheme {
3
+ colors: Record<string, string | Record<string, string>>;
4
+ spacing: Record<string, string>;
5
+ fontSize: Record<string, string | [string, Record<string, string>]>;
6
+ fontFamily: Record<string, string[]>;
7
+ borderRadius: Record<string, string>;
8
+ boxShadow: Record<string, string>;
9
+ }
10
+ export interface ParsedTailwindConfig {
11
+ theme: Partial<TailwindTheme>;
12
+ tokens: DesignToken[];
13
+ configPath: string;
14
+ }
15
+ export declare class TailwindConfigParser {
16
+ private projectRoot;
17
+ constructor(projectRoot: string);
18
+ parse(): Promise<ParsedTailwindConfig | null>;
19
+ private findConfigFile;
20
+ private extractTheme;
21
+ private extractObjectFromConfig;
22
+ private parseObjectLiteral;
23
+ private themeToTokens;
24
+ private createColorToken;
25
+ private createSpacingToken;
26
+ private createShadowToken;
27
+ private createRawToken;
28
+ }
29
+ //# sourceMappingURL=config-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-parser.d.ts","sourceRoot":"","sources":["../../src/tailwind/config-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAGlE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAIzB,KAAK,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAqBnD,OAAO,CAAC,cAAc;YAkBR,YAAY;IAmD1B,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,cAAc;CAkBvB"}