@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.
Files changed (108) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +37 -0
  3. package/RumSdkReactnative.podspec +21 -0
  4. package/android/build.gradle +77 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/java/com/rumsdkreactnative/RumSdkReactnativeModule.kt +23 -0
  8. package/android/src/main/java/com/rumsdkreactnative/RumSdkReactnativePackage.kt +33 -0
  9. package/ios/RumSdkReactnative.h +5 -0
  10. package/ios/RumSdkReactnative.mm +18 -0
  11. package/lib/module/collector/action/index.js +68 -0
  12. package/lib/module/collector/action/index.js.map +1 -0
  13. package/lib/module/collector/exception/index.js +135 -0
  14. package/lib/module/collector/exception/index.js.map +1 -0
  15. package/lib/module/collector/resource/api.js +281 -0
  16. package/lib/module/collector/resource/api.js.map +1 -0
  17. package/lib/module/collector/view/perf.js +79 -0
  18. package/lib/module/collector/view/perf.js.map +1 -0
  19. package/lib/module/collector/view/pv.js +72 -0
  20. package/lib/module/collector/view/pv.js.map +1 -0
  21. package/lib/module/index.js +6 -0
  22. package/lib/module/index.js.map +1 -0
  23. package/lib/module/package.json +1 -0
  24. package/lib/module/plugin.js +39 -0
  25. package/lib/module/plugin.js.map +1 -0
  26. package/lib/module/processor/default-processor.js +22 -0
  27. package/lib/module/processor/default-processor.js.map +1 -0
  28. package/lib/module/processor/session-processor.js +20 -0
  29. package/lib/module/processor/session-processor.js.map +1 -0
  30. package/lib/module/reporter/index.js +56 -0
  31. package/lib/module/reporter/index.js.map +1 -0
  32. package/lib/module/shell.js +63 -0
  33. package/lib/module/shell.js.map +1 -0
  34. package/lib/module/types/client.js +4 -0
  35. package/lib/module/types/client.js.map +1 -0
  36. package/lib/module/types/index.js +2 -0
  37. package/lib/module/types/index.js.map +1 -0
  38. package/lib/module/utils/api.js +75 -0
  39. package/lib/module/utils/api.js.map +1 -0
  40. package/lib/module/utils/base.js +90 -0
  41. package/lib/module/utils/base.js.map +1 -0
  42. package/lib/module/utils/platform.js +95 -0
  43. package/lib/module/utils/platform.js.map +1 -0
  44. package/lib/module/utils/session.js +135 -0
  45. package/lib/module/utils/session.js.map +1 -0
  46. package/lib/module/utils/url.js +54 -0
  47. package/lib/module/utils/url.js.map +1 -0
  48. package/lib/module/utils/view.js +87 -0
  49. package/lib/module/utils/view.js.map +1 -0
  50. package/lib/typescript/package.json +1 -0
  51. package/lib/typescript/src/collector/action/index.d.ts +15 -0
  52. package/lib/typescript/src/collector/action/index.d.ts.map +1 -0
  53. package/lib/typescript/src/collector/exception/index.d.ts +25 -0
  54. package/lib/typescript/src/collector/exception/index.d.ts.map +1 -0
  55. package/lib/typescript/src/collector/resource/api.d.ts +21 -0
  56. package/lib/typescript/src/collector/resource/api.d.ts.map +1 -0
  57. package/lib/typescript/src/collector/view/perf.d.ts +1 -0
  58. package/lib/typescript/src/collector/view/perf.d.ts.map +1 -0
  59. package/lib/typescript/src/collector/view/pv.d.ts +16 -0
  60. package/lib/typescript/src/collector/view/pv.d.ts.map +1 -0
  61. package/lib/typescript/src/index.d.ts +4 -0
  62. package/lib/typescript/src/index.d.ts.map +1 -0
  63. package/lib/typescript/src/plugin.d.ts +3 -0
  64. package/lib/typescript/src/plugin.d.ts.map +1 -0
  65. package/lib/typescript/src/processor/default-processor.d.ts +6 -0
  66. package/lib/typescript/src/processor/default-processor.d.ts.map +1 -0
  67. package/lib/typescript/src/processor/session-processor.d.ts +9 -0
  68. package/lib/typescript/src/processor/session-processor.d.ts.map +1 -0
  69. package/lib/typescript/src/reporter/index.d.ts +16 -0
  70. package/lib/typescript/src/reporter/index.d.ts.map +1 -0
  71. package/lib/typescript/src/shell.d.ts +29 -0
  72. package/lib/typescript/src/shell.d.ts.map +1 -0
  73. package/lib/typescript/src/types/client.d.ts +27 -0
  74. package/lib/typescript/src/types/client.d.ts.map +1 -0
  75. package/lib/typescript/src/types/index.d.ts +118 -0
  76. package/lib/typescript/src/types/index.d.ts.map +1 -0
  77. package/lib/typescript/src/utils/api.d.ts +59 -0
  78. package/lib/typescript/src/utils/api.d.ts.map +1 -0
  79. package/lib/typescript/src/utils/base.d.ts +8 -0
  80. package/lib/typescript/src/utils/base.d.ts.map +1 -0
  81. package/lib/typescript/src/utils/platform.d.ts +15 -0
  82. package/lib/typescript/src/utils/platform.d.ts.map +1 -0
  83. package/lib/typescript/src/utils/session.d.ts +37 -0
  84. package/lib/typescript/src/utils/session.d.ts.map +1 -0
  85. package/lib/typescript/src/utils/url.d.ts +17 -0
  86. package/lib/typescript/src/utils/url.d.ts.map +1 -0
  87. package/lib/typescript/src/utils/view.d.ts +13 -0
  88. package/lib/typescript/src/utils/view.d.ts.map +1 -0
  89. package/package.json +158 -0
  90. package/src/collector/action/index.ts +67 -0
  91. package/src/collector/exception/index.ts +158 -0
  92. package/src/collector/resource/api.ts +379 -0
  93. package/src/collector/view/perf.ts +77 -0
  94. package/src/collector/view/pv.ts +73 -0
  95. package/src/index.ts +4 -0
  96. package/src/plugin.ts +41 -0
  97. package/src/processor/default-processor.ts +22 -0
  98. package/src/processor/session-processor.ts +23 -0
  99. package/src/reporter/index.ts +67 -0
  100. package/src/shell.ts +81 -0
  101. package/src/types/client.ts +32 -0
  102. package/src/types/index.ts +159 -0
  103. package/src/utils/api.ts +119 -0
  104. package/src/utils/base.ts +92 -0
  105. package/src/utils/platform.ts +107 -0
  106. package/src/utils/session.ts +168 -0
  107. package/src/utils/url.ts +53 -0
  108. 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,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/client.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.js.map
@@ -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"}