UNPKG

cumulocity-cypress

Version:
106 lines (103 loc) 3.77 kB
#!/usr/bin/env node 'use strict'; 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); } } })();