mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 02:35:49 +00:00
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
/* global CloudCmd */
|
|
|
|
import exec from 'execon';
|
|
import tryToCatch from 'try-to-catch';
|
|
const loadJS = require('load.js').js;
|
|
|
|
import pascalCase from 'just-pascal-case';
|
|
const noJS = (a) => a.replace(/.js$/, '');
|
|
|
|
/**
|
|
* function load modules
|
|
* @params = {name, path, func, dobefore, arg}
|
|
*/
|
|
export default function loadModule(params) {
|
|
if (!params)
|
|
return;
|
|
|
|
const {path} = params;
|
|
|
|
const name = path && noJS(pascalCase(path));
|
|
const doBefore = params.dobefore;
|
|
|
|
if (CloudCmd[name])
|
|
return;
|
|
|
|
CloudCmd[name] = () => {
|
|
exec(doBefore);
|
|
const {prefix} = CloudCmd;
|
|
const pathFull = prefix + CloudCmd.DIRCLIENT_MODULES + path + '.js';
|
|
|
|
return loadJS(pathFull).then(async () => {
|
|
const newModule = async (f) => f && f();
|
|
const module = CloudCmd[name];
|
|
|
|
Object.assign(newModule, module);
|
|
|
|
CloudCmd[name] = newModule;
|
|
|
|
CloudCmd.log('init', name);
|
|
await module.init();
|
|
|
|
return newModule;
|
|
});
|
|
};
|
|
|
|
CloudCmd[name].show = async (...args) => {
|
|
CloudCmd.log('show', name, args);
|
|
const m = CloudCmd[name];
|
|
|
|
const [e, a] = await tryToCatch(m);
|
|
|
|
if (e)
|
|
return console.error(e);
|
|
|
|
await a.show(...args);
|
|
};
|
|
}
|
|
|