astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
39 lines (38 loc) • 1.5 kB
JavaScript
function withVersion(name, version) {
let result = name;
if (version) {
result += ` (${version})`;
}
return result;
}
export class CliDebugInfoProvider {
#config;
#astroVersionProvider;
#packageManager;
#operatingSystemProvider;
#nodeVersionProvider;
constructor({ config, astroVersionProvider, packageManager, operatingSystemProvider, nodeVersionProvider }) {
this.#config = config;
this.#astroVersionProvider = astroVersionProvider;
this.#packageManager = packageManager;
this.#operatingSystemProvider = operatingSystemProvider;
this.#nodeVersionProvider = nodeVersionProvider;
}
async get() {
const debugInfo = [
["Astro", `v${this.#astroVersionProvider.version}`],
["Node", this.#nodeVersionProvider.version],
["System", this.#operatingSystemProvider.displayName],
["Package Manager", this.#packageManager.name],
["Output", this.#config.output]
];
const viteVersion = await this.#packageManager.getPackageVersion("vite");
if (viteVersion) {
debugInfo.splice(1, 0, ["Vite", viteVersion]);
}
debugInfo.push(["Adapter", this.#config.adapter ? withVersion(this.#config.adapter.name, await this.#packageManager.getPackageVersion(this.#config.adapter.name)) : "none"]);
const integrations = await Promise.all(this.#config.integrations.map(async ({ name }) => withVersion(name, await this.#packageManager.getPackageVersion(name))));
debugInfo.push(["Integrations", integrations.length > 0 ? integrations : "none"]);
return debugInfo;
}
}