function We (options) {
  if (!options) options = {};

  const we = this;

  this.packageJSON = require('../package.json');

  this.config = options;

  this.childProcesses = [];

  this.plugins = {};
  this.pluginPaths = [];
  this.pluginNames = [];
  // controllers
  this.controllers = {};

  this.projectPath = options.projectPath || process.cwd();

  this.projectPackageJSON = require(path.resolve(this.projectPath, 'package.json'));

  this.projectConfigFolder = options.projectConfigFolder || path.join(this.projectPath, 'config');

  // start configs with static configs
  this.config = staticConfig(this.projectPath, this);
  // enviroment config prod | dev | test
  we.env = options.env || require('./getEnv.js')();
  // winston logger
  we.log = require('./log')(we);
  // hooks and events
  we.hooks = new Hooks();

  we.events = new EventEmiter();
  // we.js events is controlled then we will use an max of 70 listenners in every event:
  we.events.setMaxListeners(70);
  // we.js sanitizer
  we.sanitizer = new Sanitizer(this);
  // The we.js router
  we.router = new Router(this);
  // we.js prototypes
  we.class = {
    Controller: require('./class/Controller.js'),
    Theme: require('./class/Theme.js')(we),
    Plugin: require('./class/Plugin.js')(we)
  };
  // database logic and models is avaible in we.db.models
  we.db = new Database(this);
  // - init database
  we.db.defaultConnection = we.db.connect(we.env);
  //set for more compatbility with sequelize docs
  we.db.sequelize = we.db.defaultConnection;
  // plugin manager and plugins vars
  we.pluginManager = new PluginManager(this);

  switch (we.config.bootstrapMode) {
    case 'install':
    case 'installation':
    case 'update':
      we.hooks.on('bootstrap', [
        we.bootstrapFunctions.checkDBConnection,
        we.bootstrapFunctions.loadCoreFeatures,
        we.bootstrapFunctions.loadPluginFeatures,
        we.bootstrapFunctions.initI18n,
        we.bootstrapFunctions.loadTemplateCache,
        we.bootstrapFunctions.instantiateModels,
        we.bootstrapFunctions.syncModels,
        we.bootstrapFunctions.loadControllers,
        we.bootstrapFunctions.installAndRegisterPlugins
      ]);
      break;
    case 'complete':
    case 'full':
    case 'test':
      // full load, usefull for tests
      we.hooks.on('bootstrap', [
        we.bootstrapFunctions.checkDBConnection,
        we.bootstrapFunctions.loadCoreFeatures,
        we.bootstrapFunctions.loadPluginFeatures,
        we.bootstrapFunctions.initI18n,
        we.bootstrapFunctions.loadTemplateCache,
        we.bootstrapFunctions.instantiateModels,
        we.bootstrapFunctions.syncModels,
        we.bootstrapFunctions.loadControllers,
        we.bootstrapFunctions.installAndRegisterPlugins,
        we.bootstrapFunctions.setExpressApp,
        we.bootstrapFunctions.passport,
        we.bootstrapFunctions.createDefaultFolders,
        we.bootstrapFunctions.registerAllViewTemplates,
        we.bootstrapFunctions.mergeRoutes,
        we.bootstrapFunctions.bindResources,
        we.bootstrapFunctions.bindRoutes
      ]);
      break;
    default:
      // defaults to load for run
      we.hooks.on('bootstrap', [
        we.bootstrapFunctions.checkDBConnection,
        we.bootstrapFunctions.loadCoreFeatures,
        we.bootstrapFunctions.loadPluginFeatures,
        we.bootstrapFunctions.initI18n,
        we.bootstrapFunctions.loadTemplateCache,
        we.bootstrapFunctions.instantiateModels,
        we.bootstrapFunctions.syncModels,
        we.bootstrapFunctions.loadControllers,
        we.bootstrapFunctions.installAndRegisterPlugins,
        we.bootstrapFunctions.setExpressApp,
        we.bootstrapFunctions.passport,
        we.bootstrapFunctions.createDefaultFolders,
        we.bootstrapFunctions.registerAllViewTemplates,
        we.bootstrapFunctions.mergeRoutes,
        we.bootstrapFunctions.bindResources,
        we.bootstrapFunctions.bindRoutes
      ]);
  }
}
function We (options) {
  if (!options) options = {};

  const we = this;

  this.packageJSON = require('../package.json');

  this.config = options;

  this.childProcesses = [];

  this.plugins = {};
  this.pluginPaths = [];
  this.pluginNames = [];
  
  this.controllers = {};

  this.projectPath = options.projectPath || process.cwd();

  this.projectPackageJSON = require(path.resolve(this.projectPath, 'package.json'));

  this.projectConfigFolder = options.projectConfigFolder || path.join(this.projectPath, 'config');

  
  this.config = staticConfig(this.projectPath, this);
  
  we.env = options.env || require('./getEnv.js')();
  
  we.log = require('./log')(we);
  
  we.hooks = new Hooks();

  we.events = new EventEmiter();
  
  we.events.setMaxListeners(70);
  
  we.sanitizer = new Sanitizer(this);
  
  we.router = new Router(this);
  
  we.class = {
    Controller: require('./class/Controller.js'),
    Theme: require('./class/Theme.js')(we),
    Plugin: require('./class/Plugin.js')(we)
  };
  
  we.db = new Database(this);
  
  we.db.defaultConnection = we.db.connect(we.env);
  
  we.db.sequelize = we.db.defaultConnection;
  
  we.pluginManager = new PluginManager(this);

  switch (we.config.bootstrapMode) {
    case 'install':
    case 'installation':
    case 'update':
      we.hooks.on('bootstrap', [
        we.bootstrapFunctions.checkDBConnection,
        we.bootstrapFunctions.loadCoreFeatures,
        we.bootstrapFunctions.loadPluginFeatures,
        we.bootstrapFunctions.initI18n,
        we.bootstrapFunctions.loadTemplateCache,
        we.bootstrapFunctions.instantiateModels,
        we.bootstrapFunctions.syncModels,
        we.bootstrapFunctions.loadControllers,
        we.bootstrapFunctions.installAndRegisterPlugins
      ]);
      break;
    case 'complete':
    case 'full':
    case 'test':
      
      we.hooks.on('bootstrap', [
        we.bootstrapFunctions.checkDBConnection,
        we.bootstrapFunctions.loadCoreFeatures,
        we.bootstrapFunctions.loadPluginFeatures,
        we.bootstrapFunctions.initI18n,
        we.bootstrapFunctions.loadTemplateCache,
        we.bootstrapFunctions.instantiateModels,
        we.bootstrapFunctions.syncModels,
        we.bootstrapFunctions.loadControllers,
        we.bootstrapFunctions.installAndRegisterPlugins,
        we.bootstrapFunctions.setExpressApp,
        we.bootstrapFunctions.passport,
        we.bootstrapFunctions.createDefaultFolders,
        we.bootstrapFunctions.registerAllViewTemplates,
        we.bootstrapFunctions.mergeRoutes,
        we.bootstrapFunctions.bindResources,
        we.bootstrapFunctions.bindRoutes
      ]);
      break;
    default:
      
      we.hooks.on('bootstrap', [
        we.bootstrapFunctions.checkDBConnection,
        we.bootstrapFunctions.loadCoreFeatures,
        we.bootstrapFunctions.loadPluginFeatures,
        we.bootstrapFunctions.initI18n,
        we.bootstrapFunctions.loadTemplateCache,
        we.bootstrapFunctions.instantiateModels,
        we.bootstrapFunctions.syncModels,
        we.bootstrapFunctions.loadControllers,
        we.bootstrapFunctions.installAndRegisterPlugins,
        we.bootstrapFunctions.setExpressApp,
        we.bootstrapFunctions.passport,
        we.bootstrapFunctions.createDefaultFolders,
        we.bootstrapFunctions.registerAllViewTemplates,
        we.bootstrapFunctions.mergeRoutes,
        we.bootstrapFunctions.bindResources,
        we.bootstrapFunctions.bindRoutes
      ]);
  }
}
function We ( options ) { if ( ! options ) options = { } ; const we = this ; this . packageJSON = require ( '../package.json' ) ; this . config = options ; this . childProcesses = [ ] ; this . plugins = { } ; this . pluginPaths = [ ] ; this . pluginNames = [ ] ; // controllers this . controllers = { } ; this . projectPath = options . projectPath || process . cwd ( ) ; this . projectPackageJSON = require ( path . resolve ( this . projectPath , 'package.json' ) ) ; this . projectConfigFolder = options . projectConfigFolder || path . join ( this . projectPath , 'config' ) ; // start configs with static configs this . config = staticConfig ( this . projectPath , this ) ; // enviroment config prod | dev | test we . env = options . env || require ( './getEnv.js' ) ( ) ; // winston logger we . log = require ( './log' ) ( we ) ; // hooks and events we . hooks = new Hooks ( ) ; we . events = new EventEmiter ( ) ; // we.js events is controlled then we will use an max of 70 listenners in every event: we . events . setMaxListeners ( 70 ) ; // we.js sanitizer we . sanitizer = new Sanitizer ( this ) ; // The we.js router we . router = new Router ( this ) ; // we.js prototypes we . class = { Controller : require ( './class/Controller.js' ) , Theme : require ( './class/Theme.js' ) ( we ) , Plugin : require ( './class/Plugin.js' ) ( we ) } ; // database logic and models is avaible in we.db.models we . db = new Database ( this ) ; // - init database we . db . defaultConnection = we . db . connect ( we . env ) ; //set for more compatbility with sequelize docs we . db . sequelize = we . db . defaultConnection ; // plugin manager and plugins vars we . pluginManager = new PluginManager ( this ) ; switch ( we . config . bootstrapMode ) { case 'install' : case 'installation' : case 'update' : we . hooks . on ( 'bootstrap' , [ we . bootstrapFunctions . checkDBConnection , we . bootstrapFunctions . loadCoreFeatures , we . bootstrapFunctions . loadPluginFeatures , we . bootstrapFunctions . initI18n , we . bootstrapFunctions . loadTemplateCache , we . bootstrapFunctions . instantiateModels , we . bootstrapFunctions . syncModels , we . bootstrapFunctions . loadControllers , we . bootstrapFunctions . installAndRegisterPlugins ] ) ; break ; case 'complete' : case 'full' : case 'test' : // full load, usefull for tests we . hooks . on ( 'bootstrap' , [ we . bootstrapFunctions . checkDBConnection , we . bootstrapFunctions . loadCoreFeatures , we . bootstrapFunctions . loadPluginFeatures , we . bootstrapFunctions . initI18n , we . bootstrapFunctions . loadTemplateCache , we . bootstrapFunctions . instantiateModels , we . bootstrapFunctions . syncModels , we . bootstrapFunctions . loadControllers , we . bootstrapFunctions . installAndRegisterPlugins , we . bootstrapFunctions . setExpressApp , we . bootstrapFunctions . passport , we . bootstrapFunctions . createDefaultFolders , we . bootstrapFunctions . registerAllViewTemplates , we . bootstrapFunctions . mergeRoutes , we . bootstrapFunctions . bindResources , we . bootstrapFunctions . bindRoutes ] ) ; break ; default : // defaults to load for run we . hooks . on ( 'bootstrap' , [ we . bootstrapFunctions . checkDBConnection , we . bootstrapFunctions . loadCoreFeatures , we . bootstrapFunctions . loadPluginFeatures , we . bootstrapFunctions . initI18n , we . bootstrapFunctions . loadTemplateCache , we . bootstrapFunctions . instantiateModels , we . bootstrapFunctions . syncModels , we . bootstrapFunctions . loadControllers , we . bootstrapFunctions . installAndRegisterPlugins , we . bootstrapFunctions . setExpressApp , we . bootstrapFunctions . passport , we . bootstrapFunctions . createDefaultFolders , we . bootstrapFunctions . registerAllViewTemplates , we . bootstrapFunctions . mergeRoutes , we . bootstrapFunctions . bindResources , we . bootstrapFunctions . bindRoutes ] ) ; } }
We.js object

@type {Object}
We . js object