@arms/rum-reactnative 0.0.2-bate.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.
- package/LICENSE +20 -0
- package/README.md +37 -0
- package/RumSdkReactnative.podspec +21 -0
- package/android/build.gradle +77 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/rumsdkreactnative/RumSdkReactnativeModule.kt +23 -0
- package/android/src/main/java/com/rumsdkreactnative/RumSdkReactnativePackage.kt +33 -0
- package/ios/RumSdkReactnative.h +5 -0
- package/ios/RumSdkReactnative.mm +18 -0
- package/lib/module/collector/action/index.js +68 -0
- package/lib/module/collector/action/index.js.map +1 -0
- package/lib/module/collector/exception/index.js +135 -0
- package/lib/module/collector/exception/index.js.map +1 -0
- package/lib/module/collector/resource/api.js +281 -0
- package/lib/module/collector/resource/api.js.map +1 -0
- package/lib/module/collector/view/perf.js +79 -0
- package/lib/module/collector/view/perf.js.map +1 -0
- package/lib/module/collector/view/pv.js +72 -0
- package/lib/module/collector/view/pv.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/plugin.js +39 -0
- package/lib/module/plugin.js.map +1 -0
- package/lib/module/processor/default-processor.js +22 -0
- package/lib/module/processor/default-processor.js.map +1 -0
- package/lib/module/processor/session-processor.js +20 -0
- package/lib/module/processor/session-processor.js.map +1 -0
- package/lib/module/reporter/index.js +56 -0
- package/lib/module/reporter/index.js.map +1 -0
- package/lib/module/shell.js +63 -0
- package/lib/module/shell.js.map +1 -0
- package/lib/module/types/client.js +4 -0
- package/lib/module/types/client.js.map +1 -0
- package/lib/module/types/index.js +2 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/utils/api.js +75 -0
- package/lib/module/utils/api.js.map +1 -0
- package/lib/module/utils/base.js +90 -0
- package/lib/module/utils/base.js.map +1 -0
- package/lib/module/utils/platform.js +95 -0
- package/lib/module/utils/platform.js.map +1 -0
- package/lib/module/utils/session.js +135 -0
- package/lib/module/utils/session.js.map +1 -0
- package/lib/module/utils/url.js +54 -0
- package/lib/module/utils/url.js.map +1 -0
- package/lib/module/utils/view.js +87 -0
- package/lib/module/utils/view.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/collector/action/index.d.ts +15 -0
- package/lib/typescript/src/collector/action/index.d.ts.map +1 -0
- package/lib/typescript/src/collector/exception/index.d.ts +25 -0
- package/lib/typescript/src/collector/exception/index.d.ts.map +1 -0
- package/lib/typescript/src/collector/resource/api.d.ts +21 -0
- package/lib/typescript/src/collector/resource/api.d.ts.map +1 -0
- package/lib/typescript/src/collector/view/perf.d.ts +1 -0
- package/lib/typescript/src/collector/view/perf.d.ts.map +1 -0
- package/lib/typescript/src/collector/view/pv.d.ts +16 -0
- package/lib/typescript/src/collector/view/pv.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +4 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/plugin.d.ts +3 -0
- package/lib/typescript/src/plugin.d.ts.map +1 -0
- package/lib/typescript/src/processor/default-processor.d.ts +6 -0
- package/lib/typescript/src/processor/default-processor.d.ts.map +1 -0
- package/lib/typescript/src/processor/session-processor.d.ts +9 -0
- package/lib/typescript/src/processor/session-processor.d.ts.map +1 -0
- package/lib/typescript/src/reporter/index.d.ts +16 -0
- package/lib/typescript/src/reporter/index.d.ts.map +1 -0
- package/lib/typescript/src/shell.d.ts +29 -0
- package/lib/typescript/src/shell.d.ts.map +1 -0
- package/lib/typescript/src/types/client.d.ts +27 -0
- package/lib/typescript/src/types/client.d.ts.map +1 -0
- package/lib/typescript/src/types/index.d.ts +118 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/api.d.ts +59 -0
- package/lib/typescript/src/utils/api.d.ts.map +1 -0
- package/lib/typescript/src/utils/base.d.ts +8 -0
- package/lib/typescript/src/utils/base.d.ts.map +1 -0
- package/lib/typescript/src/utils/platform.d.ts +15 -0
- package/lib/typescript/src/utils/platform.d.ts.map +1 -0
- package/lib/typescript/src/utils/session.d.ts +37 -0
- package/lib/typescript/src/utils/session.d.ts.map +1 -0
- package/lib/typescript/src/utils/url.d.ts +17 -0
- package/lib/typescript/src/utils/url.d.ts.map +1 -0
- package/lib/typescript/src/utils/view.d.ts +13 -0
- package/lib/typescript/src/utils/view.d.ts.map +1 -0
- package/package.json +158 -0
- package/src/collector/action/index.ts +67 -0
- package/src/collector/exception/index.ts +158 -0
- package/src/collector/resource/api.ts +379 -0
- package/src/collector/view/perf.ts +77 -0
- package/src/collector/view/pv.ts +73 -0
- package/src/index.ts +4 -0
- package/src/plugin.ts +41 -0
- package/src/processor/default-processor.ts +22 -0
- package/src/processor/session-processor.ts +23 -0
- package/src/reporter/index.ts +67 -0
- package/src/shell.ts +81 -0
- package/src/types/client.ts +32 -0
- package/src/types/index.ts +159 -0
- package/src/utils/api.ts +119 -0
- package/src/utils/base.ts +92 -0
- package/src/utils/platform.ts +107 -0
- package/src/utils/session.ts +168 -0
- package/src/utils/url.ts +53 -0
- package/src/utils/view.ts +93 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Shell } from '@arms/rum-core';
|
|
4
|
+
import PvCollector from "./collector/view/pv.js";
|
|
5
|
+
import ExceptionCollector from "./collector/exception/index.js";
|
|
6
|
+
import ApiCollector from "./collector/resource/api.js";
|
|
7
|
+
import DefaultProcessor from "./processor/default-processor.js";
|
|
8
|
+
import SessionProcessor from "./processor/session-processor.js";
|
|
9
|
+
import Reporter from "./reporter/index.js";
|
|
10
|
+
import { VERSION } from "./utils/platform.js";
|
|
11
|
+
import { RumSession } from "./utils/session.js";
|
|
12
|
+
import { startTrackingViews, stopTrackingViews } from "./utils/view.js";
|
|
13
|
+
/**
|
|
14
|
+
* 对外导出 shell 层, 所有 shell 层模型的 API 设计约定:
|
|
15
|
+
* 1. API 命名空间按照 variables / functions / events 来组织
|
|
16
|
+
* 2. 事件(events)的命名格式为:on[Will|Did]VerbNoun?,参考 https://code.visualstudio.com/api/references/vscode-api#events
|
|
17
|
+
* 3. 基于 Disposable 模式,对于事件的绑定、快捷键的绑定函数,返回值则是解绑函数
|
|
18
|
+
*/
|
|
19
|
+
export class ArmsRum extends Shell {
|
|
20
|
+
version = VERSION;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 初始化
|
|
24
|
+
*/
|
|
25
|
+
init(config) {
|
|
26
|
+
this.client.useCollectors([new PvCollector(), new ExceptionCollector(), new ApiCollector()]);
|
|
27
|
+
this.client.useProcessors([new DefaultProcessor(), new SessionProcessor()]);
|
|
28
|
+
this.client.useReporter(new Reporter());
|
|
29
|
+
this.client.init(config, new RumSession());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* set config
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
setConfig(...params) {
|
|
37
|
+
const ctx = this.client.getContext();
|
|
38
|
+
if (params.length === 2) {
|
|
39
|
+
const ctx = this.client.getContext();
|
|
40
|
+
const oldConfig = ctx.getConfig();
|
|
41
|
+
ctx.setConfig({
|
|
42
|
+
...oldConfig,
|
|
43
|
+
[params[0]]: params[1]
|
|
44
|
+
});
|
|
45
|
+
} else {
|
|
46
|
+
ctx.setConfig(params[0]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
getLocalConfig(_duration, _pid) {}
|
|
50
|
+
getRemoteConfig(_url, _config) {}
|
|
51
|
+
storeRemoteConfig(_config, _pid) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
startTrackingViews(navigationRef) {
|
|
55
|
+
if (!navigationRef) return;
|
|
56
|
+
startTrackingViews(navigationRef);
|
|
57
|
+
}
|
|
58
|
+
stopTrackingViews() {
|
|
59
|
+
stopTrackingViews();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export default new ArmsRum();
|
|
63
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Shell","PvCollector","ExceptionCollector","ApiCollector","DefaultProcessor","SessionProcessor","Reporter","VERSION","RumSession","startTrackingViews","stopTrackingViews","ArmsRum","version","init","config","client","useCollectors","useProcessors","useReporter","setConfig","params","ctx","getContext","length","oldConfig","getConfig","getLocalConfig","_duration","_pid","getRemoteConfig","_url","_config","storeRemoteConfig","navigationRef"],"sourceRoot":"../../src","sources":["shell.ts"],"mappings":";;AAAA,SAASA,KAAK,QAAQ,gBAAgB;AACtC,OAAOC,WAAW,MAAM,wBAAqB;AAC7C,OAAOC,kBAAkB,MAAM,gCAAuB;AACtD,OAAOC,YAAY,MAAM,6BAA0B;AACnD,OAAOC,gBAAgB,MAAM,kCAA+B;AAC5D,OAAOC,gBAAgB,MAAM,kCAA+B;AAC5D,OAAOC,QAAQ,MAAM,qBAAY;AAEjC,SAASC,OAAO,QAAQ,qBAAkB;AAC1C,SAASC,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,kBAAkB,EAAGC,iBAAiB,QAAO,iBAAc;AAGpE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAO,SAASX,KAAK,CAAC;EACjCY,OAAO,GAAGL,OAAO;;EAEjB;AACF;AACA;EACEM,IAAIA,CAACC,MAAiB,EAAE;IACtB,IAAI,CAACC,MAAM,CAACC,aAAa,CAAC,CACxB,IAAIf,WAAW,CAAC,CAAC,EACjB,IAAIC,kBAAkB,CAAC,CAAC,EACxB,IAAIC,YAAY,CAAC,CAAC,CACnB,CAAC;IACF,IAAI,CAACY,MAAM,CAACE,aAAa,CAAC,CACxB,IAAIb,gBAAgB,CAAC,CAAC,EACtB,IAAIC,gBAAgB,CAAC,CAAC,CACvB,CAAC;IACF,IAAI,CAACU,MAAM,CAACG,WAAW,CAAC,IAAIZ,QAAQ,CAAC,CAAC,CAAC;IACvC,IAAI,CAACS,MAAM,CAACF,IAAI,CAACC,MAAM,EAAE,IAAIN,UAAU,CAAC,CAAC,CAAC;EAC5C;;EAEA;AACF;AACA;;EAGEW,SAASA,CAAC,GAAGC,MAAa,EAAQ;IAChC,MAAMC,GAAG,GAAG,IAAI,CAACN,MAAM,CAACO,UAAU,CAAC,CAAC;IAEpC,IAAIF,MAAM,CAACG,MAAM,KAAK,CAAC,EAAE;MACvB,MAAMF,GAAG,GAAG,IAAI,CAACN,MAAM,CAACO,UAAU,CAAC,CAAC;MACpC,MAAME,SAAS,GAAGH,GAAG,CAACI,SAAS,CAAC,CAAC;MACjCJ,GAAG,CAACF,SAAS,CAAC;QACZ,GAAGK,SAAS;QACZ,CAACJ,MAAM,CAAC,CAAC,CAAC,GAAGA,MAAM,CAAC,CAAC;MACvB,CAAC,CAAC;IACJ,CAAC,MAAM;MACLC,GAAG,CAACF,SAAS,CAACC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B;EACF;EAEAM,cAAcA,CAACC,SAAiB,EAAEC,IAAY,EAAO,CACrD;EAEAC,eAAeA,CAACC,IAAY,EAAEC,OAAY,EAAO,CAEjD;EAEAC,iBAAiBA,CAACD,OAAY,EAAEH,IAAY,EAAW;IACrD,OAAO,KAAK;EACd;EAEAnB,kBAAkBA,CAACwB,aAA2C,EAAE;IAC9D,IAAI,CAACA,aAAa,EAAE;IACpBxB,kBAAkB,CAACwB,aAAa,CAAC;EACnC;EAEAvB,iBAAiBA,CAAA,EAAG;IAClBA,iBAAiB,CAAC,CAAC;EACrB;AACF;AAEA,eAAe,IAAIC,OAAO,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/client.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { isFunction, isNumber, isObject, isString, ResourceStatus } from "@arms/rum-core";
|
|
4
|
+
export const ApiType = {
|
|
5
|
+
FETCH: 'fetch',
|
|
6
|
+
XHR: 'xmlhttprequest'
|
|
7
|
+
// NativeXHR: 'fetch',
|
|
8
|
+
};
|
|
9
|
+
export function reviseApiAttr(attrs) {
|
|
10
|
+
if (!attrs || !isObject(attrs)) return;
|
|
11
|
+
const obj = {};
|
|
12
|
+
if (isString(attrs.name)) {
|
|
13
|
+
obj['name'] = attrs.name.substring(0, 1e3);
|
|
14
|
+
}
|
|
15
|
+
if (isString(attrs.message)) {
|
|
16
|
+
obj['message'] = attrs.message.substring(0, 1e3);
|
|
17
|
+
}
|
|
18
|
+
if ('success' in attrs) {
|
|
19
|
+
obj['success'] = !!attrs.success ? 1 : 0;
|
|
20
|
+
}
|
|
21
|
+
if (isNumber(attrs.duration) && attrs.duration >= 0) {
|
|
22
|
+
obj['duration'] = attrs.duration;
|
|
23
|
+
}
|
|
24
|
+
if (isString(attrs.status_code)) {
|
|
25
|
+
obj['status_code'] = attrs.status_code.substring(0, 100);
|
|
26
|
+
}
|
|
27
|
+
if (isNumber(attrs.status_code)) {
|
|
28
|
+
obj['status_code'] = attrs.status_code;
|
|
29
|
+
}
|
|
30
|
+
if (isString(attrs.snapshots)) {
|
|
31
|
+
obj['snapshots'] = attrs.snapshots.substring(0, 5e3);
|
|
32
|
+
}
|
|
33
|
+
return obj;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* 根据指定 URL 获取视图的名称,默认为其 path 部分
|
|
38
|
+
* @param url 需要提取路径部分的 URL
|
|
39
|
+
* @param spaMode 页面 SPA 路由模式
|
|
40
|
+
*/
|
|
41
|
+
export function getPathByURL(url) {
|
|
42
|
+
try {
|
|
43
|
+
const urlObj = new URL(url);
|
|
44
|
+
return urlObj.pathname || '/';
|
|
45
|
+
} catch (error) {
|
|
46
|
+
return url;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export function getResourceName(url, parseFunction) {
|
|
50
|
+
let name;
|
|
51
|
+
if (parseFunction && isFunction(parseFunction)) {
|
|
52
|
+
name = parseFunction(url);
|
|
53
|
+
} else {
|
|
54
|
+
name = getPathByURL(url);
|
|
55
|
+
}
|
|
56
|
+
return name;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 判断成功还是失败
|
|
61
|
+
* @param status_code
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
export function getResourceSuccessByCode(status_code) {
|
|
65
|
+
let status;
|
|
66
|
+
const THRESHOLD = [200, 300];
|
|
67
|
+
if (status_code) {
|
|
68
|
+
// @ts-ignore
|
|
69
|
+
status = status_code >= THRESHOLD[0] && status_code < THRESHOLD[1] ? ResourceStatus.Success : ResourceStatus.Failed;
|
|
70
|
+
} else {
|
|
71
|
+
status = ResourceStatus.Unknown;
|
|
72
|
+
}
|
|
73
|
+
return status;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isFunction","isNumber","isObject","isString","ResourceStatus","ApiType","FETCH","XHR","reviseApiAttr","attrs","obj","name","substring","message","success","duration","status_code","snapshots","getPathByURL","url","urlObj","URL","pathname","error","getResourceName","parseFunction","getResourceSuccessByCode","status","THRESHOLD","Success","Failed","Unknown"],"sourceRoot":"../../../src","sources":["utils/api.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// /**
|
|
4
|
+
// * 保留指定位数的小数
|
|
5
|
+
// * @param num 原数据
|
|
6
|
+
// * @param decimal 小数位数
|
|
7
|
+
// * @returns
|
|
8
|
+
// */
|
|
9
|
+
// export function formatNumber(num: number, decimal: number = 3): number {
|
|
10
|
+
// if (!num) {
|
|
11
|
+
// return num;
|
|
12
|
+
// }
|
|
13
|
+
// let str = num.toString();
|
|
14
|
+
// const index = str.indexOf('.');
|
|
15
|
+
// if (index !== -1) {
|
|
16
|
+
// str = str.substring(0, decimal + index + 1);
|
|
17
|
+
// } else {
|
|
18
|
+
// str = str.substring(0);
|
|
19
|
+
// }
|
|
20
|
+
// return parseFloat(str);
|
|
21
|
+
// }
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 获取获取当前时间 fix Data.now() 存在的缺陷
|
|
25
|
+
* duration方法用于计算时间跨度,由于Date.now存在bug,可能为负数,尽可能使用performance.now计算
|
|
26
|
+
* @returns
|
|
27
|
+
*/
|
|
28
|
+
export function getCurrentTime() {
|
|
29
|
+
return new Date().getTime();
|
|
30
|
+
}
|
|
31
|
+
export function getStringSize(str, encode = 'utf8') {
|
|
32
|
+
if (typeof str !== 'string') {
|
|
33
|
+
throw new TypeError('Input must be a string');
|
|
34
|
+
}
|
|
35
|
+
const encoding = encode.toLowerCase();
|
|
36
|
+
if (encoding === 'utf16') {
|
|
37
|
+
let bytes = 0;
|
|
38
|
+
for (let i = 0; i < str.length; i++) {
|
|
39
|
+
const code = str.charCodeAt(i);
|
|
40
|
+
|
|
41
|
+
// 检查代理对(有效的高位代理后跟低位代理)
|
|
42
|
+
if (code >= 0xD800 && code <= 0xDBFF) {
|
|
43
|
+
if (i + 1 < str.length) {
|
|
44
|
+
const nextCode = str.charCodeAt(i + 1);
|
|
45
|
+
if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {
|
|
46
|
+
bytes += 4; // 有效的代理对(4字节)
|
|
47
|
+
i++; // 跳过低位代理
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
bytes += 2; // 基本字符或无效代理(2字节)
|
|
53
|
+
}
|
|
54
|
+
return bytes;
|
|
55
|
+
}
|
|
56
|
+
if (encoding === 'utf8') {
|
|
57
|
+
let totalBytes = 0;
|
|
58
|
+
for (let i = 0; i < str.length; i++) {
|
|
59
|
+
let code = str.charCodeAt(i);
|
|
60
|
+
|
|
61
|
+
// 处理代理对(UTF-16辅助平面)
|
|
62
|
+
if (code >= 0xD800 && code <= 0xDBFF) {
|
|
63
|
+
if (i + 1 < str.length) {
|
|
64
|
+
const nextCode = str.charCodeAt(i + 1);
|
|
65
|
+
if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {
|
|
66
|
+
// 计算实际的Unicode码点
|
|
67
|
+
code = (code - 0xD800) * 0x400 + (nextCode - 0xDC00) + 0x10000;
|
|
68
|
+
i++; // 跳过低位代理
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 根据码点值计算UTF-8字节长度
|
|
74
|
+
if (code <= 0x7F) {
|
|
75
|
+
totalBytes += 1; // ASCII字符(1字节)
|
|
76
|
+
} else if (code <= 0x7FF) {
|
|
77
|
+
totalBytes += 2; // 拉丁文补充等(2字节)
|
|
78
|
+
} else if (code <= 0xFFFF) {
|
|
79
|
+
totalBytes += 3; // 基本多语言平面(3字节)
|
|
80
|
+
} else if (code <= 0x10FFFF) {
|
|
81
|
+
totalBytes += 4; // 辅助平面(4字节)
|
|
82
|
+
} else {
|
|
83
|
+
totalBytes += 3; // 无效码点,使用替换字符长度
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return totalBytes;
|
|
87
|
+
}
|
|
88
|
+
throw new Error('Unsupported encoding. Use "utf8" or "utf16".');
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getCurrentTime","Date","getTime","getStringSize","str","encode","TypeError","encoding","toLowerCase","bytes","i","length","code","charCodeAt","nextCode","totalBytes","Error"],"sourceRoot":"../../../src","sources":["utils/base.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,cAAcA,CAAA,EAAG;EAC/B,OAAO,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;AAC7B;AAEA,OAAO,SAASC,aAAaA,CAACC,GAAW,EAAEC,MAAM,GAAG,MAAM,EAAE;EAC1D,IAAI,OAAOD,GAAG,KAAK,QAAQ,EAAE;IAC3B,MAAM,IAAIE,SAAS,CAAC,wBAAwB,CAAC;EAC/C;EAEA,MAAMC,QAAQ,GAAGF,MAAM,CAACG,WAAW,CAAC,CAAC;EAErC,IAAID,QAAQ,KAAK,OAAO,EAAE;IACxB,IAAIE,KAAK,GAAG,CAAC;IACb,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,GAAG,CAACO,MAAM,EAAED,CAAC,EAAE,EAAE;MACnC,MAAME,IAAI,GAAGR,GAAG,CAACS,UAAU,CAACH,CAAC,CAAC;;MAE9B;MACA,IAAIE,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAI,MAAM,EAAE;QACpC,IAAIF,CAAC,GAAG,CAAC,GAAGN,GAAG,CAACO,MAAM,EAAE;UACtB,MAAMG,QAAQ,GAAGV,GAAG,CAACS,UAAU,CAACH,CAAC,GAAG,CAAC,CAAC;UACtC,IAAII,QAAQ,IAAI,MAAM,IAAIA,QAAQ,IAAI,MAAM,EAAE;YAC5CL,KAAK,IAAI,CAAC,CAAC,CAAE;YACbC,CAAC,EAAE,CAAC,CAAQ;YACZ;UACF;QACF;MACF;MACAD,KAAK,IAAI,CAAC,CAAC,CAAE;IACf;IACA,OAAOA,KAAK;EACd;EAEA,IAAIF,QAAQ,KAAK,MAAM,EAAE;IACvB,IAAIQ,UAAU,GAAG,CAAC;IAClB,KAAK,IAAIL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,GAAG,CAACO,MAAM,EAAED,CAAC,EAAE,EAAE;MACnC,IAAIE,IAAI,GAAGR,GAAG,CAACS,UAAU,CAACH,CAAC,CAAC;;MAE5B;MACA,IAAIE,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAI,MAAM,EAAE;QACpC,IAAIF,CAAC,GAAG,CAAC,GAAGN,GAAG,CAACO,MAAM,EAAE;UACtB,MAAMG,QAAQ,GAAGV,GAAG,CAACS,UAAU,CAACH,CAAC,GAAG,CAAC,CAAC;UACtC,IAAII,QAAQ,IAAI,MAAM,IAAIA,QAAQ,IAAI,MAAM,EAAE;YAC5C;YACAF,IAAI,GAAG,CAACA,IAAI,GAAG,MAAM,IAAI,KAAK,IAAIE,QAAQ,GAAG,MAAM,CAAC,GAAG,OAAO;YAC9DJ,CAAC,EAAE,CAAC,CAAE;UACR;QACF;MACF;;MAEA;MACA,IAAIE,IAAI,IAAI,IAAI,EAAE;QAChBG,UAAU,IAAI,CAAC,CAAC,CAAE;MACpB,CAAC,MAAM,IAAIH,IAAI,IAAI,KAAK,EAAE;QACxBG,UAAU,IAAI,CAAC,CAAC,CAAE;MACpB,CAAC,MAAM,IAAIH,IAAI,IAAI,MAAM,EAAE;QACzBG,UAAU,IAAI,CAAC,CAAC,CAAE;MACpB,CAAC,MAAM,IAAIH,IAAI,IAAI,QAAQ,EAAE;QAC3BG,UAAU,IAAI,CAAC,CAAC,CAAE;MACpB,CAAC,MAAM;QACLA,UAAU,IAAI,CAAC,CAAC,CAAE;MACpB;IACF;IACA,OAAOA,UAAU;EACnB;EAEA,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC;AACjE","ignoreList":[]}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { AppType } from "@arms/rum-core";
|
|
4
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
5
|
+
|
|
6
|
+
// declare var __VERSION__: string;
|
|
7
|
+
// export const VERSION = __VERSION__;
|
|
8
|
+
export const VERSION = 'test';
|
|
9
|
+
export const appName = 'react-native';
|
|
10
|
+
export function getStorage(key) {
|
|
11
|
+
return AsyncStorage.getItem(key);
|
|
12
|
+
}
|
|
13
|
+
export function setStorage(key, data) {
|
|
14
|
+
return AsyncStorage.setItem(key, data);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// export function getNetType(): Promise<string> {
|
|
18
|
+
// return new Promise((resolve) => {
|
|
19
|
+
// try {
|
|
20
|
+
// sdk.getNetworkType({
|
|
21
|
+
// success: function (e) {
|
|
22
|
+
// const networkType = e.networkType || e.subtype;
|
|
23
|
+
// resolve(networkType ? networkType.toLowerCase() : undefined)
|
|
24
|
+
// },
|
|
25
|
+
// fail: function (res) {
|
|
26
|
+
// resolve(undefined)
|
|
27
|
+
// }
|
|
28
|
+
// });
|
|
29
|
+
// } catch (e) {
|
|
30
|
+
// resolve(undefined)
|
|
31
|
+
// }
|
|
32
|
+
// })
|
|
33
|
+
// }
|
|
34
|
+
|
|
35
|
+
export const fixAttrs = function (bundle) {
|
|
36
|
+
if (!bundle) return;
|
|
37
|
+
let device = {};
|
|
38
|
+
let os = {};
|
|
39
|
+
let net = {};
|
|
40
|
+
// try {
|
|
41
|
+
// device = {
|
|
42
|
+
// id: DeviceInfo.getUniqueIdSync(),
|
|
43
|
+
// type: DeviceInfo.getDeviceType(),
|
|
44
|
+
// brand: DeviceInfo.getBrand(),
|
|
45
|
+
// model: DeviceInfo.getModel(),
|
|
46
|
+
// name: DeviceInfo.getDeviceNameSync(),
|
|
47
|
+
// }
|
|
48
|
+
//
|
|
49
|
+
// os = {
|
|
50
|
+
// type: DeviceInfo.getSystemName(),
|
|
51
|
+
// version: DeviceInfo.getSystemVersion(),
|
|
52
|
+
// container: appName,
|
|
53
|
+
// container_version: DeviceInfo.getVersion(),
|
|
54
|
+
// };
|
|
55
|
+
//
|
|
56
|
+
// net = {
|
|
57
|
+
// // model: ,
|
|
58
|
+
// // @ts-ignore
|
|
59
|
+
// ip: DeviceInfo.getIpAddressSync(),
|
|
60
|
+
// }
|
|
61
|
+
// } catch (err) {
|
|
62
|
+
// console.warn('[rum] react-native-device-info fail', err);
|
|
63
|
+
// const info = Platform.constants;
|
|
64
|
+
// const rn = info.reactNativeVersion;
|
|
65
|
+
// os.type = info.systemName;
|
|
66
|
+
// os.version = info.osVersion;
|
|
67
|
+
// os.container_version = `${rn.major}.${rn.minor}.${rn.patch}`;
|
|
68
|
+
// }
|
|
69
|
+
// try {
|
|
70
|
+
// const info = Platform.constants;
|
|
71
|
+
// const rn = info.reactNativeVersion;
|
|
72
|
+
// os.type = info.systemName;
|
|
73
|
+
// os.version = info.osVersion;
|
|
74
|
+
// os.container = appName;
|
|
75
|
+
// os.container_version = `${rn.major}.${rn.minor}.${rn.patch}`;
|
|
76
|
+
// } catch (e) {
|
|
77
|
+
// //
|
|
78
|
+
// }
|
|
79
|
+
bundle.app.type = AppType.reactnative;
|
|
80
|
+
bundle._v = VERSION;
|
|
81
|
+
bundle.net = {
|
|
82
|
+
...net,
|
|
83
|
+
...bundle.net
|
|
84
|
+
};
|
|
85
|
+
bundle.device = {
|
|
86
|
+
...device,
|
|
87
|
+
...bundle.device
|
|
88
|
+
};
|
|
89
|
+
bundle.os = {
|
|
90
|
+
...os,
|
|
91
|
+
...bundle.os
|
|
92
|
+
};
|
|
93
|
+
return bundle;
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AppType","AsyncStorage","VERSION","appName","getStorage","key","getItem","setStorage","data","setItem","fixAttrs","bundle","device","os","net","app","type","reactnative","_v"],"sourceRoot":"../../../src","sources":["utils/platform.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAwB,gBAAgB;AACxD,OAAOC,YAAY,MAAM,2CAA2C;;AAEpE;AACA;AACA,OAAO,MAAMC,OAAO,GAAG,MAAM;AAa7B,OAAO,MAAMC,OAAO,GAAG,cAAc;AAErC,OAAO,SAASC,UAAUA,CAACC,GAAW,EAAE;EACtC,OAAOJ,YAAY,CAACK,OAAO,CAACD,GAAG,CAAC;AAClC;AAEA,OAAO,SAASE,UAAUA,CAACF,GAAW,EAAEG,IAAY,EAAE;EACpD,OAAOP,YAAY,CAACQ,OAAO,CAACJ,GAAG,EAAEG,IAAI,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAME,QAAQ,GAAG,SAAAA,CAAUC,MAAsB,EAA8B;EACpF,IAAI,CAACA,MAAM,EAAE;EACb,IAAIC,MAAM,GAAG,CAAC,CAAQ;EACtB,IAAIC,EAAE,GAAG,CAAC,CAAQ;EAClB,IAAIC,GAAG,GAAG,CAAC,CAAQ;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACAH,MAAM,CAACI,GAAG,CAACC,IAAI,GAAGhB,OAAO,CAACiB,WAAW;EACrCN,MAAM,CAACO,EAAE,GAAGhB,OAAO;EACnBS,MAAM,CAACG,GAAG,GAAG;IACX,GAAGA,GAAG;IACN,GAAGH,MAAM,CAACG;EACZ,CAAC;EACDH,MAAM,CAACC,MAAM,GAAG;IACd,GAAGA,MAAM;IACT,GAAGD,MAAM,CAACC;EACZ,CAAC;EACDD,MAAM,CAACE,EAAE,GAAG;IACV,GAAGA,EAAE;IACL,GAAGF,MAAM,CAACE;EACZ,CAAC;EACD,OAAOF,MAAM;AACf,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { generateEventId, generateGUID, generateSpanId, isNumber, ONE_DAY, ONE_HOUR, ONE_MINUTE, performDraw } from '@arms/rum-core';
|
|
4
|
+
import { getCurrentTime } from "./base.js";
|
|
5
|
+
import { getCurView } from "./view.js";
|
|
6
|
+
import { getStorage, setStorage } from "./platform.js";
|
|
7
|
+
|
|
8
|
+
// 存储userID的键名
|
|
9
|
+
const USER_ID = '_arms_uid';
|
|
10
|
+
// 存储session
|
|
11
|
+
// const RUM_SESSION = '_arms_session';
|
|
12
|
+
|
|
13
|
+
export class RumSession {
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
|
|
16
|
+
// private sessionId = '';
|
|
17
|
+
|
|
18
|
+
session = '';
|
|
19
|
+
userId = '';
|
|
20
|
+
constructor() {
|
|
21
|
+
this.initUser();
|
|
22
|
+
}
|
|
23
|
+
init(ctx) {
|
|
24
|
+
this.ctx = ctx;
|
|
25
|
+
this.sessionConfig = this.fixSessionConfig(ctx.config?.sessionConfig);
|
|
26
|
+
}
|
|
27
|
+
getSessionId() {
|
|
28
|
+
return this.getSessionInfo().sessionId;
|
|
29
|
+
}
|
|
30
|
+
getSampled() {
|
|
31
|
+
return this.getSessionInfo().sampled;
|
|
32
|
+
}
|
|
33
|
+
checkSession(info) {
|
|
34
|
+
const {
|
|
35
|
+
overtime = 0,
|
|
36
|
+
maxDuration = 0
|
|
37
|
+
} = this.sessionConfig;
|
|
38
|
+
const now = getCurrentTime();
|
|
39
|
+
return !(info.startTime + maxDuration < now || info.lastTime + overtime < now);
|
|
40
|
+
}
|
|
41
|
+
updateSession() {
|
|
42
|
+
const info = this.getSessionInfo();
|
|
43
|
+
if (info.isNew) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const startTime = info.startTime;
|
|
47
|
+
const lastTime = getCurrentTime();
|
|
48
|
+
const sampled = info.sampled ? 1 : 0;
|
|
49
|
+
this.session = `${info.sessionId}-${sampled}-${startTime}-${lastTime}`;
|
|
50
|
+
// setStorage(RUM_SESSION, `${info.sessionId}-${sampled}-${startTime}-${lastTime}`)
|
|
51
|
+
}
|
|
52
|
+
getSessionInfo() {
|
|
53
|
+
const [sid, sampled, startTime, lastTime] = this.session.split('-');
|
|
54
|
+
let info = {
|
|
55
|
+
sessionId: sid,
|
|
56
|
+
sampled: sampled !== '0',
|
|
57
|
+
startTime: parseInt(startTime || '') || 0,
|
|
58
|
+
lastTime: parseInt(lastTime || '') || 0
|
|
59
|
+
};
|
|
60
|
+
if (!this.checkSession(info)) {
|
|
61
|
+
info = this.resetSession();
|
|
62
|
+
}
|
|
63
|
+
return info;
|
|
64
|
+
}
|
|
65
|
+
getEventId() {
|
|
66
|
+
const sid = this.getSessionId();
|
|
67
|
+
return generateEventId(sid);
|
|
68
|
+
}
|
|
69
|
+
getViewId() {
|
|
70
|
+
return this.getUUID();
|
|
71
|
+
}
|
|
72
|
+
async initUser() {
|
|
73
|
+
this.userId = await getStorage(USER_ID);
|
|
74
|
+
if (!this.userId) {
|
|
75
|
+
this.userId = `uid_${generateSpanId(16, 36)}`;
|
|
76
|
+
await setStorage(USER_ID, this.userId);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
getUserId() {
|
|
80
|
+
return this.userId;
|
|
81
|
+
}
|
|
82
|
+
resetSession() {
|
|
83
|
+
const {
|
|
84
|
+
sampleRate = 1
|
|
85
|
+
} = this.sessionConfig;
|
|
86
|
+
const sid = this.getUUID();
|
|
87
|
+
const now = getCurrentTime();
|
|
88
|
+
const sampled = performDraw(sampleRate * 100);
|
|
89
|
+
this.session = `${sid}-${sampled ? 1 : 0}-${now}-${now}`;
|
|
90
|
+
// setStorage(RUM_SESSION, this.session);
|
|
91
|
+
return {
|
|
92
|
+
sessionId: sid,
|
|
93
|
+
sampled: sampled,
|
|
94
|
+
startTime: now,
|
|
95
|
+
lastTime: now,
|
|
96
|
+
isNew: true
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
getUUID() {
|
|
100
|
+
return generateGUID().replace(/-/g, '');
|
|
101
|
+
}
|
|
102
|
+
fixSessionConfig(sessionConfig = {}) {
|
|
103
|
+
let {
|
|
104
|
+
sampleRate,
|
|
105
|
+
maxDuration,
|
|
106
|
+
overtime
|
|
107
|
+
} = sessionConfig;
|
|
108
|
+
if (!isNumber(sampleRate) || sampleRate < 0 || sampleRate > 1) {
|
|
109
|
+
sampleRate = 1;
|
|
110
|
+
}
|
|
111
|
+
if (!isNumber(maxDuration) || maxDuration < 4 * ONE_HOUR || maxDuration > ONE_DAY) {
|
|
112
|
+
maxDuration = ONE_DAY;
|
|
113
|
+
}
|
|
114
|
+
if (!isNumber(overtime) || overtime > ONE_HOUR || overtime < 10 * ONE_MINUTE) {
|
|
115
|
+
overtime = 30 * ONE_MINUTE;
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
sampleRate,
|
|
119
|
+
maxDuration,
|
|
120
|
+
overtime
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
getBaseEvent() {
|
|
124
|
+
const session_id = this.getSessionId();
|
|
125
|
+
const event_id = this.getEventId();
|
|
126
|
+
return {
|
|
127
|
+
timestamp: getCurrentTime(),
|
|
128
|
+
session_id,
|
|
129
|
+
event_id,
|
|
130
|
+
view: this.ctx ? getCurView(this.ctx) : undefined,
|
|
131
|
+
times: 1
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["generateEventId","generateGUID","generateSpanId","isNumber","ONE_DAY","ONE_HOUR","ONE_MINUTE","performDraw","getCurrentTime","getCurView","getStorage","setStorage","USER_ID","RumSession","session","userId","constructor","initUser","init","ctx","sessionConfig","fixSessionConfig","config","getSessionId","getSessionInfo","sessionId","getSampled","sampled","checkSession","info","overtime","maxDuration","now","startTime","lastTime","updateSession","isNew","sid","split","parseInt","resetSession","getEventId","getViewId","getUUID","getUserId","sampleRate","replace","getBaseEvent","session_id","event_id","timestamp","view","undefined","times"],"sourceRoot":"../../../src","sources":["utils/session.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 根据指定 URL 获取视图的名称,默认为其path部分
|
|
5
|
+
* @param url 需要提取路径部分的 URL
|
|
6
|
+
* @param isHash 是否为 hash 模式路由的 URL
|
|
7
|
+
*/
|
|
8
|
+
export function getPathByURL(url, isHash = false) {
|
|
9
|
+
try {
|
|
10
|
+
const urlObj = getURL(url);
|
|
11
|
+
if (!urlObj) return;
|
|
12
|
+
if (isHash) {
|
|
13
|
+
return urlObj.hash;
|
|
14
|
+
} else {
|
|
15
|
+
return urlObj.pathname;
|
|
16
|
+
}
|
|
17
|
+
} catch (error) {
|
|
18
|
+
return '';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// /**
|
|
23
|
+
// * 检查是否为上报域名
|
|
24
|
+
// * @param ctx
|
|
25
|
+
// * @param url 需要提取路径部分的 URL
|
|
26
|
+
// */
|
|
27
|
+
// export function isEndpoint(ctx: IContext, url: string): boolean {
|
|
28
|
+
// const { endpoint } = ctx.getConfig();
|
|
29
|
+
// try {
|
|
30
|
+
// return getURL(url).hostname === getURL(endpoint).hostname
|
|
31
|
+
// } catch (e) {
|
|
32
|
+
// return false;
|
|
33
|
+
// }
|
|
34
|
+
// }
|
|
35
|
+
|
|
36
|
+
const REGEX = /^(?:([^:\/?#]+):\/\/)?((?:([^\/?#@]*)@)?([^\/?#:]*)(?:\:(\d*))?)?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n)*))?/i;
|
|
37
|
+
export function getURL(url) {
|
|
38
|
+
const parts = decodeURIComponent(url).match(REGEX);
|
|
39
|
+
if (!parts) return null;
|
|
40
|
+
const auth = (parts[3] || '').split(':');
|
|
41
|
+
const host = auth.length ? (parts[2] || '').replace(/(.*\@)/, '') : parts[2];
|
|
42
|
+
return {
|
|
43
|
+
uri: parts[0],
|
|
44
|
+
protocol: parts[1],
|
|
45
|
+
host: host,
|
|
46
|
+
hostname: parts[4],
|
|
47
|
+
port: parts[5],
|
|
48
|
+
pathname: parts[6],
|
|
49
|
+
search: parts[7],
|
|
50
|
+
// query: mapSearchParams(parts[7]),
|
|
51
|
+
hash: parts[8]
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getPathByURL","url","isHash","urlObj","getURL","hash","pathname","error","REGEX","parts","decodeURIComponent","match","auth","split","host","length","replace","uri","protocol","hostname","port","search"],"sourceRoot":"../../../src","sources":["utils/url.ts"],"mappings":";;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,YAAYA,CAACC,GAAW,EAAEC,MAAM,GAAG,KAAK,EAAE;EACxD,IAAI;IACF,MAAMC,MAAM,GAAGC,MAAM,CAACH,GAAG,CAAC;IAC1B,IAAI,CAACE,MAAM,EAAE;IACb,IAAID,MAAM,EAAE;MACV,OAAOC,MAAM,CAACE,IAAI;IACpB,CAAC,MAAM;MACL,OAAOF,MAAM,CAACG,QAAQ;IACxB;EACF,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd,OAAO,EAAE;EACX;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,KAAK,GAAG,2GAA2G;AAEzH,OAAO,SAASJ,MAAMA,CAACH,GAAW,EAAE;EAClC,MAAMQ,KAAK,GAAGC,kBAAkB,CAACT,GAAG,CAAC,CAACU,KAAK,CAACH,KAAK,CAAC;EAClD,IAAI,CAACC,KAAK,EAAE,OAAO,IAAI;EACvB,MAAMG,IAAI,GAAG,CAACH,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAEI,KAAK,CAAC,GAAG,CAAC;EACxC,MAAMC,IAAI,GAAGF,IAAI,CAACG,MAAM,GAAG,CAACN,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAEO,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAGP,KAAK,CAAC,CAAC,CAAC;EAC5E,OAAO;IACLQ,GAAG,EAAER,KAAK,CAAC,CAAC,CAAC;IACbS,QAAQ,EAAET,KAAK,CAAC,CAAC,CAAC;IAClBK,IAAI,EAAEA,IAAI;IACVK,QAAQ,EAAEV,KAAK,CAAC,CAAC,CAAC;IAClBW,IAAI,EAAEX,KAAK,CAAC,CAAC,CAAC;IACdH,QAAQ,EAAEG,KAAK,CAAC,CAAC,CAAC;IAClBY,MAAM,EAAEZ,KAAK,CAAC,CAAC,CAAC;IAChB;IACAJ,IAAI,EAAEI,KAAK,CAAC,CAAC;EACf,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { isFunction
|
|
4
|
+
// IRumSession,
|
|
5
|
+
// IViewData
|
|
6
|
+
} from '@arms/rum-core';
|
|
7
|
+
// import { IPage } from "../types/client";
|
|
8
|
+
|
|
9
|
+
// export const PAGE_ID = '__rum_view_id';
|
|
10
|
+
//
|
|
11
|
+
// /**
|
|
12
|
+
// * 获取 RUM 内置的view_id标识
|
|
13
|
+
// * @param page
|
|
14
|
+
// * @param session
|
|
15
|
+
// * @returns
|
|
16
|
+
// */
|
|
17
|
+
// export async function getRumViewId(page: IPage, session?: IRumSession): Promise<string> {
|
|
18
|
+
// if (!page) return;
|
|
19
|
+
// if (page.id) {
|
|
20
|
+
// return page.id;
|
|
21
|
+
// }
|
|
22
|
+
// if (!session) return;
|
|
23
|
+
// return page.id = session.getViewId();
|
|
24
|
+
// }
|
|
25
|
+
//
|
|
26
|
+
// /**
|
|
27
|
+
// * 获取当前 view
|
|
28
|
+
// * @param viewId
|
|
29
|
+
// * @param ctx
|
|
30
|
+
// * @returns
|
|
31
|
+
// */
|
|
32
|
+
// export function getViewById(viewId: string, ctx: IContext): IViewData {
|
|
33
|
+
// if (!viewId || !ctx) return;
|
|
34
|
+
// return ctx.getViews().find(view => view.id === viewId);
|
|
35
|
+
// }
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 获取当前 view
|
|
39
|
+
* @param ctx
|
|
40
|
+
* @returns
|
|
41
|
+
*/
|
|
42
|
+
export function getCurView(ctx) {
|
|
43
|
+
if (!ctx) return;
|
|
44
|
+
const views = ctx.getViews();
|
|
45
|
+
if (views && views.length) {
|
|
46
|
+
return views[views.length - 1];
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
let currentNavigationRef;
|
|
51
|
+
const navigateListeners = [];
|
|
52
|
+
export function addNavigateListener(listener) {
|
|
53
|
+
if (isFunction(listener)) {
|
|
54
|
+
navigateListeners.push(listener);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function removeNavigateListener(listener) {
|
|
58
|
+
navigateListeners.splice(navigateListeners.indexOf(listener), 1);
|
|
59
|
+
}
|
|
60
|
+
function triggerNavigateChange(event) {
|
|
61
|
+
if (!currentNavigationRef) return;
|
|
62
|
+
let route = event;
|
|
63
|
+
if (isFunction(currentNavigationRef.getCurrentRoute)) {
|
|
64
|
+
route = currentNavigationRef.getCurrentRoute();
|
|
65
|
+
}
|
|
66
|
+
if (!route) return;
|
|
67
|
+
navigateListeners.forEach(listener => {
|
|
68
|
+
listener(route);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export function startTrackingViews(nav) {
|
|
72
|
+
if (!nav || currentNavigationRef) return;
|
|
73
|
+
if (isFunction(nav.events)) {
|
|
74
|
+
// react-native-navigation
|
|
75
|
+
nav.events().registerComponentDidAppearListener(triggerNavigateChange);
|
|
76
|
+
} else {
|
|
77
|
+
// @react-native/navigation
|
|
78
|
+
nav.addListener('state', triggerNavigateChange);
|
|
79
|
+
}
|
|
80
|
+
currentNavigationRef = nav;
|
|
81
|
+
}
|
|
82
|
+
export function stopTrackingViews() {
|
|
83
|
+
if (!currentNavigationRef) return;
|
|
84
|
+
currentNavigationRef.removeListener('state', triggerNavigateChange);
|
|
85
|
+
currentNavigationRef = undefined;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isFunction","getCurView","ctx","views","getViews","length","currentNavigationRef","navigateListeners","addNavigateListener","listener","push","removeNavigateListener","splice","indexOf","triggerNavigateChange","event","route","getCurrentRoute","forEach","startTrackingViews","nav","events","registerComponentDidAppearListener","addListener","stopTrackingViews","removeListener","undefined"],"sourceRoot":"../../../src","sources":["utils/view.ts"],"mappings":";;AAAA,SAEEA;AACA;AACA;AAAA,OACK,gBAAgB;AAEvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,GAAa,EAAE;EACxC,IAAI,CAACA,GAAG,EAAE;EACV,MAAMC,KAAK,GAAGD,GAAG,CAACE,QAAQ,CAAC,CAAC;EAC5B,IAAID,KAAK,IAAIA,KAAK,CAACE,MAAM,EAAE;IACzB,OAAOF,KAAK,CAACA,KAAK,CAACE,MAAM,GAAG,CAAC,CAAC;EAChC;EACA,OAAO,IAAI;AACb;AAEA,IAAIC,oBAAwD;AAC5D,MAAMC,iBAAuC,GAAG,EAAE;AAElD,OAAO,SAASC,mBAAmBA,CAACC,QAA4B,EAAE;EAChE,IAAIT,UAAU,CAACS,QAAQ,CAAC,EAAE;IACxBF,iBAAiB,CAACG,IAAI,CAACD,QAAQ,CAAC;EAClC;AACF;AAEA,OAAO,SAASE,sBAAsBA,CAACF,QAA4B,EAAE;EACnEF,iBAAiB,CAACK,MAAM,CAACL,iBAAiB,CAACM,OAAO,CAACJ,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClE;AAEA,SAASK,qBAAqBA,CAACC,KAAU,EAAE;EACzC,IAAI,CAACT,oBAAoB,EAAE;EAC3B,IAAIU,KAAK,GAAGD,KAAK;EACjB,IAAIf,UAAU,CAACM,oBAAoB,CAACW,eAAe,CAAC,EAAE;IACpDD,KAAK,GAAGV,oBAAoB,CAACW,eAAe,CAAC,CAAC;EAChD;EACA,IAAI,CAACD,KAAK,EAAE;EACZT,iBAAiB,CAACW,OAAO,CAACT,QAAQ,IAAI;IACpCA,QAAQ,CAACO,KAAK,CAAC;EACjB,CAAC,CAAC;AACJ;AAEA,OAAO,SAASG,kBAAkBA,CAACC,GAAQ,EAAE;EAC3C,IAAI,CAACA,GAAG,IAAId,oBAAoB,EAAE;EAClC,IAAIN,UAAU,CAACoB,GAAG,CAACC,MAAM,CAAC,EAAE;IAC1B;IACAD,GAAG,CAACC,MAAM,CAAC,CAAC,CAACC,kCAAkC,CAACR,qBAAqB,CAAC;EACxE,CAAC,MAAM;IACL;IACAM,GAAG,CAACG,WAAW,CAAC,OAAO,EAAET,qBAAqB,CAAC;EACjD;EACAR,oBAAoB,GAAGc,GAAG;AAC5B;AAEA,OAAO,SAASI,iBAAiBA,CAAA,EAAG;EAClC,IAAI,CAAClB,oBAAoB,EAAE;EAC3BA,oBAAoB,CAACmB,cAAc,CAAC,OAAO,EAAEX,qBAAqB,CAAC;EACnER,oBAAoB,GAAGoB,SAAS;AAClC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|