@zxhy-npm/send-sls-logger 1.1.3 → 1.1.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.
package/lib/trace.d.ts CHANGED
@@ -1 +1,14 @@
1
1
  export declare function initTrace(info: (...data: any[]) => any): void;
2
+ export declare const isPC: boolean;
3
+ export declare const browserInfo: string;
4
+ export declare const mobileInfo: string;
5
+ /** 设备型号
6
+ * pc: MacOS 10.15.7-(Chrome-131.0)
7
+ * mobile: iPhone iOS 16.6-Safari-16.6
8
+ * */
9
+ export declare const deviceInfo: string;
10
+ /** 地址来源 */
11
+ export declare const referUrl: {
12
+ referUrl: string;
13
+ referSet: Set<string>;
14
+ };
package/lib/trace.js CHANGED
@@ -39,3 +39,118 @@ export function initTrace(info) {
39
39
  };
40
40
  window.addEventListener('click', clickHandler, true);
41
41
  }
42
+ export const isPC = !/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
43
+ export const browserInfo = (() => {
44
+ const ua = navigator.userAgent;
45
+ let browserName = '';
46
+ let browserVersion = '';
47
+ let osName = '';
48
+ let osVersion = '';
49
+ // 检测操作系统
50
+ if (ua.indexOf('Win') > -1) {
51
+ osName = 'Windows';
52
+ }
53
+ else if (ua.indexOf('Mac') > -1) {
54
+ osName = 'MacOS';
55
+ // 匹配 Mac OS X 10_15_7 或 Mac OS X 13_1_0 这样的格式
56
+ const macVersion = ua.match(/Mac OS X (\d+[._]\d+[._]\d+)/);
57
+ if (macVersion) {
58
+ osVersion = macVersion[1].replace(/_/g, '.');
59
+ }
60
+ }
61
+ else if (ua.indexOf('Linux') > -1) {
62
+ osName = 'Linux';
63
+ }
64
+ else if (ua.indexOf('X11') > -1) {
65
+ osName = 'Unix';
66
+ }
67
+ // 检测浏览器
68
+ if (ua.indexOf('Chrome') > -1) {
69
+ browserName = 'Chrome';
70
+ browserVersion = ua.match(/Chrome\/(\d+\.\d+)/)?.[1] || '';
71
+ }
72
+ else if (ua.indexOf('Firefox') > -1) {
73
+ browserName = 'Firefox';
74
+ browserVersion = ua.match(/Firefox\/(\d+\.\d+)/)?.[1] || '';
75
+ }
76
+ else if (ua.indexOf('Safari') > -1) {
77
+ browserName = 'Safari';
78
+ browserVersion = ua.match(/Version\/(\d+\.\d+)/)?.[1] || '';
79
+ }
80
+ else if (ua.indexOf('MSIE') > -1 || ua.indexOf('Trident') > -1) {
81
+ browserName = 'IE';
82
+ browserVersion = ua.match(/(MSIE |rv:)(\d+\.\d+)/)?.[2] || '';
83
+ }
84
+ return `${osName}${osVersion ? ` ${osVersion}` : ''}-(${browserName}-${browserVersion})`;
85
+ })();
86
+ export const mobileInfo = (() => {
87
+ const ua = navigator.userAgent;
88
+ let deviceModel = '';
89
+ let browserName = '';
90
+ let browserVersion = '';
91
+ // 检测设备型号和版本
92
+ if (ua.indexOf('iPhone') > -1) {
93
+ deviceModel = 'iPhone';
94
+ // 匹配 iOS 版本
95
+ const match = ua.match(/OS (\d+_\d+(_\d+)?)/);
96
+ if (match) {
97
+ deviceModel += ` iOS ${match[1].replace(/_/g, '.')}`;
98
+ }
99
+ }
100
+ else if (ua.indexOf('iPad') > -1) {
101
+ deviceModel = 'iPad';
102
+ const match = ua.match(/OS (\d+_\d+(_\d+)?)/);
103
+ if (match) {
104
+ deviceModel += ` iOS ${match[1].replace(/_/g, '.')}`;
105
+ }
106
+ }
107
+ else if (ua.indexOf('Android') > -1) {
108
+ // 匹配安卓版本和设备型号
109
+ const androidVersion = ua.match(/Android (\d+(\.\d+)+)/);
110
+ const model = ua.match(/\(Linux; Android [\d.]+; (.*?)\)/);
111
+ deviceModel = model ? model[1] : 'Android';
112
+ if (androidVersion) {
113
+ deviceModel += ` Android ${androidVersion[1]}`;
114
+ }
115
+ }
116
+ // 检测移动浏览器及版本
117
+ if (ua.indexOf('MicroMessenger') > -1) {
118
+ browserName = 'WeChat';
119
+ const match = ua.match(/MicroMessenger\/([\d.]+)/);
120
+ browserVersion = match ? match[1] : '';
121
+ }
122
+ else if (ua.indexOf('AlipayClient') > -1) {
123
+ browserName = 'Alipay';
124
+ const match = ua.match(/AlipayClient\/([\d.]+)/);
125
+ browserVersion = match ? match[1] : '';
126
+ }
127
+ else if (ua.indexOf('QQ') > -1) {
128
+ browserName = 'QQ';
129
+ const match = ua.match(/QQ\/([\d.]+)/);
130
+ browserVersion = match ? match[1] : '';
131
+ }
132
+ else if (ua.indexOf('UCBrowser') > -1) {
133
+ browserName = 'UC';
134
+ const match = ua.match(/UCBrowser\/([\d.]+)/);
135
+ browserVersion = match ? match[1] : '';
136
+ }
137
+ else if (ua.indexOf('Safari') > -1) {
138
+ browserName = 'Safari';
139
+ const match = ua.match(/Version\/([\d.]+)/);
140
+ browserVersion = match ? match[1] : '';
141
+ }
142
+ return `${deviceModel}-${browserName}${browserVersion ? `-${browserVersion}` : ''}`;
143
+ })();
144
+ /** 设备型号
145
+ * pc: MacOS 10.15.7-(Chrome-131.0)
146
+ * mobile: iPhone iOS 16.6-Safari-16.6
147
+ * */
148
+ export const deviceInfo = isPC ? browserInfo : mobileInfo;
149
+ /** 地址来源 */
150
+ export const referUrl = new Proxy({ referUrl: '', referSet: new Set([document.referrer]) }, {
151
+ get(target, key) {
152
+ const result = Array.from(target.referSet)[target.referSet.size - 1];
153
+ target.referSet.add(location.href);
154
+ return result;
155
+ },
156
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zxhy-npm/send-sls-logger",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "阿里云sls的logger发送",
5
5
  "scripts": {
6
6
  "build": "rm -rf lib && tsc"
package/readme.md CHANGED
@@ -50,3 +50,5 @@ miniLog.info({ msg: "这是一条默认日志" });
50
50
  更新内容: 增加了 initTrace 的方法, 只支持PC项目,监听 dom的进入试图,以及点击事件,需要在dom增加 data-module、data-click 对应的属性
51
51
  1.1.2 ---------- 12/16/2024, 3:45:22 PM
52
52
  更新内容: 会自动删除 预发送数据 中的 undefined 与 null
53
+ 1.1.4 ---------- 1/10/2025, 11:35:16 AM
54
+ 更新内容: trace 导出deviceInfo 以及 referUrl