151 lines
4.5 KiB
JavaScript
151 lines
4.5 KiB
JavaScript
"use strict";
|
|
|
|
import {Utils} from "../Utils/Utils.ecma.js";
|
|
import {Check} from "../Utils/Check.ecma.js";
|
|
|
|
/**
|
|
* @typedef {import("../Application/AnP.ecma.js").AnP} AnP
|
|
*/
|
|
|
|
/**
|
|
* @callback anp_settings_managers_default_callback
|
|
* @returns {void}
|
|
*/
|
|
|
|
/**
|
|
* @class
|
|
* @constructor
|
|
* @param {!AnP} anp
|
|
* @param {?(Object.<string, any|null>|Array.<any|null>)} inputs
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
export const SettingsManager = (function(){
|
|
|
|
/**
|
|
* @constructs SettingsManager
|
|
* @param {!AnP} anp
|
|
* @param {?(Object.<string, any|null>|Array.<any|null>)} [inputs = null]
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const SettingsManager = function(anp, custom = null){
|
|
|
|
/** @type {SettingsManager} */
|
|
const self = this,
|
|
/** @type {Object.<string, any|null>} */
|
|
settings = {},
|
|
/** @type {Object.<string, any|null>} */
|
|
secrets = {};
|
|
/** @type {boolean} */
|
|
let started = false;
|
|
|
|
/**
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const constructor = () => {
|
|
custom = Utils.get_dictionary(custom, true);
|
|
};
|
|
|
|
/**
|
|
* @param {?anp_start_callback} callback
|
|
* @returns {boolean}
|
|
* @access public
|
|
*/
|
|
this.start = (callback = null) => {
|
|
|
|
/** @type {!anp_start_callback} */
|
|
const end = ok => {
|
|
Utils.execute(callback, ok);
|
|
return ok;
|
|
};
|
|
|
|
if(started)
|
|
return end(false);
|
|
started = true;
|
|
|
|
Utils.execute_items([
|
|
"default_settings_files", "default_settings", "settings_files", "settings"
|
|
], (key, next) => {
|
|
self.add(self.get(key), next, true);
|
|
}, () => {
|
|
Utils.execute_items([
|
|
"default_secrets_files", "default_secrets", "secrets_files", "secrets"
|
|
], (key, next) => {
|
|
self.add_secrets(self.get(key), next, true);
|
|
}, () => {
|
|
end(true);
|
|
});
|
|
});
|
|
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* @param {!(string|Array.<string>)} keys
|
|
* @param {?(Object.<string, any|null>|Array.<any|null>)} [inputs = null]
|
|
* @param {?any} [_default = null]
|
|
* @returns {any|null}
|
|
* @access public
|
|
*/
|
|
this.get = (keys, inputs = null, _default = null) => Utils.get_value(keys, [
|
|
inputs, custom, secrets, settings, SettingsManager.DEFAULT_SETTINGS
|
|
], _default);
|
|
|
|
/**
|
|
* @param {!Object.<string, any|null>} set
|
|
* @param {!(string|Object.<string, any|null>|Array.<any|null>)} inputs
|
|
* @param {?anp_settings_managers_default_callback} callback
|
|
* @param {!boolean} overwrite
|
|
* @returns {void}
|
|
* @access private
|
|
*/
|
|
const add_to = (set, inputs, callback, overwrite) => {
|
|
anp.request.load_json(inputs, (data, subcallback) => {
|
|
for(const key in data)
|
|
!Check.is_key_mark(key) &&
|
|
(overwrite || set[key] === undefined) &&
|
|
(set[key] = data[key]);
|
|
Utils.execute(subcallback);
|
|
}, callback);
|
|
}
|
|
|
|
/**
|
|
* @param {!(string|Object.<string, any|null>|Array.<any|null>)} inputs
|
|
* @param {?anp_settings_managers_default_callback} [callback = null]
|
|
* @param {!boolean} [overwrite = false]
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
this.add = (inputs, callback = null, overwrite = false) => {
|
|
add_to(settings, inputs, callback, overwrite);
|
|
};
|
|
|
|
/**
|
|
* @param {!(string|Object.<string, any|null>|Array.<any|null>)} inputs
|
|
* @param {?anp_settings_managers_default_callback} [callback = null]
|
|
* @param {!boolean} [overwrite = false]
|
|
* @returns {void}
|
|
* @access public
|
|
*/
|
|
this.add_secrets = (inputs, callback = null, overwrite = false) => {
|
|
add_to(secrets, inputs, callback, overwrite);
|
|
};
|
|
|
|
constructor();
|
|
|
|
};
|
|
|
|
/** @type {Object.<string, any|null>} */
|
|
SettingsManager.DEFAULT_SETTINGS = {
|
|
"autostart" : true,
|
|
"object_name" : "anp",
|
|
"default_settings_files" : [
|
|
"/json/AnP.settings.json",
|
|
"/json/AnP.ecma.settings.json"
|
|
]
|
|
};
|
|
|
|
return SettingsManager;
|
|
})() |