reporting-lib 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +15 -21
  2. package/dist/api/fetch.d.ts +2 -0
  3. package/dist/api/fetch.d.ts.map +1 -0
  4. package/dist/api/fetch.js +48 -0
  5. package/dist/api/fetch.js.map +1 -0
  6. package/dist/api/index.d.ts +2 -0
  7. package/dist/api/index.d.ts.map +1 -0
  8. package/dist/api/index.js +7 -0
  9. package/dist/api/index.js.map +1 -0
  10. package/dist/api/xhr.d.ts +2 -0
  11. package/dist/api/xhr.d.ts.map +1 -0
  12. package/dist/api/xhr.js +45 -0
  13. package/dist/api/xhr.js.map +1 -0
  14. package/dist/config/index.d.ts +10 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/index.js +22 -0
  17. package/dist/config/index.js.map +1 -0
  18. package/dist/error/index.d.ts +2 -0
  19. package/dist/error/index.d.ts.map +1 -0
  20. package/dist/error/index.js +113 -0
  21. package/dist/error/index.js.map +1 -0
  22. package/dist/performance/index.d.ts +2 -0
  23. package/dist/performance/index.d.ts.map +1 -0
  24. package/dist/performance/index.js +19 -0
  25. package/dist/performance/index.js.map +1 -0
  26. package/dist/performance/routeChange.d.ts +11 -0
  27. package/dist/performance/routeChange.d.ts.map +1 -0
  28. package/dist/performance/routeChange.js +52 -0
  29. package/dist/performance/routeChange.js.map +1 -0
  30. package/dist/report/index.d.ts +11 -0
  31. package/dist/report/index.d.ts.map +1 -0
  32. package/dist/report/index.js +75 -0
  33. package/dist/report/index.js.map +1 -0
  34. package/dist/util/cache.d.ts +4 -0
  35. package/dist/util/cache.d.ts.map +1 -0
  36. package/dist/util/cache.js +16 -0
  37. package/dist/util/cache.js.map +1 -0
  38. package/dist/util/captureEvent.d.ts +3 -0
  39. package/dist/util/captureEvent.d.ts.map +1 -0
  40. package/dist/util/captureEvent.js +13 -0
  41. package/dist/util/captureEvent.js.map +1 -0
  42. package/dist/util/getUniqueID.d.ts +2 -0
  43. package/dist/util/getUniqueID.d.ts.map +1 -0
  44. package/dist/util/getUniqueID.js +4 -0
  45. package/dist/util/getUniqueID.js.map +1 -0
  46. package/dist/util/paths.d.ts +4 -0
  47. package/dist/util/paths.d.ts.map +1 -0
  48. package/dist/util/paths.js +43 -0
  49. package/dist/util/paths.js.map +1 -0
  50. package/dist/util/tool.d.ts +14 -0
  51. package/dist/util/tool.d.ts.map +1 -0
  52. package/dist/util/tool.js +114 -0
  53. package/dist/util/tool.js.map +1 -0
  54. package/package.json +1 -1
package/README.md CHANGED
@@ -29,9 +29,11 @@ import monitor from 'reporting-lib';
29
29
  // Initialize the monitoring system
30
30
  monitor.init({
31
31
  // Your configuration options here
32
- apiEndpoint: 'https://your-api.com/collect',
33
- appName: 'MyApp',
34
- environment: 'production'
32
+ reportUrl: 'https://your-api.com/collect',
33
+ source: 'web',
34
+ userId: 'user123',
35
+ trackerAll: true,
36
+ version: '1.0.0'
35
37
  });
36
38
  ```
37
39
 
@@ -39,13 +41,11 @@ monitor.init({
39
41
 
40
42
  The `init` method accepts the following configuration options:
41
43
 
42
- - `apiEndpoint`: URL where monitoring data will be sent
43
- - `appName`: Name of your application
44
- - `environment`: Environment (development, staging, production)
45
- - `sampleRate`: Sampling rate for data collection (0-1)
46
- - `enableErrorTracking`: Enable/disable error monitoring (default: true)
47
- - `enablePerformanceTracking`: Enable/disable performance monitoring (default: true)
48
- - `enableApiTracking`: Enable/disable API monitoring (default: true)
44
+ - `reportUrl`: URL where monitoring data will be sent (default: 'http://localhost:3001/report/actions')
45
+ - `source`: Platform identifier (default: 'mbp')
46
+ - `userId`: User identifier (default: '')
47
+ - `trackerAll`: Whether to enable full tracking (default: false)
48
+ - `version`: Version string for the application (optional)
49
49
 
50
50
  ### Example
51
51
 
@@ -53,13 +53,11 @@ The `init` method accepts the following configuration options:
53
53
  import monitor from 'reporting-lib';
54
54
 
55
55
  monitor.init({
56
- apiEndpoint: 'https://analytics.myapp.com/events',
57
- appName: 'E-commerce App',
58
- environment: 'production',
59
- sampleRate: 1.0,
60
- enableErrorTracking: true,
61
- enablePerformanceTracking: true,
62
- enableApiTracking: true
56
+ reportUrl: 'https://analytics.myapp.com/events',
57
+ source: 'web',
58
+ userId: 'user123',
59
+ trackerAll: true,
60
+ version: '1.0.0'
63
61
  });
64
62
  ```
65
63
 
@@ -69,10 +67,6 @@ monitor.init({
69
67
 
70
68
  Initializes the monitoring system with the specified configuration.
71
69
 
72
- ### `monitor.setConfig(options)`
73
-
74
- Updates the configuration after initialization.
75
-
76
70
  ## Development
77
71
 
78
72
  ```bash
@@ -0,0 +1,2 @@
1
+ export default function fetch(): void;
2
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/api/fetch.js"],"names":[],"mappings":"AAkDA,sCAEC"}
@@ -0,0 +1,48 @@
1
+ import { lazyReportCache } from '../report/index.js';
2
+ const originalFetch = window.fetch;
3
+ function overWriteFetch() {
4
+ window.fetch = function newFetch(url, config) {
5
+ const startTime = Date.now();
6
+ const reportData = {
7
+ // startTime,
8
+ requestUrl: url,
9
+ method: config?.method || 'GET',
10
+ subType: 'fetch',
11
+ };
12
+ return originalFetch(url, config)
13
+ .then(res => {
14
+ const endTime = Date.now();
15
+ reportData.duration = endTime - startTime;
16
+ reportData.status = res.status;
17
+ const clonedRes = res.clone();
18
+ if (!clonedRes.ok) {
19
+ reportData.code = '';
20
+ if (url.indexOf('.js.map') === -1) {
21
+ lazyReportCache('api', reportData);
22
+ }
23
+ ;
24
+ }
25
+ else {
26
+ if (url.indexOf('.js.map') === -1) {
27
+ clonedRes.json().then(data => {
28
+ reportData.code = data.code;
29
+ lazyReportCache('api', reportData);
30
+ });
31
+ }
32
+ }
33
+ return res;
34
+ })
35
+ .catch(err => {
36
+ const endTime = Date.now();
37
+ reportData.duration = endTime - startTime;
38
+ reportData.status = 0;
39
+ reportData.code = '';
40
+ lazyReportCache('api', reportData);
41
+ return err;
42
+ });
43
+ };
44
+ }
45
+ export default function fetch() {
46
+ overWriteFetch();
47
+ }
48
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/api/fetch.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAEpD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAEnC,SAAS,cAAc;IACrB,MAAM,CAAC,KAAK,GAAG,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,UAAU,GAAG;YACjB,aAAa;YACb,UAAU,EAAC,GAAG;YACd,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE,OAAO;SACjB,CAAA;QAED,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC;aAC9B,IAAI,CAAC,GAAG,CAAC,EAAE;YACV,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,UAAU,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;YAC1C,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAE/B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;gBAClB,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC;gBACrB,IAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC;oBAChC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACrC,CAAC;gBAAA,CAAC;YACJ,CAAC;iBAAI,CAAC;gBACJ,IAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC;oBAChC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC3B,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;wBAC5B,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;oBACrC,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,UAAU,CAAC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;YAC1C,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YACtB,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC;YAErB,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAEnC,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAA;IACN,CAAC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,KAAK;IAC3B,cAAc,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function api(): void;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.js"],"names":[],"mappings":"AAGA,oCAGC"}
@@ -0,0 +1,7 @@
1
+ import xhr from './xhr.js';
2
+ import fetch from './fetch.js';
3
+ export default function api() {
4
+ xhr();
5
+ fetch();
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.js"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,GAAG,EAAE,CAAC;IACN,KAAK,EAAE,CAAC;AACV,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function xhr(): void;
2
+ //# sourceMappingURL=xhr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../src/api/xhr.js"],"names":[],"mappings":"AAqDA,oCAEC"}
@@ -0,0 +1,45 @@
1
+ import { lazyReportCache } from '../report/index.js';
2
+ const originalPrototype = XMLHttpRequest.prototype;
3
+ const originalOpen = originalPrototype.open;
4
+ const originalSend = originalPrototype.send;
5
+ function overWriteOpenAndSend() {
6
+ originalPrototype.open = function newOpen(...args) {
7
+ this.url = args[1];
8
+ this.method = args[0];
9
+ originalOpen.apply(this, args);
10
+ };
11
+ originalPrototype.send = function newSend(...args) {
12
+ this.startTime = Date.now();
13
+ const onLoadEnd = () => {
14
+ this.endTime = Date.now();
15
+ this.duration = this.endTime - this.startTime;
16
+ const { status, duration, startTime, endTime, url, method, response } = this;
17
+ let code = '';
18
+ try {
19
+ code = JSON.parse(response).code;
20
+ }
21
+ catch {
22
+ }
23
+ const reportData = {
24
+ status,
25
+ duration,
26
+ // startTime,
27
+ // endTime,
28
+ requestUrl: url,
29
+ method: method || 'GET',
30
+ code,
31
+ // success: status >= 200 && status < 300,
32
+ subType: 'xhr',
33
+ };
34
+ lazyReportCache('api', reportData);
35
+ this.removeEventListener('loadend', onLoadEnd, true);
36
+ };
37
+ //当请求结束时触发,无论请求成功 (load) 还是失败 (abort 或 error)
38
+ this.addEventListener('loadend', onLoadEnd, true);
39
+ originalSend.apply(this, args);
40
+ };
41
+ }
42
+ export default function xhr() {
43
+ overWriteOpenAndSend();
44
+ }
45
+ //# sourceMappingURL=xhr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr.js","sourceRoot":"","sources":["../../src/api/xhr.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,iBAAiB,GAAG,cAAc,CAAC,SAAS,CAAC;AACnD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAC5C,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAE5C,SAAS,oBAAoB;IAC3B,iBAAiB,CAAC,IAAI,GAAG,SAAS,OAAO,CAAC,GAAG,IAAI;QAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAA;IACD,iBAAiB,CAAC,IAAI,GAAG,SAAS,OAAO,CAAC,GAAG,IAAI;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAE9C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;YAC5E,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;YACnC,CAAC;YAAA,MAAM,CAAC;YAER,CAAC;YAED,MAAM,UAAU,GAAG;gBACjB,MAAM;gBACN,QAAQ;gBACR,aAAa;gBACb,WAAW;gBACX,UAAU,EAAC,GAAG;gBACd,MAAM,EAAE,MAAM,IAAI,KAAK;gBACvB,IAAI;gBACJ,0CAA0C;gBAC1C,OAAO,EAAE,KAAK;aACf,CAAA;YAED,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAEnC,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC,CAAA;QAED,6CAA6C;QAC7C,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAClD,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAA;AAGH,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,oBAAoB,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export function setConfig(options: any): void;
2
+ export let version: string;
3
+ export default config;
4
+ declare namespace config {
5
+ let source: string;
6
+ let userId: string;
7
+ let reportUrl: string;
8
+ let trackerAll: boolean;
9
+ }
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.js"],"names":[],"mappings":"AAcA,8CASC;AAbD,2BAAwB"}
@@ -0,0 +1,22 @@
1
+ const config = {
2
+ // 项目名称
3
+ source: 'mbp', //使用平台
4
+ userId: '', //用户信息
5
+ //上报地址
6
+ reportUrl: 'http://localhost:3001/report/actions',
7
+ //是否全埋点
8
+ trackerAll: false,
9
+ };
10
+ export let version = '';
11
+ export default config;
12
+ export function setConfig(options) {
13
+ for (const key in config) {
14
+ if (options[key]) {
15
+ config[key] = options[key];
16
+ }
17
+ }
18
+ if (options['version']) {
19
+ version = options['version'];
20
+ }
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.js"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG;IACb,OAAO;IACP,MAAM,EAAC,KAAK,EAAE,MAAM;IACpB,MAAM,EAAE,EAAE,EAAE,MAAM;IAClB,MAAM;IACN,SAAS,EAAE,sCAAsC;IACjD,OAAO;IACP,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC;AAExB,eAAe,MAAM,CAAC;AAEtB,MAAM,UAAU,SAAS,CAAC,OAAO;IAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,IAAG,OAAO,CAAC,SAAS,CAAC,EAAC,CAAC;QACrB,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export default function error(): void;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/error/index.js"],"names":[],"mappings":"AA4DA,sCAoEC"}
@@ -0,0 +1,113 @@
1
+ import { lazyReportCache } from "../report/index.js";
2
+ import { detectionWhiteScreen, getFullBrowserInfo, getOSInfo } from '../util/tool.js';
3
+ import { version } from '../config/index.js';
4
+ const browserInfor = getFullBrowserInfo();
5
+ const reportData = {
6
+ userAgent: browserInfor.name + browserInfor.version,
7
+ platform: getOSInfo(),
8
+ };
9
+ /**
10
+ * 这个正则表达式用于匹配 JavaScript 错误栈中的堆栈跟踪信息中的单个条目,其中包含文件名、行号和列号等信息。
11
+ * 具体来说,它匹配以下格式的文本:
12
+ * at functionName (filename:lineNumber:columnNumber)
13
+ * at filename:lineNumber:columnNumber
14
+ * at http://example.com/filename:lineNumber:columnNumber
15
+ * at https://example.com/filename:lineNumber:columnNumber
16
+ */
17
+ const FULL_MATCH = /^\s*at (?:(.*?) ?\()?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
18
+ //限制追溯的错误堆栈数量
19
+ const STACK_TRACE_LIMIT = 10;
20
+ //通过正则表达式解析一行的错误信息
21
+ function parseStackLine(line) {
22
+ const lineMatch = line.match(FULL_MATCH);
23
+ if (!lineMatch)
24
+ return {};
25
+ const filename = lineMatch[2] || '<anonymous>';
26
+ const functionName = lineMatch[1] || '';
27
+ const lineno = parseInt(lineMatch[3], 10) || undefined;
28
+ const colno = parseInt(lineMatch[4], 10) || undefined;
29
+ return {
30
+ filename,
31
+ functionName,
32
+ lineno,
33
+ colno
34
+ };
35
+ }
36
+ //解析错误堆栈
37
+ function parseStackFrames(error) {
38
+ const { stack } = error;
39
+ //如果没有stack直接返回[]
40
+ if (!stack)
41
+ return [];
42
+ const frames = [];
43
+ for (const line of stack.split('\n').slice(1)) {
44
+ const frame = parseStackLine(line); //分析一行的错误信息
45
+ if (frame.filename) {
46
+ //放入到堆栈错误信息数组中
47
+ frames.push(frame);
48
+ }
49
+ }
50
+ return frames.slice(0, STACK_TRACE_LIMIT);
51
+ }
52
+ export default function error() {
53
+ //资源错误没有冒泡,所以只能在捕获阶段采集获取错误
54
+ window.addEventListener('error', async function (event) {
55
+ const target = event.target;
56
+ //要判断是资源错误,还是js错误,很简单,直接判断事件对象有没有src或者href属性就可以了
57
+ if (target && (target.src || target.href)) {
58
+ //上报资源错误 todo...
59
+ const data = {
60
+ errorType: 'resource',
61
+ ...reportData,
62
+ msg: `加载${target.tagName}失败`,
63
+ version,
64
+ };
65
+ lazyReportCache('error', data);
66
+ }
67
+ else {
68
+ const errs = parseStackFrames(event.error);
69
+ let msg = event.message;
70
+ if (errs?.[0]) {
71
+ const { filename, functionName, lineno, colno } = errs[0];
72
+ msg = `${event.message},${filename},line:${lineno}:${colno}`;
73
+ }
74
+ const data = {
75
+ errorType: 'js',
76
+ msg,
77
+ ...reportData,
78
+ version,
79
+ };
80
+ lazyReportCache('error', data);
81
+ const isWhite = await detectionWhiteScreen();
82
+ if (isWhite) {
83
+ lazyReportCache('error', { ...data, errorType: 'whiteScreen' });
84
+ }
85
+ }
86
+ }, true);
87
+ //promise错误
88
+ window.addEventListener('unhandledrejection', function (event) {
89
+ const reason = event.reason;
90
+ const errs = parseStackFrames(reason);
91
+ let msg = reason;
92
+ if (errs?.[0]) {
93
+ const { filename, functionName, lineno, colno } = errs[0];
94
+ msg = `${event?.reason?.message || event?.reason},${filename},line:${lineno}:${colno}`;
95
+ }
96
+ const data = {
97
+ errorType: 'js',
98
+ msg,
99
+ ...reportData,
100
+ version,
101
+ };
102
+ lazyReportCache('error', data);
103
+ });
104
+ const observer = new MutationObserver(() => {
105
+ const iframe = document.querySelector('iframe[src*="about:blank"]');
106
+ if (iframe) {
107
+ console.warn('检测到报错 iframe,可能是 Umi 的错误提示页面');
108
+ observer.disconnect();
109
+ }
110
+ });
111
+ observer.observe(document.body, { childList: true, subtree: true });
112
+ }
113
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/error/index.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export default function performance(): void;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/performance/index.js"],"names":[],"mappings":"AAGA,4CAMC"}
@@ -0,0 +1,19 @@
1
+ import { onCLS, onFCP, onLCP, onTTFB, onINP } from "web-vitals";
2
+ import { lazyReportCache } from "../report/index.js";
3
+ export default function performance() {
4
+ onCLS(sendToAnalytics);
5
+ onINP(sendToAnalytics);
6
+ onLCP(sendToAnalytics);
7
+ onFCP(sendToAnalytics);
8
+ onTTFB(sendToAnalytics);
9
+ }
10
+ function sendToAnalytics(metric) {
11
+ console.log(metric);
12
+ const data = {
13
+ name: metric.name,
14
+ value: metric.value,
15
+ // rating: metric.rating,
16
+ };
17
+ lazyReportCache('performance', data);
18
+ }
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/performance/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,OAAO,UAAU,WAAW;IACjC,KAAK,CAAC,eAAe,CAAC,CAAC;IACvB,KAAK,CAAC,eAAe,CAAC,CAAC;IACvB,KAAK,CAAC,eAAe,CAAC,CAAC;IACvB,KAAK,CAAC,eAAe,CAAC,CAAC;IACvB,MAAM,CAAC,eAAe,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,MAAM;IAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG;QACX,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,yBAAyB;KAC1B,CAAA;IACD,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,11 @@
1
+ declare class SPAPerformance {
2
+ constructor(callback: any);
3
+ callback: any;
4
+ routeStartMark: string;
5
+ routeEndMark: string;
6
+ markRouteStart(): void;
7
+ markRouteEnd(): void;
8
+ observeFirstContentfulPaint(): void;
9
+ watchKeyElement(selector: any): void;
10
+ }
11
+ //# sourceMappingURL=routeChange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeChange.d.ts","sourceRoot":"","sources":["../../src/performance/routeChange.js"],"names":[],"mappings":"AAAA;IACE,2BAIC;IAHC,cAAwB;IACxB,uBAA0C;IAC1C,qBAAsC;IAGxC,uBAEC;IAED,qBAYC;IAED,oCAaC;IAED,qCAYC;CACF"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ class SPAPerformance {
3
+ constructor(callback) {
4
+ this.callback = callback;
5
+ this.routeStartMark = 'route-change-start';
6
+ this.routeEndMark = 'route-change-end';
7
+ }
8
+ markRouteStart() {
9
+ performance.mark(this.routeStartMark);
10
+ }
11
+ markRouteEnd() {
12
+ performance.mark(this.routeEndMark);
13
+ performance.measure('route-change-duration', this.routeStartMark, this.routeEndMark);
14
+ const measures = performance.getEntriesByName('route-change-duration');
15
+ if (measures.length > 0) {
16
+ const lastMeasure = measures[measures.length - 1];
17
+ this.callback('route-change-duration', lastMeasure.duration);
18
+ }
19
+ // 清理标记和测量,防止堆积
20
+ performance.clearMarks(this.routeStartMark);
21
+ performance.clearMarks(this.routeEndMark);
22
+ performance.clearMeasures('route-change-duration');
23
+ }
24
+ observeFirstContentfulPaint() {
25
+ // 这里用 web-vitals 的 onFCP 监听,或 PerformanceObserver
26
+ // 以示例简单用PerformanceObserver观察 FCP
27
+ const fcpObserver = new PerformanceObserver(list => {
28
+ for (const entry of list.getEntries()) {
29
+ if (entry.name === 'first-contentful-paint') {
30
+ this.callback('FCP', entry.startTime);
31
+ fcpObserver.disconnect();
32
+ break;
33
+ }
34
+ }
35
+ });
36
+ fcpObserver.observe({ type: 'paint', buffered: true });
37
+ }
38
+ watchKeyElement(selector) {
39
+ const el = document.querySelector(selector);
40
+ if (!el)
41
+ return;
42
+ const observer = new MutationObserver(() => {
43
+ // 这里简单假设有子节点或内容变就算渲染完成
44
+ if (el.childNodes.length > 0 || el.textContent.trim() !== '') {
45
+ this.markRouteEnd();
46
+ observer.disconnect();
47
+ }
48
+ });
49
+ observer.observe(el, { childList: true, subtree: true });
50
+ }
51
+ }
52
+ //# sourceMappingURL=routeChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeChange.js","sourceRoot":"","sources":["../../src/performance/routeChange.js"],"names":[],"mappings":";AAAA,MAAM,cAAc;IAClB,YAAY,QAAQ;QAClB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC;IACzC,CAAC;IAED,cAAc;QACZ,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,YAAY;QACV,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,WAAW,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC;QACvE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/D,CAAC;QACD,eAAe;QACf,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,WAAW,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACrD,CAAC;IAED,2BAA2B;QACzB,kDAAkD;QAClD,kCAAkC;QAClC,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE;YACjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACtC,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;oBAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;oBACtC,WAAW,CAAC,UAAU,EAAE,CAAC;oBACzB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,eAAe,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE;YAAE,OAAO;QAEhB,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACzC,uBAAuB;YACvB,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 由于我们有很多内容需要上报,
3
+ * 所以我这里为了简单区分和上报
4
+ * 用type来区分上报的内容是什么
5
+ * @param {string} type 上报类型 “error” | "action" | "api" | "performance"
6
+ * @param {Object} data 上报信息
7
+ * @param {boolean} isImmediate 是否立即上报,默认为false
8
+ */
9
+ export function report(type: string, data: Object, isImmediate?: boolean): void;
10
+ export function lazyReportCache(type: any, data: any, timeout?: number): void;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/report/index.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,6BAJW,MAAM,QACN,MAAM,gBACN,OAAO,QAiCjB;AAID,8EAkBC"}
@@ -0,0 +1,75 @@
1
+ import config from '../config/index.js';
2
+ import getUniqueID from "../util/getUniqueID.js";
3
+ import { getCache, addCache, clearCache } from '../util/cache.js';
4
+ const uniqueID = getUniqueID();
5
+ /**
6
+ * 由于我们有很多内容需要上报,
7
+ * 所以我这里为了简单区分和上报
8
+ * 用type来区分上报的内容是什么
9
+ * @param {string} type 上报类型 “error” | "action" | "api" | "performance"
10
+ * @param {Object} data 上报信息
11
+ * @param {boolean} isImmediate 是否立即上报,默认为false
12
+ */
13
+ export function report(type, data, isImmediate = false) {
14
+ if (config.reportUrl === null) {
15
+ console.error("请先配置上报地址");
16
+ return;
17
+ }
18
+ const reportData = JSON.stringify({
19
+ userId: config.userId, //用户id
20
+ source: config.source, //来源
21
+ type, //上报类型
22
+ url: window.location.href, //当前页面
23
+ data, //上报信息
24
+ });
25
+ //立即上传
26
+ if (isImmediate) {
27
+ sendBeacon(config.reportUrl, reportData);
28
+ return;
29
+ }
30
+ // 浏览器空闲时间进行上报
31
+ if (window.requestIdleCallback) {
32
+ window.requestIdleCallback(() => {
33
+ sendBeacon(config.reportUrl, reportData);
34
+ }, { timeout: 3000 });
35
+ }
36
+ else {
37
+ setTimeout(() => {
38
+ sendBeacon(config.reportUrl, reportData);
39
+ });
40
+ }
41
+ }
42
+ let timer = null;
43
+ //延迟上传,一定时间之后再进行上传
44
+ export function lazyReportCache(type, data, timeout = 3000) {
45
+ //把数据加入到map缓存中
46
+ addCache(type, data);
47
+ clearTimeout(timer);
48
+ timer = setTimeout(() => {
49
+ //获取缓存中的数据
50
+ const dataMap = getCache();
51
+ if (dataMap.size) {
52
+ for (const [type, data] of dataMap) {
53
+ report(type, data);
54
+ }
55
+ clearCache();
56
+ }
57
+ }, timeout);
58
+ }
59
+ //Navigator.sendBeacon()方式上报
60
+ function sendBeacon(reportUrl, reportData) {
61
+ if (navigator.sendBeacon) {
62
+ navigator.sendBeacon(reportUrl, reportData);
63
+ }
64
+ else {
65
+ reportWithXHR(reportUrl, reportData);
66
+ }
67
+ }
68
+ // XMLHttpRequest方式上报
69
+ function reportWithXHR(reportUrl, reportData) {
70
+ const xhr = new XMLHttpRequest();
71
+ xhr.open('POST', reportUrl, true);
72
+ xhr.setRequestHeader('Content-Type', 'application/json');
73
+ xhr.send(reportData);
74
+ }
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/report/index.js"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAC,QAAQ,EAAC,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;AAC/B;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,KAAK;IACpD,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI;QAC3B,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM;QACjC,IAAI,EAAE,MAAM;KACb,CAAC,CAAA;IAEF,MAAM;IACN,IAAI,WAAW,EAAE,CAAC;QAChB,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC/B,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE;YAC9B,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxB,CAAC;SAAK,CAAC;QACL,UAAU,CAAC,GAAG,EAAE;YACd,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC;AAEH,CAAC;AAED,IAAI,KAAK,GAAG,IAAI,CAAC;AACjB,kBAAkB;AAClB,MAAM,UAAU,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IACxD,cAAc;IACd,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAErB,YAAY,CAAC,KAAK,CAAC,CAAC;IACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QACtB,UAAU;QACV,MAAM,OAAO,GAAG,QAAQ,EAAE,CAAC;QAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACrB,CAAC;YAED,UAAU,EAAE,CAAC;QACf,CAAC;IAEH,CAAC,EAAC,OAAO,CAAC,CAAA;AACZ,CAAC;AAGD,4BAA4B;AAC5B,SAAS,UAAU,CAAC,SAAS,EAAE,UAAU;IACvC,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;QACzB,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;SACI,CAAC;QACJ,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;AAEH,CAAC;AAED,qBAAqB;AACrB,SAAS,aAAa,CAAC,SAAS,EAAE,UAAU;IAC1C,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;IACjC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAClC,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IACzD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export function getCache(): Map<any, any>;
2
+ export function addCache(type: any, data: any): void;
3
+ export function clearCache(): void;
4
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/util/cache.js"],"names":[],"mappings":"AAKA,0CAEC;AAED,qDAIC;AAED,mCAEC"}
@@ -0,0 +1,16 @@
1
+ //把上报的数据存储在map键值对中
2
+ //key就是上报的类型
3
+ //value就是上报的数据,是一个数组
4
+ const cache = new Map();
5
+ export function getCache() {
6
+ return cache;
7
+ }
8
+ export function addCache(type, data) {
9
+ //如果有这个类型的数据,就往数组中添加
10
+ //没有就在map中创建新的类型,并且将data放入到数组中
11
+ cache.get(type) ? cache.get(type).push(data) : cache.set(type, [data]);
12
+ }
13
+ export function clearCache() {
14
+ cache.clear();
15
+ }
16
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/util/cache.js"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,YAAY;AACZ,oBAAoB;AACpB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;AAExB,MAAM,UAAU,QAAQ;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAI,EAAE,IAAI;IACjC,oBAAoB;IACpB,8BAA8B;IAC9B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare function _default(): any;
2
+ export default _default;
3
+ //# sourceMappingURL=captureEvent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureEvent.d.ts","sourceRoot":"","sources":["../../src/util/captureEvent.js"],"names":[],"mappings":"AAUe,iCAEd"}
@@ -0,0 +1,13 @@
1
+ let lastCaptureEvent;
2
+ ['click', 'mousedown', 'keyup', 'scroll', 'mouseover', 'mousewheel'].forEach(eventType => {
3
+ document.addEventListener(eventType, event => {
4
+ lastCaptureEvent = event;
5
+ }, {
6
+ capture: true,
7
+ passive: true
8
+ });
9
+ });
10
+ export default () => {
11
+ return lastCaptureEvent;
12
+ };
13
+ //# sourceMappingURL=captureEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captureEvent.js","sourceRoot":"","sources":["../../src/util/captureEvent.js"],"names":[],"mappings":"AAAA,IAAI,gBAAgB,CAAC;AACrB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;IACrF,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;QACzC,gBAAgB,GAAG,KAAK,CAAC;IAC7B,CAAC,EAAE;QACC,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI;KAChB,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,eAAe,GAAG,EAAE;IAClB,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export default function getUniqueID(): string;
2
+ //# sourceMappingURL=getUniqueID.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUniqueID.d.ts","sourceRoot":"","sources":["../../src/util/getUniqueID.js"],"names":[],"mappings":"AAAA,8CAEC"}
@@ -0,0 +1,4 @@
1
+ export default function getUniqueID() {
2
+ return `ys-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`;
3
+ }
4
+ //# sourceMappingURL=getUniqueID.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getUniqueID.js","sourceRoot":"","sources":["../../src/util/getUniqueID.js"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,WAAW;IACjC,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAA;AAC1E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export function getComposedPathEle(e: any): any;
2
+ export function getComposedPath(e: any): any;
3
+ export function getPaths(e: any): any;
4
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/util/paths.js"],"names":[],"mappings":"AAAO,gDAqBN;AAEM,6CAgBN;AAEM,sCAKN"}
@@ -0,0 +1,43 @@
1
+ export const getComposedPathEle = (e) => {
2
+ if (!e)
3
+ return [];
4
+ //如果支持path属性,直接返回path属性
5
+ //如果不支持,就通过composedPath方法获取
6
+ let pathArr = e.path || (e.composedPath && e.composedPath());
7
+ if ((pathArr || []).length) {
8
+ return pathArr;
9
+ }
10
+ //composedPath方法不兼容,手动获取
11
+ let target = e.target;
12
+ const composedPath = [];
13
+ while (target && target.parentNode) {
14
+ composedPath.push(target);
15
+ target = target.parentNode;
16
+ }
17
+ composedPath.push(document, window);
18
+ return composedPath;
19
+ };
20
+ export const getComposedPath = (e) => {
21
+ if (!e)
22
+ return [];
23
+ const composedPathEle = getComposedPathEle(e);
24
+ const composedPath = composedPathEle.reverse().slice(2).map(ele => {
25
+ let selector = ele.tagName.toLowerCase();
26
+ if (ele.id) {
27
+ selector += `#${ele.id}`;
28
+ }
29
+ if (ele.className) {
30
+ selector += `.${ele.className}`;
31
+ }
32
+ return selector;
33
+ });
34
+ return composedPath;
35
+ };
36
+ export const getPaths = (e) => {
37
+ if (!e)
38
+ return '';
39
+ const composedPath = getComposedPath(e);
40
+ const selectors = composedPath.join(' > ');
41
+ return selectors;
42
+ };
43
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.js"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,EAAE;IACtC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,uBAAuB;IACvB,2BAA2B;IAC3B,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,OAAO,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;IAC7B,CAAC;IAED,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEpC,OAAO,YAAY,CAAC;AACtB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,EAAE;IACnC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,MAAM,eAAe,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAE9C,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAChE,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,QAAQ,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,QAAQ,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QAClC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC;AACnB,CAAC,CAAA"}
@@ -0,0 +1,14 @@
1
+ export function detectWhiteScreen({ samplePoints, whiteTags, onDetected, threshold, }?: {
2
+ samplePoints?: number | undefined;
3
+ whiteTags?: string[] | undefined;
4
+ onDetected?: ((isWhiteScreen: any, detail: any) => void) | undefined;
5
+ threshold?: number | undefined;
6
+ }): void;
7
+ export function debounce(fn: any, delay?: number, immediate?: boolean): (...args: any[]) => void;
8
+ export function detectionWhiteScreen(): any;
9
+ export function getFullBrowserInfo(): {
10
+ name: string;
11
+ version: string;
12
+ };
13
+ export function getOSInfo(): "Windows Phone" | "Windows" | "Android" | "iOS" | "macOS" | "Linux" | "Unknown OS";
14
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/util/tool.js"],"names":[],"mappings":"AAAO;;;;;SAoCN;AAEM,yEAGY,GAAG,WAAI,UAgBzB;AAaM,4CASN;AAEM;;;EA0BN;AACM,gHAuBN"}
@@ -0,0 +1,114 @@
1
+ export const detectWhiteScreen = ({ samplePoints = 6, whiteTags = ['HTML', 'BODY', "IFRAME"], onDetected = (isWhiteScreen, detail) => { }, threshold = 0.9, } = {}) => {
2
+ const viewportWidth = window.innerWidth;
3
+ const viewportHeight = window.innerHeight;
4
+ const points = [];
5
+ for (let i = 1; i <= samplePoints; i++) {
6
+ points.push([
7
+ viewportWidth / 2,
8
+ (viewportHeight / (samplePoints + 1)) * i,
9
+ ]);
10
+ }
11
+ console.log('points: ', points);
12
+ let whiteCount = 0;
13
+ const detail = [];
14
+ points.forEach(([x, y]) => {
15
+ const el = document.elementFromPoint(x, y);
16
+ const tag = el?.tagName || 'NULL';
17
+ detail.push({ x, y, tag });
18
+ if (!el || whiteTags.includes(tag)) {
19
+ whiteCount++;
20
+ }
21
+ });
22
+ const isWhite = whiteCount / samplePoints >= threshold;
23
+ onDetected(isWhite, detail);
24
+ };
25
+ export const debounce = (fn, delay = 300, immediate = false) => {
26
+ let timer = null;
27
+ return function (...args) {
28
+ const context = this;
29
+ if (timer)
30
+ clearTimeout(timer);
31
+ if (immediate && !timer) {
32
+ fn.apply(context, args);
33
+ }
34
+ timer = setTimeout(() => {
35
+ if (!immediate) {
36
+ fn.apply(context, args);
37
+ }
38
+ timer = null;
39
+ }, delay);
40
+ };
41
+ };
42
+ const debouncedDetectWhiteScreen = debounce((resolve) => {
43
+ detectWhiteScreen({
44
+ onDetected: (isWhite, detail) => {
45
+ console.log('isWhite: ', isWhite);
46
+ resolve(isWhite);
47
+ pendingPromise = null;
48
+ },
49
+ });
50
+ }, 1000);
51
+ let pendingPromise = null;
52
+ export const detectionWhiteScreen = () => {
53
+ if (!pendingPromise) {
54
+ pendingPromise = new Promise((resolve) => {
55
+ setTimeout(() => {
56
+ debouncedDetectWhiteScreen(resolve);
57
+ }, 3000);
58
+ });
59
+ }
60
+ return pendingPromise;
61
+ };
62
+ export const getFullBrowserInfo = () => {
63
+ const ua = navigator.userAgent;
64
+ let name = 'Unknown';
65
+ let version = 'Unknown';
66
+ if (/edg/i.test(ua)) {
67
+ name = 'Edge';
68
+ version = ua.match(/edg\/([\d\.]+)/i)?.[1];
69
+ }
70
+ else if (/opr/i.test(ua)) {
71
+ name = 'Opera';
72
+ version = ua.match(/opr\/([\d\.]+)/i)?.[1];
73
+ }
74
+ else if (/chrome/i.test(ua)) {
75
+ name = 'Chrome';
76
+ version = ua.match(/chrome\/([\d\.]+)/i)?.[1];
77
+ }
78
+ else if (/firefox/i.test(ua)) {
79
+ name = 'Firefox';
80
+ version = ua.match(/firefox\/([\d\.]+)/i)?.[1];
81
+ }
82
+ else if (/safari/i.test(ua) && !/chrome/i.test(ua)) {
83
+ name = 'Safari';
84
+ version = ua.match(/version\/([\d\.]+)/i)?.[1];
85
+ }
86
+ else if (/msie/i.test(ua) || /trident/i.test(ua)) {
87
+ name = 'Internet Explorer';
88
+ version = ua.match(/(msie\s|rv:)([\d\.]+)/i)?.[2];
89
+ }
90
+ return { name, version };
91
+ };
92
+ export const getOSInfo = () => {
93
+ const ua = navigator.userAgent || navigator.vendor || window.opera;
94
+ if (/windows phone/i.test(ua)) {
95
+ return "Windows Phone";
96
+ }
97
+ if (/win/i.test(ua)) {
98
+ return "Windows";
99
+ }
100
+ if (/android/i.test(ua)) {
101
+ return "Android";
102
+ }
103
+ if (/iPad|iPhone|iPod/.test(ua) && !window.MSStream) {
104
+ return "iOS";
105
+ }
106
+ if (/Macintosh|MacIntel|MacPPC|Mac68K/.test(ua)) {
107
+ return "macOS";
108
+ }
109
+ if (/Linux/.test(ua)) {
110
+ return "Linux";
111
+ }
112
+ return "Unknown OS";
113
+ };
114
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/util/tool.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reporting-lib",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "A comprehensive monitoring and reporting library for web applications",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",