import { existsSync, mkdirSync, createWriteStream, unlinkSync } from 'fs'; import { resolve, dirname } from 'path'; import { fileURLToPath } from 'url'; import { get } from 'https'; const __dirname = dirname(fileURLToPath(import.meta.url)); const rootDir = resolve(__dirname, '..'); const libDir = resolve(rootDir, 'jars', 'pmd', 'lib'); const PMD_VERSION = '7.26.0'; const PMD_JARS = [ `pmd-core-${PMD_VERSION}.jar`, `pmd-java-${PMD_VERSION}.jar`, `pmd-javascript-${PMD_VERSION}.jar`, `pmd-jsp-${PMD_VERSION}.jar`, ]; const MAVEN_BASE = `https://repo1.maven.org/maven2/net/sourceforge/pmd`; function downloadFile(url, dest) { return new Promise((resolvePromise, reject) => { const file = createWriteStream(dest); get(url, (response) => { if (response.statusCode === 302 || response.statusCode === 301) { downloadFile(response.headers.location, dest).then(resolvePromise).catch(reject); return; } response.pipe(file); file.on('finish', () => { file.close(); resolvePromise(); }); file.on('error', (err) => { unlinkSync(dest); reject(err); }); }).on('error', (err) => { unlinkSync(dest); reject(err); }); }); } if (!existsSync(libDir)) { mkdirSync(libDir, { recursive: true }); } for (const jar of PMD_JARS) { const moduleName = jar.replace(`-${PMD_VERSION}.jar`, '').replace('pmd-', ''); const url = `${MAVEN_BASE}/pmd-${moduleName}/${PMD_VERSION}/${jar}`; const dest = resolve(libDir, jar); if (existsSync(dest)) { console.log(`Skip: ${jar} (exists)`); continue; } console.log(`Downloading: ${url}`); await downloadFile(url, dest); console.log(`Done: ${jar}`); } console.log('PMD JARs download complete.');