react-scanner-ui 0.0.15 → 0.0.16

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/README.md CHANGED
@@ -1,11 +1,10 @@
1
- <div align="center">
2
- <img src="./logo.png" alt="React Scanner UI Logo" width="100" height="100">
3
-
4
- # React Scanner UI
1
+ A dashboard generator that transforms 'react-scanner' output into a portable, interactive component usage insights dashboard.
5
2
 
6
- ## Component scanner and visualization tool for React applications
3
+ <div display="flex" align-items="center" justify-content="center" flex-direction="column">
4
+ <img src="./logo.png" alt="React Scanner UI Logo" width="150" height="150">
5
+ <h1> React Scanner UI </h1>
7
6
  </div>
8
-
7
+
9
8
  [![npm version](https://badge.fury.io/js/react-scanner-ui.svg)](https://badge.fury.io/js/react-scanner-ui)
10
9
  [![GitHub stars](https://img.shields.io/github/stars/vimalmunjani/react-scanner-ui?style=social)](https://github.com/vimalmunjani/react-scanner-ui/stargazers)
11
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyHpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUnD"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUnD"}
@@ -3,6 +3,7 @@ import { fileURLToPath } from 'url';
3
3
  import { writeFileSync, mkdirSync, existsSync } from 'fs';
4
4
  import { checkPeerDependency } from '../utils/dependencies.js';
5
5
  import { getScanData } from '../utils/scannerConfig.js';
6
+ import { logger } from '../utils/index.js';
6
7
  // ESM equivalent of __dirname
7
8
  const __filename = fileURLToPath(import.meta.url);
8
9
  const __dirname = dirname(__filename);
@@ -23,20 +24,23 @@ function getUiRoot() {
23
24
  async function runBuild() {
24
25
  const consumerRoot = process.cwd();
25
26
  const outputDir = resolve(consumerRoot, '.react-scanner-ui');
26
- console.log('\nšŸ“¦ Building React Scanner UI...\n');
27
+ logger.infoBox('React Scanner UI', 'Building static files for production...');
27
28
  // Step 1: Get the scan data
28
- console.log(' āžœ Reading scan data...');
29
+ logger.startSpinner('Reading scan data...');
29
30
  const scanResult = await getScanData();
30
31
  if (scanResult.error) {
31
- console.error(`\nāŒ Error: ${scanResult.error}`);
32
+ logger.spinnerError('Failed to read scan data');
33
+ logger.errorBox('Error', scanResult.error);
32
34
  process.exit(1);
33
35
  }
34
36
  if (!scanResult.data) {
35
- console.error('\nāŒ Error: No scan data found.');
37
+ logger.spinnerError('Failed to read scan data');
38
+ logger.errorBox('Error', 'No scan data found.');
36
39
  process.exit(1);
37
40
  }
41
+ logger.spinnerSuccess('Scan data loaded');
38
42
  // Step 2: Build the UI with Vite
39
- console.log(' āžœ Building UI with Vite...');
43
+ logger.startSpinner('Building UI with Vite...');
40
44
  const { build } = await import('vite');
41
45
  const react = (await import('@vitejs/plugin-react')).default;
42
46
  const uiRoot = getUiRoot();
@@ -62,11 +66,13 @@ async function runBuild() {
62
66
  });
63
67
  }
64
68
  catch (error) {
65
- console.error('\nāŒ Vite build failed:', error);
69
+ logger.spinnerError('Vite build failed');
70
+ logger.errorBox('Build Error', String(error));
66
71
  process.exit(1);
67
72
  }
73
+ logger.spinnerSuccess('UI built successfully');
68
74
  // Step 3: Write the scan data as a JSON file
69
- console.log(' āžœ Embedding scan data...');
75
+ logger.startSpinner('Embedding scan data...');
70
76
  const scanDataPath = resolve(outputDir, 'scan-data.json');
71
77
  writeFileSync(scanDataPath, JSON.stringify({ data: scanResult.data, error: null }, null, 2));
72
78
  // Step 4: Create a custom index.html that loads scan data from the JSON file
@@ -91,11 +97,9 @@ async function runBuild() {
91
97
  // Inject the script before the closing </head> tag
92
98
  indexHtml = indexHtml.replace('</head>', `${injectScript}</head>`);
93
99
  writeFileSync(indexPath, indexHtml);
94
- console.log(`\nāœ… Build complete! Output: ${outputDir}\n`);
95
- console.log(' You can serve the static files with any web server:');
96
- console.log(` āžœ npx serve ${outputDir}`);
97
- console.log(` āžœ python -m http.server -d ${outputDir}`);
98
- console.log('');
100
+ logger.spinnerSuccess('Scan data embedded');
101
+ // Display build complete message
102
+ logger.buildComplete(outputDir, [`npx serve ${outputDir}`]);
99
103
  }
100
104
  export function buildCommand(program) {
101
105
  program
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAOlD"}
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUlD"}
@@ -1,9 +1,10 @@
1
+ import { logger } from '../utils/index.js';
1
2
  export function infoCommand(program) {
2
3
  program
3
4
  .command('info')
4
5
  .description('Coming soon')
5
6
  .action(() => {
6
- console.log('Coming soon...');
7
+ logger.infoBox('Coming Soon', 'This feature is currently under development.\nStay tuned for updates!');
7
8
  });
8
9
  }
9
10
  //# sourceMappingURL=info.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,CAAC,OAAO,CACZ,aAAa,EACb,uEAAuE,CACxE,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBlD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BlD"}
@@ -1,21 +1,24 @@
1
- import { isReactScannerInstalled, promptInstallReactScanner, installReactScanner, createReactScannerConfig, } from '../utils/index.js';
1
+ import { isReactScannerInstalled, promptInstallReactScanner, installReactScanner, createReactScannerConfig, logger, } from '../utils/index.js';
2
2
  export function initCommand(program) {
3
3
  program
4
4
  .command('init')
5
5
  .description('Initialize react-scanner configuration')
6
6
  .action(async () => {
7
+ logger.infoBox('React Scanner UI', 'Initializing your project...');
7
8
  if (!isReactScannerInstalled()) {
8
9
  const shouldInstall = await promptInstallReactScanner();
9
10
  if (shouldInstall) {
10
11
  installReactScanner();
11
12
  }
12
13
  else {
13
- console.log('react-scanner is required to continue. Exiting.');
14
+ logger.errorBox('Installation Required', 'react-scanner is required to continue.\nPlease install it manually and try again.');
14
15
  process.exit(1);
15
16
  }
16
17
  }
17
18
  createReactScannerConfig();
18
- console.log('Initialization complete.');
19
+ logger.successBox('Initialization Complete', 'Your project is now configured for React Scanner UI.\nRun ' +
20
+ logger.bold('react-scanner-ui start') +
21
+ ' to begin.');
19
22
  });
20
23
  }
21
24
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACxD,IAAI,aAAa,EAAE,CAAC;gBAClB,mBAAmB,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,wBAAwB,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,MAAM,GACP,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,8BAA8B,CAAC,CAAC;QAEnE,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACxD,IAAI,aAAa,EAAE,CAAC;gBAClB,mBAAmB,EAAE,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,QAAQ,CACb,uBAAuB,EACvB,mFAAmF,CACpF,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,wBAAwB,EAAE,CAAC;QAC3B,MAAM,CAAC,UAAU,CACf,yBAAyB,EACzB,4DAA4D;YAC1D,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC;YACrC,YAAY,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoEpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoEnD"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqEnD"}
@@ -2,6 +2,7 @@ import { createInterface } from 'readline';
2
2
  import { checkPeerDependency } from '../utils/dependencies.js';
3
3
  import { getServerPort } from '../utils/port.js';
4
4
  import { startServer } from '../server/index.js';
5
+ import { logger } from '../utils/index.js';
5
6
  const DEFAULT_PORT = 3000;
6
7
  /**
7
8
  * Prompt user to confirm using a different port (like Storybook does)
@@ -12,7 +13,8 @@ async function promptForPortChange(requestedPort, availablePort) {
12
13
  output: process.stdout,
13
14
  });
14
15
  return new Promise(resolve => {
15
- rl.question(`Port ${requestedPort} is not available. Would you like to run on port ${availablePort} instead? (Y/n): `, answer => {
16
+ logger.warning(`Port ${logger.bold(String(requestedPort))} is not available.`);
17
+ rl.question(` Would you like to run on port ${logger.bold(String(availablePort))} instead? (Y/n): `, answer => {
16
18
  rl.close();
17
19
  const normalizedAnswer = answer.trim().toLowerCase();
18
20
  // Default to yes if user just presses enter
@@ -42,12 +44,12 @@ async function openBrowser(url) {
42
44
  }
43
45
  exec(command, error => {
44
46
  if (error) {
45
- console.log(`Could not open browser automatically. Please visit: ${url}`);
47
+ logger.info(`Could not open browser automatically. Please visit: ${logger.link(url)}`);
46
48
  }
47
49
  });
48
50
  }
49
51
  catch {
50
- console.log(`Could not open browser automatically. Please visit: ${url}`);
52
+ logger.info(`Could not open browser automatically. Please visit: ${logger.link(url)}`);
51
53
  }
52
54
  }
53
55
  export function startCommand(program) {
@@ -62,7 +64,7 @@ export function startCommand(program) {
62
64
  checkPeerDependency();
63
65
  const requestedPort = parseInt(options.port, 10);
64
66
  if (isNaN(requestedPort) || requestedPort < 1 || requestedPort > 65535) {
65
- console.error('Error: Invalid port number. Please specify a port between 1 and 65535.');
67
+ logger.errorBox('Invalid Port', 'Please specify a port between 1 and 65535.');
66
68
  process.exit(1);
67
69
  }
68
70
  // Use detect-port to find an available port
@@ -75,13 +77,13 @@ export function startCommand(program) {
75
77
  !options.exactPort) {
76
78
  const shouldChangePort = await promptForPortChange(requestedPort, availablePort);
77
79
  if (!shouldChangePort) {
78
- console.log('Exiting.');
80
+ logger.info('Exiting.');
79
81
  process.exit(1);
80
82
  }
81
83
  }
82
84
  else if (availablePort !== requestedPort && options.ci) {
83
85
  // In CI mode, just log the port change
84
- console.log(`Port ${requestedPort} is not available. Using port ${availablePort} instead.`);
86
+ logger.warning(`Port ${logger.bold(String(requestedPort))} is not available. Using port ${logger.bold(String(availablePort))} instead.`);
85
87
  }
86
88
  try {
87
89
  await startServer(availablePort);
@@ -92,7 +94,7 @@ export function startCommand(program) {
92
94
  }
93
95
  }
94
96
  catch (error) {
95
- console.error('Failed to start server:', error);
97
+ logger.errorBox('Server Error', `Failed to start server: ${error}`);
96
98
  process.exit(1);
97
99
  }
98
100
  });
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AA0BA;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE7D"}
@@ -2,6 +2,7 @@ import { createServer as createHttpServer, } from 'http';
2
2
  import { resolve, dirname } from 'path';
3
3
  import { fileURLToPath } from 'url';
4
4
  import { getScanData } from '../utils/scannerConfig.js';
5
+ import { logger } from '../utils/index.js';
5
6
  // ESM equivalent of __dirname
6
7
  const __filename = fileURLToPath(import.meta.url);
7
8
  const __dirname = dirname(__filename);
@@ -21,6 +22,7 @@ function getUiRoot() {
21
22
  * (similar approach to Storybook's builder-vite)
22
23
  */
23
24
  export async function startServer(port) {
25
+ logger.startSpinner('Starting development server...');
24
26
  // Dynamically import Vite to create dev server in middleware mode
25
27
  const { createServer: createViteServer } = await import('vite');
26
28
  const uiRoot = getUiRoot();
@@ -48,15 +50,17 @@ export async function startServer(port) {
48
50
  });
49
51
  // Handle server errors
50
52
  server.on('error', (err) => {
51
- console.error('Server error:', err);
53
+ logger.spinnerError('Server error');
54
+ logger.errorBox('Server Error', err.message);
52
55
  vite.close();
53
56
  process.exit(1);
54
57
  });
55
58
  // Handle graceful shutdown
56
59
  const shutdown = async () => {
57
- console.log('\nShutting down...');
60
+ logger.info('Shutting down server...');
58
61
  await vite.close();
59
62
  server.close();
63
+ logger.success('Server stopped gracefully');
60
64
  process.exit(0);
61
65
  };
62
66
  process.on('SIGINT', shutdown);
@@ -64,9 +68,11 @@ export async function startServer(port) {
64
68
  return new Promise((resolvePromise, reject) => {
65
69
  server.on('error', reject);
66
70
  server.listen(port, '127.0.0.1', () => {
67
- console.log(`\nšŸš€ React Scanner UI is running at http://localhost:${port}\n`);
68
- console.log(' āžœ Hot Module Replacement enabled');
69
- console.log(' āžœ Press Ctrl+C to stop the server.\n');
71
+ logger.spinnerSuccess('Server started');
72
+ logger.serverInfo(port, [
73
+ 'Hot Module Replacement enabled',
74
+ 'Press Ctrl+C to stop the server',
75
+ ]);
70
76
  resolvePromise();
71
77
  });
72
78
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,gBAAgB,GAGjC,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,8BAA8B;AAC9B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;GAGG;AACH,SAAS,SAAS;IAChB,qDAAqD;IACrD,kCAAkC;IAClC,MAAM,UAAU,GAAG,SAAS,CAAC;IAE7B,8EAA8E;IAC9E,OAAO,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY;IAC5C,MAAM,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAC;IAEtD,kEAAkE;IAClE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC;QAC7C,MAAM,EAAE;YACN,cAAc,EAAE,IAAI;SACrB;QACD,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,yCAAyC;IACzC,MAAM,MAAM,GAAG,gBAAgB,CAC7B,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;QAE1B,mDAAmD;QACnD,IAAI,GAAG,KAAK,gBAAgB,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;YACnC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC,CACF,CAAC;IAEF,uBAAuB;IACvB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;QAChD,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE;QAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YACxC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;gBACtB,gCAAgC;gBAChC,iCAAiC;aAClC,CAAC,CAAC;YACH,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,wBAAgB,wBAAwB,IAAI,IAAI,CAyB/C"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,wBAAgB,wBAAwB,IAAI,IAAI,CA8B/C"}
@@ -1,9 +1,10 @@
1
1
  import { writeFileSync, existsSync } from 'fs';
2
2
  import { join } from 'path';
3
+ import * as logger from './logger.js';
3
4
  export function createReactScannerConfig() {
4
5
  const configPath = join(process.cwd(), 'react-scanner.config.js');
5
6
  if (existsSync(configPath)) {
6
- console.log('react-scanner.config.js already exists.');
7
+ logger.info('react-scanner.config.js already exists.');
7
8
  return;
8
9
  }
9
10
  const configContent = `module.exports = {
@@ -17,11 +18,11 @@ export function createReactScannerConfig() {
17
18
  `;
18
19
  try {
19
20
  writeFileSync(configPath, configContent);
20
- console.log('Created react-scanner.config.js');
21
- console.log('\nšŸ’” Tip: Add .react-scanner-ui/ to your .gitignore file.');
21
+ logger.success('Created react-scanner.config.js');
22
+ logger.info(`Tip: Add ${logger.bold('.react-scanner-ui/')} to your .gitignore file.`);
22
23
  }
23
24
  catch (error) {
24
- console.error('Failed to create react-scanner.config.js', error);
25
+ logger.errorBox('Configuration Error', `Failed to create react-scanner.config.js\n${error}`);
25
26
  }
26
27
  }
27
28
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,wBAAwB;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAElE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG;;;;;;;;CAQvB,CAAC;IAEA,IAAI,CAAC;QACH,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,MAAM,UAAU,wBAAwB;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAElE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG;;;;;;;;CAQvB,CAAC;IAEA,IAAI,CAAC;QACH,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACzC,MAAM,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CACT,YAAY,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CACzE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CACb,qBAAqB,EACrB,6CAA6C,KAAK,EAAE,CACrD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/utils/dependencies.ts"],"names":[],"mappings":"AAQA,wBAAgB,uBAAuB,IAAI,OAAO,CAOjD;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAU7C;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC,CAelE;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CA6B1C"}
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/utils/dependencies.ts"],"names":[],"mappings":"AASA,wBAAgB,uBAAuB,IAAI,OAAO,CAOjD;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAU7C;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC,CAiBlE;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CA+B1C"}
@@ -2,6 +2,7 @@ import { existsSync, readFileSync } from 'fs';
2
2
  import { execSync } from 'child_process';
3
3
  import { createInterface } from 'readline';
4
4
  import { createRequire } from 'module';
5
+ import * as logger from './logger.js';
5
6
  // ESM equivalent of require.resolve
6
7
  const require = createRequire(import.meta.url);
7
8
  export function isReactScannerInstalled() {
@@ -15,11 +16,8 @@ export function isReactScannerInstalled() {
15
16
  }
16
17
  export function checkPeerDependency() {
17
18
  if (!isReactScannerInstalled()) {
18
- console.error('Error: react-scanner is not installed.');
19
- console.error('Please install it by running:');
20
- console.error(' npm install react-scanner');
21
- console.error(' or');
22
- console.error(' yarn add react-scanner');
19
+ logger.errorBox('Missing Dependency: "react-scanner"', 'react-scanner is not installed.\nThis package is required to analyze your React components.');
20
+ logger.installInstructions('react-scanner');
23
21
  process.exit(1);
24
22
  }
25
23
  return true;
@@ -30,14 +28,17 @@ export async function promptInstallReactScanner() {
30
28
  output: process.stdout,
31
29
  });
32
30
  return new Promise(resolve => {
33
- rl.question('react-scanner is required. Would you like to install it? (y/n): ', answer => {
31
+ logger.warning('react-scanner is required but not installed.');
32
+ rl.question(` Would you like to install it now? (Y/n): `, answer => {
34
33
  rl.close();
35
- resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
34
+ resolve(answer.toLowerCase() === 'y' ||
35
+ answer.toLowerCase() === 'yes' ||
36
+ answer === '');
36
37
  });
37
38
  });
38
39
  }
39
40
  export function installReactScanner() {
40
- console.log('Installing react-scanner...');
41
+ logger.startSpinner('Installing react-scanner...');
41
42
  try {
42
43
  const useYarn = existsSync('yarn.lock');
43
44
  let isWorkspace = false;
@@ -55,11 +56,12 @@ export function installReactScanner() {
55
56
  else {
56
57
  command = 'npm install react-scanner --save-dev';
57
58
  }
58
- execSync(command, { stdio: 'inherit' });
59
- console.log('react-scanner installed successfully!');
59
+ execSync(command, { stdio: 'pipe' });
60
+ logger.spinnerSuccess('react-scanner installed successfully!');
60
61
  }
61
62
  catch {
62
- console.error('Failed to install react-scanner. Please install it manually.');
63
+ logger.spinnerError('Failed to install react-scanner');
64
+ logger.errorBox('Installation Failed', 'Could not install react-scanner automatically.\nPlease install it manually and try again.');
63
65
  process.exit(1);
64
66
  }
65
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/utils/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,oCAAoC;AACpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,EAAE,CAAC,QAAQ,CACT,kEAAkE,EAClE,MAAM,CAAC,EAAE;YACP,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;QAC1E,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC3B,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,gDAAgD,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACvF,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,sCAAsC,CAAC;QACnD,CAAC;QAED,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CACX,8DAA8D,CAC/D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/utils/dependencies.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,5 @@ export { createReactScannerConfig } from './config.js';
3
3
  export { getServerPort, isPortAvailable } from './port.js';
4
4
  export type { PortOptions } from './port.js';
5
5
  export { readScannerConfig, readScanData, getScanData, } from './scannerConfig.js';
6
+ export * as logger from './logger.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC"}
@@ -2,4 +2,5 @@ export { isReactScannerInstalled, checkPeerDependency, promptInstallReactScanner
2
2
  export { createReactScannerConfig } from './config.js';
3
3
  export { getServerPort, isPortAvailable } from './port.js';
4
4
  export { readScannerConfig, readScanData, getScanData, } from './scannerConfig.js';
5
+ export * as logger from './logger.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC"}
@@ -0,0 +1,104 @@
1
+ import pc from 'picocolors';
2
+ import { type Ora } from 'ora';
3
+ /**
4
+ * Display a styled info box
5
+ */
6
+ export declare function infoBox(title: string, content?: string): void;
7
+ /**
8
+ * Display a styled success box
9
+ */
10
+ export declare function successBox(title: string, content?: string): void;
11
+ /**
12
+ * Display a styled error box
13
+ */
14
+ export declare function errorBox(title: string, content?: string): void;
15
+ /**
16
+ * Display a styled warning box
17
+ */
18
+ export declare function warningBox(title: string, content?: string): void;
19
+ /**
20
+ * Log a success message with a checkmark
21
+ */
22
+ export declare function success(message: string): void;
23
+ /**
24
+ * Log an error message with an X
25
+ */
26
+ export declare function error(message: string): void;
27
+ /**
28
+ * Log a warning message
29
+ */
30
+ export declare function warning(message: string): void;
31
+ /**
32
+ * Log an info message
33
+ */
34
+ export declare function info(message: string): void;
35
+ /**
36
+ * Log a step/bullet point
37
+ */
38
+ export declare function step(message: string): void;
39
+ /**
40
+ * Log a highlighted message
41
+ */
42
+ export declare function highlight(message: string): void;
43
+ /**
44
+ * Log a dimmed/subtle message
45
+ */
46
+ export declare function dim(message: string): void;
47
+ /**
48
+ * Log a URL or link
49
+ */
50
+ export declare function link(url: string): string;
51
+ /**
52
+ * Format text as bold
53
+ */
54
+ export declare function bold(text: string): string;
55
+ /**
56
+ * Start a spinner with a message
57
+ */
58
+ export declare function startSpinner(message: string): Ora;
59
+ /**
60
+ * Update the spinner text
61
+ */
62
+ export declare function updateSpinner(message: string): void;
63
+ /**
64
+ * Stop the spinner with a success message
65
+ */
66
+ export declare function spinnerSuccess(message: string): void;
67
+ /**
68
+ * Stop the spinner with an error message
69
+ */
70
+ export declare function spinnerError(message: string): void;
71
+ /**
72
+ * Stop the spinner with a warning message
73
+ */
74
+ export declare function spinnerWarning(message: string): void;
75
+ /**
76
+ * Stop the spinner with an info message
77
+ */
78
+ export declare function spinnerInfo(message: string): void;
79
+ /**
80
+ * Stop the spinner without a message
81
+ */
82
+ export declare function stopSpinner(): void;
83
+ /**
84
+ * Display the welcome/banner box for the CLI
85
+ */
86
+ export declare function banner(name: string, version?: string): void;
87
+ /**
88
+ * Display server running information
89
+ */
90
+ export declare function serverInfo(port: number, features?: string[]): void;
91
+ /**
92
+ * Display build complete information
93
+ */
94
+ export declare function buildComplete(outputDir: string, commands?: string[]): void;
95
+ /**
96
+ * Display an error with details
97
+ */
98
+ export declare function errorWithDetails(title: string, details: string[]): void;
99
+ /**
100
+ * Display installation instructions
101
+ */
102
+ export declare function installInstructions(packageName: string): void;
103
+ export { pc };
104
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AASpC;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAY7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAYhE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAY9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAYhE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CASjD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKlD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKjD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAW3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,IAAI,CAkBtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAM,EAAO,GACtB,IAAI,CAqBN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAUvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAiB7D;AAGD,OAAO,EAAE,EAAE,EAAE,CAAC"}
@@ -0,0 +1,269 @@
1
+ import pc from 'picocolors';
2
+ import boxen from 'boxen';
3
+ import ora from 'ora';
4
+ /**
5
+ * Beautiful logger utility using boxen, picocolors, and ora
6
+ */
7
+ // Spinner instance for loading states
8
+ let currentSpinner = null;
9
+ /**
10
+ * Display a styled info box
11
+ */
12
+ export function infoBox(title, content) {
13
+ const message = content
14
+ ? `${pc.bold(pc.cyan(title))}\n\n${content}`
15
+ : pc.bold(pc.cyan(title));
16
+ console.log(boxen(message, {
17
+ padding: 1,
18
+ margin: 1,
19
+ borderStyle: 'round',
20
+ borderColor: 'cyan',
21
+ }));
22
+ }
23
+ /**
24
+ * Display a styled success box
25
+ */
26
+ export function successBox(title, content) {
27
+ const message = content
28
+ ? `${pc.bold(pc.green(title))}\n\n${content}`
29
+ : pc.bold(pc.green(title));
30
+ console.log(boxen(message, {
31
+ padding: 1,
32
+ margin: 1,
33
+ borderStyle: 'round',
34
+ borderColor: 'green',
35
+ }));
36
+ }
37
+ /**
38
+ * Display a styled error box
39
+ */
40
+ export function errorBox(title, content) {
41
+ const message = content
42
+ ? `${pc.bold(pc.red(title))}\n\n${content}`
43
+ : pc.bold(pc.red(title));
44
+ console.log(boxen(message, {
45
+ padding: 1,
46
+ margin: 1,
47
+ borderStyle: 'round',
48
+ borderColor: 'red',
49
+ }));
50
+ }
51
+ /**
52
+ * Display a styled warning box
53
+ */
54
+ export function warningBox(title, content) {
55
+ const message = content
56
+ ? `${pc.bold(pc.yellow(title))}\n\n${content}`
57
+ : pc.bold(pc.yellow(title));
58
+ console.log(boxen(message, {
59
+ padding: 1,
60
+ margin: 1,
61
+ borderStyle: 'round',
62
+ borderColor: 'yellow',
63
+ }));
64
+ }
65
+ /**
66
+ * Log a success message with a checkmark
67
+ */
68
+ export function success(message) {
69
+ console.log(`${pc.green('āœ”')} ${pc.green(message)}`);
70
+ }
71
+ /**
72
+ * Log an error message with an X
73
+ */
74
+ export function error(message) {
75
+ console.log(`${pc.red('āœ–')} ${pc.red(message)}`);
76
+ }
77
+ /**
78
+ * Log a warning message
79
+ */
80
+ export function warning(message) {
81
+ console.log(`${pc.yellow('⚠')} ${pc.yellow(message)}`);
82
+ }
83
+ /**
84
+ * Log an info message
85
+ */
86
+ export function info(message) {
87
+ console.log(`${pc.cyan('ℹ')} ${pc.cyan(message)}`);
88
+ }
89
+ /**
90
+ * Log a step/bullet point
91
+ */
92
+ export function step(message) {
93
+ console.log(` ${pc.dim('āžœ')} ${message}`);
94
+ }
95
+ /**
96
+ * Log a highlighted message
97
+ */
98
+ export function highlight(message) {
99
+ console.log(pc.bold(pc.magenta(message)));
100
+ }
101
+ /**
102
+ * Log a dimmed/subtle message
103
+ */
104
+ export function dim(message) {
105
+ console.log(pc.dim(message));
106
+ }
107
+ /**
108
+ * Log a URL or link
109
+ */
110
+ export function link(url) {
111
+ return pc.underline(pc.cyan(url));
112
+ }
113
+ /**
114
+ * Format text as bold
115
+ */
116
+ export function bold(text) {
117
+ return pc.bold(text);
118
+ }
119
+ /**
120
+ * Start a spinner with a message
121
+ */
122
+ export function startSpinner(message) {
123
+ if (currentSpinner) {
124
+ currentSpinner.stop();
125
+ }
126
+ currentSpinner = ora({
127
+ text: message,
128
+ color: 'cyan',
129
+ }).start();
130
+ return currentSpinner;
131
+ }
132
+ /**
133
+ * Update the spinner text
134
+ */
135
+ export function updateSpinner(message) {
136
+ if (currentSpinner) {
137
+ currentSpinner.text = message;
138
+ }
139
+ }
140
+ /**
141
+ * Stop the spinner with a success message
142
+ */
143
+ export function spinnerSuccess(message) {
144
+ if (currentSpinner) {
145
+ currentSpinner.succeed(pc.green(message));
146
+ currentSpinner = null;
147
+ }
148
+ }
149
+ /**
150
+ * Stop the spinner with an error message
151
+ */
152
+ export function spinnerError(message) {
153
+ if (currentSpinner) {
154
+ currentSpinner.fail(pc.red(message));
155
+ currentSpinner = null;
156
+ }
157
+ }
158
+ /**
159
+ * Stop the spinner with a warning message
160
+ */
161
+ export function spinnerWarning(message) {
162
+ if (currentSpinner) {
163
+ currentSpinner.warn(pc.yellow(message));
164
+ currentSpinner = null;
165
+ }
166
+ }
167
+ /**
168
+ * Stop the spinner with an info message
169
+ */
170
+ export function spinnerInfo(message) {
171
+ if (currentSpinner) {
172
+ currentSpinner.info(pc.cyan(message));
173
+ currentSpinner = null;
174
+ }
175
+ }
176
+ /**
177
+ * Stop the spinner without a message
178
+ */
179
+ export function stopSpinner() {
180
+ if (currentSpinner) {
181
+ currentSpinner.stop();
182
+ currentSpinner = null;
183
+ }
184
+ }
185
+ /**
186
+ * Display the welcome/banner box for the CLI
187
+ */
188
+ export function banner(name, version) {
189
+ const versionText = version ? pc.dim(`v${version}`) : '';
190
+ const title = `${pc.bold(pc.cyan(name))} ${versionText}`;
191
+ console.log(boxen(title, {
192
+ padding: 1,
193
+ margin: 1,
194
+ borderStyle: 'double',
195
+ borderColor: 'cyan',
196
+ }));
197
+ }
198
+ /**
199
+ * Display server running information
200
+ */
201
+ export function serverInfo(port, features = []) {
202
+ const url = `http://localhost:${port}`;
203
+ let content = `${pc.bold('Local:')} ${link(url)}`;
204
+ if (features.length > 0) {
205
+ content += '\n\n' + features.map(f => `${pc.dim('āžœ')} ${f}`).join('\n');
206
+ }
207
+ console.log(boxen(content, {
208
+ padding: 1,
209
+ margin: 1,
210
+ borderStyle: 'round',
211
+ borderColor: 'green',
212
+ title: pc.bold(pc.green('šŸš€ Server Running')),
213
+ titleAlignment: 'center',
214
+ }));
215
+ }
216
+ /**
217
+ * Display build complete information
218
+ */
219
+ export function buildComplete(outputDir, commands = []) {
220
+ let content = `${pc.bold('Output:')} ${pc.cyan(outputDir)}`;
221
+ if (commands.length > 0) {
222
+ content +=
223
+ '\n\n' +
224
+ pc.dim('Serve with:') +
225
+ '\n' +
226
+ commands.map(c => ` ${pc.cyan(c)}`).join('\n');
227
+ }
228
+ console.log(boxen(content, {
229
+ padding: 1,
230
+ margin: 1,
231
+ borderStyle: 'round',
232
+ borderColor: 'green',
233
+ title: pc.bold(pc.green('āœ” Build Complete')),
234
+ titleAlignment: 'center',
235
+ }));
236
+ }
237
+ /**
238
+ * Display an error with details
239
+ */
240
+ export function errorWithDetails(title, details) {
241
+ const content = details.map(d => `${pc.dim('•')} ${d}`).join('\n');
242
+ console.log(boxen(`${pc.bold(pc.red(title))}\n\n${content}`, {
243
+ padding: 1,
244
+ margin: 1,
245
+ borderStyle: 'round',
246
+ borderColor: 'red',
247
+ }));
248
+ }
249
+ /**
250
+ * Display installation instructions
251
+ */
252
+ export function installInstructions(packageName) {
253
+ const content = [
254
+ `${pc.bold('npm:')} npm install ${packageName}`,
255
+ `${pc.bold('yarn:')} yarn add ${packageName}`,
256
+ `${pc.bold('pnpm:')} pnpm add ${packageName}`,
257
+ ].join('\n');
258
+ console.log(boxen(content, {
259
+ padding: 1,
260
+ margin: 1,
261
+ borderStyle: 'round',
262
+ borderColor: 'yellow',
263
+ title: pc.bold(pc.yellow('šŸ“¦ Install Required')),
264
+ titleAlignment: 'center',
265
+ }));
266
+ }
267
+ // Export picocolors for direct use if needed
268
+ export { pc };
269
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,GAAE,MAAa,EACnB,EAAE,SAAS,EAAE,GAAE,WAAgB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE"}
1
+ {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,GAAE,MAAa,EACnB,EAAE,SAAS,EAAE,GAAE,WAAgB,GAC9B,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE"}
@@ -1,4 +1,5 @@
1
1
  import detectPort from 'detect-port';
2
+ import * as logger from './logger.js';
2
3
  /**
3
4
  * Get an available server port using detect-port (same approach as Storybook)
4
5
  * If the requested port is busy, it will find the next available port
@@ -8,13 +9,13 @@ export async function getServerPort(port = 3000, { exactPort } = {}) {
8
9
  try {
9
10
  const freePort = await detectPort(port);
10
11
  if (freePort !== port && exactPort) {
11
- console.error(`Error: Port ${port} is not available.`);
12
+ logger.errorBox('Port Unavailable', `Port ${logger.bold(String(port))} is not available.\nUse a different port or remove the --exact-port flag.`);
12
13
  process.exit(1);
13
14
  }
14
15
  return freePort;
15
16
  }
16
17
  catch (error) {
17
- console.error('Error detecting available port:', error);
18
+ logger.errorBox('Port Detection Error', `Failed to detect available port: ${error}`);
18
19
  process.exit(1);
19
20
  }
20
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AAMrC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,IAAI,EACnB,EAAE,SAAS,KAAkB,EAAE;IAE/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,QAAQ,KAAK,IAAI,IAAI,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,oBAAoB,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,QAAQ,KAAK,IAAI,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/utils/port.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAMtC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,IAAI,EACnB,EAAE,SAAS,KAAkB,EAAE;IAE/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QAExC,IAAI,QAAQ,KAAK,IAAI,IAAI,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,QAAQ,CACb,kBAAkB,EAClB,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,2EAA2E,CAC7G,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CACb,sBAAsB,EACtB,oCAAoC,KAAK,EAAE,CAC5C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,QAAQ,KAAK,IAAI,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scannerConfig.d.ts","sourceRoot":"","sources":["../../src/utils/scannerConfig.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,aAAa,EAAE,MAAM,GAAG;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAkBvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAgBlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAgB9D;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC,CAqBD"}
1
+ {"version":3,"file":"scannerConfig.d.ts","sourceRoot":"","sources":["../../src/utils/scannerConfig.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,aAAa,EAAE,MAAM,GAAG;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAsBvE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAgBlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAkB9D;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC,CAqBD"}
@@ -1,12 +1,13 @@
1
1
  import { existsSync, readFileSync } from 'fs';
2
2
  import { join, resolve } from 'path';
3
+ import * as logger from './logger.js';
3
4
  /**
4
5
  * Read and parse the react-scanner.config.js file
5
6
  */
6
7
  export async function readScannerConfig() {
7
8
  const configPath = join(process.cwd(), 'react-scanner.config.js');
8
9
  if (!existsSync(configPath)) {
9
- console.error('react-scanner.config.js not found. Run `react-scanner-ui init` first.');
10
+ logger.errorBox('Configuration Not Found', `${logger.bold('react-scanner.config.js')} not found.\nRun ${logger.bold('react-scanner-ui init')} first to create the configuration.`);
10
11
  return null;
11
12
  }
12
13
  try {
@@ -15,7 +16,7 @@ export async function readScannerConfig() {
15
16
  return config.default || config;
16
17
  }
17
18
  catch (error) {
18
- console.error('Failed to read react-scanner.config.js:', error);
19
+ logger.errorBox('Configuration Error', `Failed to read react-scanner.config.js\n${error}`);
19
20
  return null;
20
21
  }
21
22
  }
@@ -41,8 +42,7 @@ export function getOutputFile(config) {
41
42
  export function readScanData(filePath) {
42
43
  const absolutePath = resolve(process.cwd(), filePath);
43
44
  if (!existsSync(absolutePath)) {
44
- console.error(`Scan data file not found: ${absolutePath}`);
45
- console.error('Run react-scanner first to generate scan data.');
45
+ logger.errorBox('Scan Data Not Found', `Scan data file not found: ${logger.bold(absolutePath)}\n\nRun ${logger.bold('npx react-scanner')} first to generate the scan data.`);
46
46
  return null;
47
47
  }
48
48
  try {
@@ -50,7 +50,7 @@ export function readScanData(filePath) {
50
50
  return JSON.parse(content);
51
51
  }
52
52
  catch (error) {
53
- console.error('Failed to read scan data:', error);
53
+ logger.errorBox('Parse Error', `Failed to read scan data: ${error}`);
54
54
  return null;
55
55
  }
56
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scannerConfig.js","sourceRoot":"","sources":["../../src/utils/scannerConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scannerConfig.js","sourceRoot":"","sources":["../../src/utils/scannerConfig.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-scanner-ui",
3
3
  "type": "module",
4
- "version": "0.0.15",
4
+ "version": "0.0.16",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
7
7
  "react-scanner-ui": "dist/index.js"
@@ -36,8 +36,11 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@vitejs/plugin-react": "^4.3.4",
39
+ "boxen": "^8.0.1",
39
40
  "commander": "^14.0.2",
40
41
  "detect-port": "^1.6.1",
42
+ "ora": "^9.0.0",
43
+ "picocolors": "^1.1.1",
41
44
  "react": "^18.3.1",
42
45
  "react-dom": "^18.3.1",
43
46
  "vite": "^5.4.19"