@fle-sdk/event-tracking-web 1.0.5 → 1.1.0
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/README.md +402 -1
- package/lib/index.ems.js +1 -1
- package/lib/index.ems.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/types/index.d.ts +105 -0
- package/lib/types/tools.d.ts +112 -0
- package/lib/types/type.d.ts +186 -0
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,3 +1,404 @@
|
|
|
1
1
|
# @fle.sdk/event-tracking-web
|
|
2
|
+
> **构建用户数据体系,让用户行为数据发挥深远的价值。**
|
|
2
3
|
|
|
3
|
-
>
|
|
4
|
+
<a name="hunDt"></a>
|
|
5
|
+
## 前言
|
|
6
|
+
**WEB数据埋点sdk,开始之前请确保了解埋点的架构和基础知识**
|
|
7
|
+
> 埋点中比较重要的组成部分就是每个事件的 key,注意的是 key 至少由两部分组成。
|
|
8
|
+
> 完整的 key 由这几部分组成:appkey.pagekey.partkey 通过“.”来分割
|
|
9
|
+
|
|
10
|
+
- appkey:APP应用唯一标识
|
|
11
|
+
- pagekey:页面唯一标识,默认取当前路由
|
|
12
|
+
- partkey:控件/自定义事件的唯一标识,当是控件触发且没有partkey时,会取当前控件的 id名、class类名、dom节点名称
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
<a name="Install"></a>
|
|
16
|
+
## 一、下载
|
|
17
|
+
```jsx
|
|
18
|
+
// npm
|
|
19
|
+
npm install @fle-sdk/event-tracking-web --save-dev
|
|
20
|
+
|
|
21
|
+
// yarn
|
|
22
|
+
yarn add @fle-sdk/event-tracking-web
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
<a name="uenOv"></a>
|
|
27
|
+
## 二、全埋点
|
|
28
|
+
> 全埋点包括三种事件:Web 页面浏览、Web 元素点击、Web 页面留存时长,对应的配置如下:
|
|
29
|
+
|
|
30
|
+
```jsx
|
|
31
|
+
// 初始化
|
|
32
|
+
WebTracking.init({
|
|
33
|
+
appKey: "218844",
|
|
34
|
+
showLog: true,
|
|
35
|
+
autoTrack: true, // 设置该属性之后,SDK 就会自动收集页面浏览事件
|
|
36
|
+
isTrackSinglePage: true,
|
|
37
|
+
contentType: "application/json",
|
|
38
|
+
serverUrl: "https://xxx/push",
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
<a name="yw2Ck"></a>
|
|
42
|
+
###
|
|
43
|
+
<a name="LTcZG"></a>
|
|
44
|
+
### 2.1 元素点击
|
|
45
|
+
> 元素的点击事件上报 attr 属性中必须含有 **data-part-key** ,否则会被过滤。
|
|
46
|
+
|
|
47
|
+
```jsx
|
|
48
|
+
// 对充值按钮的点击次数进行统计
|
|
49
|
+
<button data-part-key="recharge_btn" data-desc="显示充值弹窗">
|
|
50
|
+
充值
|
|
51
|
+
</button>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
<br />
|
|
55
|
+
|
|
56
|
+
<a name="aNxuy"></a>
|
|
57
|
+
### 2.2 全埋点参数示例
|
|
58
|
+
> 全埋点三种类型的上报参数示例,建议都了解一下
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"desc": "Web 浏览页面",
|
|
63
|
+
"event": "PageView",
|
|
64
|
+
"appKey": "218844",
|
|
65
|
+
"siteId": "",
|
|
66
|
+
"itemKey": "218844.app_other",
|
|
67
|
+
"requestTime": 1638456820316,
|
|
68
|
+
"deviceId": "f9e3f35a6371f369a2c9f21c48dcabe8",
|
|
69
|
+
"privateParamMap": {
|
|
70
|
+
"currentUrl": "http://localhost:9999/app/other",
|
|
71
|
+
"targetUrl": null,
|
|
72
|
+
"sdkVersion": "1.1.0",
|
|
73
|
+
"pageWidth": 742,
|
|
74
|
+
"pageHeight": 867,
|
|
75
|
+
"screenWidth": 1680,
|
|
76
|
+
"screenHeight": 1050,
|
|
77
|
+
"systemsInfo": {
|
|
78
|
+
"language": "zh-CN",
|
|
79
|
+
"platform": "pc",
|
|
80
|
+
"client": "Mac, MacOS 10.15.7",
|
|
81
|
+
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36",
|
|
82
|
+
"navigationStart": 1638456820099,
|
|
83
|
+
"navigation": "1ms",
|
|
84
|
+
"dns": "0ms",
|
|
85
|
+
"tcp": "0ms",
|
|
86
|
+
"request": "2ms",
|
|
87
|
+
"response": "1ms"
|
|
88
|
+
},
|
|
89
|
+
"urlParams": {},
|
|
90
|
+
"userInfo": {
|
|
91
|
+
"userId": 20211232232123
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
{
|
|
97
|
+
"desc": "Web 元素点击",
|
|
98
|
+
"event": "WebClick",
|
|
99
|
+
"appKey": "218844",
|
|
100
|
+
"siteId": "",
|
|
101
|
+
"itemKey": "218844.main.h1",
|
|
102
|
+
"requestTime": 1638460476808,
|
|
103
|
+
"deviceId": "f9e3f35a6371f369a2c9f21c48dcabe8",
|
|
104
|
+
"privateParamMap": {
|
|
105
|
+
"position": [
|
|
106
|
+
126,
|
|
107
|
+
87
|
|
108
|
+
],
|
|
109
|
+
"targetEle": {
|
|
110
|
+
"id": "",
|
|
111
|
+
"nodeName": "H1",
|
|
112
|
+
"className": ""
|
|
113
|
+
},
|
|
114
|
+
"pointerType": "mouse",
|
|
115
|
+
"currentUrl": "http://localhost:9999/main?a=1",
|
|
116
|
+
"elementSelector": "#root > div:nth-of-type(1) > div:nth-of-type(1) > h1:nth-of-type(1)",
|
|
117
|
+
"sdkVersion": "1.1.0",
|
|
118
|
+
"pageWidth": 742,
|
|
119
|
+
"pageHeight": 867,
|
|
120
|
+
"screenWidth": 1680,
|
|
121
|
+
"screenHeight": 1050,
|
|
122
|
+
"systemsInfo": {
|
|
123
|
+
"language": "zh-CN",
|
|
124
|
+
"platform": "pc",
|
|
125
|
+
"client": "Mac, MacOS 10.15.7",
|
|
126
|
+
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36",
|
|
127
|
+
"navigationStart": 1638456820099,
|
|
128
|
+
"navigation": "1ms",
|
|
129
|
+
"dns": "0ms",
|
|
130
|
+
"tcp": "0ms",
|
|
131
|
+
"request": "2ms",
|
|
132
|
+
"response": "1ms",
|
|
133
|
+
"domComplete (domLoaded)": "201ms (186ms)",
|
|
134
|
+
"loadEvent": "1ms",
|
|
135
|
+
"total (DOM)": "218ms (217ms)"
|
|
136
|
+
},
|
|
137
|
+
"urlParams": {
|
|
138
|
+
"a": "1"
|
|
139
|
+
},
|
|
140
|
+
"userInfo": {
|
|
141
|
+
"userId": 20211232232123
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
{
|
|
147
|
+
"desc": "Web 页面浏览时长",
|
|
148
|
+
"event": "PageRetained",
|
|
149
|
+
"appKey": "218844",
|
|
150
|
+
"siteId": "",
|
|
151
|
+
"itemKey": "218844.app_other",
|
|
152
|
+
"requestTime": 1638460554657,
|
|
153
|
+
"deviceId": "f9e3f35a6371f369a2c9f21c48dcabe8",
|
|
154
|
+
"privateParamMap": {
|
|
155
|
+
"sdkVersion": "1.1.0",
|
|
156
|
+
"pageWidth": 742,
|
|
157
|
+
"pageHeight": 867,
|
|
158
|
+
"screenWidth": 1680,
|
|
159
|
+
"screenHeight": 1050,
|
|
160
|
+
"currentUrl": "http://localhost:9999/app/other",
|
|
161
|
+
"systemsInfo": {
|
|
162
|
+
"language": "zh-CN",
|
|
163
|
+
"platform": "pc",
|
|
164
|
+
"client": "Mac, MacOS 10.15.7",
|
|
165
|
+
"ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36",
|
|
166
|
+
"navigationStart": 1638456820099,
|
|
167
|
+
"navigation": "1ms",
|
|
168
|
+
"dns": "0ms",
|
|
169
|
+
"tcp": "0ms",
|
|
170
|
+
"request": "2ms",
|
|
171
|
+
"response": "1ms",
|
|
172
|
+
"domComplete (domLoaded)": "201ms (186ms)",
|
|
173
|
+
"loadEvent": "1ms",
|
|
174
|
+
"total (DOM)": "218ms (217ms)"
|
|
175
|
+
},
|
|
176
|
+
"urlParams": {},
|
|
177
|
+
"userInfo": {
|
|
178
|
+
"userId": 20211232232123
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"retainedStartTime": 1638460451953
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
<br />
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
<a name="95185770"></a>
|
|
193
|
+
## API
|
|
194
|
+
WebTracking
|
|
195
|
+
|
|
196
|
+
- init() ---初始化
|
|
197
|
+
- preset() ---配置全局参数(注意:如果配置的全局属性初始化已配置,将覆盖。)
|
|
198
|
+
- login() ---用户登录
|
|
199
|
+
- track() ---自定义代码埋点上报
|
|
200
|
+
- getDeviceId() ---获取设备唯一标识
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
<a name="WebTracking.init"></a>
|
|
205
|
+
### Init
|
|
206
|
+
<a name="Params"></a>
|
|
207
|
+
#### 参数
|
|
208
|
+
| 参数名 | type | 描述 | 是否必填 | 默认值 |
|
|
209
|
+
| --- | --- | --- | --- | --- |
|
|
210
|
+
| appKey | string | 应用唯一标识(由接口生成) | 是 | - |
|
|
211
|
+
| serverUrl | string | 数据接收地址 | 是 | - |
|
|
212
|
+
| autoTrack | boolean | 是否开启全埋点(指的是:页面浏览、元素点击事件自动上报) | 否 | false |
|
|
213
|
+
| showLog | boolean | 是否在网页控制台打印发送的数据 | 否 | false |
|
|
214
|
+
| useClientTime | boolean | 是否使用客户端系统时间 | 否 | true |
|
|
215
|
+
| sendTimeout | number | 接口发送超时时长,超过该时长未发送成功将强制取消 | 否 | 3000 |
|
|
216
|
+
| isTrackSinglePage | boolean | 是否采集单页面应用的路由变化 | 否 | false |
|
|
217
|
+
| siteId | number/string | 站点 Id | 否 | - |
|
|
218
|
+
| contentType | string | 数据类型:application/json 或 application/x-www-form-urlencoded | 否 | application/x-www-form-urlencoded |
|
|
219
|
+
|
|
220
|
+
<a name="df0e1504"></a>
|
|
221
|
+
#### 例子
|
|
222
|
+
> 初始化 sdk 例子,建议在 src/App.js 中初始化,且需在**useLayoutEffect**中初始化。
|
|
223
|
+
|
|
224
|
+
```jsx
|
|
225
|
+
import React, { useLayoutEffect } from "react";
|
|
226
|
+
import WebTracking from "@fle-sdk/event-tracking-web";
|
|
227
|
+
|
|
228
|
+
const App = () => {
|
|
229
|
+
useLayoutEffect(() => {
|
|
230
|
+
// init tracking
|
|
231
|
+
WebTracking.init({
|
|
232
|
+
appKey: "xxxxxx", // 由接口生成,应用唯一标识
|
|
233
|
+
serverUrl: "https://www.serverHost.com/serverApi/push",
|
|
234
|
+
autoTrack: true,
|
|
235
|
+
showLog: true,
|
|
236
|
+
isTrackSinglePage: true
|
|
237
|
+
});
|
|
238
|
+
}, []);
|
|
239
|
+
|
|
240
|
+
return <div className="App"></div>;
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
export default App;
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
<a name="EIsxL"></a>
|
|
248
|
+
### Preset
|
|
249
|
+
> 除了不可配置appKey、serverUrl,本质上和init差不多,这么做是为了更好的区分使用场景,不产生歧义。
|
|
250
|
+
|
|
251
|
+
<a name="qnIie"></a>
|
|
252
|
+
#### 参数
|
|
253
|
+
| 参数名 | type | 描述 | 是否必填 | 默认值 |
|
|
254
|
+
| --- | --- | --- | --- | --- |
|
|
255
|
+
| autoTrack | boolean | 是否开启全埋点(指的是:页面浏览、元素点击事件自动上报) | 否 | false |
|
|
256
|
+
| showLog | boolean | 是否在网页控制台打印发送的数据 | 否 | false |
|
|
257
|
+
| useClientTime | boolean | 是否使用客户端系统时间 | 否 | true |
|
|
258
|
+
| sendTimeout | number | 接口发送超时时长,超过该时长未发送成功将强制取消 | 否 | 3000 |
|
|
259
|
+
| isTrackSinglePage | boolean | 是否采集单页面应用的路由变化 | 否 | false |
|
|
260
|
+
| siteId | number/string | 站点 Id | 否 | - |
|
|
261
|
+
|
|
262
|
+
<a name="mFBcr"></a>
|
|
263
|
+
#### 例子
|
|
264
|
+
```jsx
|
|
265
|
+
import React, { useLayoutEffect } from "react";
|
|
266
|
+
import WebTracking from "@fle-sdk/event-tracking-web";
|
|
267
|
+
|
|
268
|
+
const App = () => {
|
|
269
|
+
useLayoutEffect(() => {
|
|
270
|
+
// init tracking
|
|
271
|
+
WebTracking.init({
|
|
272
|
+
appKey: "xxxxxx", // 由接口生成,应用唯一标识
|
|
273
|
+
serverUrl: "https://www.serverHost.com/serverApi/push",
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
// 配置全局参数,初始化后预置属性用该方法。
|
|
277
|
+
// 注意:如果配置的全局属性初始化已配置,将覆盖
|
|
278
|
+
WebTracking.preset({
|
|
279
|
+
autoTrack: true,
|
|
280
|
+
showLog: true,
|
|
281
|
+
isTrackSinglePage: true,
|
|
282
|
+
sendTimeout: 10000
|
|
283
|
+
})
|
|
284
|
+
}, []);
|
|
285
|
+
|
|
286
|
+
const pageHandle = () => {
|
|
287
|
+
WebTracking.preset({
|
|
288
|
+
autoTrack: false, // 关闭全埋点
|
|
289
|
+
})
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return <div className="App" onClick={pageHandle}></div>;
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
export default App;
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
<a name="ivnlQ"></a>
|
|
300
|
+
### Login
|
|
301
|
+
<a name="j3Vbe"></a>
|
|
302
|
+
#### 参数
|
|
303
|
+
| 参数名 | type | 描述 | 是否必填 | 默认值 |
|
|
304
|
+
| --- | --- | --- | --- | --- |
|
|
305
|
+
| userId | string/number | 用户ID | 否 | - |
|
|
306
|
+
|
|
307
|
+
<a name="tN0S5"></a>
|
|
308
|
+
#### 例子
|
|
309
|
+
```jsx
|
|
310
|
+
import React, { useEffect } from "react";
|
|
311
|
+
import WebTracking from "@fle-sdk/event-tracking-web";
|
|
312
|
+
import { LoginStore } from "store";
|
|
313
|
+
|
|
314
|
+
const Test = () => {
|
|
315
|
+
const getUserInfo = () => {
|
|
316
|
+
const { userId } = await LoginStore.getUserInfo();
|
|
317
|
+
WebTracking.Login("用户ID");
|
|
318
|
+
}
|
|
319
|
+
useEffect(() => {
|
|
320
|
+
getUserInfo()
|
|
321
|
+
}, []);
|
|
322
|
+
|
|
323
|
+
return <div className="Test"></div>;
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
export default Test;
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
<br />
|
|
330
|
+
|
|
331
|
+
<a name="z7aZJ"></a>
|
|
332
|
+
### GetDeviceId
|
|
333
|
+
<a name="zzyLD"></a>
|
|
334
|
+
#### 例子
|
|
335
|
+
> 获取设备唯一标识,单用户没有登录时即用户唯一标识
|
|
336
|
+
|
|
337
|
+
```jsx
|
|
338
|
+
import React, { useEffect } from "react";
|
|
339
|
+
import WebTracking from "@fle-sdk/event-tracking-web";
|
|
340
|
+
import { LoginStore } from "store";
|
|
341
|
+
|
|
342
|
+
const Test = () => {
|
|
343
|
+
useEffect(() => {
|
|
344
|
+
WebTracking.getDeviceId();
|
|
345
|
+
}, []);
|
|
346
|
+
|
|
347
|
+
return <div className="Test"></div>;
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
export default Test;
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
<br />
|
|
354
|
+
|
|
355
|
+
<a name="g6lIP"></a>
|
|
356
|
+
### Track
|
|
357
|
+
> 手动代码埋点上报
|
|
358
|
+
|
|
359
|
+
<a name="Params-1"></a>
|
|
360
|
+
#### 上报参数
|
|
361
|
+
| 参数名 | type | 描述 | 是否必填 | 默认值 |
|
|
362
|
+
| --- | --- | --- | --- | --- |
|
|
363
|
+
| partkey | string/number | 上报事件 Key(由前后端协商定义或由后端接口生成,该应用下需唯一且具有一定意义,例:goods_detail_pv) | 是 | - |
|
|
364
|
+
| desc | string | 上报事件描述 | 否 | 自定义上报事件 |
|
|
365
|
+
| business | object | 上报的业务参数 | 否 | - |
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
<a name="88291229"></a>
|
|
370
|
+
#### 例子
|
|
371
|
+
```jsx
|
|
372
|
+
import React, { useEffect } from "react";
|
|
373
|
+
import WebTracking from "@fle-sdk/event-tracking-web";
|
|
374
|
+
|
|
375
|
+
const Index = () => {
|
|
376
|
+
const history = useHistory();
|
|
377
|
+
|
|
378
|
+
const tracking = () => {
|
|
379
|
+
WebTracking.track({ desc: "我是描述", partkey: "xxx" })
|
|
380
|
+
.then((res) => console.log(res || "上报成功!"))
|
|
381
|
+
.catch((err) => console.log(err || "上报失败!"));
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// 手动上报商品详情浏览量示例
|
|
385
|
+
useEffect(() => {
|
|
386
|
+
WebTracking.track({
|
|
387
|
+
desc: "商品详情PV埋点",
|
|
388
|
+
partkey: "goods_detail_pv",
|
|
389
|
+
business: {
|
|
390
|
+
goodsId: "123",
|
|
391
|
+
goodsName: "测试商品",
|
|
392
|
+
},
|
|
393
|
+
});
|
|
394
|
+
}, []);
|
|
395
|
+
|
|
396
|
+
return (
|
|
397
|
+
<div className="index-wrap">
|
|
398
|
+
<button onClick={tracking}>点我,自动上报</button>
|
|
399
|
+
</div>
|
|
400
|
+
);
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
export default Index;
|
|
404
|
+
```
|
package/lib/index.ems.js
CHANGED
|
@@ -12,5 +12,5 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
12
12
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
13
13
|
PERFORMANCE OF THIS SOFTWARE.
|
|
14
14
|
***************************************************************************** */
|
|
15
|
-
var e=function(){return(e=Object.assign||function(e){for(var t,n=1,i=arguments.length;n<i;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)},t=new function(){var t=this;this.init=function(e){if(e instanceof Object)for(var n=0,i=Object.entries(e);n<i.length;n++){var r=i[n],o=r[0],a=r[1];void 0!==t.config[o]&&(t.config[o]=a),void 0!==t.apiConfig[o]&&(t.apiConfig[o]=a)}t.config.pageKey=window.location.pathname.replace(/\//g,"_").substr(1),t.config.platformType=t.getPlatformType(),t.otherInfo=Object.assign(t.otherInfo,t.getNavigatorInfo()),t.currentUrl=window.location.pathname,t.rewriteHistory(),t.listener()},this.trackingPost=function(n,i){var r=e(e({},t.config),{event:n,desc:i.desc||"",itemKey:i.itemKey||"",requestTime:t.getTimeStamp(),deviceId:t.getDistinctId(),privateParamMap:e(e(e({},i),t.otherInfo),{urlParams:t.getQueryValue()})}),o={url:""+t.apiConfig.serverHost+t.apiConfig.serverApi,headers:{"Content-Type":"application/json",authority_token:t.getCookie("token")||t.getCookie("seller_token")},params:JSON.stringify(r)};return t.httpPost(o)},this.onClick=function(e){if(e.target.dataset.partKey){var n=[e.pageX,e.pageY],i=e.target.id,r=e.target.className,o={nodeName:e.target.nodeName,id:i,className:r},a=document.documentElement.offsetWidth,s=document.documentElement.offsetHeight,c=window.screen.width,u=window.screen.height,d=window.screen.availWidth,h=window.screen.availHeight,g=window.innerWidth,l=window.innerHeight;t.trackingPost("click",{position:n,targetEle:o,pageWidth:a,pageHeight:s,screenWidth:c,screenHeight:u,screenAvailWidth:d,screenAvailHeight:h,windowInnerWidth:g,windowInnerHeight:l,itemKey:t.getItemKey(e.target.dataset.partKey),desc:e.target.dataset.desc||t.eventDescMap.click})}},this.addSinglePageEvent=function(e){["load","pushState","replaceState",window.history.pushState?"popstate":"hashchange"].forEach((function(n){t.addEventListener(window,n,e)}))},this.onPushStateHandler=function(e){var n;t.trackingPost(e.type,{sourceUrl:t.currentUrl,targetUrl:null===(n=e.arguments)||void 0===n?void 0:n[2],desc:t.eventDescMap[e.type],itemKey:t.getItemKey()}),t.currentUrl=window.location.pathname,t.config.pageKey=window.location.pathname.replace(/\//g,"_").substr(1)},this.listener=function(){t.addSinglePageEvent(t.onPushStateHandler),t.addEventListener(window,"click",t.onClick),t.addEventListener(window,"unload",t.unload)},this.unload=function(){["load","pushState","replaceState",window.history.pushState?"popstate":"hashchange"].forEach((function(e){t.removeEventListener(window,e,t.onPushStateHandler)})),t.removeEventListener(window,"click",t.onClick),t.removeEventListener(window,"unload",t.unload)},this.tracking=function(n){return t.trackingPost("customTrack",e(e({},n),{itemKey:t.getItemKey(n.itemKey||"customTrack"),desc:n.desc||t.eventDescMap.customTrack}))},this.uuid=function(){return"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},this.getItemKey=function(e){var n=t.config;return[n.appKey,n.pageKey,e].filter((function(e){return!!e})).reduce((function(e,t){return e+(e.length?".":"")+t}),"")},this.getQueryValue=function(e){for(var t=decodeURI(window.location.search.substring(1)).split("&"),n={},i=0;i<t.length;i++){var r=t[i].split("=");if(r[0]===e)return r[1];n[r[0]]=r[1]}return e?null:n},this.getTimeStamp=function(){return(new Date).getTime()},this.getDistinctId=function(){var e=t.getCookie("distinctId");return e||(e=t.uuid(),t.setCookie("distinctId",e),e)},this.getPlatformType=function(){for(var e=navigator.userAgent,t=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"),n=!0,i=0;i<t.length;i++)if(e.indexOf(t[i])>0){n=!1;break}return n?"pc":"h5"},this.setCookie=function(e,t){document.cookie=e+"="+t+";"+document.cookie},this.getCookie=function(e){e+="=";for(var t=decodeURIComponent(document.cookie).split(";"),n=0;n<t.length;n++){for(var i=t[n];" "===i.charAt(0);)i=i.substring(1);if(0===i.indexOf(e))return i.substring(e.length,i.length)}return""},this.getNavigatorInfo=function(){var e=navigator;return{userAgent:e.appVersion,language:e.language}},this.httpPost=function(e){var t=e.url,n=e.headers,i=e.params;return new Promise((function(e,r){var o=new XMLHttpRequest;o.open("post",t),o.onreadystatechange=function(){if(4===o.readyState){if(200===o.status){var t=o.responseText;if(!t)return;var n=JSON.parse(t);return"2000"===n.code?e(n):r(n)}return console.log(o.statusText),r(o.statusText)}},o.onerror=function(e){return console.log(o.statusText),r(o.statusText)},n instanceof Object&&Object.keys(n).forEach((function(e){o.setRequestHeader(e,n[e])})),o.send(i)}))},this.removeEventListener=function(e,t,n){e.removeEventListener?e.removeEventListener(t,n):e.detachEvent&&e.detachEvent("on"+t,(function(t){return n.call(e,t)}),!0)},this.addEventListener=function(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,(function(t){return n.call(e,t)}),!1)},this.rewriteHistory=function(){var e=window.history,t=function(e){var t=window.history,n=t[e],i=new Event(e);return function(){var e=n.apply(t,arguments);return i.arguments=arguments,window.dispatchEvent(i),e}};window.history.pushState&&(e.pushState=t("pushState"),e.replaceState=t("replaceState"))},this.config={appKey:"",pageKey:"",siteId:""},this.otherInfo={userAgent:"",language:"",sdkVersion:"1.0.0",platformType:"pc"},this.currentUrl="",this.apiConfig={serverApi:"",serverHost:""},this.eventDescMap={load:"浏览器上报事件:初始化",pushState:"浏览器上报事件:追加新路由",replaceState:"浏览器上报事件:替换当前路由为新路由",popstate:"浏览器上报事件:前进、回退、hash值改变",hashchange:"浏览器上报事件:hash值改变",click:"点击上报事件",customTrack:"自定义上报事件"}};export default t;
|
|
15
|
+
var e=function(t,n){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(t,n)};var t=function(){return(t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},n=new(function(n){function r(){var e=n.call(this)||this;return e.userId=null,e.currentUrl="",e.pageKey="",e.eventDescMap={PageView:"Web 浏览页面",WebClick:"Web 元素点击",PageRetained:"Web 页面浏览时长",CustomTrack:"Web 自定义代码上报"},e.init=function(t){e.preset(t);var n=window.location.pathname;e.currentUrl=window.location.href,e.pageKey=n.replace(/\//g,"_").substr(1),e.systemsInfo=e.getSystemsInfo(),e.setCookie("retainedStartTime",e.getTimeStamp())},e.preset=function(t){t instanceof Object&&e.each(t,(function(t,n){void 0!==e.config[n]&&(e.config[n]=t)})),/^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-\(\)]*[\w@?^=%&/~+#-\(\)])?$/.test(e.config.serverUrl)||(e.printLog("当前 server_url 为空或不正确,只在控制台打印日志,network 中不会发数据,请配置正确的 server_url!"),e.config.showLog=!0),e.config.autoTrack?e.listener():e.unlistener()},e.login=function(t){["number","string"].includes(typeof t)&&(e.userId=t)},e.track=function(t){var n=t.desc,r=t.partkey,o=t.business,i=e.getParams({desc:n,event:"CustomTrack",itemKey:e.getItemKey(r),extroInfo:{business:o}});return e.sendAjax(i)},e.listener=function(){e.config.isTrackSinglePage&&(e.rewriteHistory(),e.addSinglePageEvent(e.onPageViewCallback)),e.each(["load","beforeunload"],(function(t){e.addEventListener(window,t,e.onPageViewCallback)})),e.addEventListener(window,"click",e.onClickCallback)},e.unlistener=function(){if(e.config.isTrackSinglePage){var t=window.history.pushState?"popstate":"hashchange";e.each(["pushState","replaceState",t],(function(t){e.removeEventListener(window,t,e.onPageViewCallback)}))}e.each(["load","beforeunload"],(function(t){e.removeEventListener(window,t,e.onPageViewCallback)})),e.removeEventListener(window,"click",e.onClickCallback)},e.onClickCallback=function(t){var n,r;if(null===(r=null===(n=null==t?void 0:t.target)||void 0===n?void 0:n.dataset)||void 0===r?void 0:r.partKey){var o=[t.pageX,t.pageY],i=t.target.id,a=t.target.className,s={id:i,nodeName:t.target.nodeName,className:a},c=e.getParams({event:"WebClick",desc:e.eventDescMap.WebClick,itemKey:e.getItemKey(t.target.dataset.partKey),extroInfo:{position:o,targetEle:s,pointerType:t.pointerType,currentUrl:e.currentUrl,elementSelector:e.getDomSelector(t.target)}});return e.sendAjax(c)}},e.onPageViewCallback=function(t){var n,r,o=window.location.origin;e.sendPageViewData(t.type,{event:"PageView",desc:e.eventDescMap.PageView,extroInfo:{currentUrl:e.currentUrl,targetUrl:(null===(n=t.arguments)||void 0===n?void 0:n[2])?o+(null===(r=t.arguments)||void 0===r?void 0:r[2]):null}}),e.currentUrl=window.location.href,e.pageKey=window.location.pathname.replace(/\//g,"_").substr(1)},e.getParams=function(n){var r=n.event,o=n.desc,i=n.itemKey,a=n.extroInfo,s=void 0===a?{}:a,c=e.config,u=c.appKey,d=c.sdkVersion,l=c.siteId,p=window.innerWidth,g=window.innerHeight,f=window.screen.width,m=window.screen.height;return{desc:o,event:r,appKey:u,siteId:l,itemKey:i||e.getItemKey(),requestTime:e.getTimeStamp(),deviceId:e.getDistinctId(),privateParamMap:t(t({},s),{sdkVersion:d,pageWidth:p,pageHeight:g,screenWidth:f,screenHeight:m,currentUrl:s.currentUrl||e.currentUrl,systemsInfo:e.systemsInfo,urlParams:e.getQueryValue(),userInfo:{userId:e.userId}})}},e.sendPageViewData=function(t,n){var r=e.getParams(n);return e.sendRetained(t),e.sendAjax(r)},e.sendAjax=function(t){var n=e.config,r=n.serverUrl,o=n.sendTimeout,i=n.contentType;return n.showLog&&e.printLog(t),new Promise((function(n,a){e.ajax({url:r,type:"POST",data:JSON.stringify(t),contentType:i,credentials:!1,timeout:o,cors:!0,success:function(e){return n(e)},error:function(e){return a(e)}})}))},e.sendRetained=function(n){var r=e.config.serverUrl,o=e.getParams({event:"PageRetained",desc:e.eventDescMap.PageRetained});if(["beforeunload","pushState","replaceState","hashchange","popstate"].indexOf(n)>=0){var i=e.getCookie("retainedStartTime"),a=i?+i:e.getTimeStamp(),s=t(t({},o),{retainedStartTime:a});"beforeunload"===n?e.sendBeacon({url:r,data:s}):e.sendAjax(s).finally((function(){return e.setCookie("retainedStartTime",e.getTimeStamp())}))}},e.getItemKey=function(t){return[e.config.appKey,e.pageKey,t?t.toString():void 0].filter((function(e){return!!e})).reduce((function(e,t){return e+(e.length?".":"")+t}),"")},e.config={sdkVersion:"1.1.0",appKey:"",siteId:"",showLog:!1,serverUrl:"",autoTrack:!1,useClientTime:!0,queueTimeout:500,sendTimeout:3e3,isTrackSinglePage:!1,contentType:"application/x-www-form-urlencoded"},e.systemsInfo={},e}return function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}(r,n),r.prototype.addSinglePageEvent=function(e){var t=this,n=window.history.pushState?"popstate":"hashchange";this.each(["pushState","replaceState",n],(function(n){t.addEventListener(window,n,e)}))},r}(function(){function e(){var e=this;this.getPlatformType=function(){for(var e=navigator.userAgent,t=new Array("Android","iPhone","SymbianOS","Windows Phone","iPad","iPod"),n=!0,r=0;r<t.length;r++)if(e.indexOf(t[r])>0){n=!1;break}return n?"pc":"h5"},this.addEventListener=function(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,(function(t){return n.call(e,t)}),!1)},this.removeEventListener=function(e,t,n){e.removeEventListener?e.removeEventListener(t,n):e.detachEvent&&e.detachEvent("on"+t,(function(t){return n.call(e,t)}),!0)},this.rewriteHistory=function(){var e=window.history,t=function(e){var t=window.history,n=t[e],r=new Event(e);return function(){var e=n.apply(t,arguments);return r.arguments=arguments,window.dispatchEvent(r),e}};window.history.pushState&&(e.pushState=t("pushState"),e.replaceState=t("replaceState"))},this.isArray=Array.isArray||function(e){return"[object Array]"===toString.call(e)},this.formatJsonString=function(e){try{return JSON.stringify(e,null," ")}catch(t){return JSON.stringify(e)}},this.nativeForEach=Array.prototype.forEach,this.slice=Array.prototype.slice,this.hasOwnProperty=Object.prototype.hasOwnProperty,this.breaker={},this.each=function(t,n,r){if(null==t)return!1;if(e.nativeForEach&&t.forEach===e.nativeForEach)t.forEach(n,r);else if(e.isArray(t)&&t.length===+t.length){for(var o=0,i=t.length;o<i;o++)if(o in t&&n.call(r,t[o],o,t)===e.breaker)return!1}else for(var a in t)if(e.hasOwnProperty.call(t,a)&&n.call(r,t[a],a,t)===e.breaker)return!1},this.getDomIndex=function(e){if(!e.parentNode)return-1;for(var t=0,n=e.tagName,r=e.parentNode.children,o=0;o<r.length;o++)if(r[o].tagName===n){if(e===r[o])return t;t++}return-1},this.selector=function(t){var n=t.parentNode&&9==t.parentNode.nodeType?-1:e.getDomIndex(t);return t.getAttribute&&t.getAttribute("id")&&/^[A-Za-z][-A-Za-z0-9_:.]*$/.test(t.getAttribute("id"))?"#"+t.getAttribute("id"):t.tagName.toLowerCase()+(~n?":nth-of-type("+(n+1)+")":"")},this.getDomSelector=function(t,n){if(!t||!t.parentNode||!t.parentNode.children)return!1;n=n&&n.join?n:[];var r=t.nodeName.toLowerCase();return t&&"body"!==r&&1==t.nodeType?(n.unshift(e.selector(t)),t.getAttribute&&t.getAttribute("id")&&/^[A-Za-z][-A-Za-z0-9_:.]*$/.test(t.getAttribute("id"))?n.join(" > "):e.getDomSelector(t.parentNode,n)):(n.unshift("body"),n.join(" > "))},this.getCookie=function(e){for(var t=e+"=",n=document.cookie.split(";"),r=0;r<n.length;r++){for(var o=n[r];" "==o.charAt(0);)o=o.substring(1,o.length);if(0==o.indexOf(t))return this._decodeURIComponent(o.substring(t.length,o.length))}return null},this.setCookie=function(e,t,n){var r,o="";n=null==n?73e3:n;var i=this.getMainHost();if(r=i?"; domain="+i:"",0!==n){var a=new Date;"s"===String(n).slice(-1)?a.setTime(a.getTime()+1e3*Number(String(n).slice(0,-1))):a.setTime(a.getTime()+24*n*60*60*1e3),o="; expires="+a.toUTCString()}function s(e){return e||!1}var c="",u="",d="";e&&(c=s(e)),t&&(u=s(t)),r&&(d=s(r)),c&&u&&(document.cookie=c+"="+encodeURIComponent(u)+o+"; path=/"+d)},this.removeCookie=function(t){e.setCookie(t,"",-1)},this.getTimeStamp=function(){return(new Date).getTime()},this.uuid=function(){return"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},this.getDistinctId=function(){var t=e.getCookie("distinctId");return t||(t=e.uuid(),e.setCookie("distinctId",t),t)},this.getQueryValue=function(e){for(var t=decodeURI(window.location.href).match(new RegExp("[?&][^?&]+=[^?&]+","g"))||[],n={},r=0;r<t.length;r++){var o=t[r].replace(/\?|\&/,"").split("=");if(o[0]===e)return o[1];n[o[0]]=o[1]}return e?null:n},this.ajax=function(t){function n(e){if(!e)return"";try{return JSON.parse(e)}catch(e){return{}}}t.timeout=t.timeout||3e4,t.credentials=void 0===t.credentials||t.credentials;var r=e.xhr(t.cors);if(!r)return!1;t.type||(t.type=t.data?"POST":"GET");var o,i=t.success,a=t.error;t.success=function(e){i(e),o&&(clearTimeout(o),o=null)},t.error=function(e){a(e),o&&(clearTimeout(o),o=null)},o=setTimeout((function(){!function(){try{e.isObject(r)&&r.abort&&r.abort()}catch(t){e.printLog(t)}o&&(clearTimeout(o),o=null,t.error&&t.error(),r.onreadystatechange=null,r.onload=null,r.onerror=null)}()}),t.timeout),r.onreadystatechange=function(){try{4==r.readyState&&(r.status>=200&&r.status<300||304==r.status?t.success(n(r.responseText)):t.error(n(r.responseText),r.status),r.onreadystatechange=null,r.onload=null)}catch(e){r.onreadystatechange=null,r.onload=null}},r.open(t.type,t.url,!0);try{t.credentials&&(r.withCredentials=!0),e.isObject(t.header)&&e.each(t.header,(function(e,t){r.setRequestHeader&&r.setRequestHeader(t,e)})),t.data&&(t.cors||r.setRequestHeader&&r.setRequestHeader("X-Requested-With","XMLHttpRequest"),"application/json"===t.contentType?r.setRequestHeader&&r.setRequestHeader("Content-type","application/json; charset=UTF-8"):r.setRequestHeader&&r.setRequestHeader("Content-type","application/x-www-form-urlencoded"))}catch(t){e.printLog(t)}r.send(t.data||null)},this.xhr=function(e){return e?void 0!==window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest?new XMLHttpRequest:null:void 0!==window.XMLHttpRequest?new XMLHttpRequest:null},this.sendBeacon=function(e){return"object"==typeof navigator&&"function"==typeof navigator.sendBeacon?(navigator.sendBeacon(e.url,new URLSearchParams(JSON.stringify(e.data||{}))),Promise.resolve({message:"发送成功!"})):Promise.reject({message:"不支持sendBeacon,发送失败!"})}}return e.prototype.printLog=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];if(this.isObject(e[0])&&(e[0]=this.formatJsonString(e[0])),"object"==typeof console&&console.log)try{return console.log.apply(console,e)}catch(t){console.log(e[0])}},e.prototype.getSystemsInfo=function(){var e=navigator.userAgent,t=[],n={language:navigator.language},r=e.match(/MicroMessenger\/([\d\.]+)/i),o=r&&r[1]?r[1]:null,i=e.match(/(ipod).*\s([\d_]+)/i),a=e.match(/(ipad).*\s([\d_]+)/i),s=e.match(/(iphone)\sos\s([\d_]+)/i),c=e.match(/(android)\s([\d\.]+)/i),u=e.match(/(Mac OS X)\s([\d_]+)/i);t=[],c?t.push("Android "+c[2]):s?t.push("iPhone, iOS "+s[2].replace(/_/g,".")):a?t.push("iPad, iOS "+a[2].replace(/_/g,".")):i?t.push("iPod, iOS "+i[2].replace(/_/g,".")):u&&t.push("Mac, MacOS "+u[2].replace(/_/g,".")),o&&t.push("WeChat "+o),n.platform=this.getPlatformType(),n.client=t.length?t.join(", "):"Unknown";var d=e.toLowerCase().match(/ nettype\/([^ ]+)/g);return d&&d[0]&&(t=[(d=d[0].split("/"))[1]],n.network=t.length?t.join(", "):"Unknown"),n.ua=e,setTimeout((function(){var e=window.performance||window.msPerformance||window.webkitPerformance;if(e&&e.timing){var t=e.timing;t.navigationStart&&(n.navigationStart=t.navigationStart),t.navigationStart&&t.domainLookupStart&&(n.navigation=t.domainLookupStart-t.navigationStart+"ms"),t.domainLookupEnd&&t.domainLookupStart&&(n.dns=t.domainLookupEnd-t.domainLookupStart+"ms"),t.connectEnd&&t.connectStart&&(t.connectEnd&&t.secureConnectionStart?n["tcp (ssl)"]=t.connectEnd-t.connectStart+"ms ("+(t.connectEnd-t.secureConnectionStart)+"ms)":n.tcp=t.connectEnd-t.connectStart+"ms"),t.responseStart&&t.requestStart&&(n.request=t.responseStart-t.requestStart+"ms"),t.responseEnd&&t.responseStart&&(n.response=t.responseEnd-t.responseStart+"ms"),t.domComplete&&t.domLoading&&(t.domContentLoadedEventStart&&t.domLoading?n["domComplete (domLoaded)"]=t.domComplete-t.domLoading+"ms ("+(t.domContentLoadedEventStart-t.domLoading)+"ms)":n.domComplete=t.domComplete-t.domLoading+"ms"),t.loadEventEnd&&t.loadEventStart&&(n.loadEvent=t.loadEventEnd-t.loadEventStart+"ms"),t.navigationStart&&t.loadEventEnd&&(n["total (DOM)"]=t.loadEventEnd-t.navigationStart+"ms ("+(t.domComplete-t.navigationStart)+"ms)")}}),0),n},e.prototype.isObject=function(e){return null!=e&&"[object Object]"==toString.call(e)},e.prototype.isUndefined=function(e){return void 0===e},e.prototype.isString=function(e){return"[object String]"==toString.call(e)},e.prototype.isDate=function(e){return"[object Date]"==toString.call(e)},e.prototype.isBoolean=function(e){return"[object Boolean]"==toString.call(e)},e.prototype.isNumber=function(e){return"[object Number]"==toString.call(e)&&/[\d\.]+/.test(String(e))},e.prototype.isElement=function(e){return!(!e||1!==e.nodeType)},e.prototype.isFunction=function(e){if(!e)return!1;var t=toString.call(e);return"[object Function]"==t||"[object AsyncFunction]"==t},e.prototype.isJSONString=function(e){try{JSON.parse(e)}catch(e){return!1}return!0},e.prototype._decodeURIComponent=function(e){var t=e;try{t=decodeURIComponent(e)}catch(n){t=e}return t},e.prototype.getMainHost=function(){var e="mh_"+Math.random(),t=new RegExp("(^|;)\\s*"+e+"=12345"),n=new Date(0),r=document.domain.split("."),o=[];for(o.unshift(r.pop());r.length;){o.unshift(r.pop());var i=o.join("."),a=e+"=12345;domain=."+i;if(document.cookie=a,t.test(document.cookie))return document.cookie=a+";expires="+n,i}},e}()));export default n;
|
|
16
16
|
//# sourceMappingURL=index.ems.js.map
|
package/lib/index.ems.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.ems.js","sources":["../node_modules/tslib/tslib.es6.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this"],"mappings":";;;;;;;;;;;;;;AA+BO,IAAIA,EAAW,WAQlB,OAPAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAII,KADTL,EAAIG,UAAUF,GACOJ,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,IAE9E,OAAON,IAEKU,MAAMC,KAAMP"}
|
|
1
|
+
{"version":3,"file":"index.ems.js","sources":["../node_modules/tslib/tslib.es6.js","../src/lib/index.ts","../src/lib/tools.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * web 数据埋点 SDK\n * @class WebTracking\n * @version 1.1.0\n * key由这几部分组成:appkey.pagekey.partkey 通过“.”来分割\n * appkey:应用唯一标识\n * pagekey:页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n * partkey:控件/自定义事件的唯一标识,当是控件触发且没有partkey时,会取当前控件的 id/class/dom\n */\nimport Tools from \"./tools\";\nimport { EventParams, InitParams, ConfigTypes, SystemsInfo, TrackParams, PresetParams, TrackingPostParams, HistoryType, TargetEleProps } from \"./type\";\n\nclass WebTracking extends Tools {\n config: ConfigTypes;\n systemsInfo: SystemsInfo;\n\n constructor() {\n super();\n this.config = {\n sdkVersion: \"1.1.0\", // sdk版本\n appKey: \"\", // 应用唯一标识(由接口生成)\n siteId: \"\", // 站点 ID\n showLog: false, // (是否在网页控制台打印发送的数据)默认:不打印\n serverUrl: \"\", // 数据接收地址\n autoTrack: false, //(是否开启全埋点)指的是:页面浏览、元素点击事件自动上报 默认: 关闭\n useClientTime: true, //(是否使用客户端系统时间)注意:客户端系统时间可能会不准确,导致该字段不准确 默认:使用\n queueTimeout: 500, //(队列单条数据最大发送时长,超过该时长将自动发送下一条数据)500ms(默认)\n sendTimeout: 3000, //(接口发送超时时长,超过该时长未发送成功将强制取消)3000ms(默认)\n isTrackSinglePage: false, //(是否采集单页面应用的路由变化)默认: 不采集\n contentType: \"application/x-www-form-urlencoded\", // 数据类型,默认form data\n };\n // 系统信息\n this.systemsInfo = {};\n }\n\n // 用户ID\n protected userId?: number | string = null;\n // 当前路由\n protected currentUrl: string = \"\";\n // 页面唯一标识,取当前路由 window.location.pathname.replace(/\\//g, '_').substr(1)\n protected pageKey: string = \"\";\n // 上传事件描述\n protected eventDescMap: { [key: string]: string } = {\n PageView: \"Web 浏览页面\",\n WebClick: \"Web 元素点击\",\n PageRetained: \"Web 页面浏览时长\",\n CustomTrack: \"Web 自定义代码上报\",\n };\n\n /**\n * 初始化函数\n */\n public init = (initParams: InitParams) => {\n this.preset(initParams);\n\n const pathname = window.location.pathname;\n this.currentUrl = window.location.href;\n this.pageKey = pathname.replace(/\\//g, \"_\").substr(1);\n\n this.systemsInfo = this.getSystemsInfo();\n\n this.setCookie(\"retainedStartTime\", this.getTimeStamp());\n };\n\n /**\n * @description 预置参数\n */\n public preset = (presetParams: PresetParams) => {\n if (presetParams instanceof Object) {\n this.each(presetParams, (val, key) => {\n if (this.config[key] !== undefined) {\n // TODO:后面加一些校验\n this.config[key] = val;\n }\n });\n }\n\n if (!/^(((ht|f)tps?):\\/\\/)?[\\w-]+(\\.[\\w-]+)+([\\w.,@?^=%&:/~+#-\\(\\)]*[\\w@?^=%&/~+#-\\(\\)])?$/.test(this.config[\"serverUrl\"])) {\n this.printLog(\"当前 server_url 为空或不正确,只在控制台打印日志,network 中不会发数据,请配置正确的 server_url!\");\n this.config[\"showLog\"] = true;\n }\n\n // 如果启用了全埋点\n if (!!this.config[\"autoTrack\"]) {\n // 启用监听\n this.listener();\n } else {\n // 取消监听\n this.unlistener();\n }\n };\n\n /**\n * 用户登录\n */\n public login = (userId: number | string) => {\n if ([\"number\", \"string\"].includes(typeof userId)) this.userId = userId;\n };\n\n /**\n * 自定义代码埋点上报\n * @param {string} event [事件类型]\n * @param {object} extroInfo [扩展信息]\n * @return {Promise} [回调]\n */\n public track = ({ desc, partkey, business }: TrackParams): Promise<{}> => {\n const params = this.getParams({\n desc,\n event: \"CustomTrack\",\n itemKey: this.getItemKey(partkey),\n extroInfo: {\n business,\n },\n });\n return this.sendAjax(params);\n };\n\n /**\n * @description 监听全埋点事件\n */\n protected listener = () => {\n if (!!this.config.isTrackSinglePage) {\n this.rewriteHistory();\n this.addSinglePageEvent(this.onPageViewCallback);\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.addEventListener(window, \"click\", this.onClickCallback);\n };\n\n /**\n * @description 取消全埋点事件\n */\n protected unlistener = () => {\n if (!!this.config.isTrackSinglePage) {\n const historyPushState = window.history.pushState;\n const singlePageEvent = !!historyPushState ? \"popstate\" : \"hashchange\";\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyName: string) => {\n this.removeEventListener(window, historyName, this.onPageViewCallback);\n });\n }\n\n this.each([\"load\", \"beforeunload\"], (historyType: HistoryType) => {\n this.removeEventListener(window, historyType, this.onPageViewCallback);\n });\n\n this.removeEventListener(window, \"click\", this.onClickCallback);\n };\n\n protected onClickCallback = (e: any): Promise<{}> => {\n if (!e?.target?.dataset?.partKey) return;\n\n const position = [e.pageX, e.pageY];\n const id = e.target.id;\n const className = e.target.className;\n const nodeName = e.target.nodeName;\n const targetEle: TargetEleProps = {\n id,\n nodeName,\n className,\n };\n\n const params = this.getParams({\n event: \"WebClick\",\n desc: this.eventDescMap[\"WebClick\"],\n itemKey: this.getItemKey(e.target.dataset.partKey),\n extroInfo: {\n position,\n targetEle,\n pointerType: e.pointerType,\n currentUrl: this.currentUrl,\n elementSelector: this.getDomSelector(e.target),\n },\n });\n\n return this.sendAjax(params);\n };\n\n /**\n * @description 添加单页面监听事件\n * @param callback\n */\n public addSinglePageEvent(callback: (e: EventParams) => void) {\n const historyPushState = window.history.pushState;\n\n const singlePageEvent = historyPushState ? \"popstate\" : \"hashchange\";\n\n this.each([\"pushState\", \"replaceState\", singlePageEvent], (historyType: HistoryType) => {\n this.addEventListener(window, historyType, callback);\n });\n }\n\n /**\n * @description 路由触发事件\n */\n protected onPageViewCallback = (e: EventParams) => {\n const ORGIN = window.location.origin;\n this.sendPageViewData(e.type, {\n event: \"PageView\",\n desc: this.eventDescMap[\"PageView\"],\n extroInfo: {\n currentUrl: this.currentUrl,\n targetUrl: e.arguments?.[2] ? ORGIN + e.arguments?.[2] : null,\n },\n });\n\n this.currentUrl = window.location.href;\n this.pageKey = window.location.pathname.replace(/\\//g, \"_\").substr(1);\n };\n\n getParams = ({ event, desc, itemKey, extroInfo = {} }: TrackingPostParams) => {\n const { appKey, sdkVersion, siteId } = this.config;\n\n const pageWidth = window.innerWidth;\n const pageHeight = window.innerHeight;\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const params = {\n desc,\n event,\n appKey,\n siteId,\n itemKey: itemKey || this.getItemKey(),\n requestTime: this.getTimeStamp(),\n deviceId: this.getDistinctId(),\n privateParamMap: {\n ...extroInfo,\n sdkVersion,\n pageWidth,\n pageHeight,\n screenWidth,\n screenHeight,\n currentUrl: extroInfo.currentUrl || this.currentUrl,\n systemsInfo: this.systemsInfo,\n urlParams: this.getQueryValue(),\n userInfo: {\n userId: this.userId,\n },\n },\n };\n\n return params;\n };\n\n sendPageViewData = (type: string, e: TrackingPostParams) => {\n const params = this.getParams(e);\n\n this.sendRetained(type);\n\n return this.sendAjax(params);\n };\n\n sendAjax = (params: { [key: string]: any }): Promise<{}> => {\n const { serverUrl, sendTimeout, contentType, showLog } = this.config;\n\n if (!!showLog) this.printLog(params);\n\n return new Promise((resolve, reject) => {\n this.ajax({\n url: serverUrl,\n type: \"POST\",\n data: JSON.stringify(params),\n contentType: contentType,\n credentials: false,\n timeout: sendTimeout,\n cors: true,\n success: (res) => resolve(res),\n error: (err) => reject(err),\n });\n });\n };\n\n /**\n * @description 留存时长上报\n * @param type\n */\n sendRetained = (type: string) => {\n const { serverUrl } = this.config;\n\n const params = this.getParams({ event: \"PageRetained\", desc: this.eventDescMap[\"PageRetained\"] });\n\n if ([\"beforeunload\", \"pushState\", \"replaceState\", \"hashchange\", \"popstate\"].indexOf(type) >= 0) {\n const __time = this.getCookie(\"retainedStartTime\");\n const retainedStartTime = __time ? +__time : this.getTimeStamp();\n const retainedData = {\n ...params,\n retainedStartTime,\n };\n type === \"beforeunload\"\n ? this.sendBeacon({\n url: serverUrl,\n data: retainedData,\n })\n : this.sendAjax(retainedData).finally(() => this.setCookie(\"retainedStartTime\", this.getTimeStamp()));\n }\n };\n\n /**\n * @description 获取 itemKey\n * @param {[string]} partkey [控件/自定义事件的唯一标识,当是控件触发且没有partkey时,会取当前控件的 id/class/dom]\n * @return {[string]}\n */\n protected getItemKey = (partkey?: string | number): string => {\n const appKey = this.config.appKey;\n const keys: string[] = [appKey, this.pageKey, partkey ? partkey.toString() : undefined].filter((key: string | undefined) => !!key);\n return keys.reduce((str, key) => str + `${str.length ? \".\" : \"\"}` + key, \"\");\n };\n}\n\nexport default new WebTracking();\n","/**\n * 埋点工具函数\n */\nimport { Target, SystemsInfo, JsonProps } from \"./type\";\n\nexport default class WebTrackingTools {\n constructor() {}\n\n /**\n * 打印log\n */\n public printLog(...rest: any) {\n if (this.isObject(rest[0])) {\n rest[0] = this.formatJsonString(rest[0]);\n }\n\n if (typeof console === \"object\" && console.log) {\n try {\n return console.log.apply(console, rest);\n } catch (e) {\n console.log(rest[0]);\n }\n }\n }\n\n /**\n * 获取平台类型\n * @return {[string]} [pc / h5]\n */\n public getPlatformType = () => {\n const userAgentInfo = navigator.userAgent;\n const Agents = new Array(\"Android\", \"iPhone\", \"SymbianOS\", \"Windows Phone\", \"iPad\", \"iPod\");\n let flag = true;\n for (let v = 0; v < Agents.length; v++) {\n if (userAgentInfo.indexOf(Agents[v]) > 0) {\n flag = false;\n break;\n }\n }\n return flag ? \"pc\" : \"h5\";\n };\n\n /**\n * 系统信息\n */\n public getSystemsInfo() {\n // print system info\n const ua = navigator.userAgent;\n const language = navigator.language;\n\n let logMsg: string[] = [];\n let systemsInfo: SystemsInfo = {\n language,\n };\n\n // wechat client version\n const wxVersionMatch = ua.match(/MicroMessenger\\/([\\d\\.]+)/i);\n const wxVersion = wxVersionMatch && wxVersionMatch[1] ? wxVersionMatch[1] : null;\n\n // device & system\n const ipod = ua.match(/(ipod).*\\s([\\d_]+)/i),\n ipad = ua.match(/(ipad).*\\s([\\d_]+)/i),\n iphone = ua.match(/(iphone)\\sos\\s([\\d_]+)/i),\n android = ua.match(/(android)\\s([\\d\\.]+)/i),\n mac = ua.match(/(Mac OS X)\\s([\\d_]+)/i);\n\n logMsg = [];\n if (android) {\n logMsg.push(\"Android \" + android[2]);\n } else if (iphone) {\n logMsg.push(\"iPhone, iOS \" + iphone[2].replace(/_/g, \".\"));\n } else if (ipad) {\n logMsg.push(\"iPad, iOS \" + ipad[2].replace(/_/g, \".\"));\n } else if (ipod) {\n logMsg.push(\"iPod, iOS \" + ipod[2].replace(/_/g, \".\"));\n } else if (mac) {\n logMsg.push(\"Mac, MacOS \" + mac[2].replace(/_/g, \".\"));\n }\n if (wxVersion) {\n logMsg.push(\"WeChat \" + wxVersion);\n }\n\n systemsInfo[\"platform\"] = this.getPlatformType();\n\n systemsInfo[\"client\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n\n // network type\n let network = ua.toLowerCase().match(/ nettype\\/([^ ]+)/g);\n if (network && network[0]) {\n network = network[0].split(\"/\");\n logMsg = [network[1]];\n systemsInfo[\"network\"] = logMsg.length ? logMsg.join(\", \") : \"Unknown\";\n }\n\n // User Agent\n systemsInfo[\"ua\"] = ua;\n\n // performance related\n // use `setTimeout` to make sure all timing points are available\n setTimeout(function () {\n const performance = window.performance || (<any>window).msPerformance || (<any>window).webkitPerformance;\n\n // timing\n if (performance && performance.timing) {\n const t = performance.timing;\n if (t.navigationStart) {\n systemsInfo[\"navigationStart\"] = t.navigationStart;\n }\n if (t.navigationStart && t.domainLookupStart) {\n systemsInfo[\"navigation\"] = t.domainLookupStart - t.navigationStart + \"ms\";\n }\n if (t.domainLookupEnd && t.domainLookupStart) {\n systemsInfo[\"dns\"] = t.domainLookupEnd - t.domainLookupStart + \"ms\";\n }\n if (t.connectEnd && t.connectStart) {\n if (t.connectEnd && t.secureConnectionStart) {\n systemsInfo[\"tcp (ssl)\"] = t.connectEnd - t.connectStart + \"ms (\" + (t.connectEnd - t.secureConnectionStart) + \"ms)\";\n } else {\n systemsInfo[\"tcp\"] = t.connectEnd - t.connectStart + \"ms\";\n }\n }\n if (t.responseStart && t.requestStart) {\n systemsInfo[\"request\"] = t.responseStart - t.requestStart + \"ms\";\n }\n if (t.responseEnd && t.responseStart) {\n systemsInfo[\"response\"] = t.responseEnd - t.responseStart + \"ms\";\n }\n if (t.domComplete && t.domLoading) {\n if (t.domContentLoadedEventStart && t.domLoading) {\n systemsInfo[\"domComplete (domLoaded)\"] = t.domComplete - t.domLoading + \"ms (\" + (t.domContentLoadedEventStart - t.domLoading) + \"ms)\";\n } else {\n systemsInfo[\"domComplete\"] = t.domComplete - t.domLoading + \"ms\";\n }\n }\n if (t.loadEventEnd && t.loadEventStart) {\n systemsInfo[\"loadEvent\"] = t.loadEventEnd - t.loadEventStart + \"ms\";\n }\n if (t.navigationStart && t.loadEventEnd) {\n systemsInfo[\"total (DOM)\"] = t.loadEventEnd - t.navigationStart + \"ms (\" + (t.domComplete - t.navigationStart) + \"ms)\";\n }\n }\n }, 0);\n\n return systemsInfo;\n }\n\n /**\n * 监听事件\n * @param {Window | Element} target\n * @param {String} type\n * @param {Function} handler\n */\n protected addEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.addEventListener) {\n target.addEventListener(type, handler, false);\n } else {\n target.attachEvent &&\n target.attachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n false\n );\n }\n };\n\n /**\n * 移除监听事件\n * @param {Element} target\n * @param {String} type\n * @param {Funtion} handler\n */\n protected removeEventListener = (target: Target, type: string, handler: (e: Event) => void) => {\n if (target.removeEventListener) {\n target.removeEventListener(type, handler);\n } else {\n target.detachEvent &&\n target.detachEvent(\n \"on\" + type,\n function (event) {\n return handler.call(target, event);\n },\n true\n );\n }\n };\n\n /**\n * 重写history[pushState][replaceState]方法\n */\n public rewriteHistory = () => {\n const history = window.history;\n\n const historyWrap = function (type: \"pushState\" | \"replaceState\") {\n const history = window.history;\n const orig: any = history[type];\n const e: any = new Event(type);\n return function () {\n const rv = orig.apply(history, arguments);\n e.arguments = arguments;\n window.dispatchEvent(e);\n return rv;\n };\n };\n\n // 重写\n if (!!window.history.pushState) {\n history.pushState = historyWrap(\"pushState\");\n history.replaceState = historyWrap(\"replaceState\");\n }\n };\n\n /**\n * @description 检验是否是对象\n */\n public isObject(obj) {\n if (obj == null) {\n return false;\n } else {\n return toString.call(obj) == \"[object Object]\";\n }\n }\n\n public isUndefined(obj) {\n return obj === void 0;\n }\n\n public isArray =\n Array.isArray ||\n function (obj) {\n return toString.call(obj) === \"[object Array]\";\n };\n\n public isString(obj) {\n return toString.call(obj) == \"[object String]\";\n }\n\n public isDate(obj) {\n return toString.call(obj) == \"[object Date]\";\n }\n\n public isBoolean(obj) {\n return toString.call(obj) == \"[object Boolean]\";\n }\n\n public isNumber(obj) {\n return toString.call(obj) == \"[object Number]\" && /[\\d\\.]+/.test(String(obj));\n }\n\n public isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n }\n\n public isFunction(f) {\n if (!f) {\n return false;\n }\n const type = toString.call(f);\n return type == \"[object Function]\" || type == \"[object AsyncFunction]\";\n }\n\n public isJSONString(str) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n }\n\n /**\n * 将json序列化成json字符串\n * @param obj\n * @returns {[JsonString]} [json字符串]\n */\n protected formatJsonString = (obj): string => {\n try {\n return JSON.stringify(obj, null, \" \");\n } catch (e) {\n return JSON.stringify(obj);\n }\n };\n\n public nativeForEach = Array.prototype.forEach;\n public slice = Array.prototype.slice;\n public hasOwnProperty = Object.prototype.hasOwnProperty;\n public breaker = {};\n\n /**\n * @description 循环遍历\n */\n public each = (obj, iterator, context?: null) => {\n if (obj == null) {\n return false;\n }\n\n if (this.nativeForEach && obj.forEach === this.nativeForEach) {\n obj.forEach(iterator, context);\n } else if (this.isArray(obj) && obj.length === +obj.length) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === this.breaker) {\n return false;\n }\n }\n } else {\n for (let key in obj) {\n if (this.hasOwnProperty.call(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === this.breaker) {\n return false;\n }\n }\n }\n }\n };\n\n public _decodeURIComponent(val) {\n let result = val;\n try {\n result = decodeURIComponent(val);\n } catch (e) {\n result = val;\n }\n return result;\n }\n\n public getMainHost() {\n let key = `mh_${Math.random()}`;\n let keyR = new RegExp(`(^|;)\\\\s*${key}=12345`);\n let expiredTime = new Date(0);\n let domain = document.domain;\n let domainList = domain.split(\".\");\n\n let urlItems = [];\n // 主域名一定会有两部分组成\n urlItems.unshift(domainList.pop());\n // 慢慢从后往前测试\n while (domainList.length) {\n urlItems.unshift(domainList.pop());\n let mainHost = urlItems.join(\".\");\n let cookie = `${key}=${12345};domain=.${mainHost}`;\n\n document.cookie = cookie;\n\n //如果cookie存在,则说明域名合法\n if (keyR.test(document.cookie)) {\n document.cookie = `${cookie};expires=${expiredTime}`;\n return mainHost;\n }\n }\n }\n\n protected getDomIndex = (el: Element): number => {\n if (!el.parentNode) return -1;\n let i = 0;\n const nodeName = el.tagName;\n const list = el.parentNode.children;\n for (let n = 0; n < list.length; n++) {\n if (list[n].tagName === nodeName) {\n if (el === list[n]) {\n return i;\n } else {\n i++;\n }\n }\n }\n return -1;\n };\n\n protected selector = (el: Element): string => {\n const i = el.parentNode && 9 == el.parentNode.nodeType ? -1 : this.getDomIndex(el);\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\"))) {\n return \"#\" + el.getAttribute(\"id\");\n } else {\n return el.tagName.toLowerCase() + (~i ? \":nth-of-type(\" + (i + 1) + \")\" : \"\");\n }\n };\n\n public getDomSelector = (el: any, arr?: string[]) => {\n if (!el || !el.parentNode || !el.parentNode.children) {\n return false;\n }\n arr = arr && arr.join ? arr : [];\n const name = el.nodeName.toLowerCase();\n if (!el || name === \"body\" || 1 != el.nodeType) {\n arr.unshift(\"body\");\n return arr.join(\" > \");\n }\n arr.unshift(this.selector(el));\n if (el.getAttribute && el.getAttribute(\"id\") && /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(el.getAttribute(\"id\"))) return arr.join(\" > \");\n return this.getDomSelector(el.parentNode, arr);\n };\n\n /**\n * @description 增强cookie操作\n */\n public getCookie = function (name) {\n const nameEQ = name + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == \" \") {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) == 0) {\n return this._decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n }\n return null;\n };\n public setCookie = function (name: string, value: string | number, days?: number) {\n let cdomain = \"\",\n expires = \"\",\n secure = \"\",\n samesite = \"\";\n days = days == null ? 73000 : days;\n\n const domain = this.getMainHost();\n cdomain = domain ? \"; domain=\" + domain : \"\";\n\n if (days !== 0) {\n const date = new Date();\n if (String(days).slice(-1) === \"s\") {\n date.setTime(date.getTime() + Number(String(days).slice(0, -1)) * 1000);\n } else {\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n }\n\n expires = \"; expires=\" + date.toUTCString();\n }\n\n function getValid(data) {\n if (data) {\n return data;\n } else {\n return false;\n }\n }\n let valid_name = \"\";\n let valid_value = \"\";\n let valid_domain = \"\";\n if (name) {\n valid_name = getValid(name);\n }\n if (value) {\n valid_value = getValid(value);\n }\n if (cdomain) {\n valid_domain = getValid(cdomain);\n }\n if (valid_name && valid_value) {\n document.cookie = valid_name + \"=\" + encodeURIComponent(valid_value) + expires + \"; path=/\" + valid_domain + samesite + secure;\n }\n };\n public removeCookie = (name) => {\n this.setCookie(name, \"\", -1);\n };\n\n /**\n * 获取当前时间戳\n * @return {number} [当前时间戳]\n */\n public getTimeStamp = (): number => {\n return new Date().getTime();\n };\n\n /**\n * 获取 UUID\n * @return {string} [UUID唯一值]\n */\n public uuid = () => {\n return \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == \"x\" ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n };\n\n /**\n * 获取设备Id\n * @return {number} [设备Id]\n */\n public getDistinctId = () => {\n let distinctId = this.getCookie(\"distinctId\");\n if (distinctId) return distinctId;\n distinctId = this.uuid();\n this.setCookie(\"distinctId\", distinctId);\n return distinctId;\n };\n\n /**\n * 获取url中的参数\n * @param {[string]} name [参数名]\n * @return {[string]} [参数值]\n */\n public getQueryValue = (name?: string): string | null | JsonProps => {\n const _href = decodeURI(window.location.href);\n const queryArr = _href.match(new RegExp(\"[?&][^?&]+=[^?&]+\", \"g\")) || [];\n const paramsObj: JsonProps = {};\n for (let i = 0; i < queryArr.length; i++) {\n const _item = queryArr[i].replace(/\\?|\\&/, \"\");\n const pair = _item.split(\"=\");\n if (pair[0] === name) {\n return pair[1];\n } else {\n paramsObj[pair[0]] = pair[1];\n }\n }\n return name ? null : paramsObj;\n };\n\n /**\n *\n * @param {[object]} para [ajax参数]\n * @returns\n */\n public ajax = (para: any) => {\n para.timeout = para.timeout || 30000;\n\n para.credentials = typeof para.credentials === \"undefined\" ? true : para.credentials;\n\n function getJSON(data) {\n if (!data) {\n return \"\";\n }\n try {\n return JSON.parse(data);\n } catch (e) {\n return {};\n }\n }\n\n const g = this.xhr(para.cors);\n if (!g) {\n return false;\n }\n\n if (!para.type) {\n para.type = para.data ? \"POST\" : \"GET\";\n }\n\n const oldsuccess = para.success;\n const olderror = para.error;\n let errorTimer;\n\n const abort = () => {\n try {\n if (this.isObject(g) && g.abort) {\n g.abort();\n }\n } catch (error) {\n this.printLog(error);\n }\n\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n para.error && para.error();\n g.onreadystatechange = null;\n g.onload = null;\n g.onerror = null;\n }\n };\n\n para.success = function (data) {\n oldsuccess(data);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n para.error = function (err) {\n olderror(err);\n if (errorTimer) {\n clearTimeout(errorTimer);\n errorTimer = null;\n }\n };\n errorTimer = setTimeout(function () {\n abort();\n }, para.timeout);\n\n g.onreadystatechange = function () {\n try {\n if (g.readyState == 4) {\n if ((g.status >= 200 && g.status < 300) || g.status == 304) {\n para.success(getJSON(g.responseText));\n } else {\n para.error(getJSON(g.responseText), g.status);\n }\n g.onreadystatechange = null;\n g.onload = null;\n }\n } catch (e) {\n g.onreadystatechange = null;\n g.onload = null;\n }\n };\n\n g.open(para.type, para.url, true);\n\n try {\n if (para.credentials) {\n g.withCredentials = true;\n }\n if (this.isObject(para.header)) {\n this.each(para.header, function (v, i) {\n g.setRequestHeader && g.setRequestHeader(i, v);\n });\n }\n\n if (para.data) {\n if (!para.cors) {\n g.setRequestHeader && g.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n }\n if (para.contentType === \"application/json\") {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/json; charset=UTF-8\");\n } else {\n g.setRequestHeader && g.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n }\n }\n } catch (e) {\n this.printLog(e);\n }\n\n g.send(para.data || null);\n };\n public xhr = (cors) => {\n if (cors) {\n if (typeof window.XMLHttpRequest !== \"undefined\" && \"withCredentials\" in new XMLHttpRequest()) {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n } else if (typeof window.XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n } else {\n return null;\n }\n };\n\n /**\n * sendBeacon请求\n * @param {[string]} url\n * @param {[object]} params\n */\n public sendBeacon = (para: any): Promise<{ message: string }> => {\n if (typeof navigator === \"object\" && typeof navigator.sendBeacon === \"function\") {\n // const headers = {\n // type: 'application/json'\n // };\n // const blob = new Blob([JSON.stringify(data.params)], headers);\n navigator.sendBeacon(para.url, new URLSearchParams(JSON.stringify(para.data || {})));\n return Promise.resolve({ message: \"发送成功!\" });\n } else {\n return Promise.reject({ message: \"不支持sendBeacon,发送失败!\" });\n }\n };\n}\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__assign","assign","t","s","i","n","arguments","length","apply","this","_super","_this","PageView","WebClick","PageRetained","CustomTrack","initParams","preset","pathname","window","location","currentUrl","href","pageKey","replace","substr","systemsInfo","getSystemsInfo","setCookie","getTimeStamp","presetParams","each","val","key","undefined","config","test","printLog","listener","unlistener","userId","includes","_a","desc","partkey","business","params","getParams","event","itemKey","getItemKey","extroInfo","sendAjax","isTrackSinglePage","rewriteHistory","addSinglePageEvent","onPageViewCallback","historyType","addEventListener","onClickCallback","singlePageEvent","history","pushState","historyName","removeEventListener","e","target","dataset","partKey","position","pageX","pageY","id","className","targetEle","nodeName","eventDescMap","pointerType","elementSelector","getDomSelector","ORGIN","origin","sendPageViewData","type","targetUrl","_b","_c","appKey","sdkVersion","siteId","pageWidth","innerWidth","pageHeight","innerHeight","screenWidth","screen","width","screenHeight","height","requestTime","deviceId","getDistinctId","privateParamMap","urlParams","getQueryValue","userInfo","sendRetained","serverUrl","sendTimeout","contentType","Promise","resolve","reject","ajax","url","data","JSON","stringify","credentials","timeout","cors","success","res","error","err","indexOf","__time","getCookie","retainedStartTime","retainedData","sendBeacon","finally","toString","filter","reduce","str","showLog","autoTrack","useClientTime","queueTimeout","TypeError","String","__","constructor","create","__extends","WebTracking","callback","userAgentInfo","navigator","userAgent","Agents","flag","v","handler","attachEvent","detachEvent","historyWrap","orig","Event","rv","dispatchEvent","replaceState","isArray","obj","forEach","slice","iterator","context","nativeForEach","l","breaker","el","parentNode","tagName","list","children","nodeType","getDomIndex","getAttribute","toLowerCase","arr","join","name","unshift","selector","nameEQ","ca","document","cookie","split","c","charAt","substring","_decodeURIComponent","value","days","cdomain","expires","domain","getMainHost","date","Date","setTime","getTime","Number","toUTCString","getValid","valid_name","valid_value","valid_domain","encodeURIComponent","r","Math","random","distinctId","uuid","queryArr","decodeURI","match","RegExp","paramsObj","pair","para","getJSON","parse","g","xhr","errorTimer","oldsuccess","olderror","clearTimeout","setTimeout","isObject","abort","onreadystatechange","onload","onerror","readyState","status","responseText","open","withCredentials","header","setRequestHeader","send","XMLHttpRequest","URLSearchParams","message","WebTrackingTools","_i","rest","formatJsonString","console","log","ua","logMsg","language","wxVersionMatch","wxVersion","ipod","ipad","iphone","android","mac","push","getPlatformType","network","performance","msPerformance","webkitPerformance","timing","navigationStart","domainLookupStart","domainLookupEnd","connectEnd","connectStart","secureConnectionStart","responseStart","requestStart","responseEnd","domComplete","domLoading","domContentLoadedEventStart","loadEventEnd","loadEventStart","f","result","decodeURIComponent","keyR","expiredTime","domainList","urlItems","pop","mainHost"],"mappings":"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"}
|