UNPKG

@lx-frontend/multi-track-shared

Version:

sls 日志生成工具库

134 lines 7.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateCustomErrorEvent = exports.generateCustomUserEvent = exports.generateLifecycleEvent = exports.generateHttpEvent = exports.generateApiCallEvent = exports.generateClickEvent = exports.generateBaseEvent = exports.getCurPage = exports.generateId = void 0; var tslib_1 = require("tslib"); var nextId = 1; // 用于生成唯一ID /** * 生成唯一ID,由于不同事件触发都是异步的,用于后续上报前进行排序,保证上报顺序 * @returns */ var generateId = function () { var timestamp = Date.now(); return "".concat(timestamp, "_").concat(nextId++); }; exports.generateId = generateId; /** * 获取当前页面路径,小程序 通过 getCurrentPages,网页通过 location 对象 * @returns */ var getCurPage = function () { var _a, _b; var curPage = ''; if (typeof getCurrentPages !== 'undefined') { var pages = getCurrentPages(); var page = pages[pages.length - 1]; // page直接log里面有$page,当时访问的时候又访问不到,疑似是后面才自动加上去的。page?.route 兜底 curPage = (page === null || page === void 0 ? void 0 : page.$taroPath) || ((_a = page === null || page === void 0 ? void 0 : page.$page) === null || _a === void 0 ? void 0 : _a.fullPath) || (page === null || page === void 0 ? void 0 : page.route) || ''; } else { curPage = ((_b = window === null || window === void 0 ? void 0 : window.location) === null || _b === void 0 ? void 0 : _b.href) || ''; } return curPage; }; exports.getCurPage = getCurPage; /** * 生成基础信息 * @param eventType 事件类型 * @param eventLevel 事件级别 * @returns */ var generateBaseEvent = function (eventType, eventLevel) { var _a, _b; if (eventLevel === void 0) { eventLevel = 'info'; } return { eventId: (0, exports.generateId)(), eventType: eventType, eventLevel: eventLevel, stime: Date.now(), pageUrl: ((_b = (_a = (0, exports.getCurPage)()) === null || _a === void 0 ? void 0 : _a.split('?')) === null || _b === void 0 ? void 0 : _b[0]) || 'home', fullUrl: (0, exports.getCurPage)() || 'home', }; }; exports.generateBaseEvent = generateBaseEvent; /** * 生成点击事件 * @param options.eventLevel 事件级别 * @param options.elementText 元素文本 * @param options.elementName 元素名称 * @param options.elementProps 元素属性 * @param options.elementDetail 元素详情 */ var generateClickEvent = function (options) { var eventLevel = options.eventLevel, elementText = options.elementText, elementName = options.elementName, elementProps = options.elementProps, elementDetail = options.elementDetail; return tslib_1.__assign(tslib_1.__assign({}, (0, exports.generateBaseEvent)('click', eventLevel)), { elementText: elementText, elementName: elementName, elementProps: elementProps, elementDetail: elementDetail }); }; exports.generateClickEvent = generateClickEvent; /** * 生成 API 信息 * @param options.eventLevel 事件级别 * @param options.apiBaseInfo 基础信息 * @param options.apiName API 名称 * @param options.apiArgs API 参数 * @param options.apiStatus API 状态 * @param options.apiResponse API 响应 */ var generateApiCallEvent = function (options) { var eventLevel = options.eventLevel, apiBaseInfo = options.apiBaseInfo, apiName = options.apiName, apiArgs = options.apiArgs, apiStatus = options.apiStatus, apiResponse = options.apiResponse; var etime = Date.now(); return tslib_1.__assign(tslib_1.__assign({}, apiBaseInfo), { eventLevel: eventLevel, eventType: 'api', etime: etime, apiName: apiName, apiArgs: JSON.stringify(apiArgs), apiStatus: apiStatus, apiResponse: JSON.stringify(apiResponse), duration: etime - apiBaseInfo.stime }); }; exports.generateApiCallEvent = generateApiCallEvent; /** * 生成 HTTP 信息 * @param options.eventLevel 事件级别 * @param options.httpBaseInfo 基础信息 * @param options.otherOptions 其他选项 * @param options.response 响应 */ var generateHttpEvent = function (options) { var eventLevel = options.eventLevel, httpBaseInfo = options.httpBaseInfo, otherOptions = options.otherOptions, response = options.response; // 来自于微信 request 等网络api // https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html // TODO: 需要考虑其他网络api,比如 downloadFile、uploadFile 等 var _a = otherOptions || {}, _b = _a.method, method = _b === void 0 ? 'GET' : _b, _c = _a.url, requestUrl = _c === void 0 ? '' : _c, _d = _a.data, params = _d === void 0 ? {} : _d, _e = _a.header, header = _e === void 0 ? {} : _e, _f = _a.timeout, timeout = _f === void 0 ? 0 : _f; var _g = response || {}, _h = _g.statusCode, statusCode = _h === void 0 ? 0 : _h, _j = _g.data, responseData = _j === void 0 ? {} : _j; var etime = Date.now(); return tslib_1.__assign(tslib_1.__assign({}, httpBaseInfo), { eventLevel: eventLevel, eventType: 'http', method: method, requestUrl: requestUrl, params: JSON.stringify(params), headers: JSON.stringify(header), body: JSON.stringify(responseData), statusCode: statusCode, etime: etime, timeout: timeout, duration: etime - httpBaseInfo.stime }); }; exports.generateHttpEvent = generateHttpEvent; /** * 生成生命周期事件 * @param options.eventLevel 事件级别 * @param options.lifecycleStage 生命周期阶段 * @param options.lifecycleOption 生命周期选项 */ var generateLifecycleEvent = function (options) { var eventLevel = options.eventLevel, lifecycleStage = options.lifecycleStage, lifecycleOption = options.lifecycleOption; return tslib_1.__assign(tslib_1.__assign({}, (0, exports.generateBaseEvent)('lifecycle', eventLevel)), { lifecycleStage: lifecycleStage, lifecycleOption: lifecycleOption }); }; exports.generateLifecycleEvent = generateLifecycleEvent; /** * 生成自定义事件 * @param options.eventLevel 事件级别 * @param options.customName 自定义名称 * @param options.customData 自定义数据 */ var generateCustomUserEvent = function (options) { var eventLevel = options.eventLevel, customName = options.customName, customData = options.customData; return tslib_1.__assign(tslib_1.__assign({}, (0, exports.generateBaseEvent)('custom', eventLevel)), { customName: customName, customData: customData }); }; exports.generateCustomUserEvent = generateCustomUserEvent; /** * 生成错误事件 * @param options.eventLevel 事件级别 * @param options.errType 错误类型 * @param options.errMsg 错误消息 * @param options.stackTrace 堆栈跟踪 * @param options.errExtraData 错误额外数据 */ var generateCustomErrorEvent = function (options) { var eventLevel = options.eventLevel, errType = options.errType, errMsg = options.errMsg, stackTrace = options.stackTrace, errExtraData = options.errExtraData; return tslib_1.__assign(tslib_1.__assign({}, (0, exports.generateBaseEvent)('error', eventLevel)), { errType: errType, errMsg: errMsg, stackTrace: stackTrace, errExtraData: errExtraData }); }; exports.generateCustomErrorEvent = generateCustomErrorEvent; //# sourceMappingURL=helper.js.map