1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-06-28 05:15:54 +00:00
FrankerFaceZ/src/main.js

123 lines
3.2 KiB
JavaScript
Raw Normal View History

2017-11-13 01:23:39 -05:00
'use strict';
2017-11-13 01:23:39 -05:00
import Logger from 'utilities/logging';
import Module from 'utilities/module';
2017-11-13 01:23:39 -05:00
import {DEBUG} from 'utilities/constants';
2017-11-13 01:23:39 -05:00
import SettingsManager from './settings/index';
//import ExperimentManager from './experiments';
2017-11-13 01:23:39 -05:00
import {TranslationManager} from './i18n';
import SocketClient from './socket';
import Site from 'site';
import Vue from 'utilities/vue';
2017-11-13 01:23:39 -05:00
class FrankerFaceZ extends Module {
constructor() {
super();
const start_time = performance.now(),
VER = FrankerFaceZ.version_info;
2017-11-13 01:23:39 -05:00
FrankerFaceZ.instance = this;
2017-11-13 01:23:39 -05:00
this.name = 'frankerfacez';
this.__state = 0;
this.__modules.core = this;
2017-11-13 01:23:39 -05:00
this.log = new Logger(this);
this.core_log = this.log.get('core');
2017-11-13 01:23:39 -05:00
this.log.info(`FrankerFaceZ v${VER} (build ${VER.build})`);
2017-11-13 01:23:39 -05:00
// ========================================================================
// Core Systems
// ========================================================================
2017-11-13 01:23:39 -05:00
this.inject('settings', SettingsManager);
//this.inject('experiments', ExperimentManager);
2017-11-13 01:23:39 -05:00
this.inject('i18n', TranslationManager);
this.inject('socket', SocketClient);
this.inject('site', Site);
2017-11-13 01:23:39 -05:00
this.register('vue', Vue);
2017-11-13 01:23:39 -05:00
// ========================================================================
// Startup
// ========================================================================
2017-11-13 01:23:39 -05:00
this.discoverModules();
2017-11-13 01:23:39 -05:00
this.enable().then(() => this.enableInitialModules()).then(() => {
const duration = performance.now() - start_time;
this.core_log.info(`Initialization complete in ${duration.toFixed(5)}ms.`);
2017-11-13 01:23:39 -05:00
}).catch(err => {
this.core_log.error('An error occurred during initialization.', err);
2016-05-24 19:24:45 -04:00
});
}
2017-11-13 01:23:39 -05:00
static get() {
return FrankerFaceZ.instance;
}
2017-11-13 01:23:39 -05:00
// ========================================================================
// Modules
// ========================================================================
2017-11-13 01:23:39 -05:00
discoverModules() {
const ctx = require.context('src/modules', true, /(?:^(?:\.\/)?[^/]+|index)\.jsx?$/),
2017-11-13 01:23:39 -05:00
modules = this.populate(ctx, this.core_log);
2017-11-13 01:23:39 -05:00
this.core_log.info(`Loaded descriptions of ${Object.keys(modules).length} modules.`);
}
2017-11-13 01:23:39 -05:00
async enableInitialModules() {
const promises = [];
/* eslint guard-for-in: off */
for(const key in this.__modules) {
const module = this.__modules[key];
if ( module instanceof Module && module.should_enable )
promises.push(module.enable());
}
2017-11-13 01:23:39 -05:00
await Promise.all(promises);
}
2017-11-13 01:23:39 -05:00
/* eslint class-methods-use-this: off */
api(...args) {
return this._api.create(...args);
2017-11-13 01:23:39 -05:00
}
}
2017-11-13 01:23:39 -05:00
FrankerFaceZ.Logger = Logger;
2017-11-13 01:23:39 -05:00
const VER = FrankerFaceZ.version_info = {
major: 4, minor: 0, revision: 0, extra: '-beta2.3',
2017-11-13 01:23:39 -05:00
build: __webpack_hash__,
toString: () =>
`${VER.major}.${VER.minor}.${VER.revision}${VER.extra || ''}${DEBUG ? '-dev' : ''}`
2015-06-05 03:59:28 -04:00
}
2017-11-13 01:23:39 -05:00
FrankerFaceZ.utilities = {
dom: require('utilities/dom'),
color: require('utilities/color'),
events: require('utilities/events'),
module: require('utilities/module'),
constants: require('utilities/constants'),
logging: require('utilities/logging'),
object: require('utilities/object'),
time: require('utilities/time'),
tooltip: require('utilities/tooltip')
2015-06-05 03:59:28 -04:00
}
2017-11-13 01:23:39 -05:00
window.FrankerFaceZ = FrankerFaceZ;
window.ffz = new FrankerFaceZ();