@scrymore/scry-sbcov 0.2.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 (47) hide show
  1. package/README.md +410 -0
  2. package/bin/scry-sbcov.js +3 -0
  3. package/dist/analyzers/git-analyzer.d.ts +49 -0
  4. package/dist/analyzers/git-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/git-analyzer.js +265 -0
  6. package/dist/analyzers/git-analyzer.js.map +1 -0
  7. package/dist/cli/config.d.ts +12 -0
  8. package/dist/cli/config.d.ts.map +1 -0
  9. package/dist/cli/config.js +197 -0
  10. package/dist/cli/config.js.map +1 -0
  11. package/dist/cli/index.d.ts +7 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +164 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/core/analyzer.d.ts +19 -0
  16. package/dist/core/analyzer.d.ts.map +1 -0
  17. package/dist/core/analyzer.js +117 -0
  18. package/dist/core/analyzer.js.map +1 -0
  19. package/dist/core/coverage-calculator.d.ts +38 -0
  20. package/dist/core/coverage-calculator.d.ts.map +1 -0
  21. package/dist/core/coverage-calculator.js +335 -0
  22. package/dist/core/coverage-calculator.js.map +1 -0
  23. package/dist/core/report-generator.d.ts +10 -0
  24. package/dist/core/report-generator.d.ts.map +1 -0
  25. package/dist/core/report-generator.js +477 -0
  26. package/dist/core/report-generator.js.map +1 -0
  27. package/dist/core/story-executor.d.ts +22 -0
  28. package/dist/core/story-executor.d.ts.map +1 -0
  29. package/dist/core/story-executor.js +379 -0
  30. package/dist/core/story-executor.js.map +1 -0
  31. package/dist/detectors/component-detector.d.ts +15 -0
  32. package/dist/detectors/component-detector.d.ts.map +1 -0
  33. package/dist/detectors/component-detector.js +632 -0
  34. package/dist/detectors/component-detector.js.map +1 -0
  35. package/dist/index.d.ts +16 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/parsers/story-parser.d.ts +18 -0
  40. package/dist/parsers/story-parser.d.ts.map +1 -0
  41. package/dist/parsers/story-parser.js +353 -0
  42. package/dist/parsers/story-parser.js.map +1 -0
  43. package/dist/types/index.d.ts +502 -0
  44. package/dist/types/index.d.ts.map +1 -0
  45. package/dist/types/index.js +6 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/package.json +79 -0
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scry-sbcov CLI Entry Point
4
+ * Storybook story coverage analyzer for React component libraries
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import * as fs from 'node:fs';
9
+ import * as path from 'node:path';
10
+ import { loadConfig } from './config.js';
11
+ import { analyze } from '../core/analyzer.js';
12
+ const packageJsonPath = new URL('../../package.json', import.meta.url);
13
+ let version = '0.1.0';
14
+ try {
15
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
16
+ version = packageJson.version;
17
+ }
18
+ catch {
19
+ // Use default version
20
+ }
21
+ const program = new Command();
22
+ program
23
+ .name('scry-sbcov')
24
+ .description('Storybook story coverage analyzer for React component libraries')
25
+ .version(version)
26
+ .option('-c, --config <path>', 'Path to config file (default: scry-sbcov.config.js)')
27
+ .option('-o, --output <path>', 'Output JSON report path (default: stdout)')
28
+ .option('--include <glob>', 'Component file patterns (comma-separated)')
29
+ .option('--exclude <glob>', 'Patterns to exclude (comma-separated)')
30
+ .option('--stories <glob>', 'Story file patterns (comma-separated)')
31
+ .option('--base <branch>', 'Base branch for new code analysis (default: main)')
32
+ .option('--no-git', 'Disable git-based new code analysis')
33
+ .option('--execute', 'Run stories and capture failures')
34
+ .option('--storybook-url <url>', 'Storybook URL for execution (default: http://localhost:6006)')
35
+ .option('--storybook-static <dir>', 'Path to static Storybook build')
36
+ .option('--ci', 'CI mode: exit code 1 if quality gate fails')
37
+ .option('--threshold-component <n>', 'Component coverage threshold %', parseFloat)
38
+ .option('--threshold-new-code <n>', 'New code coverage threshold %', parseFloat)
39
+ .option('-v, --verbose', 'Verbose output')
40
+ .action(async (options) => {
41
+ try {
42
+ await run(options);
43
+ }
44
+ catch (error) {
45
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : error);
46
+ if (options.verbose && error instanceof Error) {
47
+ console.error(error.stack);
48
+ }
49
+ process.exit(1);
50
+ }
51
+ });
52
+ async function run(cliOptions) {
53
+ const verbose = cliOptions.verbose || false;
54
+ const ciMode = cliOptions.ci || false;
55
+ const projectPath = process.cwd();
56
+ if (verbose) {
57
+ console.log(chalk.blue('scry-sbcov') + ' - Storybook Story Coverage Analyzer\n');
58
+ console.log(chalk.gray('Project path:'), projectPath);
59
+ }
60
+ // Load configuration
61
+ const config = await loadConfig(cliOptions, projectPath);
62
+ if (verbose) {
63
+ console.log(chalk.gray('Configuration loaded:'));
64
+ console.log(chalk.gray(' Include patterns:'), config.include.join(', '));
65
+ console.log(chalk.gray(' Exclude patterns:'), config.exclude.join(', '));
66
+ console.log(chalk.gray(' Story patterns:'), config.storyPatterns.join(', '));
67
+ console.log(chalk.gray(' Git analysis:'), config.enableGitAnalysis ? `enabled (base: ${config.baseBranch})` : 'disabled');
68
+ console.log(chalk.gray(' Story execution:'), config.execute ? 'enabled' : 'disabled');
69
+ console.log();
70
+ }
71
+ // Run analysis
72
+ if (verbose) {
73
+ console.log(chalk.blue('Analyzing...'));
74
+ }
75
+ const report = await analyze(projectPath, config, verbose);
76
+ // Output report
77
+ const reportJson = JSON.stringify(report, null, 2);
78
+ if (config.outputPath) {
79
+ const outputPath = path.isAbsolute(config.outputPath)
80
+ ? config.outputPath
81
+ : path.resolve(projectPath, config.outputPath);
82
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
83
+ fs.writeFileSync(outputPath, reportJson);
84
+ if (verbose) {
85
+ console.log(chalk.green('Report written to:'), outputPath);
86
+ }
87
+ }
88
+ else if (!ciMode || verbose) {
89
+ // Only output full JSON if not in CI mode or if verbose
90
+ console.log(reportJson);
91
+ }
92
+ // Print summary
93
+ if (ciMode || verbose) {
94
+ printSummary(report);
95
+ }
96
+ // Exit with appropriate code in CI mode
97
+ if (ciMode) {
98
+ if (!report.qualityGate.passed) {
99
+ console.log(chalk.red('\nQuality gate FAILED'));
100
+ process.exit(1);
101
+ }
102
+ else {
103
+ console.log(chalk.green('\nQuality gate PASSED'));
104
+ }
105
+ }
106
+ }
107
+ function printSummary(report) {
108
+ console.log('\n' + chalk.bold('Coverage Summary'));
109
+ console.log(chalk.gray('─'.repeat(50)));
110
+ const { summary, newCode, qualityGate } = report;
111
+ console.log(`Components: ${summary.componentsWithStories}/${summary.totalComponents} with stories (${summary.metrics.componentCoverage.toFixed(1)}%)`);
112
+ console.log(`Props: ${summary.metrics.propCoverage.toFixed(1)}% covered`);
113
+ console.log(`Variants: ${summary.metrics.variantCoverage.toFixed(1)}% covered`);
114
+ console.log(`Scenarios: ${summary.metrics.scenarioCoverage.toFixed(1)}% covered`);
115
+ if (newCode.enabled) {
116
+ console.log(chalk.gray('─'.repeat(50)));
117
+ console.log(chalk.bold('New Code (since ' + newCode.since + ')'));
118
+ console.log(`New components: ${newCode.newComponents.withStories}/${newCode.newComponents.total} with stories (${newCode.newComponents.coverage.toFixed(1)}%)`);
119
+ console.log(`Modified: ${newCode.modifiedComponents.newPropsCovered}/${newCode.modifiedComponents.newPropsAdded} new props covered (${newCode.modifiedComponents.coverage.toFixed(1)}%)`);
120
+ }
121
+ if (report.execution?.executed) {
122
+ console.log(chalk.gray('─'.repeat(50)));
123
+ console.log(chalk.bold('Story Execution'));
124
+ const exec = report.execution.summary;
125
+ console.log(`Stories: ${exec.passed}/${exec.total} passed (${((exec.passed / exec.total) * 100).toFixed(1)}%)`);
126
+ if (exec.failed > 0) {
127
+ console.log(chalk.red(`Failed: ${exec.failed} stories`));
128
+ }
129
+ }
130
+ console.log(chalk.gray('─'.repeat(50)));
131
+ console.log(chalk.bold('Quality Gate'));
132
+ for (const check of qualityGate.checks) {
133
+ const icon = check.passed ? chalk.green('✓') : chalk.red('✗');
134
+ const status = check.passed
135
+ ? chalk.green(`${check.actual.toFixed(1)}% >= ${check.threshold}%`)
136
+ : chalk.red(`${check.actual.toFixed(1)}% < ${check.threshold}%`);
137
+ console.log(`${icon} ${check.name}: ${status}`);
138
+ }
139
+ if (report.missingScenarios.length > 0) {
140
+ console.log(chalk.gray('─'.repeat(50)));
141
+ console.log(chalk.bold(`Missing Scenarios (${report.missingScenarios.length} total)`));
142
+ const highPriority = report.missingScenarios.filter(s => s.priority === 'critical' || s.priority === 'high');
143
+ for (const scenario of highPriority.slice(0, 5)) {
144
+ const priorityColor = scenario.priority === 'critical' ? chalk.red : chalk.yellow;
145
+ console.log(` ${priorityColor(scenario.priority.toUpperCase())}: ${scenario.componentName} - ${scenario.description}`);
146
+ }
147
+ if (highPriority.length > 5) {
148
+ console.log(chalk.gray(` ... and ${highPriority.length - 5} more high-priority items`));
149
+ }
150
+ }
151
+ if (report.uncoveredComponents.length > 0) {
152
+ console.log(chalk.gray('─'.repeat(50)));
153
+ console.log(chalk.bold(`Uncovered Components (${report.uncoveredComponents.length})`));
154
+ for (const component of report.uncoveredComponents.slice(0, 5)) {
155
+ const isNewBadge = component.isNew ? chalk.blue(' [NEW]') : '';
156
+ console.log(` - ${component.componentName}${isNewBadge} (${component.relativePath})`);
157
+ }
158
+ if (report.uncoveredComponents.length > 5) {
159
+ console.log(chalk.gray(` ... and ${report.uncoveredComponents.length - 5} more`));
160
+ }
161
+ }
162
+ }
163
+ program.parse();
164
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Main Analyzer (Orchestrator)
3
+ * Coordinates all modules and produces the final coverage report
4
+ */
5
+ import type { StoryCoverageReport, ScryConfig } from '../types/index.js';
6
+ /**
7
+ * Run the complete analysis pipeline
8
+ */
9
+ export declare function analyze(projectPath: string, config: ScryConfig, verbose?: boolean): Promise<StoryCoverageReport>;
10
+ /**
11
+ * Quick analysis without execution
12
+ */
13
+ export declare function analyzeQuick(projectPath: string, config: ScryConfig, verbose?: boolean): Promise<StoryCoverageReport>;
14
+ /**
15
+ * Analyze specific files only
16
+ */
17
+ export declare function analyzeFiles(projectPath: string, files: string[], config: ScryConfig, verbose?: boolean): Promise<StoryCoverageReport>;
18
+ export type { StoryCoverageReport, ScryConfig };
19
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/core/analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAQ3F;;GAEG;AACH,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,OAAO,UAAQ,GACd,OAAO,CAAC,mBAAmB,CAAC,CAiG9B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,OAAO,UAAQ,GACd,OAAO,CAAC,mBAAmB,CAAC,CAI9B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,UAAQ,GACd,OAAO,CAAC,mBAAmB,CAAC,CAQ9B;AAGD,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Main Analyzer (Orchestrator)
3
+ * Coordinates all modules and produces the final coverage report
4
+ */
5
+ import { detectComponents } from '../detectors/component-detector.js';
6
+ import { parseStoryFiles } from '../parsers/story-parser.js';
7
+ import { analyzeGitChanges } from '../analyzers/git-analyzer.js';
8
+ import { calculateCoverage } from './coverage-calculator.js';
9
+ import { executeStories, isPlaywrightAvailable } from './story-executor.js';
10
+ import { generateReport } from './report-generator.js';
11
+ /**
12
+ * Run the complete analysis pipeline
13
+ */
14
+ export async function analyze(projectPath, config, verbose = false) {
15
+ // Step 1: Detect React components
16
+ if (verbose) {
17
+ console.log('Step 1/5: Detecting React components...');
18
+ }
19
+ const components = await detectComponents(projectPath, config, verbose);
20
+ if (verbose) {
21
+ console.log(` Found ${components.length} components`);
22
+ }
23
+ // Step 2: Parse story files
24
+ if (verbose) {
25
+ console.log('Step 2/5: Parsing story files...');
26
+ }
27
+ const storyFiles = await parseStoryFiles(projectPath, config, verbose);
28
+ if (verbose) {
29
+ console.log(` Found ${storyFiles.length} story files with ${storyFiles.reduce((acc, f) => acc + f.stories.length, 0)} stories`);
30
+ }
31
+ // Step 3: Analyze git changes (if enabled)
32
+ let gitAnalysis = null;
33
+ if (config.enableGitAnalysis) {
34
+ if (verbose) {
35
+ console.log('Step 3/5: Analyzing git changes...');
36
+ }
37
+ gitAnalysis = await analyzeGitChanges(projectPath, config.baseBranch, verbose);
38
+ if (verbose) {
39
+ if (gitAnalysis.enabled) {
40
+ console.log(` Comparing to ${gitAnalysis.baseBranch} (${gitAnalysis.baseCommitSha.substring(0, 7)})`);
41
+ console.log(` Found ${gitAnalysis.changedFiles.length} changed files`);
42
+ }
43
+ else {
44
+ console.log(' Git analysis disabled or unavailable');
45
+ }
46
+ }
47
+ }
48
+ else if (verbose) {
49
+ console.log('Step 3/5: Skipping git analysis (disabled)');
50
+ }
51
+ // Step 4: Calculate coverage
52
+ if (verbose) {
53
+ console.log('Step 4/5: Calculating coverage...');
54
+ }
55
+ const coverageResults = calculateCoverage(components, storyFiles, gitAnalysis, config);
56
+ if (verbose) {
57
+ const withStories = coverageResults.filter(r => r.stories.length > 0).length;
58
+ console.log(` ${withStories}/${coverageResults.length} components have stories`);
59
+ }
60
+ // Step 5: Execute stories (if enabled)
61
+ let executionResults = null;
62
+ if (config.execute) {
63
+ if (verbose) {
64
+ console.log('Step 5/5: Executing stories...');
65
+ }
66
+ const playwrightAvailable = await isPlaywrightAvailable();
67
+ if (!playwrightAvailable) {
68
+ console.warn('Warning: Playwright is not installed. Story execution is disabled.');
69
+ console.warn('Install playwright with: npm install playwright');
70
+ }
71
+ else {
72
+ executionResults = await executeStories(storyFiles, {
73
+ storybookUrl: config.storybookUrl,
74
+ staticDir: config.storybookStaticDir || undefined,
75
+ timeout: config.executionTimeout,
76
+ screenshotOnFailure: true,
77
+ }, verbose);
78
+ if (verbose) {
79
+ const { passed, failed, total } = executionResults.summary;
80
+ console.log(` Executed ${total} stories: ${passed} passed, ${failed} failed`);
81
+ }
82
+ }
83
+ }
84
+ else if (verbose) {
85
+ console.log('Step 5/5: Skipping story execution (disabled)');
86
+ }
87
+ // Generate final report
88
+ if (verbose) {
89
+ console.log('Generating report...');
90
+ }
91
+ const report = generateReport(coverageResults, storyFiles, gitAnalysis, executionResults, config);
92
+ if (verbose) {
93
+ console.log('Analysis complete!');
94
+ }
95
+ return report;
96
+ }
97
+ /**
98
+ * Quick analysis without execution
99
+ */
100
+ export async function analyzeQuick(projectPath, config, verbose = false) {
101
+ // Override execution setting
102
+ const quickConfig = { ...config, execute: false };
103
+ return analyze(projectPath, quickConfig, verbose);
104
+ }
105
+ /**
106
+ * Analyze specific files only
107
+ */
108
+ export async function analyzeFiles(projectPath, files, config, verbose = false) {
109
+ // Create a config that only includes the specified files
110
+ const fileConfig = {
111
+ ...config,
112
+ include: files,
113
+ exclude: [],
114
+ };
115
+ return analyze(projectPath, fileConfig, verbose);
116
+ }
117
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/core/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Coverage Calculator
3
+ * Matches components to stories and calculates coverage metrics
4
+ */
5
+ import type { DetectedComponent, ParsedStoryFile, GitAnalysis, CoverageResult, ScryConfig } from '../types/index.js';
6
+ /**
7
+ * Calculate coverage for all components
8
+ */
9
+ export declare function calculateCoverage(components: DetectedComponent[], storyFiles: ParsedStoryFile[], gitAnalysis: GitAnalysis | null, config: ScryConfig): CoverageResult[];
10
+ /**
11
+ * Calculate aggregate coverage metrics across all components
12
+ */
13
+ export declare function calculateAggregateCoverage(results: CoverageResult[]): {
14
+ componentCoverage: number;
15
+ propCoverage: number;
16
+ variantCoverage: number;
17
+ scenarioCoverage: number;
18
+ };
19
+ /**
20
+ * Calculate new code coverage metrics
21
+ */
22
+ export declare function calculateNewCodeCoverage(results: CoverageResult[]): {
23
+ newComponents: {
24
+ total: number;
25
+ withStories: number;
26
+ withoutStories: number;
27
+ coverage: number;
28
+ };
29
+ modifiedComponents: {
30
+ total: number;
31
+ newPropsAdded: number;
32
+ newPropsCovered: number;
33
+ coverage: number;
34
+ };
35
+ newComponentPaths: string[];
36
+ modifiedComponentPaths: string[];
37
+ };
38
+ //# sourceMappingURL=coverage-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverage-calculator.d.ts","sourceRoot":"","sources":["../../src/core/coverage-calculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAGjB,eAAe,EAEf,WAAW,EACX,cAAc,EAKd,UAAU,EACX,MAAM,mBAAmB,CAAC;AAS3B;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,eAAe,EAAE,EAC7B,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,MAAM,EAAE,UAAU,GACjB,cAAc,EAAE,CAsClB;AA0PD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EAAE,GACxB;IACD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAuDA;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,cAAc,EAAE,GACxB;IACD,aAAa,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,kBAAkB,EAAE;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,EAAE,MAAM,EAAE,CAAC;CAClC,CA2CA"}