@buoy-design/cli 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/commands/baseline.d.ts +39 -0
- package/dist/commands/baseline.d.ts.map +1 -0
- package/dist/commands/baseline.js +298 -0
- package/dist/commands/baseline.js.map +1 -0
- package/dist/commands/bootstrap.js +1 -1
- package/dist/commands/bootstrap.js.map +1 -1
- package/dist/commands/ci.d.ts +2 -2
- package/dist/commands/ci.d.ts.map +1 -1
- package/dist/commands/ci.js +107 -129
- package/dist/commands/ci.js.map +1 -1
- package/dist/commands/drift.d.ts +1 -1
- package/dist/commands/drift.d.ts.map +1 -1
- package/dist/commands/drift.js +68 -95
- package/dist/commands/drift.js.map +1 -1
- package/dist/commands/index.d.ts +9 -8
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -8
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +61 -86
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +32 -41
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/scan.d.ts +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +59 -211
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +79 -116
- package/dist/commands/status.js.map +1 -1
- package/dist/detect/frameworks.d.ts +6 -1
- package/dist/detect/frameworks.d.ts.map +1 -1
- package/dist/detect/frameworks.js +43 -69
- package/dist/detect/frameworks.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/integrations/github-formatter.d.ts +3 -0
- package/dist/integrations/github-formatter.d.ts.map +1 -0
- package/dist/integrations/github-formatter.js +69 -0
- package/dist/integrations/github-formatter.js.map +1 -0
- package/dist/integrations/github.d.ts +20 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +69 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/index.d.ts +4 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +4 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/scan/orchestrator.d.ts +76 -0
- package/dist/scan/orchestrator.d.ts.map +1 -0
- package/dist/scan/orchestrator.js +247 -0
- package/dist/scan/orchestrator.js.map +1 -0
- package/package.json +26 -17
- package/dist/plugins/index.d.ts +0 -3
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -3
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/loader.d.ts +0 -11
- package/dist/plugins/loader.d.ts.map +0 -1
- package/dist/plugins/loader.js +0 -77
- package/dist/plugins/loader.js.map +0 -1
- package/dist/plugins/registry.d.ts +0 -15
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -32
- package/dist/plugins/registry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,OAAO,EACP,OAAO,EACP,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,WAAW,GAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,OAAO,EACP,OAAO,EACP,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,WAAW,GAEZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;SAC9B,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACzC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,sEAAsE;QACtE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,yBAAyB;YACzB,MAAM,YAAY,GAAG,aAAa,EAAE,KAAK,IAAI,CAAC;YAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAEtC,qCAAqC;YACrC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;YACrC,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;gBACvD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;oBAClB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;gBAClB,CAAC;aACF,CAAC,CAAC;YAEH,qCAAqC;YACrC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;YAE5C,qBAAqB;YACrB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;YACjC,MAAM,EAAE,kBAAkB,EAAE,GAC1B,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE;gBACtD,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAkB,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAErD,6BAA6B;YAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB,CAC9C,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC,CACJ,CAAC;YACF,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5B,CAAC;YAED,2BAA2B;YAC3B,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAClC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CACrC,CAAC;YAEF,MAAM,KAAK,GAAkB;gBAC3B,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;qBAC/D,MAAM;gBACT,QAAQ,EAAE,oBAAoB,CAAC,IAAI;gBACnC,SAAS,EAAE,CAAC,EAAE,0CAA0C;gBACxD,KAAK,EAAE,UAAU,CAAC,MAAM;aACzB,CAAC;YAEF,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,6BAA6B;YAC7B,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACvC,CAAC;YACF,MAAM,sBAAsB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/B,CAAC;YAEF,SAAS;YACT,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;oBACE,KAAK;oBACL,cAAc,EACZ,KAAK,CAAC,KAAK,GAAG,CAAC;wBACb,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;wBACjD,CAAC,CAAC,CAAC;oBACP,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAC7C,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;qBACnB,CAAC,CAAC;oBACH,eAAe,EAAE,YAAY,KAAK,IAAI;oBACtC,UAAU,EAAE;wBACV,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACrC,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;yBACrD,CAAC,CAAC;wBACH,QAAQ,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC3C,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,IAAI,EAAE,CAAC,CAAC,IAAI;4BACZ,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;yBACrD,CAAC,CAAC;qBACJ;iBACF,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjB,IAAI,CACF,UAAU;oBACR,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;oBAC5B,uCAAuC,CAC1C,CAAC;gBACF,IAAI,CACF,UAAU;oBACR,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;oBACxB,sCAAsC,CACzC,CAAC;gBACF,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,+CAA+C;YAC/C,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;gBAC5D,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACnC,MAAM,OAAO,GACX,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9D,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,4BAA4B;YAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;YAEpB,0BAA0B;YAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;gBACxC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,kBAAkB;YAClB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;YACnE,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,CAAC,uCAAuC,CAAC,CAAC;YACnD,CAAC;iBAAM,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;gBAC5B,OAAO,CAAC,wCAAwC,CAAC,CAAC;YACpD,CAAC;iBAAM,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;gBAC5B,IAAI,CAAC,6DAA6D,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;YAEzC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export interface DetectedFramework {
|
|
2
2
|
name: string;
|
|
3
|
-
|
|
3
|
+
scanner?: string;
|
|
4
|
+
plugin?: string;
|
|
4
5
|
confidence: 'high' | 'medium' | 'low';
|
|
5
6
|
evidence: string;
|
|
6
7
|
matchedFiles?: string[];
|
|
@@ -11,6 +12,10 @@ export interface PluginInfo {
|
|
|
11
12
|
detects: string;
|
|
12
13
|
examples?: string[];
|
|
13
14
|
}
|
|
15
|
+
export declare const BUILTIN_SCANNERS: Record<string, {
|
|
16
|
+
description: string;
|
|
17
|
+
detects: string;
|
|
18
|
+
}>;
|
|
14
19
|
export declare const PLUGIN_INFO: Record<string, PluginInfo>;
|
|
15
20
|
export declare function detectFrameworks(projectRoot: string): Promise<DetectedFramework[]>;
|
|
16
21
|
export declare function detectPackageManager(projectRoot?: string): 'pnpm' | 'yarn' | 'npm';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameworks.d.ts","sourceRoot":"","sources":["../../src/detect/frameworks.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"frameworks.d.ts","sourceRoot":"","sources":["../../src/detect/frameworks.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAGD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CASrF,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAalD,CAAC;AA6CF,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAmExF;AAMD,wBAAgB,oBAAoB,CAAC,WAAW,GAAE,MAAsB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAQjG;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,WAAW,GAAE,MAAsB,GAAG,MAAM,CAYtG"}
|
|
@@ -2,83 +2,54 @@ import { resolve } from 'node:path';
|
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { readFile } from 'node:fs/promises';
|
|
4
4
|
import { glob } from 'glob';
|
|
5
|
+
// Built-in scanners - no plugins needed for these
|
|
6
|
+
export const BUILTIN_SCANNERS = {
|
|
7
|
+
react: { description: 'React/JSX component scanning', detects: 'React components' },
|
|
8
|
+
vue: { description: 'Vue SFC scanning', detects: 'Vue components' },
|
|
9
|
+
svelte: { description: 'Svelte component scanning', detects: 'Svelte components' },
|
|
10
|
+
angular: { description: 'Angular component scanning', detects: 'Angular components' },
|
|
11
|
+
webcomponents: { description: 'Lit/Stencil scanning', detects: 'Web Components' },
|
|
12
|
+
tokens: { description: 'CSS/SCSS/JSON token scanning', detects: 'Design tokens' },
|
|
13
|
+
templates: { description: 'Template scanning (Blade, ERB, Twig)', detects: 'Server templates' },
|
|
14
|
+
tailwind: { description: 'Tailwind config & arbitrary value detection', detects: 'Tailwind CSS' },
|
|
15
|
+
};
|
|
16
|
+
// These require external configuration or APIs (future)
|
|
5
17
|
export const PLUGIN_INFO = {
|
|
6
|
-
react: {
|
|
7
|
-
name: '@buoy-design/plugin-react',
|
|
8
|
-
description: 'Scans React/JSX components for inline styles, deprecated components, and design system inconsistencies.',
|
|
9
|
-
detects: 'React components',
|
|
10
|
-
examples: ['Hardcoded colors in style props', 'Deprecated component usage', 'Missing design tokens'],
|
|
11
|
-
},
|
|
12
|
-
vue: {
|
|
13
|
-
name: '@buoy-design/plugin-vue',
|
|
14
|
-
description: 'Scans Vue single-file components for hardcoded styles and design drift.',
|
|
15
|
-
detects: 'Vue components',
|
|
16
|
-
examples: ['Inline styles in <style> blocks', 'Hardcoded values in templates'],
|
|
17
|
-
},
|
|
18
|
-
svelte: {
|
|
19
|
-
name: '@buoy-design/plugin-svelte',
|
|
20
|
-
description: 'Scans Svelte components for hardcoded styles and design inconsistencies.',
|
|
21
|
-
detects: 'Svelte components',
|
|
22
|
-
examples: ['Hardcoded CSS values', 'Inline style attributes'],
|
|
23
|
-
},
|
|
24
|
-
angular: {
|
|
25
|
-
name: '@buoy-design/plugin-angular',
|
|
26
|
-
description: 'Scans Angular components for hardcoded styles in templates and component styles.',
|
|
27
|
-
detects: 'Angular components',
|
|
28
|
-
examples: ['Inline styles', 'Hardcoded values in .component.css'],
|
|
29
|
-
},
|
|
30
|
-
webcomponents: {
|
|
31
|
-
name: '@buoy-design/plugin-webcomponents',
|
|
32
|
-
description: 'Scans Lit/Stencil web components for hardcoded styles and design drift.',
|
|
33
|
-
detects: 'Web Components (Lit, Stencil)',
|
|
34
|
-
examples: ['Hardcoded CSS in shadow DOM', 'Static style values'],
|
|
35
|
-
},
|
|
36
|
-
css: {
|
|
37
|
-
name: '@buoy-design/plugin-css',
|
|
38
|
-
description: 'Scans CSS for hardcoded colors, spacing, and fonts that should use design tokens.',
|
|
39
|
-
detects: 'CSS files with potential design tokens',
|
|
40
|
-
examples: ['#ff6b6b instead of var(--color-error)', '16px instead of var(--spacing-md)'],
|
|
41
|
-
},
|
|
42
|
-
tailwind: {
|
|
43
|
-
name: '@buoy-design/plugin-tailwind',
|
|
44
|
-
description: 'Analyzes Tailwind config and usage for design token consistency.',
|
|
45
|
-
detects: 'Tailwind CSS configuration',
|
|
46
|
-
examples: ['Custom colors not in design system', 'Arbitrary values like [#ff6b6b]'],
|
|
47
|
-
},
|
|
48
18
|
figma: {
|
|
49
19
|
name: '@buoy-design/plugin-figma',
|
|
50
|
-
description: 'Connects to Figma to compare design tokens
|
|
20
|
+
description: 'Connects to Figma to compare design tokens with your codebase.',
|
|
51
21
|
detects: 'Figma configuration',
|
|
52
22
|
examples: ['Token value drift between Figma and code', 'Missing component implementations'],
|
|
53
23
|
},
|
|
54
24
|
storybook: {
|
|
55
25
|
name: '@buoy-design/plugin-storybook',
|
|
56
|
-
description: 'Scans Storybook stories to verify component coverage
|
|
26
|
+
description: 'Scans Storybook stories to verify component coverage.',
|
|
57
27
|
detects: 'Storybook configuration',
|
|
58
28
|
examples: ['Components without stories', 'Undocumented variants'],
|
|
59
29
|
},
|
|
60
30
|
};
|
|
31
|
+
// Framework detection patterns
|
|
32
|
+
// scanner = built-in (no install needed), plugin = optional enhancement
|
|
61
33
|
const FRAMEWORK_PATTERNS = [
|
|
62
|
-
// React ecosystem
|
|
63
|
-
{ name: 'react',
|
|
64
|
-
{ name: 'next',
|
|
65
|
-
{ name: 'remix',
|
|
66
|
-
{ name: 'gatsby',
|
|
67
|
-
// Vue ecosystem
|
|
68
|
-
{ name: 'vue',
|
|
69
|
-
{ name: 'nuxt',
|
|
70
|
-
// Svelte ecosystem
|
|
71
|
-
{ name: 'svelte',
|
|
72
|
-
{ name: 'sveltekit',
|
|
73
|
-
// Angular
|
|
74
|
-
{ name: 'angular',
|
|
75
|
-
// Web Components
|
|
76
|
-
{ name: 'lit',
|
|
77
|
-
{ name: 'stencil',
|
|
78
|
-
// CSS/Tokens
|
|
79
|
-
{ name: 'tailwind',
|
|
80
|
-
|
|
81
|
-
// Design tools
|
|
34
|
+
// React ecosystem - built-in scanner
|
|
35
|
+
{ name: 'react', scanner: 'react', packages: ['react', 'react-dom'] },
|
|
36
|
+
{ name: 'next', scanner: 'react', packages: ['next'] },
|
|
37
|
+
{ name: 'remix', scanner: 'react', packages: ['@remix-run/react'] },
|
|
38
|
+
{ name: 'gatsby', scanner: 'react', packages: ['gatsby'] },
|
|
39
|
+
// Vue ecosystem - built-in scanner
|
|
40
|
+
{ name: 'vue', scanner: 'vue', packages: ['vue'] },
|
|
41
|
+
{ name: 'nuxt', scanner: 'vue', packages: ['nuxt', 'nuxt3'] },
|
|
42
|
+
// Svelte ecosystem - built-in scanner
|
|
43
|
+
{ name: 'svelte', scanner: 'svelte', packages: ['svelte'] },
|
|
44
|
+
{ name: 'sveltekit', scanner: 'svelte', packages: ['@sveltejs/kit'] },
|
|
45
|
+
// Angular - built-in scanner
|
|
46
|
+
{ name: 'angular', scanner: 'angular', packages: ['@angular/core'] },
|
|
47
|
+
// Web Components - built-in scanner
|
|
48
|
+
{ name: 'lit', scanner: 'webcomponents', packages: ['lit', 'lit-element'] },
|
|
49
|
+
{ name: 'stencil', scanner: 'webcomponents', packages: ['@stencil/core'] },
|
|
50
|
+
// CSS/Tokens - built-in
|
|
51
|
+
{ name: 'tailwind', scanner: 'tailwind', packages: ['tailwindcss'], files: ['tailwind.config.*'] },
|
|
52
|
+
// Design tools - require plugins
|
|
82
53
|
{ name: 'figma', plugin: 'figma', files: ['.figmarc', 'figma.config.*'] },
|
|
83
54
|
{ name: 'storybook', plugin: 'storybook', packages: ['@storybook/react', '@storybook/vue3', '@storybook/svelte'], files: ['.storybook/**'] },
|
|
84
55
|
];
|
|
@@ -107,6 +78,7 @@ export async function detectFrameworks(projectRoot) {
|
|
|
107
78
|
if (matchedPkg) {
|
|
108
79
|
detected.push({
|
|
109
80
|
name: pattern.name,
|
|
81
|
+
scanner: pattern.scanner,
|
|
110
82
|
plugin: pattern.plugin,
|
|
111
83
|
confidence: 'high',
|
|
112
84
|
evidence: `Found "${matchedPkg}" in package.json`,
|
|
@@ -121,6 +93,7 @@ export async function detectFrameworks(projectRoot) {
|
|
|
121
93
|
if (matches.length > 0) {
|
|
122
94
|
detected.push({
|
|
123
95
|
name: pattern.name,
|
|
96
|
+
scanner: pattern.scanner,
|
|
124
97
|
plugin: pattern.plugin,
|
|
125
98
|
confidence: pattern.packages ? 'medium' : 'high',
|
|
126
99
|
evidence: `Found ${matches[0]}`,
|
|
@@ -131,15 +104,16 @@ export async function detectFrameworks(projectRoot) {
|
|
|
131
104
|
}
|
|
132
105
|
}
|
|
133
106
|
}
|
|
134
|
-
// Deduplicate by plugin name, keeping highest confidence
|
|
135
|
-
const
|
|
107
|
+
// Deduplicate by scanner or plugin name, keeping highest confidence
|
|
108
|
+
const byKey = new Map();
|
|
136
109
|
for (const d of detected) {
|
|
137
|
-
const
|
|
110
|
+
const key = d.scanner || d.plugin || d.name;
|
|
111
|
+
const existing = byKey.get(key);
|
|
138
112
|
if (!existing || confidenceRank(d.confidence) > confidenceRank(existing.confidence)) {
|
|
139
|
-
|
|
113
|
+
byKey.set(key, d);
|
|
140
114
|
}
|
|
141
115
|
}
|
|
142
|
-
return Array.from(
|
|
116
|
+
return Array.from(byKey.values());
|
|
143
117
|
}
|
|
144
118
|
function confidenceRank(c) {
|
|
145
119
|
return c === 'high' ? 3 : c === 'medium' ? 2 : 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameworks.js","sourceRoot":"","sources":["../../src/detect/frameworks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"frameworks.js","sourceRoot":"","sources":["../../src/detect/frameworks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Command } from
|
|
1
|
+
import { Command } from "commander";
|
|
2
2
|
export declare function createCli(): Command;
|
|
3
|
-
export { defineConfig } from
|
|
4
|
-
export type { BuoyConfig } from
|
|
3
|
+
export { defineConfig } from "./config/schema.js";
|
|
4
|
+
export type { BuoyConfig } from "./config/schema.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,SAAS,IAAI,OAAO,CAoBnC;AAGD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Command } from
|
|
2
|
-
import { createInitCommand, createScanCommand, createDriftCommand, createStatusCommand, createBootstrapCommand, createBuildCommand, createPluginsCommand, createCICommand } from
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { createInitCommand, createScanCommand, createDriftCommand, createStatusCommand, createBootstrapCommand, createBuildCommand, createPluginsCommand, createCICommand, createBaselineCommand, } from "./commands/index.js";
|
|
3
3
|
export function createCli() {
|
|
4
4
|
const program = new Command();
|
|
5
5
|
program
|
|
6
|
-
.name(
|
|
7
|
-
.description(
|
|
8
|
-
.version(
|
|
6
|
+
.name("buoy")
|
|
7
|
+
.description("Design drift detection for the AI era")
|
|
8
|
+
.version("0.0.1");
|
|
9
9
|
// Add commands
|
|
10
10
|
program.addCommand(createInitCommand());
|
|
11
11
|
program.addCommand(createScanCommand());
|
|
@@ -15,8 +15,9 @@ export function createCli() {
|
|
|
15
15
|
program.addCommand(createBuildCommand());
|
|
16
16
|
program.addCommand(createPluginsCommand());
|
|
17
17
|
program.addCommand(createCICommand());
|
|
18
|
+
program.addCommand(createBaselineCommand());
|
|
18
19
|
return program;
|
|
19
20
|
}
|
|
20
21
|
// Re-export config utilities for user config files
|
|
21
|
-
export { defineConfig } from
|
|
22
|
+
export { defineConfig } from "./config/schema.js";
|
|
22
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CAAC,uCAAuC,CAAC;SACpD,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,eAAe;IACf,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,mDAAmD;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-formatter.d.ts","sourceRoot":"","sources":["../../src/integrations/github-formatter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CA2E5D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { COMMENT_MARKER } from './github.js';
|
|
2
|
+
export function formatPRComment(results) {
|
|
3
|
+
const lines = [COMMENT_MARKER];
|
|
4
|
+
// Header
|
|
5
|
+
const icon = results.summary.critical > 0 ? '🔴' :
|
|
6
|
+
results.summary.warning > 0 ? '🟡' : '🟢';
|
|
7
|
+
lines.push(`## ${icon} Buoy Drift Report`);
|
|
8
|
+
lines.push('');
|
|
9
|
+
// Summary
|
|
10
|
+
const { total, critical, warning, info } = results.summary;
|
|
11
|
+
if (total === 0) {
|
|
12
|
+
lines.push('No design drift detected. Your code is aligned with the design system!');
|
|
13
|
+
lines.push('');
|
|
14
|
+
lines.push('---');
|
|
15
|
+
lines.push('<sub>🔱 <a href="https://github.com/dylantarre/buoy">Buoy</a></sub>');
|
|
16
|
+
return lines.join('\n');
|
|
17
|
+
}
|
|
18
|
+
lines.push(`**${total} issue${total === 1 ? '' : 's'} found** (${critical} critical, ${warning} warning${warning === 1 ? '' : 's'}, ${info} info)`);
|
|
19
|
+
lines.push('');
|
|
20
|
+
// Group by severity
|
|
21
|
+
const criticals = results.signals.filter(s => s.severity === 'critical');
|
|
22
|
+
const warnings = results.signals.filter(s => s.severity === 'warning');
|
|
23
|
+
const infos = results.signals.filter(s => s.severity === 'info');
|
|
24
|
+
// Critical issues table
|
|
25
|
+
if (criticals.length > 0) {
|
|
26
|
+
lines.push('### Critical');
|
|
27
|
+
lines.push('');
|
|
28
|
+
lines.push('| Component | Issue | File |');
|
|
29
|
+
lines.push('|-----------|-------|------|');
|
|
30
|
+
for (const signal of criticals) {
|
|
31
|
+
const file = signal.file ? `\`${signal.file}${signal.line ? `:${signal.line}` : ''}\`` : '-';
|
|
32
|
+
lines.push(`| \`${signal.component || '-'}\` | ${signal.message} | ${file} |`);
|
|
33
|
+
}
|
|
34
|
+
lines.push('');
|
|
35
|
+
}
|
|
36
|
+
// Warning issues table
|
|
37
|
+
if (warnings.length > 0) {
|
|
38
|
+
lines.push('### Warnings');
|
|
39
|
+
lines.push('');
|
|
40
|
+
lines.push('| Component | Issue | File |');
|
|
41
|
+
lines.push('|-----------|-------|------|');
|
|
42
|
+
for (const signal of warnings.slice(0, 10)) {
|
|
43
|
+
const file = signal.file ? `\`${signal.file}${signal.line ? `:${signal.line}` : ''}\`` : '-';
|
|
44
|
+
lines.push(`| \`${signal.component || '-'}\` | ${signal.message} | ${file} |`);
|
|
45
|
+
}
|
|
46
|
+
if (warnings.length > 10) {
|
|
47
|
+
lines.push(`| ... | *${warnings.length - 10} more warnings* | |`);
|
|
48
|
+
}
|
|
49
|
+
lines.push('');
|
|
50
|
+
}
|
|
51
|
+
// Info issues collapsed
|
|
52
|
+
if (infos.length > 0) {
|
|
53
|
+
lines.push('<details>');
|
|
54
|
+
lines.push(`<summary>${infos.length} info-level issue${infos.length === 1 ? '' : 's'}</summary>`);
|
|
55
|
+
lines.push('');
|
|
56
|
+
for (const signal of infos) {
|
|
57
|
+
const loc = signal.file ? ` (${signal.file}${signal.line ? `:${signal.line}` : ''})` : '';
|
|
58
|
+
lines.push(`- \`${signal.component || 'Unknown'}\`: ${signal.message}${loc}`);
|
|
59
|
+
}
|
|
60
|
+
lines.push('');
|
|
61
|
+
lines.push('</details>');
|
|
62
|
+
lines.push('');
|
|
63
|
+
}
|
|
64
|
+
// Footer
|
|
65
|
+
lines.push('---');
|
|
66
|
+
lines.push('<sub>🔱 <a href="https://github.com/dylantarre/buoy">Buoy</a></sub>');
|
|
67
|
+
return lines.join('\n');
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=github-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-formatter.js","sourceRoot":"","sources":["../../src/integrations/github-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const COMMENT_MARKER = "<!-- buoy-drift-report -->";
|
|
2
|
+
export interface GitHubContext {
|
|
3
|
+
token: string;
|
|
4
|
+
owner: string;
|
|
5
|
+
repo: string;
|
|
6
|
+
prNumber: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class GitHubClient {
|
|
9
|
+
private octokit;
|
|
10
|
+
private context;
|
|
11
|
+
constructor(context: GitHubContext);
|
|
12
|
+
findExistingComment(): Promise<number | null>;
|
|
13
|
+
createOrUpdateComment(body: string): Promise<void>;
|
|
14
|
+
deleteComment(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function parseRepoString(repoString: string): {
|
|
17
|
+
owner: string;
|
|
18
|
+
repo: string;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=github.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/integrations/github.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,cAAc,+BAA+B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAU5B,mBAAmB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqB7C,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAYrC;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMnF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Built-in GitHub integration for Buoy CLI
|
|
2
|
+
import { Octokit } from '@octokit/rest';
|
|
3
|
+
const REQUEST_TIMEOUT_MS = 30000; // 30 seconds
|
|
4
|
+
// Hidden marker to identify Buoy comments for updates
|
|
5
|
+
export const COMMENT_MARKER = '<!-- buoy-drift-report -->';
|
|
6
|
+
export class GitHubClient {
|
|
7
|
+
octokit;
|
|
8
|
+
context;
|
|
9
|
+
constructor(context) {
|
|
10
|
+
this.context = context;
|
|
11
|
+
this.octokit = new Octokit({
|
|
12
|
+
auth: context.token,
|
|
13
|
+
request: {
|
|
14
|
+
timeout: REQUEST_TIMEOUT_MS,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
async findExistingComment() {
|
|
19
|
+
const { owner, repo, prNumber } = this.context;
|
|
20
|
+
// Use pagination to handle PRs with 30+ comments
|
|
21
|
+
const comments = await this.octokit.paginate(this.octokit.issues.listComments, {
|
|
22
|
+
owner,
|
|
23
|
+
repo,
|
|
24
|
+
issue_number: prNumber,
|
|
25
|
+
per_page: 100,
|
|
26
|
+
});
|
|
27
|
+
const existing = comments.find((comment) => comment.body?.includes(COMMENT_MARKER));
|
|
28
|
+
return existing?.id ?? null;
|
|
29
|
+
}
|
|
30
|
+
async createOrUpdateComment(body) {
|
|
31
|
+
const { owner, repo, prNumber } = this.context;
|
|
32
|
+
const existingId = await this.findExistingComment();
|
|
33
|
+
if (existingId) {
|
|
34
|
+
await this.octokit.issues.updateComment({
|
|
35
|
+
owner,
|
|
36
|
+
repo,
|
|
37
|
+
comment_id: existingId,
|
|
38
|
+
body,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
await this.octokit.issues.createComment({
|
|
43
|
+
owner,
|
|
44
|
+
repo,
|
|
45
|
+
issue_number: prNumber,
|
|
46
|
+
body,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async deleteComment() {
|
|
51
|
+
const { owner, repo } = this.context;
|
|
52
|
+
const existingId = await this.findExistingComment();
|
|
53
|
+
if (existingId) {
|
|
54
|
+
await this.octokit.issues.deleteComment({
|
|
55
|
+
owner,
|
|
56
|
+
repo,
|
|
57
|
+
comment_id: existingId,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function parseRepoString(repoString) {
|
|
63
|
+
const parts = repoString.split('/');
|
|
64
|
+
if (parts.length !== 2) {
|
|
65
|
+
throw new Error(`Invalid repo format: "${repoString}". Expected "owner/repo".`);
|
|
66
|
+
}
|
|
67
|
+
return { owner: parts[0], repo: parts[1] };
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/integrations/github.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,aAAa;AAE/C,sDAAsD;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,4BAA4B,CAAC;AAS3D,MAAM,OAAO,YAAY;IACf,OAAO,CAAU;IACjB,OAAO,CAAgB;IAE/B,YAAY,OAAsB;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC;YACzB,IAAI,EAAE,OAAO,CAAC,KAAK;YACnB,OAAO,EAAE;gBACP,OAAO,EAAE,kBAAkB;aAC5B;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAE/C,iDAAiD;QACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAChC;YACE,KAAK;YACL,IAAI;YACJ,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,GAAG;SACd,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAC5B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,CACpD,CAAC;QAEF,OAAO,QAAQ,EAAE,EAAE,IAAI,IAAI,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,IAAY;QACtC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEpD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;gBACtC,KAAK;gBACL,IAAI;gBACJ,UAAU,EAAE,UAAU;gBACtB,IAAI;aACL,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;gBACtC,KAAK;gBACL,IAAI;gBACJ,YAAY,EAAE,QAAQ;gBACtB,IAAI;aACL,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACrC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEpD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;gBACtC,KAAK;gBACL,IAAI;gBACJ,UAAU,EAAE,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,2BAA2B,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5E,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Component, DesignToken } from "@buoy-design/core";
|
|
2
|
+
import type { BuoyConfig } from "../config/schema.js";
|
|
3
|
+
/**
|
|
4
|
+
* Result of a scan operation
|
|
5
|
+
*/
|
|
6
|
+
export interface ScanResult {
|
|
7
|
+
components: Component[];
|
|
8
|
+
tokens: DesignToken[];
|
|
9
|
+
errors: ScanError[];
|
|
10
|
+
}
|
|
11
|
+
export interface ScanError {
|
|
12
|
+
source: string;
|
|
13
|
+
message: string;
|
|
14
|
+
file?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Options for the scan orchestrator
|
|
18
|
+
*/
|
|
19
|
+
export interface ScanOrchestratorOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Specific sources to scan. If empty, scans all enabled sources.
|
|
22
|
+
*/
|
|
23
|
+
sources?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Callback for progress updates
|
|
26
|
+
*/
|
|
27
|
+
onProgress?: (message: string) => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* All supported scanner source types
|
|
31
|
+
*/
|
|
32
|
+
export type ScannerSource = "react" | "vue" | "svelte" | "angular" | "webcomponent" | "templates" | "tokens" | "figma" | "storybook";
|
|
33
|
+
/**
|
|
34
|
+
* Centralized scanner orchestration for all CLI commands.
|
|
35
|
+
* Eliminates duplicate scanning logic across scan, status, ci, and drift commands.
|
|
36
|
+
*/
|
|
37
|
+
export declare class ScanOrchestrator {
|
|
38
|
+
private config;
|
|
39
|
+
private projectRoot;
|
|
40
|
+
constructor(config: BuoyConfig, projectRoot?: string);
|
|
41
|
+
/**
|
|
42
|
+
* Get list of enabled sources from config
|
|
43
|
+
*/
|
|
44
|
+
getEnabledSources(): ScannerSource[];
|
|
45
|
+
/**
|
|
46
|
+
* Scan all enabled sources or specific sources
|
|
47
|
+
*/
|
|
48
|
+
scan(options?: ScanOrchestratorOptions): Promise<ScanResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Scan only component sources (no tokens)
|
|
51
|
+
*/
|
|
52
|
+
scanComponents(options?: ScanOrchestratorOptions): Promise<{
|
|
53
|
+
components: Component[];
|
|
54
|
+
errors: ScanError[];
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Scan only token sources
|
|
58
|
+
*/
|
|
59
|
+
scanTokens(options?: Omit<ScanOrchestratorOptions, "sources">): Promise<{
|
|
60
|
+
tokens: DesignToken[];
|
|
61
|
+
errors: ScanError[];
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Import all scanner classes dynamically
|
|
65
|
+
*/
|
|
66
|
+
private importScanners;
|
|
67
|
+
/**
|
|
68
|
+
* Scan a specific source and return results
|
|
69
|
+
*/
|
|
70
|
+
private scanSource;
|
|
71
|
+
/**
|
|
72
|
+
* Collect and format errors from scanner result
|
|
73
|
+
*/
|
|
74
|
+
private collectErrors;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/scan/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,KAAK,GACL,QAAQ,GACR,SAAS,GACT,cAAc,GACd,WAAW,GACX,QAAQ,GACR,OAAO,GACP,WAAW,CAAC;AAEhB;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,UAAU,EAAE,WAAW,GAAE,MAAsB;IAKnE;;OAEG;IACH,iBAAiB,IAAI,aAAa,EAAE;IAqBpC;;OAEG;IACG,IAAI,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,UAAU,CAAC;IAsCtE;;OAEG;IACG,cAAc,CAClB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC;QAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;IAc5D;;OAEG;IACG,UAAU,CACd,OAAO,GAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,CAAM,GACrD,OAAO,CAAC;QAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;IAY1D;;OAEG;YACW,cAAc;IAsB5B;;OAEG;YACW,UAAU;IAuIxB;;OAEG;IACH,OAAO,CAAC,aAAa;CAatB"}
|