test-gen-js 0.1.3 โ†’ 0.2.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/CHANGELOG.md CHANGED
@@ -9,9 +9,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ### Planned
11
11
  - Directory scanning (`scan` command)
12
- - Configuration file support (`.testgenrc.js`)
13
12
  - Node.js backend support
14
13
  - Custom templates
14
+ - Watch mode
15
+ - Prettier/ESLint integration
16
+
17
+ ---
18
+
19
+ ## [0.2.0] - 2024-01-07
20
+
21
+ ### Added
22
+ - ๐ŸŽ‰ `init` command - Initialize test-gen-js configuration
23
+ - Creates `.testgenrc.js` configuration file
24
+ - Sets up Git hooks with husky and lint-staged
25
+ - Pre-commit hook runs tests automatically before each commit
26
+ - ๐ŸŽ‰ `scan` command - Scan directory and generate tests for all files
27
+ - Batch generate tests for entire directories
28
+ - Dry-run mode to preview without creating files
29
+ - Progress tracking and summary report
30
+ - Skip files with no components/functions
31
+ - Configuration file support (`.testgenrc.js`)
32
+
33
+ ### Commands
34
+ - `test-gen-js init` - Initialize configuration and Git hooks
35
+ - `--no-hooks` - Skip Git hooks setup
36
+ - `--force` - Overwrite existing configuration
37
+ - `test-gen-js scan <directory>` - Scan and generate tests
38
+ - `--dry-run` - Preview without creating files
39
+ - `--pattern` - File pattern to match
40
+ - `--exclude` - Patterns to exclude
41
+ - `--snapshot` - Include snapshot tests
42
+ - `--overwrite` - Overwrite existing files
43
+
44
+ ### How Pre-commit Testing Works
45
+ 1. Run `npx test-gen-js init` in your project
46
+ 2. Husky and lint-staged are automatically installed
47
+ 3. When you run `git commit`, tests run for staged files
48
+ 4. If tests pass, commit proceeds; if tests fail, commit is blocked
15
49
 
16
50
  ---
17
51
 
@@ -65,7 +99,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
65
99
 
66
100
  ---
67
101
 
68
- [Unreleased]: https://github.com/liveforownhappiness/test-gen-js/compare/v0.1.0...HEAD
102
+ [Unreleased]: https://github.com/liveforownhappiness/test-gen-js/compare/v0.2.0...HEAD
103
+ [0.2.0]: https://github.com/liveforownhappiness/test-gen-js/compare/v0.1.0...v0.2.0
69
104
  [0.1.0]: https://github.com/liveforownhappiness/test-gen-js/releases/tag/v0.1.0
70
105
  [0.0.1]: https://github.com/liveforownhappiness/test-gen-js/releases/tag/v0.0.1
71
106
 
package/README.md CHANGED
@@ -47,6 +47,44 @@ npm install -D test-gen-js
47
47
 
48
48
  ---
49
49
 
50
+ ## ๐Ÿ› ๏ธ Setup with Git Hooks (Recommended)
51
+
52
+ Set up automatic testing before each commit:
53
+
54
+ ```bash
55
+ # 1. Install as dev dependency
56
+ npm install -D test-gen-js
57
+
58
+ # 2. Initialize (creates config + sets up Git hooks)
59
+ npx test-gen-js init
60
+
61
+ # 3. Generate tests for your components
62
+ npx test-gen-js generate src/components/Button.tsx
63
+
64
+ # 4. Now when you commit, tests run automatically!
65
+ git add .
66
+ git commit -m "feat: add Button component"
67
+ # ๐Ÿงช Running tests before commit...
68
+ # โœ… Tests passed!
69
+ ```
70
+
71
+ ### What `init` Does
72
+
73
+ | Item | Description |
74
+ |------|-------------|
75
+ | `.testgenrc.js` | Creates configuration file |
76
+ | `husky` | Installs Git hooks manager |
77
+ | `lint-staged` | Runs tests on staged files only |
78
+ | `pre-commit` | Tests run before each commit |
79
+
80
+ ### Pre-commit Behavior
81
+
82
+ - โœ… Tests pass โ†’ Commit proceeds
83
+ - โŒ Tests fail โ†’ Commit is **blocked**
84
+ - โญ๏ธ Skip with `git commit --no-verify` (not recommended)
85
+
86
+ ---
87
+
50
88
  ## ๐Ÿš€ Quick Start
51
89
 
52
90
  ### 1. Generate React Component Tests
@@ -314,28 +352,109 @@ tgjs g src/components/Header.tsx -o __tests__/Header.test.tsx
314
352
  tgjs g src/components/Header.tsx --overwrite
315
353
  ```
316
354
 
317
- ### `scan` (alias: `s`) - Coming in v0.2.0
355
+ ### `scan` (alias: `s`)
318
356
 
319
- Scan directory and generate tests for all files
357
+ Scan directory and generate tests for all files at once.
320
358
 
321
359
  ```bash
322
- # Basic usage
323
- test-gen-js scan <directory>
360
+ # Basic usage - scan entire src folder
361
+ test-gen-js scan src
362
+ tgjs s src
324
363
 
325
364
  # Options
326
365
  --dry-run # Preview without creating files
327
366
  --pattern <glob> # File pattern (default: **/*.{ts,tsx,js,jsx})
328
367
  --exclude <patterns> # Patterns to exclude
368
+ --snapshot # Include snapshot tests
369
+ --overwrite # Overwrite existing test files
370
+ ```
371
+
372
+ **Examples:**
373
+
374
+ ```bash
375
+ # Preview what will be generated (no files created)
376
+ tgjs scan src --dry-run
377
+
378
+ # Generate tests for all components in src/components
379
+ tgjs scan src/components
380
+
381
+ # Generate tests with snapshots
382
+ tgjs scan src --snapshot
383
+
384
+ # Overwrite existing test files
385
+ tgjs scan src --overwrite
386
+
387
+ # Custom pattern (only .tsx files)
388
+ tgjs scan src --pattern "**/*.tsx"
329
389
  ```
330
390
 
331
- ### `init` - Coming in v0.2.0
391
+ **Output example:**
332
392
 
333
- Initialize configuration file
393
+ ```
394
+ ๐Ÿ” Scanning directory: /your-project/src
395
+ ๐Ÿ“ Pattern: **/*.{ts,tsx,js,jsx}
396
+ ๐Ÿšซ Exclude: node_modules/**, dist/**, **/*.test.*, ...
397
+
398
+ ๐Ÿ“ฆ Processing files...
399
+
400
+ [1/5] โœ… components/Button.tsx โ†’ components/Button.test.tsx
401
+ [2/5] โœ… components/Card.tsx โ†’ components/Card.test.tsx
402
+ [3/5] โญ๏ธ components/index.ts (no components/functions)
403
+ [4/5] โœ… utils/helpers.ts โ†’ utils/helpers.test.ts
404
+ [5/5] โŒ utils/broken.ts: Parse error
405
+
406
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
407
+ ๐Ÿ“Š Summary
408
+ โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
409
+ Total files: 5
410
+ Created: 3
411
+ Updated: 0
412
+ Skipped: 1
413
+ Failed: 1
414
+ ```
415
+
416
+ ### `init`
417
+
418
+ Initialize test-gen-js configuration and set up Git hooks for pre-commit testing.
334
419
 
335
420
  ```bash
421
+ # Basic usage - creates config and sets up Git hooks
336
422
  test-gen-js init
423
+
424
+ # Options
425
+ --no-hooks # Skip Git hooks setup
426
+ --force # Overwrite existing configuration
337
427
  ```
338
428
 
429
+ **What it does:**
430
+
431
+ 1. Creates `.testgenrc.js` configuration file
432
+ 2. Installs `husky` and `lint-staged` (if not present)
433
+ 3. Sets up pre-commit hook to run tests before each commit
434
+
435
+ **Example:**
436
+
437
+ ```bash
438
+ # Install test-gen-js as dev dependency
439
+ npm install -D test-gen-js
440
+
441
+ # Initialize (sets up Git hooks)
442
+ npx test-gen-js init
443
+
444
+ # Now when you commit, tests will run automatically!
445
+ git add .
446
+ git commit -m "feat: add new component"
447
+ # ๐Ÿงช Running tests before commit...
448
+ # โœ… Tests passed, commit successful!
449
+ ```
450
+
451
+ **Pre-commit behavior:**
452
+
453
+ - Tests run only for **staged files** (files you're committing)
454
+ - If tests fail, commit is **blocked**
455
+ - If tests pass, commit proceeds normally
456
+ - Use `git commit --no-verify` to skip tests (not recommended)
457
+
339
458
  ---
340
459
 
341
460
  ## ๐Ÿ“Š Supported Types
@@ -433,10 +552,11 @@ test-gen-js init
433
552
  - [x] GitHub Actions CI/CD
434
553
  - [x] Automated npm publishing
435
554
 
436
- ### ๐Ÿ”œ Phase 2: Extended Features (v0.2.x)
555
+ ### โœ… Phase 2: Extended Features (v0.2.x) - Current
437
556
 
438
- - [ ] Directory scanning and batch generation (`scan` command)
439
- - [ ] Configuration file support (`.testgenrc.js`)
557
+ - [x] Directory scanning and batch generation (`scan` command)
558
+ - [x] Configuration file support (`.testgenrc.js`)
559
+ - [x] Git hooks for pre-commit testing (`init` command)
440
560
  - [ ] Node.js backend support
441
561
  - [ ] Improved mock generation
442
562
  - [ ] Prettier/ESLint integration
package/dist/cli.js CHANGED
@@ -9,6 +9,7 @@ const chalk_1 = __importDefault(require("chalk"));
9
9
  const ora_1 = __importDefault(require("ora"));
10
10
  const analyzer_1 = require("./analyzer");
11
11
  const generator_1 = require("./generator");
12
+ const commands_1 = require("./commands");
12
13
  const program = new commander_1.Command();
13
14
  program
14
15
  .name('test-gen-js')
@@ -71,22 +72,22 @@ program
71
72
  .description('Scan directory and generate tests for all files')
72
73
  .option('--dry-run', 'Preview without creating files', false)
73
74
  .option('--pattern <glob>', 'File pattern to match', '**/*.{ts,tsx,js,jsx}')
74
- .option('--exclude <patterns...>', 'Patterns to exclude', ['node_modules', 'dist', '*.test.*', '*.spec.*'])
75
+ .option('--exclude <patterns...>', 'Patterns to exclude')
76
+ .option('--snapshot', 'Include snapshot tests', false)
77
+ .option('--overwrite', 'Overwrite existing test files', false)
75
78
  .action(async (directory, options) => {
76
- const spinner = (0, ora_1.default)('Scanning directory...').start();
77
79
  try {
78
- // TODO: Implement directory scanning
79
- spinner.info(chalk_1.default.yellow('Directory scanning is coming in v0.2.0'));
80
- console.log('');
81
- console.log(chalk_1.default.cyan('Directory:'), directory);
82
- console.log(chalk_1.default.cyan('Pattern:'), options.pattern);
83
- console.log(chalk_1.default.cyan('Exclude:'), options.exclude.join(', '));
84
- console.log(chalk_1.default.cyan('Dry run:'), options.dryRun);
80
+ await (0, commands_1.scanCommand)(directory, {
81
+ pattern: options.pattern,
82
+ exclude: options.exclude,
83
+ dryRun: options.dryRun,
84
+ snapshot: options.snapshot,
85
+ overwrite: options.overwrite,
86
+ });
85
87
  }
86
88
  catch (error) {
87
- spinner.fail(chalk_1.default.red('Failed to scan directory'));
88
89
  if (error instanceof Error) {
89
- console.error(chalk_1.default.red(error.message));
90
+ console.error(chalk_1.default.red('Error: ' + error.message));
90
91
  }
91
92
  process.exit(1);
92
93
  }
@@ -94,17 +95,19 @@ program
94
95
  // Init command
95
96
  program
96
97
  .command('init')
97
- .description('Initialize test-gen-js configuration')
98
- .action(async () => {
99
- const spinner = (0, ora_1.default)('Creating configuration...').start();
98
+ .description('Initialize test-gen-js configuration and Git hooks')
99
+ .option('--no-hooks', 'Skip Git hooks setup')
100
+ .option('--force', 'Overwrite existing configuration', false)
101
+ .action(async (options) => {
100
102
  try {
101
- // TODO: Implement config initialization
102
- spinner.info(chalk_1.default.yellow('Configuration file is coming in v0.2.0'));
103
+ await (0, commands_1.initCommand)({
104
+ hooks: options.hooks,
105
+ force: options.force,
106
+ });
103
107
  }
104
108
  catch (error) {
105
- spinner.fail(chalk_1.default.red('Failed to create configuration'));
106
109
  if (error instanceof Error) {
107
- console.error(chalk_1.default.red(error.message));
110
+ console.error(chalk_1.default.red('Error: ' + error.message));
108
111
  }
109
112
  process.exit(1);
110
113
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Commands module
3
+ */
4
+ export { initCommand } from './init';
5
+ export { scanCommand } from './scan';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Commands module
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.scanCommand = exports.initCommand = void 0;
7
+ var init_1 = require("./init");
8
+ Object.defineProperty(exports, "initCommand", { enumerable: true, get: function () { return init_1.initCommand; } });
9
+ var scan_1 = require("./scan");
10
+ Object.defineProperty(exports, "scanCommand", { enumerable: true, get: function () { return scan_1.scanCommand; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+BAAqC;AAA5B,mGAAA,WAAW,OAAA;AACpB,+BAAqC;AAA5B,mGAAA,WAAW,OAAA"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Init Command
3
+ * Sets up test-gen-js configuration and Git hooks for pre-commit testing
4
+ */
5
+ interface InitOptions {
6
+ hooks?: boolean;
7
+ force?: boolean;
8
+ }
9
+ /**
10
+ * Initialize test-gen-js in a project
11
+ */
12
+ export declare function initCommand(options?: InitOptions): Promise<void>;
13
+ export default initCommand;
14
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1E;AA8MD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ /**
3
+ * Init Command
4
+ * Sets up test-gen-js configuration and Git hooks for pre-commit testing
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.initCommand = initCommand;
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const ora_1 = __importDefault(require("ora"));
15
+ const child_process_1 = require("child_process");
16
+ /**
17
+ * Initialize test-gen-js in a project
18
+ */
19
+ async function initCommand(options = {}) {
20
+ const { hooks = true, force = false } = options;
21
+ const cwd = process.cwd();
22
+ console.log('');
23
+ console.log(chalk_1.default.cyan('๐Ÿงช Initializing test-gen-js...'));
24
+ console.log('');
25
+ // Check if package.json exists
26
+ const packageJsonPath = path_1.default.join(cwd, 'package.json');
27
+ if (!(await fs_extra_1.default.pathExists(packageJsonPath))) {
28
+ throw new Error('package.json not found. Please run this command in a Node.js project.');
29
+ }
30
+ // Create configuration file
31
+ await createConfigFile(cwd, force);
32
+ // Setup Git hooks if requested
33
+ if (hooks) {
34
+ await setupGitHooks(cwd);
35
+ }
36
+ console.log('');
37
+ console.log(chalk_1.default.green('โœ… test-gen-js initialized successfully!'));
38
+ console.log('');
39
+ console.log(chalk_1.default.cyan('Next steps:'));
40
+ console.log(' 1. Generate tests: ' + chalk_1.default.yellow('npx test-gen-js generate src/components/Button.tsx'));
41
+ console.log(' 2. Run tests: ' + chalk_1.default.yellow('npm test'));
42
+ console.log(' 3. Commit your code - tests will run automatically!');
43
+ console.log('');
44
+ }
45
+ /**
46
+ * Create .testgenrc.js configuration file
47
+ */
48
+ async function createConfigFile(cwd, force) {
49
+ const spinner = (0, ora_1.default)('Creating configuration file...').start();
50
+ const configPath = path_1.default.join(cwd, '.testgenrc.js');
51
+ if ((await fs_extra_1.default.pathExists(configPath)) && !force) {
52
+ spinner.info(chalk_1.default.yellow('.testgenrc.js already exists. Use --force to overwrite.'));
53
+ return;
54
+ }
55
+ const configContent = `/**
56
+ * test-gen-js configuration
57
+ * @see https://github.com/liveforownhappiness/test-gen-js
58
+ */
59
+ module.exports = {
60
+ // File patterns to include
61
+ include: ['src/**/*.{ts,tsx,js,jsx}'],
62
+
63
+ // File patterns to exclude
64
+ exclude: [
65
+ 'node_modules',
66
+ 'dist',
67
+ 'build',
68
+ '**/*.test.*',
69
+ '**/*.spec.*',
70
+ '**/__tests__/**',
71
+ '**/__mocks__/**',
72
+ ],
73
+
74
+ // Generator options
75
+ generator: {
76
+ // Include snapshot tests
77
+ snapshot: false,
78
+
79
+ // Auto-generate mocks
80
+ mock: true,
81
+
82
+ // Test file suffix (.test or .spec)
83
+ testSuffix: '.test',
84
+
85
+ // Overwrite existing test files
86
+ overwrite: false,
87
+ },
88
+
89
+ // Template options
90
+ templates: {
91
+ // Custom templates directory (optional)
92
+ // dir: './templates',
93
+ },
94
+ };
95
+ `;
96
+ await fs_extra_1.default.writeFile(configPath, configContent);
97
+ spinner.succeed(chalk_1.default.green('Created .testgenrc.js'));
98
+ }
99
+ /**
100
+ * Setup Git hooks with husky and lint-staged
101
+ */
102
+ async function setupGitHooks(cwd) {
103
+ const spinner = (0, ora_1.default)('Setting up Git hooks...').start();
104
+ const packageJsonPath = path_1.default.join(cwd, 'package.json');
105
+ try {
106
+ // Read package.json
107
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
108
+ // Check if husky is already installed
109
+ const hasHusky = packageJson.devDependencies?.husky || packageJson.dependencies?.husky;
110
+ const hasLintStaged = packageJson.devDependencies?.['lint-staged'] || packageJson.dependencies?.['lint-staged'];
111
+ // Install husky and lint-staged if not present
112
+ if (!hasHusky || !hasLintStaged) {
113
+ spinner.text = 'Installing husky and lint-staged...';
114
+ const packagesToInstall = [];
115
+ if (!hasHusky)
116
+ packagesToInstall.push('husky');
117
+ if (!hasLintStaged)
118
+ packagesToInstall.push('lint-staged');
119
+ try {
120
+ (0, child_process_1.execSync)(`npm install -D ${packagesToInstall.join(' ')}`, {
121
+ cwd,
122
+ stdio: 'pipe',
123
+ });
124
+ }
125
+ catch {
126
+ spinner.warn(chalk_1.default.yellow('Could not install packages automatically. Please run:'));
127
+ console.log(chalk_1.default.cyan(` npm install -D ${packagesToInstall.join(' ')}`));
128
+ }
129
+ }
130
+ // Re-read package.json after potential install
131
+ const updatedPackageJson = await fs_extra_1.default.readJson(packageJsonPath);
132
+ // Add lint-staged configuration
133
+ if (!updatedPackageJson['lint-staged']) {
134
+ updatedPackageJson['lint-staged'] = {
135
+ '*.{ts,tsx,js,jsx}': ['npm test -- --bail --findRelatedTests --passWithNoTests'],
136
+ };
137
+ }
138
+ // Add prepare script for husky
139
+ if (!updatedPackageJson.scripts) {
140
+ updatedPackageJson.scripts = {};
141
+ }
142
+ if (!updatedPackageJson.scripts.prepare) {
143
+ updatedPackageJson.scripts.prepare = 'husky install';
144
+ }
145
+ // Write updated package.json
146
+ await fs_extra_1.default.writeJson(packageJsonPath, updatedPackageJson, { spaces: 2 });
147
+ // Initialize husky
148
+ spinner.text = 'Initializing husky...';
149
+ const huskyDir = path_1.default.join(cwd, '.husky');
150
+ if (!(await fs_extra_1.default.pathExists(huskyDir))) {
151
+ try {
152
+ (0, child_process_1.execSync)('npx husky install', { cwd, stdio: 'pipe' });
153
+ }
154
+ catch {
155
+ // husky install might fail if .git doesn't exist, that's ok
156
+ }
157
+ }
158
+ // Create pre-commit hook
159
+ spinner.text = 'Creating pre-commit hook...';
160
+ await fs_extra_1.default.ensureDir(huskyDir);
161
+ const preCommitPath = path_1.default.join(huskyDir, 'pre-commit');
162
+ const preCommitContent = `#!/usr/bin/env sh
163
+ . "$(dirname -- "$0")/_/husky.sh"
164
+
165
+ echo "๐Ÿงช Running tests before commit..."
166
+ npx lint-staged
167
+ `;
168
+ await fs_extra_1.default.writeFile(preCommitPath, preCommitContent);
169
+ await fs_extra_1.default.chmod(preCommitPath, '755');
170
+ // Create husky.sh helper if it doesn't exist
171
+ const huskyHelperDir = path_1.default.join(huskyDir, '_');
172
+ await fs_extra_1.default.ensureDir(huskyHelperDir);
173
+ const huskyShPath = path_1.default.join(huskyHelperDir, 'husky.sh');
174
+ if (!(await fs_extra_1.default.pathExists(huskyShPath))) {
175
+ const huskyShContent = `#!/usr/bin/env sh
176
+ if [ -z "$husky_skip_init" ]; then
177
+ debug () {
178
+ if [ "$HUSKY_DEBUG" = "1" ]; then
179
+ echo "husky (debug) - $1"
180
+ fi
181
+ }
182
+
183
+ readonly hook_name="$(basename -- "$0")"
184
+ debug "starting $hook_name..."
185
+
186
+ if [ "$HUSKY" = "0" ]; then
187
+ debug "HUSKY env variable is set to 0, skipping hook"
188
+ exit 0
189
+ fi
190
+
191
+ if [ -f ~/.huskyrc ]; then
192
+ debug "sourcing ~/.huskyrc"
193
+ . ~/.huskyrc
194
+ fi
195
+
196
+ readonly husky_skip_init=1
197
+ export husky_skip_init
198
+ sh -e "$0" "$@"
199
+ exitCode="$?"
200
+
201
+ if [ $exitCode != 0 ]; then
202
+ echo "husky - $hook_name hook exited with code $exitCode (error)"
203
+ fi
204
+
205
+ if [ $exitCode = 127 ]; then
206
+ echo "husky - command not found in PATH=$PATH"
207
+ fi
208
+
209
+ exit $exitCode
210
+ fi
211
+ `;
212
+ await fs_extra_1.default.writeFile(huskyShPath, huskyShContent);
213
+ await fs_extra_1.default.chmod(huskyShPath, '755');
214
+ }
215
+ spinner.succeed(chalk_1.default.green('Git hooks configured!'));
216
+ console.log('');
217
+ console.log(chalk_1.default.cyan('๐Ÿ“‹ What was set up:'));
218
+ console.log(' โ€ข ' + chalk_1.default.yellow('husky') + ' - Git hooks manager');
219
+ console.log(' โ€ข ' + chalk_1.default.yellow('lint-staged') + ' - Run tests on staged files');
220
+ console.log(' โ€ข ' + chalk_1.default.yellow('pre-commit hook') + ' - Tests run before each commit');
221
+ console.log('');
222
+ console.log(chalk_1.default.cyan('๐Ÿ’ก How it works:'));
223
+ console.log(' When you run ' + chalk_1.default.yellow('git commit') + ', tests for changed files will run automatically.');
224
+ console.log(' If tests fail, the commit will be blocked.');
225
+ }
226
+ catch (error) {
227
+ spinner.fail(chalk_1.default.red('Failed to setup Git hooks'));
228
+ throw error;
229
+ }
230
+ }
231
+ exports.default = initCommand;
232
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Scan Command
3
+ * Scans a directory and generates tests for all components/functions
4
+ */
5
+ import type { GeneratedTest } from '../types';
6
+ interface ScanOptions {
7
+ pattern?: string;
8
+ exclude?: string[];
9
+ dryRun?: boolean;
10
+ snapshot?: boolean;
11
+ overwrite?: boolean;
12
+ }
13
+ interface ScanResult {
14
+ total: number;
15
+ created: number;
16
+ updated: number;
17
+ skipped: number;
18
+ failed: number;
19
+ files: GeneratedTest[];
20
+ errors: Array<{
21
+ file: string;
22
+ error: string;
23
+ }>;
24
+ }
25
+ /**
26
+ * Scan a directory and generate tests for all files
27
+ */
28
+ export declare function scanCommand(directory: string, options?: ScanOptions): Promise<ScanResult>;
29
+ export default scanCommand;
30
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,KAAK,EAAoB,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CA0JrB;AAYD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ /**
3
+ * Scan Command
4
+ * Scans a directory and generates tests for all components/functions
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.scanCommand = scanCommand;
11
+ const fs_extra_1 = __importDefault(require("fs-extra"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const ora_1 = __importDefault(require("ora"));
15
+ const glob_1 = require("glob");
16
+ const analyzer_1 = require("../analyzer");
17
+ const generator_1 = require("../generator");
18
+ /**
19
+ * Scan a directory and generate tests for all files
20
+ */
21
+ async function scanCommand(directory, options = {}) {
22
+ const { pattern = '**/*.{ts,tsx,js,jsx}', exclude = [
23
+ 'node_modules/**',
24
+ 'dist/**',
25
+ 'build/**',
26
+ '**/*.test.*',
27
+ '**/*.spec.*',
28
+ '**/__tests__/**',
29
+ '**/__mocks__/**',
30
+ '**/coverage/**',
31
+ ], dryRun = false, snapshot = false, overwrite = false, } = options;
32
+ const cwd = process.cwd();
33
+ const targetDir = path_1.default.resolve(cwd, directory);
34
+ // Check if directory exists
35
+ if (!(await fs_extra_1.default.pathExists(targetDir))) {
36
+ throw new Error(`Directory not found: ${targetDir}`);
37
+ }
38
+ console.log('');
39
+ console.log(chalk_1.default.cyan('๐Ÿ” Scanning directory:'), targetDir);
40
+ console.log(chalk_1.default.cyan('๐Ÿ“ Pattern:'), pattern);
41
+ console.log(chalk_1.default.cyan('๐Ÿšซ Exclude:'), exclude.join(', '));
42
+ if (dryRun) {
43
+ console.log(chalk_1.default.yellow('โš ๏ธ Dry run mode - no files will be created'));
44
+ }
45
+ console.log('');
46
+ // Find all matching files
47
+ const spinner = (0, ora_1.default)('Finding files...').start();
48
+ const files = await (0, glob_1.glob)(pattern, {
49
+ cwd: targetDir,
50
+ ignore: exclude,
51
+ absolute: true,
52
+ nodir: true,
53
+ });
54
+ spinner.succeed(`Found ${files.length} files`);
55
+ if (files.length === 0) {
56
+ console.log(chalk_1.default.yellow('No files found matching the pattern.'));
57
+ return {
58
+ total: 0,
59
+ created: 0,
60
+ updated: 0,
61
+ skipped: 0,
62
+ failed: 0,
63
+ files: [],
64
+ errors: [],
65
+ };
66
+ }
67
+ // Process each file
68
+ const result = {
69
+ total: files.length,
70
+ created: 0,
71
+ updated: 0,
72
+ skipped: 0,
73
+ failed: 0,
74
+ files: [],
75
+ errors: [],
76
+ };
77
+ console.log('');
78
+ console.log(chalk_1.default.cyan('๐Ÿ“ฆ Processing files...'));
79
+ console.log('');
80
+ for (let i = 0; i < files.length; i++) {
81
+ const file = files[i];
82
+ const relativePath = path_1.default.relative(cwd, file);
83
+ const progress = `[${i + 1}/${files.length}]`;
84
+ try {
85
+ // Analyze the file
86
+ const analysis = await (0, analyzer_1.analyzeFile)(file);
87
+ // Skip files with no components or functions
88
+ if (analysis.components.length === 0 && analysis.functions.length === 0) {
89
+ console.log(chalk_1.default.gray(`${progress} โญ๏ธ ${relativePath} (no components/functions)`));
90
+ result.skipped++;
91
+ continue;
92
+ }
93
+ // Generate test (or preview in dry-run mode)
94
+ if (dryRun) {
95
+ const testPath = getTestFilePath(file);
96
+ const exists = await fs_extra_1.default.pathExists(testPath);
97
+ console.log(chalk_1.default.blue(`${progress} ๐Ÿ‘๏ธ ${relativePath}`) +
98
+ chalk_1.default.gray(` โ†’ ${path_1.default.relative(cwd, testPath)}`) +
99
+ (exists ? chalk_1.default.yellow(' (exists)') : chalk_1.default.green(' (new)')));
100
+ result.files.push({
101
+ code: '',
102
+ outputPath: testPath,
103
+ sourcePath: file,
104
+ action: exists ? 'skipped' : 'created',
105
+ });
106
+ }
107
+ else {
108
+ const generatorOptions = {
109
+ snapshot,
110
+ overwrite,
111
+ mock: true,
112
+ };
113
+ const testResult = await (0, generator_1.generateTest)(analysis, generatorOptions);
114
+ result.files.push(testResult);
115
+ const icon = testResult.action === 'created' ? 'โœ…' : testResult.action === 'updated' ? '๐Ÿ”„' : 'โญ๏ธ';
116
+ const color = testResult.action === 'created' ? chalk_1.default.green : testResult.action === 'updated' ? chalk_1.default.blue : chalk_1.default.gray;
117
+ console.log(color(`${progress} ${icon} ${relativePath}`) +
118
+ chalk_1.default.gray(` โ†’ ${path_1.default.relative(cwd, testResult.outputPath)}`));
119
+ if (testResult.action === 'created')
120
+ result.created++;
121
+ else if (testResult.action === 'updated')
122
+ result.updated++;
123
+ else
124
+ result.skipped++;
125
+ }
126
+ }
127
+ catch (error) {
128
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
129
+ console.log(chalk_1.default.red(`${progress} โŒ ${relativePath}: ${errorMessage}`));
130
+ result.failed++;
131
+ result.errors.push({ file: relativePath, error: errorMessage });
132
+ }
133
+ }
134
+ // Summary
135
+ console.log('');
136
+ console.log(chalk_1.default.cyan('โ•'.repeat(50)));
137
+ console.log(chalk_1.default.cyan('๐Ÿ“Š Summary'));
138
+ console.log(chalk_1.default.cyan('โ•'.repeat(50)));
139
+ console.log(` Total files: ${result.total}`);
140
+ console.log(chalk_1.default.green(` Created: ${result.created}`));
141
+ console.log(chalk_1.default.blue(` Updated: ${result.updated}`));
142
+ console.log(chalk_1.default.gray(` Skipped: ${result.skipped}`));
143
+ console.log(chalk_1.default.red(` Failed: ${result.failed}`));
144
+ console.log('');
145
+ if (dryRun) {
146
+ console.log(chalk_1.default.yellow('๐Ÿ’ก This was a dry run. Run without --dry-run to create files.'));
147
+ console.log('');
148
+ }
149
+ return result;
150
+ }
151
+ /**
152
+ * Get test file path for a source file
153
+ */
154
+ function getTestFilePath(sourcePath) {
155
+ const ext = path_1.default.extname(sourcePath);
156
+ const baseName = path_1.default.basename(sourcePath, ext);
157
+ const dirName = path_1.default.dirname(sourcePath);
158
+ return path_1.default.join(dirName, `${baseName}.test${ext}`);
159
+ }
160
+ exports.default = scanCommand;
161
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "test-gen-js",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "Auto-generate test boilerplate code for JavaScript/TypeScript, React, and React Native projects",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",