@x-9lab/xlab 1.6.1 → 2.0.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 (72) hide show
  1. package/@types/cluster.d.ts +15 -3
  2. package/@types/components/common/index.d.ts +1 -2
  3. package/@types/components/cron/index.d.ts +4 -4
  4. package/@types/components/log/index.d.ts +37 -2
  5. package/@types/config/index.d.ts +9 -5
  6. package/@types/custom.d.ts +25 -3
  7. package/@types/dot-file.d.ts +6 -0
  8. package/@types/global.d.ts +44 -56
  9. package/@types/index.d.ts +18 -0
  10. package/@types/init-env.d.ts +3 -1
  11. package/@types/middleware/handle-pre-dir.d.ts +1 -5
  12. package/@types/middleware/request-filter.d.ts +0 -1
  13. package/@types/middleware/service-mark.d.ts +1 -6
  14. package/@types/router.d.ts +25 -0
  15. package/@types/server.d.ts +28 -6
  16. package/MIGRATION.md +182 -0
  17. package/README.md +105 -86
  18. package/dist/@config/config.dev.js +7 -3
  19. package/dist/@config/config.js +7 -4
  20. package/dist/@config/config.sand.js +7 -3
  21. package/dist/bin/watch.js +36 -16
  22. package/dist/cluster.js +121 -44
  23. package/dist/components/assets/index.js +9 -5
  24. package/dist/components/cluster/index.js +17 -4
  25. package/dist/components/common/index.js +65 -45
  26. package/dist/components/cron/index.js +50 -27
  27. package/dist/components/header/index.js +32 -17
  28. package/dist/components/header/time.js +6 -2
  29. package/dist/components/index.js +1 -1
  30. package/dist/components/log/index.js +91 -87
  31. package/dist/components/mime/index.js +6 -2
  32. package/dist/components/return-code/index.js +33 -18
  33. package/dist/components/uuid/index.js +22 -13
  34. package/dist/config/getEnv.js +9 -5
  35. package/dist/config/index.js +98 -66
  36. package/dist/config/process-custom-config-files.js +26 -22
  37. package/dist/config/process-def-config-file.js +15 -11
  38. package/dist/custom.js +77 -28
  39. package/dist/default-x-config.js +9 -5
  40. package/dist/dot-file.js +42 -17
  41. package/dist/global.js +37 -31
  42. package/dist/index.js +100 -0
  43. package/dist/init-env.js +17 -9
  44. package/dist/middleware/@bin/html-filter.js +19 -7
  45. package/dist/middleware/bad-request.js +12 -8
  46. package/dist/middleware/compress.js +11 -7
  47. package/dist/middleware/cors.js +20 -7
  48. package/dist/middleware/fresh-filter.js +13 -7
  49. package/dist/middleware/handle-pre-dir.js +22 -17
  50. package/dist/middleware/request-filter.js +39 -25
  51. package/dist/middleware/service-mark.js +22 -25
  52. package/dist/middlewares.js +22 -20
  53. package/dist/router.js +174 -141
  54. package/dist/server.js +202 -93
  55. package/package.json +25 -29
  56. package/@types/business/utils/cookie/1.1.0/clean/index.d.ts +0 -3
  57. package/@types/business/utils/cookie/1.1.0/clean/js/index.d.ts +0 -2
  58. package/@types/components/cache/index.d.ts +0 -2
  59. package/@types/components/cache/lru.d.ts +0 -21
  60. package/@types/components/html-processor/index.d.ts +0 -9
  61. package/@types/components/injection/index.d.ts +0 -25
  62. package/@types/components/js-processor/index.d.ts +0 -5
  63. package/@types/components/md5/index.d.ts +0 -2
  64. package/@types/components/platform/index.d.ts +0 -21
  65. package/@types/components/proxy/index.d.ts +0 -26
  66. package/@types/components/querystring/index.d.ts +0 -25
  67. package/@types/components/redirect/index.d.ts +0 -11
  68. package/@types/components/request/helper.d.ts +0 -3
  69. package/@types/components/request/index.d.ts +0 -51
  70. package/@types/components/request/resolve-uri.d.ts +0 -6
  71. package/@types/components/version/index.d.ts +0 -26
  72. package/@types/env.d.ts +0 -1
@@ -2,10 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.get = void 0;
6
- var _path = _interopRequireDefault(require("path"));
7
- var _fs = _interopRequireDefault(require("fs"));
8
- function _interopRequireDefault(obj) {
5
+ Object.defineProperty(exports, "get", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return get;
9
+ }
10
+ });
11
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
12
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
13
+ function _interop_require_default(obj) {
9
14
  return obj && obj.__esModule ? obj : {
10
15
  default: obj
11
16
  };
@@ -26,4 +31,3 @@ try {
26
31
  */ function get(name) {
27
32
  return ASSETS[name] || null;
28
33
  }
29
- exports.get = get;
@@ -2,7 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.del = exports.add = exports.get = void 0;
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get add () {
13
+ return add;
14
+ },
15
+ get del () {
16
+ return del;
17
+ },
18
+ get get () {
19
+ return get;
20
+ }
21
+ });
6
22
  /**
7
23
  * 消息注册存储对象
8
24
  */ const MSG_HANDLERS = {};
@@ -28,6 +44,3 @@ exports.del = exports.add = exports.get = void 0;
28
44
  */ function del(cmd) {
29
45
  delete MSG_HANDLERS[cmd];
30
46
  }
31
- exports.get = get;
32
- exports.add = add;
33
- exports.del = del;
@@ -2,38 +2,70 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "sleep", {
6
- enumerable: true,
7
- get: function() {
8
- return _utils.sleep;
9
- }
10
- });
11
- Object.defineProperty(exports, "labelReplace", {
12
- enumerable: true,
13
- get: function() {
14
- return _utils.labelReplace;
15
- }
16
- });
17
- Object.defineProperty(exports, "fix0", {
18
- enumerable: true,
19
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get asciiTobase64 () {
13
+ return asciiTobase64;
14
+ },
15
+ get base64Toascii () {
16
+ return base64Toascii;
17
+ },
18
+ get checkFileStat () {
19
+ return checkFileStat;
20
+ },
21
+ get fix0 () {
20
22
  return _utils.fix0;
21
- }
22
- });
23
- Object.defineProperty(exports, "numberFormat", {
24
- enumerable: true,
25
- get: function() {
23
+ },
24
+ get formatJson () {
25
+ return formatJson;
26
+ },
27
+ get getMD5 () {
28
+ return getMD5;
29
+ },
30
+ get getRealDefaultMod () {
31
+ return getRealDefaultMod;
32
+ },
33
+ get labelReplace () {
34
+ return _utils.labelReplace;
35
+ },
36
+ get md5 () {
37
+ return md5;
38
+ },
39
+ get numberFormat () {
26
40
  return _utils.numberFormat;
41
+ },
42
+ get object2Array () {
43
+ return object2Array;
44
+ },
45
+ get params () {
46
+ return params;
47
+ },
48
+ get responseResult () {
49
+ return responseResult;
50
+ },
51
+ get sleep () {
52
+ return _utils.sleep;
53
+ },
54
+ get toJsonp () {
55
+ return toJsonp;
56
+ },
57
+ get walk () {
58
+ return walk;
27
59
  }
28
60
  });
29
- exports.getRealDefaultMod = exports.checkFileStat = exports.walk = exports.toJsonp = exports.formatJson = exports.object2Array = exports.md5 = exports.getMD5 = exports.responseResult = exports.params = exports.base64Toascii = exports.asciiTobase64 = void 0;
30
- var _utils = require("@x-drive/utils");
31
- var _returnCode = require("../return-code");
32
- var _querystring = _interopRequireDefault(require("querystring"));
33
- var _crypto = _interopRequireDefault(require("crypto"));
34
- var _path = _interopRequireDefault(require("path"));
35
- var _fs = _interopRequireDefault(require("fs"));
36
- function _interopRequireDefault(obj) {
61
+ const _utils = require("@x-drive/utils");
62
+ const _returncode = require("../return-code");
63
+ const _log = require("../log");
64
+ const _querystring = /*#__PURE__*/ _interop_require_default(require("querystring"));
65
+ const _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
66
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
67
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
68
+ function _interop_require_default(obj) {
37
69
  return obj && obj.__esModule ? obj : {
38
70
  default: obj
39
71
  };
@@ -41,7 +73,7 @@ function _interopRequireDefault(obj) {
41
73
  var logger;
42
74
  function checkLogger() {
43
75
  if (!logger) {
44
- logger = log.getLogger("common");
76
+ logger = _log.globalLog.getLogger("common");
45
77
  }
46
78
  return logger;
47
79
  }
@@ -84,7 +116,7 @@ function checkLogger() {
84
116
  * @param msg 返回的提示性信息
85
117
  * @return 数据对象
86
118
  */ function responseResult(status, result, msg) {
87
- var code = (0, _utils).isObject(status) ? status : (0, _returnCode).getReturnCode(status);
119
+ var code = (0, _utils.isObject)(status) ? status : (0, _returncode.getReturnCode)(status);
88
120
  var dat = {
89
121
  "success": code.errorcode === 0,
90
122
  "code": code.errorcode,
@@ -103,9 +135,9 @@ function checkLogger() {
103
135
  return _crypto.default.createHash("md5").update(JSON.stringify(conditions), "utf8").digest("hex");
104
136
  }
105
137
  /**将一个输入字符串转为 md5 */ function md5(str) {
106
- var md51 = _crypto.default.createHash("md5");
107
- md51.update(str);
108
- return md51.digest("hex");
138
+ var md5 = _crypto.default.createHash("md5");
139
+ md5.update(str);
140
+ return md5.digest("hex");
109
141
  }
110
142
  /**
111
143
  * 对象值转化为数组
@@ -186,15 +218,3 @@ function checkLogger() {
186
218
  }
187
219
  return mod;
188
220
  }
189
- exports.asciiTobase64 = asciiTobase64;
190
- exports.base64Toascii = base64Toascii;
191
- exports.params = params;
192
- exports.responseResult = responseResult;
193
- exports.getMD5 = getMD5;
194
- exports.md5 = md5;
195
- exports.object2Array = object2Array;
196
- exports.formatJson = formatJson;
197
- exports.toJsonp = toJsonp;
198
- exports.walk = walk;
199
- exports.checkFileStat = checkFileStat;
200
- exports.getRealDefaultMod = getRealDefaultMod;
@@ -2,27 +2,58 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.kill = exports.on = void 0;
6
- var _utils = require("@x-drive/utils");
7
- var _util = require("util");
8
- var _path = _interopRequireDefault(require("path"));
9
- var _fs = _interopRequireDefault(require("fs"));
10
- function _interopRequireDefault(obj) {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get kill () {
13
+ return kill;
14
+ },
15
+ get on () {
16
+ return on;
17
+ }
18
+ });
19
+ const _utils = require("@x-drive/utils");
20
+ const _log = require("../log");
21
+ const _config = require("../../config");
22
+ const _util = require("util");
23
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
24
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
25
+ function _interop_require_default(obj) {
11
26
  return obj && obj.__esModule ? obj : {
12
27
  default: obj
13
28
  };
14
29
  }
15
- const logger = log.getLogger("cron");
16
- const config = getSysConfig("cron") || {
17
- "def": 60
18
- };
19
- /**
20
- * 默认间隔时间
21
- */ const DEF_TIME = config.def * 1000;
30
+ const logger = _log.globalLog.getLogger("cron");
22
31
  /**
23
32
  * 计时器对象
24
33
  */ var CRON_TIMERS = {};
25
34
  /**任务执行状态, 确保同时只会有一个定时任务在执行 */ const JOB_STATUS = {};
35
+ /**获取任务间隔时间(毫秒): 系统配置 crons[name].delay(秒) > 模块 getDelay()(毫秒) > cron.def(秒) */ function getJobDelay(mod, name) {
36
+ const sysConf = (0, _config.get)();
37
+ const jobConf = (sysConf.crons || {})[name] || {};
38
+ const defTime = (sysConf.cron && sysConf.cron.def || 60) * 1000;
39
+ if ((0, _utils.isNumber)(jobConf.delay) && jobConf.delay > 0) {
40
+ return jobConf.delay * 1000;
41
+ }
42
+ var time = (0, _utils.isExecutable)(mod.getDelay) ? mod.getDelay() : defTime;
43
+ // 非法或非正数的间隔一律回退默认值, 防止 0 间隔空转
44
+ if (isNaN(time) || time <= 0) {
45
+ logger.warn("[ %s ] Time Invalid.", name);
46
+ time = defTime;
47
+ }
48
+ return time;
49
+ }
50
+ /**获取任务启用状态: 系统配置 crons[name].enable > 模块 enable() */ function isJobEnabled(mod, name) {
51
+ const jobConf = ((0, _config.get)().crons || {})[name] || {};
52
+ if ((0, _utils.isBoolean)(jobConf.enable)) {
53
+ return jobConf.enable;
54
+ }
55
+ return (0, _utils.isExecutable)(mod.enable) ? mod.enable() === true : true;
56
+ }
26
57
  /**
27
58
  * 定时刷新函数
28
59
  * @param mod 模块对象
@@ -33,25 +64,20 @@ const config = getSysConfig("cron") || {
33
64
  if (JOB_STATUS[name] === true) {
34
65
  return;
35
66
  }
36
- var time = (0, _utils).isExecutable(mod.getDelay) ? mod.getDelay() : DEF_TIME;
37
- if (isNaN(time)) {
38
- logger.warn("[ %s ] Time Invalid.", name);
39
- time = DEF_TIME;
40
- }
41
- const enable = (0, _utils).isExecutable(mod.enable) ? mod.enable() === true : true;
42
- if (!enable) {
67
+ const time = getJobDelay(mod, name);
68
+ if (!isJobEnabled(mod, name)) {
43
69
  return null;
44
70
  }
45
71
  if (!dont) {
46
72
  JOB_STATUS[name] = true;
47
73
  try {
48
- if ((0, _utils).isExecutable(mod)) {
74
+ if ((0, _utils.isExecutable)(mod)) {
49
75
  mod();
50
- } else if (mod.default && (0, _utils).isExecutable(mod.default())) {
76
+ } else if ((0, _utils.isExecutable)(mod.default)) {
51
77
  mod.default();
52
78
  }
53
79
  } catch (e) {
54
- logger.error((0, _util).inspect(e));
80
+ logger.error((0, _util.inspect)(e));
55
81
  }
56
82
  JOB_STATUS[name] = false;
57
83
  }
@@ -81,7 +107,6 @@ const config = getSysConfig("cron") || {
81
107
  dirStat = _fs.default.accessSync(cronPath, _fs.default.constants.F_OK);
82
108
  } catch (e) {
83
109
  dirStat = true;
84
- logger.warn((0, _util).inspect(e));
85
110
  }
86
111
  // accessSync 在文件不存在的时候才会返回内容
87
112
  if (dirStat) {
@@ -103,7 +128,7 @@ const config = getSysConfig("cron") || {
103
128
  }
104
129
  }
105
130
  } catch (err) {
106
- logger.error((0, _util).inspect(err));
131
+ logger.error((0, _util.inspect)(err));
107
132
  }
108
133
  console.log("");
109
134
  }
@@ -121,5 +146,3 @@ const config = getSysConfig("cron") || {
121
146
  });
122
147
  }
123
148
  }
124
- exports.on = on;
125
- exports.kill = kill;
@@ -2,23 +2,42 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.lastModified = exports.contentType = exports.expire = exports.cacheControl = void 0;
6
- var _utils = require("@x-drive/utils");
7
- var _time = require("./time");
8
- var _mime = require("../mime");
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get cacheControl () {
13
+ return cacheControl;
14
+ },
15
+ get contentType () {
16
+ return contentType;
17
+ },
18
+ get expire () {
19
+ return expire;
20
+ },
21
+ get lastModified () {
22
+ return lastModified;
23
+ }
24
+ });
25
+ const _utils = require("@x-drive/utils");
26
+ const _time = require("./time");
27
+ const _mime = require("../mime");
9
28
  /**
10
29
  * 设置 Cache-Control
11
30
  * @param options max-age 缓存时间
12
31
  * @param res 请求上下文
13
32
  */ function cacheControl(options, res) {
14
33
  var age;
15
- if ((0, _utils).isString(options)) {
34
+ if ((0, _utils.isString)(options)) {
16
35
  if (options.indexOf("max-age") === -1) {
17
36
  age = options;
18
37
  } else {
19
- age = "max-age=" + (0, _time).string2seconds(options);
38
+ age = "max-age=" + (0, _time.string2seconds)(options);
20
39
  }
21
- } else if ((0, _utils).isNumber(options)) {
40
+ } else if ((0, _utils.isNumber)(options)) {
22
41
  age = "max-age=" + options;
23
42
  }
24
43
  if (age) {
@@ -31,9 +50,9 @@ var _mime = require("../mime");
31
50
  * @param res 请求上下文
32
51
  */ function expire(options, res) {
33
52
  var exp;
34
- if ((0, _utils).isString(options)) {
35
- exp = new Date(Date.now() + (0, _time).string2seconds(options) * 1000);
36
- } else if ((0, _utils).isNumber(options)) {
53
+ if ((0, _utils.isString)(options)) {
54
+ exp = new Date(Date.now() + (0, _time.string2seconds)(options) * 1000);
55
+ } else if ((0, _utils.isNumber)(options)) {
37
56
  exp = new Date(Date.now() + options * 1000);
38
57
  }
39
58
  if (exp) {
@@ -46,7 +65,7 @@ var _mime = require("../mime");
46
65
  * @param res 请求上下文
47
66
  */ function contentType(options, res) {
48
67
  var type;
49
- if ((0, _utils).isString(options)) {
68
+ if ((0, _utils.isString)(options)) {
50
69
  type = _mime.MIME[options];
51
70
  }
52
71
  if (type) {
@@ -58,10 +77,6 @@ var _mime = require("../mime");
58
77
  * @param options 最后更新时间,传入非 String 类型时会使用当前时间
59
78
  * @param res 请求上下文
60
79
  */ function lastModified(options, res) {
61
- var time = (0, _utils).isString(options) ? options : new Date().toUTCString();
62
- res.set("Last-Modified", time);
80
+ var time = (0, _utils.isString)(options) ? options : new Date().toUTCString();
81
+ res.set('Last-Modified', time);
63
82
  }
64
- exports.cacheControl = cacheControl;
65
- exports.expire = expire;
66
- exports.contentType = contentType;
67
- exports.lastModified = lastModified;
@@ -2,7 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.string2seconds = void 0;
5
+ Object.defineProperty(exports, "string2seconds", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return string2seconds;
9
+ }
10
+ });
6
11
  /**一年的秒数 */ const YEAR_SEC = 365 * 24 * 60 * 60;
7
12
  /**一月的秒数 */ const MONTH_SEC = 30 * 24 * 60 * 60;
8
13
  /**一天的秒数 */ const DAY_SEC = 24 * 60 * 60;
@@ -32,4 +37,3 @@ exports.string2seconds = void 0;
32
37
  }
33
38
  return sec;
34
39
  }
35
- exports.string2seconds = string2seconds;
@@ -1,4 +1,4 @@
1
- "use strict";
1
+ /**内置组件 */ "use strict";
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
@@ -2,104 +2,108 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.globalLog = exports.Log = void 0;
6
- var _log4Js = _interopRequireDefault(require("log4js"));
7
- var _path = _interopRequireDefault(require("path"));
8
- var _fs = _interopRequireDefault(require("fs"));
9
- function _interopRequireDefault(obj) {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get Log () {
13
+ return Log;
14
+ },
15
+ get getLogger () {
16
+ return getLogger;
17
+ },
18
+ get globalLog () {
19
+ return globalLog;
20
+ }
21
+ });
22
+ const _log4js = /*#__PURE__*/ _interop_require_default(require("log4js"));
23
+ const _path = /*#__PURE__*/ _interop_require_default(require("path"));
24
+ const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
25
+ function _interop_require_default(obj) {
10
26
  return obj && obj.__esModule ? obj : {
11
27
  default: obj
12
28
  };
13
29
  }
14
- /**
15
- * 按照文件夹目录地址创建文件夹
16
- * @param pathStr 文件夹目录地址
17
- */ function mkdir(pathStr) {
18
- var level = pathStr.split(_path.default.sep);
19
- if (level) {
20
- let dirIndex = 1;
21
- let last = level.length;
22
- while(dirIndex <= last){
23
- let dirPath = level.slice(0, dirIndex++).join(_path.default.sep);
24
- let status;
25
- try {
26
- status = _fs.default.statSync(dirPath);
27
- } catch (e) {
28
- if (e.errno === -2) {
29
- status = null;
30
- }
30
+ /**默认配置 */ const DEF_CONFIG = {
31
+ "name": "app",
32
+ "level": "warn",
33
+ "dir": _path.default.join("private", "log"),
34
+ "fileLog": false
35
+ };
36
+ /**
37
+ * v1 风格的时间戳格式
38
+
39
+ * log4js 6 默认 layout 的时间戳为 ISO 格式(日期与时间之间是 T),
40
+ * 显式指定 pattern 保持与 v1 一致的空格分隔, 避免影响日志采集
41
+ */ const DATE_PATTERN = "yyyy-MM-dd hh:mm:ss.SSS";
42
+ /**终端输出默认 layout(按日志等级着色) */ const STDOUT_LAYOUT = {
43
+ "type": "pattern",
44
+ "pattern": `%[[%d{${DATE_PATTERN}}] [%p] %c -%] %m`
45
+ };
46
+ /**文件输出默认 layout */ const FILE_LAYOUT = {
47
+ "type": "pattern",
48
+ "pattern": `[%d{${DATE_PATTERN}}] [%p] %c - %m`
49
+ };
50
+ /**日志模块 */ let Log = class Log {
51
+ /**当前实例配置 */ config;
52
+ /**日志实例缓存 */ loggers = {};
53
+ constructor(config){
54
+ this.config = Object.assign({}, DEF_CONFIG, config);
55
+ const appenders = {
56
+ "stdout": {
57
+ "type": "stdout",
58
+ "layout": this.config.layout || STDOUT_LAYOUT
31
59
  }
32
- if (status) {
33
- if (!status.isDirectory()) {
34
- console.error(`Target [${pathStr}] exists and is not a directory.`);
35
- break;
60
+ };
61
+ if (this.config.fileLog) {
62
+ _fs.default.mkdirSync(this.config.dir, {
63
+ "recursive": true
64
+ });
65
+ appenders.file = {
66
+ "type": "dateFile",
67
+ "filename": _path.default.join(this.config.dir, this.config.name),
68
+ "pattern": ".yyyyMMddhh.log",
69
+ "alwaysIncludePattern": true,
70
+ "layout": this.config.layout || FILE_LAYOUT
71
+ };
72
+ }
73
+ // log4js 的配置是进程级的,多次实例化以最后一次为准(与 v1 共享 appender 的行为一致)
74
+ _log4js.default.configure({
75
+ "appenders": appenders,
76
+ "categories": {
77
+ "default": {
78
+ "appenders": Object.keys(appenders),
79
+ "level": this.config.level
36
80
  }
37
- } else if (status === null) {
38
- _fs.default.mkdirSync(dirPath);
39
81
  }
40
- }
41
- level = null;
82
+ });
42
83
  }
43
- }
44
- // 日志类型对象
45
- const LOGERS = {};
46
- function Log(config) {
47
- this.config = {
48
- "name": "app",
49
- "level": "warn",
50
- "dir": "private/log",
51
- "fileLog": false
52
- };
53
- if (Object.prototype.toString.call(config) === "[object Object]") {
54
- this.config = Object.assign(this.config, config);
55
- }
56
- if (this.config.fileLog) {
57
- let tmp = _path.default.join(this.config.dir);
58
- mkdir(tmp);
59
- tmp = null;
60
- }
61
- _log4Js.default.clearAppenders();
62
- }
63
- var LP = Log.prototype;
64
- /**
65
- * 获取统计实例
66
- * @param {String} cat 实例分类名称
67
- * @return {Object} 统计实例对象
68
- */ LP.getLogger = function(cat) {
69
- var conf = this.config;
70
- cat = "[" + cat + "]";
71
- var logger = LOGERS[cat];
72
- if (logger) {
73
- return logger;
74
- }
75
- var dateFileConf = {
76
- "filename": conf.name,
77
- "pattern": ".yyyyMMddhh.log",
78
- "alwaysIncludePattern": true
79
- };
80
- var stdoutConf = {};
81
- if (conf.layout) {
82
- dateFileConf.layout = conf.layout;
83
- stdoutConf.layout = conf.layout;
84
- }
85
- if (this.config.fileLog) {
86
- _log4Js.default.loadAppender("dateFile");
87
- _log4Js.default.addAppender(_log4Js.default.appenderMakers.dateFile(dateFileConf, {
88
- "cwd": conf.dir
89
- }), cat);
84
+ /**
85
+ * 获取分类日志实例
86
+ * @param cat 实例分类名称
87
+ * @return 日志实例对象
88
+ */ getLogger(cat) {
89
+ cat = `[${cat}]`;
90
+ if (!this.loggers[cat]) {
91
+ const logger = _log4js.default.getLogger(cat);
92
+ logger.level = this.config.level;
93
+ this.loggers[cat] = logger;
94
+ }
95
+ return this.loggers[cat];
90
96
  }
91
- _log4Js.default.addAppender(_log4Js.default.appenderMakers.stdout(stdoutConf), cat);
92
- logger = _log4Js.default.getLogger(cat);
93
- logger.setLevel(conf.level);
94
- LOGERS[cat] = logger;
95
- return logger;
96
97
  };
97
98
  var meta = require(_path.default.resolve(process.cwd(), "package.json"));
98
- const globalLog = new Log({
99
+ /**框架全局日志实例 */ const globalLog = new Log({
99
100
  "name": meta.name,
100
101
  "level": "all"
101
102
  });
102
- // 日志
103
- global.log = globalLog;
104
- exports.Log = Log;
105
- exports.globalLog = globalLog;
103
+ /**
104
+ * 获取分类日志实例
105
+ * @param cat 实例分类名称
106
+ * @return 日志实例对象
107
+ */ function getLogger(cat) {
108
+ return globalLog.getLogger(cat);
109
+ }
@@ -2,7 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- exports.MIME = void 0;
5
+ Object.defineProperty(exports, "MIME", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MIME;
9
+ }
10
+ });
6
11
  const MIME = {
7
12
  "html": "text/html",
8
13
  "css": "text/css",
@@ -13,4 +18,3 @@ const MIME = {
13
18
  "xml": "application/xml",
14
19
  "json": "application/json"
15
20
  };
16
- exports.MIME = MIME;