66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { spawnSync } from "node:child_process";
|
|
import { readdir } from "node:fs/promises";
|
|
import { join } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const repoRoot = fileURLToPath(new URL("..", import.meta.url));
|
|
const officialDir = join(repoRoot, "plugins", "official");
|
|
|
|
const files = [];
|
|
const tests = [];
|
|
|
|
async function pathExists(path) {
|
|
try {
|
|
await readdir(path);
|
|
return true;
|
|
} catch (error) {
|
|
if (error.code === "ENOENT") return false;
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async function collectPluginChecks() {
|
|
if (!(await pathExists(officialDir))) return;
|
|
const plugins = await readdir(officialDir, { withFileTypes: true });
|
|
for (const plugin of plugins) {
|
|
if (!plugin.isDirectory() || plugin.name.startsWith(".")) continue;
|
|
const pluginDir = join(officialDir, plugin.name);
|
|
files.push(join(pluginDir, "index.js"));
|
|
await collectTestFiles(pluginDir);
|
|
}
|
|
}
|
|
|
|
async function collectTestFiles(dir) {
|
|
const entries = await readdir(dir, { withFileTypes: true });
|
|
for (const entry of entries) {
|
|
if (entry.name.startsWith(".")) continue;
|
|
const path = join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
await collectTestFiles(path);
|
|
} else if (entry.isFile() && entry.name === "test.js") {
|
|
files.push(path);
|
|
tests.push(path);
|
|
}
|
|
}
|
|
}
|
|
|
|
await collectPluginChecks();
|
|
|
|
if (files.length === 0) {
|
|
console.log("No plugin JavaScript files found.");
|
|
process.exit(0);
|
|
}
|
|
|
|
for (const file of files) {
|
|
const result = spawnSync(process.execPath, ["--check", file], { stdio: "inherit" });
|
|
if (result.status !== 0) process.exit(result.status ?? 1);
|
|
}
|
|
|
|
for (const file of tests) {
|
|
const result = spawnSync(process.execPath, [file], { stdio: "inherit" });
|
|
if (result.status !== 0) process.exit(result.status ?? 1);
|
|
}
|
|
|
|
console.log(`Checked ${files.length} plugin JavaScript file${files.length === 1 ? "" : "s"}; ran ${tests.length} plugin test${tests.length === 1 ? "" : "s"}.`);
|