52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
import Util from './core/util.mjs'
|
|
import { readFileSync } from 'fs'
|
|
import getLog from './core/log.mjs'
|
|
import lowdb from './core/db.mjs'
|
|
import Core from './core/core.mjs'
|
|
|
|
export default class ServiceCore {
|
|
constructor(name, root_import_meta_url) {
|
|
if (!root_import_meta_url) {
|
|
throw new Error('ServiceCore must be called with the full string from "import.meta.url" from a file residing in the root directory')
|
|
}
|
|
this._root_import_meta_url = root_import_meta_url
|
|
this.util = new Util(this._root_import_meta_url)
|
|
this.log = getLog(name)
|
|
this.db = null
|
|
this.config = null
|
|
this.core = null
|
|
}
|
|
|
|
close(err) {
|
|
if (err) {
|
|
this.log.fatal(err, 'App recorded a fatal error')
|
|
process.exit(4)
|
|
}
|
|
this.log.warn('App asked to be restarted')
|
|
process.exit(0)
|
|
}
|
|
|
|
async init(module = null) {
|
|
try {
|
|
this.config = JSON.parse(readFileSync(this.util.getPathFromRoot('./config.json')))
|
|
} catch (err) {
|
|
throw new Error('Unable to read config.json from root directory: ' + err)
|
|
}
|
|
|
|
try {
|
|
this.db = await lowdb(this.util, this.log)
|
|
} catch (err) {
|
|
throw new Error('Unable to read initialise lowdb: ' + err)
|
|
}
|
|
|
|
this.core = new Core(this.util, this.config, this.db, this.log, (err) => this.close(err))
|
|
|
|
if (module) {
|
|
return this.startModule(module)
|
|
}
|
|
}
|
|
|
|
startModule(module) {
|
|
return this.core.startModule(module, this.config.devPort)
|
|
}
|
|
}
|