@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,265 @@
1
+ /**
2
+ * Git Analyzer
3
+ * Identifies new and modified files compared to a base branch for "new code" coverage analysis
4
+ */
5
+ import { simpleGit } from 'simple-git';
6
+ import parseDiff from 'parse-diff';
7
+ /**
8
+ * Analyze git changes compared to a base branch
9
+ */
10
+ export async function analyzeGitChanges(projectPath, baseBranch, verbose = false) {
11
+ const git = simpleGit(projectPath);
12
+ try {
13
+ // Check if we're in a git repository
14
+ const isRepo = await git.checkIsRepo();
15
+ if (!isRepo) {
16
+ if (verbose) {
17
+ console.log('Not a git repository, skipping git analysis');
18
+ }
19
+ return createDisabledAnalysis();
20
+ }
21
+ // Get current branch and commit
22
+ let currentBranch;
23
+ try {
24
+ currentBranch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
25
+ }
26
+ catch {
27
+ // Detached HEAD state
28
+ currentBranch = 'HEAD';
29
+ }
30
+ const currentCommitSha = (await git.revparse(['HEAD'])).trim();
31
+ // Get base commit using merge-base for accurate PR comparison
32
+ let baseCommitSha;
33
+ try {
34
+ // Try to find the merge base
35
+ baseCommitSha = (await git.raw(['merge-base', baseBranch, 'HEAD'])).trim();
36
+ }
37
+ catch {
38
+ try {
39
+ // Fallback to direct branch comparison
40
+ baseCommitSha = (await git.revparse([baseBranch])).trim();
41
+ }
42
+ catch {
43
+ if (verbose) {
44
+ console.warn(`Warning: Could not find base branch "${baseBranch}", disabling git analysis`);
45
+ }
46
+ return createDisabledAnalysis();
47
+ }
48
+ }
49
+ if (verbose) {
50
+ console.log(`Git analysis: comparing ${currentCommitSha.substring(0, 7)} to ${baseCommitSha.substring(0, 7)} (${baseBranch})`);
51
+ }
52
+ // Get diff with rename detection
53
+ const rawDiff = await git.diff([
54
+ '-M', // Detect renames
55
+ '-U0', // No context lines (just changes)
56
+ '--no-color', // No ANSI colors
57
+ `${baseCommitSha}...HEAD`,
58
+ ]);
59
+ const changedFiles = parseDiffOutput(rawDiff, projectPath);
60
+ if (verbose) {
61
+ console.log(`Found ${changedFiles.length} changed files`);
62
+ }
63
+ return {
64
+ enabled: true,
65
+ baseBranch,
66
+ baseCommitSha,
67
+ currentCommitSha,
68
+ currentBranch,
69
+ changedFiles,
70
+ };
71
+ }
72
+ catch (error) {
73
+ if (verbose) {
74
+ console.warn('Git analysis failed:', error);
75
+ }
76
+ return createDisabledAnalysis();
77
+ }
78
+ }
79
+ /**
80
+ * Parse git diff output
81
+ */
82
+ function parseDiffOutput(diffOutput, _projectPath) {
83
+ if (!diffOutput.trim()) {
84
+ return [];
85
+ }
86
+ const files = parseDiff(diffOutput);
87
+ const changedFiles = [];
88
+ for (const file of files) {
89
+ // Skip deleted files
90
+ if (file.to === '/dev/null' || !file.to) {
91
+ continue;
92
+ }
93
+ const addedLines = [];
94
+ const deletedLines = [];
95
+ for (const chunk of file.chunks) {
96
+ for (const change of chunk.changes) {
97
+ if (change.type === 'add' && 'ln' in change) {
98
+ addedLines.push(change.ln);
99
+ }
100
+ else if (change.type === 'del' && 'ln' in change) {
101
+ deletedLines.push(change.ln);
102
+ }
103
+ }
104
+ }
105
+ let status;
106
+ // Check for renamed files by comparing from/to paths
107
+ const isRenamed = file.from && file.to && file.from !== file.to && !file.new && !file.deleted;
108
+ if (file.new) {
109
+ status = 'new';
110
+ }
111
+ else if (file.deleted) {
112
+ status = 'deleted';
113
+ }
114
+ else if (isRenamed) {
115
+ status = 'renamed';
116
+ }
117
+ else {
118
+ status = 'modified';
119
+ }
120
+ changedFiles.push({
121
+ filePath: file.to,
122
+ status,
123
+ addedLines,
124
+ deletedLines,
125
+ previousPath: isRenamed ? file.from : undefined,
126
+ });
127
+ }
128
+ return changedFiles;
129
+ }
130
+ /**
131
+ * Create a disabled git analysis result
132
+ */
133
+ function createDisabledAnalysis() {
134
+ return {
135
+ enabled: false,
136
+ baseBranch: '',
137
+ baseCommitSha: '',
138
+ currentCommitSha: '',
139
+ currentBranch: '',
140
+ changedFiles: [],
141
+ };
142
+ }
143
+ /**
144
+ * Check if a file is new
145
+ */
146
+ export function isFileNew(filePath, gitAnalysis) {
147
+ if (!gitAnalysis.enabled)
148
+ return false;
149
+ const normalizedPath = normalizeFilePath(filePath);
150
+ return gitAnalysis.changedFiles.some(f => normalizeFilePath(f.filePath) === normalizedPath && f.status === 'new');
151
+ }
152
+ /**
153
+ * Check if a file is modified
154
+ */
155
+ export function isFileModified(filePath, gitAnalysis) {
156
+ if (!gitAnalysis.enabled)
157
+ return false;
158
+ const normalizedPath = normalizeFilePath(filePath);
159
+ return gitAnalysis.changedFiles.some(f => normalizeFilePath(f.filePath) === normalizedPath &&
160
+ (f.status === 'modified' || f.status === 'renamed'));
161
+ }
162
+ /**
163
+ * Check if a file has changed (new or modified)
164
+ */
165
+ export function isFileChanged(filePath, gitAnalysis) {
166
+ if (!gitAnalysis.enabled)
167
+ return false;
168
+ const normalizedPath = normalizeFilePath(filePath);
169
+ return gitAnalysis.changedFiles.some(f => normalizeFilePath(f.filePath) === normalizedPath && f.status !== 'deleted');
170
+ }
171
+ /**
172
+ * Get new lines in a file
173
+ */
174
+ export function getNewLinesInFile(filePath, gitAnalysis) {
175
+ if (!gitAnalysis.enabled)
176
+ return [];
177
+ const normalizedPath = normalizeFilePath(filePath);
178
+ const file = gitAnalysis.changedFiles.find(f => normalizeFilePath(f.filePath) === normalizedPath);
179
+ if (!file)
180
+ return [];
181
+ // For new files, all lines are "new"
182
+ if (file.status === 'new') {
183
+ return file.addedLines;
184
+ }
185
+ return file.addedLines;
186
+ }
187
+ /**
188
+ * Get the number of added lines in a file
189
+ */
190
+ export function getAddedLineCount(filePath, gitAnalysis) {
191
+ const newLines = getNewLinesInFile(filePath, gitAnalysis);
192
+ return newLines.length;
193
+ }
194
+ /**
195
+ * Get the number of modified (changed but not added) lines
196
+ */
197
+ export function getModifiedLineCount(filePath, gitAnalysis) {
198
+ if (!gitAnalysis.enabled)
199
+ return 0;
200
+ const normalizedPath = normalizeFilePath(filePath);
201
+ const file = gitAnalysis.changedFiles.find(f => normalizeFilePath(f.filePath) === normalizedPath);
202
+ if (!file || file.status === 'new')
203
+ return 0;
204
+ // Modified lines are approximated by the number of deleted lines
205
+ // (lines that were changed typically show as delete + add)
206
+ return file.deletedLines.length;
207
+ }
208
+ /**
209
+ * Normalize file path for comparison
210
+ */
211
+ function normalizeFilePath(filePath) {
212
+ // Remove leading slashes and normalize
213
+ return filePath.replace(/^\/+/, '').replace(/\\/g, '/');
214
+ }
215
+ /**
216
+ * Get change status for a file
217
+ */
218
+ export function getFileChangeStatus(filePath, gitAnalysis) {
219
+ if (!gitAnalysis.enabled)
220
+ return 'unchanged';
221
+ if (isFileNew(filePath, gitAnalysis)) {
222
+ return 'new';
223
+ }
224
+ if (isFileModified(filePath, gitAnalysis)) {
225
+ return 'modified';
226
+ }
227
+ return 'unchanged';
228
+ }
229
+ /**
230
+ * Check if git analysis detected a shallow clone
231
+ */
232
+ export async function checkForShallowClone(projectPath) {
233
+ const git = simpleGit(projectPath);
234
+ try {
235
+ const isShallow = await git.raw(['rev-parse', '--is-shallow-repository']);
236
+ return isShallow.trim() === 'true';
237
+ }
238
+ catch {
239
+ return false;
240
+ }
241
+ }
242
+ /**
243
+ * Get information about the git repository
244
+ */
245
+ export async function getGitInfo(projectPath) {
246
+ const git = simpleGit(projectPath);
247
+ try {
248
+ const isRepo = await git.checkIsRepo();
249
+ if (!isRepo)
250
+ return null;
251
+ const commitSha = (await git.revparse(['HEAD'])).trim();
252
+ let branch;
253
+ try {
254
+ branch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim();
255
+ }
256
+ catch {
257
+ branch = 'HEAD';
258
+ }
259
+ return { commitSha, branch };
260
+ }
261
+ catch {
262
+ return null;
263
+ }
264
+ }
265
+ //# sourceMappingURL=git-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-analyzer.js","sourceRoot":"","sources":["../../src/analyzers/git-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Configuration file loader for scry-sbcov
3
+ * Supports scry-sbcov.config.js, scry-sbcov.config.mjs, and package.json
4
+ */
5
+ import type { ScryConfig, CliOptions } from '../types/index.js';
6
+ declare const DEFAULT_CONFIG: ScryConfig;
7
+ /**
8
+ * Merge CLI options with config file and defaults
9
+ */
10
+ export declare function loadConfig(cliOptions: CliOptions, projectPath?: string): Promise<ScryConfig>;
11
+ export { DEFAULT_CONFIG };
12
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAEjF,QAAA,MAAM,cAAc,EAAE,UA4BrB,CAAC;AAgFF;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,UAAU,EACtB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,UAAU,CAAC,CAyDrB;AAmCD,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Configuration file loader for scry-sbcov
3
+ * Supports scry-sbcov.config.js, scry-sbcov.config.mjs, and package.json
4
+ */
5
+ import * as fs from 'node:fs';
6
+ import * as path from 'node:path';
7
+ import { pathToFileURL } from 'node:url';
8
+ const DEFAULT_CONFIG = {
9
+ include: ['src/**/*.tsx', 'src/**/*.jsx'],
10
+ exclude: ['**/*.test.tsx', '**/*.spec.tsx', '**/*.test.jsx', '**/*.spec.jsx', '**/index.tsx', '**/index.jsx', '**/__mocks__/**', '**/__tests__/**'],
11
+ storyPatterns: ['**/*.stories.tsx', '**/*.stories.ts', '**/*.stories.jsx', '**/*.stories.js'],
12
+ baseBranch: 'main',
13
+ enableGitAnalysis: true,
14
+ execute: false,
15
+ storybookUrl: 'http://localhost:6006',
16
+ storybookStaticDir: null,
17
+ executionTimeout: 15000,
18
+ thresholds: {
19
+ componentCoverage: 80,
20
+ propCoverage: 70,
21
+ variantCoverage: 60,
22
+ newCodeCoverage: 90,
23
+ },
24
+ outputPath: null,
25
+ scenarioPatterns: {
26
+ loading: ['isLoading', 'loading', 'isProcessing', 'pending', 'isFetching'],
27
+ error: ['isError', 'hasError', 'error', 'errorMessage', 'isInvalid'],
28
+ empty: ['isEmpty', 'empty', 'noData', 'hasData'],
29
+ disabled: ['disabled', 'isDisabled'],
30
+ open: ['isOpen', 'open', 'expanded', 'isExpanded'],
31
+ visible: ['isVisible', 'visible', 'hidden', 'isHidden'],
32
+ selected: ['isSelected', 'selected', 'checked', 'isChecked'],
33
+ active: ['isActive', 'active'],
34
+ },
35
+ componentStoryMapping: {},
36
+ };
37
+ /**
38
+ * Load configuration from file
39
+ */
40
+ async function loadConfigFile(configPath) {
41
+ const absolutePath = path.isAbsolute(configPath)
42
+ ? configPath
43
+ : path.resolve(process.cwd(), configPath);
44
+ if (!fs.existsSync(absolutePath)) {
45
+ return null;
46
+ }
47
+ try {
48
+ // ES module import for .js and .mjs files
49
+ if (absolutePath.endsWith('.js') || absolutePath.endsWith('.mjs')) {
50
+ const fileUrl = pathToFileURL(absolutePath).href;
51
+ const module = await import(fileUrl);
52
+ return module.default || module;
53
+ }
54
+ // JSON files
55
+ if (absolutePath.endsWith('.json')) {
56
+ const content = fs.readFileSync(absolutePath, 'utf-8');
57
+ return JSON.parse(content);
58
+ }
59
+ return null;
60
+ }
61
+ catch (error) {
62
+ console.error(`Error loading config file ${configPath}:`, error);
63
+ return null;
64
+ }
65
+ }
66
+ /**
67
+ * Load configuration from package.json
68
+ */
69
+ function loadPackageJsonConfig(projectPath) {
70
+ const packageJsonPath = path.join(projectPath, 'package.json');
71
+ if (!fs.existsSync(packageJsonPath)) {
72
+ return null;
73
+ }
74
+ try {
75
+ const content = fs.readFileSync(packageJsonPath, 'utf-8');
76
+ const packageJson = JSON.parse(content);
77
+ return packageJson['scry-sbcov'] || null;
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ }
83
+ /**
84
+ * Find and load configuration automatically
85
+ */
86
+ async function autoLoadConfig(projectPath) {
87
+ const configFiles = [
88
+ 'scry-sbcov.config.js',
89
+ 'scry-sbcov.config.mjs',
90
+ 'scry-sbcov.config.json',
91
+ '.scry-sbcov.js',
92
+ '.scry-sbcov.json',
93
+ ];
94
+ for (const configFile of configFiles) {
95
+ const configPath = path.join(projectPath, configFile);
96
+ if (fs.existsSync(configPath)) {
97
+ const config = await loadConfigFile(configPath);
98
+ if (config) {
99
+ return config;
100
+ }
101
+ }
102
+ }
103
+ // Fall back to package.json
104
+ return loadPackageJsonConfig(projectPath);
105
+ }
106
+ /**
107
+ * Merge CLI options with config file and defaults
108
+ */
109
+ export async function loadConfig(cliOptions, projectPath = process.cwd()) {
110
+ // Start with defaults
111
+ let config = { ...DEFAULT_CONFIG };
112
+ // Load from config file if specified, or auto-detect
113
+ let fileConfig = null;
114
+ if (cliOptions.config) {
115
+ fileConfig = await loadConfigFile(cliOptions.config);
116
+ if (!fileConfig) {
117
+ console.warn(`Warning: Config file ${cliOptions.config} not found, using defaults`);
118
+ }
119
+ }
120
+ else {
121
+ fileConfig = await autoLoadConfig(projectPath);
122
+ }
123
+ // Merge file config
124
+ if (fileConfig) {
125
+ config = mergeConfig(config, fileConfig);
126
+ }
127
+ // Override with CLI options
128
+ if (cliOptions.include) {
129
+ config.include = cliOptions.include.split(',').map(s => s.trim());
130
+ }
131
+ if (cliOptions.exclude) {
132
+ config.exclude = cliOptions.exclude.split(',').map(s => s.trim());
133
+ }
134
+ if (cliOptions.stories) {
135
+ config.storyPatterns = cliOptions.stories.split(',').map(s => s.trim());
136
+ }
137
+ if (cliOptions.base) {
138
+ config.baseBranch = cliOptions.base;
139
+ }
140
+ if (cliOptions.noGit) {
141
+ config.enableGitAnalysis = false;
142
+ }
143
+ if (cliOptions.execute) {
144
+ config.execute = true;
145
+ }
146
+ if (cliOptions.storybookUrl) {
147
+ config.storybookUrl = cliOptions.storybookUrl;
148
+ }
149
+ if (cliOptions.storybookStatic) {
150
+ config.storybookStaticDir = cliOptions.storybookStatic;
151
+ }
152
+ if (cliOptions.output) {
153
+ config.outputPath = cliOptions.output;
154
+ }
155
+ if (cliOptions.thresholdComponent !== undefined) {
156
+ config.thresholds.componentCoverage = cliOptions.thresholdComponent;
157
+ }
158
+ if (cliOptions.thresholdNewCode !== undefined) {
159
+ config.thresholds.newCodeCoverage = cliOptions.thresholdNewCode;
160
+ }
161
+ return config;
162
+ }
163
+ /**
164
+ * Deep merge configuration objects
165
+ */
166
+ function mergeConfig(base, override) {
167
+ const result = { ...base };
168
+ for (const key of Object.keys(override)) {
169
+ const value = override[key];
170
+ if (value === undefined)
171
+ continue;
172
+ if (key === 'thresholds' && typeof value === 'object') {
173
+ result.thresholds = {
174
+ ...base.thresholds,
175
+ ...value,
176
+ };
177
+ }
178
+ else if (key === 'scenarioPatterns' && typeof value === 'object') {
179
+ result.scenarioPatterns = {
180
+ ...base.scenarioPatterns,
181
+ ...value,
182
+ };
183
+ }
184
+ else if (key === 'componentStoryMapping' && typeof value === 'object') {
185
+ result.componentStoryMapping = {
186
+ ...base.componentStoryMapping,
187
+ ...value,
188
+ };
189
+ }
190
+ else {
191
+ result[key] = value;
192
+ }
193
+ }
194
+ return result;
195
+ }
196
+ export { DEFAULT_CONFIG };
197
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scry-sbcov CLI Entry Point
4
+ * Storybook story coverage analyzer for React component libraries
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}