@x-9lab/xlab 1.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -0
  3. package/dist/@config/config.dev.js +13 -0
  4. package/dist/@config/config.js +25 -0
  5. package/dist/@config/config.sand.js +10 -0
  6. package/dist/bin/watch.js +145 -0
  7. package/dist/bin/xlab +49 -0
  8. package/dist/business/utils/cookie/1.1.0/clean/index.js +35 -0
  9. package/dist/business/utils/cookie/1.1.0/clean/js/@tpls/js.tpl +32 -0
  10. package/dist/business/utils/cookie/1.1.0/clean/js/index.js +30 -0
  11. package/dist/cluster.js +120 -0
  12. package/dist/components/assets/index.js +31 -0
  13. package/dist/components/cache/index.js +9 -0
  14. package/dist/components/cache/lru.js +75 -0
  15. package/dist/components/cluster/index.js +40 -0
  16. package/dist/components/combo/index.js +170 -0
  17. package/dist/components/common.js +324 -0
  18. package/dist/components/cron.js +117 -0
  19. package/dist/components/header/index.js +74 -0
  20. package/dist/components/header/time.js +37 -0
  21. package/dist/components/html-processor/index.js +95 -0
  22. package/dist/components/injection/index.js +83 -0
  23. package/dist/components/js-processor/index.js +65 -0
  24. package/dist/components/log.js +112 -0
  25. package/dist/components/md5/index.js +19 -0
  26. package/dist/components/mime/index.js +18 -0
  27. package/dist/components/platform/index.js +103 -0
  28. package/dist/components/proxy/index.js +62 -0
  29. package/dist/components/querystring/index.js +60 -0
  30. package/dist/components/redirect/index.js +79 -0
  31. package/dist/components/return-code.js +117 -0
  32. package/dist/components/uuid/index.js +33 -0
  33. package/dist/components/version/index.js +96 -0
  34. package/dist/config/getEnv.js +61 -0
  35. package/dist/config/index.js +137 -0
  36. package/dist/config/process-custom-config-files.js +67 -0
  37. package/dist/config/process-def-config-file.js +29 -0
  38. package/dist/custom.js +44 -0
  39. package/dist/global.js +67 -0
  40. package/dist/middleware/@bin/html-filter.js +94 -0
  41. package/dist/middleware/bad-request.js +36 -0
  42. package/dist/middleware/combo.js +13 -0
  43. package/dist/middleware/compress.js +36 -0
  44. package/dist/middleware/cors.js +66 -0
  45. package/dist/middleware/fresh-filter.js +63 -0
  46. package/dist/middleware/handle-pre-dir.js +25 -0
  47. package/dist/middleware/request-filter.js +144 -0
  48. package/dist/middleware/service-mark.js +30 -0
  49. package/dist/middlewares.js +40 -0
  50. package/dist/package.json +61 -0
  51. package/dist/router.js +101 -0
  52. package/dist/server.js +132 -0
  53. package/package.json +59 -0
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "get", {
6
+ enumerable: true,
7
+ get: ()=>get
8
+ });
9
+ const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
10
+ const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
11
+ function _interopRequireDefault(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ /**
17
+ * 资源储存对象
18
+ */ const ASSETS = {};
19
+ const pagePath = _path.default.resolve(__dirname, "./pages");
20
+ try {
21
+ _fs.default.readdirSync(pagePath).forEach((name)=>{
22
+ ASSETS[name.replace(".html", "")] = _fs.default.readFileSync(`${pagePath}/${name}`, "utf-8");
23
+ });
24
+ } catch (_) {}
25
+ /**
26
+ * 获取资源
27
+ * @param name 资源名称
28
+ * @return 资源
29
+ */ function get(name) {
30
+ return ASSETS[name] || null;
31
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "local", {
6
+ enumerable: true,
7
+ get: ()=>_lru.create
8
+ });
9
+ const _lru = require("./lru");
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ create: ()=>create,
13
+ len: ()=>len
14
+ });
15
+ const _lruCache = /*#__PURE__*/ _interopRequireDefault(require("lru-cache"));
16
+ function _interopRequireDefault(obj) {
17
+ return obj && obj.__esModule ? obj : {
18
+ default: obj
19
+ };
20
+ }
21
+ const maxCache = 100;
22
+ const maxAge = 60 * 60 * 1000;
23
+ const MAX_NUM = 20;
24
+ var NOW_NUM = 0;
25
+ const CACHE_LIST = [];
26
+ /**
27
+ * LRU-CACHE实例缓存对象
28
+ */ var LRU_CACHES = {};
29
+ /**
30
+ * 初始化缓存实例
31
+ * @param cacheName 缓存名称
32
+ * @param conf 缓存配置
33
+ * @return 缓存实例
34
+ */ function init(cacheName, conf) {
35
+ if (NOW_NUM >= MAX_NUM) {
36
+ var cache;
37
+ var deadName;
38
+ deadName = CACHE_LIST.shift();
39
+ cache = LRU_CACHES[deadName];
40
+ if (cache) {
41
+ cache.reset();
42
+ cache = null;
43
+ LRU_CACHES[deadName] = null;
44
+ NOW_NUM -= 1;
45
+ }
46
+ }
47
+ conf = conf || {};
48
+ conf.max = conf.max || maxCache;
49
+ conf.maxAge = conf.maxAge || maxAge;
50
+ LRU_CACHES[cacheName] = new _lruCache.default(conf);
51
+ NOW_NUM += 1;
52
+ CACHE_LIST.push(cacheName);
53
+ return LRU_CACHES[cacheName];
54
+ }
55
+ /**
56
+ * 生成或获取一个缓存实例
57
+ * @param cacheName 实例名称
58
+ * @param conf 缓存配置,仅在生成的时候有效
59
+ * @return 缓存实例
60
+ */ function create(cacheName, conf) {
61
+ cacheName = cacheName || "DEFAULT";
62
+ if (!LRU_CACHES[cacheName]) {
63
+ if (LRU_CACHES[cacheName] === null) {
64
+ console.log(`${cacheName} 为已被回收的缓存实例,重新生成新实例对象`);
65
+ }
66
+ init(cacheName, conf);
67
+ }
68
+ return LRU_CACHES[cacheName];
69
+ }
70
+ /**
71
+ * 获取当前缓存实例数量
72
+ * @return 缓存数量
73
+ */ function len() {
74
+ return CACHE_LIST.length;
75
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get: ()=>get,
13
+ add: ()=>add,
14
+ del: ()=>del
15
+ });
16
+ /**
17
+ * 消息注册存储对象
18
+ */ const MSG_HANDLERS = {};
19
+ /**
20
+ * 获取一个消息处理函数
21
+ * @param cmd 消息名称
22
+ * @return 消息对应处理函数
23
+ */ function get(cmd) {
24
+ return MSG_HANDLERS[cmd];
25
+ }
26
+ /**
27
+ * 添加一个消息处理函数
28
+ * @param cmd 消息名称
29
+ * @param cb 消息处理函数
30
+ */ function add(cmd, cb) {
31
+ if (!MSG_HANDLERS[cmd] && cb) {
32
+ MSG_HANDLERS[cmd] = cb;
33
+ }
34
+ }
35
+ /**
36
+ * 删除一个消息处理函数
37
+ * @param {String} cmd 消息名称
38
+ */ function del(cmd) {
39
+ delete MSG_HANDLERS[cmd];
40
+ }
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "init", {
6
+ enumerable: true,
7
+ get: ()=>init
8
+ });
9
+ const _cache = require("../cache");
10
+ const _header = /*#__PURE__*/ _interopRequireWildcard(require("../header"));
11
+ const _mime = require("../mime");
12
+ const _md5 = require("../md5");
13
+ const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
14
+ const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
15
+ function _interopRequireDefault(obj) {
16
+ return obj && obj.__esModule ? obj : {
17
+ default: obj
18
+ };
19
+ }
20
+ function _getRequireWildcardCache(nodeInterop) {
21
+ if (typeof WeakMap !== "function") return null;
22
+ var cacheBabelInterop = new WeakMap();
23
+ var cacheNodeInterop = new WeakMap();
24
+ return (_getRequireWildcardCache = function(nodeInterop) {
25
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
26
+ })(nodeInterop);
27
+ }
28
+ function _interopRequireWildcard(obj, nodeInterop) {
29
+ if (!nodeInterop && obj && obj.__esModule) {
30
+ return obj;
31
+ }
32
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
33
+ return {
34
+ default: obj
35
+ };
36
+ }
37
+ var cache = _getRequireWildcardCache(nodeInterop);
38
+ if (cache && cache.has(obj)) {
39
+ return cache.get(obj);
40
+ }
41
+ var newObj = {};
42
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
43
+ for(var key in obj){
44
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
45
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
46
+ if (desc && (desc.get || desc.set)) {
47
+ Object.defineProperty(newObj, key, desc);
48
+ } else {
49
+ newObj[key] = obj[key];
50
+ }
51
+ }
52
+ }
53
+ newObj.default = obj;
54
+ if (cache) {
55
+ cache.set(obj, newObj);
56
+ }
57
+ return newObj;
58
+ }
59
+ var conf;
60
+ // combo 文件缓存时间单位
61
+ // 默认一周
62
+ // @todo 上 cdn 的话需要根据 cdn 的情况调整这个时间
63
+ const COMBO_CACHE_TIME = 1000 * 60 * 60 * 24 * 7;
64
+ // combo 组合缓存
65
+ const comboCache = (0, _cache.local)("JS_CACHE", {
66
+ "maxAge": COMBO_CACHE_TIME,
67
+ "max": 200
68
+ });
69
+ // 单独的文件缓存
70
+ // 因为会存在大量公共组件,且有多个入口,当用户从不同的入口进来时会因为组合问题多次调用文件读取
71
+ // 增加单独缓存用于减少应用启动初期或 dns 回源时的瞬间压力
72
+ const fileCache = (0, _cache.local)("JS_FILE_CACHE", {
73
+ "maxAge": COMBO_CACHE_TIME,
74
+ "max": 500
75
+ });
76
+ var logger;
77
+ // 扩展名对应的 mime 头
78
+ const extMap = {};
79
+ Object.keys(_mime.MIME).forEach((ext)=>{
80
+ extMap["." + ext] = _mime.MIME[ext];
81
+ });
82
+ // 处理合并请求,合并请求以两个问号开头
83
+ // 请求示例:http://127.0.0.1:5000/??page-manager/1.0.0/page-manager.js,router/1.0.0/router.js,event/1.0.0/event.js,mobile/1.0.0/message/message.js,envi/1.0.0/envi.js,underscore/1.5.2/underscore.js
84
+ async function handle(ctx, next) {
85
+ let parsedUrl = ctx.url;
86
+ let search = ctx.query;
87
+ // combo 请求对应的缓存 key
88
+ let cacheKey;
89
+ // combo 返回内入
90
+ let content;
91
+ // 如果不是合并请求,则不进行处理,交给下一步
92
+ if (!search || parsedUrl.indexOf("??") < 0) {
93
+ await next();
94
+ return;
95
+ }
96
+ let filesStr = Object.keys(search)[0].substr(1);
97
+ // 设置文件类型,以便正确返回
98
+ if (filesStr.indexOf(".js") > -1) {
99
+ ctx.set("Content-Type", extMap[".js"]);
100
+ } else {
101
+ for(let ext in extMap){
102
+ if (filesStr.indexOf(ext) > -1) {
103
+ ctx.set("Content-Type", extMap[ext]);
104
+ break;
105
+ }
106
+ }
107
+ }
108
+ // 生成缓存 key
109
+ cacheKey = (0, _md5.md5)(filesStr);
110
+ // 检查是否有缓存
111
+ content = comboCache.get(cacheKey);
112
+ // 没有缓存内容,需要读取并且拼接
113
+ if (!content) {
114
+ // 按照逗号拆分成模块 uri
115
+ let uris = filesStr.split(",");
116
+ uris = uris.map((uri)=>{
117
+ let searchIndex = uri.indexOf("?");
118
+ if (searchIndex > -1) {
119
+ uri = uri.substring(0, searchIndex);
120
+ }
121
+ return uri;
122
+ });
123
+ // 根据 uri 查找文件并拼合
124
+ var files = [];
125
+ // 读取相关文件
126
+ uris.forEach((uri)=>{
127
+ // 优先从文件缓存中读
128
+ let file = fileCache.get(uri);
129
+ if (file) {
130
+ files.push(file);
131
+ } else {
132
+ try {
133
+ file = _fs.default.readFileSync(_path.default.resolve(conf.root, "c", uri), "utf8");
134
+ } catch (e) {
135
+ logger.error("READ COMBO FILE ERROR", uri, e);
136
+ }
137
+ if (file) {
138
+ files.push(file);
139
+ fileCache.set(uri, file);
140
+ }
141
+ }
142
+ });
143
+ // 合并文件
144
+ content = files.join("\n");
145
+ // 设置缓存
146
+ comboCache.set(cacheKey, content);
147
+ } else {
148
+ ctx.set("Hit-Combo", cacheKey);
149
+ }
150
+ // 无法正确读取文件
151
+ // 交给后续的 404 处理
152
+ if (content === undefined || content === null) {
153
+ await next();
154
+ return;
155
+ }
156
+ if (conf.enableComboCache) {
157
+ // 生产环境默认开启缓存
158
+ // 缓存时间固定为 6 天
159
+ _header.cacheControl("6d", ctx);
160
+ _header.expire("6d", ctx);
161
+ _header.lastModified(null, ctx);
162
+ }
163
+ // 返回数据
164
+ ctx.body = content;
165
+ }
166
+ function init() {
167
+ conf = getSysConfig();
168
+ logger = log.getLogger("common");
169
+ return handle;
170
+ }
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ asciiTobase64: ()=>asciiTobase64,
13
+ base64Toascii: ()=>base64Toascii,
14
+ params: ()=>params,
15
+ numberFormat: ()=>numberFormat,
16
+ labelReplace: ()=>labelReplace,
17
+ fix0: ()=>fix0,
18
+ date: ()=>date,
19
+ responseResult: ()=>responseResult,
20
+ getMD5: ()=>getMD5,
21
+ object2Array: ()=>object2Array,
22
+ defPromiseHandler: ()=>defPromiseHandler,
23
+ promiseWapper: ()=>promiseWapper,
24
+ requestWapper: ()=>requestWapper,
25
+ formatJson: ()=>formatJson,
26
+ toJsonp: ()=>toJsonp,
27
+ walk: ()=>walk,
28
+ checkFileStat: ()=>checkFileStat,
29
+ getRealDefaultMod: ()=>getRealDefaultMod
30
+ });
31
+ const _returnCode = require("./return-code");
32
+ const _querystring = /*#__PURE__*/ _interopRequireDefault(require("querystring"));
33
+ const _request = /*#__PURE__*/ _interopRequireDefault(require("request"));
34
+ const _crypto = /*#__PURE__*/ _interopRequireDefault(require("crypto"));
35
+ const _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
36
+ const _fs = /*#__PURE__*/ _interopRequireDefault(require("fs"));
37
+ function _interopRequireDefault(obj) {
38
+ return obj && obj.__esModule ? obj : {
39
+ default: obj
40
+ };
41
+ }
42
+ var logger;
43
+ /**
44
+ * ascii字符串转为base64字符串
45
+ * @param str 要转化的字符串
46
+ * @return 转化后的字符串
47
+ */ function asciiTobase64(str) {
48
+ if (typeof str === "string") {
49
+ return new Buffer(str).toString("base64");
50
+ }
51
+ return "";
52
+ }
53
+ /**
54
+ * base64字符串转为ascii字符串
55
+ * @param str 要转化的字符串
56
+ * @return 转化后的字符串
57
+ */ function base64Toascii(str) {
58
+ if (typeof str === "string") {
59
+ return new Buffer(str, "base64").toString();
60
+ }
61
+ return "";
62
+ }
63
+ /**
64
+ * 序列化请求参数
65
+ * @param dat 请求参数对象
66
+ * @param url 要附加请求参数的URL
67
+ * @return 序列化完的参数
68
+ */ function params(dat, url) {
69
+ var data = dat ? _querystring.default.stringify(dat) : "";
70
+ if (typeof url === "string") {
71
+ data = data ? url + "?" + data : url;
72
+ }
73
+ return data;
74
+ }
75
+ /**
76
+ * 按位数格式化数字
77
+ * @param val 要格式化的数字
78
+ * @param separator 分割符
79
+ * @param size 分割位数间隔
80
+ * @return 格式化完的字符串
81
+ */ function numberFormat(val, separator, size) {
82
+ if (typeof val !== "number") {
83
+ return "0";
84
+ }
85
+ if (!separator) {
86
+ separator = ",";
87
+ }
88
+ if (!size) {
89
+ size = 3;
90
+ }
91
+ var last = size;
92
+ const valStr = val.toString();
93
+ var pos = valStr.indexOf(".");
94
+ var res = "";
95
+ if (pos === -1) {
96
+ pos = valStr.length;
97
+ } else {
98
+ res = valStr.substr(pos);
99
+ }
100
+ if (valStr.charAt(0) === "-") {
101
+ last++;
102
+ }
103
+ while(pos > last){
104
+ pos -= size;
105
+ res = separator + valStr.substr(pos, size) + res;
106
+ }
107
+ if (pos) {
108
+ res = valStr.substr(0, pos) + res;
109
+ }
110
+ return res;
111
+ }
112
+ /**
113
+ * 带花括号标签检测正则
114
+ */ const labelReplaceExp = /\{(\w+)\}/g;
115
+ /**
116
+ * 批量替换字符串中带花括号标签为指定数据
117
+ * @param tpl 待处理的字符串
118
+ * @param data 替换数据
119
+ * @return 替换后端字符串
120
+ */ function labelReplace(tpl, data) {
121
+ return tpl.replace(labelReplaceExp, function(label, key) {
122
+ return typeof data === "object" ? data[key] : data;
123
+ });
124
+ }
125
+ /**
126
+ * 格式化数字, 自动补0前续
127
+ * @param number 要格式化的数字
128
+ * @param size 格式化后出来的数字位数
129
+ * @return 格式化结果
130
+ */ function fix0(number, size) {
131
+ var num = number.toString();
132
+ while(num.length < size){
133
+ num = "0" + num;
134
+ }
135
+ return num;
136
+ }
137
+ const format_exp = /[YymndjNwaAghGHis]/g;
138
+ /**
139
+ * 格式化时间
140
+ * @param format 日期格式
141
+ * @param date 日期数据(时间戳, 字符串)
142
+ * @return 格式化后的时间
143
+ */ function date(format, ts) {
144
+ ts = new Date(ts);
145
+ return format.replace(format_exp, function(tag) {
146
+ switch(tag){
147
+ case "Y":
148
+ return ts.getFullYear();
149
+ case "y":
150
+ return ts.getFullYear() % 100;
151
+ case "m":
152
+ return fix0(ts.getMonth() + 1, 2);
153
+ case "n":
154
+ return ts.getMonth() + 1;
155
+ case "d":
156
+ return fix0(ts.getDate(), 2);
157
+ case "j":
158
+ return ts.getDate();
159
+ case "N":
160
+ return ts.getDay();
161
+ case "w":
162
+ return ts.getDay() % 7;
163
+ case "a":
164
+ return ts.getHours() < 12 ? "am" : "pm";
165
+ case "A":
166
+ return ts.getHours() < 12 ? "AM" : "PM";
167
+ case "g":
168
+ return ts.getHours() % 12 + 1;
169
+ case "h":
170
+ return fix0(ts.getHours() % 12 + 1, 2);
171
+ case "G":
172
+ return ts.getHours();
173
+ case "H":
174
+ return fix0(ts.getHours(), 2);
175
+ case "i":
176
+ return fix0(ts.getMinutes(), 2);
177
+ case "s":
178
+ return fix0(ts.getSeconds(), 2);
179
+ }
180
+ return tag;
181
+ });
182
+ }
183
+ /**
184
+ * 生成操作结果数据对象
185
+ * @param status 布尔,操作结果
186
+ * @param result 返回的数据,数据格式根据具体模块而定
187
+ * @param msg 返回的提示性信息
188
+ * @return 数据对象
189
+ */ function responseResult(status, result, msg) {
190
+ var code = (0, _returnCode.getReturnCode)(status);
191
+ var dat = {
192
+ "success": code.errorcode === 0,
193
+ "code": code.errorcode,
194
+ "msg": msg || code.msg
195
+ };
196
+ dat.result = result || null;
197
+ return dat;
198
+ }
199
+ /**
200
+ * 根据传入的参数生成一个 MD5 值
201
+ */ function getMD5(...args) {
202
+ const conditions = {};
203
+ args.forEach(function(item, index) {
204
+ conditions[index] = item;
205
+ });
206
+ return _crypto.default.createHash("md5").update(JSON.stringify(conditions), "utf8").digest("hex");
207
+ }
208
+ /**
209
+ * 对象值转化为数组
210
+ * @param obj 待转的对象
211
+ * @return 转化后的数组
212
+ */ function object2Array(obj) {
213
+ var arr = [];
214
+ Object.keys(obj).forEach(function(key) {
215
+ arr.push(obj[key]);
216
+ });
217
+ return arr;
218
+ }
219
+ /**
220
+ * 默认 Promise 处理函数
221
+ * @param resolve Promise 成功处理函数
222
+ * @param reject Promise 异常处理函数
223
+ */ function defPromiseHandler(resolve, reject) {
224
+ return function(err, re) {
225
+ if (err) {
226
+ console.error(err);
227
+ reject(err);
228
+ } else if (re) {
229
+ resolve(re);
230
+ } else {
231
+ reject("No result.");
232
+ }
233
+ };
234
+ }
235
+ /**Promise 包装函数 */ function promiseWapper(...args) {
236
+ var handler = args.pop();
237
+ handler = handler;
238
+ var p = new Promise(handler);
239
+ return p;
240
+ }
241
+ /**
242
+ * 封装一个 promise 形式的 request 方法
243
+ */ function requestWapper(...args) {
244
+ return new Promise(function(resolve, reject) {
245
+ args.push(function(err, res, body) {
246
+ if (err) {
247
+ reject(err);
248
+ } else {
249
+ resolve(body);
250
+ }
251
+ });
252
+ _request.default.apply(_request.default, args);
253
+ });
254
+ }
255
+ /**
256
+ * 格式化 JSON 数据
257
+ * @param data 原始数据字符串
258
+ * @return 格式化后的数据
259
+ */ function formatJson(data) {
260
+ var re;
261
+ try {
262
+ re = JSON.parse(data);
263
+ } catch (err) {
264
+ if (!logger) {
265
+ log.getLogger("common");
266
+ }
267
+ logger.error("Pares create menu return data fail.", data);
268
+ return null;
269
+ }
270
+ return re;
271
+ }
272
+ /**
273
+ * 输出 sjonp 格式
274
+ * @param data 待处理数据
275
+ * @param jsonp jsonp 回调函数名称
276
+ * @return 当是 jsonp 格式时返回 String, 不是时返回原始数据
277
+ */ function toJsonp(data, jsonp) {
278
+ return jsonp ? jsonp + "(" + JSON.stringify(data) + ")" : data;
279
+ }
280
+ /**
281
+ * 递归处理文件夹
282
+ * @param path 文件目录
283
+ * @param floor 层级
284
+ * @param callback 查找到文件时的处理函数
285
+ */ function walk(path, floor, callback) {
286
+ floor++;
287
+ var files = _fs.default.readdirSync(path);
288
+ files.forEach(function(item) {
289
+ if (!item.startsWith(".") && !item.endsWith(".d.ts")) {
290
+ var tmpPath = path + "/" + item;
291
+ var stats = _fs.default.statSync(tmpPath);
292
+ if (stats.isDirectory() && item.indexOf("@") === -1) {
293
+ walk(tmpPath, floor, callback);
294
+ } else if (!stats.isDirectory()) {
295
+ callback(tmpPath, item);
296
+ }
297
+ }
298
+ });
299
+ }
300
+ /**
301
+ * 检测指定文件是否存在
302
+ * @param pathStr 文件路径
303
+ * @param resolve 是否使用 path 模块重新处理路径
304
+ * @return 文件信息,文件不存在为 null
305
+ */ function checkFileStat(pathStr, resolve) {
306
+ if (resolve) {
307
+ pathStr = _path.default.resolve(__dirname, pathStr);
308
+ }
309
+ var stat;
310
+ try {
311
+ stat = _fs.default.statSync(pathStr);
312
+ } catch (e) {
313
+ stat = null;
314
+ }
315
+ return stat;
316
+ }
317
+ /**获取真正可执行的模块 */ function getRealDefaultMod(mod) {
318
+ if (mod) {
319
+ if (mod.__esModule && mod.default || mod.default) {
320
+ return mod.default;
321
+ }
322
+ }
323
+ return mod;
324
+ }