@arms/rum-uniapp 0.0.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +15 -0
  2. package/dist/uniapp-sdk.js +1 -0
  3. package/es/collector/action/index.d.ts +14 -0
  4. package/es/collector/action/index.js +3 -0
  5. package/es/collector/exception/index.d.ts +23 -0
  6. package/es/collector/exception/index.js +7 -0
  7. package/es/collector/resource/api.d.ts +13 -0
  8. package/es/collector/resource/api.js +78 -0
  9. package/es/collector/view/perf.d.ts +10 -0
  10. package/es/collector/view/perf.js +1 -0
  11. package/es/collector/view/pv.d.ts +19 -0
  12. package/es/collector/view/pv.js +1 -0
  13. package/es/index.d.ts +3 -0
  14. package/es/index.js +1 -0
  15. package/es/processor/default-processor.d.ts +5 -0
  16. package/es/processor/default-processor.js +1 -0
  17. package/es/processor/session-processor.d.ts +8 -0
  18. package/es/processor/session-processor.js +1 -0
  19. package/es/reporter/index.d.ts +10 -0
  20. package/es/reporter/index.js +3 -0
  21. package/es/shell.d.ts +26 -0
  22. package/es/shell.js +15 -0
  23. package/es/style.js +1 -0
  24. package/es/types/client.d.ts +28 -0
  25. package/es/types/client.js +1 -0
  26. package/es/utils/api.d.ts +29 -0
  27. package/es/utils/api.js +1 -0
  28. package/es/utils/base.d.ts +13 -0
  29. package/es/utils/base.js +10 -0
  30. package/es/utils/mixin.d.ts +6 -0
  31. package/es/utils/mixin.js +1 -0
  32. package/es/utils/platform.d.ts +33 -0
  33. package/es/utils/platform.js +5 -0
  34. package/es/utils/session.d.ts +26 -0
  35. package/es/utils/session.js +3 -0
  36. package/es/utils/url.d.ts +23 -0
  37. package/es/utils/url.js +10 -0
  38. package/es/utils/view.d.ts +28 -0
  39. package/es/utils/view.js +31 -0
  40. package/lib/collector/action/index.d.ts +14 -0
  41. package/lib/collector/action/index.js +2 -0
  42. package/lib/collector/exception/index.d.ts +23 -0
  43. package/lib/collector/exception/index.js +7 -0
  44. package/lib/collector/resource/api.d.ts +13 -0
  45. package/lib/collector/resource/api.js +78 -0
  46. package/lib/collector/view/perf.d.ts +10 -0
  47. package/lib/collector/view/perf.js +1 -0
  48. package/lib/collector/view/pv.d.ts +19 -0
  49. package/lib/collector/view/pv.js +1 -0
  50. package/lib/index.d.ts +3 -0
  51. package/lib/index.js +1 -0
  52. package/lib/processor/default-processor.d.ts +5 -0
  53. package/lib/processor/default-processor.js +1 -0
  54. package/lib/processor/session-processor.d.ts +8 -0
  55. package/lib/processor/session-processor.js +1 -0
  56. package/lib/reporter/index.d.ts +10 -0
  57. package/lib/reporter/index.js +3 -0
  58. package/lib/shell.d.ts +26 -0
  59. package/lib/shell.js +15 -0
  60. package/lib/style.js +1 -0
  61. package/lib/types/client.d.ts +28 -0
  62. package/lib/types/client.js +1 -0
  63. package/lib/utils/api.d.ts +29 -0
  64. package/lib/utils/api.js +1 -0
  65. package/lib/utils/base.d.ts +13 -0
  66. package/lib/utils/base.js +10 -0
  67. package/lib/utils/mixin.d.ts +6 -0
  68. package/lib/utils/mixin.js +1 -0
  69. package/lib/utils/platform.d.ts +33 -0
  70. package/lib/utils/platform.js +5 -0
  71. package/lib/utils/session.d.ts +26 -0
  72. package/lib/utils/session.js +2 -0
  73. package/lib/utils/url.d.ts +23 -0
  74. package/lib/utils/url.js +10 -0
  75. package/lib/utils/view.d.ts +28 -0
  76. package/lib/utils/view.js +31 -0
  77. package/package.json +33 -0
@@ -0,0 +1,33 @@
1
+ import { RumEventBundle } from "@arms/rum-core";
2
+ export declare const global2: any;
3
+ export declare const VERSION: string;
4
+ interface CommonOption {
5
+ success?: (res: any) => void;
6
+ fail?: (res: any) => void;
7
+ complete?: (res: any) => void;
8
+ }
9
+ interface SDK {
10
+ onAppShow: (listener: Function) => void;
11
+ onAppHide: (listener: Function) => void;
12
+ request: (options: any) => void;
13
+ getStorageSync: (key: any) => any;
14
+ setStorageSync: (key: any, data?: string) => void;
15
+ onError: (listener: Function) => void;
16
+ onPageNotFound: (listener: Function) => void;
17
+ offError: (listener: Function) => void;
18
+ navigateTo: (options: any) => void;
19
+ getSystemInfo: () => any;
20
+ getDeviceInfo: () => any;
21
+ getAppBaseInfo: () => any;
22
+ getWindowInfo: () => any;
23
+ getNetworkType: (options: CommonOption) => any;
24
+ addInterceptor: (key: string, options: any) => any;
25
+ }
26
+ export declare const sdk: SDK;
27
+ export declare const appName = "uniapp";
28
+ export declare function getStorageSync(key: any): any;
29
+ export declare function setStorageSync(key: string, data: string): void;
30
+ export declare function getPerformance(): any;
31
+ export declare function getNetType(): Promise<string>;
32
+ export declare const fixAttrs: (bundle: RumEventBundle) => Promise<RumEventBundle>;
33
+ export {};
@@ -0,0 +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.0.1-beta.1';export var sdk=uni;export var appName="uniapp";// export {
2
+ // // sdk: global.uni,
3
+ // appName: 'uniapp',
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)}}();
@@ -0,0 +1,26 @@
1
+ import { IContext, IRumSession, RumEvent, SessionConfig } from "@arms/rum-core";
2
+ interface SessionInfo {
3
+ sessionId: string;
4
+ sampled: boolean;
5
+ startTime: number;
6
+ lastTime: number;
7
+ isNew?: boolean;
8
+ }
9
+ export declare class RumSession implements IRumSession {
10
+ ctx: IContext;
11
+ sessionConfig: SessionConfig;
12
+ init(ctx: IContext): void;
13
+ getSessionId(): string;
14
+ getSampled(): boolean;
15
+ checkSession(info: SessionInfo): boolean;
16
+ updateSession(): void;
17
+ getSessionInfo(): SessionInfo;
18
+ getEventId(): string;
19
+ getViewId(): string;
20
+ getUserId(): any;
21
+ private resetSession;
22
+ private getUUID;
23
+ private fixSessionConfig;
24
+ getBaseEvent(): RumEvent;
25
+ }
26
+ export {};
@@ -0,0 +1,3 @@
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
+ 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}();
@@ -0,0 +1,23 @@
1
+ import { IContext } from "@arms/rum-core";
2
+ /**
3
+ * 根据指定 URL 获取视图的名称,默认为其path部分
4
+ * @param url 需要提取路径部分的 URL
5
+ * @param isHash 是否为 hash 模式路由的 URL
6
+ */
7
+ export declare function getPathByURL(url: string, isHash?: boolean): string;
8
+ /**
9
+ * 检查是否为上报域名
10
+ * @param ctx
11
+ * @param url 需要提取路径部分的 URL
12
+ */
13
+ export declare function isEndpoint(ctx: IContext, url: string): boolean;
14
+ export declare function getURL(url: string): {
15
+ uri: string;
16
+ protocol: string;
17
+ host: string;
18
+ hostname: string;
19
+ port: string;
20
+ pathname: string;
21
+ search: string;
22
+ hash: string;
23
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 根据指定 URL 获取视图的名称,默认为其path部分
3
+ * @param url 需要提取路径部分的 URL
4
+ * @param isHash 是否为 hash 模式路由的 URL
5
+ */export function getPathByURL(a,b){void 0===b&&(b=!1);try{var c=getURL(a);return b?c.hash:c.pathname}catch(a){return""}}/**
6
+ * 检查是否为上报域名
7
+ * @param ctx
8
+ * @param url 需要提取路径部分的 URL
9
+ */export function isEndpoint(a,b){var c=a.getConfig(),d=c.endpoint;try{return getURL(b).hostname===getURL(d).hostname}catch(a){return!1}}var REGEX=/^(?:([^:\/?#]+):\/\/)?((?:([^\/?#@]*)@)?([^\/?#:]*)(?:\:(\d*))?)?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n)*))?/i;export function getURL(a){var b=decodeURIComponent(a).match(REGEX),c=(b[3]||"").split(":"),d=c.length?(b[2]||"").replace(/(.*\@)/,""):b[2];return{uri:b[0],protocol:b[1],host:d,hostname:b[4],port:b[5],pathname:b[6],search:b[7],// query: mapSearchParams(parts[7]),
10
+ hash:b[8]}}
@@ -0,0 +1,28 @@
1
+ import { IContext, IRumSession, IViewData } from '@arms/rum-core';
2
+ export interface Page {
3
+ route: string;
4
+ is: string;
5
+ getPageId: () => string;
6
+ __rum_view_id?: string;
7
+ }
8
+ export declare const PAGE_ID = "__rum_view_id";
9
+ /**
10
+ * 获取 RUM 内置的view_id标识
11
+ * @param page
12
+ * @param session
13
+ * @returns
14
+ */
15
+ export declare function getRumViewId(page: Page, session?: IRumSession): string;
16
+ /**
17
+ * 获取当前 view
18
+ * @param viewId
19
+ * @param ctx
20
+ * @returns
21
+ */
22
+ export declare function getViewById(viewId: string, ctx: IContext): IViewData;
23
+ /**
24
+ * 获取当前 view
25
+ * @param ctx
26
+ * @returns
27
+ */
28
+ export declare function getCurView(ctx: IContext): IViewData;
@@ -0,0 +1,31 @@
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
21
+ * @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}/**
23
+ * 获取当前 view
24
+ * @param viewId
25
+ * @param ctx
26
+ * @returns
27
+ */export function getViewById(a,b){return a&&b?b.getViews().find(function(b){return b.id===a}):void 0}/**
28
+ * 获取当前 view
29
+ * @param ctx
30
+ * @returns
31
+ */export function getCurView(a){if(a){var b=a.getViews();if(b&&b.length)return b[b.length-1]}}
@@ -0,0 +1,14 @@
1
+ import { ICollector, IContext, RumActionEvent, RumEvent } from '@arms/rum-core';
2
+ export default class ActionCollector implements ICollector {
3
+ name: string;
4
+ private DELAY_TIME;
5
+ ctx: IContext;
6
+ sendEvent: (payload: RumEvent) => void;
7
+ events: string[];
8
+ lastEvent: RumActionEvent;
9
+ timer: any;
10
+ setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
11
+ onEvent: (e: any) => void;
12
+ sendAction: () => void;
13
+ destroy(): void;
14
+ }
@@ -0,0 +1,2 @@
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";
@@ -0,0 +1,23 @@
1
+ import { ICollector, IContext, RumEvent } from '@arms/rum-core';
2
+ export default class ExceptionCollector implements ICollector {
3
+ name: string;
4
+ ctx: IContext;
5
+ sendEvent: (payload: RumEvent) => void;
6
+ setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
7
+ hackOrigin(): void;
8
+ uniError: (error: Error) => void;
9
+ onError: (error: Error) => void;
10
+ onUnhandledRejection: (e: PromiseRejectionEvent) => void;
11
+ errorHandle: (event: any, source?: string) => void;
12
+ /**
13
+ * 根据stack获取Error信息
14
+ * TODO: 增加基于Stack解析filename和lineNumber的能力
15
+ * @param stack
16
+ * @returns
17
+ */
18
+ getErrorByStack(stack?: string): {
19
+ name: string;
20
+ message: string;
21
+ };
22
+ destroy(): void;
23
+ }
@@ -0,0 +1,7 @@
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=/**
3
+ * 根据stack获取Error信息
4
+ * TODO: 增加基于Stack解析filename和lineNumber的能力
5
+ * @param stack
6
+ * @returns
7
+ */function(a){void 0===a&&(a="");var b=a.split("\n");if(!(2>b.length))for(var c=1;c<b.length;c++)if(b[c].trim().startsWith("at ")){var d=b[c-1],e=d.indexOf(": ");return{name:d.substring(0,e),message:d.substring(e+2)}}},b.destroy=function(){(0,_rumCore.restoreFunction)(global.console,"error")},a}();
@@ -0,0 +1,13 @@
1
+ import { ICollector, IContext, ITracingHeaders, RumEvent } from '@arms/rum-core';
2
+ import { IApiAttr, Options } from "../../utils/api";
3
+ export default class ApiCollector implements ICollector {
4
+ name: string;
5
+ ctx: IContext;
6
+ sendEvent: (payload: RumEvent) => void;
7
+ setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
8
+ interceptorRequest(): void;
9
+ injectTracing(apiAttr: IApiAttr, inject: (tracingHeaders: ITracingHeaders) => void): void;
10
+ rebuildRequestOptions(options: Options): Options;
11
+ sendApi: (apiAttr: any, resp: any, options: any) => Promise<void>;
12
+ private getResourceName;
13
+ }
@@ -0,0 +1,78 @@
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,m=c.profile,!(0,_rumCore.isFunction)(g)){e.next=13;break}return e.prev=3,0===b.success&&(n=new Error("request error")),e.next=7,g(d,c,n);case 7:o=e.sent,b=(0,_extends2["default"])({},b,(0,_api.reviseApiAttr)(o)),e.next=13;break;case 11:e.prev=11,e.t0=e["catch"](3);case 13:if(p=(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),!(p.duration>_rumCore.ONE_DAY)){e.next=16;break}return e.abrupt("return");case 16:a.sendEvent(p);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 = {
2
+ // request: sdk.request
3
+ // }
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));
5
+ this.ctx=a,this.sendEvent=b,this.interceptorRequest())},b.interceptorRequest=function(){if((0,_rumCore.isFunction)(_platform.sdk.addInterceptor)){var a=this;_platform.sdk.addInterceptor("request",{invoke:function(b){a.rebuildRequestOptions(b)}})}},b.injectTracing=function(a,b){var c,d=this.ctx.getConfig(),e=d.tracing,f=d.pid,g=d.version,h=void 0===g?"1.0.0":g,i=(0,_rumCore.parseTracingOptions)(e),j=i.enable,k=i.sample,l=i.propagatorTypes,m=i.allowedUrls,n=i.tracestate,o=i.baggage;if(j){var p=(0,_rumCore.find)(m,function(b){return(0,_rumCore.matchList)([b.match],a.url)});if(p){var q=p.propagatorTypes;0===q.length&&(q=l);// skywalking
6
+ var r=!1;q.includes("sw8")&&(q=["sw8"],r=!0);var s=r?(0,_rumCore.generateGUID)():(0,_rumCore.generateTraceId)(),t=r?(0,_rumCore.generateGUID)():(0,_rumCore.generateSpanId)(),u=(0,_rumCore.performDraw)(k),v=this.ctx.session.getUserId(),w=this.ctx.session.getSessionId(),x=void 0===n||n?"rum=v2&uniapp&"+f+"&"+w+"&"+v:void 0,y=void 0!==o&&o?"rum=v2,appType=uniapp,pid="+f+",sid="+w+",uid="+v:void 0,z=(0,_rumCore.makeTracingHeaders)(s,t,u,q,{tracestate:x,baggage:y,appId:f,appVersion:h,viewName:null===(c=a.view)||void 0===c?void 0:c.name,host:_platform.appName});u&&(a.trace_id=s,a.trace_data=JSON.stringify({spanId:t,sample:k,sampled:u,header:z})),b(z)}}}// hackRequest(key) {
7
+ // const self = this;
8
+ // if (!isFunction(sdk[key])) return;
9
+ // sdk[key] = function (...args: any[]) {
10
+ // args[0] = self.rebuildRequestOptions(args[0]);
11
+ // return self.origin[key].apply(this, args);
12
+ // }
13
+ // // Object.defineProperty(sdk, key, {
14
+ // // configurable: true,
15
+ // // enumerable: true,
16
+ // // writable: true,
17
+ // // value: function (...args: any) {
18
+ // // args[0] = self.rebuildRequestOptions(args[0]);
19
+ // // self.origin[key].apply(this, args);
20
+ // // return this;
21
+ // // }
22
+ // // });
23
+ // }
24
+ ,b.rebuildRequestOptions=function(a){var b=this,c=a.url,d=a.success,e=a.fail,f=a.header,g=(0,_base.getCurrentTime)();// SDK自己的请求不监控 & 过滤不需要监控的url
25
+ if((0,_url.isEndpoint)(this.ctx,c)||(0,_rumCore.urlMatch)(c))return a;// const newOptions = {
26
+ // ...options,
27
+ // };
28
+ var h={view:(0,_view.getCurView)(this.ctx),timestamp:g,url:c,name:this.getResourceName(c),method:a.method||"GET"};return this.injectTracing(h,function(b){a.header=(0,_extends2["default"])({},f,b)}),a.success=function(){h.success=1;for(var c=arguments.length,e=Array(c),f=0;f<c;f++)e[f]=arguments[f];b.sendApi(h,e[0],a),d&&d.apply(this,e)},a.fail=function(){h.success=0;for(var c=arguments.length,d=Array(c),f=0;f<c;f++)d[f]=arguments[f];b.sendApi(h,d[0],a),e&&e.apply(this,d)},a},b.getResourceName=function(a){var b,c=this.ctx.getConfig(),d=c.parseResourceName;return b=(0,_rumCore.isFunction)(d)?d(a):(0,_url.getPathByURL)(a),b}// /**
29
+ // * 解析小程序的性能数据
30
+ // * 参考:https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html
31
+ // * https://opendocs.alipay.com/mini/api/owycmh?pathHash=c91640f8
32
+ // * @param profile
33
+ // * @returns
34
+ // */
35
+ // parseProfile(profile: IMeasure) {
36
+ // const data: IMeasure = {};
37
+ //
38
+ // function parseMeasure(key: string, target: string) {
39
+ // if (key in profile && profile[key] > 0) {
40
+ // data[target] = profile[key];
41
+ // }
42
+ // }
43
+ //
44
+ // // 以下针对类alipay小程序的情况
45
+ // parseMeasure('domainLookup', 'dns_duration');
46
+ // parseMeasure('connect', 'connect_duration');
47
+ // parseMeasure('SSLconnection', 'ssl_duration');
48
+ // parseMeasure('Waiting', 'first_byte_duration');
49
+ // parseMeasure('totalTime', 'duration');
50
+ //
51
+ // function calcMeasure(key1: string, key2: string, target: string) {
52
+ // if ((key1 in profile) && (key1 in profile)) {
53
+ // const mea = profile[key2] - profile[key1];
54
+ // if (mea > 0) {
55
+ // data[target] = mea;
56
+ // }
57
+ // }
58
+ // }
59
+ //
60
+ // // 以下针对wx小程序相对标准的情况
61
+ // parseMeasure('receivedBytedCount', 'size');
62
+ // calcMeasure('connectStart', 'connectEnd', 'connect_duration')
63
+ // calcMeasure('SSLconnectionStart', 'SSLconnectionEnd', 'ssl_duration')
64
+ // calcMeasure('domainLookUpStart', 'domainLookUpEnd', 'dns_duration')
65
+ // calcMeasure('redirectStart', 'redirectEnd', 'redirect_duration')
66
+ // calcMeasure('responseStart', 'requestStart', 'first_byte_duration')
67
+ // calcMeasure('responseStart', 'requestEnd', 'download_duration')
68
+ // calcMeasure('redirectStart', 'responseEnd', 'duration')
69
+ // // 对超大的耗时进行过滤
70
+ // Object.keys(data).forEach((key) => {
71
+ // if (data[key] > ONE_DAY) {
72
+ // delete data[key];
73
+ // }
74
+ // })
75
+ //
76
+ // return data;
77
+ // }
78
+ ,a}();
@@ -0,0 +1,10 @@
1
+ import { ICollector, IContext, RumEvent } from '@arms/rum-core';
2
+ export default class PerfCollector implements ICollector {
3
+ name: string;
4
+ ctx: IContext;
5
+ sendEvent: (payload: RumEvent) => void;
6
+ perfObserver: any;
7
+ setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
8
+ observerHandler: (ev: any) => void;
9
+ destroy(): void;
10
+ }
@@ -0,0 +1 @@
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}();
@@ -0,0 +1,19 @@
1
+ import { ICollector, IContext, RumEvent } from '@arms/rum-core';
2
+ interface IUniPage {
3
+ id: string;
4
+ route: string;
5
+ name?: string;
6
+ }
7
+ export default class PvCollector implements ICollector {
8
+ name: string;
9
+ ctx: IContext;
10
+ sendEvent: (payload: RumEvent) => void;
11
+ private prevPage;
12
+ setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
13
+ onLaunch: (that: any, e: any) => void;
14
+ onBeforeCreate: (that: any, e: any) => void;
15
+ sendPv: (page: IUniPage) => void;
16
+ private getViewName;
17
+ destroy(): void;
18
+ }
19
+ export {};
@@ -0,0 +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.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)},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}();
package/lib/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import armsRum, { ArmsRum } from './shell';
2
+ export { ArmsRum };
3
+ export default armsRum;
package/lib/index.js ADDED
@@ -0,0 +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"];
@@ -0,0 +1,5 @@
1
+ import { IContext, IProcessor, RumEvent } from '@arms/rum-core';
2
+ export default class DefaultProcessor implements IProcessor {
3
+ name: string;
4
+ process(ctx: IContext): RumEvent;
5
+ }
@@ -0,0 +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")),_base=require("../utils/base"),_view=require("../utils/view"),DefaultProcessor=exports["default"]=/*#__PURE__*/function(){function a(){this.name="default-processor"}var b=a.prototype;return b.process=function(a){var b=a.getRumEvent(),c=(0,_view.getCurView)(a),d=(0,_extends2["default"])({timestamp:(0,_base.getCurrentTime)(),session_id:a.session.getSessionId(),event_id:a.session.getEventId(),view:c},b);return d},a}();
@@ -0,0 +1,8 @@
1
+ import { IContext, IProcessor } from '@arms/rum-core';
2
+ export default class SessionProcessor implements IProcessor {
3
+ name: string;
4
+ ctx: IContext;
5
+ setup(ctx: IContext): void;
6
+ update: (e?: Event) => void;
7
+ process(ctx: IContext): import("@arms/rum-core").RumEvent;
8
+ }
@@ -0,0 +1 @@
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),SessionProcessor=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="session-processor",this.ctx=void 0,this.update=function(b){b&&!b.isTrusted||a.ctx.session.updateSession()}}var b=a.prototype;return b.setup=function(a){this.ctx=a,this.update=(0,_rumCore.debounce)(this.update,_rumCore.ONE_SECOND)},b.process=function(a){return this.update(),a.getRumEvent()},a}();
@@ -0,0 +1,10 @@
1
+ import { IContext, IReporter, Reporter, RumEventBundle } from '@arms/rum-core';
2
+ /**
3
+ * uni-app reporter
4
+ */
5
+ declare class UniReporter extends Reporter implements IReporter {
6
+ name: string;
7
+ init(ctx: IContext): void;
8
+ request(ctx: IContext, bundle: RumEventBundle): void;
9
+ }
10
+ export default UniReporter;
@@ -0,0 +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;/**
2
+ * uni-app reporter
3
+ */
package/lib/shell.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ import { Shell } from '@arms/rum-core';
2
+ import { IUniConfig, Vue } from "./types/client";
3
+ /**
4
+ * 对外导出 shell 层, 所有 shell 层模型的 API 设计约定:
5
+ * 1. API 命名空间按照 variables / functions / events 来组织
6
+ * 2. 事件(events)的命名格式为:on[Will|Did]VerbNoun?,参考 https://code.visualstudio.com/api/references/vscode-api#events
7
+ * 3. 基于 Disposable 模式,对于事件的绑定、快捷键的绑定函数,返回值则是解绑函数
8
+ */
9
+ export declare class ArmsRum extends Shell {
10
+ version: string;
11
+ /**
12
+ * 初始化
13
+ */
14
+ init(config: IUniConfig): void;
15
+ /**
16
+ * set config
17
+ */
18
+ setConfig<T extends keyof IUniConfig>(key: T, value: IUniConfig[T]): void;
19
+ setConfig(value: IUniConfig): void;
20
+ getLocalConfig(duration: number, pid: string): any;
21
+ getRemoteConfig(url: string, config: any): object;
22
+ storeRemoteConfig(config: any, pid: string): boolean;
23
+ setVue(vue: Vue): void;
24
+ }
25
+ declare const _default: ArmsRum;
26
+ export default _default;
package/lib/shell.js ADDED
@@ -0,0 +1,15 @@
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=/**
2
+ * 初始化
3
+ */function(a){a.vue&&this.setVue(a.vue),this.client.useCollectors([new _pv["default"],// new PerfCollector(),
4
+ new _exception["default"],new _api["default"]// new ActionCollector(),
5
+ ]),this.client.useProcessors([new _defaultProcessor["default"],new _sessionProcessor["default"]]),this.client.useReporter(new _reporter["default"]),this.client.init(a,new _session.RumSession)}/**
6
+ * set config
7
+ */,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.getLocalConfig=function(){},c.getRemoteConfig=function(){},c.storeRemoteConfig=function(){return!1},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';
8
+ // import ActionCollector from './collector/action';
9
+ // import { getNetType } from "./utils/network";
10
+ /**
11
+ * 对外导出 shell 层, 所有 shell 层模型的 API 设计约定:
12
+ * 1. API 命名空间按照 variables / functions / events 来组织
13
+ * 2. 事件(events)的命名格式为:on[Will|Did]VerbNoun?,参考 https://code.visualstudio.com/api/references/vscode-api#events
14
+ * 3. 基于 Disposable 模式,对于事件的绑定、快捷键的绑定函数,返回值则是解绑函数
15
+ */
package/lib/style.js ADDED
@@ -0,0 +1 @@
1
+ //empty file
@@ -0,0 +1,28 @@
1
+ import { IConfiguration, ITracingOption } from "@arms/rum-core";
2
+ import { IApiBaseAttr } from "../utils/api";
3
+ export interface Vue {
4
+ mixin: (options: object) => void;
5
+ }
6
+ export interface IUniConfig extends IConfiguration {
7
+ /**
8
+ * vue2 时为 VUE
9
+ * vue3 是为 new Vue() 实例
10
+ */
11
+ vue: Vue;
12
+ /**
13
+ * view.name 解析
14
+ */
15
+ parseViewName?(url: string): string;
16
+ /**
17
+ * resource.name 解析
18
+ */
19
+ parseResourceName?(url: string): string;
20
+ /**
21
+ * tracing 配置 'tracecontext' | 'b3' | 'b3multi' | 'jaeger';
22
+ */
23
+ tracing?: boolean | ITracingOption;
24
+ /**
25
+ * request 自定义解析;
26
+ */
27
+ evaluateApi?(request: any, response: any, error?: Error): Promise<IApiBaseAttr>;
28
+ }
@@ -0,0 +1 @@
1
+ "use strict";exports.__esModule=!0;
@@ -0,0 +1,29 @@
1
+ import { IViewData, ResourceStatus } from "@arms/rum-core";
2
+ export interface IMeasure {
3
+ [key: string]: number;
4
+ }
5
+ export interface IApiBaseAttr {
6
+ name?: string;
7
+ message?: string;
8
+ success?: ResourceStatus;
9
+ duration?: number;
10
+ status_code?: number | string;
11
+ snapshots?: string;
12
+ }
13
+ export interface IApiAttr extends IApiBaseAttr {
14
+ view: IViewData;
15
+ url: string;
16
+ name?: string;
17
+ timestamp: number;
18
+ method: string;
19
+ trace_id?: string;
20
+ trace_data?: string;
21
+ }
22
+ export interface Options {
23
+ url: string;
24
+ method?: string;
25
+ header?: any;
26
+ success?: (res: any) => void;
27
+ fail?: (res: any) => void;
28
+ }
29
+ export declare function reviseApiAttr(attrs: IApiBaseAttr): IApiBaseAttr;
@@ -0,0 +1 @@
1
+ "use strict";var _rumCore=require("@arms/rum-core");exports.__esModule=!0,exports.reviseApiAttr=reviseApiAttr;function reviseApiAttr(a){if(a&&(0,_rumCore.isObject)(a)){var b={};return(0,_rumCore.isString)(a.name)&&(b.name=a.name.substring(0,1e3)),(0,_rumCore.isString)(a.message)&&(b.message=a.message.substring(0,1e3)),"success"in a&&(b.success=a.success?1:0),(0,_rumCore.isNumber)(a.duration)&&0<=a.duration&&(b.duration=a.duration),(0,_rumCore.isString)(a.status_code)&&(b.status_code=a.status_code.substring(0,100)),(0,_rumCore.isNumber)(a.status_code)&&(b.status_code=a.status_code),(0,_rumCore.isString)(a.snapshots)&&(b.snapshots=a.snapshots.substring(0,5e3)),b}}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 保留指定位数的小数
3
+ * @param num 原数据
4
+ * @param decimal 小数位数
5
+ * @returns
6
+ */
7
+ export declare function formatNumber(num: number, decimal?: number): number;
8
+ /**
9
+ * 获取获取当前时间 fix Data.now() 存在的缺陷
10
+ * duration方法用于计算时间跨度,由于Date.now存在bug,可能为负数,尽可能使用performance.now计算
11
+ * @returns
12
+ */
13
+ export declare function getCurrentTime(): number;
@@ -0,0 +1,10 @@
1
+ "use strict";exports.__esModule=!0,exports.formatNumber=formatNumber,exports.getCurrentTime=getCurrentTime;/**
2
+ * 保留指定位数的小数
3
+ * @param num 原数据
4
+ * @param decimal 小数位数
5
+ * @returns
6
+ */function formatNumber(a,b){if(void 0===b&&(b=3),!a)return a;var c=a.toString(),d=c.indexOf(".");return c=-1===d?c.substring(0):c.substring(0,b+d+1),parseFloat(c)}/**
7
+ * 获取获取当前时间 fix Data.now() 存在的缺陷
8
+ * duration方法用于计算时间跨度,由于Date.now存在bug,可能为负数,尽可能使用performance.now计算
9
+ * @returns
10
+ */function getCurrentTime(){return new Date().getTime()}
@@ -0,0 +1,6 @@
1
+ import { Vue } from "../types/client";
2
+ type Callback = (that: any, ev: any) => void;
3
+ export declare function mixin(vue: Vue): void;
4
+ export declare function addEventListener(key: string, listener: Callback): void;
5
+ export declare function removeEventListener(key: string, listener: Callback): boolean;
6
+ export {};
@@ -0,0 +1 @@
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}
@@ -0,0 +1,33 @@
1
+ import { RumEventBundle } from "@arms/rum-core";
2
+ export declare const global2: any;
3
+ export declare const VERSION: string;
4
+ interface CommonOption {
5
+ success?: (res: any) => void;
6
+ fail?: (res: any) => void;
7
+ complete?: (res: any) => void;
8
+ }
9
+ interface SDK {
10
+ onAppShow: (listener: Function) => void;
11
+ onAppHide: (listener: Function) => void;
12
+ request: (options: any) => void;
13
+ getStorageSync: (key: any) => any;
14
+ setStorageSync: (key: any, data?: string) => void;
15
+ onError: (listener: Function) => void;
16
+ onPageNotFound: (listener: Function) => void;
17
+ offError: (listener: Function) => void;
18
+ navigateTo: (options: any) => void;
19
+ getSystemInfo: () => any;
20
+ getDeviceInfo: () => any;
21
+ getAppBaseInfo: () => any;
22
+ getWindowInfo: () => any;
23
+ getNetworkType: (options: CommonOption) => any;
24
+ addInterceptor: (key: string, options: any) => any;
25
+ }
26
+ export declare const sdk: SDK;
27
+ export declare const appName = "uniapp";
28
+ export declare function getStorageSync(key: any): any;
29
+ export declare function setStorageSync(key: string, data: string): void;
30
+ export declare function getPerformance(): any;
31
+ export declare function getNetType(): Promise<string>;
32
+ export declare const fixAttrs: (bundle: RumEventBundle) => Promise<RumEventBundle>;
33
+ export {};