116 lines
3.2 KiB
Plaintext
116 lines
3.2 KiB
Plaintext
|
import * as colors from "kleur/colors";
|
||
|
import { execSync } from "node:child_process";
|
||
|
import { arch, platform } from "node:os";
|
||
|
import prompts from "prompts";
|
||
|
import { resolveConfig } from "../../core/config/index.js";
|
||
|
import { ASTRO_VERSION } from "../../core/constants.js";
|
||
|
import { flagsToAstroInlineConfig } from "../flags.js";
|
||
|
async function getInfoOutput({
|
||
|
userConfig,
|
||
|
print
|
||
|
}) {
|
||
|
const rows = [
|
||
|
["Astro", `v${ASTRO_VERSION}`],
|
||
|
["Node", process.version],
|
||
|
["System", getSystem()],
|
||
|
["Package Manager", getPackageManager()]
|
||
|
];
|
||
|
try {
|
||
|
rows.push(["Output", userConfig.output ?? "static"]);
|
||
|
rows.push(["Adapter", userConfig.adapter?.name ?? "none"]);
|
||
|
const integrations = (userConfig?.integrations ?? []).filter(Boolean).flat().map((i) => i?.name).filter(Boolean);
|
||
|
rows.push(["Integrations", integrations.length > 0 ? integrations : "none"]);
|
||
|
} catch {
|
||
|
}
|
||
|
let output = "";
|
||
|
for (const [label, value] of rows) {
|
||
|
output += printRow(label, value, print);
|
||
|
}
|
||
|
return output.trim();
|
||
|
}
|
||
|
async function printInfo({ flags }) {
|
||
|
const { userConfig } = await resolveConfig(flagsToAstroInlineConfig(flags), "info");
|
||
|
const output = await getInfoOutput({ userConfig, print: true });
|
||
|
await copyToClipboard(output);
|
||
|
}
|
||
|
async function copyToClipboard(text) {
|
||
|
const system = platform();
|
||
|
let command = "";
|
||
|
if (system === "darwin") {
|
||
|
command = "pbcopy";
|
||
|
} else if (system === "win32") {
|
||
|
command = "clip";
|
||
|
} else {
|
||
|
try {
|
||
|
const output = execSync("which xclip", { encoding: "utf8" });
|
||
|
if (output[0] !== "/") {
|
||
|
return;
|
||
|
}
|
||
|
command = "xclip -sel clipboard -l 1";
|
||
|
} catch (e) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
console.log();
|
||
|
const { shouldCopy } = await prompts({
|
||
|
type: "confirm",
|
||
|
name: "shouldCopy",
|
||
|
message: "Copy to clipboard?",
|
||
|
initial: true
|
||
|
});
|
||
|
if (!shouldCopy)
|
||
|
return;
|
||
|
try {
|
||
|
execSync(command, {
|
||
|
input: text.trim(),
|
||
|
encoding: "utf8"
|
||
|
});
|
||
|
} catch (e) {
|
||
|
console.error(
|
||
|
colors.red(`
|
||
|
Sorry, something went wrong!`) + ` Please copy the text above manually.`
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
const PLATFORM_TO_OS = {
|
||
|
darwin: "macOS",
|
||
|
win32: "Windows",
|
||
|
linux: "Linux"
|
||
|
};
|
||
|
function getSystem() {
|
||
|
const system = PLATFORM_TO_OS[platform()] ?? platform();
|
||
|
return `${system} (${arch()})`;
|
||
|
}
|
||
|
function getPackageManager() {
|
||
|
if (!process.env.npm_config_user_agent) {
|
||
|
return "unknown";
|
||
|
}
|
||
|
const specifier = process.env.npm_config_user_agent.split(" ")[0];
|
||
|
const name = specifier.substring(0, specifier.lastIndexOf("/"));
|
||
|
return name === "npminstall" ? "cnpm" : name;
|
||
|
}
|
||
|
const MAX_PADDING = 25;
|
||
|
function printRow(label, value, print) {
|
||
|
const padding = MAX_PADDING - label.length;
|
||
|
const [first, ...rest] = Array.isArray(value) ? value : [value];
|
||
|
let plaintext = `${label}${" ".repeat(padding)}${first}`;
|
||
|
let richtext = `${colors.bold(label)}${" ".repeat(padding)}${colors.green(first)}`;
|
||
|
if (rest.length > 0) {
|
||
|
for (const entry of rest) {
|
||
|
plaintext += `
|
||
|
${" ".repeat(MAX_PADDING)}${entry}`;
|
||
|
richtext += `
|
||
|
${" ".repeat(MAX_PADDING)}${colors.green(entry)}`;
|
||
|
}
|
||
|
}
|
||
|
plaintext += "\n";
|
||
|
if (print) {
|
||
|
console.log(richtext);
|
||
|
}
|
||
|
return plaintext;
|
||
|
}
|
||
|
export {
|
||
|
getInfoOutput,
|
||
|
printInfo
|
||
|
};
|