/**
* @module controllers/jrequireaid
* @author jesse reichler <mouser@donationcoder.com>
* @copyright 11/19/19
* @description
* Initialize the default service locator which maps the default classes and dependencies
* If you wanted to make an app that used different module replacements, you would just not call this, OR call this and THEN replace/overwrite the selective paths you cared about
*/
"use strict";
// the jrequire module (singleton) is where we registere the module paths
const jrequire = require("../helpers/jrequire");
// set module flag so we dont run setup twice
let didSetup = false;
//---------------------------------------------------------------------------
/**
* Register the default module paths for the approom system.
* This should be called early before an application (or test) is set up, it basically registers the normal modules of the approom system.
* If you wanted to use the approom framework in a project and SWAP OUT certain modules, you could do that AFTER calling this function, replacing just the modules you care about.
* ###### Notes
* You might call setDeferredLoading(false) first if you want to disable deferred loading of requirements, which can be useful to force a predictable order of requirements to bypass any potential cyclical dependencies
*/
function setupDefaultModulePaths() {
if (didSetup) {
// ignoore secondary call
return;
}
// set flag
didSetup = true;
// initialize it with all of the dependencies in the system
// NOTE: Because of circular dependencies, if we use deferred requirement resolution on the jrequire helper, then the order we declare things here does not matter;
// but we might turn off deferred requirements in order to get the order safe and predictable.
// generic helpers
// NOTE: these dont really need the service locator system, as they are not really candidates for swapping out?
if (false) {
jrequire.registerPath("helpers/jrdebug", require.resolve("../helpers/jrdebug"));
jrequire.registerPath("helpers/jrconfig", require.resolve("../helpers/jrconfig"));
jrequire.registerPath("helpers/jrh_crypto", require.resolve("../helpers/jrh_crypto"));
jrequire.registerPath("helpers/jrh_grid", require.resolve("../helpers/jrh_grid"));
jrequire.registerPath("helpers/jrh_handlebars", require.resolve("../helpers/jrh_handlebars"));
jrequire.registerPath("helpers/jrh_misc", require.resolve("../helpers/jrh_misc"));
jrequire.registerPath("helpers/jrh_mongo_filter", require.resolve("../helpers/jrh_mongo_filter"));
jrequire.registerPath("helpers/jrh_text", require.resolve("../helpers/jrh_text"));
jrequire.registerPath("helpers/jrh_validate", require.resolve("../helpers/jrh_validate"));
jrequire.registerPath("helpers/jrlog", require.resolve("../helpers/jrlog"));
jrequire.registerPath("helpers/jrresult", require.resolve("../helpers/jrresult"));
}
// some early controller dependencies
jrequire.registerPath("appdef", require.resolve("./appdef"));
jrequire.registerPath("aclaid", require.resolve("./aclaid"));
jrequire.registerPath("setupaid", require.resolve("./setupaid"));
jrequire.registerPath("arserver", require.resolve("./arserver"));
jrequire.registerPath("arclient", require.resolve("../client/arclient"));
// models
jrequire.registerPath("models/model_base_mongoose", require.resolve("../models/model_base_mongoose"));
jrequire.registerPath("models/model_base_mongoose_minimal", require.resolve("../models/model_base_mongoose_minimal"));
//
jrequire.registerPath("models/app", require.resolve("../models/app"));
jrequire.registerPath("models/connection", require.resolve("../models/connection"));
jrequire.registerPath("models/log", require.resolve("../models/log"));
jrequire.registerPath("models/user", require.resolve("../models/user"));
jrequire.registerPath("models/login", require.resolve("../models/login"));
jrequire.registerPath("models/option", require.resolve("../models/option"));
jrequire.registerPath("models/role", require.resolve("../models/role"));
jrequire.registerPath("models/room", require.resolve("../models/room"));
jrequire.registerPath("models/roomdata", require.resolve("../models/roomdata"));
jrequire.registerPath("models/file", require.resolve("../models/file"));
jrequire.registerPath("models/session", require.resolve("../models/session"));
jrequire.registerPath("models/verification", require.resolve("../models/verification"));
jrequire.registerPath("models/subscription", require.resolve("../models/subscription"));
jrequire.registerPath("models/modqueue", require.resolve("../models/modqueue"));
// controllers/aids
jrequire.registerPath("adminaid", require.resolve("./adminaid"));
jrequire.registerPath("crudaid", require.resolve("./crudaid"));
jrequire.registerPath("registrationaid", require.resolve("./registrationaid"));
jrequire.registerPath("sendaid", require.resolve("./sendaid"));
}
/**
* Just pass along the deferred loading flag set to jrequire.
* Turning off deferred loading can be useful to test circular dependency risks and ensure a predictable order of requires that avoids it
*
* @param {boolean} val
*/
function setDeferredLoading(val) {
jrequire.setDeferredLoading(val);
}
//---------------------------------------------------------------------------
// export the single function as the sole export
module.exports = {
setupDefaultModulePaths,
setDeferredLoading,
};