62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
const { spawnSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const rootDir = path.resolve(__dirname, '..');
|
|
const scanDirs = ['src', 'model', 'cubejs'].map((dir) => path.join(rootDir, dir));
|
|
const ignoredDirs = new Set(['node_modules', '.cubestore', 'dist', 'coverage']);
|
|
|
|
function collectJavaScriptFiles(dir, files = []) {
|
|
if (!fs.existsSync(dir)) {
|
|
return files;
|
|
}
|
|
|
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
if (entry.isDirectory()) {
|
|
if (!ignoredDirs.has(entry.name)) {
|
|
collectJavaScriptFiles(path.join(dir, entry.name), files);
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (entry.isFile() && /\.(c?m?js)$/.test(entry.name)) {
|
|
files.push(path.join(dir, entry.name));
|
|
}
|
|
}
|
|
|
|
return files;
|
|
}
|
|
|
|
const files = scanDirs.flatMap((dir) => collectJavaScriptFiles(dir)).sort();
|
|
|
|
if (!files.length) {
|
|
console.log('No JavaScript files found for syntax check.');
|
|
process.exit(0);
|
|
}
|
|
|
|
let failed = false;
|
|
|
|
for (const file of files) {
|
|
const result = spawnSync(process.execPath, ['--check', file], {
|
|
cwd: rootDir,
|
|
encoding: 'utf8',
|
|
});
|
|
|
|
if (result.status !== 0) {
|
|
failed = true;
|
|
console.error(`\nSyntax check failed: ${path.relative(rootDir, file)}`);
|
|
if (result.stderr) {
|
|
console.error(result.stderr.trim());
|
|
}
|
|
if (result.stdout) {
|
|
console.error(result.stdout.trim());
|
|
}
|
|
}
|
|
}
|
|
|
|
if (failed) {
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Syntax check passed for ${files.length} JavaScript files.`);
|