@be-link/cls-logger 1.0.1-beta.5 → 1.0.1-beta.7
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/dist/ClsLogger.d.ts +9 -108
- package/dist/ClsLogger.d.ts.map +1 -1
- package/dist/ClsLoggerCore.d.ts +127 -0
- package/dist/ClsLoggerCore.d.ts.map +1 -0
- package/dist/ClsLoggerMini.d.ts +8 -0
- package/dist/ClsLoggerMini.d.ts.map +1 -0
- package/dist/ClsLoggerWeb.d.ts +8 -0
- package/dist/ClsLoggerWeb.d.ts.map +1 -0
- package/dist/clsSdkTypes.d.ts +18 -0
- package/dist/clsSdkTypes.d.ts.map +1 -0
- package/dist/index.esm.js +137 -69
- package/dist/index.js +137 -69
- package/dist/index.umd.js +137 -69
- package/dist/mini.d.ts +6 -0
- package/dist/mini.d.ts.map +1 -0
- package/dist/mini.esm.js +2553 -0
- package/dist/mini.js +2578 -0
- package/dist/sdkUtils.d.ts +3 -0
- package/dist/sdkUtils.d.ts.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/web.d.ts +6 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.esm.js +2523 -0
- package/dist/web.js +2548 -0
- package/package.json +36 -1
package/dist/ClsLogger.d.ts
CHANGED
|
@@ -1,110 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
private source;
|
|
11
|
-
private projectId;
|
|
12
|
-
private projectName;
|
|
13
|
-
private appId;
|
|
14
|
-
private appVersion;
|
|
15
|
-
private envType;
|
|
16
|
-
private userGenerateBaseFields;
|
|
17
|
-
private autoGenerateBaseFields;
|
|
18
|
-
private storageKey;
|
|
19
|
-
private batchSize;
|
|
20
|
-
private memoryQueue;
|
|
21
|
-
private batchMaxSize;
|
|
22
|
-
private batchIntervalMs;
|
|
23
|
-
private batchTimer;
|
|
24
|
-
private batchTimerDueAt;
|
|
25
|
-
private initTs;
|
|
26
|
-
private startupDelayMs;
|
|
27
|
-
private failedCacheKey;
|
|
28
|
-
private failedCacheMax;
|
|
29
|
-
private requestMonitorStarted;
|
|
30
|
-
private errorMonitorStarted;
|
|
31
|
-
private performanceMonitorStarted;
|
|
32
|
-
private behaviorMonitorStarted;
|
|
33
|
-
private behaviorMonitorCleanup;
|
|
34
|
-
userId: unknown;
|
|
35
|
-
userName: unknown;
|
|
36
|
-
init(options: ClsLoggerInitOptions): void;
|
|
37
|
-
private getBaseFields;
|
|
38
|
-
private startRequestMonitor;
|
|
39
|
-
private startErrorMonitor;
|
|
40
|
-
private startPerformanceMonitor;
|
|
41
|
-
private startBehaviorMonitor;
|
|
42
|
-
/**
|
|
43
|
-
* 停止行为埋点监听(PV/UV/点击)
|
|
44
|
-
* - 如需重启:可再次调用 init(或自行调用 init 后的默认启动逻辑)
|
|
45
|
-
*/
|
|
46
|
-
stopBehaviorMonitor(): void;
|
|
47
|
-
/**
|
|
48
|
-
* 获取 CLS client(按环境懒加载 SDK)
|
|
49
|
-
* - browser: 优先走 UMD 全局变量 `tencentcloudClsSdkJsWeb`
|
|
50
|
-
* - miniprogram: 优先走 require(webpack/taro 可解析),否则 fallback import()
|
|
51
|
-
*/
|
|
52
|
-
getInstance(): Promise<{
|
|
53
|
-
PutLogs: (request: unknown) => Promise<unknown> | unknown;
|
|
54
|
-
}>;
|
|
55
|
-
private loadSdk;
|
|
56
|
-
private detectEnvType;
|
|
57
|
-
/**
|
|
58
|
-
* 直接上报:埋点入参必须是一维(扁平)Object
|
|
59
|
-
* - 非原始值(对象/数组等)会被自动 stringify 成 string
|
|
60
|
-
* - 最终会把 fields 展开成 CLS 的 content(key/value 都会转成 string)
|
|
61
|
-
*/
|
|
62
|
-
put(fields: FlatFields, options?: PutOptions): void;
|
|
63
|
-
private putAsync;
|
|
64
|
-
/**
|
|
65
|
-
* 直接上报:把 data 序列化后放入指定 key(默认 “日志内容”)
|
|
66
|
-
*/
|
|
67
|
-
putJson(data: unknown, clsLoggerKey?: string, options?: PutOptions): void;
|
|
68
|
-
/**
|
|
69
|
-
* 入队:写入 localStorage 队列;达到 batchSize 自动 flush
|
|
70
|
-
* - 埋点入参必须是一维(扁平)Object,非原始值会被 stringify
|
|
71
|
-
*/
|
|
72
|
-
enqueue(fields: FlatFields, options?: PutOptions): void;
|
|
73
|
-
/**
|
|
74
|
-
* 从 localStorage 读取队列并批量上报
|
|
75
|
-
*/
|
|
76
|
-
flush(): void;
|
|
77
|
-
/**
|
|
78
|
-
* 批量上报(每条 item.data 展开为 log content)
|
|
79
|
-
*/
|
|
80
|
-
putBatch(queue: QueueItem[]): void;
|
|
81
|
-
private putBatchAsync;
|
|
82
|
-
/**
|
|
83
|
-
* 参考《一、概述》:统一上报入口(内存队列 + 批量发送)
|
|
84
|
-
*/
|
|
85
|
-
report(log: ReportLog): void;
|
|
86
|
-
private getDesiredBatchFlushDueAt;
|
|
87
|
-
info(message: string, data?: FlatFields): void;
|
|
88
|
-
warn(message: string, data?: FlatFields): void;
|
|
89
|
-
error(message: string, data?: FlatFields): void;
|
|
90
|
-
track(trackType: string, data?: FlatFields): void;
|
|
91
|
-
/**
|
|
92
|
-
* 立即发送内存队列
|
|
93
|
-
*/
|
|
94
|
-
flushBatch(): Promise<void>;
|
|
95
|
-
private buildReportFields;
|
|
96
|
-
private sendReportLogs;
|
|
97
|
-
private retrySendReportLogs;
|
|
98
|
-
private cacheFailedReportLogs;
|
|
99
|
-
flushFailed(): void;
|
|
100
|
-
/**
|
|
101
|
-
* 统计/计数类日志:按字段展开上报(若 data 为空默认 1)
|
|
102
|
-
*/
|
|
103
|
-
stat(param: {
|
|
104
|
-
pageName: string;
|
|
105
|
-
scene: string;
|
|
106
|
-
subScene: string;
|
|
107
|
-
data?: number | string;
|
|
108
|
-
}): void;
|
|
1
|
+
import { ClsLoggerCore } from './ClsLoggerCore';
|
|
2
|
+
import type { ClsSdkModule } from './clsSdkTypes';
|
|
3
|
+
/**
|
|
4
|
+
* 兼容版 ClsLogger(默认入口)
|
|
5
|
+
* - 保留了自动识别环境 + 动态 import 的逻辑
|
|
6
|
+
* - 如果业务想瘦身,建议改用 @be-link/cls-logger/web 或 /mini
|
|
7
|
+
*/
|
|
8
|
+
export declare class ClsLogger extends ClsLoggerCore {
|
|
9
|
+
protected loadSdk(): Promise<ClsSdkModule>;
|
|
109
10
|
}
|
|
110
11
|
//# sourceMappingURL=ClsLogger.d.ts.map
|
package/dist/ClsLogger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClsLogger.d.ts","sourceRoot":"","sources":["../src/ClsLogger.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ClsLogger.d.ts","sourceRoot":"","sources":["../src/ClsLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD;;;;GAIG;AACH,qBAAa,SAAU,SAAQ,aAAa;cAC1B,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;CA8EjD"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { ClsLoggerInitOptions, EnvType, FlatFields, PutOptions, QueueItem, ReportLog } from './types';
|
|
2
|
+
import type { ClsSdkModule } from './clsSdkTypes';
|
|
3
|
+
/**
|
|
4
|
+
* CLS Logger 核心基类
|
|
5
|
+
* - 负责所有上报、队列、监控逻辑
|
|
6
|
+
* - 不包含具体的 SDK 加载实现(由子类负责)
|
|
7
|
+
* - 这样可以把 web/mini 的 SDK 依赖彻底解耦到子入口
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class ClsLoggerCore {
|
|
10
|
+
protected sdk: ClsSdkModule | null;
|
|
11
|
+
protected sdkPromise: Promise<ClsSdkModule> | null;
|
|
12
|
+
protected sdkOverride: unknown | null;
|
|
13
|
+
protected sdkLoaderOverride: (() => unknown | Promise<unknown>) | null;
|
|
14
|
+
protected client: {
|
|
15
|
+
PutLogs: (request: unknown) => Promise<unknown> | unknown;
|
|
16
|
+
} | null;
|
|
17
|
+
protected clientPromise: Promise<{
|
|
18
|
+
PutLogs: (request: unknown) => Promise<unknown> | unknown;
|
|
19
|
+
}> | null;
|
|
20
|
+
protected topicId: string | null;
|
|
21
|
+
protected endpoint: string;
|
|
22
|
+
protected retryTimes: number;
|
|
23
|
+
protected source: string;
|
|
24
|
+
protected projectId: string;
|
|
25
|
+
protected projectName: string;
|
|
26
|
+
protected appId: string;
|
|
27
|
+
protected appVersion: string;
|
|
28
|
+
protected envType: EnvType;
|
|
29
|
+
protected userGenerateBaseFields: (() => FlatFields) | null;
|
|
30
|
+
protected autoGenerateBaseFields: (() => FlatFields) | null;
|
|
31
|
+
protected storageKey: string;
|
|
32
|
+
protected batchSize: number;
|
|
33
|
+
protected memoryQueue: ReportLog[];
|
|
34
|
+
protected batchMaxSize: number;
|
|
35
|
+
protected batchIntervalMs: number;
|
|
36
|
+
protected batchTimer: ReturnType<typeof setTimeout> | null;
|
|
37
|
+
protected batchTimerDueAt: number | null;
|
|
38
|
+
protected initTs: number;
|
|
39
|
+
protected startupDelayMs: number;
|
|
40
|
+
protected failedCacheKey: string;
|
|
41
|
+
protected failedCacheMax: number;
|
|
42
|
+
protected requestMonitorStarted: boolean;
|
|
43
|
+
protected errorMonitorStarted: boolean;
|
|
44
|
+
protected performanceMonitorStarted: boolean;
|
|
45
|
+
protected behaviorMonitorStarted: boolean;
|
|
46
|
+
protected behaviorMonitorCleanup: (() => void) | null;
|
|
47
|
+
userId: unknown;
|
|
48
|
+
userName: unknown;
|
|
49
|
+
/**
|
|
50
|
+
* 子类必须实现此方法来加载 SDK
|
|
51
|
+
*/
|
|
52
|
+
protected abstract loadSdk(): Promise<ClsSdkModule>;
|
|
53
|
+
/**
|
|
54
|
+
* 子类可按需重写(默认检测 wx)
|
|
55
|
+
*/
|
|
56
|
+
protected detectEnvType(): EnvType;
|
|
57
|
+
init(options: ClsLoggerInitOptions): void;
|
|
58
|
+
private getBaseFields;
|
|
59
|
+
private startRequestMonitor;
|
|
60
|
+
private startErrorMonitor;
|
|
61
|
+
private startPerformanceMonitor;
|
|
62
|
+
private startBehaviorMonitor;
|
|
63
|
+
/**
|
|
64
|
+
* 停止行为埋点监听(PV/UV/点击)
|
|
65
|
+
* - 如需重启:可再次调用 init(或自行调用 init 后的默认启动逻辑)
|
|
66
|
+
*/
|
|
67
|
+
stopBehaviorMonitor(): void;
|
|
68
|
+
/**
|
|
69
|
+
* 获取 CLS client(按环境懒加载 SDK)
|
|
70
|
+
*/
|
|
71
|
+
getInstance(): Promise<{
|
|
72
|
+
PutLogs: (request: unknown) => Promise<unknown> | unknown;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* 直接上报:埋点入参必须是一维(扁平)Object
|
|
76
|
+
* - 非原始值(对象/数组等)会被自动 stringify 成 string
|
|
77
|
+
* - 最终会把 fields 展开成 CLS 的 content(key/value 都会转成 string)
|
|
78
|
+
*/
|
|
79
|
+
put(fields: FlatFields, options?: PutOptions): void;
|
|
80
|
+
private putAsync;
|
|
81
|
+
/**
|
|
82
|
+
* 直接上报:把 data 序列化后放入指定 key(默认 “日志内容”)
|
|
83
|
+
*/
|
|
84
|
+
putJson(data: unknown, clsLoggerKey?: string, options?: PutOptions): void;
|
|
85
|
+
/**
|
|
86
|
+
* 入队:写入 localStorage 队列;达到 batchSize 自动 flush
|
|
87
|
+
* - 埋点入参必须是一维(扁平)Object,非原始值会被 stringify
|
|
88
|
+
*/
|
|
89
|
+
enqueue(fields: FlatFields, options?: PutOptions): void;
|
|
90
|
+
/**
|
|
91
|
+
* 从 localStorage 读取队列并批量上报
|
|
92
|
+
*/
|
|
93
|
+
flush(): void;
|
|
94
|
+
/**
|
|
95
|
+
* 批量上报(每条 item.data 展开为 log content)
|
|
96
|
+
*/
|
|
97
|
+
putBatch(queue: QueueItem[]): void;
|
|
98
|
+
private putBatchAsync;
|
|
99
|
+
/**
|
|
100
|
+
* 参考《一、概述》:统一上报入口(内存队列 + 批量发送)
|
|
101
|
+
*/
|
|
102
|
+
report(log: ReportLog): void;
|
|
103
|
+
private getDesiredBatchFlushDueAt;
|
|
104
|
+
info(message: string, data?: FlatFields): void;
|
|
105
|
+
warn(message: string, data?: FlatFields): void;
|
|
106
|
+
error(message: string, data?: FlatFields): void;
|
|
107
|
+
track(trackType: string, data?: FlatFields): void;
|
|
108
|
+
/**
|
|
109
|
+
* 立即发送内存队列
|
|
110
|
+
*/
|
|
111
|
+
flushBatch(): Promise<void>;
|
|
112
|
+
private buildReportFields;
|
|
113
|
+
private sendReportLogs;
|
|
114
|
+
private retrySendReportLogs;
|
|
115
|
+
private cacheFailedReportLogs;
|
|
116
|
+
flushFailed(): void;
|
|
117
|
+
/**
|
|
118
|
+
* 统计/计数类日志:按字段展开上报(若 data 为空默认 1)
|
|
119
|
+
*/
|
|
120
|
+
stat(param: {
|
|
121
|
+
pageName: string;
|
|
122
|
+
scene: string;
|
|
123
|
+
subScene: string;
|
|
124
|
+
data?: number | string;
|
|
125
|
+
}): void;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=ClsLoggerCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClsLoggerCore.d.ts","sourceRoot":"","sources":["../src/ClsLoggerCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ClsLoggerCore } from './ClsLoggerCore';
|
|
2
|
+
import type { ClsSdkModule } from './clsSdkTypes';
|
|
3
|
+
export declare class ClsLoggerMini extends ClsLoggerCore {
|
|
4
|
+
protected envType: import('./types').EnvType;
|
|
5
|
+
protected loadSdk(): Promise<ClsSdkModule>;
|
|
6
|
+
private normalize;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=ClsLoggerMini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClsLoggerMini.d.ts","sourceRoot":"","sources":["../src/ClsLoggerMini.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,SAAS,CAAC,OAAO,EAAE,OAAO,SAAS,EAAE,OAAO,CAAiB;cAE7C,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAkBhD,OAAO,CAAC,SAAS;CAYlB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ClsLoggerCore } from './ClsLoggerCore';
|
|
2
|
+
import type { ClsSdkModule } from './clsSdkTypes';
|
|
3
|
+
export declare class ClsLoggerWeb extends ClsLoggerCore {
|
|
4
|
+
protected envType: import('./types').EnvType;
|
|
5
|
+
protected loadSdk(): Promise<ClsSdkModule>;
|
|
6
|
+
private normalize;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=ClsLoggerWeb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClsLoggerWeb.d.ts","sourceRoot":"","sources":["../src/ClsLoggerWeb.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD,qBAAa,YAAa,SAAQ,aAAa;IAC7C,SAAS,CAAC,OAAO,EAAE,OAAO,SAAS,EAAE,OAAO,CAAa;cAEzC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC;IAahD,OAAO,CAAC,SAAS;CASlB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type ClsSdkModule = {
|
|
2
|
+
AsyncClient: new (options: {
|
|
3
|
+
endpoint: string;
|
|
4
|
+
retry_times?: number;
|
|
5
|
+
}) => {
|
|
6
|
+
PutLogs: (request: unknown) => Promise<unknown> | unknown;
|
|
7
|
+
};
|
|
8
|
+
Log: new (time: number) => {
|
|
9
|
+
addContent: (k: string, v: string) => void;
|
|
10
|
+
};
|
|
11
|
+
LogGroup: new (source: string) => {
|
|
12
|
+
setSource: (source: string) => void;
|
|
13
|
+
addLog: (log: unknown) => void;
|
|
14
|
+
getLogs: () => unknown[];
|
|
15
|
+
};
|
|
16
|
+
PutLogsRequest: new (topicId: string, logGroup: unknown) => unknown;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=clsSdkTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clsSdkTypes.d.ts","sourceRoot":"","sources":["../src/clsSdkTypes.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,KAAK,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK;QACxE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;KAC3D,CAAC;IACF,GAAG,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK;QAAE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;IAC1E,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,KAAK;QAChC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;QAC/B,OAAO,EAAE,MAAM,OAAO,EAAE,CAAC;KAC1B,CAAC;IACF,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;CACrE,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1894,27 +1894,6 @@ function createAutoDeviceInfoBaseFields(envType, opts) {
|
|
|
1894
1894
|
};
|
|
1895
1895
|
}
|
|
1896
1896
|
|
|
1897
|
-
function readGlobal(key) {
|
|
1898
|
-
try {
|
|
1899
|
-
const g = globalThis;
|
|
1900
|
-
return g[key] ?? null;
|
|
1901
|
-
}
|
|
1902
|
-
catch {
|
|
1903
|
-
return null;
|
|
1904
|
-
}
|
|
1905
|
-
}
|
|
1906
|
-
function tryRequire(moduleName) {
|
|
1907
|
-
try {
|
|
1908
|
-
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
1909
|
-
const req = (typeof require === 'function' ? require : null);
|
|
1910
|
-
if (!req)
|
|
1911
|
-
return null;
|
|
1912
|
-
return req(moduleName);
|
|
1913
|
-
}
|
|
1914
|
-
catch {
|
|
1915
|
-
return null;
|
|
1916
|
-
}
|
|
1917
|
-
}
|
|
1918
1897
|
function enterClsSendingGuard() {
|
|
1919
1898
|
const g = globalThis;
|
|
1920
1899
|
const next = (g.__beLinkClsLoggerSendingCount__ ?? 0) + 1;
|
|
@@ -1924,10 +1903,18 @@ function enterClsSendingGuard() {
|
|
|
1924
1903
|
g.__beLinkClsLoggerSendingCount__ = cur > 0 ? cur - 1 : 0;
|
|
1925
1904
|
};
|
|
1926
1905
|
}
|
|
1927
|
-
|
|
1906
|
+
/**
|
|
1907
|
+
* CLS Logger 核心基类
|
|
1908
|
+
* - 负责所有上报、队列、监控逻辑
|
|
1909
|
+
* - 不包含具体的 SDK 加载实现(由子类负责)
|
|
1910
|
+
* - 这样可以把 web/mini 的 SDK 依赖彻底解耦到子入口
|
|
1911
|
+
*/
|
|
1912
|
+
class ClsLoggerCore {
|
|
1928
1913
|
constructor() {
|
|
1929
1914
|
this.sdk = null;
|
|
1930
1915
|
this.sdkPromise = null;
|
|
1916
|
+
this.sdkOverride = null;
|
|
1917
|
+
this.sdkLoaderOverride = null;
|
|
1931
1918
|
this.client = null;
|
|
1932
1919
|
this.clientPromise = null;
|
|
1933
1920
|
this.topicId = null;
|
|
@@ -1960,6 +1947,15 @@ class ClsLogger {
|
|
|
1960
1947
|
this.behaviorMonitorStarted = false;
|
|
1961
1948
|
this.behaviorMonitorCleanup = null;
|
|
1962
1949
|
}
|
|
1950
|
+
/**
|
|
1951
|
+
* 子类可按需重写(默认检测 wx)
|
|
1952
|
+
*/
|
|
1953
|
+
detectEnvType() {
|
|
1954
|
+
const wxAny = globalThis.wx;
|
|
1955
|
+
if (wxAny && typeof wxAny.getSystemInfoSync === 'function')
|
|
1956
|
+
return 'miniprogram';
|
|
1957
|
+
return 'browser';
|
|
1958
|
+
}
|
|
1963
1959
|
init(options) {
|
|
1964
1960
|
this.initTs = Date.now();
|
|
1965
1961
|
const topicId = options?.tencentCloud?.topicID ?? options?.topic_id ?? options?.topicID ?? this.topicId ?? null;
|
|
@@ -1995,6 +1991,9 @@ class ClsLogger {
|
|
|
1995
1991
|
this.appId = options.appId ?? this.appId;
|
|
1996
1992
|
this.appVersion = options.appVersion ?? this.appVersion;
|
|
1997
1993
|
this.envType = nextEnvType;
|
|
1994
|
+
// 可选:外部注入 SDK(优先级:sdkLoader > sdk)
|
|
1995
|
+
this.sdkLoaderOverride = options.sdkLoader ?? this.sdkLoaderOverride;
|
|
1996
|
+
this.sdkOverride = options.sdk ?? this.sdkOverride;
|
|
1998
1997
|
this.userGenerateBaseFields = options.generateBaseFields ?? this.userGenerateBaseFields;
|
|
1999
1998
|
this.autoGenerateBaseFields = createAutoDeviceInfoBaseFields(this.envType, options.deviceInfo);
|
|
2000
1999
|
this.storageKey = options.storageKey ?? this.storageKey;
|
|
@@ -2113,8 +2112,6 @@ class ClsLogger {
|
|
|
2113
2112
|
}
|
|
2114
2113
|
/**
|
|
2115
2114
|
* 获取 CLS client(按环境懒加载 SDK)
|
|
2116
|
-
* - browser: 优先走 UMD 全局变量 `tencentcloudClsSdkJsWeb`
|
|
2117
|
-
* - miniprogram: 优先走 require(webpack/taro 可解析),否则 fallback import()
|
|
2118
2115
|
*/
|
|
2119
2116
|
async getInstance() {
|
|
2120
2117
|
if (this.client)
|
|
@@ -2137,51 +2134,6 @@ class ClsLogger {
|
|
|
2137
2134
|
});
|
|
2138
2135
|
return this.clientPromise;
|
|
2139
2136
|
}
|
|
2140
|
-
async loadSdk() {
|
|
2141
|
-
if (this.sdk)
|
|
2142
|
-
return this.sdk;
|
|
2143
|
-
if (this.sdkPromise)
|
|
2144
|
-
return this.sdkPromise;
|
|
2145
|
-
const isMini = this.envType === 'miniprogram';
|
|
2146
|
-
const moduleName = isMini ? 'tencentcloud-cls-sdk-js-mini' : 'tencentcloud-cls-sdk-js-web';
|
|
2147
|
-
// UMD(浏览器脚本)优先读全局变量
|
|
2148
|
-
if (!isMini) {
|
|
2149
|
-
const g = readGlobal('tencentcloudClsSdkJsWeb');
|
|
2150
|
-
if (g?.AsyncClient && g?.Log && g?.LogGroup && g?.PutLogsRequest) {
|
|
2151
|
-
this.sdk = g;
|
|
2152
|
-
return this.sdk;
|
|
2153
|
-
}
|
|
2154
|
-
}
|
|
2155
|
-
// 尽量同步 require(小程序/webpack 里最稳),失败再走 import()
|
|
2156
|
-
const reqMod = tryRequire(moduleName);
|
|
2157
|
-
if (reqMod?.AsyncClient && reqMod?.Log && reqMod?.LogGroup && reqMod?.PutLogsRequest) {
|
|
2158
|
-
this.sdk = reqMod;
|
|
2159
|
-
return this.sdk;
|
|
2160
|
-
}
|
|
2161
|
-
this.sdkPromise = import(moduleName)
|
|
2162
|
-
.then((m) => {
|
|
2163
|
-
const mod = (m?.default && m.default.AsyncClient ? m.default : m);
|
|
2164
|
-
const sdk = {
|
|
2165
|
-
AsyncClient: mod.AsyncClient,
|
|
2166
|
-
Log: mod.Log,
|
|
2167
|
-
LogGroup: mod.LogGroup,
|
|
2168
|
-
PutLogsRequest: mod.PutLogsRequest,
|
|
2169
|
-
};
|
|
2170
|
-
this.sdk = sdk;
|
|
2171
|
-
return sdk;
|
|
2172
|
-
})
|
|
2173
|
-
.catch((err) => {
|
|
2174
|
-
this.sdkPromise = null;
|
|
2175
|
-
throw err;
|
|
2176
|
-
});
|
|
2177
|
-
return this.sdkPromise;
|
|
2178
|
-
}
|
|
2179
|
-
detectEnvType() {
|
|
2180
|
-
const wxAny = globalThis.wx;
|
|
2181
|
-
if (wxAny && typeof wxAny.getSystemInfoSync === 'function')
|
|
2182
|
-
return 'miniprogram';
|
|
2183
|
-
return 'browser';
|
|
2184
|
-
}
|
|
2185
2137
|
/**
|
|
2186
2138
|
* 直接上报:埋点入参必须是一维(扁平)Object
|
|
2187
2139
|
* - 非原始值(对象/数组等)会被自动 stringify 成 string
|
|
@@ -2524,6 +2476,122 @@ class ClsLogger {
|
|
|
2524
2476
|
}
|
|
2525
2477
|
}
|
|
2526
2478
|
|
|
2479
|
+
function readGlobal(key) {
|
|
2480
|
+
try {
|
|
2481
|
+
const g = globalThis;
|
|
2482
|
+
return g[key] ?? null;
|
|
2483
|
+
}
|
|
2484
|
+
catch {
|
|
2485
|
+
return null;
|
|
2486
|
+
}
|
|
2487
|
+
}
|
|
2488
|
+
function tryRequire(moduleName) {
|
|
2489
|
+
try {
|
|
2490
|
+
// 说明:
|
|
2491
|
+
// - ESM 构建(exports.import/module)里通常不存在模块作用域的 require
|
|
2492
|
+
// - 一些小程序运行时/构建链路会把 require 挂到 globalThis 上
|
|
2493
|
+
// 因此这里同时探测“模块作用域 require”与 “globalThis.require”
|
|
2494
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
2495
|
+
const localReq = (typeof require === 'function' ? require : null);
|
|
2496
|
+
const globalReq = readGlobal('require');
|
|
2497
|
+
const candidates = [localReq, globalReq].filter((fn) => typeof fn === 'function');
|
|
2498
|
+
for (const fn of candidates) {
|
|
2499
|
+
try {
|
|
2500
|
+
return fn(moduleName);
|
|
2501
|
+
}
|
|
2502
|
+
catch {
|
|
2503
|
+
// continue
|
|
2504
|
+
}
|
|
2505
|
+
}
|
|
2506
|
+
return null;
|
|
2507
|
+
}
|
|
2508
|
+
catch {
|
|
2509
|
+
return null;
|
|
2510
|
+
}
|
|
2511
|
+
}
|
|
2512
|
+
|
|
2513
|
+
/**
|
|
2514
|
+
* 兼容版 ClsLogger(默认入口)
|
|
2515
|
+
* - 保留了自动识别环境 + 动态 import 的逻辑
|
|
2516
|
+
* - 如果业务想瘦身,建议改用 @be-link/cls-logger/web 或 /mini
|
|
2517
|
+
*/
|
|
2518
|
+
class ClsLogger extends ClsLoggerCore {
|
|
2519
|
+
async loadSdk() {
|
|
2520
|
+
if (this.sdk)
|
|
2521
|
+
return this.sdk;
|
|
2522
|
+
if (this.sdkPromise)
|
|
2523
|
+
return this.sdkPromise;
|
|
2524
|
+
const normalizeSdk = (m) => {
|
|
2525
|
+
const mod = (m?.default && m.default.AsyncClient ? m.default : m);
|
|
2526
|
+
if (mod?.AsyncClient && mod?.Log && mod?.LogGroup && mod?.PutLogsRequest) {
|
|
2527
|
+
return {
|
|
2528
|
+
AsyncClient: mod.AsyncClient,
|
|
2529
|
+
Log: mod.Log,
|
|
2530
|
+
LogGroup: mod.LogGroup,
|
|
2531
|
+
PutLogsRequest: mod.PutLogsRequest,
|
|
2532
|
+
};
|
|
2533
|
+
}
|
|
2534
|
+
return null;
|
|
2535
|
+
};
|
|
2536
|
+
// 1) 外部注入的 loader(最高优先级)
|
|
2537
|
+
if (this.sdkLoaderOverride) {
|
|
2538
|
+
try {
|
|
2539
|
+
const loaded = await this.sdkLoaderOverride();
|
|
2540
|
+
const sdk = normalizeSdk(loaded);
|
|
2541
|
+
if (sdk) {
|
|
2542
|
+
this.sdk = sdk;
|
|
2543
|
+
return sdk;
|
|
2544
|
+
}
|
|
2545
|
+
}
|
|
2546
|
+
catch {
|
|
2547
|
+
// ignore and fallback
|
|
2548
|
+
}
|
|
2549
|
+
}
|
|
2550
|
+
// 2) 外部直接注入的 sdk
|
|
2551
|
+
if (this.sdkOverride) {
|
|
2552
|
+
const sdk = normalizeSdk(this.sdkOverride);
|
|
2553
|
+
if (sdk) {
|
|
2554
|
+
this.sdk = sdk;
|
|
2555
|
+
return sdk;
|
|
2556
|
+
}
|
|
2557
|
+
}
|
|
2558
|
+
const isMini = this.envType === 'miniprogram';
|
|
2559
|
+
// 静态字面量,方便打包器识别(但在此兼容入口里,仍然可能被一起分析)
|
|
2560
|
+
const WEB_SDK = 'tencentcloud-cls-sdk-js-web';
|
|
2561
|
+
const MINI_SDK = 'tencentcloud-cls-sdk-js-mini';
|
|
2562
|
+
// UMD(浏览器脚本)优先读全局变量
|
|
2563
|
+
if (!isMini) {
|
|
2564
|
+
const g = readGlobal('tencentcloudClsSdkJsWeb');
|
|
2565
|
+
const sdk = normalizeSdk(g);
|
|
2566
|
+
if (sdk) {
|
|
2567
|
+
this.sdk = sdk;
|
|
2568
|
+
return sdk;
|
|
2569
|
+
}
|
|
2570
|
+
}
|
|
2571
|
+
// 尽量同步 require
|
|
2572
|
+
const reqMod = tryRequire(isMini ? MINI_SDK : WEB_SDK);
|
|
2573
|
+
const reqSdk = normalizeSdk(reqMod);
|
|
2574
|
+
if (reqSdk) {
|
|
2575
|
+
this.sdk = reqSdk;
|
|
2576
|
+
return reqSdk;
|
|
2577
|
+
}
|
|
2578
|
+
// 动态 import
|
|
2579
|
+
this.sdkPromise = (isMini ? import(MINI_SDK) : import(WEB_SDK))
|
|
2580
|
+
.then((m) => {
|
|
2581
|
+
const sdk = normalizeSdk(m);
|
|
2582
|
+
if (!sdk)
|
|
2583
|
+
throw new Error(`ClsLogger.loadSdk: invalid sdk module for ${isMini ? MINI_SDK : WEB_SDK}`);
|
|
2584
|
+
this.sdk = sdk;
|
|
2585
|
+
return sdk;
|
|
2586
|
+
})
|
|
2587
|
+
.catch((err) => {
|
|
2588
|
+
this.sdkPromise = null;
|
|
2589
|
+
throw err;
|
|
2590
|
+
});
|
|
2591
|
+
return this.sdkPromise;
|
|
2592
|
+
}
|
|
2593
|
+
}
|
|
2594
|
+
|
|
2527
2595
|
const clsLogger = new ClsLogger();
|
|
2528
2596
|
|
|
2529
2597
|
export { ClsLogger, clsLogger, clsLogger as default };
|