import { logger } from "../../../../logger/index.js";
import { getParsedContent, migrateAndValidateConfig } from "./util.js";
import fs from "fs-extra";
import { isEmptyStringOrWhitespace, isNonEmptyObject, isNonEmptyString, isUndefined } from "@sindresorhus/is";

//#region lib/workers/global/config/parse/file.ts
async function getConfig(env) {
	const configFile = env.RENOVATE_CONFIG_FILE ?? "config.js";
	const configFileExists = await fs.pathExists(configFile);
	if (env.RENOVATE_CONFIG_FILE && !configFileExists) {
		logger.fatal({ configFile }, `Custom config file specified in RENOVATE_CONFIG_FILE must exist`);
		process.exit(1);
	}
	let config = {};
	if (!configFileExists) {
		logger.debug("No config file found on disk - skipping");
		return config;
	}
	logger.debug("Checking for config file in " + configFile);
	try {
		config = await getParsedContent(configFile);
	} catch (err) {
		if (err instanceof SyntaxError || err instanceof TypeError) {
			logger.fatal({ error: err.stack }, "Could not parse config file");
			process.exit(1);
		} else if (err instanceof ReferenceError) {
			logger.fatal(`Error parsing config file due to unresolved variable(s): ${err.message}`);
			process.exit(1);
		} else if (err.message === "Unsupported file type") {
			logger.fatal(err.message);
			process.exit(1);
		} else if (env.RENOVATE_CONFIG_FILE) {
			logger.debug({ err }, "Parse error");
			logger.fatal("Error parsing config file");
			process.exit(1);
		}
		logger.debug("Error reading or parsing file - skipping");
	}
	if (isNonEmptyObject(config.processEnv)) {
		const exportedKeys = [];
		for (const [key, value] of Object.entries(config.processEnv)) {
			if (!isNonEmptyString(value)) {
				logger.error({ key }, "processEnv value is not a string.");
				continue;
			}
			exportedKeys.push(key);
			process.env[key] = value;
		}
		logger.debug({ keys: exportedKeys }, "processEnv keys were exported to env");
		delete config.processEnv;
	}
	return migrateAndValidateConfig(config, configFile);
}
async function deleteNonDefaultConfig(env, deleteConfigFile) {
	const configFile = env.RENOVATE_CONFIG_FILE;
	if (isUndefined(configFile) || isEmptyStringOrWhitespace(configFile)) return;
	if (!deleteConfigFile) return;
	if (!await fs.pathExists(configFile)) return;
	try {
		await fs.remove(configFile);
		logger.trace({ path: configFile }, "config file successfully deleted");
	} catch (err) {
		logger.warn({ err }, "error deleting config file");
	}
}

//#endregion
export { deleteNonDefaultConfig, getConfig };
//# sourceMappingURL=file.js.map