configman.js

const DefaultConfig = require("./diddle.config.default.json");
const EngineScript = require("./enginescript")

function extend(target) {
    var sources = [].slice.call(arguments, 1);
    sources.forEach(function (source) {
        for (var prop in source) {
            target[prop] = source[prop];
        }
    });
    return target;
}
const manifest = {
	version: '0.1b',
	name: 'org.js.diddle.engine.config'
}

/**
 * @typedef ConfigurationManager.config
 * @property {bool} disable
 * @property {ConfigurationManager.discordconfig} discord
 * @property {LocaleManager.LocaleCode} locale
 * @property {string} scripts_directory
 * @property {bool} debug
 * @property {object} token Has children with the object name of the service and the content of either a string, or an array of strings.
 */
/**
 * @typedef ConfigurationManager.discordconfig
 * @property {string[]} admin Discord User ID Snowflakes
 * @property {string} prefix Command Prefix
 */

/**
 * @class ConfigurationManager
 * @extends EngineScript
 * @argument {DiddleEngine} diddle
 * @argument {ConfigurationManager.config} _config
 */
class ConfigurationManager extends EngineScript{
	_ready() {
		this.config = extend({},DefaultConfig,this._config);
		this.locale = this.diddle.locale.switch(this.config.locale);
	}
	constructor(diddle,_config) {
		super(diddle,manifest);
		this._config = _config;
		this.log.info(`Running ${this.manifest.name}@${this.manifest.version}`);
	}

	/**
	 * 
	 * @returns {ConfigurationManager.config}
	 */
	get() {
		return this.config;
	}
}
module.exports = ConfigurationManager;