spy-client 2.1.14 → 2.2.1

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 (44) hide show
  1. package/.travis.yml +7 -4
  2. package/AGENTS.md +132 -0
  3. package/README.md +29 -18
  4. package/dist/head/base.d.ts +27 -25
  5. package/dist/head/error.d.ts +6 -6
  6. package/dist/head/observer.d.ts +5 -5
  7. package/dist/head/whitescreen.d.ts +6 -6
  8. package/dist/lib/data.d.ts +6 -6
  9. package/dist/lib/huffman.d.ts +9 -9
  10. package/dist/lib/interface.d.ts +209 -209
  11. package/dist/lib/spyHeadInterface.d.ts +36 -28
  12. package/dist/lib/util.d.ts +22 -22
  13. package/dist/module/fid.d.ts +15 -15
  14. package/dist/module/layoutShift.d.ts +18 -18
  15. package/dist/module/lcp.d.ts +17 -17
  16. package/dist/module/longtask.d.ts +46 -46
  17. package/dist/module/memory.d.ts +11 -11
  18. package/dist/module/navigatorInfo.d.ts +9 -9
  19. package/dist/module/resource.d.ts +39 -39
  20. package/dist/module/timing.d.ts +11 -11
  21. package/dist/module/tti.d.ts +19 -19
  22. package/dist/spy-client-basic.d.ts +118 -104
  23. package/dist/spy-client-basic.esm.js +298 -294
  24. package/dist/spy-client-basic.iife.js +298 -294
  25. package/dist/spy-client-basic.iife.min.js +1 -1
  26. package/dist/spy-client-basic.js +298 -294
  27. package/dist/spy-client-basic.min.js +1 -1
  28. package/dist/spy-client-basic.mjs +298 -294
  29. package/dist/spy-client.d.ts +32 -32
  30. package/dist/spy-client.esm.js +1430 -1419
  31. package/dist/spy-client.iife.js +1430 -1419
  32. package/dist/spy-client.iife.min.js +1 -1
  33. package/dist/spy-client.js +1430 -1419
  34. package/dist/spy-client.min.js +1 -1
  35. package/dist/spy-client.mjs +1430 -1419
  36. package/dist/spy-head.d.ts +6 -6
  37. package/dist/spy-head.js +359 -355
  38. package/dist/spy-head.min.js +1 -1
  39. package/dist/spy-local-cache.d.ts +18 -18
  40. package/dist/spy-local-cache.js +718 -711
  41. package/dist/spy-local-cache.min.js +1 -1
  42. package/package.json +26 -73
  43. package/test-results/.last-run.json +4 -0
  44. package/karma.conf.js +0 -111
@@ -1,209 +1,209 @@
1
- export interface SpyClientOption {
2
- /**
3
- * 模块ID
4
- */
5
- pid: string;
6
- /**
7
- * 日志ID
8
- */
9
- lid?: string;
10
- /**
11
- * 全局抽样配置,默认是 1,取值从[0, 1]
12
- */
13
- sample?: number;
14
- /**
15
- * 是否校验发送字段符合规范,默认是 true
16
- */
17
- check?: boolean;
18
- /**
19
- * 日志服务器,默认是webb服务器,尾部需要加?
20
- */
21
- logServer?: string;
22
- /**
23
- * 本地日志cache对象,是指独立的spy-local-cache模块实例
24
- */
25
- localCache?: any;
26
- }
27
- export declare class Module {
28
- load?: () => void;
29
- leave?: () => void;
30
- destroy?: () => void;
31
- }
32
- export interface FIDMetric {
33
- fid: number;
34
- }
35
- export type FIDCB = (metric: FIDMetric) => void;
36
- export interface LCPMetric {
37
- lcp: number;
38
- }
39
- export type LCPCB = (metric: LCPMetric) => void;
40
- export declare enum ResType {
41
- JS = "js",
42
- CSS = "css",
43
- IMG = "img",
44
- FONT = "font"
45
- }
46
- export interface ResourceMetric {
47
- allSize: number;
48
- docSize: number;
49
- headerSize: number;
50
- jsNum: number;
51
- cssNum: number;
52
- imgNum: number;
53
- fontNum: number;
54
- jsSize: number;
55
- cssSize: number;
56
- imgSize: number;
57
- fontSize: number;
58
- allTransferSize: number;
59
- docTransferSize: number;
60
- jsTransferSize: number;
61
- cssTransferSize: number;
62
- imgTransferSize: number;
63
- fontTransferSize: number;
64
- jsDuration: number;
65
- cssDuration: number;
66
- imgDuration: number;
67
- fontDuration: number;
68
- jsCacheRate: number;
69
- cssCacheRate: number;
70
- imgCacheRate: number;
71
- }
72
- export interface ResourceHostMetric {
73
- [host: string]: {
74
- hostNum: number;
75
- hostSize: number;
76
- hostTransferSize: number;
77
- hostDuration: number;
78
- hostCacheRate: number;
79
- };
80
- }
81
- export type ResourceCB = (metric: ResourceMetric, hostMetric: ResourceHostMetric) => void;
82
- export interface ResourceErrorInfo {
83
- msg: string;
84
- xpath: string;
85
- host: string;
86
- type: string;
87
- dur?: number;
88
- }
89
- export type ResourceErrorCB = (info: ResourceErrorInfo) => void;
90
- export interface TimingMetric {
91
- dns: number;
92
- tcp: number;
93
- request: number;
94
- response: number;
95
- parseHtml: number;
96
- domReady: number;
97
- loadEventHandle: number;
98
- load: number;
99
- fp?: number;
100
- fcp?: number;
101
- t7FirstPaint?: number;
102
- t7FirstScreen?: number;
103
- }
104
- export type TimingCB = (metric: TimingMetric) => void;
105
- export interface TTIMetric {
106
- tti: number;
107
- }
108
- export type TTICB = (metric: TTIMetric) => void;
109
- export interface TTIOption {
110
- interval?: number;
111
- filterRequest?: (entry: PerformanceEntry) => boolean;
112
- }
113
- export interface LayoutShiftMetric {
114
- layoutShift: number;
115
- }
116
- export type LayoutShiftCB = (metric: LayoutShiftMetric) => void;
117
- export interface MemoryMetric {
118
- usedJSHeapSize: number;
119
- totalJSHeapSize: number;
120
- jsHeapSizeLimit: number;
121
- usedJSHeapRate: number;
122
- }
123
- export type MemoryCB = (metric: MemoryMetric) => void;
124
- export interface NavigatorInfoMetric {
125
- downlink?: number;
126
- effectiveType?: '2g' | '3g' | '4g' | 'slow-2g';
127
- rtt?: number;
128
- saveData?: boolean;
129
- deviceMemory?: number;
130
- hardwareConcurrency?: number;
131
- }
132
- export type NavigatorInfoCB = (metric: NavigatorInfoMetric) => void;
133
- export interface FSPLongtaskMetric {
134
- fspLongtaskTime: number;
135
- fspTBT: number;
136
- fspTotalTime: number;
137
- fspLongtaskRate: number;
138
- fspLongtaskNum: number;
139
- }
140
- export type FSPLongtaskCB = (metric: FSPLongtaskMetric) => void;
141
- export interface LCPLongtaskMetric {
142
- lcpLongtaskTime: number;
143
- lcpTBT: number;
144
- lcpTotalTime: number;
145
- lcpLongtaskRate: number;
146
- lcpLongtaskNum: number;
147
- }
148
- export type LCPLongtaskCB = (metric: LCPLongtaskMetric) => void;
149
- export interface LoadLongtaskMetric {
150
- loadLongtaskTime: number;
151
- loadTBT: number;
152
- loadTotalTime: number;
153
- loadLongtaskRate: number;
154
- loadLongtaskNum: number;
155
- }
156
- export type LoadLongtaskCB = (metric: LoadLongtaskMetric) => void;
157
- export interface PageLongtaskMetric {
158
- pageLongtaskTime: number;
159
- pageTBT: number;
160
- pageTotalTime: number;
161
- pageLongtaskRate: number;
162
- pageLongtaskNum: number;
163
- pageIframeLongtaskTime: number;
164
- pageIframeLongtaskRate: number;
165
- pageIframeLongtaskNum: number;
166
- }
167
- export type PageLongtaskCB = (metric: PageLongtaskMetric) => void;
168
- export interface ResOption {
169
- ignorePaths?: string[];
170
- trigger?: 'load' | 'leave';
171
- }
172
- export interface BigImgOption {
173
- /**
174
- * 体积大于该阈值,就认为是大图,默认150,单位是kb
175
- */
176
- maxSize?: number;
177
- /**
178
- * 忽略指定path的资源
179
- */
180
- ignorePaths?: string[];
181
- /**
182
- * 触发时机,在load事件触发后,还是在用户离开页面后,收集出现的加载慢的资源。,默认是load
183
- */
184
- trigger?: 'load' | 'leave';
185
- }
186
- export interface HttpResOption {
187
- /**
188
- * 忽略指定path的资源
189
- */
190
- ignorePaths?: string[];
191
- /**
192
- * 触发时机,在load事件触发后,还是在用户离开页面后,收集出现的加载慢的资源。,默认是load
193
- */
194
- trigger?: 'load' | 'leave';
195
- }
196
- export interface SlowOption {
197
- /**
198
- * 加载时长大于该阈值,就认为是慢资源,默认1000,单位是ms
199
- */
200
- threshold?: number;
201
- /**
202
- * 忽略指定path的资源
203
- */
204
- ignorePaths?: string[];
205
- /**
206
- * 触发时机,在load事件触发后,还是在用户离开页面后,收集出现的加载慢的资源。,默认是load
207
- */
208
- trigger?: 'load' | 'leave';
209
- }
1
+ export interface SpyClientOption {
2
+ /**
3
+ * 模块ID
4
+ */
5
+ pid: string;
6
+ /**
7
+ * 日志ID
8
+ */
9
+ lid?: string;
10
+ /**
11
+ * 全局抽样配置,默认是 1,取值从[0, 1]
12
+ */
13
+ sample?: number;
14
+ /**
15
+ * 是否校验发送字段符合规范,默认是 true
16
+ */
17
+ check?: boolean;
18
+ /**
19
+ * 日志服务器,默认是webb服务器,尾部需要加?
20
+ */
21
+ logServer?: string;
22
+ /**
23
+ * 本地日志cache对象,是指独立的spy-local-cache模块实例
24
+ */
25
+ localCache?: any;
26
+ }
27
+ export declare class Module {
28
+ load?: () => void;
29
+ leave?: () => void;
30
+ destroy?: () => void;
31
+ }
32
+ export interface FIDMetric {
33
+ fid: number;
34
+ }
35
+ export type FIDCB = (metric: FIDMetric) => void;
36
+ export interface LCPMetric {
37
+ lcp: number;
38
+ }
39
+ export type LCPCB = (metric: LCPMetric) => void;
40
+ export declare enum ResType {
41
+ JS = "js",
42
+ CSS = "css",
43
+ IMG = "img",
44
+ FONT = "font"
45
+ }
46
+ export interface ResourceMetric {
47
+ allSize: number;
48
+ docSize: number;
49
+ headerSize: number;
50
+ jsNum: number;
51
+ cssNum: number;
52
+ imgNum: number;
53
+ fontNum: number;
54
+ jsSize: number;
55
+ cssSize: number;
56
+ imgSize: number;
57
+ fontSize: number;
58
+ allTransferSize: number;
59
+ docTransferSize: number;
60
+ jsTransferSize: number;
61
+ cssTransferSize: number;
62
+ imgTransferSize: number;
63
+ fontTransferSize: number;
64
+ jsDuration: number;
65
+ cssDuration: number;
66
+ imgDuration: number;
67
+ fontDuration: number;
68
+ jsCacheRate: number;
69
+ cssCacheRate: number;
70
+ imgCacheRate: number;
71
+ }
72
+ export interface ResourceHostMetric {
73
+ [host: string]: {
74
+ hostNum: number;
75
+ hostSize: number;
76
+ hostTransferSize: number;
77
+ hostDuration: number;
78
+ hostCacheRate: number;
79
+ };
80
+ }
81
+ export type ResourceCB = (metric: ResourceMetric, hostMetric: ResourceHostMetric) => void;
82
+ export interface ResourceErrorInfo {
83
+ msg: string;
84
+ xpath: string;
85
+ host: string;
86
+ type: string;
87
+ dur?: number;
88
+ }
89
+ export type ResourceErrorCB = (info: ResourceErrorInfo) => void;
90
+ export interface TimingMetric {
91
+ dns: number;
92
+ tcp: number;
93
+ request: number;
94
+ response: number;
95
+ parseHtml: number;
96
+ domReady: number;
97
+ loadEventHandle: number;
98
+ load: number;
99
+ fp?: number;
100
+ fcp?: number;
101
+ t7FirstPaint?: number;
102
+ t7FirstScreen?: number;
103
+ }
104
+ export type TimingCB = (metric: TimingMetric) => void;
105
+ export interface TTIMetric {
106
+ tti: number;
107
+ }
108
+ export type TTICB = (metric: TTIMetric) => void;
109
+ export interface TTIOption {
110
+ interval?: number;
111
+ filterRequest?: (entry: PerformanceEntry) => boolean;
112
+ }
113
+ export interface LayoutShiftMetric {
114
+ layoutShift: number;
115
+ }
116
+ export type LayoutShiftCB = (metric: LayoutShiftMetric) => void;
117
+ export interface MemoryMetric {
118
+ usedJSHeapSize: number;
119
+ totalJSHeapSize: number;
120
+ jsHeapSizeLimit: number;
121
+ usedJSHeapRate: number;
122
+ }
123
+ export type MemoryCB = (metric: MemoryMetric) => void;
124
+ export interface NavigatorInfoMetric {
125
+ downlink?: number;
126
+ effectiveType?: '2g' | '3g' | '4g' | 'slow-2g';
127
+ rtt?: number;
128
+ saveData?: boolean;
129
+ deviceMemory?: number;
130
+ hardwareConcurrency?: number;
131
+ }
132
+ export type NavigatorInfoCB = (metric: NavigatorInfoMetric) => void;
133
+ export interface FSPLongtaskMetric {
134
+ fspLongtaskTime: number;
135
+ fspTBT: number;
136
+ fspTotalTime: number;
137
+ fspLongtaskRate: number;
138
+ fspLongtaskNum: number;
139
+ }
140
+ export type FSPLongtaskCB = (metric: FSPLongtaskMetric) => void;
141
+ export interface LCPLongtaskMetric {
142
+ lcpLongtaskTime: number;
143
+ lcpTBT: number;
144
+ lcpTotalTime: number;
145
+ lcpLongtaskRate: number;
146
+ lcpLongtaskNum: number;
147
+ }
148
+ export type LCPLongtaskCB = (metric: LCPLongtaskMetric) => void;
149
+ export interface LoadLongtaskMetric {
150
+ loadLongtaskTime: number;
151
+ loadTBT: number;
152
+ loadTotalTime: number;
153
+ loadLongtaskRate: number;
154
+ loadLongtaskNum: number;
155
+ }
156
+ export type LoadLongtaskCB = (metric: LoadLongtaskMetric) => void;
157
+ export interface PageLongtaskMetric {
158
+ pageLongtaskTime: number;
159
+ pageTBT: number;
160
+ pageTotalTime: number;
161
+ pageLongtaskRate: number;
162
+ pageLongtaskNum: number;
163
+ pageIframeLongtaskTime: number;
164
+ pageIframeLongtaskRate: number;
165
+ pageIframeLongtaskNum: number;
166
+ }
167
+ export type PageLongtaskCB = (metric: PageLongtaskMetric) => void;
168
+ export interface ResOption {
169
+ ignorePaths?: string[];
170
+ trigger?: 'load' | 'leave';
171
+ }
172
+ export interface BigImgOption {
173
+ /**
174
+ * 体积大于该阈值,就认为是大图,默认150,单位是kb
175
+ */
176
+ maxSize?: number;
177
+ /**
178
+ * 忽略指定path的资源
179
+ */
180
+ ignorePaths?: string[];
181
+ /**
182
+ * 触发时机,在load事件触发后,还是在用户离开页面后,收集出现的加载慢的资源。,默认是load
183
+ */
184
+ trigger?: 'load' | 'leave';
185
+ }
186
+ export interface HttpResOption {
187
+ /**
188
+ * 忽略指定path的资源
189
+ */
190
+ ignorePaths?: string[];
191
+ /**
192
+ * 触发时机,在load事件触发后,还是在用户离开页面后,收集出现的加载慢的资源。,默认是load
193
+ */
194
+ trigger?: 'load' | 'leave';
195
+ }
196
+ export interface SlowOption {
197
+ /**
198
+ * 加载时长大于该阈值,就认为是慢资源,默认1000,单位是ms
199
+ */
200
+ threshold?: number;
201
+ /**
202
+ * 忽略指定path的资源
203
+ */
204
+ ignorePaths?: string[];
205
+ /**
206
+ * 触发时机,在load事件触发后,还是在用户离开页面后,收集出现的加载慢的资源。,默认是load
207
+ */
208
+ trigger?: 'load' | 'leave';
209
+ }
@@ -1,28 +1,36 @@
1
- export interface ErrorHandlerData {
2
- info: {
3
- [propName: string]: any;
4
- msg: string;
5
- };
6
- group: string;
7
- dim?: {
8
- [propName: string]: any;
9
- };
10
- }
11
- export interface ErrorConf {
12
- sample: number;
13
- group: string;
14
- handler?: (data: ErrorHandlerData) => boolean | void | undefined;
15
- }
16
- export interface WhiteScreenErrorConf extends ErrorConf {
17
- timeout: number;
18
- selector: string;
19
- subSelector: string;
20
- }
21
- export interface SpyHeadConf {
22
- pid: string;
23
- lid?: string;
24
- logServer?: string;
25
- jsError: ErrorConf;
26
- resourceError: ErrorConf;
27
- whiteScreenError: WhiteScreenErrorConf;
28
- }
1
+ export interface ErrorHandlerData {
2
+ info: {
3
+ [propName: string]: any;
4
+ msg: string;
5
+ };
6
+ group: string;
7
+ dim?: {
8
+ [propName: string]: any;
9
+ };
10
+ }
11
+ export interface ErrorConf {
12
+ sample: number;
13
+ group: string;
14
+ handler?: (data: ErrorHandlerData) => boolean | void | undefined;
15
+ }
16
+ export interface WhiteScreenErrorConf extends ErrorConf {
17
+ timeout: number;
18
+ selector: string;
19
+ subSelector: string;
20
+ }
21
+ export interface SpyHeadConf {
22
+ pid: string;
23
+ lid?: string;
24
+ logServer?: string;
25
+ jsError: ErrorConf;
26
+ resourceError: ErrorConf;
27
+ whiteScreenError: WhiteScreenErrorConf;
28
+ }
29
+ export interface SpyHeadUpdateConf {
30
+ pid?: string;
31
+ lid?: string;
32
+ logServer?: string;
33
+ jsError?: ErrorConf;
34
+ resourceError?: ErrorConf;
35
+ whiteScreenError?: WhiteScreenErrorConf;
36
+ }
@@ -1,22 +1,22 @@
1
- /**
2
- * @file utils
3
- * @author kaivean
4
- */
5
- export declare function assign(...args: any[]): any;
6
- export interface URLINFO {
7
- protocol: string;
8
- host: string;
9
- pathname: string;
10
- ext: string;
11
- }
12
- export declare function getUrlInfo(url: string): URLINFO;
13
- export declare function getResTiming(t: PerformanceTiming | PerformanceResourceTiming): {
14
- wait: number;
15
- dns: number;
16
- connect: number;
17
- req: number;
18
- res: number;
19
- };
20
- export declare function getxpath(el: Element | null): {
21
- xpath: string;
22
- };
1
+ /**
2
+ * @file utils
3
+ * @author kaivean
4
+ */
5
+ export declare function assign(...args: any[]): any;
6
+ export interface URLINFO {
7
+ protocol: string;
8
+ host: string;
9
+ pathname: string;
10
+ ext: string;
11
+ }
12
+ export declare function getUrlInfo(url: string): URLINFO;
13
+ export declare function getResTiming(t: PerformanceTiming | PerformanceResourceTiming): {
14
+ wait: number;
15
+ dns: number;
16
+ connect: number;
17
+ req: number;
18
+ res: number;
19
+ };
20
+ export declare function getxpath(el: Element | null): {
21
+ xpath: string;
22
+ };
@@ -1,15 +1,15 @@
1
- /**
2
- * @file FID
3
- * @author kaivean
4
- */
5
- import { Module, FIDCB } from '../lib/interface';
6
- export default class FID implements Module {
7
- private observer;
8
- private cb;
9
- private finalValue;
10
- constructor();
11
- listenFID(cb: FIDCB): void;
12
- callCB(): void;
13
- destroy(): void;
14
- private handle;
15
- }
1
+ /**
2
+ * @file FID
3
+ * @author kaivean
4
+ */
5
+ import { Module, FIDCB } from '../lib/interface';
6
+ export default class FID implements Module {
7
+ private observer;
8
+ private cb;
9
+ private finalValue;
10
+ constructor();
11
+ listenFID(cb: FIDCB): void;
12
+ callCB(): void;
13
+ destroy(): void;
14
+ private handle;
15
+ }
@@ -1,18 +1,18 @@
1
- /**
2
- * @file LayoutShift
3
- * @author kaivean
4
- */
5
- import { Module, LayoutShiftCB } from '../lib/interface';
6
- export default class LayoutShift implements Module {
7
- private observer;
8
- private cb;
9
- private value;
10
- private finalValue;
11
- private onceLeave;
12
- constructor();
13
- listenLayoutShift(cb: LayoutShiftCB): void;
14
- leave(): void;
15
- callCB(): void;
16
- destroy(): void;
17
- private handle;
18
- }
1
+ /**
2
+ * @file LayoutShift
3
+ * @author kaivean
4
+ */
5
+ import { Module, LayoutShiftCB } from '../lib/interface';
6
+ export default class LayoutShift implements Module {
7
+ private observer;
8
+ private cb;
9
+ private value;
10
+ private finalValue;
11
+ private onceLeave;
12
+ constructor();
13
+ listenLayoutShift(cb: LayoutShiftCB): void;
14
+ leave(): void;
15
+ callCB(): void;
16
+ destroy(): void;
17
+ private handle;
18
+ }
@@ -1,17 +1,17 @@
1
- /**
2
- * @file LCP
3
- * @author kaivean
4
- */
5
- import { Module, LCPCB } from '../lib/interface';
6
- export default class LCP implements Module {
7
- private observer;
8
- private value;
9
- private finalValue;
10
- private cb;
11
- constructor();
12
- listenLCP(cb: LCPCB): void;
13
- callCB(): void;
14
- load(): void;
15
- destroy(): void;
16
- private handle;
17
- }
1
+ /**
2
+ * @file LCP
3
+ * @author kaivean
4
+ */
5
+ import { Module, LCPCB } from '../lib/interface';
6
+ export default class LCP implements Module {
7
+ private observer;
8
+ private value;
9
+ private finalValue;
10
+ private cb;
11
+ constructor();
12
+ listenLCP(cb: LCPCB): void;
13
+ callCB(): void;
14
+ load(): void;
15
+ destroy(): void;
16
+ private handle;
17
+ }