@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.
- package/LICENSE +21 -0
- package/dist/base/scanner.d.ts +36 -0
- package/dist/base/scanner.d.ts.map +1 -1
- package/dist/base/scanner.js +112 -0
- package/dist/base/scanner.js.map +1 -1
- package/dist/figma/client.d.ts +46 -5
- package/dist/figma/client.d.ts.map +1 -1
- package/dist/figma/client.js +109 -6
- package/dist/figma/client.js.map +1 -1
- package/dist/figma/index.d.ts +2 -2
- package/dist/figma/index.d.ts.map +1 -1
- package/dist/figma/index.js +2 -2
- package/dist/figma/index.js.map +1 -1
- package/dist/git/angular-scanner.d.ts +2 -2
- package/dist/git/angular-scanner.d.ts.map +1 -1
- package/dist/git/angular-scanner.js +53 -43
- package/dist/git/angular-scanner.js.map +1 -1
- package/dist/git/react-scanner.d.ts +4 -3
- package/dist/git/react-scanner.d.ts.map +1 -1
- package/dist/git/react-scanner.js +89 -120
- package/dist/git/react-scanner.js.map +1 -1
- package/dist/git/svelte-scanner.d.ts +2 -2
- package/dist/git/svelte-scanner.d.ts.map +1 -1
- package/dist/git/svelte-scanner.js +90 -59
- package/dist/git/svelte-scanner.js.map +1 -1
- package/dist/git/token-scanner.d.ts +2 -2
- package/dist/git/token-scanner.d.ts.map +1 -1
- package/dist/git/token-scanner.js +135 -116
- package/dist/git/token-scanner.js.map +1 -1
- package/dist/git/vue-scanner.d.ts +2 -2
- package/dist/git/vue-scanner.d.ts.map +1 -1
- package/dist/git/vue-scanner.js +64 -46
- package/dist/git/vue-scanner.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/tailwind/arbitrary-detector.d.ts +26 -0
- package/dist/tailwind/arbitrary-detector.d.ts.map +1 -0
- package/dist/tailwind/arbitrary-detector.js +190 -0
- package/dist/tailwind/arbitrary-detector.js.map +1 -0
- package/dist/tailwind/config-parser.d.ts +29 -0
- package/dist/tailwind/config-parser.d.ts.map +1 -0
- package/dist/tailwind/config-parser.js +221 -0
- package/dist/tailwind/config-parser.js.map +1 -0
- package/dist/tailwind/index.d.ts +4 -0
- package/dist/tailwind/index.d.ts.map +1 -0
- package/dist/tailwind/index.js +4 -0
- package/dist/tailwind/index.js.map +1 -0
- package/dist/tailwind/scanner.d.ts +26 -0
- package/dist/tailwind/scanner.d.ts.map +1 -0
- package/dist/tailwind/scanner.js +49 -0
- package/dist/tailwind/scanner.js.map +1 -0
- package/package.json +23 -13
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Buoy
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/base/scanner.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export interface ScannerConfig {
|
|
|
3
3
|
include?: string[];
|
|
4
4
|
exclude?: string[];
|
|
5
5
|
options?: Record<string, unknown>;
|
|
6
|
+
/** Maximum number of files to process in parallel (default: 10) */
|
|
7
|
+
concurrency?: number;
|
|
6
8
|
}
|
|
7
9
|
export interface ScanError {
|
|
8
10
|
file?: string;
|
|
@@ -19,9 +21,43 @@ export interface ScanResult<T> {
|
|
|
19
21
|
errors: ScanError[];
|
|
20
22
|
stats: ScanStats;
|
|
21
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Default exclusion patterns for file discovery
|
|
26
|
+
*/
|
|
27
|
+
export declare const DEFAULT_EXCLUDES: string[];
|
|
28
|
+
/**
|
|
29
|
+
* Process items in parallel with limited concurrency
|
|
30
|
+
* @param items Items to process
|
|
31
|
+
* @param processor Function to process each item
|
|
32
|
+
* @param concurrency Maximum number of concurrent operations (default: 10)
|
|
33
|
+
*/
|
|
34
|
+
export declare function parallelProcess<T, R>(items: T[], processor: (item: T) => Promise<R>, concurrency?: number): Promise<PromiseSettledResult<R>[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Helper to extract successful results from parallel processing
|
|
37
|
+
*/
|
|
38
|
+
export declare function extractResults<T>(settled: PromiseSettledResult<T>[]): {
|
|
39
|
+
successes: T[];
|
|
40
|
+
failures: {
|
|
41
|
+
reason: unknown;
|
|
42
|
+
}[];
|
|
43
|
+
};
|
|
22
44
|
export declare abstract class Scanner<T, C extends ScannerConfig = ScannerConfig> {
|
|
23
45
|
protected config: C;
|
|
24
46
|
constructor(config: C);
|
|
47
|
+
/** Get the configured concurrency limit */
|
|
48
|
+
protected get concurrency(): number;
|
|
49
|
+
/**
|
|
50
|
+
* Find files matching the configured patterns.
|
|
51
|
+
* @param defaultPatterns Default include patterns if none configured
|
|
52
|
+
* @returns Array of absolute file paths
|
|
53
|
+
*/
|
|
54
|
+
protected findFiles(defaultPatterns: string[]): Promise<string[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Helper to run the scan with timing and error handling boilerplate.
|
|
57
|
+
* @param processor Function that processes files and returns items
|
|
58
|
+
* @param defaultPatterns Default glob patterns for file discovery
|
|
59
|
+
*/
|
|
60
|
+
protected runScan(processor: (file: string) => Promise<T[]>, defaultPatterns: string[]): Promise<ScanResult<T>>;
|
|
25
61
|
abstract scan(): Promise<ScanResult<T>>;
|
|
26
62
|
abstract getSourceType(): string;
|
|
27
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/base/scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/base/scanner.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,UAS5B,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,CAAC,EACxC,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAClC,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAWpC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,GAAG;IACrE,SAAS,EAAE,CAAC,EAAE,CAAC;IACf,QAAQ,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CACjC,CAaA;AAED,8BAAsB,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,aAAa,GAAG,aAAa;IACtE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBAER,MAAM,EAAE,CAAC;IAIrB,2CAA2C;IAC3C,SAAS,KAAK,WAAW,IAAI,MAAM,CAElC;IAED;;;;OAIG;cACa,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAuBvE;;;;OAIG;cACa,OAAO,CACrB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,EACzC,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IA6CzB,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,QAAQ,CAAC,aAAa,IAAI,MAAM;CACjC"}
|
package/dist/base/scanner.js
CHANGED
|
@@ -1,7 +1,119 @@
|
|
|
1
|
+
import { glob } from "glob";
|
|
2
|
+
/**
|
|
3
|
+
* Default exclusion patterns for file discovery
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_EXCLUDES = [
|
|
6
|
+
"**/node_modules/**",
|
|
7
|
+
"**/*.test.*",
|
|
8
|
+
"**/*.spec.*",
|
|
9
|
+
"**/*.stories.*",
|
|
10
|
+
"**/dist/**",
|
|
11
|
+
"**/build/**",
|
|
12
|
+
"**/.next/**",
|
|
13
|
+
"**/coverage/**",
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Process items in parallel with limited concurrency
|
|
17
|
+
* @param items Items to process
|
|
18
|
+
* @param processor Function to process each item
|
|
19
|
+
* @param concurrency Maximum number of concurrent operations (default: 10)
|
|
20
|
+
*/
|
|
21
|
+
export async function parallelProcess(items, processor, concurrency = 10) {
|
|
22
|
+
const results = [];
|
|
23
|
+
// Process items in batches
|
|
24
|
+
for (let i = 0; i < items.length; i += concurrency) {
|
|
25
|
+
const batch = items.slice(i, i + concurrency);
|
|
26
|
+
const batchResults = await Promise.allSettled(batch.map(processor));
|
|
27
|
+
results.push(...batchResults);
|
|
28
|
+
}
|
|
29
|
+
return results;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Helper to extract successful results from parallel processing
|
|
33
|
+
*/
|
|
34
|
+
export function extractResults(settled) {
|
|
35
|
+
const successes = [];
|
|
36
|
+
const failures = [];
|
|
37
|
+
for (const result of settled) {
|
|
38
|
+
if (result.status === "fulfilled") {
|
|
39
|
+
successes.push(result.value);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
failures.push({ reason: result.reason });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return { successes, failures };
|
|
46
|
+
}
|
|
1
47
|
export class Scanner {
|
|
2
48
|
config;
|
|
3
49
|
constructor(config) {
|
|
4
50
|
this.config = config;
|
|
5
51
|
}
|
|
52
|
+
/** Get the configured concurrency limit */
|
|
53
|
+
get concurrency() {
|
|
54
|
+
return this.config.concurrency ?? 10;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Find files matching the configured patterns.
|
|
58
|
+
* @param defaultPatterns Default include patterns if none configured
|
|
59
|
+
* @returns Array of absolute file paths
|
|
60
|
+
*/
|
|
61
|
+
async findFiles(defaultPatterns) {
|
|
62
|
+
const patterns = this.config.include?.length
|
|
63
|
+
? this.config.include
|
|
64
|
+
: defaultPatterns;
|
|
65
|
+
const ignore = this.config.exclude?.length
|
|
66
|
+
? this.config.exclude
|
|
67
|
+
: DEFAULT_EXCLUDES;
|
|
68
|
+
const allFiles = [];
|
|
69
|
+
for (const pattern of patterns) {
|
|
70
|
+
const matches = await glob(pattern, {
|
|
71
|
+
cwd: this.config.projectRoot,
|
|
72
|
+
ignore,
|
|
73
|
+
absolute: true,
|
|
74
|
+
});
|
|
75
|
+
allFiles.push(...matches);
|
|
76
|
+
}
|
|
77
|
+
// Deduplicate
|
|
78
|
+
return [...new Set(allFiles)];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Helper to run the scan with timing and error handling boilerplate.
|
|
82
|
+
* @param processor Function that processes files and returns items
|
|
83
|
+
* @param defaultPatterns Default glob patterns for file discovery
|
|
84
|
+
*/
|
|
85
|
+
async runScan(processor, defaultPatterns) {
|
|
86
|
+
const startTime = Date.now();
|
|
87
|
+
const files = await this.findFiles(defaultPatterns);
|
|
88
|
+
const items = [];
|
|
89
|
+
const errors = [];
|
|
90
|
+
// Process files in parallel with configurable concurrency
|
|
91
|
+
const results = await parallelProcess(files, async (file) => ({ file, items: await processor(file) }), this.concurrency);
|
|
92
|
+
// Extract results and errors
|
|
93
|
+
const { successes } = extractResults(results);
|
|
94
|
+
for (const success of successes) {
|
|
95
|
+
items.push(...success.items);
|
|
96
|
+
}
|
|
97
|
+
// Map failures to errors with file context
|
|
98
|
+
for (let i = 0; i < results.length; i++) {
|
|
99
|
+
const result = results[i];
|
|
100
|
+
if (result.status === "rejected") {
|
|
101
|
+
const message = result.reason instanceof Error
|
|
102
|
+
? result.reason.message
|
|
103
|
+
: String(result.reason);
|
|
104
|
+
errors.push({
|
|
105
|
+
file: files[i],
|
|
106
|
+
message,
|
|
107
|
+
code: "PARSE_ERROR",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const stats = {
|
|
112
|
+
filesScanned: files.length,
|
|
113
|
+
itemsFound: items.length,
|
|
114
|
+
duration: Date.now() - startTime,
|
|
115
|
+
};
|
|
116
|
+
return { items, errors, stats };
|
|
117
|
+
}
|
|
6
118
|
}
|
|
7
119
|
//# sourceMappingURL=scanner.js.map
|
package/dist/base/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/base/scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/base/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/figma/client.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export interface FigmaVariableCollection {
|
|
|
58
58
|
defaultModeId: string;
|
|
59
59
|
}
|
|
60
60
|
export type FigmaVariableValue = {
|
|
61
|
-
type:
|
|
61
|
+
type: "COLOR";
|
|
62
62
|
value: {
|
|
63
63
|
r: number;
|
|
64
64
|
g: number;
|
|
@@ -66,21 +66,62 @@ export type FigmaVariableValue = {
|
|
|
66
66
|
a: number;
|
|
67
67
|
};
|
|
68
68
|
} | {
|
|
69
|
-
type:
|
|
69
|
+
type: "FLOAT";
|
|
70
70
|
value: number;
|
|
71
71
|
} | {
|
|
72
|
-
type:
|
|
72
|
+
type: "STRING";
|
|
73
73
|
value: string;
|
|
74
74
|
} | {
|
|
75
|
-
type:
|
|
75
|
+
type: "BOOLEAN";
|
|
76
76
|
value: boolean;
|
|
77
77
|
};
|
|
78
|
+
/**
|
|
79
|
+
* Custom error class for Figma API errors with status code information
|
|
80
|
+
*/
|
|
81
|
+
export declare class FigmaAPIError extends Error {
|
|
82
|
+
readonly statusCode: number;
|
|
83
|
+
readonly responseBody: string;
|
|
84
|
+
constructor(message: string, statusCode: number, responseBody: string);
|
|
85
|
+
}
|
|
86
|
+
export interface FigmaClientOptions {
|
|
87
|
+
/**
|
|
88
|
+
* Maximum number of retry attempts for failed requests
|
|
89
|
+
* @default 3
|
|
90
|
+
*/
|
|
91
|
+
maxRetries?: number;
|
|
92
|
+
/**
|
|
93
|
+
* Initial delay in milliseconds before first retry (exponential backoff)
|
|
94
|
+
* @default 1000
|
|
95
|
+
*/
|
|
96
|
+
initialRetryDelayMs?: number;
|
|
97
|
+
/**
|
|
98
|
+
* Request timeout in milliseconds
|
|
99
|
+
* @default 30000
|
|
100
|
+
*/
|
|
101
|
+
timeoutMs?: number;
|
|
102
|
+
}
|
|
78
103
|
export declare class FigmaClient {
|
|
79
104
|
private accessToken;
|
|
80
105
|
private baseUrl;
|
|
81
106
|
private timeoutMs;
|
|
82
|
-
|
|
107
|
+
private maxRetries;
|
|
108
|
+
private initialRetryDelayMs;
|
|
109
|
+
constructor(accessToken: string, options?: FigmaClientOptions);
|
|
83
110
|
private fetch;
|
|
111
|
+
private fetchOnce;
|
|
112
|
+
/**
|
|
113
|
+
* Determine if an error should trigger a retry
|
|
114
|
+
*/
|
|
115
|
+
private shouldRetry;
|
|
116
|
+
/**
|
|
117
|
+
* Calculate retry delay with exponential backoff and jitter
|
|
118
|
+
*/
|
|
119
|
+
private calculateRetryDelay;
|
|
120
|
+
/**
|
|
121
|
+
* Add random jitter (0-500ms) to prevent thundering herd
|
|
122
|
+
*/
|
|
123
|
+
private jitter;
|
|
124
|
+
private sleep;
|
|
84
125
|
getFile(fileKey: string): Promise<FigmaFile>;
|
|
85
126
|
getFileComponents(fileKey: string): Promise<{
|
|
86
127
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/figma/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACzC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;KAC9D,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAExC,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,SAAS,CAAS;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/figma/client.ts"],"names":[],"mappings":"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"}
|
package/dist/figma/client.js
CHANGED
|
@@ -1,28 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error class for Figma API errors with status code information
|
|
3
|
+
*/
|
|
4
|
+
export class FigmaAPIError extends Error {
|
|
5
|
+
statusCode;
|
|
6
|
+
responseBody;
|
|
7
|
+
constructor(message, statusCode, responseBody) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.responseBody = responseBody;
|
|
11
|
+
this.name = "FigmaAPIError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* HTTP status codes that should trigger a retry
|
|
16
|
+
*/
|
|
17
|
+
const RETRYABLE_STATUS_CODES = [
|
|
18
|
+
429, // Too Many Requests (rate limit)
|
|
19
|
+
500, // Internal Server Error
|
|
20
|
+
502, // Bad Gateway
|
|
21
|
+
503, // Service Unavailable
|
|
22
|
+
504, // Gateway Timeout
|
|
23
|
+
];
|
|
1
24
|
export class FigmaClient {
|
|
2
25
|
accessToken;
|
|
3
|
-
baseUrl =
|
|
4
|
-
timeoutMs
|
|
5
|
-
|
|
26
|
+
baseUrl = "https://api.figma.com/v1";
|
|
27
|
+
timeoutMs;
|
|
28
|
+
maxRetries;
|
|
29
|
+
initialRetryDelayMs;
|
|
30
|
+
constructor(accessToken, options = {}) {
|
|
6
31
|
this.accessToken = accessToken;
|
|
32
|
+
this.timeoutMs = options.timeoutMs ?? 30000;
|
|
33
|
+
this.maxRetries = options.maxRetries ?? 3;
|
|
34
|
+
this.initialRetryDelayMs = options.initialRetryDelayMs ?? 1000;
|
|
7
35
|
}
|
|
8
36
|
async fetch(endpoint) {
|
|
37
|
+
let lastError = null;
|
|
38
|
+
let attempt = 0;
|
|
39
|
+
while (attempt <= this.maxRetries) {
|
|
40
|
+
try {
|
|
41
|
+
const result = await this.fetchOnce(endpoint);
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
46
|
+
// Check if we should retry
|
|
47
|
+
const shouldRetry = this.shouldRetry(lastError, attempt);
|
|
48
|
+
if (!shouldRetry) {
|
|
49
|
+
throw lastError;
|
|
50
|
+
}
|
|
51
|
+
// Calculate delay with exponential backoff + jitter
|
|
52
|
+
const delay = this.calculateRetryDelay(attempt, lastError);
|
|
53
|
+
await this.sleep(delay);
|
|
54
|
+
attempt++;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// All retries exhausted
|
|
58
|
+
throw lastError ?? new Error("Unknown error during Figma API request");
|
|
59
|
+
}
|
|
60
|
+
async fetchOnce(endpoint) {
|
|
9
61
|
const controller = new AbortController();
|
|
10
62
|
const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
11
63
|
try {
|
|
12
64
|
const response = await fetch(`${this.baseUrl}${endpoint}`, {
|
|
13
65
|
headers: {
|
|
14
|
-
|
|
66
|
+
"X-Figma-Token": this.accessToken,
|
|
15
67
|
},
|
|
16
68
|
signal: controller.signal,
|
|
17
69
|
});
|
|
18
70
|
if (!response.ok) {
|
|
19
71
|
const text = await response.text();
|
|
20
|
-
|
|
72
|
+
const error = new FigmaAPIError(`Figma API error: ${response.status} ${response.statusText} - ${text}`, response.status, text);
|
|
73
|
+
throw error;
|
|
21
74
|
}
|
|
22
75
|
return response.json();
|
|
23
76
|
}
|
|
24
77
|
catch (error) {
|
|
25
|
-
if (error instanceof Error && error.name ===
|
|
78
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
26
79
|
throw new Error(`Figma API request timed out after ${this.timeoutMs / 1000}s`);
|
|
27
80
|
}
|
|
28
81
|
throw error;
|
|
@@ -31,6 +84,56 @@ export class FigmaClient {
|
|
|
31
84
|
clearTimeout(timeoutId);
|
|
32
85
|
}
|
|
33
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Determine if an error should trigger a retry
|
|
89
|
+
*/
|
|
90
|
+
shouldRetry(error, attempt) {
|
|
91
|
+
// Don't retry if we've exhausted attempts
|
|
92
|
+
if (attempt >= this.maxRetries) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
// Retry on timeout
|
|
96
|
+
if (error.message.includes("timed out")) {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
// Retry on specific status codes
|
|
100
|
+
if (error instanceof FigmaAPIError &&
|
|
101
|
+
RETRYABLE_STATUS_CODES.includes(error.statusCode)) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
// Retry on network errors
|
|
105
|
+
if (error.message.includes("fetch failed") ||
|
|
106
|
+
error.message.includes("network")) {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Calculate retry delay with exponential backoff and jitter
|
|
113
|
+
*/
|
|
114
|
+
calculateRetryDelay(attempt, error) {
|
|
115
|
+
// Check for Retry-After header hint from rate limiting
|
|
116
|
+
if (error instanceof FigmaAPIError && error.statusCode === 429) {
|
|
117
|
+
// Figma doesn't typically send Retry-After, but we respect it if present
|
|
118
|
+
// For rate limits, use a longer base delay
|
|
119
|
+
const baseDelay = this.initialRetryDelayMs * 2;
|
|
120
|
+
return baseDelay * Math.pow(2, attempt) + this.jitter();
|
|
121
|
+
}
|
|
122
|
+
// Exponential backoff: delay = initialDelay * 2^attempt + jitter
|
|
123
|
+
const exponentialDelay = this.initialRetryDelayMs * Math.pow(2, attempt);
|
|
124
|
+
// Cap at 30 seconds max delay
|
|
125
|
+
const cappedDelay = Math.min(exponentialDelay, 30000);
|
|
126
|
+
return cappedDelay + this.jitter();
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Add random jitter (0-500ms) to prevent thundering herd
|
|
130
|
+
*/
|
|
131
|
+
jitter() {
|
|
132
|
+
return Math.floor(Math.random() * 500);
|
|
133
|
+
}
|
|
134
|
+
sleep(ms) {
|
|
135
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
136
|
+
}
|
|
34
137
|
async getFile(fileKey) {
|
|
35
138
|
return this.fetch(`/files/${fileKey}`);
|
|
36
139
|
}
|
package/dist/figma/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/figma/client.ts"],"names":[],"mappings":"AAuEA,MAAM,OAAO,WAAW;IACd,WAAW,CAAS;IACpB,OAAO,GAAG,0BAA0B,CAAC;IACrC,SAAS,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/figma/client.ts"],"names":[],"mappings":"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"}
|
package/dist/figma/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { FigmaClient, type FigmaFile, type FigmaNode, type FigmaVariable } from
|
|
2
|
-
export { FigmaComponentScanner, type FigmaScannerConfig } from
|
|
1
|
+
export { FigmaClient, FigmaAPIError, type FigmaClientOptions, type FigmaFile, type FigmaNode, type FigmaVariable, } from "./client.js";
|
|
2
|
+
export { FigmaComponentScanner, type FigmaScannerConfig, } from "./component-scanner.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,GACxB,MAAM,wBAAwB,CAAC"}
|
package/dist/figma/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { FigmaClient } from
|
|
2
|
-
export { FigmaComponentScanner } from
|
|
1
|
+
export { FigmaClient, FigmaAPIError, } from "./client.js";
|
|
2
|
+
export { FigmaComponentScanner, } from "./component-scanner.js";
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/figma/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,GAKd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Scanner, ScanResult, ScannerConfig } from
|
|
2
|
-
import type { Component } from
|
|
1
|
+
import { Scanner, ScanResult, ScannerConfig } from "../base/scanner.js";
|
|
2
|
+
import type { Component } from "@buoy-design/core";
|
|
3
3
|
export interface AngularScannerConfig extends ScannerConfig {
|
|
4
4
|
designSystemPackage?: string;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"angular-scanner.d.ts","sourceRoot":"","sources":["../../src/git/angular-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"angular-scanner.d.ts","sourceRoot":"","sources":["../../src/git/angular-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,UAAU,EACV,aAAa,EAKd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,mBAAmB,CAAC;AAOnE,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAUD,qBAAa,uBAAwB,SAAQ,OAAO,CAClD,SAAS,EACT,oBAAoB,CACrB;IACO,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IA4C5C,aAAa,IAAI,MAAM;YAIT,kBAAkB;YAwBlB,SAAS;IAmCvB,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,gBAAgB;IAyCxB,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,aAAa;IA6DrB,OAAO,CAAC,cAAc;IAyDtB,OAAO,CAAC,sBAAsB;CAI/B"}
|