@buoy-design/scanners 0.1.0
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.
- package/dist/__tests__/fixtures/react-components.d.ts +5 -0
- package/dist/__tests__/fixtures/react-components.d.ts.map +1 -0
- package/dist/__tests__/fixtures/react-components.js +36 -0
- package/dist/__tests__/fixtures/react-components.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +78 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/base/index.d.ts +2 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +2 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/scanner.d.ts +28 -0
- package/dist/base/scanner.d.ts.map +1 -0
- package/dist/base/scanner.js +7 -0
- package/dist/base/scanner.js.map +1 -0
- package/dist/figma/client.d.ts +98 -0
- package/dist/figma/client.d.ts.map +1 -0
- package/dist/figma/client.js +54 -0
- package/dist/figma/client.js.map +1 -0
- package/dist/figma/component-scanner.d.ts +22 -0
- package/dist/figma/component-scanner.d.ts.map +1 -0
- package/dist/figma/component-scanner.js +174 -0
- package/dist/figma/component-scanner.js.map +1 -0
- package/dist/figma/index.d.ts +3 -0
- package/dist/figma/index.d.ts.map +1 -0
- package/dist/figma/index.js +3 -0
- package/dist/figma/index.js.map +1 -0
- package/dist/git/angular-scanner.d.ts +18 -0
- package/dist/git/angular-scanner.d.ts.map +1 -0
- package/dist/git/angular-scanner.js +244 -0
- package/dist/git/angular-scanner.js.map +1 -0
- package/dist/git/index.d.ts +8 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +8 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/react-scanner.d.ts +29 -0
- package/dist/git/react-scanner.d.ts.map +1 -0
- package/dist/git/react-scanner.js +469 -0
- package/dist/git/react-scanner.js.map +1 -0
- package/dist/git/react-scanner.test.d.ts +2 -0
- package/dist/git/react-scanner.test.d.ts.map +1 -0
- package/dist/git/react-scanner.test.js +107 -0
- package/dist/git/react-scanner.test.js.map +1 -0
- package/dist/git/svelte-scanner.d.ts +30 -0
- package/dist/git/svelte-scanner.d.ts.map +1 -0
- package/dist/git/svelte-scanner.js +344 -0
- package/dist/git/svelte-scanner.js.map +1 -0
- package/dist/git/template-scanner.d.ts +16 -0
- package/dist/git/template-scanner.d.ts.map +1 -0
- package/dist/git/template-scanner.js +227 -0
- package/dist/git/template-scanner.js.map +1 -0
- package/dist/git/token-scanner.d.ts +43 -0
- package/dist/git/token-scanner.d.ts.map +1 -0
- package/dist/git/token-scanner.js +444 -0
- package/dist/git/token-scanner.js.map +1 -0
- package/dist/git/vue-scanner.d.ts +26 -0
- package/dist/git/vue-scanner.d.ts.map +1 -0
- package/dist/git/vue-scanner.js +296 -0
- package/dist/git/vue-scanner.js.map +1 -0
- package/dist/git/webcomponent-scanner.d.ts +22 -0
- package/dist/git/webcomponent-scanner.d.ts.map +1 -0
- package/dist/git/webcomponent-scanner.js +312 -0
- package/dist/git/webcomponent-scanner.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-adapter.d.ts +11 -0
- package/dist/plugin-adapter.d.ts.map +1 -0
- package/dist/plugin-adapter.js +21 -0
- package/dist/plugin-adapter.js.map +1 -0
- package/dist/storybook/extractor.d.ts +20 -0
- package/dist/storybook/extractor.d.ts.map +1 -0
- package/dist/storybook/extractor.js +146 -0
- package/dist/storybook/extractor.js.map +1 -0
- package/dist/storybook/index.d.ts +2 -0
- package/dist/storybook/index.d.ts.map +1 -0
- package/dist/storybook/index.js +2 -0
- package/dist/storybook/index.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-scanner.d.ts","sourceRoot":"","sources":["../../src/git/token-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAC9F,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,mBAAmB,CAAC;AAM3B,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,YAAa,SAAQ,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAClE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAgF9C,aAAa,IAAI,MAAM;YAIT,cAAc;YAgBd,kBAAkB;IAuBhC,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,mBAAmB;YAiCb,iBAAiB;IA4E/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyBxB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAiEvB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,cAAc;CASvB"}
|
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
import { Scanner } from '../base/scanner.js';
|
|
2
|
+
import { createTokenId } from '@buoy-design/core';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
import { readFile } from 'fs/promises';
|
|
5
|
+
import { relative, extname } from 'path';
|
|
6
|
+
export class TokenScanner extends Scanner {
|
|
7
|
+
async scan() {
|
|
8
|
+
const startTime = Date.now();
|
|
9
|
+
const tokenMap = new Map(); // Dedupe by ID
|
|
10
|
+
const errors = [];
|
|
11
|
+
const scannedFiles = new Set();
|
|
12
|
+
// Helper to add tokens with deduplication
|
|
13
|
+
const addTokens = (newTokens) => {
|
|
14
|
+
for (const token of newTokens) {
|
|
15
|
+
if (!tokenMap.has(token.id)) {
|
|
16
|
+
tokenMap.set(token.id, token);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
// Helper to scan a file (with tracking to avoid re-scanning)
|
|
21
|
+
const scanFile = async (file) => {
|
|
22
|
+
if (scannedFiles.has(file))
|
|
23
|
+
return;
|
|
24
|
+
scannedFiles.add(file);
|
|
25
|
+
const ext = extname(file);
|
|
26
|
+
if (ext === '.json') {
|
|
27
|
+
addTokens(await this.parseJsonTokenFile(file));
|
|
28
|
+
}
|
|
29
|
+
else if (ext === '.css' || ext === '.scss') {
|
|
30
|
+
addTokens(await this.parseCssVariables(file));
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
// Scan explicitly configured files first (higher priority)
|
|
34
|
+
if (this.config.files && this.config.files.length > 0) {
|
|
35
|
+
for (const pattern of this.config.files) {
|
|
36
|
+
const matches = await glob(pattern, {
|
|
37
|
+
cwd: this.config.projectRoot,
|
|
38
|
+
absolute: true,
|
|
39
|
+
});
|
|
40
|
+
for (const file of matches) {
|
|
41
|
+
try {
|
|
42
|
+
await scanFile(file);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
46
|
+
errors.push({ file, message, code: 'PARSE_ERROR' });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Only scan default patterns if no explicit files configured
|
|
53
|
+
// Scan JSON token files
|
|
54
|
+
const jsonFiles = await this.findTokenFiles(['**/*.tokens.json', '**/tokens.json', '**/tokens/**/*.json']);
|
|
55
|
+
for (const file of jsonFiles) {
|
|
56
|
+
try {
|
|
57
|
+
await scanFile(file);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
61
|
+
errors.push({ file, message, code: 'JSON_PARSE_ERROR' });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Scan CSS files for variables
|
|
65
|
+
const cssFiles = await this.findTokenFiles(['**/*.css', '**/*.scss']);
|
|
66
|
+
for (const file of cssFiles) {
|
|
67
|
+
try {
|
|
68
|
+
await scanFile(file);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
72
|
+
errors.push({ file, message, code: 'CSS_PARSE_ERROR' });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const tokens = Array.from(tokenMap.values());
|
|
77
|
+
const stats = {
|
|
78
|
+
filesScanned: scannedFiles.size,
|
|
79
|
+
itemsFound: tokens.length,
|
|
80
|
+
duration: Date.now() - startTime,
|
|
81
|
+
};
|
|
82
|
+
return { items: tokens, errors, stats };
|
|
83
|
+
}
|
|
84
|
+
getSourceType() {
|
|
85
|
+
return 'tokens';
|
|
86
|
+
}
|
|
87
|
+
async findTokenFiles(patterns) {
|
|
88
|
+
const allFiles = [];
|
|
89
|
+
const ignore = this.config.exclude || ['**/node_modules/**', '**/dist/**'];
|
|
90
|
+
for (const pattern of patterns) {
|
|
91
|
+
const matches = await glob(pattern, {
|
|
92
|
+
cwd: this.config.projectRoot,
|
|
93
|
+
ignore,
|
|
94
|
+
absolute: true,
|
|
95
|
+
});
|
|
96
|
+
allFiles.push(...matches);
|
|
97
|
+
}
|
|
98
|
+
return [...new Set(allFiles)];
|
|
99
|
+
}
|
|
100
|
+
async parseJsonTokenFile(filePath) {
|
|
101
|
+
const content = await readFile(filePath, 'utf-8');
|
|
102
|
+
const data = JSON.parse(content);
|
|
103
|
+
const relativePath = relative(this.config.projectRoot, filePath);
|
|
104
|
+
const tokens = [];
|
|
105
|
+
const processTokens = (obj, prefix = '') => {
|
|
106
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
107
|
+
const tokenName = prefix ? `${prefix}.${key}` : key;
|
|
108
|
+
if (this.isTokenValue(value)) {
|
|
109
|
+
const token = this.createTokenFromJson(tokenName, value, relativePath);
|
|
110
|
+
if (token)
|
|
111
|
+
tokens.push(token);
|
|
112
|
+
}
|
|
113
|
+
else if (typeof value === 'object' && value !== null) {
|
|
114
|
+
processTokens(value, tokenName);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
processTokens(data);
|
|
119
|
+
return tokens;
|
|
120
|
+
}
|
|
121
|
+
isTokenValue(value) {
|
|
122
|
+
if (typeof value !== 'object' || value === null)
|
|
123
|
+
return false;
|
|
124
|
+
const obj = value;
|
|
125
|
+
// Check for common token formats
|
|
126
|
+
// Style Dictionary format: { value: "...", type: "..." }
|
|
127
|
+
if ('value' in obj)
|
|
128
|
+
return true;
|
|
129
|
+
// Direct value format: { $value: "..." }
|
|
130
|
+
if ('$value' in obj)
|
|
131
|
+
return true;
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
createTokenFromJson(name, value, filePath) {
|
|
135
|
+
const rawValue = (value.value || value.$value);
|
|
136
|
+
const type = (value.type || value.$type || this.inferCategory(name, rawValue));
|
|
137
|
+
if (rawValue === undefined)
|
|
138
|
+
return null;
|
|
139
|
+
const source = {
|
|
140
|
+
type: 'json',
|
|
141
|
+
path: filePath,
|
|
142
|
+
key: name,
|
|
143
|
+
};
|
|
144
|
+
const tokenValue = this.parseTokenValue(type, rawValue);
|
|
145
|
+
return {
|
|
146
|
+
id: createTokenId(source, name),
|
|
147
|
+
name,
|
|
148
|
+
category: this.normalizeCategory(type),
|
|
149
|
+
value: tokenValue,
|
|
150
|
+
source,
|
|
151
|
+
aliases: [],
|
|
152
|
+
usedBy: [],
|
|
153
|
+
metadata: {
|
|
154
|
+
description: value.description,
|
|
155
|
+
},
|
|
156
|
+
scannedAt: new Date(),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
async parseCssVariables(filePath) {
|
|
160
|
+
const content = await readFile(filePath, 'utf-8');
|
|
161
|
+
const relativePath = relative(this.config.projectRoot, filePath);
|
|
162
|
+
const tokens = [];
|
|
163
|
+
// Remove CSS comments before parsing to avoid matching inside comments
|
|
164
|
+
const contentWithoutComments = this.stripCssComments(content);
|
|
165
|
+
// Extract CSS custom properties using a robust parser
|
|
166
|
+
const cssVariables = this.extractCssVariables(contentWithoutComments, content);
|
|
167
|
+
for (const { name, value, lineNumber } of cssVariables) {
|
|
168
|
+
const prefix = this.config.cssVariablePrefix;
|
|
169
|
+
// Skip if prefix is configured and doesn't match
|
|
170
|
+
if (prefix && !name.startsWith(prefix.replace(/^--/, ''))) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const cleanName = name.trim();
|
|
174
|
+
const cleanValue = value.trim();
|
|
175
|
+
const source = {
|
|
176
|
+
type: 'css',
|
|
177
|
+
path: relativePath,
|
|
178
|
+
line: lineNumber,
|
|
179
|
+
};
|
|
180
|
+
const category = this.inferCategory(cleanName, cleanValue);
|
|
181
|
+
const tokenValue = this.parseTokenValue(category, cleanValue);
|
|
182
|
+
tokens.push({
|
|
183
|
+
id: createTokenId(source, cleanName),
|
|
184
|
+
name: `--${cleanName}`,
|
|
185
|
+
category: this.normalizeCategory(category),
|
|
186
|
+
value: tokenValue,
|
|
187
|
+
source,
|
|
188
|
+
aliases: [],
|
|
189
|
+
usedBy: [],
|
|
190
|
+
metadata: {},
|
|
191
|
+
scannedAt: new Date(),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
// Extract SCSS variables using a robust parser
|
|
195
|
+
const scssVariables = this.extractScssVariables(contentWithoutComments, content);
|
|
196
|
+
for (const { name, value, lineNumber } of scssVariables) {
|
|
197
|
+
const cleanName = name.trim();
|
|
198
|
+
const cleanValue = value.trim();
|
|
199
|
+
const source = {
|
|
200
|
+
type: 'css',
|
|
201
|
+
path: relativePath,
|
|
202
|
+
line: lineNumber,
|
|
203
|
+
};
|
|
204
|
+
const category = this.inferCategory(cleanName, cleanValue);
|
|
205
|
+
const tokenValue = this.parseTokenValue(category, cleanValue);
|
|
206
|
+
tokens.push({
|
|
207
|
+
id: createTokenId(source, cleanName),
|
|
208
|
+
name: `$${cleanName}`,
|
|
209
|
+
category: this.normalizeCategory(category),
|
|
210
|
+
value: tokenValue,
|
|
211
|
+
source,
|
|
212
|
+
aliases: [],
|
|
213
|
+
usedBy: [],
|
|
214
|
+
metadata: {},
|
|
215
|
+
scannedAt: new Date(),
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return tokens;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Strip CSS comments from content, preserving line structure
|
|
222
|
+
* for accurate line number calculation
|
|
223
|
+
*/
|
|
224
|
+
stripCssComments(content) {
|
|
225
|
+
let result = '';
|
|
226
|
+
let i = 0;
|
|
227
|
+
while (i < content.length) {
|
|
228
|
+
// Check for comment start
|
|
229
|
+
if (content[i] === '/' && content[i + 1] === '*') {
|
|
230
|
+
// Find comment end
|
|
231
|
+
let j = i + 2;
|
|
232
|
+
while (j < content.length && !(content[j] === '*' && content[j + 1] === '/')) {
|
|
233
|
+
// Preserve newlines so line numbers stay accurate
|
|
234
|
+
if (content[j] === '\n') {
|
|
235
|
+
result += '\n';
|
|
236
|
+
}
|
|
237
|
+
j++;
|
|
238
|
+
}
|
|
239
|
+
// Skip past closing */
|
|
240
|
+
i = j + 2;
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
result += content[i];
|
|
244
|
+
i++;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Extract CSS custom properties handling:
|
|
251
|
+
* - Multi-line values (gradients, box-shadows)
|
|
252
|
+
* - Values containing semicolons in url() or content strings
|
|
253
|
+
*/
|
|
254
|
+
extractCssVariables(contentWithoutComments, originalContent) {
|
|
255
|
+
const results = [];
|
|
256
|
+
// Match the variable declaration start: --name:
|
|
257
|
+
const varStartRegex = /--([a-zA-Z0-9-_]+)\s*:/g;
|
|
258
|
+
let match;
|
|
259
|
+
while ((match = varStartRegex.exec(contentWithoutComments)) !== null) {
|
|
260
|
+
const name = match[1];
|
|
261
|
+
if (!name)
|
|
262
|
+
continue;
|
|
263
|
+
const valueStart = match.index + match[0].length;
|
|
264
|
+
const value = this.extractCssValue(contentWithoutComments, valueStart);
|
|
265
|
+
if (value !== null) {
|
|
266
|
+
// Calculate line number from original content
|
|
267
|
+
const lineNumber = originalContent.slice(0, match.index).split('\n').length;
|
|
268
|
+
results.push({ name, value, lineNumber });
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return results;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Extract SCSS variables handling multi-line values and strings
|
|
275
|
+
*/
|
|
276
|
+
extractScssVariables(contentWithoutComments, originalContent) {
|
|
277
|
+
const results = [];
|
|
278
|
+
// Match the variable declaration start: $name:
|
|
279
|
+
const varStartRegex = /\$([a-zA-Z0-9-_]+)\s*:/g;
|
|
280
|
+
let match;
|
|
281
|
+
while ((match = varStartRegex.exec(contentWithoutComments)) !== null) {
|
|
282
|
+
const name = match[1];
|
|
283
|
+
if (!name)
|
|
284
|
+
continue;
|
|
285
|
+
const valueStart = match.index + match[0].length;
|
|
286
|
+
const value = this.extractCssValue(contentWithoutComments, valueStart);
|
|
287
|
+
if (value !== null) {
|
|
288
|
+
// Calculate line number from original content
|
|
289
|
+
const lineNumber = originalContent.slice(0, match.index).split('\n').length;
|
|
290
|
+
results.push({ name, value, lineNumber });
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return results;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Extract a CSS value starting at the given position, handling:
|
|
297
|
+
* - Nested parentheses (for url(), calc(), etc.)
|
|
298
|
+
* - Quoted strings (which may contain semicolons)
|
|
299
|
+
* - Multi-line values
|
|
300
|
+
* Returns null if no valid value found
|
|
301
|
+
*/
|
|
302
|
+
extractCssValue(content, startIndex) {
|
|
303
|
+
let i = startIndex;
|
|
304
|
+
let value = '';
|
|
305
|
+
let parenDepth = 0;
|
|
306
|
+
let inString = null; // null, '"', or "'"
|
|
307
|
+
// Skip leading whitespace
|
|
308
|
+
while (i < content.length && /\s/.test(content[i])) {
|
|
309
|
+
i++;
|
|
310
|
+
}
|
|
311
|
+
while (i < content.length) {
|
|
312
|
+
const char = content[i];
|
|
313
|
+
// Handle string literals
|
|
314
|
+
if (inString) {
|
|
315
|
+
value += char;
|
|
316
|
+
if (char === inString && content[i - 1] !== '\\') {
|
|
317
|
+
inString = null;
|
|
318
|
+
}
|
|
319
|
+
i++;
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
// Check for string start
|
|
323
|
+
if (char === '"' || char === "'") {
|
|
324
|
+
inString = char;
|
|
325
|
+
value += char;
|
|
326
|
+
i++;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
// Track parentheses depth
|
|
330
|
+
if (char === '(') {
|
|
331
|
+
parenDepth++;
|
|
332
|
+
value += char;
|
|
333
|
+
i++;
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
if (char === ')') {
|
|
337
|
+
parenDepth--;
|
|
338
|
+
value += char;
|
|
339
|
+
i++;
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
// Semicolon ends the value only if we're not inside parentheses or strings
|
|
343
|
+
if (char === ';' && parenDepth === 0) {
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
// Handle closing brace (end of rule block) - value ends without semicolon
|
|
347
|
+
if (char === '}' && parenDepth === 0) {
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
value += char;
|
|
351
|
+
i++;
|
|
352
|
+
}
|
|
353
|
+
const trimmed = value.trim();
|
|
354
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
355
|
+
}
|
|
356
|
+
inferCategory(name, value) {
|
|
357
|
+
const nameLower = name.toLowerCase();
|
|
358
|
+
const valueStr = String(value).toLowerCase();
|
|
359
|
+
// Infer from name
|
|
360
|
+
if (nameLower.includes('color') || nameLower.includes('background') || nameLower.includes('fill')) {
|
|
361
|
+
return 'color';
|
|
362
|
+
}
|
|
363
|
+
if (nameLower.includes('spacing') || nameLower.includes('gap') || nameLower.includes('margin') || nameLower.includes('padding')) {
|
|
364
|
+
return 'spacing';
|
|
365
|
+
}
|
|
366
|
+
if (nameLower.includes('font') || nameLower.includes('text') || nameLower.includes('typography')) {
|
|
367
|
+
return 'typography';
|
|
368
|
+
}
|
|
369
|
+
if (nameLower.includes('shadow') || nameLower.includes('elevation')) {
|
|
370
|
+
return 'shadow';
|
|
371
|
+
}
|
|
372
|
+
if (nameLower.includes('border') || nameLower.includes('radius')) {
|
|
373
|
+
return 'border';
|
|
374
|
+
}
|
|
375
|
+
if (nameLower.includes('size') || nameLower.includes('width') || nameLower.includes('height')) {
|
|
376
|
+
return 'sizing';
|
|
377
|
+
}
|
|
378
|
+
if (nameLower.includes('animation') || nameLower.includes('duration') || nameLower.includes('timing')) {
|
|
379
|
+
return 'motion';
|
|
380
|
+
}
|
|
381
|
+
// Infer from value
|
|
382
|
+
if (valueStr.startsWith('#') || valueStr.startsWith('rgb') || valueStr.startsWith('hsl')) {
|
|
383
|
+
return 'color';
|
|
384
|
+
}
|
|
385
|
+
if (/^\d+(px|rem|em)$/.test(valueStr)) {
|
|
386
|
+
return 'spacing';
|
|
387
|
+
}
|
|
388
|
+
return 'other';
|
|
389
|
+
}
|
|
390
|
+
normalizeCategory(type) {
|
|
391
|
+
const lower = type.toLowerCase();
|
|
392
|
+
const mapping = {
|
|
393
|
+
color: 'color',
|
|
394
|
+
colours: 'color',
|
|
395
|
+
spacing: 'spacing',
|
|
396
|
+
space: 'spacing',
|
|
397
|
+
typography: 'typography',
|
|
398
|
+
font: 'typography',
|
|
399
|
+
shadow: 'shadow',
|
|
400
|
+
boxshadow: 'shadow',
|
|
401
|
+
border: 'border',
|
|
402
|
+
borderradius: 'border',
|
|
403
|
+
sizing: 'sizing',
|
|
404
|
+
size: 'sizing',
|
|
405
|
+
motion: 'motion',
|
|
406
|
+
animation: 'motion',
|
|
407
|
+
duration: 'motion',
|
|
408
|
+
};
|
|
409
|
+
return mapping[lower] || 'other';
|
|
410
|
+
}
|
|
411
|
+
parseTokenValue(category, rawValue) {
|
|
412
|
+
const valueStr = String(rawValue).trim();
|
|
413
|
+
if (category === 'color') {
|
|
414
|
+
return {
|
|
415
|
+
type: 'color',
|
|
416
|
+
hex: this.normalizeColor(valueStr),
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
if (category === 'spacing' || category === 'sizing') {
|
|
420
|
+
const match = valueStr.match(/^(\d+(?:\.\d+)?)(px|rem|em)?$/);
|
|
421
|
+
if (match && match[1]) {
|
|
422
|
+
return {
|
|
423
|
+
type: 'spacing',
|
|
424
|
+
value: parseFloat(match[1]),
|
|
425
|
+
unit: match[2] || 'px',
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
// Default to raw value
|
|
430
|
+
return {
|
|
431
|
+
type: 'raw',
|
|
432
|
+
value: valueStr,
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
normalizeColor(value) {
|
|
436
|
+
// Already a hex color
|
|
437
|
+
if (/^#[0-9a-fA-F]{3,8}$/.test(value)) {
|
|
438
|
+
return value.toLowerCase();
|
|
439
|
+
}
|
|
440
|
+
// Could add rgb/hsl conversion here
|
|
441
|
+
return value;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
//# sourceMappingURL=token-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-scanner.js","sourceRoot":"","sources":["../../src/git/token-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Scanner, ScanResult, ScannerConfig } from '../base/scanner.js';
|
|
2
|
+
import type { Component } from '@buoy-design/core';
|
|
3
|
+
export interface VueScannerConfig extends ScannerConfig {
|
|
4
|
+
designSystemPackage?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class VueComponentScanner extends Scanner<Component, VueScannerConfig> {
|
|
7
|
+
scan(): Promise<ScanResult<Component>>;
|
|
8
|
+
getSourceType(): string;
|
|
9
|
+
private findComponentFiles;
|
|
10
|
+
private parseFile;
|
|
11
|
+
/**
|
|
12
|
+
* Extract matched content with proper brace balancing.
|
|
13
|
+
* Handles nested braces like: { cb: () => { value: string } }
|
|
14
|
+
*/
|
|
15
|
+
private extractBalancedBraces;
|
|
16
|
+
/**
|
|
17
|
+
* Parse TypeScript props string into individual prop definitions.
|
|
18
|
+
* Handles complex types like: { cb: () => void, data: { nested: string } }
|
|
19
|
+
*/
|
|
20
|
+
private parseTypeProps;
|
|
21
|
+
private extractProps;
|
|
22
|
+
private parseObjectProps;
|
|
23
|
+
private extractDependencies;
|
|
24
|
+
private hasDeprecatedComment;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=vue-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue-scanner.d.ts","sourceRoot":"","sources":["../../src/git/vue-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAA6B,MAAM,mBAAmB,CAAC;AAM9E,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,mBAAoB,SAAQ,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IA6B5C,aAAa,IAAI,MAAM;YAIT,kBAAkB;YAyBlB,SAAS;IA0CvB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA0DtB,OAAO,CAAC,YAAY;IAwEpB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,oBAAoB;CAG7B"}
|