@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.
- package/dist/uniapp-sdk.js +1 -1
- package/es/collector/action/index.js +61 -3
- package/es/collector/exception/index.d.ts +1 -0
- package/es/collector/exception/index.js +3 -2
- package/es/collector/resource/api.js +1 -1
- package/es/collector/view/perf.js +74 -1
- package/es/collector/view/pv.d.ts +2 -12
- package/es/collector/view/pv.js +1 -1
- package/es/reporter/index.js +2 -2
- package/es/shell.js +5 -5
- package/es/types/client.d.ts +5 -2
- package/es/utils/mixin.d.ts +5 -1
- package/es/utils/mixin.js +2 -1
- package/es/utils/platform.d.ts +3 -0
- package/es/utils/platform.js +2 -2
- package/es/utils/session.js +2 -1
- package/es/utils/view.d.ts +12 -11
- package/es/utils/view.js +6 -24
- package/lib/collector/action/index.js +62 -2
- package/lib/collector/exception/index.d.ts +1 -0
- package/lib/collector/exception/index.js +3 -2
- package/lib/collector/resource/api.js +1 -1
- package/lib/collector/view/perf.js +75 -1
- package/lib/collector/view/pv.d.ts +2 -12
- package/lib/collector/view/pv.js +1 -1
- package/lib/index.js +1 -1
- package/lib/reporter/index.js +1 -1
- package/lib/shell.js +5 -5
- package/lib/types/client.d.ts +5 -2
- package/lib/utils/mixin.d.ts +5 -1
- package/lib/utils/mixin.js +2 -1
- package/lib/utils/platform.d.ts +3 -0
- package/lib/utils/platform.js +2 -2
- package/lib/utils/session.js +2 -1
- package/lib/utils/view.d.ts +12 -11
- package/lib/utils/view.js +6 -24
- package/package.json +2 -2
- package/es/collector/action/index.d.ts +0 -14
- package/es/collector/view/perf.d.ts +0 -10
- package/lib/collector/action/index.d.ts +0 -14
- 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
|
-
|
|
6
|
+
timer: number;
|
|
12
7
|
setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
|
|
13
|
-
|
|
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 {};
|
package/es/collector/view/pv.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import _extends from"@babel/runtime/helpers/extends";import{isFunction,RumEventType}from"@arms/rum-core";import{
|
|
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};
|
package/es/reporter/index.js
CHANGED
|
@@ -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)
|
|
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;
|
package/es/types/client.d.ts
CHANGED
|
@@ -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 时为
|
|
9
|
-
* vue3
|
|
11
|
+
* vue2 时为 Vue 构造函数;
|
|
12
|
+
* vue3 时为 createApp() 返回的 app 实例(uni-app 文档里常写作应用实例)
|
|
10
13
|
*/
|
|
11
14
|
vue: Vue;
|
|
12
15
|
/**
|
package/es/utils/mixin.d.ts
CHANGED
|
@@ -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
|
|
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}
|
package/es/utils/platform.d.ts
CHANGED
|
@@ -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;
|
package/es/utils/platform.js
CHANGED
|
@@ -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
|
+
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=
|
|
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)}}();
|
package/es/utils/session.js
CHANGED
|
@@ -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.
|
|
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}();
|
package/es/utils/view.d.ts
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
import { IContext,
|
|
1
|
+
import { IContext, IViewData } from '@arms/rum-core';
|
|
2
2
|
export interface Page {
|
|
3
3
|
route: string;
|
|
4
4
|
is: string;
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
*
|
|
11
|
-
* @param page
|
|
12
|
-
* @param session
|
|
14
|
+
* 获取当前 page
|
|
13
15
|
* @returns
|
|
14
16
|
*/
|
|
15
|
-
export declare function
|
|
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
|
|
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
|
|
29
|
+
export declare function getCurViews(): IViewData[];
|
package/es/utils/view.js
CHANGED
|
@@ -1,31 +1,13 @@
|
|
|
1
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
2
|
-
|
|
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"),
|
|
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
|
|
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=
|
|
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
|
-
|
|
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
|
-
|
|
6
|
+
timer: number;
|
|
12
7
|
setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
|
|
13
|
-
|
|
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 {};
|
package/lib/collector/view/pv.js
CHANGED
|
@@ -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"),
|
|
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
|
|
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"];
|
package/lib/reporter/index.js
CHANGED
|
@@ -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)
|
|
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';
|
package/lib/types/client.d.ts
CHANGED
|
@@ -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 时为
|
|
9
|
-
* vue3
|
|
11
|
+
* vue2 时为 Vue 构造函数;
|
|
12
|
+
* vue3 时为 createApp() 返回的 app 实例(uni-app 文档里常写作应用实例)
|
|
10
13
|
*/
|
|
11
14
|
vue: Vue;
|
|
12
15
|
/**
|
package/lib/utils/mixin.d.ts
CHANGED
|
@@ -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/lib/utils/mixin.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
"use strict";exports.__esModule=!0,exports.addEventListener=addEventListener,exports.mixin=mixin,exports.removeEventListener=removeEventListener;var vueCache
|
|
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}
|
package/lib/utils/platform.d.ts
CHANGED
|
@@ -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;
|
package/lib/utils/platform.js
CHANGED
|
@@ -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
|
+
"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=
|
|
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)}}();
|
package/lib/utils/session.js
CHANGED
|
@@ -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.
|
|
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
|