@kcuf/sls-logger-base 0.0.2 → 0.0.4

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 (71) hide show
  1. package/dist/cjs/class/sls-logger.js +7 -7
  2. package/dist/cjs/factory/generate-create-logger.js +4 -4
  3. package/dist/cjs/util/flatten-object.js +14 -9
  4. package/dist/cjs/util/flatten-test-path.js +11 -0
  5. package/dist/cjs/util/index.js +3 -3
  6. package/dist/cjs/util/merge-dont-send.js +14 -0
  7. package/dist/esm/class/sls-logger.js +7 -7
  8. package/dist/esm/class/sls-logger.js.map +1 -1
  9. package/dist/esm/factory/generate-create-logger.js +5 -5
  10. package/dist/esm/factory/generate-create-logger.js.map +1 -1
  11. package/dist/esm/types/common.js.map +1 -1
  12. package/dist/esm/types/options.js.map +1 -1
  13. package/dist/esm/util/flatten-object.js +14 -9
  14. package/dist/esm/util/flatten-object.js.map +1 -1
  15. package/dist/esm/util/flatten-test-path.js +6 -0
  16. package/dist/esm/util/flatten-test-path.js.map +1 -0
  17. package/dist/esm/util/index.js +1 -1
  18. package/dist/esm/util/index.js.map +1 -1
  19. package/dist/esm/util/merge-dont-send.js +9 -0
  20. package/dist/esm/util/merge-dont-send.js.map +1 -0
  21. package/dist/types/class/sls-logger.d.ts +1 -1
  22. package/dist/types/factory/generate-create-logger.d.ts +1 -1
  23. package/dist/types/types/common.d.ts +2 -12
  24. package/dist/types/types/options.d.ts +15 -8
  25. package/dist/types/util/flatten-object.d.ts +2 -2
  26. package/dist/types/util/flatten-test-path.d.ts +2 -0
  27. package/dist/types/util/index.d.ts +1 -1
  28. package/dist/types/util/merge-dont-send.d.ts +2 -0
  29. package/package.json +2 -2
  30. package/coverage/base.css +0 -224
  31. package/coverage/block-navigation.js +0 -87
  32. package/coverage/clover.xml +0 -417
  33. package/coverage/coverage-final.json +0 -20
  34. package/coverage/favicon.png +0 -0
  35. package/coverage/index.html +0 -176
  36. package/coverage/prettify.css +0 -1
  37. package/coverage/prettify.js +0 -2
  38. package/coverage/sort-arrow-sprite.png +0 -0
  39. package/coverage/sorter.js +0 -196
  40. package/coverage/src/class/index.html +0 -146
  41. package/coverage/src/class/index.ts.html +0 -85
  42. package/coverage/src/class/sls-logger.ts.html +0 -457
  43. package/coverage/src/class/sls-pipe.ts.html +0 -400
  44. package/coverage/src/const/index.html +0 -116
  45. package/coverage/src/const/index.ts.html +0 -127
  46. package/coverage/src/factory/create-logger.ts.html +0 -166
  47. package/coverage/src/factory/generate-create-logger.ts.html +0 -184
  48. package/coverage/src/factory/index.html +0 -131
  49. package/coverage/src/index.html +0 -116
  50. package/coverage/src/index.ts.html +0 -118
  51. package/coverage/src/util/build-post-body.ts.html +0 -166
  52. package/coverage/src/util/convert-error-to-plain.ts.html +0 -133
  53. package/coverage/src/util/convert-log-info.ts.html +0 -214
  54. package/coverage/src/util/create-sls-log-quick.ts.html +0 -157
  55. package/coverage/src/util/flatten-object.ts.html +0 -283
  56. package/coverage/src/util/flatten-should-ignore.ts.html +0 -151
  57. package/coverage/src/util/get-log-once-key.ts.html +0 -115
  58. package/coverage/src/util/get-silent-countdown.ts.html +0 -97
  59. package/coverage/src/util/index.html +0 -281
  60. package/coverage/src/util/index.ts.html +0 -112
  61. package/coverage/src/util/merge-default-params.ts.html +0 -148
  62. package/coverage/src/util/merge-should-ignore.ts.html +0 -115
  63. package/coverage/src/util/resolve-default-params.ts.html +0 -103
  64. package/dist/cjs/util/flatten-should-ignore.js +0 -22
  65. package/dist/cjs/util/merge-should-ignore.js +0 -14
  66. package/dist/esm/util/flatten-should-ignore.js +0 -17
  67. package/dist/esm/util/flatten-should-ignore.js.map +0 -1
  68. package/dist/esm/util/merge-should-ignore.js +0 -9
  69. package/dist/esm/util/merge-should-ignore.js.map +0 -1
  70. package/dist/types/util/flatten-should-ignore.d.ts +0 -2
  71. package/dist/types/util/merge-should-ignore.d.ts +0 -2
@@ -61,7 +61,7 @@ var SlsLogger = exports.default = /*#__PURE__*/function () {
61
61
  flatten = _options2.flatten;
62
62
  var finalTopic = prefix ? "".concat(prefix).concat(topic) : topic;
63
63
  var onceKey = (0, _util.getLogOnceKey)(finalTopic, once);
64
- if (_this.shouldIgnore(sampling, onceKey)) {
64
+ if (_this.dontSend(sampling, onceKey)) {
65
65
  return;
66
66
  }
67
67
  if (onceKey) {
@@ -92,20 +92,20 @@ var SlsLogger = exports.default = /*#__PURE__*/function () {
92
92
  });
93
93
  }
94
94
  return (0, _createClass2.default)(SlsLogger, [{
95
- key: "shouldIgnore",
95
+ key: "dontSend",
96
96
  value:
97
97
  /**
98
98
  * 检查是否需要忽略
99
99
  */
100
- function shouldIgnore(sampling, onceKey) {
101
- var _shouldIgnore;
102
- var shouldIgnore = this.options.shouldIgnore;
100
+ function dontSend(sampling, onceKey) {
101
+ var _dontSend;
102
+ var dontSend = this.options.dontSend;
103
103
  if (onceKey && this.once[onceKey]) {
104
104
  // 只需发送一次,已发送过,忽略
105
105
  return true;
106
106
  }
107
- if (((_shouldIgnore = shouldIgnore) === null || _shouldIgnore === void 0 ? void 0 : _shouldIgnore()) === true) {
108
- // shouldIgnore 阻止发送
107
+ if (((_dontSend = dontSend) === null || _dontSend === void 0 ? void 0 : _dontSend()) === true) {
108
+ // dontSend 阻止发送
109
109
  return true;
110
110
  }
111
111
  if (typeof sampling === 'number' && sampling > 0 && sampling < 1) {
@@ -9,7 +9,7 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
9
9
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
10
  var _util = require("../util");
11
11
  var _createLogger = _interopRequireDefault(require("./create-logger"));
12
- var _excluded = ["defaultParams", "shouldIgnore"];
12
+ var _excluded = ["defaultParams", "dontSend"];
13
13
  /**
14
14
  * 创建 `createLogger` 方法的方法,对期望扩展默认参数的场景做了规范。
15
15
  *
@@ -17,14 +17,14 @@ var _excluded = ["defaultParams", "shouldIgnore"];
17
17
  */
18
18
  function generateCreateLogger(sender, _ref) {
19
19
  var factoryDefaultParams = _ref.defaultParams,
20
- factoryShouldIgnore = _ref.shouldIgnore;
20
+ factoryDontSend = _ref.dontSend;
21
21
  return function (_ref2) {
22
22
  var defaultParams = _ref2.defaultParams,
23
- shouldIgnore = _ref2.shouldIgnore,
23
+ dontSend = _ref2.dontSend,
24
24
  options = (0, _objectWithoutProperties2.default)(_ref2, _excluded);
25
25
  return (0, _createLogger.default)(sender, (0, _objectSpread2.default)({
26
26
  defaultParams: (0, _util.mergeDefaultParams)(factoryDefaultParams, defaultParams),
27
- shouldIgnore: (0, _util.mergeShouldIgnore)(factoryShouldIgnore, shouldIgnore)
27
+ dontSend: (0, _util.mergeDontSend)(factoryDontSend, dontSend)
28
28
  }, options));
29
29
  };
30
30
  }
@@ -11,7 +11,7 @@ var _isPlainObject2 = _interopRequireDefault(require("lodash/isPlainObject"));
11
11
  var _isError2 = _interopRequireDefault(require("lodash/isError"));
12
12
  var _forEach2 = _interopRequireDefault(require("lodash/forEach"));
13
13
  var _convertErrorToPlain = _interopRequireDefault(require("./convert-error-to-plain"));
14
- var _flattenShouldIgnore = _interopRequireDefault(require("./flatten-should-ignore"));
14
+ var _flattenTestPath = _interopRequireDefault(require("./flatten-test-path"));
15
15
  /**
16
16
  * 有时候为了统计方便,需要把传入的对象展平,比如 error 对象,可能会展平成如下形状:
17
17
  *
@@ -30,7 +30,8 @@ function flattenObject(o, options) {
30
30
  var scope = resolvedOptions.scope,
31
31
  _resolvedOptions$dept = resolvedOptions.depth,
32
32
  depth = _resolvedOptions$dept === void 0 ? 5 : _resolvedOptions$dept,
33
- ignore = resolvedOptions.ignore;
33
+ omit = resolvedOptions.omit,
34
+ pass = resolvedOptions.pass;
34
35
  var result = {};
35
36
  function makeSureErrorObject(errorOrObject) {
36
37
  return (0, _isError2.default)(errorOrObject) ? (0, _convertErrorToPlain.default)(errorOrObject) : errorOrObject;
@@ -38,18 +39,22 @@ function flattenObject(o, options) {
38
39
  function loop(currentObj, parentPaths) {
39
40
  var depthFull = depth > 0 && parentPaths.length + 1 >= depth;
40
41
  (0, _forEach2.default)(currentObj, function (v, k) {
41
- var key = [].concat((0, _toConsumableArray2.default)(parentPaths), [k]).join('.');
42
- var scopedKey = scope ? "".concat(scope, ".").concat(key) : key;
42
+ var pathKey = [].concat((0, _toConsumableArray2.default)(parentPaths), [k]).join('.');
43
+ var scopedPathKey = scope ? "".concat(scope, ".").concat(pathKey) : pathKey;
43
44
 
44
- // 可以忽略不重要的信息
45
- if ((0, _flattenShouldIgnore.default)(ignore, key, k, v)) {
45
+ // 可以忽略不重要的信息,默认不记录 `_` 打头的所有数据
46
+ if (/^_/.test(k) || omit && (0, _flattenTestPath.default)(pathKey, omit)) {
46
47
  return;
47
48
  }
48
49
  var vAsObject = makeSureErrorObject(v);
49
50
 
50
- // 深度满了,或者不是对象或 Error,或者空对象(或数组),则不继续 loop
51
- if (depthFull || !(0, _isPlainObject2.default)(vAsObject) || (0, _isEmpty2.default)(vAsObject)) {
52
- result[scopedKey] = vAsObject;
51
+ // 不继续 loop
52
+ // 1. 深度满了
53
+ // 2. 不是对象,不是 Error
54
+ // 3. 空对象,或空数组
55
+ // 4. 命中 `pass` 规则
56
+ if (depthFull || !(0, _isPlainObject2.default)(vAsObject) || (0, _isEmpty2.default)(vAsObject) || pass && (0, _flattenTestPath.default)(pathKey, pass)) {
57
+ result[scopedPathKey] = vAsObject;
53
58
  return;
54
59
  }
55
60
  loop(vAsObject, [].concat((0, _toConsumableArray2.default)(parentPaths), [k]));
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = flattenTestPath;
7
+ function flattenTestPath(path, tester) {
8
+ return (Array.isArray(tester) ? tester : [tester]).some(function (v) {
9
+ return typeof v === 'string' ? v === path : v.test(path);
10
+ });
11
+ }
@@ -46,10 +46,10 @@ Object.defineProperty(exports, "mergeDefaultParams", {
46
46
  return _mergeDefaultParams.default;
47
47
  }
48
48
  });
49
- Object.defineProperty(exports, "mergeShouldIgnore", {
49
+ Object.defineProperty(exports, "mergeDontSend", {
50
50
  enumerable: true,
51
51
  get: function get() {
52
- return _mergeShouldIgnore.default;
52
+ return _mergeDontSend.default;
53
53
  }
54
54
  });
55
55
  Object.defineProperty(exports, "resolveDefaultParams", {
@@ -66,4 +66,4 @@ var _convertErrorToPlain = _interopRequireDefault(require("./convert-error-to-pl
66
66
  var _resolveDefaultParams = _interopRequireDefault(require("./resolve-default-params"));
67
67
  var _createSlsLogQuick = _interopRequireDefault(require("./create-sls-log-quick"));
68
68
  var _mergeDefaultParams = _interopRequireDefault(require("./merge-default-params"));
69
- var _mergeShouldIgnore = _interopRequireDefault(require("./merge-should-ignore"));
69
+ var _mergeDontSend = _interopRequireDefault(require("./merge-dont-send"));
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = mergeDontSend;
7
+ function mergeDontSend(factoryDontSend, dontSend) {
8
+ if (!factoryDontSend || !dontSend) {
9
+ return dontSend || factoryDontSend;
10
+ }
11
+ return function () {
12
+ return factoryDontSend() || dontSend();
13
+ };
14
+ }
@@ -55,7 +55,7 @@ var SlsLogger = /*#__PURE__*/function () {
55
55
  flatten = _options2.flatten;
56
56
  var finalTopic = prefix ? "".concat(prefix).concat(topic) : topic;
57
57
  var onceKey = getLogOnceKey(finalTopic, once);
58
- if (_this.shouldIgnore(sampling, onceKey)) {
58
+ if (_this.dontSend(sampling, onceKey)) {
59
59
  return;
60
60
  }
61
61
  if (onceKey) {
@@ -86,20 +86,20 @@ var SlsLogger = /*#__PURE__*/function () {
86
86
  });
87
87
  }
88
88
  return _createClass(SlsLogger, [{
89
- key: "shouldIgnore",
89
+ key: "dontSend",
90
90
  value:
91
91
  /**
92
92
  * 检查是否需要忽略
93
93
  */
94
- function shouldIgnore(sampling, onceKey) {
95
- var _shouldIgnore;
96
- var shouldIgnore = this.options.shouldIgnore;
94
+ function dontSend(sampling, onceKey) {
95
+ var _dontSend;
96
+ var dontSend = this.options.dontSend;
97
97
  if (onceKey && this.once[onceKey]) {
98
98
  // 只需发送一次,已发送过,忽略
99
99
  return true;
100
100
  }
101
- if (((_shouldIgnore = shouldIgnore) === null || _shouldIgnore === void 0 ? void 0 : _shouldIgnore()) === true) {
102
- // shouldIgnore 阻止发送
101
+ if (((_dontSend = dontSend) === null || _dontSend === void 0 ? void 0 : _dontSend()) === true) {
102
+ // dontSend 阻止发送
103
103
  return true;
104
104
  }
105
105
  if (typeof sampling === 'number' && sampling > 0 && sampling < 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"sls-logger.js","names":["_isError","API_VERSION","PIPE_SILENT_TIME","PIPE_WAIT_TIME","PIPE_MAX_CHUNK","getLogOnceKey","flattenObject","convertErrorToPlain","resolveDefaultParams","SlsPipe","SlsLogger","sender","options","_this","_options$silentTime","_options$waitTime","_options$maxChunk","_classCallCheck","_defineProperty","topic","payload","_len","arguments","length","args","Array","_key","_ref","_ref2","_slicedToArray","_ref3","_ref4","_this$options","factoryPrefix","prefix","factorySampling","sampling","defaultParams","_options2","_options2$group","group","_options2$prefix","_options2$sampling","instant","once","flatten","finalTopic","concat","onceKey","shouldIgnore","plainInfo","slsPipe","pipe","_objectSpread","__topic__","_GROUP","trackUrl","project","endpoint","logstore","apiVersion","silentTime","waitTime","maxChunk","_createClass","key","value","_shouldIgnore","Math","random","default"],"sources":["../../../src/class/sls-logger.ts"],"sourcesContent":["import _isError from 'lodash/isError';\n\nimport {\n TLogArgs,\n ICreateLoggerOptions,\n ILogSender,\n ISlsLogOptions,\n ISlsLogFn\n} from '../types';\nimport {\n API_VERSION,\n PIPE_SILENT_TIME,\n PIPE_WAIT_TIME,\n PIPE_MAX_CHUNK\n} from '../const';\nimport {\n getLogOnceKey,\n flattenObject,\n convertErrorToPlain,\n resolveDefaultParams\n} from '../util';\n\nimport SlsPipe from './sls-pipe';\n\n/**\n * 创建 SLS 日志方法\n */\nexport default class SlsLogger {\n private readonly options: ICreateLoggerOptions;\n private readonly slsPipe: SlsPipe;\n private once: Record<string, 1> = {};\n \n constructor(sender: ILogSender, options: ICreateLoggerOptions) {\n this.options = options;\n this.slsPipe = new SlsPipe(sender, {\n trackUrl: `https://${options.project}.${options.endpoint}/logstores/${options.logstore}/track`,\n apiVersion: options.apiVersion || API_VERSION,\n silentTime: options.silentTime ?? PIPE_SILENT_TIME,\n waitTime: options.waitTime ?? PIPE_WAIT_TIME,\n maxChunk: options.maxChunk ?? PIPE_MAX_CHUNK\n });\n }\n \n log: ISlsLogFn = (...args: TLogArgs): void => {\n let options: ISlsLogOptions = {};\n let topic: string;\n let payload: Record<string, unknown> | undefined;\n \n if (typeof args[0] === 'string') {\n [topic, payload] = args as [string, Record<string, unknown>?];\n } else {\n [options, topic, payload] = args as [ISlsLogOptions, string, Record<string, unknown>?];\n }\n \n const {\n options: {\n prefix: factoryPrefix,\n sampling: factorySampling,\n defaultParams\n }\n } = this;\n const {\n group = 'LOG',\n prefix = factoryPrefix,\n sampling = factorySampling,\n instant,\n once,\n flatten\n } = options;\n const finalTopic = prefix ? `${prefix}${topic}` : topic;\n const onceKey: string | undefined = getLogOnceKey(finalTopic, once);\n \n if (this.shouldIgnore(sampling, onceKey)) {\n return;\n }\n \n if (onceKey) {\n this.once[onceKey] = 1;\n }\n \n let plainInfo: object | undefined;\n \n if (payload) {\n if (flatten) {\n plainInfo = flattenObject(payload, flatten === true ? '' : flatten);\n } else if (_isError(payload)) {\n plainInfo = convertErrorToPlain(payload);\n } else {\n plainInfo = payload;\n }\n }\n \n this.slsPipe.pipe({\n ...resolveDefaultParams(defaultParams),\n ...plainInfo,\n __topic__: finalTopic,\n _GROUP: group\n }, instant);\n };\n \n /**\n * 检查是否需要忽略\n */\n private shouldIgnore(sampling?: number, onceKey?: string): boolean {\n const {\n options: {\n shouldIgnore\n }\n } = this;\n \n if (onceKey && this.once[onceKey]) { // 只需发送一次,已发送过,忽略\n return true;\n }\n \n if (shouldIgnore?.() === true) { // shouldIgnore 阻止发送\n return true;\n }\n \n if (typeof sampling === 'number' && sampling > 0 && sampling < 1) { // 采样,`(0, 1)` 开区间\n return Math.random() > sampling;\n }\n \n return false;\n }\n}"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"sls-logger.js","names":["_isError","API_VERSION","PIPE_SILENT_TIME","PIPE_WAIT_TIME","PIPE_MAX_CHUNK","getLogOnceKey","flattenObject","convertErrorToPlain","resolveDefaultParams","SlsPipe","SlsLogger","sender","options","_this","_options$silentTime","_options$waitTime","_options$maxChunk","_classCallCheck","_defineProperty","topic","payload","_len","arguments","length","args","Array","_key","_ref","_ref2","_slicedToArray","_ref3","_ref4","_this$options","factoryPrefix","prefix","factorySampling","sampling","defaultParams","_options2","_options2$group","group","_options2$prefix","_options2$sampling","instant","once","flatten","finalTopic","concat","onceKey","dontSend","plainInfo","slsPipe","pipe","_objectSpread","__topic__","_GROUP","trackUrl","project","endpoint","logstore","apiVersion","silentTime","waitTime","maxChunk","_createClass","key","value","_dontSend","Math","random","default"],"sources":["../../../src/class/sls-logger.ts"],"sourcesContent":["import _isError from 'lodash/isError';\n\nimport {\n TLogArgs,\n ICreateLoggerOptions,\n ILogSender,\n ISlsLogOptions,\n ISlsLogFn\n} from '../types';\nimport {\n API_VERSION,\n PIPE_SILENT_TIME,\n PIPE_WAIT_TIME,\n PIPE_MAX_CHUNK\n} from '../const';\nimport {\n getLogOnceKey,\n flattenObject,\n convertErrorToPlain,\n resolveDefaultParams\n} from '../util';\n\nimport SlsPipe from './sls-pipe';\n\n/**\n * 创建 SLS 日志方法\n */\nexport default class SlsLogger {\n private readonly options: ICreateLoggerOptions;\n private readonly slsPipe: SlsPipe;\n private once: Record<string, 1> = {};\n \n constructor(sender: ILogSender, options: ICreateLoggerOptions) {\n this.options = options;\n this.slsPipe = new SlsPipe(sender, {\n trackUrl: `https://${options.project}.${options.endpoint}/logstores/${options.logstore}/track`,\n apiVersion: options.apiVersion || API_VERSION,\n silentTime: options.silentTime ?? PIPE_SILENT_TIME,\n waitTime: options.waitTime ?? PIPE_WAIT_TIME,\n maxChunk: options.maxChunk ?? PIPE_MAX_CHUNK\n });\n }\n \n log: ISlsLogFn = (...args: TLogArgs): void => {\n let options: ISlsLogOptions = {};\n let topic: string;\n let payload: Record<string, unknown> | undefined;\n \n if (typeof args[0] === 'string') {\n [topic, payload] = args as [string, Record<string, unknown>?];\n } else {\n [options, topic, payload] = args as [ISlsLogOptions, string, Record<string, unknown>?];\n }\n \n const {\n options: {\n prefix: factoryPrefix,\n sampling: factorySampling,\n defaultParams\n }\n } = this;\n const {\n group = 'LOG',\n prefix = factoryPrefix,\n sampling = factorySampling,\n instant,\n once,\n flatten\n } = options;\n const finalTopic = prefix ? `${prefix}${topic}` : topic;\n const onceKey: string | undefined = getLogOnceKey(finalTopic, once);\n \n if (this.dontSend(sampling, onceKey)) {\n return;\n }\n \n if (onceKey) {\n this.once[onceKey] = 1;\n }\n \n let plainInfo: object | undefined;\n \n if (payload) {\n if (flatten) {\n plainInfo = flattenObject(payload, flatten === true ? '' : flatten);\n } else if (_isError(payload)) {\n plainInfo = convertErrorToPlain(payload);\n } else {\n plainInfo = payload;\n }\n }\n \n this.slsPipe.pipe({\n ...resolveDefaultParams(defaultParams),\n ...plainInfo,\n __topic__: finalTopic,\n _GROUP: group\n }, instant);\n };\n \n /**\n * 检查是否需要忽略\n */\n private dontSend(sampling?: number, onceKey?: string): boolean {\n const {\n options: {\n dontSend\n }\n } = this;\n \n if (onceKey && this.once[onceKey]) { // 只需发送一次,已发送过,忽略\n return true;\n }\n \n if (dontSend?.() === true) { // dontSend 阻止发送\n return true;\n }\n \n if (typeof sampling === 'number' && sampling > 0 && sampling < 1) { // 采样,`(0, 1)` 开区间\n return Math.random() > sampling;\n }\n \n return false;\n }\n}"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/objectSpread2";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["defaultParams", "shouldIgnore"];
4
- import { mergeDefaultParams, mergeShouldIgnore } from '../util';
3
+ var _excluded = ["defaultParams", "dontSend"];
4
+ import { mergeDefaultParams, mergeDontSend } from '../util';
5
5
  import createLogger from './create-logger';
6
6
 
7
7
  /**
@@ -11,14 +11,14 @@ import createLogger from './create-logger';
11
11
  */
12
12
  export default function generateCreateLogger(sender, _ref) {
13
13
  var factoryDefaultParams = _ref.defaultParams,
14
- factoryShouldIgnore = _ref.shouldIgnore;
14
+ factoryDontSend = _ref.dontSend;
15
15
  return function (_ref2) {
16
16
  var defaultParams = _ref2.defaultParams,
17
- shouldIgnore = _ref2.shouldIgnore,
17
+ dontSend = _ref2.dontSend,
18
18
  options = _objectWithoutProperties(_ref2, _excluded);
19
19
  return createLogger(sender, _objectSpread({
20
20
  defaultParams: mergeDefaultParams(factoryDefaultParams, defaultParams),
21
- shouldIgnore: mergeShouldIgnore(factoryShouldIgnore, shouldIgnore)
21
+ dontSend: mergeDontSend(factoryDontSend, dontSend)
22
22
  }, options));
23
23
  };
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate-create-logger.js","names":["mergeDefaultParams","mergeShouldIgnore","createLogger","generateCreateLogger","sender","_ref","factoryDefaultParams","defaultParams","factoryShouldIgnore","shouldIgnore","_ref2","options","_objectWithoutProperties","_excluded","_objectSpread"],"sources":["../../../src/factory/generate-create-logger.ts"],"sourcesContent":["import {\n ILogSender,\n ICreateLogger,\n ICreateLoggerOptions,\n IGenerateCreateLoggerOptions\n} from '../types';\nimport {\n mergeDefaultParams,\n mergeShouldIgnore\n} from '../util';\n\nimport createLogger from './create-logger';\n\n/**\n * 创建 `createLogger` 方法的方法,对期望扩展默认参数的场景做了规范。\n *\n * 一般不会在项目中直接使用,而是用来写可复用 npm 包。\n */\nexport default function generateCreateLogger(sender: ILogSender, {\n defaultParams: factoryDefaultParams,\n shouldIgnore: factoryShouldIgnore\n}: IGenerateCreateLoggerOptions): ICreateLogger {\n return ({\n defaultParams,\n shouldIgnore,\n ...options\n }: ICreateLoggerOptions) => createLogger(sender, {\n defaultParams: mergeDefaultParams(factoryDefaultParams, defaultParams),\n shouldIgnore: mergeShouldIgnore(factoryShouldIgnore, shouldIgnore),\n ...options\n });\n}"],"mappings":";;;AAMA,SACEA,kBAAkB,EAClBC,iBAAiB,QACZ,SAAS;AAEhB,OAAOC,YAAY,MAAM,iBAAiB;;AAE1C;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,oBAAoBA,CAACC,MAAkB,EAAAC,IAAA,EAGf;EAAA,IAF/BC,oBAAoB,GAAAD,IAAA,CAAnCE,aAAa;IACCC,mBAAmB,GAAAH,IAAA,CAAjCI,YAAY;EAEZ,OAAO,UAAAC,KAAA;IAAA,IACLH,aAAa,GAAAG,KAAA,CAAbH,aAAa;MACbE,YAAY,GAAAC,KAAA,CAAZD,YAAY;MACTE,OAAO,GAAAC,wBAAA,CAAAF,KAAA,EAAAG,SAAA;IAAA,OACgBX,YAAY,CAACE,MAAM,EAAAU,aAAA;MAC7CP,aAAa,EAAEP,kBAAkB,CAACM,oBAAoB,EAAEC,aAAa,CAAC;MACtEE,YAAY,EAAER,iBAAiB,CAACO,mBAAmB,EAAEC,YAAY;IAAC,GAC/DE,OAAO,CACX,CAAC;EAAA;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"generate-create-logger.js","names":["mergeDefaultParams","mergeDontSend","createLogger","generateCreateLogger","sender","_ref","factoryDefaultParams","defaultParams","factoryDontSend","dontSend","_ref2","options","_objectWithoutProperties","_excluded","_objectSpread"],"sources":["../../../src/factory/generate-create-logger.ts"],"sourcesContent":["import {\n ILogSender,\n ICreateLogger,\n ICreateLoggerOptions,\n IGenerateCreateLoggerOptions\n} from '../types';\nimport {\n mergeDefaultParams,\n mergeDontSend\n} from '../util';\n\nimport createLogger from './create-logger';\n\n/**\n * 创建 `createLogger` 方法的方法,对期望扩展默认参数的场景做了规范。\n *\n * 一般不会在项目中直接使用,而是用来写可复用 npm 包。\n */\nexport default function generateCreateLogger(sender: ILogSender, {\n defaultParams: factoryDefaultParams,\n dontSend: factoryDontSend\n}: IGenerateCreateLoggerOptions): ICreateLogger {\n return ({\n defaultParams,\n dontSend,\n ...options\n }: ICreateLoggerOptions) => createLogger(sender, {\n defaultParams: mergeDefaultParams(factoryDefaultParams, defaultParams),\n dontSend: mergeDontSend(factoryDontSend, dontSend),\n ...options\n });\n}"],"mappings":";;;AAMA,SACEA,kBAAkB,EAClBC,aAAa,QACR,SAAS;AAEhB,OAAOC,YAAY,MAAM,iBAAiB;;AAE1C;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,oBAAoBA,CAACC,MAAkB,EAAAC,IAAA,EAGf;EAAA,IAF/BC,oBAAoB,GAAAD,IAAA,CAAnCE,aAAa;IACHC,eAAe,GAAAH,IAAA,CAAzBI,QAAQ;EAER,OAAO,UAAAC,KAAA;IAAA,IACLH,aAAa,GAAAG,KAAA,CAAbH,aAAa;MACbE,QAAQ,GAAAC,KAAA,CAARD,QAAQ;MACLE,OAAO,GAAAC,wBAAA,CAAAF,KAAA,EAAAG,SAAA;IAAA,OACgBX,YAAY,CAACE,MAAM,EAAAU,aAAA;MAC7CP,aAAa,EAAEP,kBAAkB,CAACM,oBAAoB,EAAEC,aAAa,CAAC;MACtEE,QAAQ,EAAER,aAAa,CAACO,eAAe,EAAEC,QAAQ;IAAC,GAC/CE,OAAO,CACX,CAAC;EAAA;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","names":[],"sources":["../../../src/types/common.ts"],"sourcesContent":["export interface IDefaultParams {\n (): Record<string, unknown>;\n}\n\nexport type TDefaultParams = Record<string, unknown> | IDefaultParams;\n\nexport interface IShouldIgnore {\n (): void | boolean;\n}\n\n/**\n * 真正发送请求的实现逻辑(以支持多平台的需求),注意必需用 POST\n */\nexport interface ILogSender {\n (trackUrl: string, body: string, headers: Record<string, string>): void;\n}\n\n/**\n * 用于在 flattenObject 的时候忽略部分属性\n *\n * - 默认忽略所有以 `_` 为前缀的属性\n * - `string` 等于 `key` 则忽略\n * - `string[]` 包含 `key` 则忽略\n * - 方法,可用 `path` 进行判断(注意这里的 `path` 和 `scope` 没有关系)\n */\nexport type TFlattenIgnore = string | string[] | {\n (path: string, key: string, value: unknown): boolean;\n};\n\nexport interface ISlsLogPayload {\n __topic__: string;\n [k: string]: unknown;\n}\n\nexport interface ISlsPostBody {\n __topic__: string;\n __logs__: Record<string, string>[];\n // __source__?: string;\n // __tags__?: Record<string, string>;\n}"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"common.js","names":[],"sources":["../../../src/types/common.ts"],"sourcesContent":["export interface IDefaultParams {\n (): Record<string, unknown>;\n}\n\nexport type TDefaultParams = Record<string, unknown> | IDefaultParams;\n\nexport interface IDontSend {\n (): void | boolean;\n}\n\n/**\n * 真正发送请求的实现逻辑(以支持多平台的需求),注意必需用 POST\n */\nexport interface ILogSender {\n (trackUrl: string, body: string, headers: Record<string, string>): void;\n}\n\nexport type TFlattenPathTester = string | RegExp | Array<string | RegExp>;\n\nexport interface ISlsLogPayload {\n __topic__: string;\n [k: string]: unknown;\n}\n\nexport interface ISlsPostBody {\n __topic__: string;\n __logs__: Record<string, string>[];\n // __source__?: string;\n // __tags__?: Record<string, string>;\n}"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","names":[],"sources":["../../../src/types/options.ts"],"sourcesContent":["import {\n TDefaultParams,\n IShouldIgnore,\n TFlattenIgnore\n} from './common';\n\nexport interface ISlsPipeOptions {\n trackUrl: string;\n /**\n * 不知所谓的参数,但必需,说是保留字段,默认 `0.6.0`(文档中的版本号),请不要使用\n */\n apiVersion: string;\n /**\n * 应用初始化后,多少时间内对日志请求进行冷冻处理,以让行业务请求,提升业务性能\n *\n * 默认 5000ms\n */\n silentTime: number;\n /**\n * 调用方法到日志被真正发送的等待时间,这段时间内,若有新的日志进来,会被合并并重新计时\n *\n * 默认 200ms\n */\n waitTime: number;\n /**\n * 一次最多发送日志条数,若积累的日志数超过,将切成多个请求发送\n *\n * 默认 50\n */\n maxChunk: number;\n}\n\nexport interface ICreateLoggerOptions extends Partial<ISlsPipeOptions> {\n /**\n * logstore 所在的 SLS project\n */\n project: string;\n /**\n * project 的外网访问域名,在 SLS 控制台 project 概览页可以找到,\n * 如 `cn-hangzhou.log.aliyuncs.com`(仅跟 project 所在地域有关)\n */\n endpoint: string;\n /**\n * SLS project 下的 logstore,必须开通 Web Tracking 功能,日志记录的存储点\n */\n logstore: string;\n /**\n * 当希望同一个模块的日志使用统一的前缀,又不想每次调用的时候写,可以用这个\n */\n prefix?: string;\n /**\n * 生产出的日志方法的整体采样率,可在调用时由方法参数覆盖,范围为 (0, 1],默认 1\n */\n sampling?: number;\n /**\n * 默认参数,避免每次都要传,可以是静态数据或产生动态数据的方法,这些参数可以覆盖自动记录的参数,\n * 但会被日志方法的第二个参数 `params` 中对应的字段覆盖\n */\n defaultParams?: TDefaultParams;\n /**\n * 上报之前进行判断是否继续,返回 false 以阻止上报\n *\n * 在某些场景下需要禁用日志上报功能,比如国外禁止将日志上报到国内的 logstore\n */\n shouldIgnore?: IShouldIgnore;\n}\n\n/**\n * 生成 `createLogger` 方法的工厂方法的 options,用于制定工厂级别的参数的忽略方法\n */\nexport interface IGenerateCreateLoggerOptions {\n defaultParams?: TDefaultParams;\n shouldIgnore?: IShouldIgnore;\n}\n\nexport interface ISlsFlattenOptions {\n scope?: string;\n depth?: number;\n ignore?: TFlattenIgnore;\n}\n\n/**\n * SLS 日志方法 Options\n */\nexport interface ISlsLogOptions {\n /**\n * 覆盖 IFactoryOptions 的 prefix 设置,仅针对当前日志\n */\n prefix?: string;\n /**\n * 覆盖 IFactoryOptions 的 sampling 设置,仅针对当前日志\n */\n sampling?: number;\n /**\n * 有日志只需要在应用起来后记录一次,后续的将被丢弃\n *\n * - true 表示以该 topic 做判断,针对该 topic 只记录一次\n * - 如果是字符串,则以「topic + 此字符串」做判断\n */\n once?: true | string;\n /**\n * 日志不是强需求,不能压过业务,要业务先行。网络请求一般在页面的一开始最密集,如果日志在这时上报会造成网络阻塞而产生性能问题。\n *\n * 办法是先积压着,等到时间到了,再把积压着的日志一起上报。\n *\n * 所以,为了提升性能,做了以下事情:\n *\n * 1. 应用起来后,有一定的静默时间,这段时间的日志会被积压,用于给应用的请求让路\n * 2. 整体或单个日志的延时时间\n * 3. 整体或单个日志的采样率\n * 4. 有的日志只会发送一次\n * 5. 日志发送前也有一个很短的等待时间,在这段时间内,如果有新的日志进来,也将被积压,并重新计时\n * 6. 最后,积压的日志利用 POST 请求对日志进行合并发送\n *\n * 然而,总有例外,有的日志希望是即时的,比如需要拿它来算 PvUv,instant 就是为此而生。\n * 注意:instant 会忽略延时,但不会忽略采样率\n */\n instant?: boolean;\n /**\n * 是否对 info 进行 flatten 操作\n */\n flatten?: boolean | string | ISlsFlattenOptions;\n /**\n * 为日志增加默认参数 `_GROUP`,可用于数据分析分组\n */\n group?: string;\n}\n\n/**\n * SLS 快捷方法 Options\n */\nexport interface ISlsLogOptionsQuick extends Omit<ISlsLogOptions, 'group'> {}"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"options.js","names":[],"sources":["../../../src/types/options.ts"],"sourcesContent":["import {\n TDefaultParams,\n TFlattenPathTester,\n IDontSend\n} from './common';\n\nexport interface ISlsPipeOptions {\n trackUrl: string;\n /**\n * 不知所谓的参数,但必需,说是保留字段,默认 `0.6.0`(文档中的版本号),请不要使用\n */\n apiVersion: string;\n /**\n * 应用初始化后,多少时间内对日志请求进行冷冻处理,以让行业务请求,提升业务性能\n *\n * 默认 5000ms\n */\n silentTime: number;\n /**\n * 调用方法到日志被真正发送的等待时间,这段时间内,若有新的日志进来,会被合并并重新计时\n *\n * 默认 200ms\n */\n waitTime: number;\n /**\n * 一次最多发送日志条数,若积累的日志数超过,将切成多个请求发送\n *\n * 默认 50\n */\n maxChunk: number;\n}\n\nexport interface ICreateLoggerOptions extends Partial<ISlsPipeOptions> {\n /**\n * logstore 所在的 SLS project\n */\n project: string;\n /**\n * project 的外网访问域名,在 SLS 控制台 project 概览页可以找到,\n * 如 `cn-hangzhou.log.aliyuncs.com`(仅跟 project 所在地域有关)\n */\n endpoint: string;\n /**\n * SLS project 下的 logstore,必须开通 Web Tracking 功能,日志记录的存储点\n */\n logstore: string;\n /**\n * 当希望同一个模块的日志使用统一的前缀,又不想每次调用的时候写,可以用这个\n */\n prefix?: string;\n /**\n * 生产出的日志方法的整体采样率,可在调用时由方法参数覆盖,范围为 (0, 1],默认 1\n */\n sampling?: number;\n /**\n * 默认参数,避免每次都要传,可以是静态数据或产生动态数据的方法,这些参数可以覆盖自动记录的参数,\n * 但会被日志方法的第二个参数 `params` 中对应的字段覆盖\n */\n defaultParams?: TDefaultParams;\n /**\n * 上报之前进行判断是否继续,返回 true 以阻止上报\n *\n * 在某些场景下需要禁用日志上报功能,比如可能禁止日志跨境\n */\n dontSend?: IDontSend;\n}\n\n/**\n * 生成 `createLogger` 方法的工厂方法的 options,用于制定工厂级别的参数的忽略方法\n */\nexport interface IGenerateCreateLoggerOptions {\n defaultParams?: TDefaultParams;\n dontSend?: IDontSend;\n}\n\nexport interface IFlattenOptions {\n scope?: string;\n depth?: number;\n /**\n * 将属性从结果中剔除\n */\n omit?: TFlattenPathTester;\n /**\n * 将属性直接输出,提前结束该属性深度\n */\n pass?: TFlattenPathTester;\n}\n\n/**\n * SLS 日志方法 Options\n */\nexport interface ISlsLogOptions {\n /**\n * 覆盖 IFactoryOptions 的 prefix 设置,仅针对当前日志\n */\n prefix?: string;\n /**\n * 覆盖 IFactoryOptions 的 sampling 设置,仅针对当前日志\n */\n sampling?: number;\n /**\n * 有日志只需要在应用起来后记录一次,后续的将被丢弃\n *\n * - true 表示以该 topic 做判断,针对该 topic 只记录一次\n * - 如果是字符串,则以「topic + 此字符串」做判断\n */\n once?: true | string;\n /**\n * 日志不是强需求,不能压过业务,要业务先行。网络请求一般在页面的一开始最密集,如果日志在这时上报会造成网络阻塞而产生性能问题。\n *\n * 办法是先积压着,等到时间到了,再把积压着的日志一起上报。\n *\n * 所以,为了提升性能,做了以下事情:\n *\n * 1. 应用起来后,有一定的静默时间,这段时间的日志会被积压,用于给应用的请求让路\n * 2. 整体或单个日志的延时时间\n * 3. 整体或单个日志的采样率\n * 4. 有的日志只会发送一次\n * 5. 日志发送前也有一个很短的等待时间,在这段时间内,如果有新的日志进来,也将被积压,并重新计时\n * 6. 最后,积压的日志利用 POST 请求对日志进行合并发送\n *\n * 然而,总有例外,有的日志希望是即时的,比如需要拿它来算 PvUv,instant 就是为此而生。\n * 注意:instant 会忽略延时,但不会忽略采样率\n */\n instant?: boolean;\n /**\n * 是否对 info 进行 flatten 操作\n */\n flatten?: boolean | string | IFlattenOptions;\n /**\n * 为日志增加默认参数 `_GROUP`,可用于数据分析分组\n */\n group?: string;\n}\n\n/**\n * SLS 快捷方法 Options\n */\nexport interface ISlsLogOptionsQuick extends Omit<ISlsLogOptions, 'group'> {}"],"mappings":"","ignoreList":[]}
@@ -4,7 +4,7 @@ import _isPlainObject from 'lodash/isPlainObject';
4
4
  import _isError from 'lodash/isError';
5
5
  import _forEach from 'lodash/forEach';
6
6
  import convertErrorToPlain from './convert-error-to-plain';
7
- import flattenShouldIgnore from './flatten-should-ignore';
7
+ import flattenTestPath from './flatten-test-path';
8
8
 
9
9
  /**
10
10
  * 有时候为了统计方便,需要把传入的对象展平,比如 error 对象,可能会展平成如下形状:
@@ -24,7 +24,8 @@ export default function flattenObject(o, options) {
24
24
  var scope = resolvedOptions.scope,
25
25
  _resolvedOptions$dept = resolvedOptions.depth,
26
26
  depth = _resolvedOptions$dept === void 0 ? 5 : _resolvedOptions$dept,
27
- ignore = resolvedOptions.ignore;
27
+ omit = resolvedOptions.omit,
28
+ pass = resolvedOptions.pass;
28
29
  var result = {};
29
30
  function makeSureErrorObject(errorOrObject) {
30
31
  return _isError(errorOrObject) ? convertErrorToPlain(errorOrObject) : errorOrObject;
@@ -32,18 +33,22 @@ export default function flattenObject(o, options) {
32
33
  function loop(currentObj, parentPaths) {
33
34
  var depthFull = depth > 0 && parentPaths.length + 1 >= depth;
34
35
  _forEach(currentObj, function (v, k) {
35
- var key = [].concat(_toConsumableArray(parentPaths), [k]).join('.');
36
- var scopedKey = scope ? "".concat(scope, ".").concat(key) : key;
36
+ var pathKey = [].concat(_toConsumableArray(parentPaths), [k]).join('.');
37
+ var scopedPathKey = scope ? "".concat(scope, ".").concat(pathKey) : pathKey;
37
38
 
38
- // 可以忽略不重要的信息
39
- if (flattenShouldIgnore(ignore, key, k, v)) {
39
+ // 可以忽略不重要的信息,默认不记录 `_` 打头的所有数据
40
+ if (/^_/.test(k) || omit && flattenTestPath(pathKey, omit)) {
40
41
  return;
41
42
  }
42
43
  var vAsObject = makeSureErrorObject(v);
43
44
 
44
- // 深度满了,或者不是对象或 Error,或者空对象(或数组),则不继续 loop
45
- if (depthFull || !_isPlainObject(vAsObject) || _isEmpty(vAsObject)) {
46
- result[scopedKey] = vAsObject;
45
+ // 不继续 loop
46
+ // 1. 深度满了
47
+ // 2. 不是对象,不是 Error
48
+ // 3. 空对象,或空数组
49
+ // 4. 命中 `pass` 规则
50
+ if (depthFull || !_isPlainObject(vAsObject) || _isEmpty(vAsObject) || pass && flattenTestPath(pathKey, pass)) {
51
+ result[scopedPathKey] = vAsObject;
47
52
  return;
48
53
  }
49
54
  loop(vAsObject, [].concat(_toConsumableArray(parentPaths), [k]));
@@ -1 +1 @@
1
- {"version":3,"file":"flatten-object.js","names":["_isEmpty","_isPlainObject","_isError","_forEach","convertErrorToPlain","flattenShouldIgnore","flattenObject","o","options","resolvedOptions","scope","_resolvedOptions$dept","depth","ignore","result","makeSureErrorObject","errorOrObject","loop","currentObj","parentPaths","depthFull","length","v","k","key","concat","_toConsumableArray","join","scopedKey","vAsObject"],"sources":["../../../src/util/flatten-object.ts"],"sourcesContent":["import _isEmpty from 'lodash/isEmpty';\nimport _isPlainObject from 'lodash/isPlainObject';\nimport _isError from 'lodash/isError';\nimport _forEach from 'lodash/forEach';\n\nimport type {\n ISlsFlattenOptions\n} from '../types';\n\nimport convertErrorToPlain from './convert-error-to-plain';\nimport flattenShouldIgnore from './flatten-should-ignore';\n\n/**\n * 有时候为了统计方便,需要把传入的对象展平,比如 error 对象,可能会展平成如下形状:\n *\n * ```\n * {\n * \"error.name\": \"..\",\n * \"error.message\": \"..\",\n * \"error.stack\": \"..\"\n * }\n * ```\n */\nexport default function flattenObject<T extends object>(o: T, options: string | ISlsFlattenOptions): Record<string, unknown> {\n const resolvedOptions = typeof options === 'string' ? {\n scope: options\n } : options;\n const {\n scope,\n depth = 5,\n ignore\n } = resolvedOptions;\n const result: Record<string, unknown> = {};\n \n function makeSureErrorObject(errorOrObject: object): object {\n return _isError(errorOrObject) ? convertErrorToPlain(errorOrObject) : errorOrObject;\n }\n \n function loop(currentObj: object, parentPaths: string[]): void {\n const depthFull = depth > 0 && parentPaths.length + 1 >= depth;\n \n _forEach(currentObj, (v: unknown, k: string) => {\n const key = [...parentPaths, k].join('.');\n const scopedKey = scope ? `${scope}.${key}` : key;\n \n // 可以忽略不重要的信息\n if (flattenShouldIgnore(ignore, key, k, v)) {\n return;\n }\n \n const vAsObject = makeSureErrorObject(v as object);\n \n // 深度满了,或者不是对象或 Error,或者空对象(或数组),则不继续 loop\n if (depthFull || !_isPlainObject(vAsObject) || _isEmpty(vAsObject)) {\n result[scopedKey] = vAsObject;\n \n return;\n }\n \n loop(vAsObject, [...parentPaths, k]);\n });\n }\n \n loop(makeSureErrorObject(o), []);\n \n return result;\n}"],"mappings":";AAAA,OAAOA,QAAQ,MAAM,gBAAgB;AACrC,OAAOC,cAAc,MAAM,sBAAsB;AACjD,OAAOC,QAAQ,MAAM,gBAAgB;AACrC,OAAOC,QAAQ,MAAM,gBAAgB;AAMrC,OAAOC,mBAAmB,MAAM,0BAA0B;AAC1D,OAAOC,mBAAmB,MAAM,yBAAyB;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CAAmBC,CAAI,EAAEC,OAAoC,EAA2B;EAC3H,IAAMC,eAAe,GAAG,OAAOD,OAAO,KAAK,QAAQ,GAAG;IACpDE,KAAK,EAAEF;EACT,CAAC,GAAGA,OAAO;EACX,IACEE,KAAK,GAGHD,eAAe,CAHjBC,KAAK;IAAAC,qBAAA,GAGHF,eAAe,CAFjBG,KAAK;IAALA,KAAK,GAAAD,qBAAA,cAAG,CAAC,GAAAA,qBAAA;IACTE,MAAM,GACJJ,eAAe,CADjBI,MAAM;EAER,IAAMC,MAA+B,GAAG,CAAC,CAAC;EAE1C,SAASC,mBAAmBA,CAACC,aAAqB,EAAU;IAC1D,OAAOd,QAAQ,CAACc,aAAa,CAAC,GAAGZ,mBAAmB,CAACY,aAAa,CAAC,GAAGA,aAAa;EACrF;EAEA,SAASC,IAAIA,CAACC,UAAkB,EAAEC,WAAqB,EAAQ;IAC7D,IAAMC,SAAS,GAAGR,KAAK,GAAG,CAAC,IAAIO,WAAW,CAACE,MAAM,GAAG,CAAC,IAAIT,KAAK;IAE9DT,QAAQ,CAACe,UAAU,EAAE,UAACI,CAAU,EAAEC,CAAS,EAAK;MAC9C,IAAMC,GAAG,GAAG,GAAAC,MAAA,CAAAC,kBAAA,CAAIP,WAAW,IAAEI,CAAC,GAAEI,IAAI,CAAC,GAAG,CAAC;MACzC,IAAMC,SAAS,GAAGlB,KAAK,MAAAe,MAAA,CAAMf,KAAK,OAAAe,MAAA,CAAID,GAAG,IAAKA,GAAG;;MAEjD;MACA,IAAInB,mBAAmB,CAACQ,MAAM,EAAEW,GAAG,EAAED,CAAC,EAAED,CAAC,CAAC,EAAE;QAC1C;MACF;MAEA,IAAMO,SAAS,GAAGd,mBAAmB,CAACO,CAAW,CAAC;;MAElD;MACA,IAAIF,SAAS,IAAI,CAACnB,cAAc,CAAC4B,SAAS,CAAC,IAAI7B,QAAQ,CAAC6B,SAAS,CAAC,EAAE;QAClEf,MAAM,CAACc,SAAS,CAAC,GAAGC,SAAS;QAE7B;MACF;MAEAZ,IAAI,CAACY,SAAS,KAAAJ,MAAA,CAAAC,kBAAA,CAAMP,WAAW,IAAEI,CAAC,EAAC,CAAC;IACtC,CAAC,CAAC;EACJ;EAEAN,IAAI,CAACF,mBAAmB,CAACR,CAAC,CAAC,EAAE,EAAE,CAAC;EAEhC,OAAOO,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"file":"flatten-object.js","names":["_isEmpty","_isPlainObject","_isError","_forEach","convertErrorToPlain","flattenTestPath","flattenObject","o","options","resolvedOptions","scope","_resolvedOptions$dept","depth","omit","pass","result","makeSureErrorObject","errorOrObject","loop","currentObj","parentPaths","depthFull","length","v","k","pathKey","concat","_toConsumableArray","join","scopedPathKey","test","vAsObject"],"sources":["../../../src/util/flatten-object.ts"],"sourcesContent":["import _isEmpty from 'lodash/isEmpty';\nimport _isPlainObject from 'lodash/isPlainObject';\nimport _isError from 'lodash/isError';\nimport _forEach from 'lodash/forEach';\n\nimport type {\n IFlattenOptions\n} from '../types';\n\nimport convertErrorToPlain from './convert-error-to-plain';\nimport flattenTestPath from './flatten-test-path';\n\n/**\n * 有时候为了统计方便,需要把传入的对象展平,比如 error 对象,可能会展平成如下形状:\n *\n * ```\n * {\n * \"error.name\": \"..\",\n * \"error.message\": \"..\",\n * \"error.stack\": \"..\"\n * }\n * ```\n */\nexport default function flattenObject<T extends object>(o: T, options: string | IFlattenOptions): Record<string, unknown> {\n const resolvedOptions = typeof options === 'string' ? {\n scope: options\n } : options;\n const {\n scope,\n depth = 5,\n omit,\n pass\n } = resolvedOptions;\n const result: Record<string, unknown> = {};\n \n function makeSureErrorObject(errorOrObject: object): object {\n return _isError(errorOrObject) ? convertErrorToPlain(errorOrObject) : errorOrObject;\n }\n \n function loop(currentObj: object, parentPaths: string[]): void {\n const depthFull = depth > 0 && parentPaths.length + 1 >= depth;\n \n _forEach(currentObj, (v: unknown, k: string) => {\n const pathKey = [...parentPaths, k].join('.');\n const scopedPathKey = scope ? `${scope}.${pathKey}` : pathKey;\n \n // 可以忽略不重要的信息,默认不记录 `_` 打头的所有数据\n if (/^_/.test(k) || (omit && flattenTestPath(pathKey, omit))) {\n return;\n }\n \n const vAsObject = makeSureErrorObject(v as object);\n \n // 不继续 loop:\n // 1. 深度满了\n // 2. 不是对象,不是 Error\n // 3. 空对象,或空数组\n // 4. 命中 `pass` 规则\n if (depthFull || !_isPlainObject(vAsObject) || _isEmpty(vAsObject) || (pass && flattenTestPath(pathKey, pass))) {\n result[scopedPathKey] = vAsObject;\n \n return;\n }\n \n loop(vAsObject, [...parentPaths, k]);\n });\n }\n \n loop(makeSureErrorObject(o), []);\n \n return result;\n}"],"mappings":";AAAA,OAAOA,QAAQ,MAAM,gBAAgB;AACrC,OAAOC,cAAc,MAAM,sBAAsB;AACjD,OAAOC,QAAQ,MAAM,gBAAgB;AACrC,OAAOC,QAAQ,MAAM,gBAAgB;AAMrC,OAAOC,mBAAmB,MAAM,0BAA0B;AAC1D,OAAOC,eAAe,MAAM,qBAAqB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,aAAaA,CAAmBC,CAAI,EAAEC,OAAiC,EAA2B;EACxH,IAAMC,eAAe,GAAG,OAAOD,OAAO,KAAK,QAAQ,GAAG;IACpDE,KAAK,EAAEF;EACT,CAAC,GAAGA,OAAO;EACX,IACEE,KAAK,GAIHD,eAAe,CAJjBC,KAAK;IAAAC,qBAAA,GAIHF,eAAe,CAHjBG,KAAK;IAALA,KAAK,GAAAD,qBAAA,cAAG,CAAC,GAAAA,qBAAA;IACTE,IAAI,GAEFJ,eAAe,CAFjBI,IAAI;IACJC,IAAI,GACFL,eAAe,CADjBK,IAAI;EAEN,IAAMC,MAA+B,GAAG,CAAC,CAAC;EAE1C,SAASC,mBAAmBA,CAACC,aAAqB,EAAU;IAC1D,OAAOf,QAAQ,CAACe,aAAa,CAAC,GAAGb,mBAAmB,CAACa,aAAa,CAAC,GAAGA,aAAa;EACrF;EAEA,SAASC,IAAIA,CAACC,UAAkB,EAAEC,WAAqB,EAAQ;IAC7D,IAAMC,SAAS,GAAGT,KAAK,GAAG,CAAC,IAAIQ,WAAW,CAACE,MAAM,GAAG,CAAC,IAAIV,KAAK;IAE9DT,QAAQ,CAACgB,UAAU,EAAE,UAACI,CAAU,EAAEC,CAAS,EAAK;MAC9C,IAAMC,OAAO,GAAG,GAAAC,MAAA,CAAAC,kBAAA,CAAIP,WAAW,IAAEI,CAAC,GAAEI,IAAI,CAAC,GAAG,CAAC;MAC7C,IAAMC,aAAa,GAAGnB,KAAK,MAAAgB,MAAA,CAAMhB,KAAK,OAAAgB,MAAA,CAAID,OAAO,IAAKA,OAAO;;MAE7D;MACA,IAAI,IAAI,CAACK,IAAI,CAACN,CAAC,CAAC,IAAKX,IAAI,IAAIR,eAAe,CAACoB,OAAO,EAAEZ,IAAI,CAAE,EAAE;QAC5D;MACF;MAEA,IAAMkB,SAAS,GAAGf,mBAAmB,CAACO,CAAW,CAAC;;MAElD;MACA;MACA;MACA;MACA;MACA,IAAIF,SAAS,IAAI,CAACpB,cAAc,CAAC8B,SAAS,CAAC,IAAI/B,QAAQ,CAAC+B,SAAS,CAAC,IAAKjB,IAAI,IAAIT,eAAe,CAACoB,OAAO,EAAEX,IAAI,CAAE,EAAE;QAC9GC,MAAM,CAACc,aAAa,CAAC,GAAGE,SAAS;QAEjC;MACF;MAEAb,IAAI,CAACa,SAAS,KAAAL,MAAA,CAAAC,kBAAA,CAAMP,WAAW,IAAEI,CAAC,EAAC,CAAC;IACtC,CAAC,CAAC;EACJ;EAEAN,IAAI,CAACF,mBAAmB,CAACT,CAAC,CAAC,EAAE,EAAE,CAAC;EAEhC,OAAOQ,MAAM;AACf","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ export default function flattenTestPath(path, tester) {
2
+ return (Array.isArray(tester) ? tester : [tester]).some(function (v) {
3
+ return typeof v === 'string' ? v === path : v.test(path);
4
+ });
5
+ }
6
+ //# sourceMappingURL=flatten-test-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatten-test-path.js","names":["flattenTestPath","path","tester","Array","isArray","some","v","test"],"sources":["../../../src/util/flatten-test-path.ts"],"sourcesContent":["import type {\n TFlattenPathTester\n} from '../types';\n\nexport default function flattenTestPath(path: string, tester: TFlattenPathTester): boolean {\n return (Array.isArray(tester) ? tester : [tester]).some(v => {\n return typeof v === 'string' ? v === path : v.test(path);\n });\n}"],"mappings":"AAIA,eAAe,SAASA,eAAeA,CAACC,IAAY,EAAEC,MAA0B,EAAW;EACzF,OAAO,CAACC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,GAAGA,MAAM,GAAG,CAACA,MAAM,CAAC,EAAEG,IAAI,CAAC,UAAAC,CAAC,EAAI;IAC3D,OAAO,OAAOA,CAAC,KAAK,QAAQ,GAAGA,CAAC,KAAKL,IAAI,GAAGK,CAAC,CAACC,IAAI,CAACN,IAAI,CAAC;EAC1D,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -6,5 +6,5 @@ export { default as convertErrorToPlain } from './convert-error-to-plain';
6
6
  export { default as resolveDefaultParams } from './resolve-default-params';
7
7
  export { default as createSlsLogQuick } from './create-sls-log-quick';
8
8
  export { default as mergeDefaultParams } from './merge-default-params';
9
- export { default as mergeShouldIgnore } from './merge-should-ignore';
9
+ export { default as mergeDontSend } from './merge-dont-send';
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","getSilentCountdown","getLogOnceKey","flattenObject","buildPostBody","convertErrorToPlain","resolveDefaultParams","createSlsLogQuick","mergeDefaultParams","mergeShouldIgnore"],"sources":["../../../src/util/index.ts"],"sourcesContent":["export { default as getSilentCountdown } from './get-silent-countdown';\nexport { default as getLogOnceKey } from './get-log-once-key';\nexport { default as flattenObject } from './flatten-object';\nexport { default as buildPostBody } from './build-post-body';\nexport { default as convertErrorToPlain } from './convert-error-to-plain';\nexport { default as resolveDefaultParams } from './resolve-default-params';\nexport { default as createSlsLogQuick } from './create-sls-log-quick';\nexport { default as mergeDefaultParams } from './merge-default-params';\nexport { default as mergeShouldIgnore } from './merge-should-ignore';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,kBAAkB,QAAQ,wBAAwB;AACtE,SAASD,OAAO,IAAIE,aAAa,QAAQ,oBAAoB;AAC7D,SAASF,OAAO,IAAIG,aAAa,QAAQ,kBAAkB;AAC3D,SAASH,OAAO,IAAII,aAAa,QAAQ,mBAAmB;AAC5D,SAASJ,OAAO,IAAIK,mBAAmB,QAAQ,0BAA0B;AACzE,SAASL,OAAO,IAAIM,oBAAoB,QAAQ,0BAA0B;AAC1E,SAASN,OAAO,IAAIO,iBAAiB,QAAQ,wBAAwB;AACrE,SAASP,OAAO,IAAIQ,kBAAkB,QAAQ,wBAAwB;AACtE,SAASR,OAAO,IAAIS,iBAAiB,QAAQ,uBAAuB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","getSilentCountdown","getLogOnceKey","flattenObject","buildPostBody","convertErrorToPlain","resolveDefaultParams","createSlsLogQuick","mergeDefaultParams","mergeDontSend"],"sources":["../../../src/util/index.ts"],"sourcesContent":["export { default as getSilentCountdown } from './get-silent-countdown';\nexport { default as getLogOnceKey } from './get-log-once-key';\nexport { default as flattenObject } from './flatten-object';\nexport { default as buildPostBody } from './build-post-body';\nexport { default as convertErrorToPlain } from './convert-error-to-plain';\nexport { default as resolveDefaultParams } from './resolve-default-params';\nexport { default as createSlsLogQuick } from './create-sls-log-quick';\nexport { default as mergeDefaultParams } from './merge-default-params';\nexport { default as mergeDontSend } from './merge-dont-send';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,kBAAkB,QAAQ,wBAAwB;AACtE,SAASD,OAAO,IAAIE,aAAa,QAAQ,oBAAoB;AAC7D,SAASF,OAAO,IAAIG,aAAa,QAAQ,kBAAkB;AAC3D,SAASH,OAAO,IAAII,aAAa,QAAQ,mBAAmB;AAC5D,SAASJ,OAAO,IAAIK,mBAAmB,QAAQ,0BAA0B;AACzE,SAASL,OAAO,IAAIM,oBAAoB,QAAQ,0BAA0B;AAC1E,SAASN,OAAO,IAAIO,iBAAiB,QAAQ,wBAAwB;AACrE,SAASP,OAAO,IAAIQ,kBAAkB,QAAQ,wBAAwB;AACtE,SAASR,OAAO,IAAIS,aAAa,QAAQ,mBAAmB","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ export default function mergeDontSend(factoryDontSend, dontSend) {
2
+ if (!factoryDontSend || !dontSend) {
3
+ return dontSend || factoryDontSend;
4
+ }
5
+ return function () {
6
+ return factoryDontSend() || dontSend();
7
+ };
8
+ }
9
+ //# sourceMappingURL=merge-dont-send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-dont-send.js","names":["mergeDontSend","factoryDontSend","dontSend"],"sources":["../../../src/util/merge-dont-send.ts"],"sourcesContent":["import type {\n IDontSend\n} from '../types';\n\nexport default function mergeDontSend(factoryDontSend?: IDontSend, dontSend?: IDontSend): IDontSend | undefined {\n if (!factoryDontSend || !dontSend) {\n return dontSend || factoryDontSend;\n }\n \n return (): boolean | void => factoryDontSend() || dontSend();\n}"],"mappings":"AAIA,eAAe,SAASA,aAAaA,CAACC,eAA2B,EAAEC,QAAoB,EAAyB;EAC9G,IAAI,CAACD,eAAe,IAAI,CAACC,QAAQ,EAAE;IACjC,OAAOA,QAAQ,IAAID,eAAe;EACpC;EAEA,OAAO;IAAA,OAAsBA,eAAe,CAAC,CAAC,IAAIC,QAAQ,CAAC,CAAC;EAAA;AAC9D","ignoreList":[]}
@@ -11,5 +11,5 @@ export default class SlsLogger {
11
11
  /**
12
12
  * 检查是否需要忽略
13
13
  */
14
- private shouldIgnore;
14
+ private dontSend;
15
15
  }
@@ -4,4 +4,4 @@ import { ILogSender, ICreateLogger, IGenerateCreateLoggerOptions } from '../type
4
4
  *
5
5
  * 一般不会在项目中直接使用,而是用来写可复用 npm 包。
6
6
  */
7
- export default function generateCreateLogger(sender: ILogSender, { defaultParams: factoryDefaultParams, shouldIgnore: factoryShouldIgnore }: IGenerateCreateLoggerOptions): ICreateLogger;
7
+ export default function generateCreateLogger(sender: ILogSender, { defaultParams: factoryDefaultParams, dontSend: factoryDontSend }: IGenerateCreateLoggerOptions): ICreateLogger;
@@ -2,7 +2,7 @@ export interface IDefaultParams {
2
2
  (): Record<string, unknown>;
3
3
  }
4
4
  export type TDefaultParams = Record<string, unknown> | IDefaultParams;
5
- export interface IShouldIgnore {
5
+ export interface IDontSend {
6
6
  (): void | boolean;
7
7
  }
8
8
  /**
@@ -11,17 +11,7 @@ export interface IShouldIgnore {
11
11
  export interface ILogSender {
12
12
  (trackUrl: string, body: string, headers: Record<string, string>): void;
13
13
  }
14
- /**
15
- * 用于在 flattenObject 的时候忽略部分属性
16
- *
17
- * - 默认忽略所有以 `_` 为前缀的属性
18
- * - `string` 等于 `key` 则忽略
19
- * - `string[]` 包含 `key` 则忽略
20
- * - 方法,可用 `path` 进行判断(注意这里的 `path` 和 `scope` 没有关系)
21
- */
22
- export type TFlattenIgnore = string | string[] | {
23
- (path: string, key: string, value: unknown): boolean;
24
- };
14
+ export type TFlattenPathTester = string | RegExp | Array<string | RegExp>;
25
15
  export interface ISlsLogPayload {
26
16
  __topic__: string;
27
17
  [k: string]: unknown;
@@ -1,4 +1,4 @@
1
- import { TDefaultParams, IShouldIgnore, TFlattenIgnore } from './common';
1
+ import { TDefaultParams, TFlattenPathTester, IDontSend } from './common';
2
2
  export interface ISlsPipeOptions {
3
3
  trackUrl: string;
4
4
  /**
@@ -52,23 +52,30 @@ export interface ICreateLoggerOptions extends Partial<ISlsPipeOptions> {
52
52
  */
53
53
  defaultParams?: TDefaultParams;
54
54
  /**
55
- * 上报之前进行判断是否继续,返回 false 以阻止上报
55
+ * 上报之前进行判断是否继续,返回 true 以阻止上报
56
56
  *
57
- * 在某些场景下需要禁用日志上报功能,比如国外禁止将日志上报到国内的 logstore
57
+ * 在某些场景下需要禁用日志上报功能,比如可能禁止日志跨境
58
58
  */
59
- shouldIgnore?: IShouldIgnore;
59
+ dontSend?: IDontSend;
60
60
  }
61
61
  /**
62
62
  * 生成 `createLogger` 方法的工厂方法的 options,用于制定工厂级别的参数的忽略方法
63
63
  */
64
64
  export interface IGenerateCreateLoggerOptions {
65
65
  defaultParams?: TDefaultParams;
66
- shouldIgnore?: IShouldIgnore;
66
+ dontSend?: IDontSend;
67
67
  }
68
- export interface ISlsFlattenOptions {
68
+ export interface IFlattenOptions {
69
69
  scope?: string;
70
70
  depth?: number;
71
- ignore?: TFlattenIgnore;
71
+ /**
72
+ * 将属性从结果中剔除
73
+ */
74
+ omit?: TFlattenPathTester;
75
+ /**
76
+ * 将属性直接输出,提前结束该属性深度
77
+ */
78
+ pass?: TFlattenPathTester;
72
79
  }
73
80
  /**
74
81
  * SLS 日志方法 Options
@@ -110,7 +117,7 @@ export interface ISlsLogOptions {
110
117
  /**
111
118
  * 是否对 info 进行 flatten 操作
112
119
  */
113
- flatten?: boolean | string | ISlsFlattenOptions;
120
+ flatten?: boolean | string | IFlattenOptions;
114
121
  /**
115
122
  * 为日志增加默认参数 `_GROUP`,可用于数据分析分组
116
123
  */
@@ -1,4 +1,4 @@
1
- import type { ISlsFlattenOptions } from '../types';
1
+ import type { IFlattenOptions } from '../types';
2
2
  /**
3
3
  * 有时候为了统计方便,需要把传入的对象展平,比如 error 对象,可能会展平成如下形状:
4
4
  *
@@ -10,4 +10,4 @@ import type { ISlsFlattenOptions } from '../types';
10
10
  * }
11
11
  * ```
12
12
  */
13
- export default function flattenObject<T extends object>(o: T, options: string | ISlsFlattenOptions): Record<string, unknown>;
13
+ export default function flattenObject<T extends object>(o: T, options: string | IFlattenOptions): Record<string, unknown>;
@@ -0,0 +1,2 @@
1
+ import type { TFlattenPathTester } from '../types';
2
+ export default function flattenTestPath(path: string, tester: TFlattenPathTester): boolean;
@@ -6,4 +6,4 @@ export { default as convertErrorToPlain } from './convert-error-to-plain';
6
6
  export { default as resolveDefaultParams } from './resolve-default-params';
7
7
  export { default as createSlsLogQuick } from './create-sls-log-quick';
8
8
  export { default as mergeDefaultParams } from './merge-default-params';
9
- export { default as mergeShouldIgnore } from './merge-should-ignore';
9
+ export { default as mergeDontSend } from './merge-dont-send';
@@ -0,0 +1,2 @@
1
+ import type { IDontSend } from '../types';
2
+ export default function mergeDontSend(factoryDontSend?: IDontSend, dontSend?: IDontSend): IDontSend | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kcuf/sls-logger-base",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Aliyun SLS logger without transport implementation.",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@
30
30
  "@types/lodash": "^4.17.7",
31
31
  "@vitest/coverage-v8": "^2.1.1",
32
32
  "fetch-mock": "^11.1.4",
33
- "jsdom": "^25.0.0",
33
+ "jsdom": "^25.0.1",
34
34
  "rimraf": "^6.0.1",
35
35
  "typescript": "^5.6.2",
36
36
  "vitest": "^2.1.1",