renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
68 lines • 3.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.migrateAndValidateConfig = migrateAndValidateConfig;
exports.getParsedContent = getParsedContent;
const tslib_1 = require("tslib");
const url_1 = require("url");
const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
const dequal_1 = require("dequal");
const upath_1 = tslib_1.__importDefault(require("upath"));
const massage_1 = require("../../../../config/massage");
const migration_1 = require("../../../../config/migration");
const validation_1 = require("../../../../config/validation");
const logger_1 = require("../../../../logger");
const common_1 = require("../../../../util/common");
const fs_1 = require("../../../../util/fs");
const yaml_1 = require("../../../../util/yaml");
async function migrateAndValidateConfig(config, configType) {
const { isMigrated, migratedConfig } = (0, migration_1.migrateConfig)(config);
if (isMigrated) {
logger_1.logger.warn({ configType, originalConfig: config, migratedConfig }, 'Config needs migrating');
}
const massagedConfig = (0, massage_1.massageConfig)(migratedConfig);
// log only if it's changed
if (!(0, dequal_1.dequal)(migratedConfig, massagedConfig)) {
logger_1.logger.trace({ config: massagedConfig }, 'Post-massage config');
}
const { warnings, errors } = await (0, validation_1.validateConfig)('global', massagedConfig);
if (warnings.length) {
logger_1.logger.warn({ configType, warnings }, 'Config validation warnings found');
}
if (errors.length) {
logger_1.logger.warn({ configType, errors }, 'Config validation errors found');
}
return massagedConfig;
}
async function getParsedContent(file) {
if (upath_1.default.basename(file) === '.renovaterc') {
return (0, common_1.parseJson)(await (0, fs_1.readSystemFile)(file, 'utf8'), file);
}
switch (upath_1.default.extname(file)) {
case '.yaml':
case '.yml':
return (0, yaml_1.parseSingleYaml)(await (0, fs_1.readSystemFile)(file, 'utf8'));
case '.json5':
case '.json':
return (0, common_1.parseJson)(await (0, fs_1.readSystemFile)(file, 'utf8'), file);
case '.cjs':
case '.mjs':
case '.js': {
const absoluteFilePath = upath_1.default.isAbsolute(file)
? file
: `${process.cwd()}/${file}`;
// use file url paths to avoid issues with windows paths
// typescript does not support file URL for import
const tmpConfig = await import((0, url_1.pathToFileURL)(absoluteFilePath).href);
/* v8 ignore next -- not testable */
let config = tmpConfig.default ?? tmpConfig;
// Allow the config to be a function
if (is_1.default.function(config)) {
config = config();
}
return config;
}
default:
throw new Error('Unsupported file type');
}
}
//# sourceMappingURL=util.js.map