@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
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.
@@ -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":"AAAA,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;CACnC;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,8BAAsB,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,aAAa,GAAG,aAAa;IACtE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;gBAER,MAAM,EAAE,CAAC;IAIrB,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,QAAQ,CAAC,aAAa,IAAI,MAAM;CACjC"}
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/base/scanner.ts"],"names":[],"mappings":"AAyBA,MAAM,OAAgB,OAAO;IACjB,MAAM,CAAI;IAEpB,YAAY,MAAS;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAIF"}
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/base/scanner.ts"],"names":[],"mappings":"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"}
@@ -58,7 +58,7 @@ export interface FigmaVariableCollection {
58
58
  defaultModeId: string;
59
59
  }
60
60
  export type FigmaVariableValue = {
61
- type: 'COLOR';
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: 'FLOAT';
69
+ type: "FLOAT";
70
70
  value: number;
71
71
  } | {
72
- type: 'STRING';
72
+ type: "STRING";
73
73
  value: string;
74
74
  } | {
75
- type: 'BOOLEAN';
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
- constructor(accessToken: string);
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":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/figma/client.ts"],"names":[],"mappings":"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"}
@@ -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 = 'https://api.figma.com/v1';
4
- timeoutMs = 30000; // 30 seconds
5
- constructor(accessToken) {
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
- 'X-Figma-Token': this.accessToken,
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
- throw new Error(`Figma API error: ${response.status} ${response.statusText} - ${text}`);
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 === 'AbortError') {
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
  }
@@ -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,GAAG,KAAK,CAAC,CAAC,aAAa;IAExC,YAAY,WAAmB;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,KAAK,CAAI,QAAgB;QACrC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEvE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,QAAQ,EAAE,EAAE;gBACzD,OAAO,EAAE;oBACP,eAAe,EAAE,IAAI,CAAC,WAAW;iBAClC;gBACD,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,IAAI,EAAE,CAAC,CAAC;YAC1F,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAY,UAAU,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,OAAO,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,OAAO,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,OAAO,kBAAkB,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,MAAe;QAC1C,MAAM,IAAI,GAAG,8BAA8B,OAAO,EAAE,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,GAAG,IAAI,YAAY,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/figma/client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export { FigmaClient, type FigmaFile, type FigmaNode, type FigmaVariable } from './client.js';
2
- export { FigmaComponentScanner, type FigmaScannerConfig } from './component-scanner.js';
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,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
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"}
@@ -1,3 +1,3 @@
1
- export { FigmaClient } from './client.js';
2
- export { FigmaComponentScanner } from './component-scanner.js';
1
+ export { FigmaClient, FigmaAPIError, } from "./client.js";
2
+ export { FigmaComponentScanner, } from "./component-scanner.js";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/figma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAsD,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAA2B,MAAM,wBAAwB,CAAC"}
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 '../base/scanner.js';
2
- import type { Component } from '@buoy-design/core';
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,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAC9F,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,CAAC,SAAS,EAAE,oBAAoB,CAAC;IAC7E,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IA6B5C,aAAa,IAAI,MAAM;YAIT,kBAAkB;YAwBlB,SAAS;IA8BvB,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,aAAa;IAwDrB,OAAO,CAAC,cAAc;IAsDtB,OAAO,CAAC,sBAAsB;CAI/B"}
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"}