@arms/rum-uniapp 0.1.1 → 0.1.3

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 (41) hide show
  1. package/dist/uniapp-sdk.js +1 -1
  2. package/es/collector/action/index.js +61 -3
  3. package/es/collector/exception/index.d.ts +1 -0
  4. package/es/collector/exception/index.js +3 -2
  5. package/es/collector/resource/api.js +1 -1
  6. package/es/collector/view/perf.js +74 -1
  7. package/es/collector/view/pv.d.ts +2 -12
  8. package/es/collector/view/pv.js +1 -1
  9. package/es/reporter/index.js +2 -2
  10. package/es/shell.js +5 -5
  11. package/es/types/client.d.ts +5 -2
  12. package/es/utils/mixin.d.ts +5 -1
  13. package/es/utils/mixin.js +2 -1
  14. package/es/utils/platform.d.ts +3 -0
  15. package/es/utils/platform.js +2 -2
  16. package/es/utils/session.js +2 -1
  17. package/es/utils/view.d.ts +12 -11
  18. package/es/utils/view.js +6 -24
  19. package/lib/collector/action/index.js +62 -2
  20. package/lib/collector/exception/index.d.ts +1 -0
  21. package/lib/collector/exception/index.js +3 -2
  22. package/lib/collector/resource/api.js +1 -1
  23. package/lib/collector/view/perf.js +75 -1
  24. package/lib/collector/view/pv.d.ts +2 -12
  25. package/lib/collector/view/pv.js +1 -1
  26. package/lib/index.js +1 -1
  27. package/lib/reporter/index.js +1 -1
  28. package/lib/shell.js +5 -5
  29. package/lib/types/client.d.ts +5 -2
  30. package/lib/utils/mixin.d.ts +5 -1
  31. package/lib/utils/mixin.js +2 -1
  32. package/lib/utils/platform.d.ts +3 -0
  33. package/lib/utils/platform.js +2 -2
  34. package/lib/utils/session.js +2 -1
  35. package/lib/utils/view.d.ts +12 -11
  36. package/lib/utils/view.js +6 -24
  37. package/package.json +2 -2
  38. package/es/collector/action/index.d.ts +0 -14
  39. package/es/collector/view/perf.d.ts +0 -10
  40. package/lib/collector/action/index.d.ts +0 -14
  41. package/lib/collector/view/perf.d.ts +0 -10
@@ -1,20 +1,10 @@
1
1
  import { ICollector, IContext, RumEvent } from '@arms/rum-core';
2
- interface IUniPage {
3
- id: string;
4
- route: string;
5
- name?: string;
6
- }
7
2
  export default class PvCollector implements ICollector {
8
3
  name: string;
9
4
  ctx: IContext;
10
5
  sendEvent: (payload: RumEvent) => void;
11
- private prevPage;
6
+ timer: number;
12
7
  setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
13
- onLaunch: (that: any, e: any) => void;
14
- onBeforeCreate: (that: any, e: any) => void;
15
- onUnload: () => void;
16
- sendPv: (page: IUniPage) => void;
17
- private getViewName;
8
+ sendPv: () => void;
18
9
  destroy(): void;
19
10
  }
20
- export {};
@@ -1 +1 @@
1
- import _extends from"@babel/runtime/helpers/extends";import{isFunction,RumEventType}from"@arms/rum-core";import{getRumViewId,getCurView}from"../../utils/view";import{addEventListener,removeEventListener}from"../../utils/mixin";var PvCollector=/*#__PURE__*/function(){function a(){var a=this;this.name="pv-collector",this.ctx=void 0,this.sendEvent=void 0,this.prevPage=void 0,this.onLaunch=function(b,c){if(b&&c&&"app"===b.$mpType){var d=getRumViewId(b,a.ctx.session);a.sendPv({id:d,route:c.path})}},this.onBeforeCreate=function(b){if("page"===b.$mpType&&b.route){var c=getRumViewId(b,a.ctx.session);a.sendPv({id:c,route:b.route})}},this.onUnload=function(){var b=getCurView(a.ctx);a.ctx.removeView(b.id)},this.sendPv=function(b){a.prevPage&&b.id===a.prevPage.id||(b.name=a.getViewName(b.route),a.prevPage=b,a.ctx.addView(b),a.sendEvent(_extends({event_type:RumEventType.VIEW,type:"pv",loading_type:"initial_load"},b)))}}var b=a.prototype;return b.setup=function(a,b){this.ctx=a,this.sendEvent=b,addEventListener("onLaunch",this.onLaunch),addEventListener("beforeCreate",this.onBeforeCreate),addEventListener("onUnload",this.onUnload)},b.getViewName=function(a){var b=this.ctx.getConfig(),c=b.parseViewName,d=a;return isFunction(c)&&(d=c(a)),d},b.destroy=function(){removeEventListener("onLaunch",this.onLaunch),removeEventListener("beforeCreate",this.onBeforeCreate)},a}();export{PvCollector as default};
1
+ import _extends from"@babel/runtime/helpers/extends";import{isFunction,RumEventType}from"@arms/rum-core";import{getCurView}from"../../utils/view";import{sdk}from"../../utils/platform";var KEYS=["navigateTo","redirectTo","switchTab"],PvCollector=/*#__PURE__*/function(){function a(){var a=this;this.name="pv-collector",this.ctx=void 0,this.sendEvent=void 0,this.timer=void 0,this.sendPv=function(){var b=getCurView(a.ctx);b&&clearInterval(a.timer),b&&"_noReport"in b&&(delete b._noReport,a.sendEvent(_extends({event_type:RumEventType.VIEW,type:"pv",loading_type:"initial_load"},b)))}}var b=a.prototype;return b.setup=function(a,b){var c=this;this.ctx=a,this.sendEvent=b,setTimeout(this.sendPv,100),this.timer=setInterval(function(){c.sendPv()},100),isFunction(sdk.addInterceptor)&&KEYS.forEach(function(a){sdk.addInterceptor(a,{success:c.sendPv})})},b.destroy=function(){},a}();export{PvCollector as default};
@@ -1,3 +1,3 @@
1
- import _inheritsLoose from"@babel/runtime/helpers/inheritsLoose";import{Reporter}from"@arms/rum-core";import{sdk,fixAttrs}from"../utils/platform";/**
1
+ import _inheritsLoose from"@babel/runtime/helpers/inheritsLoose";import{isFunction,Reporter}from"@arms/rum-core";import{sdk,fixAttrs}from"../utils/platform";/**
2
2
  * uni-app reporter
3
- */var UniReporter=/*#__PURE__*/function(a){function b(){for(var b,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return b=a.call.apply(a,[this].concat(d))||this,b.name="uni-reporter",b}_inheritsLoose(b,a);var c=b.prototype;return c.init=function(){var a=this;sdk.onAppHide(function(){a.flushEventQueue()})},c.request=function(a,b){var c=a.getConfig();fixAttrs(b).then(function(a){sdk.request({url:c.endpoint,method:"POST",dataType:"text",data:JSON.stringify(a)})})["catch"](function(a){console.warn("[arms] sendRequest fail",a)})},b}(Reporter);export default UniReporter;
3
+ */var UniReporter=/*#__PURE__*/function(a){function b(){for(var b,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return b=a.call.apply(a,[this].concat(d))||this,b.name="uni-reporter",b}_inheritsLoose(b,a);var c=b.prototype;return c.init=function(){var a=this;isFunction(sdk.onAppHide)&&sdk.onAppHide(function(){a.flushEventQueue()})},c.request=function(a,b){var c=a.getConfig();fixAttrs(b).then(function(a){sdk.request({url:c.endpoint,method:"POST",header:{"Content-Type":"text/plain"},dataType:"text",data:JSON.stringify(a)})})["catch"](function(a){console.warn("[arms] sendRequest fail",a)})},b}(Reporter);export default UniReporter;
package/es/shell.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import _extends from"@babel/runtime/helpers/extends";import _inheritsLoose from"@babel/runtime/helpers/inheritsLoose";import{Shell}from"@arms/rum-core";import PvCollector from"./collector/view/pv";// import PerfCollector from './collector/view/perf';
2
2
  import ExceptionCollector from"./collector/exception";import ApiCollector from"./collector/resource/api";// import ActionCollector from './collector/action';
3
3
  import DefaultProcessor from"./processor/default-processor";import SessionProcessor from"./processor/session-processor";import Reporter from"./reporter";// import { getNetType } from "./utils/network";
4
- import{VERSION}from"./utils/platform";import{RumSession}from"./utils/session";import{mixin}from"./utils/mixin";/**
4
+ import{VERSION}from"./utils/platform";import{RumSession}from"./utils/session";import{mixin}from"./utils/mixin";import{getCurViews}from"./utils/view";/**
5
5
  * 对外导出 shell 层, 所有 shell 层模型的 API 设计约定:
6
6
  * 1. API 命名空间按照 variables / functions / events 来组织
7
7
  * 2. 事件(events)的命名格式为:on[Will|Did]VerbNoun?,参考 https://code.visualstudio.com/api/references/vscode-api#events
8
8
  * 3. 基于 Disposable 模式,对于事件的绑定、快捷键的绑定函数,返回值则是解绑函数
9
9
  */export var ArmsRum=/*#__PURE__*/function(a){function b(){for(var b,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return b=a.call.apply(a,[this].concat(d))||this,b.version=VERSION,b}_inheritsLoose(b,a);var c=b.prototype;return c.init=/**
10
10
  * 初始化
11
- */function(a){// 监听网络类型变化
12
- // getNetType(this.updateNetType);
13
- return a.vue&&this.setVue(a.vue),this.client.useCollectors([new PvCollector,// new PerfCollector(),
11
+ */function(a){a.vue&&this.setVue(a.vue),this.client.useCollectors([new PvCollector,// new PerfCollector(),
14
12
  new ExceptionCollector,new ApiCollector// new ActionCollector(),
15
- ]),this.client.useProcessors([new DefaultProcessor,new SessionProcessor]),this.client.useReporter(new Reporter),this.client.init(a,new RumSession),this}/**
13
+ ]),this.client.useProcessors([new DefaultProcessor,new SessionProcessor]),this.client.useReporter(new Reporter),this.client.init(a,new RumSession);// 监听网络类型变化
14
+ // getNetType(this.updateNetType);
15
+ var b=this.client.getContext();return b.getViews=getCurViews,this}/**
16
16
  * set config
17
17
  */,c.setConfig=function(){var a=this.client.getContext();if(2===arguments.length){var b,c=this.client.getContext(),d=c.getConfig();c.setConfig(_extends({},d,(b={},b[0>=arguments.length?void 0:arguments[0]]=1>=arguments.length?void 0:arguments[1],b)))}else a.setConfig(0>=arguments.length?void 0:arguments[0])},c.setVue=function(a){this.setConfig("vue",a),mixin(a)},b}(Shell);export default new ArmsRum;
@@ -2,11 +2,14 @@ import { IConfiguration, ITracingOption } from "@arms/rum-core";
2
2
  import { IApiBaseAttr } from "../utils/api";
3
3
  export interface Vue {
4
4
  mixin: (options: object) => void;
5
+ config?: {
6
+ errorHandler: Function;
7
+ };
5
8
  }
6
9
  export interface IUniConfig extends IConfiguration {
7
10
  /**
8
- * vue2 时为 VUE
9
- * vue3 是为 new Vue() 实例
11
+ * vue2 时为 Vue 构造函数;
12
+ * vue3 时为 createApp() 返回的 app 实例(uni-app 文档里常写作应用实例)
10
13
  */
11
14
  vue: Vue;
12
15
  /**
@@ -1,5 +1,9 @@
1
- import { Vue } from "../types/client";
1
+ import type { Vue } from "../types/client";
2
2
  type Callback = (that: any, ev: any) => void;
3
+ /** Vue 2 传入构造函数;Vue 3 传入 createApp() 的 app 实例 */
4
+ export type VueRuntimeKind = "vue2" | "vue3";
5
+ /** 根据运行时形态区分:Vue 2 为函数(构造函数),Vue 3 app 为对象 */
6
+ export declare function getVueRuntimeKind(vue: unknown): VueRuntimeKind | null;
3
7
  export declare function mixin(vue: Vue): void;
4
8
  export declare function addEventListener(key: string, listener: Callback): void;
5
9
  export declare function removeEventListener(key: string, listener: Callback): boolean;
package/es/utils/mixin.js CHANGED
@@ -1 +1,2 @@
1
- var vueCache,listeners={onLaunch:[],onLoad:[],onShow:[],beforeCreate:[],mounted:[]};export function mixin(a){if(!vueCache){vueCache=a;var b={};Object.keys(listeners).forEach(function(a){b[a]=function(b){var c=this,d=listeners[a];d.forEach(function(a){a(c,b)})}}),a.mixin(b)}}export function addEventListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}export function removeEventListener(a,b){if(a in listeners&&b){var c=listeners[a],d=c.indexOf(b);return c.splice(d,1),!0}return!1}
1
+ var vueCache;/** Vue 2 传入构造函数;Vue 3 传入 createApp() 的 app 实例 *//** 根据运行时形态区分:Vue 2 为函数(构造函数),Vue 3 app 为对象 */export function getVueRuntimeKind(a){if(null==a)return null;return"function"==typeof a.mixin?"function"==typeof a?"vue2":"object"==typeof a?"vue3":null:null}/** 会合并进 Vue.mixin 的生命周期键(与 listeners 中需单独处理的键分开) */var MIXIN_HOOK_KEYS=["onLaunch","onLoad","onShow","beforeCreate","mounted"],listeners={onError:[]};MIXIN_HOOK_KEYS.forEach(function(a){listeners[a]=[]});function invokeListeners(a,b,c){var d=listeners[a];if(null!==d&&void 0!==d&&d.length)for(var e=0;e<d.length;e++)try{d[e](b,c)}catch(b){console.warn("[arms] vue mixin listener failed",a,b)}}function createMixinOptions(a){function d(a,b,c){invokeListeners("onError",this,{error:a,instance:b,info:c})}// Vue 2.5+ / Vue 3:后代组件错误走 onErrorCaptured,再转给 onError 监听(不用 config.errorHandler)
2
+ for(var e={},f=function a(){var b=MIXIN_HOOK_KEYS[g];e[b]=function(a){invokeListeners(b,this,a)}},g=0;g<MIXIN_HOOK_KEYS.length;g++)f();return"vue2"===a?Object.defineProperty(vueCache.config,"errorHandler",{get:function a(){var e=this;return function(f,a,b){d(f,a,b),e.__errorHandler&&e.__errorHandler(f,a,b)}},set:function b(a){this.__errorHandler=a}}):Object.defineProperty(vueCache.config,"onErrorCaptured",{get:function a(){var e=this;return function(f,a,b){d(f,a,b),e.__onErrorCaptured&&e.__onErrorCaptured(f,a,b)}},set:function b(a){this.__onErrorCaptured=a}}),e}export function mixin(a){if(!vueCache){vueCache=a;var b=getVueRuntimeKind(a);if(b)try{a.mixin(createMixinOptions(b))}catch(a){console.warn("[arms] vue.mixin failed",a)}}}export function addEventListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}export function removeEventListener(a,b){if(a in listeners&&b){var c=listeners[a],d=c.indexOf(b);return c.splice(d,1),!0}return!1}
@@ -16,6 +16,9 @@ interface SDK {
16
16
  onPageNotFound: (listener: Function) => void;
17
17
  offError: (listener: Function) => void;
18
18
  navigateTo: (options: any) => void;
19
+ redirectTo: (options: any) => void;
20
+ switchTab: (options: any) => void;
21
+ reLaunch: (options: any) => void;
19
22
  getSystemInfo: () => any;
20
23
  getDeviceInfo: () => any;
21
24
  getAppBaseInfo: () => any;
@@ -1,5 +1,5 @@
1
- import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";import{AppType}from"@arms/rum-core";export var global2=global||window;export var VERSION='npm-0.1.1';export var sdk=uni;export var appName="uniapp";// export {
1
+ import _extends from"@babel/runtime/helpers/extends";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import _regeneratorRuntime from"@babel/runtime/regenerator";import{AppType}from"@arms/rum-core";export var global2=global||window;export var VERSION='npm-0.1.3';export var sdk=uni;export var appName="uniapp";// export {
2
2
  // // sdk: global.uni,
3
3
  // appName: 'uniapp',
4
4
  // }
5
- export function getStorageSync(a){return"function"==typeof sdk.getStorageSync?sdk.getStorageSync(a):void 0}export function setStorageSync(a,b){return"function"==typeof sdk.setStorageSync?sdk.setStorageSync(a,b):void 0}export function getPerformance(){return"performance"in global2?global2.performance:void 0}export function getNetType(){return new Promise(function(a){try{sdk.getNetworkType({success:function(b){var c=b.networkType||b.subtype;a(c?c.toLowerCase():void 0)},fail:function(){a(void 0)}})}catch(b){a(void 0)}})}export var fixAttrs=/*#__PURE__*/function(){var a=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function b(a){var c,d,e,f,g;return _regeneratorRuntime.wrap(function(b){for(;;)switch(b.prev=b.next){case 0:if(a){b.next=2;break}return b.abrupt("return");case 2:return b.next=4,getNetType();case 4:return c=b.sent,a.app.type=AppType.uniapp,a._v=VERSION,a.net=_extends({model:c},a.net),d=sdk.getDeviceInfo()||{},e=sdk.getAppBaseInfo()||{},f={brand:d.brand,model:d.model},g={type:d.platform,version:d.system,container:appName,container_version:e.SDKVersion},a.device=_extends({},f,a.device),a.os=_extends({},g,a.os),b.abrupt("return",a);case 15:case"end":return b.stop()}},b)}));return function(){return a.apply(this,arguments)}}();
5
+ export function getStorageSync(a){return"function"==typeof sdk.getStorageSync?sdk.getStorageSync(a):void 0}export function setStorageSync(a,b){return"function"==typeof sdk.setStorageSync?sdk.setStorageSync(a,b):void 0}export function getPerformance(){return"performance"in global2?global2.performance:void 0}export function getNetType(){return new Promise(function(a){try{sdk.getNetworkType({success:function(b){var c=b.networkType||b.subtype;a(c?c.toLowerCase():void 0)},fail:function(){a(void 0)}})}catch(b){a(void 0)}})}export var fixAttrs=/*#__PURE__*/function(){var a=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function b(a){var c,d,e,f,g;return _regeneratorRuntime.wrap(function(b){for(;;)switch(b.prev=b.next){case 0:if(a){b.next=1;break}return b.abrupt("return");case 1:return b.next=2,getNetType();case 2:return c=b.sent,a.app.type=AppType.uniapp,a._v=VERSION,a.net=_extends({model:c},a.net),d=sdk.getDeviceInfo()||{},e=sdk.getAppBaseInfo()||{},f={brand:d.brand,model:d.model},g={type:d.platform,version:d.system,container:appName,container_version:e.SDKVersion},a.device=_extends({},f,a.device),a.os=_extends({},g,a.os),b.abrupt("return",a);case 3:case"end":return b.stop()}},b)}));return function(){return a.apply(this,arguments)}}();
@@ -1,3 +1,4 @@
1
1
  import{generateEventId,generateGUID,generateSpanId,isNumber,ONE_DAY,ONE_HOUR,ONE_MINUTE,performDraw}from"@arms/rum-core";import{getCurrentTime}from"./base";import{getCurView}from"./view";import{getStorageSync,setStorageSync}from"./platform";// 存储userID的键名
2
2
  var USER_ID="_arms_uid",RUM_SESSION="_arms_session";// 存储session
3
- export var RumSession=/*#__PURE__*/function(){function a(){this.ctx=void 0,this.sessionConfig=void 0}var b=a.prototype;return b.init=function(a){var b;this.ctx=a,this.sessionConfig=this.fixSessionConfig(null===(b=a.config)||void 0===b?void 0:b.sessionConfig)},b.getSessionId=function(){return this.getSessionInfo().sessionId},b.getSampled=function(){return this.getSessionInfo().sampled},b.checkSession=function(a){var b=this.sessionConfig,c=b.overtime,d=b.maxDuration,e=getCurrentTime();return!(a.startTime+d<e||a.lastTime+c<e)},b.updateSession=function(){var a=this.getSessionInfo();if(!a.isNew){var b=a.startTime,c=getCurrentTime(),d=a.sampled?1:0;setStorageSync(RUM_SESSION,a.sessionId+"-"+d+"-"+b+"-"+c)}},b.getSessionInfo=function(){var a=(getStorageSync(RUM_SESSION)||"").split("-"),b=a[0],c=a[1],d=a[2],e=a[3],f={sessionId:b,sampled:"0"!==c,startTime:parseInt(d||"")||0,lastTime:parseInt(e||"")||0};return this.checkSession(f)||(f=this.resetSession()),f},b.getEventId=function(){return generateEventId(this.getSessionId())},b.getViewId=function(){return this.getUUID()},b.getUserId=function(){var a=getStorageSync(USER_ID);return a&&0===a.indexOf("user_")&&(a=""),a||(a="uid_"+generateSpanId(16,36),setStorageSync(USER_ID,a)),a},b.resetSession=function(){var a=this.sessionConfig.sampleRate,b=this.getUUID(),c=getCurrentTime(),d=performDraw(100*a),e=b+"-"+(d?1:0)+"-"+c+"-"+c;return setStorageSync(RUM_SESSION,e),{sessionId:b,sampled:d,startTime:c,lastTime:c,isNew:!0}},b.getUUID=function(){return generateGUID().replace(/-/g,"")},b.fixSessionConfig=function(a){void 0===a&&(a={});var b=a,c=b.sampleRate,d=b.maxDuration,e=b.overtime;return(!isNumber(c)||0>c||1<c)&&(c=1),(!isNumber(d)||d<4*ONE_HOUR||d>ONE_DAY)&&(d=ONE_DAY),(!isNumber(e)||e>ONE_HOUR||e<10*ONE_MINUTE)&&(e=30*ONE_MINUTE),{sampleRate:c,maxDuration:d,overtime:e}},b.getBaseEvent=function(){return{timestamp:getCurrentTime(),session_id:this.getSessionId(),event_id:this.getEventId(),view:this.ctx?getCurView(this.ctx):void 0,times:1}},a}();
3
+ export var RumSession=/*#__PURE__*/function(){function a(){this.ctx=void 0,this.sessionConfig=void 0}var b=a.prototype;return b.init=function(a){var b;this.ctx=a,this.sessionConfig=this.fixSessionConfig(null===(b=a.config)||void 0===b?void 0:b.sessionConfig)},b.getSessionId=function(){return this.getSessionInfo().sessionId},b.getSampled=function(){return this.getSessionInfo().sampled},b.checkSession=function(a){var b=this.sessionConfig,c=b.overtime,d=b.maxDuration,e=getCurrentTime();return!(a.startTime+d<e||a.lastTime+c<e)},b.updateSession=function(){var a=this.getSessionInfo();if(!a.isNew){var b=a.startTime,c=getCurrentTime(),d=a.sampled?1:0;setStorageSync(RUM_SESSION,a.sessionId+"-"+d+"-"+b+"-"+c)}},b.getSessionInfo=function(){var a=(getStorageSync(RUM_SESSION)||"").split("-"),b=a[0],c=a[1],d=a[2],e=a[3],f={sessionId:b,sampled:"0"!==c,startTime:parseInt(d||"")||0,lastTime:parseInt(e||"")||0};return this.checkSession(f)||(f=this.resetSession()),f},b.getEventId=function(){return generateEventId(this.getSessionId())},b.getViewId=function(){return this.getUUID()},b.getUserId=function(){var a=getStorageSync(USER_ID);return a&&0===a.indexOf("user_")&&(a=""),a||(a="uid_"+generateSpanId(16,36),setStorageSync(USER_ID,a)),a},b.resetSession=function(){var a=this.sessionConfig.sampling,b=this.getUUID(),c=getCurrentTime(),d=performDraw(a),e=b+"-"+(d?1:0)+"-"+c+"-"+c;return setStorageSync(RUM_SESSION,e),{sessionId:b,sampled:d,startTime:c,lastTime:c,isNew:!0}},b.getUUID=function(){return generateGUID().replace(/-/g,"")},b.fixSessionConfig=function(a){void 0===a&&(a={});var b=a,c=b.sampleRate,d=b.sampling,e=b.maxDuration,f=b.overtime;// 优先使用 sampling(0-100),若未配置则从旧字段 sampleRate(0-1)迁移
4
+ return(!isNumber(d)||0>d||100<d)&&(isNumber(c)&&0<=c&&1>=c?d=100*c:d=100),(!isNumber(e)||e<4*ONE_HOUR||e>ONE_DAY)&&(e=ONE_DAY),(!isNumber(f)||f>ONE_HOUR||f<10*ONE_MINUTE)&&(f=30*ONE_MINUTE),{sampling:d,maxDuration:e,overtime:f}},b.getBaseEvent=function(){return{timestamp:getCurrentTime(),session_id:this.getSessionId(),event_id:this.getEventId(),view:this.ctx?getCurView(this.ctx):void 0,times:1}},a}();
@@ -1,28 +1,29 @@
1
- import { IContext, IRumSession, IViewData } from '@arms/rum-core';
1
+ import { IContext, IViewData } from '@arms/rum-core';
2
2
  export interface Page {
3
3
  route: string;
4
4
  is: string;
5
- getPageId: () => string;
6
- __rum_view_id?: string;
5
+ __rum_view?: IViewData;
6
+ $page: {
7
+ id?: number;
8
+ fullPath?: string;
9
+ route?: string;
10
+ openType?: string;
11
+ };
7
12
  }
8
- export declare const PAGE_ID = "__rum_view_id";
9
13
  /**
10
- * 获取 RUM 内置的view_id标识
11
- * @param page
12
- * @param session
14
+ * 获取当前 page
13
15
  * @returns
14
16
  */
15
- export declare function getRumViewId(page: Page, session?: IRumSession): string;
17
+ export declare function getCurrentPage(): any;
16
18
  /**
17
19
  * 获取当前 view
18
- * @param viewId
19
20
  * @param ctx
20
21
  * @returns
21
22
  */
22
- export declare function getViewById(viewId: string, ctx: IContext): IViewData;
23
+ export declare function getCurView(ctx: IContext): IViewData;
23
24
  /**
24
25
  * 获取当前 view
25
26
  * @param ctx
26
27
  * @returns
27
28
  */
28
- export declare function getCurView(ctx: IContext): IViewData;
29
+ export declare function getCurViews(): IViewData[];
package/es/utils/view.js CHANGED
@@ -1,31 +1,13 @@
1
- export var PAGE_ID="__rum_view_id";// declare var getCurrentPages: Function;
2
- // /**
3
- // * 获取当前 page
4
- // * @returns
5
- // */
6
- // export function getCurPage() {
7
- // // TODO: 改成从config里获取
8
- // if (typeof getCurrentPages === 'function') {
9
- // try {
10
- // const pages = getCurrentPages() || [];
11
- // return pages[pages.length - 1];
12
- // } catch (error) {
13
- // console.warn('[arms] error in getCurView', error);
14
- // }
15
- // }
16
- // }
17
- /**
18
- * 获取 RUM 内置的view_id标识
19
- * @param page
20
- * @param session
1
+ import{isFunction}from"@arms/rum-core";var PAGE_KEY="__rum_view";/**
2
+ * 获取当前 page
21
3
  * @returns
22
- */export function getRumViewId(a,b){return a?a[PAGE_ID]?a[PAGE_ID]:b?a[PAGE_ID]=b.getViewId():void 0:void 0}/**
4
+ */export function getCurrentPage(){if("function"==typeof getCurrentPages)try{var a=getCurrentPages()||[];return a[a.length-1]}catch(a){// console.warn('[arms] error in getCurView', error);
5
+ }}/**
23
6
  * 获取当前 view
24
- * @param viewId
25
7
  * @param ctx
26
8
  * @returns
27
- */export function getViewById(a,b){return a&&b?b.getViews().find(function(b){return b.id===a}):void 0}/**
9
+ */export function getCurView(a){if(a){var b=getCurrentPage();if(b){if(PAGE_KEY in b)return b[PAGE_KEY];var c=b.$page||{},d=c.fullPath,e=c.route,f=c.openType,g=a.session.getViewId(),h=d||e||b.route,i=e||b.route,j=a.getConfig(),k=j.parseViewName;return isFunction(k)&&(i=k(h)),b[PAGE_KEY]={id:g,name:i,url:h,loading_type:f,_noReport:!0}}}}/**
28
10
  * 获取当前 view
29
11
  * @param ctx
30
12
  * @returns
31
- */export function getCurView(a){if(a){var b=a.getViews();if(b&&b.length)return b[b.length-1]}}
13
+ */export function getCurViews(){var a=[];if("function"==typeof getCurrentPages)try{(getCurrentPages()||[]).forEach(function(b){PAGE_KEY in b&&a.push(b[PAGE_KEY])})}catch(a){}return a}
@@ -1,2 +1,62 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_view=require("../../utils/view"),ActionCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="action-collector",this.DELAY_TIME=300,this.ctx=void 0,this.sendEvent=void 0,this.events=["tap"],this.lastEvent=void 0,this.timer=void 0,this.onEvent=function(b){if(b&&a.events.includes(b.type)&&b.target){var c=b.target,d=b.currentTarget,e=b.type,f=c.dataset,g=c.id;if(!g)return;if(d&&g!==d.id)return;var h=(0,_view.getCurView)(a.ctx),i={event_type:_rumCore.RumEventType.ACTION,type:e,name:g,snapshots:Object.keys(f).length?JSON.stringify(f):void 0,times:1,view:h};clearTimeout(a.timer),a.lastEvent?a.lastEvent.name===i.name?a.lastEvent.times+=1:a.sendAction():a.lastEvent=i,a.timer=setTimeout(a.sendAction,a.DELAY_TIME)}},this.sendAction=function(){a.sendEvent(a.lastEvent),a.lastEvent=null}}var b=a.prototype;return b.setup=function(a,b){var c=a.getConfig(),d=c.collectors,e=void 0===d?{}:d;!1===e.action||(this.ctx=a,this.sendEvent=b)},b.destroy=function(){// removePageListener('*', this.onEvent);
2
- },a}();// import { addPageListener, removePageListener } from "../../utils/hackPage";
1
+ // import { ICollector, IContext, RumActionEvent, RumEvent, RumEventType } from '@arms/rum-core';
2
+ // import { getCurView } from "../../utils/view";
3
+ // // import { addPageListener, removePageListener } from "../../utils/hackPage";
4
+ //
5
+ // export default class ActionCollector implements ICollector {
6
+ // name = 'action-collector';
7
+ // private DELAY_TIME = 300;
8
+ // ctx: IContext;
9
+ // sendEvent: (payload: RumEvent) => void;
10
+ // events = ['tap'];
11
+ // lastEvent: RumActionEvent;
12
+ // timer: any;
13
+ //
14
+ // setup(ctx: IContext, sendEvent: (payload: RumEvent) => void) {
15
+ // const {collectors = {}} = ctx.getConfig();
16
+ // if (collectors.action === false) {
17
+ // return;
18
+ // }
19
+ // this.ctx = ctx;
20
+ // this.sendEvent = sendEvent;
21
+ // // addPageListener('*', this.onEvent)
22
+ // }
23
+ //
24
+ // onEvent = (e) => {
25
+ // if (e && this.events.includes(e.type) && e.target) {
26
+ // const {target, currentTarget, type} = e;
27
+ // const {dataset, id} = target;
28
+ // if (!id) return;
29
+ // if (currentTarget && id !== currentTarget.id) return;
30
+ // const view = getCurView(this.ctx);
31
+ // const event: RumActionEvent = {
32
+ // event_type: RumEventType.ACTION,
33
+ // type,
34
+ // name: id,
35
+ // snapshots: Object.keys(dataset).length ? JSON.stringify(dataset) : undefined,
36
+ // times: 1,
37
+ // view
38
+ // }
39
+ // clearTimeout(this.timer);
40
+ // if (this.lastEvent) {
41
+ // if (this.lastEvent.name !== event.name) {
42
+ // this.sendAction();
43
+ // } else {
44
+ // this.lastEvent.times += 1;
45
+ // }
46
+ // } else {
47
+ // this.lastEvent = event;
48
+ // }
49
+ // this.timer = setTimeout(this.sendAction, this.DELAY_TIME);
50
+ // }
51
+ // }
52
+ //
53
+ // sendAction = () => {
54
+ // this.sendEvent(this.lastEvent);
55
+ // this.lastEvent = null;
56
+ // }
57
+ //
58
+ // destroy() {
59
+ // // removePageListener('*', this.onEvent);
60
+ // }
61
+ // }
62
+ "use strict";
@@ -5,6 +5,7 @@ export default class ExceptionCollector implements ICollector {
5
5
  sendEvent: (payload: RumEvent) => void;
6
6
  setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
7
7
  hackOrigin(): void;
8
+ vueError: (_: any, error: Error) => void;
8
9
  uniError: (error: Error) => void;
9
10
  onError: (error: Error) => void;
10
11
  onUnhandledRejection: (e: PromiseRejectionEvent) => void;
@@ -1,5 +1,6 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_view=require("../../utils/view"),ExceptionCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="exception-collector",this.ctx=void 0,this.sendEvent=void 0,this.uniError=function(b){a.errorHandle(b,"uni.onError")},this.onError=function(b){a.errorHandle(b,"onError")},this.onUnhandledRejection=function(b){if(b){var c=b.reason;if(c){var d=c.errMsg;// 对 Uniapp 内置错误进行解析
2
- if(d&&(0,_rumCore.isString)(d)){c=new Error(d),c.name="",c.stack="";for(var e,f=["navigateTo","redirectTo","appLaunch","switchTab","getLocation","onLocationChange"],g=0,h=f;g<h.length;g++)if(e=h[g],d.startsWith(e)){c.name=e;break}c.name||(c.name=d.split(":")[0])}a.errorHandle(c,"onUnhandledRejection")}}},this.errorHandle=function(b,c){void 0===c&&(c="");var d,e,f,g,h,i,j=(0,_view.getCurView)(a.ctx);if(b instanceof Object){if(d=b.name,e=b.message,f=b.filename||b.fileName,g=b.stack,h=b.lineno||b.lineNumber,i=b.colno||b.columnNumber,b.error instanceof Error){var k=b.error;d=k.name,e=k.message,g=k.stack}}else if("string"==typeof b){g=b;var l=a.getErrorByStack(b);l&&(d=l.name,e=l.message)}d&&e&&a.sendEvent({event_type:_rumCore.RumEventType.EXCEPTION,source:c,type:"error",name:d,message:e,file:f,stack:g,line:h,column:i,times:1,view:j})}}var b=a.prototype;return b.setup=function(a,b){this.ctx=a,this.sendEvent=b,this.hackOrigin()},b.hackOrigin=function(){var a=this,b=this.ctx.getConfig(),c=b.collectors,d=void 0===c?{}:c;if(!1!==d.jsError)try{uni.onError(this.uniError),global.addEventListener("error",this.onError),global.addEventListener("unhandledrejection",this.onUnhandledRejection)}catch(a){console.error(a)}!1!==d.consoleError&&(0,_rumCore.interceptFunction)(console,"error",function(b){a.errorHandle(b,"console.error")})},b.getErrorByStack=/**
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_mixin=require("../../utils/mixin"),_platform=require("../../utils/platform"),ExceptionCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="exception-collector",this.ctx=void 0,this.sendEvent=void 0,this.vueError=function(b,c){a.errorHandle(c,"Vue.onError")},this.uniError=function(b){a.errorHandle(b,"uni.onError")},this.onError=function(b){a.errorHandle(b,"onError")},this.onUnhandledRejection=function(b){if(b){var c=b.reason;if(c){var d=c.errMsg;// 对 Uniapp 内置错误进行解析
2
+ if(d&&(0,_rumCore.isString)(d)){c=new Error(d),c.name="",c.stack="";for(var e,f=["navigateTo","redirectTo","appLaunch","switchTab","getLocation","onLocationChange"],g=0,h=f;g<h.length;g++)if(e=h[g],d.startsWith(e)){c.name=e;break}c.name||(c.name=d.split(":")[0])}a.errorHandle(c,"onUnhandledRejection")}}},this.errorHandle=function(b,c){void 0===c&&(c="");var d,e,f,g,h,i;if(b instanceof Object){if(d=b.name,e=b.message,f=b.filename||b.fileName,g=b.stack,h=b.lineno||b.lineNumber,i=b.colno||b.columnNumber,b.error instanceof Error){var j=b.error;d=j.name,e=j.message,g=j.stack}}else if("string"==typeof b){g=b;var k=a.getErrorByStack(b);k&&(d=k.name,e=k.message)}d&&e&&a.sendEvent({event_type:_rumCore.RumEventType.EXCEPTION,source:c,type:"error",name:d,message:e,file:f,stack:g,line:h,column:i,times:1})}}var b=a.prototype;return b.setup=function(a,b){this.ctx=a,this.sendEvent=b,this.hackOrigin()},b.hackOrigin=function(){var a=this,b=this.ctx.getConfig(),c=b.collectors,d=void 0===c?{}:c;if(!1!==d.jsError)try{(0,_mixin.addEventListener)("onError",this.vueError),global.addEventListener("error",this.onError),global.addEventListener("unhandledrejection",this.onUnhandledRejection),(0,_rumCore.isFunction)(_platform.sdk.onError)&&_platform.sdk.onError(this.uniError)}catch(a){// console.error(e)
3
+ }!1!==d.consoleError&&(0,_rumCore.interceptFunction)(console,"error",function(b){a.errorHandle(b,"console.error")})},b.getErrorByStack=/**
3
4
  * 根据stack获取Error信息
4
5
  * TODO: 增加基于Stack解析filename和lineNumber的能力
5
6
  * @param stack
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_rumCore=require("@arms/rum-core"),_platform=require("../../utils/platform"),_url=require("../../utils/url"),_base=require("../../utils/base"),_view=require("../../utils/view"),_api=require("../../utils/api"),ApiCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="api-collector",this.ctx=void 0,this.sendEvent=void 0,this.sendApi=/*#__PURE__*/function(){var b=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function e(b,c,d){var f,g,h,i,j,k,l,m,n,o;return _regenerator["default"].wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(f=a.ctx.getConfig(),g=f.evaluateApi,h=c.statusCode,i=c.status,j=c.errMsg,k=c.errorMessage,l=c.message,!(0,_rumCore.isFunction)(g)){e.next=13;break}return e.prev=3,0===b.success&&(m=new Error("request error")),e.next=7,g(d,c,m);case 7:n=e.sent,b=(0,_extends2["default"])({},b,(0,_api.reviseApiAttr)(n)),e.next=13;break;case 11:e.prev=11,e.t0=e["catch"](3);case 13:if(o=(0,_extends2["default"])({event_type:_rumCore.RumEventType.RESOURCE,type:"api",status_code:i||h,message:k||j||l,duration:(0,_base.getCurrentTime)()-b.timestamp,times:1},b),!(o.duration>_rumCore.ONE_DAY)){e.next=16;break}return e.abrupt("return");case 16:a.sendEvent(o);case 17:case"end":return e.stop()}},e,null,[[3,11]])}));return function(){return b.apply(this,arguments)}}()}var b=a.prototype;return b.setup=// origin = {
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_rumCore=require("@arms/rum-core"),_platform=require("../../utils/platform"),_url=require("../../utils/url"),_base=require("../../utils/base"),_view=require("../../utils/view"),_api=require("../../utils/api"),ApiCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="api-collector",this.ctx=void 0,this.sendEvent=void 0,this.sendApi=/*#__PURE__*/function(){var b=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function e(b,c,d){var f,g,h,i,j,k,l,m,n,o,p;return _regenerator["default"].wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(f=a.ctx.getConfig(),g=f.evaluateApi,h=c.statusCode,i=c.status,j=c.errMsg,k=c.errorMessage,l=c.message,!(0,_rumCore.isFunction)(g)){e.next=4;break}return e.prev=1,0===b.success&&(m=new Error("request error")),e.next=2,g(d,c,m);case 2:n=e.sent,b=(0,_extends2["default"])({},b,(0,_api.reviseApiAttr)(n)),e.next=4;break;case 3:e.prev=3,p=e["catch"](1);case 4:if(o=(0,_extends2["default"])({event_type:_rumCore.RumEventType.RESOURCE,type:"api",status_code:i||h,message:k||j||l,duration:(0,_base.getCurrentTime)()-b.timestamp,times:1},b),!(o.duration>_rumCore.ONE_DAY)){e.next=5;break}return e.abrupt("return");case 5:a.sendEvent(o);case 6:case"end":return e.stop()}},e,null,[[1,3]])}));return function(){return b.apply(this,arguments)}}()}var b=a.prototype;return b.setup=// origin = {
2
2
  // request: sdk.request
3
3
  // }
4
4
  function(a,b){var c=a.getConfig(),d=c.collectors,e=void 0===d?{}:d;!1===e.api||(// Object.keys(this.origin).forEach((key) => this.hackRequest(key));
@@ -1 +1,75 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=require("../../utils/platform"),_view=require("../../utils/view"),PerfCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="perf-collector",this.ctx=void 0,this.sendEvent=void 0,this.perfObserver=void 0,this.observerHandler=function(b){var c=(0,_rumCore.isArray)(b)?b:b.getEntries(),d={view:(0,_view.getCurView)(a.ctx)};if(Array.isArray(c)&&0<c.length)for(var e,f=0;f<c.length;f++)if(e=c[f],"number"==typeof e.duration)switch(e.name){case"appLaunch":case"app-click":d.launch=e.duration;break;case"firstPaint":d["first-paint"]=e.duration;break;case"firstRender":d.first_render=e.duration;break;case"firstContentfulPaint":d.first_contentful_paint=e.duration;break;case"largestContentfulPaint":d.largest_contentful_paint=e.duration;break;case"resourceTiming":case"resource-timing":d.timing_data=JSON.stringify(e);break;default:}!Object.keys(d).length}}var b=a.prototype;return b.setup=function(a,b){var c=a.getConfig(),d=c.collectors,e=void 0===d?{}:d;if(!1!==e.perf){this.ctx=a,this.sendEvent=b;var f=(0,_platform.getPerformance)();f&&f.createObserver&&(this.perfObserver=f.createObserver(this.observerHandler),this.perfObserver.observe({entryTypes:["launch","navigation","render","paint","resource"]}))}},b.destroy=function(){this.perfObserver&&this.perfObserver.disconnect()},a}();
1
+ // import { ICollector, IContext, isArray, RumEvent } from '@arms/rum-core';
2
+ // import { getPerformance } from "../../utils/platform";
3
+ // import { getCurView } from "../../utils/view";
4
+ //
5
+ // export default class PerfCollector implements ICollector {
6
+ // name = 'perf-collector';
7
+ // ctx: IContext;
8
+ // sendEvent: (payload: RumEvent) => void;
9
+ // perfObserver: any;
10
+ //
11
+ // setup(ctx: IContext, sendEvent: (payload: RumEvent) => void) {
12
+ // const {collectors = {}} = ctx.getConfig();
13
+ // if (collectors.perf === false) {
14
+ // return;
15
+ // }
16
+ // this.ctx = ctx;
17
+ // this.sendEvent = sendEvent;
18
+ // const performance = getPerformance();
19
+ // if (!performance || !performance.createObserver) return;
20
+ // this.perfObserver = performance.createObserver(this.observerHandler)
21
+ // this.perfObserver.observe({entryTypes: ['launch', 'navigation', 'render', 'paint', 'resource']});
22
+ // }
23
+ //
24
+ // observerHandler = (ev) => {
25
+ // const entries = isArray(ev) ? ev : ev.getEntries();
26
+ // const perfData = {
27
+ // view: getCurView(this.ctx)
28
+ // };
29
+ // if (Array.isArray(entries) && entries.length > 0) {
30
+ // for (let i = 0; i < entries.length; i++) {
31
+ // const item = entries[i];
32
+ // if (typeof item.duration === 'number') {
33
+ // switch (item.name) {
34
+ // case 'appLaunch':
35
+ // case 'app-click':
36
+ // perfData['launch'] = item.duration;
37
+ // break;
38
+ // case 'firstPaint':
39
+ // // case 'first-paint':
40
+ // perfData['first-paint'] = item.duration;
41
+ // break;
42
+ // case 'firstRender':
43
+ // perfData['first_render'] = item.duration;
44
+ // break;
45
+ // case 'firstContentfulPaint':
46
+ // // case 'first-contentful-paint':
47
+ // perfData['first_contentful_paint'] = item.duration;
48
+ // break;
49
+ // case 'largestContentfulPaint':
50
+ // // case 'largest-contentful-paint':
51
+ // perfData['largest_contentful_paint'] = item.duration;
52
+ // break;
53
+ // case 'resourceTiming':
54
+ // case 'resource-timing':
55
+ // perfData['timing_data'] = JSON.stringify(item);
56
+ // break;
57
+ // default:
58
+ // break;
59
+ // }
60
+ // }
61
+ // }
62
+ // }
63
+ //
64
+ // if (!Object.keys(perfData).length) return;
65
+ // // TODO 处理性能数据
66
+ // // console.warn('perf-collector: ', perfData);
67
+ // };
68
+ //
69
+ // destroy() {
70
+ // if (this.perfObserver) {
71
+ // this.perfObserver.disconnect();
72
+ // }
73
+ // }
74
+ // }
75
+ "use strict";
@@ -1,20 +1,10 @@
1
1
  import { ICollector, IContext, RumEvent } from '@arms/rum-core';
2
- interface IUniPage {
3
- id: string;
4
- route: string;
5
- name?: string;
6
- }
7
2
  export default class PvCollector implements ICollector {
8
3
  name: string;
9
4
  ctx: IContext;
10
5
  sendEvent: (payload: RumEvent) => void;
11
- private prevPage;
6
+ timer: number;
12
7
  setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
13
- onLaunch: (that: any, e: any) => void;
14
- onBeforeCreate: (that: any, e: any) => void;
15
- onUnload: () => void;
16
- sendPv: (page: IUniPage) => void;
17
- private getViewName;
8
+ sendPv: () => void;
18
9
  destroy(): void;
19
10
  }
20
- export {};
@@ -1 +1 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_rumCore=require("@arms/rum-core"),_view=require("../../utils/view"),_mixin=require("../../utils/mixin"),PvCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="pv-collector",this.ctx=void 0,this.sendEvent=void 0,this.prevPage=void 0,this.onLaunch=function(b,c){if(b&&c&&"app"===b.$mpType){var d=(0,_view.getRumViewId)(b,a.ctx.session);a.sendPv({id:d,route:c.path})}},this.onBeforeCreate=function(b){if("page"===b.$mpType&&b.route){var c=(0,_view.getRumViewId)(b,a.ctx.session);a.sendPv({id:c,route:b.route})}},this.onUnload=function(){var b=(0,_view.getCurView)(a.ctx);a.ctx.removeView(b.id)},this.sendPv=function(b){a.prevPage&&b.id===a.prevPage.id||(b.name=a.getViewName(b.route),a.prevPage=b,a.ctx.addView(b),a.sendEvent((0,_extends2["default"])({event_type:_rumCore.RumEventType.VIEW,type:"pv",loading_type:"initial_load"},b)))}}var b=a.prototype;return b.setup=function(a,b){this.ctx=a,this.sendEvent=b,(0,_mixin.addEventListener)("onLaunch",this.onLaunch),(0,_mixin.addEventListener)("beforeCreate",this.onBeforeCreate),(0,_mixin.addEventListener)("onUnload",this.onUnload)},b.getViewName=function(a){var b=this.ctx.getConfig(),c=b.parseViewName,d=a;return(0,_rumCore.isFunction)(c)&&(d=c(a)),d},b.destroy=function(){(0,_mixin.removeEventListener)("onLaunch",this.onLaunch),(0,_mixin.removeEventListener)("beforeCreate",this.onBeforeCreate)},a}();
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_rumCore=require("@arms/rum-core"),_view=require("../../utils/view"),_platform=require("../../utils/platform"),KEYS=["navigateTo","redirectTo","switchTab"],PvCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="pv-collector",this.ctx=void 0,this.sendEvent=void 0,this.timer=void 0,this.sendPv=function(){var b=(0,_view.getCurView)(a.ctx);b&&clearInterval(a.timer),b&&"_noReport"in b&&(delete b._noReport,a.sendEvent((0,_extends2["default"])({event_type:_rumCore.RumEventType.VIEW,type:"pv",loading_type:"initial_load"},b)))}}var b=a.prototype;return b.setup=function(a,b){var c=this;this.ctx=a,this.sendEvent=b,setTimeout(this.sendPv,100),this.timer=setInterval(function(){c.sendPv()},100),(0,_rumCore.isFunction)(_platform.sdk.addInterceptor)&&KEYS.forEach(function(a){_platform.sdk.addInterceptor(a,{success:c.sendPv})})},b.destroy=function(){},a}();
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var _shell=_interopRequireWildcard(require("./shell"));exports.__esModule=!0,exports["default"]=void 0;exports.ArmsRum=_shell.ArmsRum;function _getRequireWildcardCache(a){if("function"!=typeof WeakMap)return null;var b=new WeakMap,c=new WeakMap;return(_getRequireWildcardCache=function(a){return a?c:b})(a)}function _interopRequireWildcard(b,c){if(!c&&b&&b.__esModule)return b;if(null===b||"object"!=typeof b&&"function"!=typeof b)return{default:b};var d=_getRequireWildcardCache(c);if(d&&d.has(b))return d.get(b);var e={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in b)if("default"!=a&&{}.hasOwnProperty.call(b,a)){var g=f?Object.getOwnPropertyDescriptor(b,a):null;g&&(g.get||g.set)?Object.defineProperty(e,a,g):e[a]=b[a]}return e["default"]=b,d&&d.set(b,e),e}var _default=exports["default"]=_shell["default"];
1
+ "use strict";var _shell=_interopRequireWildcard(require("./shell"));exports.__esModule=!0,exports["default"]=void 0;exports.ArmsRum=_shell.ArmsRum;function _interopRequireWildcard(a,b){if("function"==typeof WeakMap)var c=new WeakMap,d=new WeakMap;return(_interopRequireWildcard=function(a,b){if(!b&&a&&a.__esModule)return a;var e,g,h={__proto__:null,default:a};if(null===a||"object"!=typeof a&&"function"!=typeof a)return h;if(e=b?d:c){if(e.has(a))return e.get(a);e.set(a,h)}for(var f in a)"default"!=f&&{}.hasOwnProperty.call(a,f)&&((g=(e=Object.defineProperty)&&Object.getOwnPropertyDescriptor(a,f))&&(g.get||g.set)?e(h,f,g):h[f]=a[f]);return h})(a,b)}var _default=exports["default"]=_shell["default"];
@@ -1,3 +1,3 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=void 0;var _inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")),_rumCore=require("@arms/rum-core"),_platform=require("../utils/platform"),UniReporter=/*#__PURE__*/function(a){function b(){for(var b,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return b=a.call.apply(a,[this].concat(d))||this,b.name="uni-reporter",b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.init=function(){var a=this;_platform.sdk.onAppHide(function(){a.flushEventQueue()})},c.request=function(a,b){var c=a.getConfig();(0,_platform.fixAttrs)(b).then(function(a){_platform.sdk.request({url:c.endpoint,method:"POST",dataType:"text",data:JSON.stringify(a)})})["catch"](function(a){console.warn("[arms] sendRequest fail",a)})},b}(_rumCore.Reporter),_default=exports["default"]=UniReporter;/**
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=void 0;var _inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")),_rumCore=require("@arms/rum-core"),_platform=require("../utils/platform"),UniReporter=/*#__PURE__*/function(a){function b(){for(var b,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return b=a.call.apply(a,[this].concat(d))||this,b.name="uni-reporter",b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.init=function(){var a=this;(0,_rumCore.isFunction)(_platform.sdk.onAppHide)&&_platform.sdk.onAppHide(function(){a.flushEventQueue()})},c.request=function(a,b){var c=a.getConfig();(0,_platform.fixAttrs)(b).then(function(a){_platform.sdk.request({url:c.endpoint,method:"POST",header:{"Content-Type":"text/plain"},dataType:"text",data:JSON.stringify(a)})})["catch"](function(a){console.warn("[arms] sendRequest fail",a)})},b}(_rumCore.Reporter),_default=exports["default"]=UniReporter;/**
2
2
  * uni-app reporter
3
3
  */
package/lib/shell.js CHANGED
@@ -1,10 +1,10 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=exports.ArmsRum=void 0;var _extends3=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")),_rumCore=require("@arms/rum-core"),_pv=_interopRequireDefault(require("./collector/view/pv")),_exception=_interopRequireDefault(require("./collector/exception")),_api=_interopRequireDefault(require("./collector/resource/api")),_defaultProcessor=_interopRequireDefault(require("./processor/default-processor")),_sessionProcessor=_interopRequireDefault(require("./processor/session-processor")),_reporter=_interopRequireDefault(require("./reporter")),_platform=require("./utils/platform"),_session=require("./utils/session"),_mixin=require("./utils/mixin"),ArmsRum=exports.ArmsRum=/*#__PURE__*/function(a){function b(){for(var b,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return b=a.call.apply(a,[this].concat(d))||this,b.version=_platform.VERSION,b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.init=/**
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=exports.ArmsRum=void 0;var _extends3=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")),_rumCore=require("@arms/rum-core"),_pv=_interopRequireDefault(require("./collector/view/pv")),_exception=_interopRequireDefault(require("./collector/exception")),_api=_interopRequireDefault(require("./collector/resource/api")),_defaultProcessor=_interopRequireDefault(require("./processor/default-processor")),_sessionProcessor=_interopRequireDefault(require("./processor/session-processor")),_reporter=_interopRequireDefault(require("./reporter")),_platform=require("./utils/platform"),_session=require("./utils/session"),_mixin=require("./utils/mixin"),_view=require("./utils/view"),ArmsRum=exports.ArmsRum=/*#__PURE__*/function(a){function b(){for(var b,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return b=a.call.apply(a,[this].concat(d))||this,b.version=_platform.VERSION,b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.init=/**
2
2
  * 初始化
3
- */function(a){// 监听网络类型变化
4
- // getNetType(this.updateNetType);
5
- return a.vue&&this.setVue(a.vue),this.client.useCollectors([new _pv["default"],// new PerfCollector(),
3
+ */function(a){a.vue&&this.setVue(a.vue),this.client.useCollectors([new _pv["default"],// new PerfCollector(),
6
4
  new _exception["default"],new _api["default"]// new ActionCollector(),
7
- ]),this.client.useProcessors([new _defaultProcessor["default"],new _sessionProcessor["default"]]),this.client.useReporter(new _reporter["default"]),this.client.init(a,new _session.RumSession),this}/**
5
+ ]),this.client.useProcessors([new _defaultProcessor["default"],new _sessionProcessor["default"]]),this.client.useReporter(new _reporter["default"]),this.client.init(a,new _session.RumSession);// 监听网络类型变化
6
+ // getNetType(this.updateNetType);
7
+ var b=this.client.getContext();return b.getViews=_view.getCurViews,this}/**
8
8
  * set config
9
9
  */,c.setConfig=function(){var a=this.client.getContext();if(2===arguments.length){var b,c=this.client.getContext(),d=c.getConfig();c.setConfig((0,_extends3["default"])({},d,(b={},b[0>=arguments.length?void 0:arguments[0]]=1>=arguments.length?void 0:arguments[1],b)))}else a.setConfig(0>=arguments.length?void 0:arguments[0])},c.setVue=function(a){this.setConfig("vue",a),(0,_mixin.mixin)(a)},b}(_rumCore.Shell),_default=exports["default"]=new ArmsRum;// import PerfCollector from './collector/view/perf';
10
10
  // import ActionCollector from './collector/action';
@@ -2,11 +2,14 @@ import { IConfiguration, ITracingOption } from "@arms/rum-core";
2
2
  import { IApiBaseAttr } from "../utils/api";
3
3
  export interface Vue {
4
4
  mixin: (options: object) => void;
5
+ config?: {
6
+ errorHandler: Function;
7
+ };
5
8
  }
6
9
  export interface IUniConfig extends IConfiguration {
7
10
  /**
8
- * vue2 时为 VUE
9
- * vue3 是为 new Vue() 实例
11
+ * vue2 时为 Vue 构造函数;
12
+ * vue3 时为 createApp() 返回的 app 实例(uni-app 文档里常写作应用实例)
10
13
  */
11
14
  vue: Vue;
12
15
  /**
@@ -1,5 +1,9 @@
1
- import { Vue } from "../types/client";
1
+ import type { Vue } from "../types/client";
2
2
  type Callback = (that: any, ev: any) => void;
3
+ /** Vue 2 传入构造函数;Vue 3 传入 createApp() 的 app 实例 */
4
+ export type VueRuntimeKind = "vue2" | "vue3";
5
+ /** 根据运行时形态区分:Vue 2 为函数(构造函数),Vue 3 app 为对象 */
6
+ export declare function getVueRuntimeKind(vue: unknown): VueRuntimeKind | null;
3
7
  export declare function mixin(vue: Vue): void;
4
8
  export declare function addEventListener(key: string, listener: Callback): void;
5
9
  export declare function removeEventListener(key: string, listener: Callback): boolean;
@@ -1 +1,2 @@
1
- "use strict";exports.__esModule=!0,exports.addEventListener=addEventListener,exports.mixin=mixin,exports.removeEventListener=removeEventListener;var vueCache,listeners={onLaunch:[],onLoad:[],onShow:[],beforeCreate:[],mounted:[]};function mixin(a){if(!vueCache){vueCache=a;var b={};Object.keys(listeners).forEach(function(a){b[a]=function(b){var c=this,d=listeners[a];d.forEach(function(a){a(c,b)})}}),a.mixin(b)}}function addEventListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removeEventListener(a,b){if(a in listeners&&b){var c=listeners[a],d=c.indexOf(b);return c.splice(d,1),!0}return!1}
1
+ "use strict";exports.__esModule=!0,exports.addEventListener=addEventListener,exports.getVueRuntimeKind=getVueRuntimeKind,exports.mixin=mixin,exports.removeEventListener=removeEventListener;var vueCache;/** Vue 2 传入构造函数;Vue 3 传入 createApp() 的 app 实例 *//** 根据运行时形态区分:Vue 2 为函数(构造函数),Vue 3 app 为对象 */function getVueRuntimeKind(a){if(null==a)return null;return"function"==typeof a.mixin?"function"==typeof a?"vue2":"object"==typeof a?"vue3":null:null}/** 会合并进 Vue.mixin 的生命周期键(与 listeners 中需单独处理的键分开) */var MIXIN_HOOK_KEYS=["onLaunch","onLoad","onShow","beforeCreate","mounted"],listeners={onError:[]};MIXIN_HOOK_KEYS.forEach(function(a){listeners[a]=[]});function invokeListeners(a,b,c){var d=listeners[a];if(null!==d&&void 0!==d&&d.length)for(var e=0;e<d.length;e++)try{d[e](b,c)}catch(b){console.warn("[arms] vue mixin listener failed",a,b)}}function createMixinOptions(a){function d(a,b,c){invokeListeners("onError",this,{error:a,instance:b,info:c})}// Vue 2.5+ / Vue 3:后代组件错误走 onErrorCaptured,再转给 onError 监听(不用 config.errorHandler)
2
+ for(var e={},f=function a(){var b=MIXIN_HOOK_KEYS[g];e[b]=function(a){invokeListeners(b,this,a)}},g=0;g<MIXIN_HOOK_KEYS.length;g++)f();return"vue2"===a?Object.defineProperty(vueCache.config,"errorHandler",{get:function a(){var e=this;return function(f,a,b){d(f,a,b),e.__errorHandler&&e.__errorHandler(f,a,b)}},set:function b(a){this.__errorHandler=a}}):Object.defineProperty(vueCache.config,"onErrorCaptured",{get:function a(){var e=this;return function(f,a,b){d(f,a,b),e.__onErrorCaptured&&e.__onErrorCaptured(f,a,b)}},set:function b(a){this.__onErrorCaptured=a}}),e}function mixin(a){if(!vueCache){vueCache=a;var b=getVueRuntimeKind(a);if(b)try{a.mixin(createMixinOptions(b))}catch(a){console.warn("[arms] vue.mixin failed",a)}}}function addEventListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removeEventListener(a,b){if(a in listeners&&b){var c=listeners[a],d=c.indexOf(b);return c.splice(d,1),!0}return!1}
@@ -16,6 +16,9 @@ interface SDK {
16
16
  onPageNotFound: (listener: Function) => void;
17
17
  offError: (listener: Function) => void;
18
18
  navigateTo: (options: any) => void;
19
+ redirectTo: (options: any) => void;
20
+ switchTab: (options: any) => void;
21
+ reLaunch: (options: any) => void;
19
22
  getSystemInfo: () => any;
20
23
  getDeviceInfo: () => any;
21
24
  getAppBaseInfo: () => any;
@@ -1,5 +1,5 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports.fixAttrs=exports.appName=exports.VERSION=void 0,exports.getNetType=getNetType,exports.getPerformance=getPerformance,exports.getStorageSync=getStorageSync,exports.sdk=exports.global2=void 0,exports.setStorageSync=setStorageSync;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_rumCore=require("@arms/rum-core"),global2=exports.global2=global||window,VERSION=exports.VERSION='npm-0.1.1',sdk=exports.sdk=uni,appName=exports.appName="uniapp";// export {
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports.fixAttrs=exports.appName=exports.VERSION=void 0,exports.getNetType=getNetType,exports.getPerformance=getPerformance,exports.getStorageSync=getStorageSync,exports.sdk=exports.global2=void 0,exports.setStorageSync=setStorageSync;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_rumCore=require("@arms/rum-core"),global2=exports.global2=global||window,VERSION=exports.VERSION='npm-0.1.3',sdk=exports.sdk=uni,appName=exports.appName="uniapp";// export {
2
2
  // // sdk: global.uni,
3
3
  // appName: 'uniapp',
4
4
  // }
5
- function getStorageSync(a){return"function"==typeof sdk.getStorageSync?sdk.getStorageSync(a):void 0}function setStorageSync(a,b){return"function"==typeof sdk.setStorageSync?sdk.setStorageSync(a,b):void 0}function getPerformance(){return"performance"in global2?global2.performance:void 0}function getNetType(){return new Promise(function(a){try{sdk.getNetworkType({success:function(b){var c=b.networkType||b.subtype;a(c?c.toLowerCase():void 0)},fail:function(){a(void 0)}})}catch(b){a(void 0)}})}var fixAttrs=exports.fixAttrs=/*#__PURE__*/function(){var a=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function b(a){var c,d,e,f,g;return _regenerator["default"].wrap(function(b){for(;;)switch(b.prev=b.next){case 0:if(a){b.next=2;break}return b.abrupt("return");case 2:return b.next=4,getNetType();case 4:return c=b.sent,a.app.type=_rumCore.AppType.uniapp,a._v=VERSION,a.net=(0,_extends2["default"])({model:c},a.net),d=sdk.getDeviceInfo()||{},e=sdk.getAppBaseInfo()||{},f={brand:d.brand,model:d.model},g={type:d.platform,version:d.system,container:appName,container_version:e.SDKVersion},a.device=(0,_extends2["default"])({},f,a.device),a.os=(0,_extends2["default"])({},g,a.os),b.abrupt("return",a);case 15:case"end":return b.stop()}},b)}));return function(){return a.apply(this,arguments)}}();
5
+ function getStorageSync(a){return"function"==typeof sdk.getStorageSync?sdk.getStorageSync(a):void 0}function setStorageSync(a,b){return"function"==typeof sdk.setStorageSync?sdk.setStorageSync(a,b):void 0}function getPerformance(){return"performance"in global2?global2.performance:void 0}function getNetType(){return new Promise(function(a){try{sdk.getNetworkType({success:function(b){var c=b.networkType||b.subtype;a(c?c.toLowerCase():void 0)},fail:function(){a(void 0)}})}catch(b){a(void 0)}})}var fixAttrs=exports.fixAttrs=/*#__PURE__*/function(){var a=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function b(a){var c,d,e,f,g;return _regenerator["default"].wrap(function(b){for(;;)switch(b.prev=b.next){case 0:if(a){b.next=1;break}return b.abrupt("return");case 1:return b.next=2,getNetType();case 2:return c=b.sent,a.app.type=_rumCore.AppType.uniapp,a._v=VERSION,a.net=(0,_extends2["default"])({model:c},a.net),d=sdk.getDeviceInfo()||{},e=sdk.getAppBaseInfo()||{},f={brand:d.brand,model:d.model},g={type:d.platform,version:d.system,container:appName,container_version:e.SDKVersion},a.device=(0,_extends2["default"])({},f,a.device),a.os=(0,_extends2["default"])({},g,a.os),b.abrupt("return",a);case 3:case"end":return b.stop()}},b)}));return function(){return a.apply(this,arguments)}}();
@@ -1,2 +1,3 @@
1
- "use strict";exports.__esModule=!0,exports.RumSession=void 0;var _rumCore=require("@arms/rum-core"),_base=require("./base"),_view=require("./view"),_platform=require("./platform"),USER_ID="_arms_uid",RUM_SESSION="_arms_session",RumSession=exports.RumSession=/*#__PURE__*/function(){function a(){this.ctx=void 0,this.sessionConfig=void 0}var b=a.prototype;return b.init=function(a){var b;this.ctx=a,this.sessionConfig=this.fixSessionConfig(null===(b=a.config)||void 0===b?void 0:b.sessionConfig)},b.getSessionId=function(){return this.getSessionInfo().sessionId},b.getSampled=function(){return this.getSessionInfo().sampled},b.checkSession=function(a){var b=this.sessionConfig,c=b.overtime,d=b.maxDuration,e=(0,_base.getCurrentTime)();return!(a.startTime+d<e||a.lastTime+c<e)},b.updateSession=function(){var a=this.getSessionInfo();if(!a.isNew){var b=a.startTime,c=(0,_base.getCurrentTime)(),d=a.sampled?1:0;(0,_platform.setStorageSync)(RUM_SESSION,a.sessionId+"-"+d+"-"+b+"-"+c)}},b.getSessionInfo=function(){var a=((0,_platform.getStorageSync)(RUM_SESSION)||"").split("-"),b=a[0],c=a[1],d=a[2],e=a[3],f={sessionId:b,sampled:"0"!==c,startTime:parseInt(d||"")||0,lastTime:parseInt(e||"")||0};return this.checkSession(f)||(f=this.resetSession()),f},b.getEventId=function(){return(0,_rumCore.generateEventId)(this.getSessionId())},b.getViewId=function(){return this.getUUID()},b.getUserId=function(){var a=(0,_platform.getStorageSync)(USER_ID);return a&&0===a.indexOf("user_")&&(a=""),a||(a="uid_"+(0,_rumCore.generateSpanId)(16,36),(0,_platform.setStorageSync)(USER_ID,a)),a},b.resetSession=function(){var a=this.sessionConfig.sampleRate,b=this.getUUID(),c=(0,_base.getCurrentTime)(),d=(0,_rumCore.performDraw)(100*a),e=b+"-"+(d?1:0)+"-"+c+"-"+c;return(0,_platform.setStorageSync)(RUM_SESSION,e),{sessionId:b,sampled:d,startTime:c,lastTime:c,isNew:!0}},b.getUUID=function(){return(0,_rumCore.generateGUID)().replace(/-/g,"")},b.fixSessionConfig=function(a){void 0===a&&(a={});var b=a,c=b.sampleRate,d=b.maxDuration,e=b.overtime;return(!(0,_rumCore.isNumber)(c)||0>c||1<c)&&(c=1),(!(0,_rumCore.isNumber)(d)||d<4*_rumCore.ONE_HOUR||d>_rumCore.ONE_DAY)&&(d=_rumCore.ONE_DAY),(!(0,_rumCore.isNumber)(e)||e>_rumCore.ONE_HOUR||e<10*_rumCore.ONE_MINUTE)&&(e=30*_rumCore.ONE_MINUTE),{sampleRate:c,maxDuration:d,overtime:e}},b.getBaseEvent=function(){return{timestamp:(0,_base.getCurrentTime)(),session_id:this.getSessionId(),event_id:this.getEventId(),view:this.ctx?(0,_view.getCurView)(this.ctx):void 0,times:1}},a}();// 存储userID的键名
1
+ "use strict";exports.__esModule=!0,exports.RumSession=void 0;var _rumCore=require("@arms/rum-core"),_base=require("./base"),_view=require("./view"),_platform=require("./platform"),USER_ID="_arms_uid",RUM_SESSION="_arms_session",RumSession=exports.RumSession=/*#__PURE__*/function(){function a(){this.ctx=void 0,this.sessionConfig=void 0}var b=a.prototype;return b.init=function(a){var b;this.ctx=a,this.sessionConfig=this.fixSessionConfig(null===(b=a.config)||void 0===b?void 0:b.sessionConfig)},b.getSessionId=function(){return this.getSessionInfo().sessionId},b.getSampled=function(){return this.getSessionInfo().sampled},b.checkSession=function(a){var b=this.sessionConfig,c=b.overtime,d=b.maxDuration,e=(0,_base.getCurrentTime)();return!(a.startTime+d<e||a.lastTime+c<e)},b.updateSession=function(){var a=this.getSessionInfo();if(!a.isNew){var b=a.startTime,c=(0,_base.getCurrentTime)(),d=a.sampled?1:0;(0,_platform.setStorageSync)(RUM_SESSION,a.sessionId+"-"+d+"-"+b+"-"+c)}},b.getSessionInfo=function(){var a=((0,_platform.getStorageSync)(RUM_SESSION)||"").split("-"),b=a[0],c=a[1],d=a[2],e=a[3],f={sessionId:b,sampled:"0"!==c,startTime:parseInt(d||"")||0,lastTime:parseInt(e||"")||0};return this.checkSession(f)||(f=this.resetSession()),f},b.getEventId=function(){return(0,_rumCore.generateEventId)(this.getSessionId())},b.getViewId=function(){return this.getUUID()},b.getUserId=function(){var a=(0,_platform.getStorageSync)(USER_ID);return a&&0===a.indexOf("user_")&&(a=""),a||(a="uid_"+(0,_rumCore.generateSpanId)(16,36),(0,_platform.setStorageSync)(USER_ID,a)),a},b.resetSession=function(){var a=this.sessionConfig.sampling,b=this.getUUID(),c=(0,_base.getCurrentTime)(),d=(0,_rumCore.performDraw)(a),e=b+"-"+(d?1:0)+"-"+c+"-"+c;return(0,_platform.setStorageSync)(RUM_SESSION,e),{sessionId:b,sampled:d,startTime:c,lastTime:c,isNew:!0}},b.getUUID=function(){return(0,_rumCore.generateGUID)().replace(/-/g,"")},b.fixSessionConfig=function(a){void 0===a&&(a={});var b=a,c=b.sampleRate,d=b.sampling,e=b.maxDuration,f=b.overtime;// 优先使用 sampling(0-100),若未配置则从旧字段 sampleRate(0-1)迁移
2
+ return(!(0,_rumCore.isNumber)(d)||0>d||100<d)&&((0,_rumCore.isNumber)(c)&&0<=c&&1>=c?d=100*c:d=100),(!(0,_rumCore.isNumber)(e)||e<4*_rumCore.ONE_HOUR||e>_rumCore.ONE_DAY)&&(e=_rumCore.ONE_DAY),(!(0,_rumCore.isNumber)(f)||f>_rumCore.ONE_HOUR||f<10*_rumCore.ONE_MINUTE)&&(f=30*_rumCore.ONE_MINUTE),{sampling:d,maxDuration:e,overtime:f}},b.getBaseEvent=function(){return{timestamp:(0,_base.getCurrentTime)(),session_id:this.getSessionId(),event_id:this.getEventId(),view:this.ctx?(0,_view.getCurView)(this.ctx):void 0,times:1}},a}();// 存储userID的键名
2
3
  // 存储session