41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
import { existsSync, readFileSync } from 'node:fs';
|
|
import { spawnSync } from 'node:child_process';
|
|
import path from 'node:path';
|
|
|
|
const command = process.argv[2];
|
|
if (!command) {
|
|
console.error('[react-path] Missing command argument (e.g. lint/test/build/dev).');
|
|
process.exit(1);
|
|
}
|
|
|
|
const reactDir = path.resolve(process.cwd(), 'frontend-react');
|
|
const reactPkgPath = path.join(reactDir, 'package.json');
|
|
const reactNodeModulesPath = path.join(reactDir, 'node_modules');
|
|
|
|
if (!existsSync(reactPkgPath)) {
|
|
console.log(`[react-path] Stub: frontend-react is not scaffolded yet. Skipping "${command}".`);
|
|
process.exit(0);
|
|
}
|
|
|
|
const reactPkg = JSON.parse(readFileSync(reactPkgPath, 'utf8'));
|
|
if (!reactPkg.scripts || !reactPkg.scripts[command]) {
|
|
console.log(`[react-path] Stub: frontend-react/package.json has no "${command}" script. Skipping.`);
|
|
process.exit(0);
|
|
}
|
|
|
|
if (!existsSync(reactNodeModulesPath)) {
|
|
console.log('[react-path] Stub: frontend-react dependencies are not installed. Skipping.');
|
|
process.exit(0);
|
|
}
|
|
|
|
const result = spawnSync('npm', ['--prefix', reactDir, 'run', command], {
|
|
stdio: 'inherit',
|
|
});
|
|
|
|
if (typeof result.status === 'number') {
|
|
process.exit(result.status);
|
|
}
|
|
|
|
process.exit(1);
|