UNPKG

@kitmi/jacaranda

Version:

JavaScript application framework

131 lines (130 loc) 4.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { default: function() { return _default; }, loadController_: function() { return loadController_; }, loadControllers_: function() { return loadControllers_; }, tryLoadFrom_: function() { return tryLoadFrom_; } }); const _utils = require("@kitmi/utils"); const _types = require("@kitmi/types"); /** * Load a module from speficied source. * @param {App} app * @param {string} source * @param {string} name * @param {string|array} payloadPath * @param {string} namedExport * @param {boolean} [noThrow] * @returns {*} */ const loadModuleFrom_ = async (app, source, name, payloadPath, namedExport, noThrow)=>{ if (!name) { throw new _types.InvalidArgument('The module name is required.'); } let _module; let fullPath = payloadPath ? [ ..._utils._.castArray(payloadPath), name ] : [ name ]; if (source === 'runtime') { let p = fullPath.join('/'); if (namedExport) { p += '::' + namedExport; } _module = app.requireModule(p, noThrow); } else if (source === 'direct') { if (payloadPath) { app.log('warn', "The 'payloadPath' is not supported and is ignored for 'direct' source.", { payloadPath }); } _module = require(name); if (_module) { if (namedExport) { _module = _module[namedExport]; } else { _module = (0, _utils.esmCheck)(_module); } } } else if (source === 'registry') { _module = (0, _utils.get)(app.registry, fullPath.join('.')); } else if (source === 'project') { _module = await app.tryRequire_(fullPath.join('/'), namedExport == null, noThrow); } else { throw new _types.InvalidArgument(`Invalid module source "${source}".`, { app: app.name }); } if (_module == null && !noThrow) { throw new _types.InvalidArgument(`Module "${name}" not found in "${source}".`); } return _module; }; const loadControllers_ = async (app, source, controllerPath, packageName)=>{ source = source ?? 'registry'; // backward compatibility let payloadPath; let moduleName = controllerPath; if (source === 'registry' || source === 'runtime') { payloadPath = 'controllers'; } else if (source === 'project') { payloadPath = app.sourcePath; } else if (source === 'direct') { moduleName = packageName; } return loadModuleFrom_(app, source, moduleName, payloadPath); }; const loadController_ = async (app, source, controllerPath, controllerName, packageName)=>{ source = source ?? 'registry'; // backward compatibility let payloadPath; let moduleName = controllerName; if (source === 'registry' || source === 'runtime') { payloadPath = [ 'controllers', controllerPath ]; } else if (source === 'project') { payloadPath = [ app.sourcePath, controllerPath ]; } else if (source === 'direct') { moduleName = packageName; } return loadModuleFrom_(app, source, moduleName, payloadPath); }; const tryLoadFrom_ = async (app, type, sources, noThrow)=>{ let _module; let errors = {}; await (0, _utils.findKeyAsync_)(sources, async (config, source)=>{ try { _module = await loadModuleFrom_(app, source, config.name, config.path, config.namedExport); return _module != null; } catch (e) { errors[source] = e.message; } }); if (_module == null && !noThrow) { throw new _types.InvalidArgument(`"${type}" not found in any of the sources: ${Object.keys(sources).join(', ')}`, errors); } return _module; }; const _default = loadModuleFrom_; //# sourceMappingURL=loadModuleFrom_.js.map