cumulocity-cypress
Version:
Cypress commands for Cumulocity IoT
106 lines (103 loc) • 3.77 kB
JavaScript
;
var _ = require('lodash');
var debug = require('debug');
var util = require('util');
var dotenv = require('dotenv');
var httpcontroller = require('./httpcontroller-BmRpHFCn.js');
require('date-fns');
require('@c8y/client');
require('set-cookie-parser');
var cosmiconfig = require('cosmiconfig');
var cosmiconfigTypescriptLoader = require('cosmiconfig-typescript-loader');
var startupUtil = require('./startup-util.js');
var path = require('path');
require('express');
require('raw-body');
require('cookie-parser');
require('winston');
require('morgan');
require('cookie');
require('http-proxy-middleware');
require('fs');
require('semver');
require('swagger-ui-express');
require('yaml');
require('yargs/yargs');
require('yargs/helpers');
require('winston/lib/winston/transports/');
require('glob');
const log = debug("c8y:ctrl:startup");
(async () => {
// load .env file first and overwrite with .c8yctrl file if present
dotenv.config();
dotenv.config({ path: ".c8yctrl", override: true });
// read config from environment variables or command line arguments
const [config, configFile] = startupUtil.getConfigFromArgsOrEnvironment();
log(`config from args and environment: ${JSON.stringify(config, null, 2)}`);
// load defaults and merge them with the current config
startupUtil.applyDefaultConfig(config);
let resolvedConfigFile = configFile;
if (configFile != null) {
log("config file provided:", configFile);
if (!path.isAbsolute(configFile)) {
resolvedConfigFile = path.resolve(process.cwd(), configFile);
log(`resolved config file to: ${resolvedConfigFile}`);
}
}
const configFileDir = resolvedConfigFile != null
? path.dirname(resolvedConfigFile)
: process.cwd();
const configFileName = resolvedConfigFile != null
? path.basename(resolvedConfigFile)
: "c8yctrl.config.ts";
const searchPlaces = [configFileName];
if (!searchPlaces.includes("c8yctrl.config.ts")) {
searchPlaces.push("c8yctrl.config.ts");
}
log("searching for config file in:", searchPlaces);
log("config file dir:", configFileDir);
const configLoader = cosmiconfig.cosmiconfig("cumulocity-cypress", {
searchPlaces,
loaders: {
".ts": cosmiconfigTypescriptLoader.TypeScriptLoader(),
},
});
const result = await configLoader.search(configFileDir);
if (result) {
log("loaded config:", result.filepath);
if (_.isFunction(result.config)) {
log("config exported a function");
const configClone = _.cloneDeep(config);
// assign logger after deep cloning: https://github.com/winstonjs/winston/issues/1730
configClone.logger = startupUtil.defaultLogger;
const c = result.config(configClone);
_.assignIn(config, c || configClone);
}
else {
log("config exported an object");
_.assignIn(config, result.config);
}
config.logger?.info("Config: " + result.filepath);
}
else {
log("no config file found in:", searchPlaces);
}
// now config is complete and we can start the controller
const c = config;
try {
startupUtil.validateConfig(config);
const controller = new httpcontroller.C8yPactHttpController(c);
config.on?.beforeStart?.(controller, c);
await controller.start();
}
catch (error) {
if (c.logger != null) {
c.logger?.error(`Error starting c8yctrl: ${util.inspect(error, { depth: null })}`);
}
else {
console.error(`Error starting c8yctrl`);
console.error(error);
}
}
})();