react-scanner-ui 0.0.16 → 0.0.17
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/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +9 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +22 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +8 -16
- package/dist/commands/start.js.map +1 -1
- package/dist/utils/config.d.ts +9 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +72 -5
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/dependencies.d.ts +1 -1
- package/dist/utils/dependencies.d.ts.map +1 -1
- package/dist/utils/dependencies.js +64 -37
- package/dist/utils/dependencies.js.map +1 -1
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +42 -35
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/scannerConfig.d.ts +1 -0
- package/dist/utils/scannerConfig.d.ts.map +1 -1
- package/dist/utils/scannerConfig.js +17 -1
- package/dist/utils/scannerConfig.js.map +1 -1
- package/package.json +2 -1
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyIpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUnD"}
|
package/dist/commands/build.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { resolve, dirname } from 'path';
|
|
1
|
+
import { resolve, dirname, basename } from 'path';
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
3
|
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
4
4
|
import { checkPeerDependency } from '../utils/dependencies.js';
|
|
5
|
-
import { getScanData } from '../utils/scannerConfig.js';
|
|
5
|
+
import { getScanData, readScannerConfig, getOutputFile, } from '../utils/scannerConfig.js';
|
|
6
6
|
import { logger } from '../utils/index.js';
|
|
7
7
|
// ESM equivalent of __dirname
|
|
8
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -48,6 +48,10 @@ async function runBuild() {
|
|
|
48
48
|
if (!existsSync(outputDir)) {
|
|
49
49
|
mkdirSync(outputDir, { recursive: true });
|
|
50
50
|
}
|
|
51
|
+
// Get the scan data file name from config
|
|
52
|
+
const config = await readScannerConfig();
|
|
53
|
+
const scanFile = config ? getOutputFile(config) : null;
|
|
54
|
+
const scanFileName = scanFile ? basename(scanFile) : 'scan-data.json';
|
|
51
55
|
try {
|
|
52
56
|
await build({
|
|
53
57
|
root: uiRoot,
|
|
@@ -71,9 +75,9 @@ async function runBuild() {
|
|
|
71
75
|
process.exit(1);
|
|
72
76
|
}
|
|
73
77
|
logger.spinnerSuccess('UI built successfully');
|
|
74
|
-
// Step 3: Write the scan data as a JSON file
|
|
78
|
+
// Step 3: Write the scan data as a JSON file (using same filename from config)
|
|
75
79
|
logger.startSpinner('Embedding scan data...');
|
|
76
|
-
const scanDataPath = resolve(outputDir,
|
|
80
|
+
const scanDataPath = resolve(outputDir, scanFileName);
|
|
77
81
|
writeFileSync(scanDataPath, JSON.stringify({ data: scanResult.data, error: null }, null, 2));
|
|
78
82
|
// Step 4: Create a custom index.html that loads scan data from the JSON file
|
|
79
83
|
// We need to modify the built index.html to handle static data loading
|
|
@@ -87,7 +91,7 @@ async function runBuild() {
|
|
|
87
91
|
const originalFetch = window.fetch;
|
|
88
92
|
window.fetch = async function(url, options) {
|
|
89
93
|
if (url === '/api/scan-data' || url.endsWith('/api/scan-data')) {
|
|
90
|
-
const response = await originalFetch('
|
|
94
|
+
const response = await originalFetch('./${scanFileName}', options);
|
|
91
95
|
return response;
|
|
92
96
|
}
|
|
93
97
|
return originalFetch(url, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2DlD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,21 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { input } from '@inquirer/prompts';
|
|
2
|
+
import { isReactScannerInstalled, promptInstallReactScanner, installReactScanner, createReactScannerConfig, updateIgnoreFiles, logger, inquirerTheme, } from '../utils/index.js';
|
|
2
3
|
export function initCommand(program) {
|
|
3
4
|
program
|
|
4
5
|
.command('init')
|
|
5
6
|
.description('Initialize react-scanner configuration')
|
|
6
7
|
.action(async () => {
|
|
7
|
-
logger.infoBox('React Scanner UI', 'Initializing your project...');
|
|
8
|
+
logger.infoBox('Welcome to React Scanner UI', 'Initializing your project...');
|
|
8
9
|
if (!isReactScannerInstalled()) {
|
|
9
10
|
const shouldInstall = await promptInstallReactScanner();
|
|
10
11
|
if (shouldInstall) {
|
|
11
|
-
installReactScanner();
|
|
12
|
+
await installReactScanner();
|
|
12
13
|
}
|
|
13
14
|
else {
|
|
14
15
|
logger.errorBox('Installation Required', 'react-scanner is required to continue.\nPlease install it manually and try again.');
|
|
15
16
|
process.exit(1);
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
+
// Prompt for crawlFrom
|
|
20
|
+
logger.info(`${logger.bgHighlight('crawlFrom')} The directory where react-scanner will start crawling for React components.`);
|
|
21
|
+
logger.dim('This is typically your source folder (e.g., ./src, ./app).');
|
|
22
|
+
const crawlFrom = await input({
|
|
23
|
+
message: 'Enter the path to crawl from:',
|
|
24
|
+
default: './src',
|
|
25
|
+
theme: inquirerTheme,
|
|
26
|
+
});
|
|
27
|
+
// Prompt for importedFrom
|
|
28
|
+
logger.info(`${logger.bgHighlight('importedFrom')} The package or path that components are imported from.`);
|
|
29
|
+
logger.dim('This filters which components to track (e.g., @mui/material, @chakra-ui/react, ./components).');
|
|
30
|
+
const importedFrom = await input({
|
|
31
|
+
message: 'Enter the import source to track:',
|
|
32
|
+
default: '@mui/material',
|
|
33
|
+
theme: inquirerTheme,
|
|
34
|
+
});
|
|
35
|
+
createReactScannerConfig({ crawlFrom, importedFrom });
|
|
36
|
+
updateIgnoreFiles();
|
|
19
37
|
logger.successBox('Initialization Complete', 'Your project is now configured for React Scanner UI.\nRun ' +
|
|
20
38
|
logger.bold('react-scanner-ui start') +
|
|
21
39
|
' to begin.');
|
|
@@ -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,EACxB,MAAM,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,MAAM,EACN,aAAa,GACd,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,CACZ,6BAA6B,EAC7B,8BAA8B,CAC/B,CAAC;QAEF,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,MAAM,yBAAyB,EAAE,CAAC;YACxD,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,mBAAmB,EAAE,CAAC;YAC9B,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;QAED,uBAAuB;QACvB,MAAM,CAAC,IAAI,CACT,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,8EAA8E,CACjH,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAEzE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC;YAC5B,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,CAAC,IAAI,CACT,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,yDAAyD,CAC/F,CAAC;QACF,MAAM,CAAC,GAAG,CACR,+FAA+F,CAChG,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC;YAC/B,OAAO,EAAE,mCAAmC;YAC5C,OAAO,EAAE,eAAe;YACxB,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QAEH,wBAAwB,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QACtD,iBAAiB,EAAE,CAAC;QAEpB,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;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqEnD"}
|
package/dist/commands/start.js
CHANGED
|
@@ -1,28 +1,20 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { confirm } from '@inquirer/prompts';
|
|
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
|
+
import { logger, inquirerTheme } from '../utils/index.js';
|
|
6
6
|
const DEFAULT_PORT = 3000;
|
|
7
7
|
/**
|
|
8
8
|
* Prompt user to confirm using a different port (like Storybook does)
|
|
9
9
|
*/
|
|
10
10
|
async function promptForPortChange(requestedPort, availablePort) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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 => {
|
|
18
|
-
rl.close();
|
|
19
|
-
const normalizedAnswer = answer.trim().toLowerCase();
|
|
20
|
-
// Default to yes if user just presses enter
|
|
21
|
-
resolve(normalizedAnswer === '' ||
|
|
22
|
-
normalizedAnswer === 'y' ||
|
|
23
|
-
normalizedAnswer === 'yes');
|
|
24
|
-
});
|
|
11
|
+
logger.warning(`Port ${logger.bold(String(requestedPort))} is not available.`);
|
|
12
|
+
const shouldChangePort = await confirm({
|
|
13
|
+
message: `Would you like to run on port ${availablePort} instead?`,
|
|
14
|
+
default: true,
|
|
15
|
+
theme: inquirerTheme,
|
|
25
16
|
});
|
|
17
|
+
return shouldChangePort;
|
|
26
18
|
}
|
|
27
19
|
/**
|
|
28
20
|
* Open the browser to the given URL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,aAAqB,EACrB,aAAqB;IAErB,MAAM,CAAC,OAAO,CACZ,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAC/D,CAAC;IAEF,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC;QACrC,OAAO,EAAE,iCAAiC,aAAa,WAAW;QAClE,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAE/C,IAAI,OAAe,CAAC;QACpB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;QAC5B,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,OAAO,GAAG,aAAa,GAAG,GAAG,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,OAAO,GAAG,aAAa,GAAG,GAAG,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACpB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CACT,uDAAuD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC1E,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CACT,uDAAuD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CACL,qBAAqB,EACrB,2BAA2B,EAC3B,MAAM,CAAC,YAAY,CAAC,CACrB;SACA,MAAM,CACL,cAAc,EACd,6CAA6C,EAC7C,KAAK,CACN;SACA,MAAM,CAAC,MAAM,EAAE,yCAAyC,EAAE,KAAK,CAAC;SAChE,MAAM,CAAC,QAAQ,EAAE,gCAAgC,EAAE,KAAK,CAAC;SACzD,MAAM,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;QACtB,mBAAmB,EAAE,CAAC;QAEtB,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEjD,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,KAAK,EAAE,CAAC;YACvE,MAAM,CAAC,QAAQ,CACb,cAAc,EACd,4CAA4C,CAC7C,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,4CAA4C;QAC5C,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE;YACvD,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,kDAAkD;QAClD,IACE,aAAa,KAAK,aAAa;YAC/B,CAAC,OAAO,CAAC,EAAE;YACX,CAAC,OAAO,CAAC,SAAS,EAClB,CAAC;YACD,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAChD,aAAa,EACb,aAAa,CACd,CAAC;YAEF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,IAAI,aAAa,KAAK,aAAa,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACzD,uCAAuC;YACvC,MAAM,CAAC,OAAO,CACZ,QAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,iCAAiC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,CACzH,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;YAEjC,qCAAqC;YACrC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,oBAAoB,aAAa,EAAE,CAAC;gBAChD,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,2BAA2B,KAAK,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Update all ignore files to exclude .react-scanner-ui/
|
|
3
|
+
*/
|
|
4
|
+
export declare function updateIgnoreFiles(): void;
|
|
5
|
+
export interface ScannerConfigOptions {
|
|
6
|
+
crawlFrom: string;
|
|
7
|
+
importedFrom: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function createReactScannerConfig(options: ScannerConfigOptions): void;
|
|
2
10
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAmDA;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAmCxC;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CA2B5E"}
|
package/dist/utils/config.js
CHANGED
|
@@ -1,16 +1,84 @@
|
|
|
1
|
-
import { writeFileSync, existsSync } from 'fs';
|
|
1
|
+
import { writeFileSync, existsSync, readFileSync, appendFileSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import * as logger from './logger.js';
|
|
4
|
-
|
|
4
|
+
const IGNORE_ENTRY = '.react-scanner-ui/';
|
|
5
|
+
const IGNORE_COMMENT = '# React Scanner UI';
|
|
6
|
+
const IGNORE_FILES = [
|
|
7
|
+
{ filename: '.gitignore', displayName: '.gitignore' },
|
|
8
|
+
{ filename: '.eslintignore', displayName: '.eslintignore' },
|
|
9
|
+
{ filename: '.prettierignore', displayName: '.prettierignore' },
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Check if an ignore file already contains the react-scanner-ui entry
|
|
13
|
+
*/
|
|
14
|
+
function hasIgnoreEntry(filePath) {
|
|
15
|
+
if (!existsSync(filePath)) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
19
|
+
return content.includes(IGNORE_ENTRY);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Add react-scanner-ui entry to an ignore file
|
|
23
|
+
*/
|
|
24
|
+
function addIgnoreEntry(filePath) {
|
|
25
|
+
try {
|
|
26
|
+
const entryWithComment = `\n${IGNORE_COMMENT}\n${IGNORE_ENTRY}\n`;
|
|
27
|
+
if (!existsSync(filePath)) {
|
|
28
|
+
// Create the file with the entry
|
|
29
|
+
writeFileSync(filePath, `${IGNORE_COMMENT}\n${IGNORE_ENTRY}\n`);
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
// Append to existing file
|
|
33
|
+
appendFileSync(filePath, entryWithComment);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Update all ignore files to exclude .react-scanner-ui/
|
|
42
|
+
*/
|
|
43
|
+
export function updateIgnoreFiles() {
|
|
44
|
+
const cwd = process.cwd();
|
|
45
|
+
const updatedFiles = [];
|
|
46
|
+
const skippedFiles = [];
|
|
47
|
+
const failedFiles = [];
|
|
48
|
+
for (const ignoreFile of IGNORE_FILES) {
|
|
49
|
+
const filePath = join(cwd, ignoreFile.filename);
|
|
50
|
+
if (hasIgnoreEntry(filePath)) {
|
|
51
|
+
skippedFiles.push(ignoreFile.displayName);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (addIgnoreEntry(filePath)) {
|
|
55
|
+
updatedFiles.push(ignoreFile.displayName);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
failedFiles.push(ignoreFile.displayName);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// Log results
|
|
62
|
+
if (updatedFiles.length > 0) {
|
|
63
|
+
logger.success(`Added ${logger.bold(IGNORE_ENTRY)} to: ${updatedFiles.join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
if (skippedFiles.length > 0) {
|
|
66
|
+
logger.dim(`Already configured in: ${skippedFiles.join(', ')}`);
|
|
67
|
+
}
|
|
68
|
+
if (failedFiles.length > 0) {
|
|
69
|
+
logger.warning(`Failed to update: ${failedFiles.join(', ')}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export function createReactScannerConfig(options) {
|
|
5
73
|
const configPath = join(process.cwd(), 'react-scanner.config.js');
|
|
6
74
|
if (existsSync(configPath)) {
|
|
7
75
|
logger.info('react-scanner.config.js already exists.');
|
|
8
76
|
return;
|
|
9
77
|
}
|
|
10
78
|
const configContent = `module.exports = {
|
|
11
|
-
crawlFrom: '
|
|
79
|
+
crawlFrom: '${options.crawlFrom}',
|
|
12
80
|
includeSubComponents: true,
|
|
13
|
-
importedFrom: '
|
|
81
|
+
importedFrom: '${options.importedFrom}',
|
|
14
82
|
processors: [
|
|
15
83
|
['count-components-and-props', { outputTo: './.react-scanner-ui/scan-report.json' }],
|
|
16
84
|
],
|
|
@@ -19,7 +87,6 @@ export function createReactScannerConfig() {
|
|
|
19
87
|
try {
|
|
20
88
|
writeFileSync(configPath, configContent);
|
|
21
89
|
logger.success('Created react-scanner.config.js');
|
|
22
|
-
logger.info(`Tip: Add ${logger.bold('.react-scanner-ui/')} to your .gitignore file.`);
|
|
23
90
|
}
|
|
24
91
|
catch (error) {
|
|
25
92
|
logger.errorBox('Configuration Error', `Failed to create react-scanner.config.js\n${error}`);
|
package/dist/utils/config.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare function isReactScannerInstalled(): boolean;
|
|
2
2
|
export declare function checkPeerDependency(): boolean;
|
|
3
3
|
export declare function promptInstallReactScanner(): Promise<boolean>;
|
|
4
|
-
export declare function installReactScanner(): void
|
|
4
|
+
export declare function installReactScanner(): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/utils/dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/utils/dependencies.ts"],"names":[],"mappings":"AAUA,wBAAgB,uBAAuB,IAAI,OAAO,CAOjD;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAU7C;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,OAAO,CAAC,CAUlE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0EzD"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'fs';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import { confirm } from '@inquirer/prompts';
|
|
4
4
|
import { createRequire } from 'module';
|
|
5
5
|
import * as logger from './logger.js';
|
|
6
|
+
import { inquirerTheme } from './logger.js';
|
|
6
7
|
// ESM equivalent of require.resolve
|
|
7
8
|
const require = createRequire(import.meta.url);
|
|
8
9
|
export function isReactScannerInstalled() {
|
|
@@ -23,46 +24,72 @@ export function checkPeerDependency() {
|
|
|
23
24
|
return true;
|
|
24
25
|
}
|
|
25
26
|
export async function promptInstallReactScanner() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
logger.warning('react-scanner is required but not installed.');
|
|
32
|
-
rl.question(` Would you like to install it now? (Y/n): `, answer => {
|
|
33
|
-
rl.close();
|
|
34
|
-
resolve(answer.toLowerCase() === 'y' ||
|
|
35
|
-
answer.toLowerCase() === 'yes' ||
|
|
36
|
-
answer === '');
|
|
37
|
-
});
|
|
27
|
+
logger.warning('react-scanner is required but not installed.');
|
|
28
|
+
const shouldInstall = await confirm({
|
|
29
|
+
message: 'Would you like to install it now?',
|
|
30
|
+
default: true,
|
|
31
|
+
theme: inquirerTheme,
|
|
38
32
|
});
|
|
33
|
+
return shouldInstall;
|
|
39
34
|
}
|
|
40
|
-
export function installReactScanner() {
|
|
41
|
-
logger.startSpinner('Installing react-scanner...');
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
isWorkspace = true;
|
|
50
|
-
}
|
|
35
|
+
export async function installReactScanner() {
|
|
36
|
+
const spinner = logger.startSpinner('Installing react-scanner...');
|
|
37
|
+
const useYarn = existsSync('yarn.lock');
|
|
38
|
+
let isWorkspace = false;
|
|
39
|
+
if (existsSync('package.json')) {
|
|
40
|
+
const packageContent = readFileSync('package.json', 'utf-8');
|
|
41
|
+
const packageJson = JSON.parse(packageContent);
|
|
42
|
+
if (packageJson.workspaces) {
|
|
43
|
+
isWorkspace = true;
|
|
51
44
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
45
|
+
}
|
|
46
|
+
let command;
|
|
47
|
+
let args;
|
|
48
|
+
if (useYarn) {
|
|
49
|
+
command = 'yarn';
|
|
50
|
+
args = ['add', 'react-scanner', '--dev', '--ignore-engines'];
|
|
51
|
+
if (isWorkspace) {
|
|
52
|
+
args.push('-W');
|
|
58
53
|
}
|
|
59
|
-
execSync(command, { stdio: 'pipe' });
|
|
60
|
-
logger.spinnerSuccess('react-scanner installed successfully!');
|
|
61
54
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
process.exit(1);
|
|
55
|
+
else {
|
|
56
|
+
command = 'npm';
|
|
57
|
+
args = ['install', 'react-scanner', '--save-dev'];
|
|
66
58
|
}
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const child = spawn(command, args, {
|
|
61
|
+
stdio: 'pipe',
|
|
62
|
+
});
|
|
63
|
+
// Handle SIGINT (Ctrl+C)
|
|
64
|
+
const handleSignal = () => {
|
|
65
|
+
child.kill('SIGTERM');
|
|
66
|
+
logger.spinnerError('Installation cancelled');
|
|
67
|
+
process.exit(1);
|
|
68
|
+
};
|
|
69
|
+
process.on('SIGINT', handleSignal);
|
|
70
|
+
process.on('SIGTERM', handleSignal);
|
|
71
|
+
child.on('close', code => {
|
|
72
|
+
// Remove signal handlers
|
|
73
|
+
process.off('SIGINT', handleSignal);
|
|
74
|
+
process.off('SIGTERM', handleSignal);
|
|
75
|
+
if (code === 0) {
|
|
76
|
+
logger.spinnerSuccess('react-scanner installed successfully!');
|
|
77
|
+
resolve();
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
logger.spinnerError('Failed to install react-scanner');
|
|
81
|
+
logger.errorBox('Installation Failed', 'Could not install react-scanner automatically.\nPlease install it manually and try again.');
|
|
82
|
+
reject(new Error(`Installation failed with code ${code}`));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
child.on('error', err => {
|
|
86
|
+
// Remove signal handlers
|
|
87
|
+
process.off('SIGINT', handleSignal);
|
|
88
|
+
process.off('SIGTERM', handleSignal);
|
|
89
|
+
spinner.fail('Failed to install react-scanner');
|
|
90
|
+
logger.errorBox('Installation Failed', `Could not install react-scanner automatically.\n${err.message}\nPlease install it manually and try again.`);
|
|
91
|
+
reject(err);
|
|
92
|
+
});
|
|
93
|
+
});
|
|
67
94
|
}
|
|
68
95
|
//# sourceMappingURL=dependencies.js.map
|
|
@@ -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,
|
|
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,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,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,MAAM,CAAC,QAAQ,CACb,qCAAqC,EACrC,6FAA6F,CAC9F,CAAC;QACF,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;IAE/D,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC;QAClC,OAAO,EAAE,mCAAmC;QAC5C,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC;IAEnE,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,WAAW,GAAG,KAAK,CAAC;IAExB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/C,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC3B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,IAAc,CAAC;IAEnB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,GAAG,MAAM,CAAC;QACjB,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;QAC7D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,KAAK,CAAC;QAChB,IAAI,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,yBAAyB;QACzB,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACnC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEpC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACvB,yBAAyB;YACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAErC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,cAAc,CAAC,uCAAuC,CAAC,CAAC;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC;gBACvD,MAAM,CAAC,QAAQ,CACb,qBAAqB,EACrB,2FAA2F,CAC5F,CAAC;gBACF,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACtB,yBAAyB;YACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAErC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,MAAM,CAAC,QAAQ,CACb,qBAAqB,EACrB,mDAAmD,GAAG,CAAC,OAAO,6CAA6C,CAC5G,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { isReactScannerInstalled, checkPeerDependency, promptInstallReactScanner, installReactScanner, } from './dependencies.js';
|
|
2
|
-
export { createReactScannerConfig } from './config.js';
|
|
2
|
+
export { createReactScannerConfig, updateIgnoreFiles } from './config.js';
|
|
3
|
+
export type { ScannerConfigOptions } from './config.js';
|
|
3
4
|
export { getServerPort, isPortAvailable } from './port.js';
|
|
4
5
|
export type { PortOptions } from './port.js';
|
|
5
6
|
export { readScannerConfig, readScanData, getScanData, } from './scannerConfig.js';
|
|
6
7
|
export * as logger from './logger.js';
|
|
8
|
+
export { inquirerTheme } from './logger.js';
|
|
7
9
|
//# 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;
|
|
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,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,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;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { isReactScannerInstalled, checkPeerDependency, promptInstallReactScanner, installReactScanner, } from './dependencies.js';
|
|
2
|
-
export { createReactScannerConfig } from './config.js';
|
|
2
|
+
export { createReactScannerConfig, updateIgnoreFiles } from './config.js';
|
|
3
3
|
export { getServerPort, isPortAvailable } from './port.js';
|
|
4
4
|
export { readScannerConfig, readScanData, getScanData, } from './scannerConfig.js';
|
|
5
5
|
export * as logger from './logger.js';
|
|
6
|
+
export { inquirerTheme } from './logger.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -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;
|
|
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,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE1E,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;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import pc from 'picocolors';
|
|
2
2
|
import { type Ora } from 'ora';
|
|
3
|
+
import type { Theme } from '@inquirer/core';
|
|
4
|
+
import type { PartialDeep } from '@inquirer/type';
|
|
5
|
+
export declare const inquirerTheme: PartialDeep<Theme>;
|
|
3
6
|
/**
|
|
4
7
|
* Display a styled info box
|
|
5
8
|
*/
|
|
@@ -52,6 +55,10 @@ export declare function link(url: string): string;
|
|
|
52
55
|
* Format text as bold
|
|
53
56
|
*/
|
|
54
57
|
export declare function bold(text: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Format text with background highlight (e.g., for "Tip:", "Note:", etc.)
|
|
60
|
+
*/
|
|
61
|
+
export declare function bgHighlight(text: string): string;
|
|
55
62
|
/**
|
|
56
63
|
* Start a spinner with a message
|
|
57
64
|
*/
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -6,6 +6,24 @@ import ora from 'ora';
|
|
|
6
6
|
*/
|
|
7
7
|
// Spinner instance for loading states
|
|
8
8
|
let currentSpinner = null;
|
|
9
|
+
// Consistent box width for all boxes
|
|
10
|
+
const BOX_WIDTH = 60;
|
|
11
|
+
// Indentation to align with box border (margin of 1 = 3 spaces)
|
|
12
|
+
const INDENT = ' ';
|
|
13
|
+
// Default box options for consistency
|
|
14
|
+
const defaultBoxOptions = {
|
|
15
|
+
padding: 1,
|
|
16
|
+
margin: 1,
|
|
17
|
+
borderStyle: 'round',
|
|
18
|
+
width: BOX_WIDTH,
|
|
19
|
+
};
|
|
20
|
+
// Inquirer theme with proper indentation
|
|
21
|
+
export const inquirerTheme = {
|
|
22
|
+
prefix: {
|
|
23
|
+
idle: `${INDENT}${pc.cyan('?')}`,
|
|
24
|
+
done: `${INDENT}${pc.green('✔')}`,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
9
27
|
/**
|
|
10
28
|
* Display a styled info box
|
|
11
29
|
*/
|
|
@@ -14,9 +32,7 @@ export function infoBox(title, content) {
|
|
|
14
32
|
? `${pc.bold(pc.cyan(title))}\n\n${content}`
|
|
15
33
|
: pc.bold(pc.cyan(title));
|
|
16
34
|
console.log(boxen(message, {
|
|
17
|
-
|
|
18
|
-
margin: 1,
|
|
19
|
-
borderStyle: 'round',
|
|
35
|
+
...defaultBoxOptions,
|
|
20
36
|
borderColor: 'cyan',
|
|
21
37
|
}));
|
|
22
38
|
}
|
|
@@ -28,9 +44,7 @@ export function successBox(title, content) {
|
|
|
28
44
|
? `${pc.bold(pc.green(title))}\n\n${content}`
|
|
29
45
|
: pc.bold(pc.green(title));
|
|
30
46
|
console.log(boxen(message, {
|
|
31
|
-
|
|
32
|
-
margin: 1,
|
|
33
|
-
borderStyle: 'round',
|
|
47
|
+
...defaultBoxOptions,
|
|
34
48
|
borderColor: 'green',
|
|
35
49
|
}));
|
|
36
50
|
}
|
|
@@ -42,9 +56,7 @@ export function errorBox(title, content) {
|
|
|
42
56
|
? `${pc.bold(pc.red(title))}\n\n${content}`
|
|
43
57
|
: pc.bold(pc.red(title));
|
|
44
58
|
console.log(boxen(message, {
|
|
45
|
-
|
|
46
|
-
margin: 1,
|
|
47
|
-
borderStyle: 'round',
|
|
59
|
+
...defaultBoxOptions,
|
|
48
60
|
borderColor: 'red',
|
|
49
61
|
}));
|
|
50
62
|
}
|
|
@@ -56,9 +68,7 @@ export function warningBox(title, content) {
|
|
|
56
68
|
? `${pc.bold(pc.yellow(title))}\n\n${content}`
|
|
57
69
|
: pc.bold(pc.yellow(title));
|
|
58
70
|
console.log(boxen(message, {
|
|
59
|
-
|
|
60
|
-
margin: 1,
|
|
61
|
-
borderStyle: 'round',
|
|
71
|
+
...defaultBoxOptions,
|
|
62
72
|
borderColor: 'yellow',
|
|
63
73
|
}));
|
|
64
74
|
}
|
|
@@ -66,43 +76,43 @@ export function warningBox(title, content) {
|
|
|
66
76
|
* Log a success message with a checkmark
|
|
67
77
|
*/
|
|
68
78
|
export function success(message) {
|
|
69
|
-
console.log(`${pc.green('✔')} ${pc.green(message)}`);
|
|
79
|
+
console.log(`${INDENT}${pc.green('✔')} ${pc.green(message)}`);
|
|
70
80
|
}
|
|
71
81
|
/**
|
|
72
82
|
* Log an error message with an X
|
|
73
83
|
*/
|
|
74
84
|
export function error(message) {
|
|
75
|
-
console.log(`${pc.red('✖')} ${pc.red(message)}`);
|
|
85
|
+
console.log(`${INDENT}${pc.red('✖')} ${pc.red(message)}`);
|
|
76
86
|
}
|
|
77
87
|
/**
|
|
78
88
|
* Log a warning message
|
|
79
89
|
*/
|
|
80
90
|
export function warning(message) {
|
|
81
|
-
console.log(`${pc.yellow('⚠')} ${pc.yellow(message)}`);
|
|
91
|
+
console.log(`${INDENT}${pc.yellow('⚠')} ${pc.yellow(message)}`);
|
|
82
92
|
}
|
|
83
93
|
/**
|
|
84
94
|
* Log an info message
|
|
85
95
|
*/
|
|
86
96
|
export function info(message) {
|
|
87
|
-
console.log(`${pc.cyan('ℹ')} ${pc.cyan(message)}`);
|
|
97
|
+
console.log(`${INDENT}${pc.cyan('ℹ')} ${pc.cyan(message)}`);
|
|
88
98
|
}
|
|
89
99
|
/**
|
|
90
100
|
* Log a step/bullet point
|
|
91
101
|
*/
|
|
92
102
|
export function step(message) {
|
|
93
|
-
console.log(
|
|
103
|
+
console.log(`${INDENT} ${pc.dim('➜')} ${message}`);
|
|
94
104
|
}
|
|
95
105
|
/**
|
|
96
106
|
* Log a highlighted message
|
|
97
107
|
*/
|
|
98
108
|
export function highlight(message) {
|
|
99
|
-
console.log(pc.bold(pc.magenta(message)));
|
|
109
|
+
console.log(`${INDENT}${pc.bold(pc.magenta(message))}`);
|
|
100
110
|
}
|
|
101
111
|
/**
|
|
102
112
|
* Log a dimmed/subtle message
|
|
103
113
|
*/
|
|
104
114
|
export function dim(message) {
|
|
105
|
-
console.log(pc.dim(message));
|
|
115
|
+
console.log(`${INDENT}${pc.dim(message)}`);
|
|
106
116
|
}
|
|
107
117
|
/**
|
|
108
118
|
* Log a URL or link
|
|
@@ -116,6 +126,12 @@ export function link(url) {
|
|
|
116
126
|
export function bold(text) {
|
|
117
127
|
return pc.bold(text);
|
|
118
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Format text with background highlight (e.g., for "Tip:", "Note:", etc.)
|
|
131
|
+
*/
|
|
132
|
+
export function bgHighlight(text) {
|
|
133
|
+
return pc.bgYellow(pc.black(pc.bold(` ${text} `)));
|
|
134
|
+
}
|
|
119
135
|
/**
|
|
120
136
|
* Start a spinner with a message
|
|
121
137
|
*/
|
|
@@ -126,6 +142,7 @@ export function startSpinner(message) {
|
|
|
126
142
|
currentSpinner = ora({
|
|
127
143
|
text: message,
|
|
128
144
|
color: 'cyan',
|
|
145
|
+
indent: 3,
|
|
129
146
|
}).start();
|
|
130
147
|
return currentSpinner;
|
|
131
148
|
}
|
|
@@ -189,9 +206,7 @@ export function banner(name, version) {
|
|
|
189
206
|
const versionText = version ? pc.dim(`v${version}`) : '';
|
|
190
207
|
const title = `${pc.bold(pc.cyan(name))} ${versionText}`;
|
|
191
208
|
console.log(boxen(title, {
|
|
192
|
-
|
|
193
|
-
margin: 1,
|
|
194
|
-
borderStyle: 'double',
|
|
209
|
+
...defaultBoxOptions,
|
|
195
210
|
borderColor: 'cyan',
|
|
196
211
|
}));
|
|
197
212
|
}
|
|
@@ -205,11 +220,9 @@ export function serverInfo(port, features = []) {
|
|
|
205
220
|
content += '\n\n' + features.map(f => `${pc.dim('➜')} ${f}`).join('\n');
|
|
206
221
|
}
|
|
207
222
|
console.log(boxen(content, {
|
|
208
|
-
|
|
209
|
-
margin: 1,
|
|
210
|
-
borderStyle: 'round',
|
|
223
|
+
...defaultBoxOptions,
|
|
211
224
|
borderColor: 'green',
|
|
212
|
-
title: pc.bold(pc.green('🚀 Server Running')),
|
|
225
|
+
title: pc.bold(pc.green('🚀 React Scanner UI: Server Running')),
|
|
213
226
|
titleAlignment: 'center',
|
|
214
227
|
}));
|
|
215
228
|
}
|
|
@@ -226,9 +239,7 @@ export function buildComplete(outputDir, commands = []) {
|
|
|
226
239
|
commands.map(c => ` ${pc.cyan(c)}`).join('\n');
|
|
227
240
|
}
|
|
228
241
|
console.log(boxen(content, {
|
|
229
|
-
|
|
230
|
-
margin: 1,
|
|
231
|
-
borderStyle: 'round',
|
|
242
|
+
...defaultBoxOptions,
|
|
232
243
|
borderColor: 'green',
|
|
233
244
|
title: pc.bold(pc.green('✔ Build Complete')),
|
|
234
245
|
titleAlignment: 'center',
|
|
@@ -240,9 +251,7 @@ export function buildComplete(outputDir, commands = []) {
|
|
|
240
251
|
export function errorWithDetails(title, details) {
|
|
241
252
|
const content = details.map(d => `${pc.dim('•')} ${d}`).join('\n');
|
|
242
253
|
console.log(boxen(`${pc.bold(pc.red(title))}\n\n${content}`, {
|
|
243
|
-
|
|
244
|
-
margin: 1,
|
|
245
|
-
borderStyle: 'round',
|
|
254
|
+
...defaultBoxOptions,
|
|
246
255
|
borderColor: 'red',
|
|
247
256
|
}));
|
|
248
257
|
}
|
|
@@ -256,9 +265,7 @@ export function installInstructions(packageName) {
|
|
|
256
265
|
`${pc.bold('pnpm:')} pnpm add ${packageName}`,
|
|
257
266
|
].join('\n');
|
|
258
267
|
console.log(boxen(content, {
|
|
259
|
-
|
|
260
|
-
margin: 1,
|
|
261
|
-
borderStyle: 'round',
|
|
268
|
+
...defaultBoxOptions,
|
|
262
269
|
borderColor: 'yellow',
|
|
263
270
|
title: pc.bold(pc.yellow('📦 Install Required')),
|
|
264
271
|
titleAlignment: 'center',
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ export declare function readScannerConfig(): Promise<ScannerConfig | null>;
|
|
|
22
22
|
export declare function getOutputFile(config: ScannerConfig): string | null;
|
|
23
23
|
/**
|
|
24
24
|
* Read and parse the scan data from a JSON file
|
|
25
|
+
* Handles both raw format (from react-scanner) and wrapped format (from build)
|
|
25
26
|
*/
|
|
26
27
|
export declare function readScanData(filePath: string): ScanData | null;
|
|
27
28
|
/**
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAgBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CA0B9D;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"}
|
|
@@ -36,8 +36,18 @@ export function getOutputFile(config) {
|
|
|
36
36
|
}
|
|
37
37
|
return null;
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Check if the parsed data is in wrapped format { data, error }
|
|
41
|
+
*/
|
|
42
|
+
function isWrappedFormat(parsed) {
|
|
43
|
+
return (typeof parsed === 'object' &&
|
|
44
|
+
parsed !== null &&
|
|
45
|
+
'data' in parsed &&
|
|
46
|
+
'error' in parsed);
|
|
47
|
+
}
|
|
39
48
|
/**
|
|
40
49
|
* Read and parse the scan data from a JSON file
|
|
50
|
+
* Handles both raw format (from react-scanner) and wrapped format (from build)
|
|
41
51
|
*/
|
|
42
52
|
export function readScanData(filePath) {
|
|
43
53
|
const absolutePath = resolve(process.cwd(), filePath);
|
|
@@ -47,7 +57,13 @@ export function readScanData(filePath) {
|
|
|
47
57
|
}
|
|
48
58
|
try {
|
|
49
59
|
const content = readFileSync(absolutePath, 'utf-8');
|
|
50
|
-
|
|
60
|
+
const parsed = JSON.parse(content);
|
|
61
|
+
// Handle wrapped format { data, error } from build command
|
|
62
|
+
if (isWrappedFormat(parsed)) {
|
|
63
|
+
return parsed.data;
|
|
64
|
+
}
|
|
65
|
+
// Handle raw format from react-scanner
|
|
66
|
+
return parsed;
|
|
51
67
|
}
|
|
52
68
|
catch (error) {
|
|
53
69
|
logger.errorBox('Parse Error', `Failed to read scan data: ${error}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scannerConfig.js","sourceRoot":"","sources":["../../src/utils/scannerConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAgBtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAElE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,QAAQ,CACb,yBAAyB,EACzB,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,qCAAqC,CACvI,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CACb,qBAAqB,EACrB,2CAA2C,KAAK,EAAE,CACnD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,IACE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACxB,SAAS,CAAC,CAAC,CAAC,KAAK,4BAA4B;YAC7C,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EACtB,CAAC;YACD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEtD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,QAAQ,CACb,qBAAqB,EACrB,6BAA6B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,mCAAmC,CACrI,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpD,
|
|
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.
|
|
4
|
+
"version": "0.0.17",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"react-scanner-ui": "dist/index.js"
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"format:check": "prettier --check ."
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
+
"@inquirer/prompts": "^8.1.0",
|
|
38
39
|
"@vitejs/plugin-react": "^4.3.4",
|
|
39
40
|
"boxen": "^8.0.1",
|
|
40
41
|
"commander": "^14.0.2",
|