@kitmi/jacaranda
Version:
JavaScript application framework
131 lines (130 loc) • 4.18 kB
JavaScript
;
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