initial
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
import { spawnSync } from "node:child_process";
|
||||
|
||||
const TOOL_VERSION = "0.1.0";
|
||||
|
||||
function parseArgs(argv) {
|
||||
const args = { path: null, url: null, allowRoot: false };
|
||||
for (const a of argv) {
|
||||
if (a === "--allow-root") args.allowRoot = true;
|
||||
if (a.startsWith("--path=")) args.path = a.slice("--path=".length);
|
||||
if (a.startsWith("--url=")) args.url = a.slice("--url=".length);
|
||||
}
|
||||
return args;
|
||||
}
|
||||
|
||||
function runWp(cmdArgs, { pathArg, urlArg, allowRoot }) {
|
||||
const args = [];
|
||||
if (allowRoot) args.push("--allow-root");
|
||||
if (pathArg) args.push(`--path=${pathArg}`);
|
||||
if (urlArg) args.push(`--url=${urlArg}`);
|
||||
args.push(...cmdArgs);
|
||||
|
||||
const out = spawnSync("wp", args, { encoding: "utf8" });
|
||||
return {
|
||||
ok: out.status === 0,
|
||||
status: out.status,
|
||||
error: out.error ? { message: out.error.message, code: out.error.code } : null,
|
||||
stdout: (out.stdout || "").trim(),
|
||||
stderr: (out.stderr || "").trim(),
|
||||
args,
|
||||
};
|
||||
}
|
||||
|
||||
function main() {
|
||||
const opts = parseArgs(process.argv.slice(2));
|
||||
|
||||
const info = runWp(["--info"], { pathArg: null, urlArg: null, allowRoot: opts.allowRoot });
|
||||
const report = {
|
||||
tool: { name: "wpcli_inspect", version: TOOL_VERSION },
|
||||
wpCli: {
|
||||
available: info.ok,
|
||||
info,
|
||||
},
|
||||
wordpress: {
|
||||
path: opts.path,
|
||||
url: opts.url,
|
||||
isInstalled: null,
|
||||
coreVersion: null,
|
||||
isMultisite: null,
|
||||
siteurl: null,
|
||||
home: null,
|
||||
},
|
||||
notes: [],
|
||||
};
|
||||
|
||||
if (!info.ok) {
|
||||
report.notes.push("WP-CLI not available on PATH. Install WP-CLI or run inside the intended container/environment.");
|
||||
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
||||
return;
|
||||
}
|
||||
|
||||
const isInstalled = runWp(["core", "is-installed"], { pathArg: opts.path, urlArg: opts.url, allowRoot: opts.allowRoot });
|
||||
report.wordpress.isInstalled = isInstalled.ok;
|
||||
|
||||
if (!isInstalled.ok) {
|
||||
report.notes.push("WordPress not detected at the given path/url. Check --path/--url (multisite) and that wp-config.php is present.");
|
||||
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
||||
return;
|
||||
}
|
||||
|
||||
const coreVersion = runWp(["core", "version"], { pathArg: opts.path, urlArg: opts.url, allowRoot: opts.allowRoot });
|
||||
report.wordpress.coreVersion = coreVersion.ok ? coreVersion.stdout : null;
|
||||
|
||||
const isMultisite = runWp(["core", "is-installed", "--network"], {
|
||||
pathArg: opts.path,
|
||||
urlArg: opts.url,
|
||||
allowRoot: opts.allowRoot,
|
||||
});
|
||||
// If network check passes, we can assume multisite. If it fails, it might still be multisite depending on context.
|
||||
report.wordpress.isMultisite = isMultisite.ok;
|
||||
|
||||
const siteurl = runWp(["option", "get", "siteurl"], { pathArg: opts.path, urlArg: opts.url, allowRoot: opts.allowRoot });
|
||||
report.wordpress.siteurl = siteurl.ok ? siteurl.stdout : null;
|
||||
|
||||
const home = runWp(["option", "get", "home"], { pathArg: opts.path, urlArg: opts.url, allowRoot: opts.allowRoot });
|
||||
report.wordpress.home = home.ok ? home.stdout : null;
|
||||
|
||||
process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user