mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-06-27 12:55:55 +00:00
114 lines
No EOL
2.8 KiB
JavaScript
114 lines
No EOL
2.8 KiB
JavaScript
'use strict';
|
|
|
|
import Logger from 'utilities/logging';
|
|
import Module from 'utilities/module';
|
|
|
|
import {DEBUG} from 'utilities/constants';
|
|
|
|
import SettingsManager from './settings/index';
|
|
import {TranslationManager} from './i18n';
|
|
import SocketClient from './socket';
|
|
import Site from 'site';
|
|
import Vue from 'utilities/vue';
|
|
|
|
class FrankerFaceZ extends Module {
|
|
constructor() {
|
|
super();
|
|
const start_time = performance.now(),
|
|
VER = FrankerFaceZ.version_info;
|
|
|
|
FrankerFaceZ.instance = this;
|
|
|
|
this.name = 'frankerfacez';
|
|
this.__state = 0;
|
|
this.__modules.core = this;
|
|
|
|
this.log = new Logger(this);
|
|
this.core_log = this.log.get('core');
|
|
|
|
this.log.info(`FrankerFaceZ v${VER} (build ${VER.build})`);
|
|
|
|
|
|
// ========================================================================
|
|
// Core Systems
|
|
// ========================================================================
|
|
|
|
this.inject('settings', SettingsManager);
|
|
this.inject('i18n', TranslationManager);
|
|
this.inject('socket', SocketClient);
|
|
this.inject('site', Site);
|
|
|
|
this.register('vue', Vue);
|
|
|
|
|
|
// ========================================================================
|
|
// Startup
|
|
// ========================================================================
|
|
|
|
this.discoverModules();
|
|
|
|
this.enable().then(() => this.enableInitialModules()).then(() => {
|
|
const duration = performance.now() - start_time;
|
|
this.core_log.info(`Initialization complete in ${duration.toFixed(5)}ms.`);
|
|
|
|
}).catch(err => {
|
|
this.core_log.error('An error occurred during initialization.', err);
|
|
});
|
|
}
|
|
|
|
static get() {
|
|
return FrankerFaceZ.instance;
|
|
}
|
|
|
|
|
|
// ========================================================================
|
|
// Modules
|
|
// ========================================================================
|
|
|
|
discoverModules() {
|
|
const ctx = require.context('src/modules', true, /(?:^(?:\.\/)?[^/]+|index)\.js$/),
|
|
modules = this.populate(ctx, this.core_log);
|
|
|
|
this.core_log.info(`Loaded descriptions of ${Object.keys(modules).length} modules.`);
|
|
}
|
|
|
|
|
|
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());
|
|
}
|
|
|
|
await Promise.all(promises);
|
|
}
|
|
|
|
|
|
/* eslint class-methods-use-this: off */
|
|
api() {
|
|
throw new Error('Not Implemented');
|
|
}
|
|
}
|
|
|
|
FrankerFaceZ.Logger = Logger;
|
|
|
|
const VER = FrankerFaceZ.version_info = {
|
|
major: 4, minor: 0, revision: 0, extra: '-beta1',
|
|
build: __webpack_hash__,
|
|
toString: () =>
|
|
`${VER.major}.${VER.minor}.${VER.revision}${VER.extra || ''}${DEBUG ? '-dev' : ''}`
|
|
}
|
|
|
|
|
|
FrankerFaceZ.utilities = {
|
|
dom: require('utilities/dom'),
|
|
color: require('utilities/color'),
|
|
events: require('utilities/events')
|
|
}
|
|
|
|
|
|
|
|
window.FrankerFaceZ = FrankerFaceZ;
|
|
window.ffz = new FrankerFaceZ(); |