@arms/rum-miniapp 0.0.2 → 0.0.7

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.
@@ -1,7 +1,22 @@
1
- import { ICollector, IContext, RumEvent } from '@arms/rum-core';
1
+ import { ICollector, IContext, ITracingHeaders, IViewData, RumEvent } from '@arms/rum-core';
2
2
  interface IMeasure {
3
3
  [key: string]: number;
4
4
  }
5
+ interface IApiAttr {
6
+ view: IViewData;
7
+ url: string;
8
+ name?: string;
9
+ startTime: number;
10
+ method: string;
11
+ trace_id?: string;
12
+ }
13
+ interface Options {
14
+ url: string;
15
+ method?: string;
16
+ headers?: any;
17
+ success?: (res: any) => void;
18
+ fail?: (res: any) => void;
19
+ }
5
20
  export default class ApiCollector implements ICollector {
6
21
  name: string;
7
22
  ctx: IContext;
@@ -11,9 +26,10 @@ export default class ApiCollector implements ICollector {
11
26
  httpRequest: (options: any) => void;
12
27
  };
13
28
  setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
29
+ injectTracing(apiAttr: IApiAttr, inject: (tracingHeaders: ITracingHeaders) => void): void;
14
30
  hackRequest(key: any): void;
15
- rebuildRequestOptions(options: any): any;
16
- sendApi(resp: any, options: any, success: any, startTime: any): void;
31
+ rebuildRequestOptions(options: Options): Options;
32
+ sendApi(apiAttr: any, resp: any, success: any): void;
17
33
  /**
18
34
  * 解析小程序的性能数据
19
35
  * 参考:https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html
@@ -1,5 +1,5 @@
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"),_platform=_interopRequireDefault(require("../../utils/platform")),_url=require("../../utils/url"),_base=require("../../utils/base"),_view=require("../../utils/view"),ApiCollector=exports["default"]=/*#__PURE__*/function(){function a(){this.name="api-collector",this.ctx=void 0,this.sendEvent=void 0,this.origin={request:_platform["default"].request,httpRequest:_platform["default"].httpRequest}}var b=a.prototype;return b.setup=function setup(a,b){var c=this,d=a.getConfig(),e=d.collectors,f=void 0===e?{}:e;!1===f.api||(this.ctx=a,this.sendEvent=b,Object.keys(this.origin).forEach(function(a){return c.hackRequest(a)}))},b.hackRequest=function hackRequest(a){var b=this;a in _platform["default"]&&Object.defineProperty(_platform["default"],a,{configurable:!0,enumerable:!0,writable:!0,value:function value(){for(var c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return d[0]=b.rebuildRequestOptions(d[0]),b.origin[a].apply(this,d)}})},b.rebuildRequestOptions=function rebuildRequestOptions(a){var b=this,c=a.url,d=a.success,e=a.fail,f=(0,_base.getCurrentTime)();// SDK自己的请求不监控
2
- if((0,_url.isEndpoint)(this.ctx,c))return a;var g=(0,_extends2["default"])({},a);return g.success=function(){for(var c=arguments.length,e=Array(c),g=0;g<c;g++)e[g]=arguments[g];b.sendApi(e[0],a,!0,f),d&&d.apply(this,e)},g.fail=function(){for(var c=arguments.length,d=Array(c),g=0;g<c;g++)d[g]=arguments[g];b.sendApi(d[0],a,!1,f),e&&e.apply(this,d)},g},b.sendApi=function sendApi(a,b,c,d){var e,f,g=(0,_view.getCurView)(this.ctx),h=a.statusCode,i=a.status,j=a.errMsg,k=a.errorMessage,l=a.message,m=a.profile,n=b.url,o=b.method,p=void 0===o?"GET":o,q=(0,_url.getPathByURL)(n),r=(0,_base.getCurrentTime)()-d;m&&(e=this.parseProfile(m),f=JSON.stringify(m)),this.sendEvent((0,_extends2["default"])({event_type:_rumCore.RumEventType.RESOURCE,url:n,name:q,type:"api",method:p.toUpperCase(),status_code:i||h,message:k||j||l,view:g,success:c,duration:r},e,{times:1,timing_data:f}))}/**
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"),_platform=_interopRequireDefault(require("../../utils/platform")),_url=require("../../utils/url"),_base=require("../../utils/base"),_view=require("../../utils/view"),_uuid=require("../../utils/uuid"),ApiCollector=exports["default"]=/*#__PURE__*/function(){function a(){this.name="api-collector",this.ctx=void 0,this.sendEvent=void 0,this.origin={request:_platform["default"].request,httpRequest:_platform["default"].httpRequest}}var b=a.prototype;return b.setup=function setup(a,b){var c=this,d=a.getConfig(),e=d.collectors,f=void 0===e?{}:e;!1===f.api||(this.ctx=a,this.sendEvent=b,Object.keys(this.origin).forEach(function(a){return c.hackRequest(a)}))},b.injectTracing=function injectTracing(a,b){var c=this.ctx.getConfig(),d=c.tracing,e=c.pid,f=(0,_rumCore.parseTracingOptions)(d),g=f.enable,h=f.allowedUrls,i=f.sample,j=f.baggage;if(g){var k=(0,_rumCore.generateTraceId)(),l=(0,_rumCore.generateSpanId)(),m=(0,_rumCore.performDraw)(i),n=(0,_rumCore.find)(h,function(b){return(0,_rumCore.matchList)([b.match],a.url)});if(n){var o=(0,_rumCore.makeTracingHeaders)(k,l,m,n.propagatorTypes,void 0===j||j?{appType:"browser",pid:e,sid:(0,_uuid.getSessionID)()}:void 0);m&&(a.trace_id=k),b(o)}}},b.hackRequest=function hackRequest(a){var b=this;a in _platform["default"]&&Object.defineProperty(_platform["default"],a,{configurable:!0,enumerable:!0,writable:!0,value:function value(){for(var c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];return d[0]=b.rebuildRequestOptions(d[0]),b.origin[a].apply(this,d)}})},b.rebuildRequestOptions=function rebuildRequestOptions(a){var b=this,c=a.url,d=a.success,e=a.fail,f=(0,_base.getCurrentTime)();// SDK自己的请求不监控 & 过滤不需要监控的url
2
+ if((0,_url.isEndpoint)(this.ctx,c)||(0,_rumCore.urlMatch)(c))return a;var g=(0,_extends2["default"])({},a),h={view:(0,_view.getCurView)(this.ctx),startTime:f,url:c,name:(0,_url.getPathByURL)(c),method:a.method||"GET"};return this.injectTracing(h,function(a){g.headers=(0,_extends2["default"])({},g.headers,a)}),g.success=function(){for(var a=arguments.length,c=Array(a),e=0;e<a;e++)c[e]=arguments[e];b.sendApi(h,c[0],!0),d&&d.apply(this,c)},g.fail=function(){for(var a=arguments.length,c=Array(a),d=0;d<a;d++)c[d]=arguments[d];b.sendApi(h,c[0],!1),e&&e.apply(this,c)},g},b.sendApi=function sendApi(a,b,c){var d,e,f=(0,_view.getCurView)(this.ctx),g=b.statusCode,h=b.status,i=b.errMsg,j=b.errorMessage,k=b.message,l=b.profile;l&&(d=this.parseProfile(l),e=JSON.stringify(l)),this.sendEvent((0,_extends2["default"])({event_type:_rumCore.RumEventType.RESOURCE},a,{type:"api",status_code:h||g,message:j||i||k,view:f,success:c,duration:(0,_base.getCurrentTime)()-a.startTime},d,{times:1,timing_data:e}))}/**
3
3
  * 解析小程序的性能数据
4
4
  * 参考:https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html
5
5
  * https://opendocs.alipay.com/mini/api/owycmh?pathHash=c91640f8
@@ -1,5 +1,4 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _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=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&&// TODO 处理性能数据
2
- console.warn("perf-collector: ",d)}}var b=a.prototype;return b.setup=function setup(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 destroy(){this.perfObserver&&this.perfObserver.disconnect()},a}();// import {addPageListener, removePageListener} from "../../utils/hackPage";
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _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=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 setup(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 destroy(){this.perfObserver&&this.perfObserver.disconnect()},a}();// import {addPageListener, removePageListener} from "../../utils/hackPage";
3
2
  /*
4
3
  * 参考资料:
5
4
  * https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html
@@ -3,7 +3,9 @@ export default class PvCollector implements ICollector {
3
3
  name: string;
4
4
  ctx: IContext;
5
5
  sendEvent: (payload: RumEvent) => void;
6
+ private prevPage;
6
7
  setup(ctx: IContext, sendEvent: (payload: RumEvent) => void): void;
7
8
  sendPv: () => void;
9
+ private getViewName;
8
10
  destroy(): void;
9
11
  }
@@ -1 +1,3 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_uuid=require("../../utils/uuid"),_view=require("../../utils/view"),_hackPage=require("../../utils/hackPage"),PvCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="pv-collector",this.ctx=void 0,this.sendEvent=void 0,this.sendPv=function(){var b=(0,_view.getCurPage)();a.ctx.addView({id:(0,_uuid.getViewId)(),name:b}),a.sendEvent({event_type:_rumCore.RumEventType.VIEW,type:"pv",url:b,name:b,loading_type:"initial_load"})}}var b=a.prototype;return b.setup=function setup(a,b){this.ctx=a,this.sendEvent=b,(0,_hackPage.addPageListener)("onShow",this.sendPv)},b.destroy=function destroy(){(0,_hackPage.removePageListener)("onShow",this.sendPv)},a}();
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_uuid=require("../../utils/uuid"),_view=require("../../utils/view"),_hackPage=require("../../utils/hackPage"),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.sendPv=function(){var b=(0,_view.getCurPage)();if(b){// 判定路由发生变化,重新生成 viewId
2
+ var c=b.route,d=b.__rum_view_id;if(!(a.prevPage&&c===a.prevPage.route&&d===a.prevPage.viewId))// 路由没有发生变化,不发送
3
+ {var e=d?"route_back":"initial_load";d=b.__rum_view_id=(0,_uuid.getViewId)(),a.prevPage={route:c,viewId:d};var f=a.getViewName(c);a.ctx.addView({id:d,name:f}),a.sendEvent({event_type:_rumCore.RumEventType.VIEW,type:"pv",url:c,name:f,loading_type:e})}}}}var b=a.prototype;return b.setup=function setup(a,b){this.ctx=a,this.sendEvent=b,(0,_hackPage.addPageListener)("onShow",this.sendPv)},b.getViewName=function getViewName(a){var b=this.ctx.getConfig(),c=b.parseViewName,d=a;return(0,_rumCore.isFunction)(c)&&(d=c(a)),d},b.destroy=function destroy(){(0,_hackPage.removePageListener)("onShow",this.sendPv)},a}();
@@ -1,2 +1,2 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _uuid=require("../utils/uuid"),_base=require("../utils/base"),SessionProcessor=exports["default"]=/*#__PURE__*/function(){function a(){this.name="session-processor",this.lastTime=(0,_base.getCurrentTime)(),this.sessionOvertime=1800000}var b=a.prototype;return b.process=function process(a){var b=(0,_base.getCurrentTime)();// 30 分钟内不上报更新session
2
- return b-this.lastTime>this.sessionOvertime&&((0,_uuid.setSessionID)(),this.lastTime=b),a.getRumEvent()},a}();
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _uuid=require("../utils/uuid"),_base=require("../utils/base"),SessionProcessor=exports["default"]=/*#__PURE__*/function(){function a(){this.name="session-processor",this.lastTime=(0,_base.getCurrentTime)(),this.sessionOvertime=3600000}var b=a.prototype;return b.process=function process(a){var b=(0,_base.getCurrentTime)();// 30 分钟内不上报更新session
2
+ return b-this.lastTime>this.sessionOvertime&&(0,_uuid.setSessionID)(),this.lastTime=b,a.getRumEvent()},a}();
package/lib/shell.d.ts CHANGED
@@ -1,25 +1,16 @@
1
- import { IClient, IConfiguration, IShell, RumEvent } from '@arms/rum-core';
1
+ import { IConfiguration, Shell } from '@arms/rum-core';
2
2
  /**
3
3
  * 对外导出 shell 层, 所有 shell 层模型的 API 设计约定:
4
4
  * 1. API 命名空间按照 variables / functions / events 来组织
5
5
  * 2. 事件(events)的命名格式为:on[Will|Did]VerbNoun?,参考 https://code.visualstudio.com/api/references/vscode-api#events
6
6
  * 3. 基于 Disposable 模式,对于事件的绑定、快捷键的绑定函数,返回值则是解绑函数
7
7
  */
8
- export declare class ArmsRum implements IShell {
9
- client: IClient;
8
+ export declare class ArmsRum extends Shell {
10
9
  /**
11
10
  * 初始化
12
11
  */
13
12
  init(configuration: IConfiguration): void;
14
13
  updateNetType: (type: string) => void;
15
- /**
16
- * 自定义上传数据
17
- */
18
- sendEvent(payload: RumEvent): void;
19
- /**
20
- * get config
21
- */
22
- getConfig(): IConfiguration;
23
14
  /**
24
15
  * set config
25
16
  */
package/lib/shell.js CHANGED
@@ -1,12 +1,6 @@
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")),_rumCore=require("@arms/rum-core"),_pv=_interopRequireDefault(require("./collector/view/pv")),_perf=_interopRequireDefault(require("./collector/view/perf")),_exception=_interopRequireDefault(require("./collector/exception")),_api=_interopRequireDefault(require("./collector/resource/api")),_action=_interopRequireDefault(require("./collector/action")),_defaultProcessor=_interopRequireDefault(require("./processor/default-processor")),_sessionProcessor=_interopRequireDefault(require("./processor/session-processor")),_reporter=_interopRequireDefault(require("./reporter")),_network=require("./utils/network"),ArmsRum=exports.ArmsRum=/*#__PURE__*/function(){function a(){var a=this;this.client=void 0,this.updateNetType=function(b){var c=a.getConfig(),d=c.net,e=void 0===d?{}:d;a.setConfig("net",(0,_extends3["default"])({},e,{type:b}))}}var b=a.prototype;return b.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")),_perf=_interopRequireDefault(require("./collector/view/perf")),_exception=_interopRequireDefault(require("./collector/exception")),_api=_interopRequireDefault(require("./collector/resource/api")),_action=_interopRequireDefault(require("./collector/action")),_defaultProcessor=_interopRequireDefault(require("./processor/default-processor")),_sessionProcessor=_interopRequireDefault(require("./processor/session-processor")),_reporter=_interopRequireDefault(require("./reporter")),_network=require("./utils/network"),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.updateNetType=function(a){var c=b.getConfig(),d=c.net,e=void 0===d?{}:d;b.setConfig("net",(0,_extends3["default"])({},e,{type:a}))},b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.init=/**
2
2
  * 初始化
3
- */function init(a){this.client=new _rumCore.Client,this.client.useCollectors([new _pv["default"],new _perf["default"],new _exception["default"],new _api["default"],new _action["default"]]),this.client.useProcessors([new _defaultProcessor["default"],new _sessionProcessor["default"]]),this.client.useReporter(new _reporter["default"]),this.client.init(a),(0,_network.getNetType)(this.updateNetType)},b.sendEvent=/**
4
- * 自定义上传数据
5
- */function sendEvent(a){this.client.sendEvent(a)}/**
6
- * get config
7
- */,b.getConfig=function getConfig(){return this.client.getContext().getConfig()}/**
8
- * set config
9
- */,b.setConfig=function setConfig(){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])},a}(),_default=exports["default"]=new ArmsRum;/**
3
+ */function init(a){this.client.useCollectors([new _pv["default"],new _perf["default"],new _exception["default"],new _api["default"],new _action["default"]]),this.client.useProcessors([new _defaultProcessor["default"],new _sessionProcessor["default"]]),this.client.useReporter(new _reporter["default"]),this.client.init(a),(0,_network.getNetType)(this.updateNetType)},c.setConfig=function setConfig(){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])},b}(_rumCore.Shell),_default=exports["default"]=new ArmsRum;/**
10
4
  * 对外导出 shell 层, 所有 shell 层模型的 API 设计约定:
11
5
  * 1. API 命名空间按照 variables / functions / events 来组织
12
6
  * 2. 事件(events)的命名格式为:on[Will|Did]VerbNoun?,参考 https://code.visualstudio.com/api/references/vscode-api#events
@@ -12,8 +12,8 @@ export declare function formatNumber(num: number, decimal?: number): number;
12
12
  * 目前(2022年10月29日15:56:26)只有微信支持wx.getPerformance,具备now的功能,但功能仅仅是封装了Date.now
13
13
  * qq支持getPerformance,但返回的依然是Date.now()
14
14
  * 字节跳动支持 tt.performance 但不支持now方法
15
- * 微信、百度、字节小程序支持 window.performance.now
16
- * 支付宝、钉钉小程序占不支持 window.performance.now
15
+ * 微信、百度、字节小程序支持 performance.now
16
+ * 支付宝、钉钉小程序占不支持 performance.now
17
17
  * @returns
18
18
  */
19
19
  export declare function getCurrentTime(timeOffset?: number): number;
package/lib/utils/base.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";exports.__esModule=!0,exports.formatNumber=formatNumber,exports.getCurrentTime=getCurrentTime;/**
1
+ "use strict";var _platform=require("./platform");exports.__esModule=!0,exports.formatNumber=formatNumber,exports.getCurrentTime=getCurrentTime;/**
2
2
  * 保留指定位数的小数
3
3
  * @param num 原数据
4
4
  * @param decimal 小数位数
@@ -10,7 +10,7 @@
10
10
  * 目前(2022年10月29日15:56:26)只有微信支持wx.getPerformance,具备now的功能,但功能仅仅是封装了Date.now
11
11
  * qq支持getPerformance,但返回的依然是Date.now()
12
12
  * 字节跳动支持 tt.performance 但不支持now方法
13
- * 微信、百度、字节小程序支持 window.performance.now
14
- * 支付宝、钉钉小程序占不支持 window.performance.now
13
+ * 微信、百度、字节小程序支持 performance.now
14
+ * 支付宝、钉钉小程序占不支持 performance.now
15
15
  * @returns
16
- */function getCurrentTime(a){var b,c;return null!==(b=performance)&&void 0!==b&&b.timeOrigin&&null!==(c=performance)&&void 0!==c&&c.now?Math.round(performance.timeOrigin+(a?a:performance.now())):Date.now()}
16
+ */function getCurrentTime(a){var b=(0,_platform.getPerformance)();return b&&b.timeOrigin&&b.now?Math.round(b.timeOrigin+(a?a:b.now())):Date.now()}
@@ -1,3 +1,3 @@
1
- "use strict";exports.__esModule=!0,exports.addPageListener=addPageListener,exports.originalPage=exports.originalComponent=void 0,exports.removePageListener=removePageListener;var _rumCore=require("@arms/rum-core"),listeners={};function hackPage(a){Object.keys(a).forEach(function(b){(0,_rumCore.interceptFunction)(a,b,function(){for(var a=this,c=arguments.length,d=Array(c),e=0;e<c;e++)d[e]=arguments[e];var f=[].concat(listeners[b]||[]);"*"!==b&&(f=f.concat(listeners["*"]||[])),f.forEach(function(b){b.apply(a,d)})})})}var originalPage=exports.originalPage=Page,originalComponent=exports.originalComponent=Component;Page=function Page(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];try{hackPage.apply(this,b)}catch(a){//
2
- }return originalPage.apply(this,b)},Component=function Component(){for(var a,b=arguments.length,c=Array(b),d=0;d<b;d++)c[d]=arguments[d];if("PAGE"===(null===this||void 0===this||null===(a=this.$component)||void 0===a?void 0:a.$componentType))try{hackPage.apply(this,c)}catch(a){//
3
- }return originalComponent.apply(this,c)};function addPageListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removePageListener(a,b){if(a in listeners){var c=listeners[a],d=c.indexOf(b);c.splice(d,1)}}
1
+ "use strict";exports.__esModule=!0,exports.addPageListener=addPageListener,exports.originalPage=exports.originalComponent=void 0,exports.removePageListener=removePageListener;var _rumCore=require("@arms/rum-core"),listeners={onShow:[]};function hackPage(a){Object.keys(listeners).forEach(function(b){var c=listeners[b];(0,_rumCore.interceptFunction)(a,b,function(){for(var a=this,b=arguments.length,d=Array(b),e=0;e<b;e++)d[e]=arguments[e];c.forEach(function(b){b.apply(a,d)})})})}var originalPage=exports.originalPage=Page,originalComponent=exports.originalComponent=Component;Page=function Page(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];try{hackPage.apply(this,b)}catch(a){//
2
+ }return originalPage.apply(this,b)},Component=function Component(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];try{var d=b[0]||{};d.methods||(d.methods={}),hackPage.call(this,d.methods)}catch(a){//
3
+ }return originalComponent.apply(this,b)};function addPageListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removePageListener(a,b){if(a in listeners){var c=listeners[a],d=c.indexOf(b);c.splice(d,1)}}
@@ -4,16 +4,20 @@ import { IContext } from "@arms/rum-core";
4
4
  * @param url 需要提取路径部分的 URL
5
5
  * @param isHash 是否为 hash 模式路由的 URL
6
6
  */
7
- export declare function getPathByURL(url: string, isHash?: boolean): any;
7
+ export declare function getPathByURL(url: string, isHash?: boolean): string;
8
8
  /**
9
9
  * 检查是否为上报域名
10
10
  * @param ctx
11
11
  * @param url 需要提取路径部分的 URL
12
12
  */
13
13
  export declare function isEndpoint(ctx: IContext, url: string): boolean;
14
- /**
15
- * @description: 获取类 URL 对象
16
- * @param {String} url
17
- * @return {Object} : urlObj
18
- */
19
- export declare function getURL(url: any): any;
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
+ };
package/lib/utils/url.js CHANGED
@@ -6,9 +6,20 @@
6
6
  * 检查是否为上报域名
7
7
  * @param ctx
8
8
  * @param url 需要提取路径部分的 URL
9
- */function isEndpoint(a,b){var c=a.getConfig(),d=c.endpoint;try{return getURL(b).domain===getURL(d).domain}catch(a){return!1}}/**
10
- * @description: 获取类 URL 对象
11
- * @param {String} url
12
- * @return {Object} : urlObj
13
- */function getURL(a){if(!a)return null;var b={},c=a.length,d=a.indexOf("://");if(0>d)// url 不完整不再处理
14
- return null;b.protocol=a.substring(0,d+1);var e=a.indexOf("#"),f=a.indexOf("?");0>e&&(e=c),b.search=a.substring(e),0>f&&(f=e),b.search=a.substring(f,e);var g=a.substring(d+3,f),h=g.indexOf("/");return 0>h&&(h=g.length),b.domain=g.substring(0,h).split(":")[0],b.pathname=g.substring(h,g.length),b}
9
+ */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;// function mapSearchParams(search: string) {
10
+ // const map = {}
11
+ // if (typeof search === 'string') {
12
+ // search.split('&').forEach(function (str) {
13
+ // let values = str.split('=')
14
+ // if (map.hasOwnProperty(values[0])) {
15
+ // map[values[0]] = Array.isArray(map[values[0]]) ? map[values[0]] : [map[values[0]]]
16
+ // map[values[0]].push(values[1])
17
+ // } else {
18
+ // map[values[0]] = values[1]
19
+ // }
20
+ // })
21
+ // return map
22
+ // }
23
+ // }
24
+ 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]),
25
+ hash:b[8]}}
package/lib/utils/uuid.js CHANGED
@@ -1,12 +1,13 @@
1
- "use strict";exports.__esModule=!0,exports.getEventId=getEventId,exports.getSessionID=getSessionID,exports.getUUID=getUUID,exports.getUserID=getUserID,exports.getViewId=getViewId,exports.setSessionID=setSessionID;var _platform=require("./platform"),_rumCore=require("@arms/rum-core"),SESSION_ID="ARMS_SESSION_ID",USER_ID="ARMS_USER_ID";// 存储sessionID的键名
1
+ "use strict";exports.__esModule=!0,exports.getEventId=getEventId,exports.getSessionID=getSessionID,exports.getUUID=getUUID,exports.getUserID=getUserID,exports.getViewId=getViewId,exports.setSessionID=setSessionID;var _platform=require("./platform"),_rumCore=require("@arms/rum-core"),SESSION_ID="_arms_sid",SESSION_ID_EXP="_arms_sid_exp",USER_ID="_arms_uid";// 存储sessionID的键名
2
+ // 存储sessionID的过期id
2
3
  // 存储userID的键名
3
4
  /**
4
5
  * 获取uuid
5
6
  */function getUUID(a){return void 0===a&&(a=""),a&&(a+="_"),""+a+(0,_rumCore.generateUUID)()}// 每次启动重置Session.id
6
7
  (0,_platform.setStorageSync)(SESSION_ID,void 0);/**
7
8
  * 获取唯一的sessionID
8
- */function getSessionID(){var a=(0,_platform.getStorageSync)(SESSION_ID);return a||(a=setSessionID()),a}/**
9
+ */function getSessionID(){var a=(0,_platform.getStorageSync)(SESSION_ID),b=new Date((0,_platform.getStorageSync)(SESSION_ID_EXP));return a&&b.valueOf()&&!(b<new Date)||(a=setSessionID()),a}/**
9
10
  * 设置唯一的sessionID
10
- */function setSessionID(){var a=(0,_rumCore.generateGUID)();return(0,_platform.setStorageSync)(SESSION_ID,a),a}/**
11
+ */function setSessionID(){var a=(0,_rumCore.generateGUID)();return(0,_platform.setStorageSync)(SESSION_ID,a),(0,_platform.setStorageSync)(SESSION_ID_EXP,new Date(Date.now()+86400000).toString()),a}/**
11
12
  * 获取唯一的userID
12
13
  */function getUserID(){var a=(0,_platform.getStorageSync)(USER_ID);return a||(a=getUUID("user"),(0,_platform.setStorageSync)(USER_ID,a)),a}function getEventId(){return(0,_rumCore.generateGUID)()}function getViewId(){return(0,_rumCore.generateGUID)()}
package/lib/utils/view.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";exports.__esModule=!0,exports.getCurPage=getCurPage,exports.getCurView=getCurView;/**
2
2
  * 获取当前 page
3
3
  * @returns
4
- */function getCurPage(){if("function"==typeof getCurrentPages)try{var a=getCurrentPages()||[],b=a[a.length-1];return b&&b.route||null}catch(a){console.warn("[arms] error in getCurView",a)}}/**
4
+ */function getCurPage(){if("function"==typeof getCurrentPages)try{var a=getCurrentPages()||[];return a[a.length-1]}catch(a){console.warn("[arms] error in getCurView",a)}}/**
5
5
  * 获取当前 view
6
6
  * @param ctx
7
7
  * @returns
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arms/rum-miniapp",
3
- "version": "0.0.2",
3
+ "version": "0.0.7",
4
4
  "description": "arms rum javascript sdk for miniapp",
5
5
  "author": "guangli.fj <guangli.fj@alibaba-inc.com>",
6
6
  "license": "ISC",
@@ -18,12 +18,14 @@
18
18
  "scripts": {
19
19
  "start": "build-scripts build --watch",
20
20
  "build": "build-scripts build",
21
+ "prepublishOnly": "npm run build",
21
22
  "test": "node ./__tests__/@arms/miniapp.test.js"
22
23
  },
23
24
  "dependencies": {
24
- "@arms/rum-core": "^0.0.2"
25
+ "@arms/rum-core": "^0.0.7"
25
26
  },
26
27
  "devDependencies": {
27
28
  "typescript": "^4.9.4"
28
- }
29
+ },
30
+ "homepage": "https://unpkg.com/@arms/rum-miniapp@0.0.7/build/index.html"
29
31
  }