@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.
Files changed (81) hide show
  1. package/dist/__tests__/fixtures/react-components.d.ts +5 -0
  2. package/dist/__tests__/fixtures/react-components.d.ts.map +1 -0
  3. package/dist/__tests__/fixtures/react-components.js +36 -0
  4. package/dist/__tests__/fixtures/react-components.js.map +1 -0
  5. package/dist/__tests__/setup.d.ts +2 -0
  6. package/dist/__tests__/setup.d.ts.map +1 -0
  7. package/dist/__tests__/setup.js +78 -0
  8. package/dist/__tests__/setup.js.map +1 -0
  9. package/dist/base/index.d.ts +2 -0
  10. package/dist/base/index.d.ts.map +1 -0
  11. package/dist/base/index.js +2 -0
  12. package/dist/base/index.js.map +1 -0
  13. package/dist/base/scanner.d.ts +28 -0
  14. package/dist/base/scanner.d.ts.map +1 -0
  15. package/dist/base/scanner.js +7 -0
  16. package/dist/base/scanner.js.map +1 -0
  17. package/dist/figma/client.d.ts +98 -0
  18. package/dist/figma/client.d.ts.map +1 -0
  19. package/dist/figma/client.js +54 -0
  20. package/dist/figma/client.js.map +1 -0
  21. package/dist/figma/component-scanner.d.ts +22 -0
  22. package/dist/figma/component-scanner.d.ts.map +1 -0
  23. package/dist/figma/component-scanner.js +174 -0
  24. package/dist/figma/component-scanner.js.map +1 -0
  25. package/dist/figma/index.d.ts +3 -0
  26. package/dist/figma/index.d.ts.map +1 -0
  27. package/dist/figma/index.js +3 -0
  28. package/dist/figma/index.js.map +1 -0
  29. package/dist/git/angular-scanner.d.ts +18 -0
  30. package/dist/git/angular-scanner.d.ts.map +1 -0
  31. package/dist/git/angular-scanner.js +244 -0
  32. package/dist/git/angular-scanner.js.map +1 -0
  33. package/dist/git/index.d.ts +8 -0
  34. package/dist/git/index.d.ts.map +1 -0
  35. package/dist/git/index.js +8 -0
  36. package/dist/git/index.js.map +1 -0
  37. package/dist/git/react-scanner.d.ts +29 -0
  38. package/dist/git/react-scanner.d.ts.map +1 -0
  39. package/dist/git/react-scanner.js +469 -0
  40. package/dist/git/react-scanner.js.map +1 -0
  41. package/dist/git/react-scanner.test.d.ts +2 -0
  42. package/dist/git/react-scanner.test.d.ts.map +1 -0
  43. package/dist/git/react-scanner.test.js +107 -0
  44. package/dist/git/react-scanner.test.js.map +1 -0
  45. package/dist/git/svelte-scanner.d.ts +30 -0
  46. package/dist/git/svelte-scanner.d.ts.map +1 -0
  47. package/dist/git/svelte-scanner.js +344 -0
  48. package/dist/git/svelte-scanner.js.map +1 -0
  49. package/dist/git/template-scanner.d.ts +16 -0
  50. package/dist/git/template-scanner.d.ts.map +1 -0
  51. package/dist/git/template-scanner.js +227 -0
  52. package/dist/git/template-scanner.js.map +1 -0
  53. package/dist/git/token-scanner.d.ts +43 -0
  54. package/dist/git/token-scanner.d.ts.map +1 -0
  55. package/dist/git/token-scanner.js +444 -0
  56. package/dist/git/token-scanner.js.map +1 -0
  57. package/dist/git/vue-scanner.d.ts +26 -0
  58. package/dist/git/vue-scanner.d.ts.map +1 -0
  59. package/dist/git/vue-scanner.js +296 -0
  60. package/dist/git/vue-scanner.js.map +1 -0
  61. package/dist/git/webcomponent-scanner.d.ts +22 -0
  62. package/dist/git/webcomponent-scanner.d.ts.map +1 -0
  63. package/dist/git/webcomponent-scanner.js +312 -0
  64. package/dist/git/webcomponent-scanner.js.map +1 -0
  65. package/dist/index.d.ts +7 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +12 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/plugin-adapter.d.ts +11 -0
  70. package/dist/plugin-adapter.d.ts.map +1 -0
  71. package/dist/plugin-adapter.js +21 -0
  72. package/dist/plugin-adapter.js.map +1 -0
  73. package/dist/storybook/extractor.d.ts +20 -0
  74. package/dist/storybook/extractor.d.ts.map +1 -0
  75. package/dist/storybook/extractor.js +146 -0
  76. package/dist/storybook/extractor.js.map +1 -0
  77. package/dist/storybook/index.d.ts +2 -0
  78. package/dist/storybook/index.d.ts.map +1 -0
  79. package/dist/storybook/index.js +2 -0
  80. package/dist/storybook/index.js.map +1 -0
  81. package/package.json +56 -0
@@ -0,0 +1,7 @@
1
+ export { Scanner, type ScannerConfig, type ScanResult, type ScanError, type ScanStats } from './base/index.js';
2
+ export { ReactComponentScanner, type ReactScannerConfig } from './git/index.js';
3
+ export { TokenScanner, type TokenScannerConfig } from './git/index.js';
4
+ export { FigmaClient, FigmaComponentScanner, type FigmaScannerConfig } from './figma/index.js';
5
+ export { StorybookScanner, type StorybookScannerConfig } from './storybook/index.js';
6
+ export { createPluginFromScanner } from './plugin-adapter.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ // Base
2
+ export { Scanner } from './base/index.js';
3
+ // Git/local scanners
4
+ export { ReactComponentScanner } from './git/index.js';
5
+ export { TokenScanner } from './git/index.js';
6
+ // Figma scanner
7
+ export { FigmaClient, FigmaComponentScanner } from './figma/index.js';
8
+ // Storybook scanner
9
+ export { StorybookScanner } from './storybook/index.js';
10
+ // Plugin adapter
11
+ export { createPluginFromScanner } from './plugin-adapter.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ import type { BuoyPlugin, Component } from '@buoy-design/core';
2
+ import type { Scanner, ScannerConfig } from './base/scanner.js';
3
+ type ScannerClass<T extends Scanner<Component>> = new (config: ScannerConfig) => T;
4
+ export declare function createPluginFromScanner<T extends Scanner<Component>>(metadata: {
5
+ name: string;
6
+ version: string;
7
+ description?: string;
8
+ detects?: string[];
9
+ }, ScannerClass: ScannerClass<T>): () => BuoyPlugin;
10
+ export {};
11
+ //# sourceMappingURL=plugin-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-adapter.d.ts","sourceRoot":"","sources":["../src/plugin-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA2B,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhE,KAAK,YAAY,CAAC,CAAC,SAAS,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,aAAa,KAAK,CAAC,CAAC;AAEnF,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,OAAO,CAAC,SAAS,CAAC,EAClE,QAAQ,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,EACD,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAC5B,MAAM,UAAU,CAqBlB"}
@@ -0,0 +1,21 @@
1
+ export function createPluginFromScanner(metadata, ScannerClass) {
2
+ return () => ({
3
+ metadata,
4
+ async scan(context) {
5
+ const scanner = new ScannerClass({
6
+ projectRoot: context.projectRoot,
7
+ include: context.include || ['**/*'],
8
+ exclude: context.exclude || ['**/node_modules/**'],
9
+ options: context.config,
10
+ });
11
+ const result = await scanner.scan();
12
+ return {
13
+ components: result.items,
14
+ tokens: [],
15
+ errors: result.errors,
16
+ stats: result.stats,
17
+ };
18
+ },
19
+ });
20
+ }
21
+ //# sourceMappingURL=plugin-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-adapter.js","sourceRoot":"","sources":["../src/plugin-adapter.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,uBAAuB,CACrC,QAKC,EACD,YAA6B;IAE7B,OAAO,GAAG,EAAE,CAAC,CAAC;QACZ,QAAQ;QACR,KAAK,CAAC,IAAI,CAAC,OAAoB;YAC7B,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;gBAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC;gBACpC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,oBAAoB,CAAC;gBAClD,OAAO,EAAE,OAAO,CAAC,MAAM;aACxB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YAEpC,OAAO;gBACL,UAAU,EAAE,MAAM,CAAC,KAAK;gBACxB,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Scanner, ScanResult, ScannerConfig } from '../base/scanner.js';
2
+ import type { Component } from '@buoy-design/core';
3
+ export interface StorybookScannerConfig extends ScannerConfig {
4
+ url?: string;
5
+ staticDir?: string;
6
+ /** Bearer token for authentication */
7
+ authToken?: string;
8
+ /** Custom header name for auth (defaults to 'Authorization') */
9
+ authHeader?: string;
10
+ }
11
+ export declare class StorybookScanner extends Scanner<Component, StorybookScannerConfig> {
12
+ scan(): Promise<ScanResult<Component>>;
13
+ getSourceType(): string;
14
+ private getFetchOptions;
15
+ private fetchStoriesIndex;
16
+ private convertLegacyFormat;
17
+ private extractComponents;
18
+ private getStorybookUrl;
19
+ }
20
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/storybook/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAMpE,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD,qBAAa,gBAAiB,SAAQ,OAAO,CAAC,SAAS,EAAE,sBAAsB,CAAC;IACxE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IA0B5C,aAAa,IAAI,MAAM;IAIvB,OAAO,CAAC,eAAe;YAiBT,iBAAiB;IA8C/B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,eAAe;CAIxB"}
@@ -0,0 +1,146 @@
1
+ import { Scanner } from '../base/scanner.js';
2
+ import { createComponentId } from '@buoy-design/core';
3
+ import { readFile } from 'fs/promises';
4
+ import { existsSync } from 'fs';
5
+ import { resolve } from 'path';
6
+ export class StorybookScanner extends Scanner {
7
+ async scan() {
8
+ const startTime = Date.now();
9
+ const components = [];
10
+ const errors = [];
11
+ try {
12
+ const index = await this.fetchStoriesIndex();
13
+ const extractedComponents = this.extractComponents(index);
14
+ components.push(...extractedComponents);
15
+ }
16
+ catch (err) {
17
+ const message = err instanceof Error ? err.message : String(err);
18
+ errors.push({
19
+ message,
20
+ code: 'STORYBOOK_INDEX_ERROR',
21
+ });
22
+ }
23
+ const stats = {
24
+ filesScanned: 1,
25
+ itemsFound: components.length,
26
+ duration: Date.now() - startTime,
27
+ };
28
+ return { items: components, errors, stats };
29
+ }
30
+ getSourceType() {
31
+ return 'storybook';
32
+ }
33
+ getFetchOptions() {
34
+ if (!this.config.authToken) {
35
+ return {};
36
+ }
37
+ const headerName = this.config.authHeader || 'Authorization';
38
+ const headerValue = headerName === 'Authorization'
39
+ ? `Bearer ${this.config.authToken}`
40
+ : this.config.authToken;
41
+ return {
42
+ headers: {
43
+ [headerName]: headerValue,
44
+ },
45
+ };
46
+ }
47
+ async fetchStoriesIndex() {
48
+ // Try to read from static directory first
49
+ if (this.config.staticDir) {
50
+ const indexPath = resolve(this.config.staticDir, 'index.json');
51
+ if (existsSync(indexPath)) {
52
+ const content = await readFile(indexPath, 'utf-8');
53
+ return JSON.parse(content);
54
+ }
55
+ // Try stories.json for older Storybook versions
56
+ const storiesPath = resolve(this.config.staticDir, 'stories.json');
57
+ if (existsSync(storiesPath)) {
58
+ const content = await readFile(storiesPath, 'utf-8');
59
+ return this.convertLegacyFormat(JSON.parse(content));
60
+ }
61
+ throw new Error(`No index.json or stories.json found in ${this.config.staticDir}`);
62
+ }
63
+ // Fetch from running Storybook server
64
+ if (this.config.url) {
65
+ const fetchOptions = this.getFetchOptions();
66
+ // Try index.json (Storybook 7+)
67
+ try {
68
+ const response = await fetch(`${this.config.url}/index.json`, fetchOptions);
69
+ if (response.ok) {
70
+ return response.json();
71
+ }
72
+ }
73
+ catch {
74
+ // Try stories.json fallback
75
+ }
76
+ // Try stories.json (older versions)
77
+ const response = await fetch(`${this.config.url}/stories.json`, fetchOptions);
78
+ if (!response.ok) {
79
+ throw new Error(`Failed to fetch Storybook index: ${response.status}`);
80
+ }
81
+ const data = (await response.json());
82
+ return this.convertLegacyFormat(data);
83
+ }
84
+ throw new Error('Either url or staticDir must be configured for Storybook scanner');
85
+ }
86
+ convertLegacyFormat(data) {
87
+ const entries = {};
88
+ for (const [id, story] of Object.entries(data.stories)) {
89
+ const storyData = story;
90
+ entries[id] = {
91
+ id,
92
+ title: storyData.title || storyData.kind || 'Unknown',
93
+ name: storyData.name || storyData.story || 'Default',
94
+ importPath: storyData.importPath || '',
95
+ type: 'story',
96
+ };
97
+ }
98
+ return { v: 3, entries };
99
+ }
100
+ extractComponents(index) {
101
+ const componentMap = new Map();
102
+ for (const [, entry] of Object.entries(index.entries)) {
103
+ // Skip docs entries
104
+ if (entry.type === 'docs')
105
+ continue;
106
+ // Extract component ID from title (e.g., "Components/Button" -> "components-button")
107
+ const componentId = entry.title.replace(/\//g, '-').toLowerCase();
108
+ if (!componentMap.has(componentId)) {
109
+ const source = {
110
+ type: 'storybook',
111
+ storyId: entry.id,
112
+ kind: entry.title,
113
+ url: this.getStorybookUrl(entry.id),
114
+ };
115
+ // Extract component name from title
116
+ const titleParts = entry.title.split('/');
117
+ const name = titleParts[titleParts.length - 1] ?? entry.title;
118
+ componentMap.set(componentId, {
119
+ id: createComponentId(source, name),
120
+ name: name,
121
+ source,
122
+ props: [],
123
+ variants: [],
124
+ tokens: [],
125
+ dependencies: [],
126
+ metadata: {
127
+ tags: entry.tags || [],
128
+ },
129
+ scannedAt: new Date(),
130
+ });
131
+ }
132
+ // Add story as a variant
133
+ const component = componentMap.get(componentId);
134
+ component.variants.push({
135
+ name: entry.name,
136
+ props: {},
137
+ });
138
+ }
139
+ return Array.from(componentMap.values());
140
+ }
141
+ getStorybookUrl(storyId) {
142
+ const baseUrl = this.config.url || '';
143
+ return `${baseUrl}/?path=/story/${storyId}`;
144
+ }
145
+ }
146
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/storybook/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { StorybookScanner, type StorybookScannerConfig } from './extractor.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storybook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { StorybookScanner } from './extractor.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storybook/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA+B,MAAM,gBAAgB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@buoy-design/scanners",
3
+ "version": "0.1.0",
4
+ "description": "Source scanners for Buoy (React, Vue, Svelte, Angular, Figma, Storybook)",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Buoy <hello@buoy.design>",
8
+ "homepage": "https://buoy.design",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/dylantarre/buoy-design.git",
12
+ "directory": "packages/scanners"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/dylantarre/buoy-design/issues"
16
+ },
17
+ "keywords": ["buoy", "design-system", "scanner", "react", "vue", "figma"],
18
+ "files": ["dist", "README.md"],
19
+ "main": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ },
26
+ "./git": {
27
+ "types": "./dist/git/index.d.ts",
28
+ "import": "./dist/git/index.js"
29
+ },
30
+ "./figma": {
31
+ "types": "./dist/figma/index.d.ts",
32
+ "import": "./dist/figma/index.js"
33
+ },
34
+ "./storybook": {
35
+ "types": "./dist/storybook/index.d.ts",
36
+ "import": "./dist/storybook/index.js"
37
+ }
38
+ },
39
+ "scripts": {
40
+ "build": "tsc",
41
+ "dev": "tsc --watch",
42
+ "typecheck": "tsc --noEmit",
43
+ "clean": "rm -rf dist",
44
+ "test": "vitest run",
45
+ "test:watch": "vitest"
46
+ },
47
+ "dependencies": {
48
+ "@buoy-design/core": "workspace:*",
49
+ "glob": "^11.0.0",
50
+ "typescript": "^5.7.2"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^22.10.2",
54
+ "memfs": "^4.51.1"
55
+ }
56
+ }