@percy/agent
Version:
An agent process for integrating with Percy.
56 lines (55 loc) • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const deepmerge = require("deepmerge");
const fs = require("fs");
const yaml = require("js-yaml");
const path = require("path");
const logger_1 = require("../utils/logger");
const configuration_1 = require("./../configuration/configuration");
class ConfigurationService {
constructor(configurationFile = ConfigurationService.DEFAULT_FILE) {
// We start with the default configuration
this.configuration = configuration_1.DEFAULT_CONFIGURATION;
// Next we merge in configuration from .percy.yml if we have it
this.applyFile(configurationFile);
}
applyFile(configurationFile) {
try {
const userConfigFilePath = path.join(process.cwd(), configurationFile);
const userConf = yaml.safeLoad(fs.readFileSync(userConfigFilePath, 'utf8'));
// apply a deep overwrite merge to userConf and this.configuration
const overwriteMerge = (destinationArray, sourceArray, options) => sourceArray;
this.configuration = deepmerge(this.configuration, userConf, { arrayMerge: overwriteMerge });
}
catch (_a) {
logger_1.default.debug('.percy.yml configuration file not supplied or failed to be loaded and parsed.');
}
return this.configuration;
}
applyFlags(flags) {
if (flags.port) {
this.configuration.agent.port = flags.port;
}
if (flags['network-idle-timeout']) {
this.configuration.agent['asset-discovery']['network-idle-timeout'] = flags['network-idle-timeout'];
}
if (flags['base-url']) {
this.configuration['static-snapshots']['base-url'] = flags['base-url'];
}
if (flags['snapshot-files']) {
this.configuration['static-snapshots']['snapshot-files'] = flags['snapshot-files'];
}
if (flags['ignore-files']) {
this.configuration['static-snapshots']['ignore-files'] = flags['ignore-files'];
}
return this.configuration;
}
applyArgs(args) {
if (args.snapshotDirectory) {
this.configuration['static-snapshots'].path = args.snapshotDirectory;
}
return this.configuration;
}
}
ConfigurationService.DEFAULT_FILE = '.percy.yml';
exports.default = ConfigurationService;