UNPKG

yao-node-client

Version:

A node client for yao application development

97 lines 3.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.GetFileName = exports.GetMethodName = exports.CallLocalProcess = void 0; const node_path_1 = __importDefault(require("node:path")); const fs_1 = __importDefault(require("fs")); let ModuleCache = {}; let PathCache = {}; /** * 动态的调用本地文件的方法,被调用的方法需要使用export * @param fpath js文件路径 * @param name 方法名 * @param params 参数 * @returns 方法返回值 */ function CallLocalProcess(fpath, name, ...params) { if (!fs_1.default.existsSync(fpath)) { throw Error(`调用的脚本不存在${fpath}`); } const method = GetMethodName(name); if (method === "") { throw Error(`流程:${name},调用的方法:${method}不合法`); } if (ModuleCache[name]) { return ModuleCache[name][method](...params); } const module = require(fpath); if (!module[method]) { throw Error(`流程:${name},调用的方法:${method}不存在或没有导出!`); } ModuleCache[name] = module; PathCache[name] = fpath; return module[method](...params); } exports.CallLocalProcess = CallLocalProcess; function GetMethodName(name) { let paths = name.split("."); if (paths.length < 2) { return ""; } const tokens = paths.splice(-1, 1); const method = tokens[0]; return method; } exports.GetMethodName = GetMethodName; /** * 根据方法名判断是否存在脚本文件 * @param name 调用的方法名 * @returns undefind 或是文件名 */ function GetFileName(name) { if (PathCache[name]) { return PathCache[name]; } let paths = name.split("."); if (!paths || paths.length < 3) { return; } if (!["scripts", "services", "studio", "widgets"].includes(paths[0].toLowerCase())) { //不代理 return; } //不需要方法名 paths.splice(-1, 1); let dir = node_path_1.default.join("dist", "app"); if (process.env.LOCAL_APP_ROOT) { dir = process.env.LOCAL_APP_ROOT; } // if not exists ,fallback to current directory if (!fs_1.default.existsSync(dir)) { dir = "./"; } //脚本路径 let fname = paths.join(node_path_1.default.sep); let filePath = node_path_1.default.join(dir, `${fname}.js`); if (paths[0].toLowerCase() === "widgets") { //widget是固定的process.js filePath = node_path_1.default.join(fname, "process.js"); } let fpath = node_path_1.default.resolve(filePath); if (!fs_1.default.existsSync(fpath)) { console.log(`info:本地process文件不存在:${fname}`); console.log(`info:本地process文件不存在:${fpath}`); filePath = node_path_1.default.join(dir, fname, "index.js"); // `dist/app/${fname}/index.js`; fpath = node_path_1.default.resolve(filePath); if (!fs_1.default.existsSync(fpath)) { console.log(`info:本地process文件不存在:${fname}/index.js`); console.log(`info:本地process文件不存在:${fpath}`); return; } } return fpath; } exports.GetFileName = GetFileName; //# sourceMappingURL=localcall.js.map