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.`);