| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | const _ = require('lodash')const EventEmitter = require('eventemitter2').EventEmitter2/* global WIKI */module.exports = {  async init() {    WIKI.logger.info('=======================================')    WIKI.logger.info(`= Wiki.js ${_.padEnd(WIKI.version + ' ', 29, '=')}`)    WIKI.logger.info('=======================================')    WIKI.logger.info('Initializing...')    WIKI.models = require('./db').init()    try {      await WIKI.models.onReady      await WIKI.configSvc.loadFromDb()      await WIKI.configSvc.applyFlags()    } catch (err) {      WIKI.logger.error('Database Initialization Error: ' + err.message)      if (WIKI.IS_DEBUG) {        console.error(err)      }      process.exit(1)    }    this.bootMaster()  },  /**   * Pre-Master Boot Sequence   */  async preBootMaster() {    try {      await this.initTelemetry()      WIKI.sideloader = await require('./sideloader').init()      WIKI.cache = require('./cache').init()      WIKI.scheduler = require('./scheduler').init()      WIKI.servers = require('./servers')      WIKI.events = {        inbound: new EventEmitter(),        outbound: new EventEmitter()      }      WIKI.extensions = require('./extensions')      WIKI.asar = require('./asar')    } catch (err) {      WIKI.logger.error(err)      process.exit(1)    }  },  /**   * Boot Master Process   */  async bootMaster() {    try {      if (WIKI.config.setup) {        WIKI.logger.info('Starting setup wizard...')        require('../setup')()      } else {        await this.preBootMaster()        await require('../master')()        this.postBootMaster()      }    } catch (err) {      WIKI.logger.error(err)      process.exit(1)    }  },  /**   * Post-Master Boot Sequence   */  async postBootMaster() {    await WIKI.models.analytics.refreshProvidersFromDisk()    await WIKI.models.authentication.refreshStrategiesFromDisk()    await WIKI.models.commentProviders.refreshProvidersFromDisk()    await WIKI.models.editors.refreshEditorsFromDisk()    await WIKI.models.loggers.refreshLoggersFromDisk()    await WIKI.models.renderers.refreshRenderersFromDisk()    await WIKI.models.searchEngines.refreshSearchEnginesFromDisk()    await WIKI.models.storage.refreshTargetsFromDisk()    await WIKI.extensions.init()    await WIKI.auth.activateStrategies()    await WIKI.models.commentProviders.initProvider()    await WIKI.models.searchEngines.initEngine()    await WIKI.models.storage.initTargets()    WIKI.scheduler.start()    await WIKI.models.subscribeToNotifications()  },  /**   * Init Telemetry   */  async initTelemetry() {    require('./telemetry').init()    process.on('unhandledRejection', (err) => {      WIKI.logger.warn(err)      WIKI.telemetry.sendError(err)    })    process.on('uncaughtException', (err) => {      WIKI.logger.warn(err)      WIKI.telemetry.sendError(err)    })  },  /**   * Graceful shutdown   */  async shutdown () {    if (WIKI.servers) {      await WIKI.servers.stopServers()    }    if (WIKI.scheduler) {      await WIKI.scheduler.stop()    }    if (WIKI.models) {      await WIKI.models.unsubscribeToNotifications()      if (WIKI.models.knex) {        await WIKI.models.knex.destroy()      }    }    if (WIKI.asar) {      await WIKI.asar.unload()    }    process.exit(0)  }}
 |