40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
![]() |
import * as colors from "kleur/colors";
|
||
|
import fs from "node:fs";
|
||
|
import { ZodError } from "zod";
|
||
|
import { createSettings, openConfig, resolveConfigPath } from "../core/config/index.js";
|
||
|
import { collectErrorMetadata } from "../core/errors/dev/index.js";
|
||
|
import { error } from "../core/logger/core.js";
|
||
|
import { formatConfigErrorMessage, formatErrorMessage } from "../core/messages.js";
|
||
|
import * as event from "../events/index.js";
|
||
|
import { eventConfigError, telemetry } from "../events/index.js";
|
||
|
async function loadSettings({ cmd, flags, logging }) {
|
||
|
const root = flags.root;
|
||
|
const { astroConfig: initialAstroConfig, userConfig: initialUserConfig } = await openConfig({
|
||
|
cwd: root,
|
||
|
flags,
|
||
|
cmd
|
||
|
}).catch(async (e) => {
|
||
|
await handleConfigError(e, { cmd, cwd: root, flags, logging });
|
||
|
return {};
|
||
|
});
|
||
|
if (!initialAstroConfig)
|
||
|
return;
|
||
|
telemetry.record(event.eventCliSession(cmd, initialUserConfig, flags));
|
||
|
return createSettings(initialAstroConfig, root);
|
||
|
}
|
||
|
async function handleConfigError(e, { cmd, cwd, flags, logging }) {
|
||
|
const path = await resolveConfigPath({ cwd, flags, fs });
|
||
|
error(logging, "astro", `Unable to load ${path ? colors.bold(path) : "your Astro config"}
|
||
|
`);
|
||
|
if (e instanceof ZodError) {
|
||
|
console.error(formatConfigErrorMessage(e) + "\n");
|
||
|
telemetry.record(eventConfigError({ cmd, err: e, isFatal: true }));
|
||
|
} else if (e instanceof Error) {
|
||
|
console.error(formatErrorMessage(collectErrorMetadata(e)) + "\n");
|
||
|
}
|
||
|
}
|
||
|
export {
|
||
|
handleConfigError,
|
||
|
loadSettings
|
||
|
};
|