astro-ghostcms/.pnpm-store/v3/files/43/05c9671a5aef226b5ce2d24f5f5...

116 lines
3.2 KiB
Plaintext
Raw Normal View History

2024-02-14 14:10:47 +00:00
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
};