yekonga-server
Version:
Yekonga Server
122 lines (98 loc) • 3.43 kB
JavaScript
// @ts-nocheck
/*global Yekonga, serverLibrary */
// Yekonga framework alternative to Perse Server
// process.setMaxListeners(0);
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
require(`./global`);
const { YekongaServer } = require(`./core/init`);
Yekonga.setConfig = function(config, database) {
serverLibrary.__dirname = process.cwd();
serverLibrary.__src = __dirname;
new YekongaServer(config, database);
}
Yekonga.Storage = new (class Storage {
constructor() {
this.hasRedis = false;
this.client = null;
this.localState = {};
}
async connect() {
try {
var config = {};
if(Yekonga.Config.ports.redis) {
config.url = `redis://localhost:${Yekonga.Config.ports.redis}`;
}
if(config.url) {
this.client = global.serverLibrary.createClient(config);
this.client.on('error', (err) => {
console.error('Redis Client Error', err);
this.hasRedis = false;
});
} else {
await this.client.connect();
this.hasRedis = true;
}
} catch (error) {
console.error('Redis Connection', error);
this.hasRedis = false;
}
}
async set(key, value) {
if(this.hasRedis) {
await this.client.set(key, JSON.stringify(value));
} else {
this.localState[key] = value;
}
}
async get(key, defaultValue) {
var value = null;
try {
if(this.hasRedis) {
value = JSON.parse(await this.client.get(key));
} else {
value = this.localState[key];
}
} catch (error) {
console.error('Yekonga.Storage', error);
}
return (typeof value == 'undefined')? defaultValue: value;
}
async setObject(key, value) {
if(this.hasRedis) {
await this.client.hSet(key, value);
} else {
this.localState[key] = value;
}
}
async getObject(key, defaultValue) {
var value = null;
if(this.hasRedis) {
value = await this.client.hGet(key);
} else {
value = this.localState[key];
}
return (typeof value == 'undefined')? (defaultValue? defaultValue: null): value;
}
});
Yekonga.updateConfig = function(key, value) {
var config = null
var keys = key.split('.');
keys.reverse();
for (const k of keys) {
var con = {};
con[k] = config? config: value;
config = Yekonga.Helper.copyJson(con);
}
if (config.logoUrl) {
var publicDir = Array.isArray(Yekonga.Config.public) ?
Yekonga.Config.public[0] :
Yekonga.Config.public;
config.logoUrl = 'uploads/' + Yekonga.Helper.saveFile(config.logoUrl, `${publicDir}/uploads`);
}
Yekonga.Helper.mergeJSON(Yekonga.Config, config);
const jsonStr = JSON.stringify(Yekonga.Config, null, 4);
Yekonga.Helper.writeFile('config.json', jsonStr, true);
}
let logo = serverLibrary.fs.readFileSync(serverLibrary.path.join(__dirname, 'assets/logo-sm.text'), { encoding: "utf8" });
Yekonga.Helper.printLog(null, logo, 'yellow');
module.exports = () => { console.info('Setup is ready') }