@arms/rum-miniapp 0.1.6 → 0.1.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.
Files changed (89) hide show
  1. package/README.md +146 -9
  2. package/dist/miniapp-sdk.js +1 -1
  3. package/docs/SDK/347/211/210/346/234/254/350/257/264/346/230/216.md +71 -0
  4. package/docs/SDK/351/205/215/347/275/256/345/217/202/350/200/203.md +523 -0
  5. package/docs//346/216/245/345/205/245/345/260/217/347/250/213/345/272/217/345/272/224/347/224/250.md +272 -0
  6. package/es/collector/action/index.d.ts +14 -0
  7. package/es/collector/action/index.js +1 -0
  8. package/es/collector/application/index.d.ts +15 -0
  9. package/es/collector/application/index.js +5 -0
  10. package/es/collector/exception/index.d.ts +29 -0
  11. package/es/collector/exception/index.js +7 -0
  12. package/es/collector/longtask/render-block.d.ts +15 -0
  13. package/es/collector/longtask/render-block.js +1 -0
  14. package/es/collector/resource/api.d.ts +28 -0
  15. package/es/collector/resource/api.js +19 -0
  16. package/es/collector/resource/static-resource.d.ts +10 -0
  17. package/es/collector/resource/static-resource.js +148 -0
  18. package/es/collector/view/perf.d.ts +26 -0
  19. package/es/collector/view/perf.js +10 -0
  20. package/es/collector/view/pv.d.ts +12 -0
  21. package/es/collector/view/pv.js +2 -0
  22. package/es/configManager.d.ts +13 -0
  23. package/es/configManager.js +7 -0
  24. package/es/empty.js +1 -0
  25. package/es/index.d.ts +3 -0
  26. package/es/index.js +1 -0
  27. package/es/processor/default-processor.d.ts +5 -0
  28. package/es/processor/default-processor.js +1 -0
  29. package/es/processor/session-processor.d.ts +8 -0
  30. package/es/processor/session-processor.js +1 -0
  31. package/es/reporter/index.d.ts +10 -0
  32. package/es/reporter/index.js +3 -0
  33. package/es/shell.d.ts +42 -0
  34. package/es/shell.js +10 -0
  35. package/es/style.js +1 -0
  36. package/es/types/client.d.ts +39 -0
  37. package/es/types/client.js +1 -0
  38. package/es/utils/api.d.ts +43 -0
  39. package/es/utils/api.js +3 -0
  40. package/es/utils/base.d.ts +19 -0
  41. package/es/utils/base.js +16 -0
  42. package/es/utils/constants.d.ts +1 -0
  43. package/es/utils/constants.js +1 -0
  44. package/es/utils/hackApp.d.ts +3 -0
  45. package/es/utils/hackApp.js +2 -0
  46. package/es/utils/hackComponent.d.ts +3 -0
  47. package/es/utils/hackComponent.js +5 -0
  48. package/es/utils/hackPage.d.ts +3 -0
  49. package/es/utils/hackPage.js +2 -0
  50. package/es/utils/network.d.ts +1 -0
  51. package/es/utils/network.js +1 -0
  52. package/es/utils/platform.d.ts +41 -0
  53. package/es/utils/platform.js +6 -0
  54. package/es/utils/session.d.ts +26 -0
  55. package/es/utils/session.js +4 -0
  56. package/es/utils/sse.d.ts +23 -0
  57. package/es/utils/sse.js +14 -0
  58. package/es/utils/url.d.ts +29 -0
  59. package/es/utils/url.js +16 -0
  60. package/es/utils/view.d.ts +32 -0
  61. package/es/utils/view.js +31 -0
  62. package/lib/collector/action/index.js +1 -1
  63. package/lib/collector/application/index.js +2 -2
  64. package/lib/collector/exception/index.js +3 -3
  65. package/lib/collector/longtask/render-block.js +1 -1
  66. package/lib/collector/resource/api.d.ts +1 -0
  67. package/lib/collector/resource/api.js +13 -7
  68. package/lib/collector/resource/static-resource.js +10 -10
  69. package/lib/collector/view/perf.js +6 -5
  70. package/lib/collector/view/pv.js +2 -2
  71. package/lib/configManager.js +6 -5
  72. package/lib/empty.js +2 -0
  73. package/lib/processor/default-processor.js +1 -1
  74. package/lib/processor/session-processor.js +1 -1
  75. package/lib/reporter/index.js +2 -2
  76. package/lib/shell.js +6 -6
  77. package/lib/types/client.d.ts +21 -2
  78. package/lib/utils/api.d.ts +13 -0
  79. package/lib/utils/api.js +3 -1
  80. package/lib/utils/base.js +1 -1
  81. package/lib/utils/hackApp.js +2 -2
  82. package/lib/utils/hackComponent.js +2 -2
  83. package/lib/utils/hackPage.js +2 -2
  84. package/lib/utils/platform.js +1 -1
  85. package/lib/utils/session.js +4 -2
  86. package/lib/utils/sse.d.ts +23 -0
  87. package/lib/utils/sse.js +14 -0
  88. package/lib/utils/url.js +2 -2
  89. package/package.json +12 -3
@@ -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=_interopRequireWildcard(require("../../utils/platform")),_configManager=require("../../configManager");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)}/**
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=_interopRequireWildcard(require("../../utils/platform")),_configManager=require("../../configManager");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)}/**
2
2
  * 参考资料:
3
3
  * - https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html
4
4
  * - https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/foundation/performance/tt-performance/performance-entry
5
- */var ApplicationCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="application-collector",this.ctx=void 0,this.sendEvent=void 0,this.perfObserver=void 0,this.observerHandler=function(b){var c,d=(0,_rumCore.isArray)(b)?b:b.getEntries();if((0,_rumCore.isFunction)(_platform["default"].getLaunchOptionsSync)){var e;c=null===(e=_platform["default"].getLaunchOptionsSync())||void 0===e?void 0:e.scene}if(Array.isArray(d)&&0<d.length)for(var f,g=0;g<d.length;g++)if(f=d[g],"number"==typeof f.duration&&0<f.duration){var h=a.ctx.session.getBaseEvent(),j=(0,_extends2["default"])({},h,{event_type:_rumCore.RumEventType.APPLICATION,state:"",duration:0,snapshots:JSON.stringify(f),scene:c});switch(f.name){case"appLaunch":case"app-click":j.state="cold_lunch",j.duration=f.duration;break;case"downloadPackage":case"miniprogram-package":case"download":j.state="download_package",j.duration=f.duration;break;case"evaluateScript":case"app-service":var k=f.moduleName||f.packageName;"__APP__"===k&&(j.state="evaluate_script",j.duration=f.duration);break;default:}j.state&&0<j.duration&&6e5>j.duration&&a.sendEvent(j)}}}var b=a.prototype;return b.setup=function(a,b){if((0,_configManager.checkEnable)(a,"application")){this.ctx=a,this.sendEvent=b;var c=(0,_platform.getPerformance)();if(c&&(0,_rumCore.isFunction)(c.createObserver)){var d=[];if(_platform.appName===_platform.wechatName||_platform.appName===_platform.alipayName)d=["navigation","script","loadPackage"];else if(_platform.appName===_platform.bytedanceName)d=["launch","evaluate","resource"];else if(_platform.appName===_platform.ksName)d=["navigation","resource"];else return;this.observerHandler(c.getEntries().filter(function(a){return d.includes(a.entryType)})),this.perfObserver=c.createObserver(this.observerHandler),this.perfObserver.observe({entryTypes:d})}}},b.destroy=function(){this.perfObserver&&this.perfObserver.disconnect()},a}();
5
+ */class ApplicationCollector{constructor(){var a=this;this.name="application-collector",this.ctx=void 0,this.sendEvent=void 0,this.perfObserver=void 0,this.observerHandler=function(b){var c,d=(0,_rumCore.isArray)(b)?b:b.getEntries();if((0,_rumCore.isFunction)(_platform["default"].getLaunchOptionsSync)){var e;c=null===(e=_platform["default"].getLaunchOptionsSync())||void 0===e?void 0:e.scene}if(Array.isArray(d)&&0<d.length)for(var f,g=0;g<d.length;g++)if(f=d[g],"number"==typeof f.duration&&0<f.duration){var h=a.ctx.session.getBaseEvent(),j={...h,event_type:_rumCore.RumEventType.APPLICATION,state:"",duration:0,snapshots:JSON.stringify(f),scene:c};switch(f.name){case"appLaunch":case"app-click":j.state="cold_lunch",j.duration=f.duration;break;case"downloadPackage":case"miniprogram-package":case"download":j.state="download_package",j.duration=f.duration;break;case"evaluateScript":case"app-service":var k=f.moduleName||f.packageName;"__APP__"===k&&(j.state="evaluate_script",j.duration=f.duration);break;default:}j.state&&0<j.duration&&6e5>j.duration&&a.sendEvent(j)}}}setup(a,b){if((0,_configManager.checkEnable)(a,"application")){this.ctx=a,this.sendEvent=b;var c=(0,_platform.getPerformance)();if(c&&(0,_rumCore.isFunction)(c.createObserver)){var d=[];if(_platform.appName===_platform.wechatName||_platform.appName===_platform.alipayName)d=["navigation","script","loadPackage"];else if(_platform.appName===_platform.bytedanceName)d=["launch","evaluate","resource"];else if(_platform.appName===_platform.ksName)d=["navigation","resource"];else return;this.observerHandler(c.getEntries().filter(function(a){return d.includes(a.entryType)})),this.perfObserver=c.createObserver(this.observerHandler),this.perfObserver.observe({entryTypes:d})}}}destroy(){this.perfObserver&&this.perfObserver.disconnect()}}exports["default"]=ApplicationCollector;
@@ -1,7 +1,7 @@
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"),_hackApp=require("../../utils/hackApp"),_platform=require("../../utils/platform"),_configManager=require("../../configManager"),ExceptionCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="exception-collector",this.ctx=void 0,this.sendEvent=void 0,this.origin={consoleError:console.error},this.events={onError:null,onUnhandledRejection:null,onPageNotFound:null,onLazyLoadError:null},this.onUnhandled=function(b){b&&b.reason&&a.errorHandle(b.reason,"onUnhandledRejection")},this.onError=function(b,c){var d=b;(0,_rumCore.isString)(d)&&(0,_rumCore.isString)(c)&&(d=c),a.errorHandle(d,"onError")},this.errorHandle=function(b,c){void 0===c&&(c="");var d,e,f,g,h,i;if(b instanceof Object)d=b.name,e=b.message,f=b.filename||b.fileName,g=b.stack,h=b.lineno||b.lineNumber,i=b.colno||b.columnNumber;else if("string"==typeof b){g=b;var j=a.getErrorByStack(b);j&&(d=j.name,e=j.message)}if(d&&e&&!a.errorFilter(b)){var k=a.ctx.session.getBaseEvent();a.sendEvent((0,_extends2["default"])({},k,{event_type:_rumCore.RumEventType.EXCEPTION,source:c,type:"error",name:d,message:e,file:f,stack:g,line:h,column:i}))}}}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;if((0,_configManager.checkEnable)(this.ctx,"jsError")){// 由于 uniapp 对组件的异常进行了劫持,无法通过全局监听异常,需要排除
2
- var c=(0,_rumCore.isFunction)(_platform.sdk.onError),d=(0,_rumCore.isFunction)(_platform.sdk.onUnhandledRejection);(c||d)&&"undefined"==typeof uni?(c&&_platform.sdk.onError(this.onError),d&&_platform.sdk.onUnhandledRejection(this.onUnhandled)):Object.keys(this.events).forEach(function(c){a.events[c]=function(a){a.reason&&a.reason instanceof Error&&(a=a.reason),b.errorHandle(a,c)},(0,_hackApp.addAppListener)(c,a.events[c])})}(0,_configManager.checkEnable)(this.ctx,"consoleError")&&("swan"===_platform.appName&&Object.defineProperty(console,"error",{writable:!0}),(0,_rumCore.interceptFunction)(console,"error",function(a){b.errorHandle(a,"console.error")}))},b.getErrorByStack=/**
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_hackApp=require("../../utils/hackApp"),_platform=require("../../utils/platform"),_configManager=require("../../configManager");class ExceptionCollector{constructor(){var a=this;this.name="exception-collector",this.ctx=void 0,this.sendEvent=void 0,this.origin={consoleError:console.error},this.events={onError:null,onUnhandledRejection:null,onPageNotFound:null,onLazyLoadError:null},this.onUnhandled=function(b){b&&b.reason&&a.errorHandle(b.reason,"onUnhandledRejection")},this.onError=function(b,c){var d=b;(0,_rumCore.isString)(d)&&(0,_rumCore.isString)(c)&&(d=c),a.errorHandle(d,"onError")},this.errorHandle=function(b,c=""){var d,e,f,g,h,i;if(b instanceof Object)d=b.name,e=b.message,f=b.filename||b.fileName,g=b.stack,h=b.lineno||b.lineNumber,i=b.colno||b.columnNumber;else if("string"==typeof b){g=b;var j=a.getErrorByStack(b);j&&(d=j.name,e=j.message)}if(d&&e&&!a.errorFilter(b)){var k=a.ctx.session.getBaseEvent();a.sendEvent({...k,event_type:_rumCore.RumEventType.EXCEPTION,source:c,type:"error",name:d,message:e,file:f,stack:g,line:h,column:i})}}}setup(a,b){this.ctx=a,this.sendEvent=b,this.hackOrigin()}hackOrigin(){var a=this,b=this;if((0,_configManager.checkEnable)(this.ctx,"jsError")){// 由于 uniapp 对组件的异常进行了劫持,无法通过全局监听异常,需要排除
2
+ var c=(0,_rumCore.isFunction)(_platform.sdk.onError),d=(0,_rumCore.isFunction)(_platform.sdk.onUnhandledRejection);(c||d)&&"undefined"==typeof uni?(c&&_platform.sdk.onError(this.onError),d&&_platform.sdk.onUnhandledRejection(this.onUnhandled)):Object.keys(this.events).forEach(function(c){a.events[c]=function(a){a.reason&&a.reason instanceof Error&&(a=a.reason),b.errorHandle(a,c)},(0,_hackApp.addAppListener)(c,a.events[c])})}(0,_configManager.checkEnable)(this.ctx,"consoleError")&&("swan"===_platform.appName&&Object.defineProperty(console,"error",{writable:!0}),(0,_rumCore.interceptFunction)(console,"error",function(a){b.errorHandle(a,"console.error")}))}/**
3
3
  * 根据stack获取Error信息
4
4
  * TODO: 增加基于Stack解析filename和lineNumber的能力
5
5
  * @param stack
6
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.errorFilter=function(a){var b=this.ctx.getConfig().filters||{},c=b.exception;return!!c&&((0,_rumCore.isArray)(c)||(c=[c]),(0,_rumCore.matchList)(c,a.name,!0,a)||(0,_rumCore.matchList)(c,a.message,!0,a)||(0,_rumCore.matchList)(c,a.stack,!0,a))},b.destroy=function(){var a=this,b=this.origin;b.consoleError&&(console.error=b.consoleError),(0,_rumCore.isFunction)(_platform.sdk.offError)&&_platform.sdk.offError(this.onError),Object.keys(this.events).forEach(function(b){(0,_rumCore.isFunction)(a.events[b])&&(0,_hackApp.removeAppListener)(b,a.events[b])})},a}();
7
+ */getErrorByStack(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)}}}errorFilter(a){var b=this.ctx.getConfig().filters||{},c=b.exception;return!!c&&((0,_rumCore.isArray)(c)||(c=[c]),(0,_rumCore.matchList)(c,a.name,!0,a)||(0,_rumCore.matchList)(c,a.message,!0,a)||(0,_rumCore.matchList)(c,a.stack,!0,a))}destroy(){var a=this,b=this.origin;b.consoleError&&(console.error=b.consoleError),(0,_rumCore.isFunction)(_platform.sdk.offError)&&_platform.sdk.offError(this.onError),Object.keys(this.events).forEach(function(b){(0,_rumCore.isFunction)(a.events[b])&&(0,_hackApp.removeAppListener)(b,a.events[b])})}}exports["default"]=ExceptionCollector;
@@ -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"),_hackPage=require("../../utils/hackPage"),_hackComponent=require("../../utils/hackComponent"),_view=require("../../utils/view"),_base=require("../../utils/base"),_configManager=require("../../configManager");function _createForOfIteratorHelperLoose(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(c)return(c=c.call(a)).next.bind(c);if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0;return function(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(b,c){if(b){if("string"==typeof b)return _arrayLikeToArray(b,c);var a={}.toString.call(b).slice(8,-1);return"Object"===a&&b.constructor&&(a=b.constructor.name),"Map"===a||"Set"===a?Array.from(b):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(b,c):void 0}}function _arrayLikeToArray(b,c){(null==c||c>b.length)&&(c=b.length);for(var d=0,f=Array(c);d<c;d++)f[d]=b[d];return f}var defaultValues={maxEventCount:5,renderThreshold:50},RenderBlockCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="render-block-collector",this.ctx=void 0,this.sendEvent=void 0,this._onSetData=void 0,this.maxEventCount=void 0,this.renderThreshold=void 0,this.renderBlockReportLimitMap=new Map,this.onLoad=function(){var b,c=(0,_view.getCurPage)(),d=(0,_view.getRumViewId)(c,a.ctx.session),e=null===(b=(0,_view.getViewById)(d,a.ctx))||void 0===b?void 0:b.name,f=a.renderBlockReportLimitMap;d&&e&&!f.has(d)&&f.set(d,{count:0,name:e})},this.onSetData=function(b){return b&&(0,_rumCore.isFunction)(b.setUpdatePerformanceListener)?void b.setUpdatePerformanceListener({withDataPaths:!0},function(c){var d=c||{},e=d.updateEndTimestamp,f=d.pendingStartTimestamp,g=d.dataPaths,h=void 0===g?[]:g,i=e-f;if((0,_rumCore.isNumber)(i)&&!(i<a.renderThreshold)){var j=(0,_view.getCurPage)(),k=(0,_view.getRumViewId)(j,a.ctx.session);if(a.renderBlockReportLimitMap.has(k)){var l=a.renderBlockReportLimitMap.get(k),m=l.count,n=l.name;if(!(m>a.maxEventCount)){a.renderBlockReportLimitMap.set(k,{count:m+1,name:n});var o=a.ctx.session.getBaseEvent(),p=b.data,q=formatDataPath(h,p);a.sendEvent((0,_extends2["default"])({},o,{event_type:_rumCore.RumEventType.LONG_TASK,type:"render",duration:i,message:b.is||b.route||"",snapshots:JSON.stringify((0,_extends2["default"])({},formatSetDataOriginalPefData(c),q?{data:q}:{})),timestamp:f||(0,_base.getCurrentTime)(),source:"setData",view:{id:k,name:n}}))}}}}):void a.destroy()},this.onUnload=function(){var b=(0,_view.getCurPage)(),c=(0,_view.getRumViewId)(b,a.ctx.session);a.renderBlockReportLimitMap["delete"](c)}}var b=a.prototype;return b.setup=function(a,b){var c=a.getConfig(),d=c.longTaskConfig,e=void 0===d?{}:d;if((0,_configManager.checkEnable)(a,"longTask")){var f=this;this.ctx=a,this.sendEvent=b;var g=fixRenderBlockConfig(e),h=g.maxEventCount,i=g.renderThreshold;this.maxEventCount=h,this.renderThreshold=i,this._onSetData=function(){f.onSetData(this)},(0,_hackPage.addPageListener)("onLoad",this.onLoad),(0,_hackPage.addPageListener)("onReady",this._onSetData,!0),(0,_hackPage.addPageListener)("onUnload",this.onUnload),(0,_hackComponent.addComponentListener)("attached",this._onSetData)}},b.destroy=function(){(0,_hackPage.removePageListener)("onLoad",this.onLoad),(0,_hackPage.removePageListener)("onReady",this._onSetData,!0),(0,_hackPage.removePageListener)("onUnload",this.onUnload),(0,_hackComponent.removeComponentListener)("attached",this._onSetData)},a}(),fixRenderBlockConfig=function(a){var b=a||{},c=b.maxEventCount,d=b.renderThreshold;return(!c||!(0,_rumCore.isNumber)(c)||1>c||c>defaultValues.renderThreshold)&&(a.maxEventCount=defaultValues.maxEventCount),d&&(0,_rumCore.isNumber)(d)&&!(d<defaultValues.renderThreshold)||(a.renderThreshold=defaultValues.renderThreshold),a},formatDataPath=function(a,b){try{return a.map(function(a){for(var c,d="",e=b,f=_createForOfIteratorHelperLoose(a);!(c=f()).done;){var g,h=c.value;d+=d?"."+h:h,e=null===(g=e)||void 0===g?void 0:g[h]}return{dataKey:d,dataLength:JSON.stringify(e).length}})}catch(a){return""}},formatSetDataOriginalPefData=function(a){if(!a)return a;var b=a.updateStartTimestamp,c=a.updateEndTimestamp,d=a.pendingStartTimestamp;return a.updateEndTimestamp=c-d,a.updateStartTimestamp=b-d,a.pendingStartTimestamp=0,a};
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_hackPage=require("../../utils/hackPage"),_hackComponent=require("../../utils/hackComponent"),_view=require("../../utils/view"),_base=require("../../utils/base"),_configManager=require("../../configManager");function _createForOfIteratorHelperLoose(a,b){var c="undefined"!=typeof Symbol&&a[Symbol.iterator]||a["@@iterator"];if(c)return(c=c.call(a)).next.bind(c);if(Array.isArray(a)||(c=_unsupportedIterableToArray(a))||b&&a&&"number"==typeof a.length){c&&(a=c);var d=0;return function(){return d>=a.length?{done:!0}:{done:!1,value:a[d++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(b,c){if(b){if("string"==typeof b)return _arrayLikeToArray(b,c);var a={}.toString.call(b).slice(8,-1);return"Object"===a&&b.constructor&&(a=b.constructor.name),"Map"===a||"Set"===a?Array.from(b):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(b,c):void 0}}function _arrayLikeToArray(b,c){(null==c||c>b.length)&&(c=b.length);for(var d=0,f=Array(c);d<c;d++)f[d]=b[d];return f}var defaultValues={maxEventCount:5,renderThreshold:50};class RenderBlockCollector{constructor(){var a=this;this.name="render-block-collector",this.ctx=void 0,this.sendEvent=void 0,this._onSetData=void 0,this.maxEventCount=void 0,this.renderThreshold=void 0,this.renderBlockReportLimitMap=new Map,this.onLoad=function(){var b,c=(0,_view.getCurPage)(),d=(0,_view.getRumViewId)(c,a.ctx.session),e=null===(b=(0,_view.getViewById)(d,a.ctx))||void 0===b?void 0:b.name,f=a.renderBlockReportLimitMap;d&&e&&!f.has(d)&&f.set(d,{count:0,name:e})},this.onSetData=function(b){return b&&(0,_rumCore.isFunction)(b.setUpdatePerformanceListener)?void b.setUpdatePerformanceListener({withDataPaths:!0},function(c){var d=c||{},e=d.updateEndTimestamp,f=d.pendingStartTimestamp,g=d.dataPaths,h=void 0===g?[]:g,i=e-f;if((0,_rumCore.isNumber)(i)&&!(i<a.renderThreshold)){var j=(0,_view.getCurPage)(),k=(0,_view.getRumViewId)(j,a.ctx.session);if(a.renderBlockReportLimitMap.has(k)){var l=a.renderBlockReportLimitMap.get(k),m=l.count,n=l.name;if(!(m>a.maxEventCount)){a.renderBlockReportLimitMap.set(k,{count:m+1,name:n});var o=a.ctx.session.getBaseEvent(),p=b.data,q=formatDataPath(h,p);a.sendEvent({...o,event_type:_rumCore.RumEventType.LONG_TASK,type:"render",duration:i,message:b.is||b.route||"",snapshots:JSON.stringify({...formatSetDataOriginalPefData(c),...(q?{data:q}:{})}),timestamp:f||(0,_base.getCurrentTime)(),source:"setData",view:{id:k,name:n}})}}}}):void a.destroy()},this.onUnload=function(){var b=(0,_view.getCurPage)(),c=(0,_view.getRumViewId)(b,a.ctx.session);a.renderBlockReportLimitMap["delete"](c)}}setup(a,b){var c=a.getConfig(),d=c.longTaskConfig,e=void 0===d?{}:d;if((0,_configManager.checkEnable)(a,"longTask")){var f=this;this.ctx=a,this.sendEvent=b;var g=fixRenderBlockConfig(e),h=g.maxEventCount,i=g.renderThreshold;this.maxEventCount=h,this.renderThreshold=i,this._onSetData=function(){f.onSetData(this)},(0,_hackPage.addPageListener)("onLoad",this.onLoad),(0,_hackPage.addPageListener)("onReady",this._onSetData,!0),(0,_hackPage.addPageListener)("onUnload",this.onUnload),(0,_hackComponent.addComponentListener)("attached",this._onSetData)}}destroy(){(0,_hackPage.removePageListener)("onLoad",this.onLoad),(0,_hackPage.removePageListener)("onReady",this._onSetData,!0),(0,_hackPage.removePageListener)("onUnload",this.onUnload),(0,_hackComponent.removeComponentListener)("attached",this._onSetData)}}exports["default"]=RenderBlockCollector;var fixRenderBlockConfig=function(a){var b=a||{},c=b.maxEventCount,d=b.renderThreshold;return(!c||!(0,_rumCore.isNumber)(c)||1>c||c>defaultValues.renderThreshold)&&(a.maxEventCount=defaultValues.maxEventCount),d&&(0,_rumCore.isNumber)(d)&&!(d<defaultValues.renderThreshold)||(a.renderThreshold=defaultValues.renderThreshold),a},formatDataPath=function(a,b){try{return a.map(function(a){for(var c,d="",e=b,f=_createForOfIteratorHelperLoose(a);!(c=f()).done;){var g,h=c.value;d+=d?"."+h:h,e=null===(g=e)||void 0===g?void 0:g[h]}return{dataKey:d,dataLength:JSON.stringify(e).length}})}catch(a){return""}},formatSetDataOriginalPefData=function(a){if(!a)return a;var b=a.updateStartTimestamp,c=a.updateEndTimestamp,d=a.pendingStartTimestamp;return a.updateEndTimestamp=c-d,a.updateStartTimestamp=b-d,a.pendingStartTimestamp=0,a};
@@ -13,6 +13,7 @@ export default class ApiCollector implements ICollector {
13
13
  hackRequest(key: any): void;
14
14
  rebuildRequestOptions(options: Options): Options;
15
15
  sendApi: (apiAttr: any, resp: any, options: any) => Promise<void>;
16
+ private getSseConfig;
16
17
  private getResourceName;
17
18
  /**
18
19
  * 解析小程序的性能数据
@@ -1,13 +1,19 @@
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=_interopRequireWildcard(require("../../utils/platform")),_url=require("../../utils/url"),_base=require("../../utils/base"),_view=require("../../utils/view"),_api=require("../../utils/api"),_configManager=require("../../configManager");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 ApiCollector=exports["default"]=/*#__PURE__*/function(){function a(){var a=this;this.name="api-collector",this.ctx=void 0,this.sendEvent=void 0,this.origin={request:_platform["default"].request,httpRequest:_platform["default"].httpRequest},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,q,r,s,t;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,m&&(n=a.parseProfile(m),o=JSON.stringify(m)),!(0,_rumCore.isFunction)(g)){e.next=4;break}return e.prev=1,0===b.success&&(p=new Error("request error")),e.next=2,g(d,c,p);case 2:q=e.sent,b=(0,_extends2["default"])({},b,(0,_api.reviseApiAttr)(q)),e.next=4;break;case 3:e.prev=3,t=e["catch"](1);case 4:if(r=a.ctx.session.getBaseEvent(),s=(0,_extends2["default"])({},r,{event_type:_rumCore.RumEventType.RESOURCE,type:"api",status_code:i||h,message:k||j||l,duration:(0,_base.getCurrentTime)()-b.timestamp},b,n,{timing_data:o}),!(s.duration>_rumCore.ONE_HOUR)){e.next=5;break}return e.abrupt("return");case 5:a.sendEvent(s);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=function(a,b){var c=this;(0,_configManager.checkEnable)(a,"api")&&(this.ctx=a,this.sendEvent=b,Object.keys(this.origin).forEach(function(a){return c.hackRequest(a)}))},b.injectTracing=function(a,b){var c,d=this.ctx.session,e=this.ctx.getConfig(),f=e.tracing,g=e.pid,h=e.version,i=void 0===h?"1.0.0":h,j=(0,_rumCore.parseTracingOptions)(f),k=j.enable,l=j.sample,m=j.propagatorTypes,n=j.allowedUrls,o=j.tracestate,p=j.baggage;if(k){var q=(0,_rumCore.find)(n,function(b){return(0,_rumCore.matchList)([b.match],a.url)});if(q){var r=q.propagatorTypes;0===r.length&&(r=m);// skywalking
2
- var s=!1;r.includes("sw8")&&(r=["sw8"],s=!0);var t=s?(0,_rumCore.generateGUID)():(0,_rumCore.generateTraceId)(),u=s?(0,_rumCore.generateGUID)():(0,_rumCore.generateSpanId)(),v=(0,_rumCore.performDraw)(l),w=d.getUserId(),x=d.getSessionId(),y=void 0===o||o?"rum=v2&miniapp&"+g+"&"+x+"&"+w:void 0,z=void 0!==p&&p?"rum=v2,appType=miniapp,pid="+g+",sid="+x+",uid="+w:void 0,A=(0,_rumCore.makeTracingHeaders)(t,u,v,r,{tracestate:y,baggage:z,appId:g,appVersion:i,viewName:null===(c=a.view)||void 0===c?void 0:c.name,host:"miniapp_"+_platform.appName});v&&(a.trace_id=t,a.trace_data=JSON.stringify({spanId:u,sample:l,sampled:v,headers:A})),b(A)}}},b.hackRequest=function(a){var b=this;(0,_rumCore.isFunction)(_platform["default"][a])&&Object.defineProperty(_platform["default"],a,{configurable:!0,enumerable:!0,writable:!0,value:function(){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(a){var b=this,c=a.url,d=a.success,e=a.fail,f=(0,_base.getCurrentTime)();// SDK自己的请求不监控 & 过滤不需要监控的url
3
- if((0,_url.isEndpoint)(this.ctx,c)||b.filter(c))return a;var g=(0,_extends2["default"])({},a),h={view:(0,_view.getCurView)(this.ctx),timestamp:f,url:c,name:this.getResourceName(c),method:a.method||"GET"};return this.injectTracing(h,function(a){var b=[];// 已存在header配置情况
4
- ["headers","header"].forEach(function(c){c in g&&(0,_rumCore.isObject)(g[c])&&(g[c]=(0,_extends2["default"])({},g[c],a),b.push(c))}),0===b.length&&(g[_platform.HEADER_KEY]=(0,_extends2["default"])({},g[_platform.HEADER_KEY],a))}),g.success=function(){h.success=1;for(var a=arguments.length,c=Array(a),e=0;e<a;e++)c[e]=arguments[e];b.sendApi(h,c[0],g),d&&d.apply(this,c)},g.fail=function(){h.success=0;for(var a=arguments.length,c=Array(a),d=0;d<a;d++)c[d]=arguments[d];b.sendApi(h,c[0],g),e&&e.apply(this,c)},g},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}/**
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=_interopRequireWildcard(require("../../utils/platform")),_url=require("../../utils/url"),_base=require("../../utils/base"),_view=require("../../utils/view"),_api=require("../../utils/api"),_configManager=require("../../configManager"),_sse=require("../../utils/sse");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)}class ApiCollector{constructor(){var a=this;this.name="api-collector",this.ctx=void 0,this.sendEvent=void 0,this.origin={request:_platform["default"].request,httpRequest:_platform["default"].httpRequest},this.sendApi=async function(b,c,d){var e,f,g=a.ctx.getConfig(),h=g.evaluateApi,i=c.statusCode,j=c.status,k=c.errMsg,l=c.errorMessage,m=c.message,n=c.profile;if(n&&(e=a.parseProfile(n),f=JSON.stringify(n)),(0,_rumCore.isFunction)(h))try{var o;0===b.success&&(o=new Error("request error"));var p=await h(d,c,o);b={...b,...(0,_api.reviseApiAttr)(p)}}catch(a){//
2
+ }var q=a.ctx.session.getBaseEvent(),r={...q,event_type:_rumCore.RumEventType.RESOURCE,type:"api",status_code:j||i,message:l||k||m,duration:(0,_base.getCurrentTime)()-b.timestamp,...b,...e,timing_data:f};// 对超大的耗时进行过滤
3
+ r.duration>_rumCore.ONE_HOUR||a.sendEvent(r)}}setup(a,b){var c=this;(0,_configManager.checkEnable)(a,"api")&&(this.ctx=a,this.sendEvent=b,Object.keys(this.origin).forEach(function(a){return c.hackRequest(a)}))}injectTracing(a,b){var c,d=this.ctx.session,e=this.ctx.getConfig(),f=e.tracing,g=e.pid,h=e.version,i=void 0===h?"1.0.0":h,j=(0,_rumCore.parseTracingOptions)(f),k=j.enable,l=j.sample,m=j.propagatorTypes,n=j.allowedUrls,o=j.tracestate,p=j.baggage;if(k){var q=(0,_rumCore.find)(n,function(b){return(0,_rumCore.matchList)([b.match],a.url)});if(q){var r=q.propagatorTypes;0===r.length&&(r=m);// skywalking
4
+ var s=!1;r.includes("sw8")&&(r=["sw8"],s=!0);var t=s?(0,_rumCore.generateGUID)():(0,_rumCore.generateTraceId)(),u=s?(0,_rumCore.generateGUID)():(0,_rumCore.generateSpanId)(),v=(0,_rumCore.performDraw)(l),w=d.getUserId(),x=d.getSessionId(),y=!(void 0!==o)||o?"rum=v2&miniapp&"+g+"&"+x+"&"+w:void 0,z=void 0!==p&&p?"rum=v2,appType=miniapp,pid="+g+",sid="+x+",uid="+w:void 0,A=(0,_rumCore.makeTracingHeaders)(t,u,v,r,{tracestate:y,baggage:z,appId:g,appVersion:i,viewName:null===(c=a.view)||void 0===c?void 0:c.name,host:"miniapp_"+_platform.appName});v&&(a.trace_id=t,a.trace_data=JSON.stringify({spanId:u,sample:l,sampled:v,headers:A})),b(A)}}}hackRequest(a){var b=this;(0,_rumCore.isFunction)(_platform["default"][a])&&Object.defineProperty(_platform["default"],a,{configurable:!0,enumerable:!0,writable:!0,value:function(...c){c[0]=b.rebuildRequestOptions(c[0]);var d=c[0].__onRequestTask;d&&delete c[0].__onRequestTask;var e=b.origin[a].apply(this,c);return d&&e&&d(e),e}})}rebuildRequestOptions(a){var b=this,c=a.url,d=a.success,e=a.fail,f=(0,_base.getCurrentTime)();// SDK自己的请求不监控 & 过滤不需要监控的url
5
+ if((0,_url.isEndpoint)(this.ctx,c)||b.filter(c))return a;var g={...a},h={view:(0,_view.getCurView)(this.ctx),timestamp:f,url:c,name:this.getResourceName(c),method:a.method||"GET"};this.injectTracing(h,function(a){var b=[];// 已存在header配置情况
6
+ ["headers","header"].forEach(function(c){c in g&&(0,_rumCore.isObject)(g[c])&&(g[c]={...g[c],...a},b.push(c))}),0===b.length&&(g[_platform.HEADER_KEY]={...g[_platform.HEADER_KEY],...a})});// SSE 流式监控逻辑
7
+ var i=this.getSseConfig(),j=!i||!1!==i.enabled,k=(0,_sse.isSseSupported)();if(j&&k&&(0,_sse.isSseRequest)(a)){g.enableChunked=!0;var l=new _sse.SseMetricsTracker;l.start();var m="",n=null,o=i&&i.timeout||6e4,p=function(a){n&&clearTimeout(n),n=setTimeout(function(){h.sse||(h.sse=l.finish("timeout")),a.abort()},o)};// 通过 __onRequestTask 回调在 hackRequest 中绑定 onChunkReceived
8
+ g.__onRequestTask=function(a){p(a),a&&(0,_rumCore.isFunction)(a.onChunkReceived)&&a.onChunkReceived(function(b){p(a);var c=(0,_sse.arrayBufferToString)(b.data),d=(0,_sse.parseSseChunk)(c,m);m=d.remaining;for(var e=0;e<d.events.length;e++)l.onMessage()})},g.success=function(...a){n&&clearTimeout(n),h.sse||(h.sse=l.finish("success")),h.success=1,b.sendApi(h,a[0],g),d&&d.apply(this,a)},g.fail=function(...a){if(n&&clearTimeout(n),!h.sse){// 根据 errMsg 区分 abort/timeout/error
9
+ var c=a[0]&&a[0].errMsg||"",d="error";-1===c.indexOf("abort")?-1!==c.indexOf("timeout")&&(d="timeout"):d="abort",h.sse=l.finish(d)}h.success=0,b.sendApi(h,a[0],g),e&&e.apply(this,a)}}else// 非 SSE 请求走原有逻辑
10
+ g.success=function(...a){h.success=1,b.sendApi(h,a[0],g),d&&d.apply(this,a)},g.fail=function(...a){h.success=0,b.sendApi(h,a[0],g),e&&e.apply(this,a)};return g}getSseConfig(){var a=this.ctx.getConfig(),b=a.collectors&&a.collectors.api;return(0,_rumCore.isObject)(b)&&b.sse?b.sse:void 0}getResourceName(a){var b,c=this.ctx.getConfig(),d=c.parseResourceName;return b=(0,_rumCore.isFunction)(d)?d(a):(0,_url.getPathByURL)(a),b}/**
5
11
  * 解析小程序的性能数据
6
12
  * 参考:https://developers.weixin.qq.com/miniprogram/dev/api/network/request/wx.request.html
7
13
  * https://opendocs.alipay.com/mini/api/owycmh?pathHash=c91640f8
8
14
  * TODO:抖音 https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/network/http/tt-request/#Profile-%E7%B1%BB%E5%9E%8B%E8%AF%B4%E6%98%8E
9
15
  * @param profile
10
16
  * @returns
11
- */,b.parseProfile=function(a){function b(b,c){b in a&&0<a[b]&&(d[c]=a[b])}// 以下针对类alipay小程序的情况
12
- function c(b,c,e){if(b in a&&b in a){var f=a[c]-a[b];0<f&&(d[e]=f)}}// 以下针对wx小程序相对标准的情况
13
- var d={};return b("domainLookup","dns_duration"),b("connect","connect_duration"),b("SSLconnection","ssl_duration"),b("Waiting","first_byte_duration"),b("totalTime","duration"),b("receivedBytedCount","size"),c("connectStart","connectEnd","connect_duration"),c("SSLconnectionStart","SSLconnectionEnd","ssl_duration"),c("domainLookUpStart","domainLookUpEnd","dns_duration"),c("redirectStart","redirectEnd","redirect_duration"),c("responseStart","requestStart","first_byte_duration"),c("responseStart","requestEnd","download_duration"),c("redirectStart","responseEnd","duration"),Object.keys(d).forEach(function(a){d[a]>_rumCore.ONE_HOUR&&delete d[a]}),d},b.filter=function(a){var b,c,d=this.ctx.getConfig(),e=(null===d||void 0===d||null===(b=d.filters)||void 0===b?void 0:b.resource)||[];(0,_rumCore.isArray)(e)||(e=[e]);var f=null===d||void 0===d||null===(c=d.collectors)||void 0===c?void 0:c.api;return(0,_rumCore.isObject)(f)&&(0,_rumCore.isArray)(f.filters)&&(e=[].concat(e,f.filters)),(0,_rumCore.urlMatch)(a,e)},a}();
17
+ */parseProfile(a){function b(b,c){b in a&&0<a[b]&&(d[c]=a[b])}// 以下针对类alipay小程序的情况
18
+ function c(b,c,e){if(b in a&&c in a){var f=a[c]-a[b];0<f&&(d[e]=f)}}// 以下针对wx小程序相对标准的情况
19
+ var d={};return b("domainLookup","dns_duration"),b("connect","connect_duration"),b("SSLconnection","ssl_duration"),b("Waiting","first_byte_duration"),b("totalTime","duration"),b("receivedBytedCount","size"),c("connectStart","connectEnd","connect_duration"),c("SSLconnectionStart","SSLconnectionEnd","ssl_duration"),c("domainLookUpStart","domainLookUpEnd","dns_duration"),c("redirectStart","redirectEnd","redirect_duration"),c("responseStart","requestStart","first_byte_duration"),c("responseStart","requestEnd","download_duration"),c("redirectStart","responseEnd","duration"),Object.keys(d).forEach(function(a){d[a]>_rumCore.ONE_HOUR&&delete d[a]}),d}filter(a){var b,c,d=this.ctx.getConfig(),e=(null===d||void 0===d||null===(b=d.filters)||void 0===b?void 0:b.resource)||[];(0,_rumCore.isArray)(e)||(e=[e]);var f=null===d||void 0===d||null===(c=d.collectors)||void 0===c?void 0:c.api;return(0,_rumCore.isObject)(f)&&(0,_rumCore.isArray)(f.filters)&&(e=[...e,...f.filters]),(0,_rumCore.urlMatch)(a,e)}}exports["default"]=ApiCollector;
@@ -1,13 +1,18 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=require("../../utils/platform"),_configManager=require("../../configManager"),performance=(0,_platform.getPerformance)(),PerfCollector=exports["default"]=/*#__PURE__*/function(){function a(){this.name="static-resource-collector",this.ctx=void 0,this.sendEvent=void 0,this.perfObserver=void 0,this.resourceHandler=function(a){(0,_rumCore.isArray)(a)?a:a.getEntries();// TODO
2
- }}var b=a.prototype;return b.setup=// perfMap: PerfMap;
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=require("../../utils/platform"),_configManager=require("../../configManager"),performance=(0,_platform.getPerformance)();/*
2
+ * 参考资料:
3
+ * https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html
4
+ * https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/foundation/performance/tt-performance/performance-entry
5
+ * https://opendocs.alipay.com/mini/api/performanceentry
6
+ * */class PerfCollector{constructor(){this.name="static-resource-collector",this.ctx=void 0,this.sendEvent=void 0,this.perfObserver=void 0,this.resourceHandler=function(a){(0,_rumCore.isArray)(a)?a:a.getEntries();// TODO
7
+ }}// perfMap: PerfMap;
3
8
  //
4
9
  // currentViewId = '';
5
10
  //
6
11
  // pageIdToViewId: PerfMap = {}; // 仅微信生效
7
12
  //
8
13
  // onUnload: Function;
9
- function(a,b){if((0,_configManager.checkEnable)(a,"staticResource")&&(this.ctx=a,this.sendEvent=b,performance&&performance.getEntries)){// this.perfMap = {};
10
- var c;if("wechat"===_platform.appName||"alipay"===_platform.appName)c=["navigation","render"];else if("bytedance"===_platform.appName)c=["launch","paint","navigation"];else return;this.resourceHandler(performance.getEntries().filter(function(a){return c.includes(a.entryType)})),this.perfObserver=performance.createObserver(this.resourceHandler),this.perfObserver.observe({entryTypes:c})}},b.destroy=// delayHandler = (ev) => {
14
+ setup(a,b){if((0,_configManager.checkEnable)(a,"staticResource")&&(this.ctx=a,this.sendEvent=b,performance&&performance.getEntries)){// this.perfMap = {};
15
+ var c;if("wechat"===_platform.appName||"alipay"===_platform.appName)c=["navigation","render"];else if("bytedance"===_platform.appName)c=["launch","paint","navigation"];else return;this.resourceHandler(performance.getEntries().filter(function(a){return c.includes(a.entryType)})),this.perfObserver=performance.createObserver(this.resourceHandler),this.perfObserver.observe({entryTypes:c})}}// delayHandler = (ev) => {
11
16
  // const entries = isArray(ev) ? ev : ev.getEntries();
12
17
  // if (!Array.isArray(entries) || entries.length === 0) return;
13
18
  // setTimeout(() => {
@@ -140,9 +145,4 @@ var c;if("wechat"===_platform.appName||"alipay"===_platform.appName)c=["navigati
140
145
  // ...measures
141
146
  // })
142
147
  // }
143
- function(){this.perfObserver&&this.perfObserver.disconnect()},a}();/*
144
- * 参考资料:
145
- * https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html
146
- * https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/foundation/performance/tt-performance/performance-entry
147
- * https://opendocs.alipay.com/mini/api/performanceentry
148
- * */
148
+ destroy(){this.perfObserver&&this.perfObserver.disconnect()}}exports["default"]=PerfCollector;
@@ -1,9 +1,10 @@
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=require("../../utils/platform"),_view=require("../../utils/view"),_hackPage=require("../../utils/hackPage"),_base=require("../../utils/base"),_constants=require("../../utils/constants"),_configManager=require("../../configManager"),performance=(0,_platform.getPerformance)(),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.perfCache=void 0,this.currentViewId="",this.pageIdToViewId={},this.onUnload=void 0,this.delayHandler=function(b){var c=(0,_rumCore.isArray)(b)?b:b.getEntries();Array.isArray(c)&&0!==c.length&&setTimeout(function(){c.forEach(function(b){if(b.pageId){// 仅微信生效
2
- var c=a.pageIdToViewId["pageId:"+b.pageId];if(c&&a.perfCache[c])return void a.perfCache[c].entries.push(b)}if(a.currentViewId){var d=a.perfCache[a.currentViewId];if(d){var e=b.path;e||"navigation"!==b.entryType||(e=b.name),d.path!==e||d.entries.push(b)}}})},_constants.COMMON_DELAY)},this.onLoad=function(){var b=(0,_view.getCurPage)(),c=(0,_view.getCurView)(a.ctx),d=(0,_view.getRumViewId)(b,a.ctx.session),e=(0,_rumCore.isFunction)(b.getPageId)?b.getPageId():null;d in a.perfCache||(a.currentViewId=d,e&&(a.pageIdToViewId[e.toString()]=d),a.perfCache[d]={view:c,path:b.is||b.route,pageId:e,entries:[],timer:setTimeout(function(){a.flushByViewId(d)},_rumCore.ONE_MINUTE),loadTime:(0,_base.getCurrentTime)()})},this.onReady=function(){var b=a.currentViewId;if(b){var c=a.perfCache[b];c&&(c.dom_complete=(0,_base.getCurrentTime)()-c.loadTime)}},this.flushByViewId=function(b){var c=a.perfCache[b];c&&(a.perfCache[b]=!1,clearTimeout(c.timer),c.entries.length&&a.parsePerf(c))}}var b=a.prototype;return b.setup=function(a,b){if((0,_configManager.checkEnable)(a,"perf")){var c=this;if(this.ctx=a,this.sendEvent=b,performance&&performance.getEntries){this.perfCache={};// appType_1 是针对微信和支付宝的情况,该类型的Performance对象支持 pageId,且性能数据类型为render
3
- var d,e=_platform.appName===_platform.wechatName||_platform.appName===_platform.alipayName;if(e)d=["navigation","render"];else if(_platform.appName===_platform.bytedanceName)d=["launch","paint","navigation"];else if(_platform.appName===_platform.ksName)d=["paint","navigation"];else return;this.delayHandler(performance.getEntries().filter(function(a){return d.includes(a.entryType)})),this.perfObserver=performance.createObserver(this.delayHandler),this.perfObserver.observe({entryTypes:d}),this.onUnload=function(){if(!e){// 不支持pageId的情况下,无法直接关联性能和页面的对应关系,需要Hide时结束
4
- var b=(0,_view.getRumViewId)(this,a.session);b&&c.flushByViewId(b)}},(0,_hackPage.addPageListener)("onLoad",this.onLoad),(0,_hackPage.addPageListener)("onReady",this.onReady),(0,_hackPage.addPageListener)("onHide",this.onUnload),(0,_hackPage.addPageListener)("onUnload",this.onUnload)}}},b.parsePerf=function(a){var b,c,d,e,f,g=a.entries,h=a.view,i=a.dom_complete;g.forEach(function(a){if(a.startTime)switch(a.name){case"firstRender":case"first-render":c=a;break;case"firstPaint":case"first-paint":d=a;break;case"firstContentfulPaint":case"first-contentful-paint":e=a;break;case"largestContentfulPaint":case"largest-contentful-paint":if(f&&f.startTime>a.startTime)break;f=a;break;default:"navigation"===a.entryType&&(b=a)}});var j={};b&&(c&&(j.first_render=c.duration?c.duration:c.startTime-b.startTime),d&&(j.first_paint=d.startTime-b.startTime),e&&(j.first_contentful_paint=e.startTime-b.startTime),f&&(j.largest_contentful_paint=f.startTime-b.startTime),i&&(j.dom_complete=i),this.sendPerf(j,{view:h,timestamp:b.startTime,timing_data:JSON.stringify(b)}))},b.sendPerf=function(a,b){for(var c=Object.keys(a),d=0;d<c.length;d++){var e=c[d],f=a[e];(0>=f||isNaN(f)||6e5<f)&&delete a[e]}if(Object.keys(a)){var g=this.ctx.session.getBaseEvent();this.sendEvent((0,_extends2["default"])({},g,{event_type:_rumCore.RumEventType.VIEW,type:"perf"},b,a))}},b.destroy=function(){this.perfObserver&&this.perfObserver.disconnect(),(0,_hackPage.removePageListener)("onLoad",this.onLoad),(0,_hackPage.removePageListener)("onReady",this.onReady),(0,_hackPage.removePageListener)("onHide",this.onUnload),(0,_hackPage.removePageListener)("onUnload",this.onUnload)},a}();/*
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=require("../../utils/platform"),_view=require("../../utils/view"),_hackPage=require("../../utils/hackPage"),_base=require("../../utils/base"),_constants=require("../../utils/constants"),_configManager=require("../../configManager"),performance=(0,_platform.getPerformance)();/*
5
2
  * 参考资料:
6
3
  * https://developers.weixin.qq.com/miniprogram/dev/api/base/performance/PerformanceEntry.html
7
4
  * https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/foundation/performance/tt-performance/performance-entry
8
5
  * https://opendocs.alipay.com/mini/api/performanceentry
9
- * */
6
+ * */class PerfCollector{constructor(){var a=this;// 仅微信生效
7
+ this.name="perf-collector",this.ctx=void 0,this.sendEvent=void 0,this.perfObserver=void 0,this.perfCache=void 0,this.currentViewId="",this.pageIdToViewId={},this.onUnload=void 0,this.delayHandler=function(b){var c=(0,_rumCore.isArray)(b)?b:b.getEntries();Array.isArray(c)&&0!==c.length&&setTimeout(function(){c.forEach(function(b){if(b.pageId){// 仅微信生效
8
+ var c=a.pageIdToViewId["pageId:"+b.pageId];if(c&&a.perfCache[c])return void a.perfCache[c].entries.push(b)}if(a.currentViewId){var d=a.perfCache[a.currentViewId];if(d){var e=b.path;e||"navigation"!==b.entryType||(e=b.name),d.path!==e||d.entries.push(b)}}})},_constants.COMMON_DELAY)},this.onLoad=function(){var b=(0,_view.getCurPage)(),c=(0,_view.getCurView)(a.ctx),d=(0,_view.getRumViewId)(b,a.ctx.session),e=(0,_rumCore.isFunction)(b.getPageId)?b.getPageId():null;d in a.perfCache||(a.currentViewId=d,e&&(a.pageIdToViewId[e.toString()]=d),a.perfCache[d]={view:c,path:b.is||b.route,pageId:e,entries:[],timer:setTimeout(function(){a.flushByViewId(d)},_rumCore.ONE_MINUTE),loadTime:(0,_base.getCurrentTime)()})},this.onReady=function(){var b=a.currentViewId;if(b){var c=a.perfCache[b];c&&(c.dom_complete=(0,_base.getCurrentTime)()-c.loadTime)}},this.flushByViewId=function(b){var c=a.perfCache[b];c&&(a.perfCache[b]=!1,clearTimeout(c.timer),c.entries.length&&a.parsePerf(c))}}setup(a,b){if((0,_configManager.checkEnable)(a,"perf")){var c=this;if(this.ctx=a,this.sendEvent=b,performance&&performance.getEntries){this.perfCache={};// appType_1 是针对微信和支付宝的情况,该类型的Performance对象支持 pageId,且性能数据类型为render
9
+ var d,e=_platform.appName===_platform.wechatName||_platform.appName===_platform.alipayName;if(e)d=["navigation","render"];else if(_platform.appName===_platform.bytedanceName)d=["launch","paint","navigation"];else if(_platform.appName===_platform.ksName)d=["paint","navigation"];else return;this.delayHandler(performance.getEntries().filter(function(a){return d.includes(a.entryType)})),this.perfObserver=performance.createObserver(this.delayHandler),this.perfObserver.observe({entryTypes:d}),this.onUnload=function(){if(!e){// 不支持pageId的情况下,无法直接关联性能和页面的对应关系,需要Hide时结束
10
+ var b=(0,_view.getRumViewId)(this,a.session);b&&c.flushByViewId(b)}},(0,_hackPage.addPageListener)("onLoad",this.onLoad),(0,_hackPage.addPageListener)("onReady",this.onReady),(0,_hackPage.addPageListener)("onHide",this.onUnload),(0,_hackPage.addPageListener)("onUnload",this.onUnload)}}}parsePerf(a){var b,c,d,e,f,g=a.entries,h=a.view,i=a.dom_complete;g.forEach(function(a){if(a.startTime)switch(a.name){case"firstRender":case"first-render":c=a;break;case"firstPaint":case"first-paint":d=a;break;case"firstContentfulPaint":case"first-contentful-paint":e=a;break;case"largestContentfulPaint":case"largest-contentful-paint":if(f&&f.startTime>a.startTime)break;f=a;break;default:"navigation"===a.entryType&&(b=a)}});var j={};b&&(c&&(j.first_render=c.duration?c.duration:c.startTime-b.startTime),d&&(j.first_paint=d.startTime-b.startTime),e&&(j.first_contentful_paint=e.startTime-b.startTime),f&&(j.largest_contentful_paint=f.startTime-b.startTime),i&&(j.dom_complete=i),this.sendPerf(j,{view:h,timestamp:b.startTime,timing_data:JSON.stringify(b)}))}sendPerf(a,b){for(var c=Object.keys(a),d=0;d<c.length;d++){var e=c[d],f=a[e];(0>=f||isNaN(f)||6e5<f)&&delete a[e]}if(0!==Object.keys(a).length){var g=this.ctx.session.getBaseEvent();this.sendEvent({...g,event_type:_rumCore.RumEventType.VIEW,type:"perf",...b,...a})}}destroy(){this.perfObserver&&this.perfObserver.disconnect(),(0,_hackPage.removePageListener)("onLoad",this.onLoad),(0,_hackPage.removePageListener)("onReady",this.onReady),(0,_hackPage.removePageListener)("onHide",this.onUnload),(0,_hackPage.removePageListener)("onUnload",this.onUnload)}}exports["default"]=PerfCollector;
@@ -1,2 +1,2 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_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.onUnload=function(){var b=(0,_view.getCurView)(a.ctx);b&&b.id&&a.ctx.removeView(b.id)},this.sendPv=function(b){var c=(0,_view.getCurPage)();if(c){var d=c.route,e=c.options,f=(0,_view.getRumViewId)(c);if(!(a.prevPage&&f===a.prevPage.viewId))// 路由没有发生变化,不发送
2
- {var g=f?"route_back":"initial_load";f=(0,_view.getRumViewId)(c,a.ctx.session),a.prevPage={route:d,viewId:f};var h=a.getViewName(d);a.ctx.addView({id:f,name:h});var i={};e||((0,_rumCore.isFunction)(c.getLoadOptions)?e=c.getLoadOptions():(0,_rumCore.isObject)(b)&&(e=b)),e&&Object.keys(e).forEach(function(a){var b=e[a];if((0,_rumCore.isString)(b))try{i[a]=decodeURIComponent(b)}catch(c){i[a]=b}else i[a]=b}),a.sendEvent({event_type:_rumCore.RumEventType.VIEW,type:"pv",url:d,name:h,loading_type:g,snapshots:JSON.stringify(i).substring(0,5e3)})}}}}var b=a.prototype;return b.setup=function(a,b){this.ctx=a,this.sendEvent=b,this.sendPv(),(0,_hackPage.addPageListener)("onLoad",this.sendPv),(0,_hackPage.addPageListener)("onUnload",this.onUnload)},b.getViewName=function(a){var b=this.ctx.getConfig(),c=b.parseViewName,d=a;return(0,_rumCore.isFunction)(c)&&(d=c(a)),d},b.destroy=function(){(0,_hackPage.removePageListener)("onLoad",this.sendPv),(0,_hackPage.removePageListener)("onUnload",this.onUnload)},a}();
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_view=require("../../utils/view"),_hackPage=require("../../utils/hackPage");class PvCollector{constructor(){var a=this;this.name="pv-collector",this.ctx=void 0,this.sendEvent=void 0,this.prevPage=void 0,this.onUnload=function(){var b=(0,_view.getCurView)(a.ctx);b&&b.id&&a.ctx.removeView(b.id)},this.sendPv=function(b){var c=(0,_view.getCurPage)();if(c){var d=c.route,e=c.options,f=(0,_view.getRumViewId)(c);if(!(a.prevPage&&f===a.prevPage.viewId))// 路由没有发生变化,不发送
2
+ {var g=f?"route_back":"initial_load";f=(0,_view.getRumViewId)(c,a.ctx.session),a.prevPage={route:d,viewId:f};var h=a.getViewName(d);a.ctx.addView({id:f,name:h});var i={};e||((0,_rumCore.isFunction)(c.getLoadOptions)?e=c.getLoadOptions():(0,_rumCore.isObject)(b)&&(e=b)),e&&Object.keys(e).forEach(function(a){var b=e[a];if((0,_rumCore.isString)(b))try{i[a]=decodeURIComponent(b)}catch(c){i[a]=b}else i[a]=b}),a.sendEvent({event_type:_rumCore.RumEventType.VIEW,type:"pv",url:d,name:h,loading_type:g,snapshots:JSON.stringify(i).substring(0,5e3)})}}}}setup(a,b){this.ctx=a,this.sendEvent=b,this.sendPv(),(0,_hackPage.addPageListener)("onLoad",this.sendPv),(0,_hackPage.addPageListener)("onUnload",this.onUnload)}getViewName(a){var b=this.ctx.getConfig(),c=b.parseViewName,d=a;return(0,_rumCore.isFunction)(c)&&(d=c(a)),d}destroy(){(0,_hackPage.removePageListener)("onLoad",this.sendPv),(0,_hackPage.removePageListener)("onUnload",this.onUnload)}}exports["default"]=PvCollector;
@@ -1,6 +1,7 @@
1
- "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports.checkEnable=checkEnable,exports["default"]=void 0;var _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")),_extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends")),_rumCore=require("@arms/rum-core"),_platform=_interopRequireWildcard(require("./utils/platform")),_url=require("./utils/url");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 LOCAL_STORE_CONFIG_KEY="arms_rum2_local_config";function parseV2Config(a){var b,c={};c.enable=null===(b=a.enable)||void 0===b||b;// 处理Session配置
2
- var d=a.session;if(d){var e,f,g={};g.sampleRate=(null!==(e=d.sampling)&&void 0!==e?e:100)/100,g.storage=null!==(f=d.storage)&&void 0!==f?f:"auto",c.sessionConfig=g}// 处理上报配置
1
+ "use strict";exports.__esModule=!0,exports.checkEnable=checkEnable,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=_interopRequireWildcard(require("./utils/platform")),_url=require("./utils/url");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 LOCAL_STORE_CONFIG_KEY="arms_rum2_local_config";function parseV2Config(a){var b,c={};c.enable=null===(b=a.enable)||void 0===b||b;// 处理Session配置
2
+ var d=a.session;if(d){var e,f,g={};g.sampling=null!==(e=d.sampling)&&void 0!==e?e:100,g.storage=null!==(f=d.storage)&&void 0!==f?f:"auto",c.sessionConfig=g}// 处理上报配置
3
3
  var h=a.report;if(h){var i={};i.flushTime=h.flush_interval,i.maxEventCount=h.max_batch_count,c.reportConfig=i}// 处理链路追踪
4
- var j=a.tracing;if(j){var k,l={};l.enable=null===(k=j.enable)||void 0===k||k;var m=[];(j.rules||[]).forEach(function(a){var b={enable:a.enable,tracestate:a.tracestate,baggage:a.baggage,propagatorTypes:a.protocols,sampling:a.sampling};return"{location.origin}"===a.match?void(l=(0,_extends2["default"])({},l,b)):void(b.match=(0,_rumCore.parseRule2Match)(a),m.push(b))}),l.allowedUrls=m,c.tracing=l}// 处理采集器
5
- var n=a.collectors;if(n&&0<Object.keys(n).length){var o={};n.forEach(function(a){var b=a.name;if(b){var c=(0,_extends2["default"])({},a),d=a.filters;0<(null===d||void 0===d?void 0:d.length)&&(c.filters=c.filters.map(function(a){return(0,_rumCore.parseRule2Match)(a)})),o[b]=c}}),c.collectors=(0,_extends2["default"])({},c.collectors,o)}return c}var MiniappConfigManager=exports["default"]=/*#__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="v2",b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.fetchRemoteCfg=/*#__PURE__*/function(){function a(){return b.apply(this,arguments)}var b=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function a(){var b;return _regenerator["default"].wrap(function(a){for(;;)switch(a.prev=a.next){case 0:if(b=this.getRemoteConfigUrl(),b){a.next=1;break}return a.abrupt("return");case 1:if(!b.includes(".rum.aliyuncs.com")){a.next=2;break}return this.version="v1",a.abrupt("return",this.getV1Config(b));case 2:return a.abrupt("return",this.getV2Config(b));case 3:case"end":return a.stop()}},a,this)}));return a}(),c.getV1Config=/*#__PURE__*/function(){function a(){return b.apply(this,arguments)}var b=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function b(a){return _regenerator["default"].wrap(function(b){for(;;)switch(b.prev=b.next){case 0:return b.abrupt("return",new Promise(function(b,c){var d=_platform["default"].request||_platform["default"].httpRequest;d({url:a,method:"GET",success:function(a){b(a)},fail:function(a){c(a)}})}));case 1:case"end":return b.stop()}},b)}));return a}(),c.getV2Config=/*#__PURE__*/function(){function a(){return b.apply(this,arguments)}var b=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function b(a){var c,d;return _regenerator["default"].wrap(function(b){for(;;)switch(b.prev=b.next){case 0:return c=(0,_rumCore.getUrlParams)(a),d={instanceId:"",agentType:"rum_web_sdk",attributes:c,instanceConfigs:[{configType:"rum_web_config",version:1}],capabilities:2},b.abrupt("return",new Promise(function(b,c){var e=_platform["default"].request||_platform["default"].httpRequest;e({url:a,method:"POST",data:JSON.stringify(d),header:{"Content-Type":"application/json","x-log-apiversion":"0.6.0"},success:function(a){b(a)},fail:function(a){c(a)}})}));case 1:case"end":return b.stop()}},b)}));return a}(),c.getCacheConfig=function(){var a=(0,_platform.getStorageSync)(LOCAL_STORE_CONFIG_KEY);if(a){var b,c=this.currentConfig;try{if(b=JSON.parse(a),"pid"in b&&b.pid===c.pid||"endpoint"in b&&b.endpoint)return b.content=this.parseConfig(b.content),b}catch(a){//
6
- }return b}},c.setCacheConfig=function(a){var b=this.currentConfig,c=(0,_extends2["default"])({},a,{pid:b.pid,endpoint:b.endpoint});(0,_platform.setStorageSync)(LOCAL_STORE_CONFIG_KEY,JSON.stringify(c))},c.getRemoteConfigUrl=function(){var a=this.currentConfig,b=a.pid,c=a.remoteConfig,d=a.endpoint,e=c||{},f=e.url,g=e.region;if(f)return f;if(b){var h=b.split("@");return!h||2>h.length?void 0:"https://"+h[0]+"-sdk.rum.aliyuncs.com/config/"+(g||"cn-hangzhou")+"/"+h[1]+"?t="+Date.now()}var i=(0,_url.getURL)(d);return console.warn(i),i.protocol+"://"+i.hostname+"/agentconfig?workspace="+i.searchParams.workspace+"&service="+i.searchParams.service_id},c.parseConfig=function(a){try{var b=a.data||a,c=b.instanceConfigs[0].config;return"v2"===this.version?parseV2Config(JSON.parse(c)):a}catch(b){return a}},b}(_rumCore.ConfigManager);function checkEnable(a,b,c){var d;void 0===c&&(c=!0);var e=a.getConfig();if(!1===e.enable)return!1;var f=null===(d=e.collectors)||void 0===d?void 0:d[b];return(0,_rumCore.isBoolean)(f)?f:(0,_rumCore.isObject)(f)&&"enable"in f?f.enable:c}
4
+ var j=a.tracing;if(j){var k,l={};l.enable=null===(k=j.enable)||void 0===k||k;var m=[];(j.rules||[]).forEach(function(a){var b={enable:a.enable,tracestate:a.tracestate,baggage:a.baggage,propagatorTypes:a.protocols,sampling:a.sampling};return"{location.origin}"===a.match?void(l={...l,...b}):void(b.match=(0,_rumCore.parseRule2Match)(a),m.push(b))}),l.allowedUrls=m,c.tracing=l}// 处理采集器
5
+ var n=a.collectors;if(n&&0<Object.keys(n).length){var o={};n.forEach(function(a){var b=a.name;if(b){var c={...a},d=a.filters;0<(null===d||void 0===d?void 0:d.length)&&(c.filters=c.filters.map(function(a){return(0,_rumCore.parseRule2Match)(a)})),o[b]=c}}),c.collectors={...c.collectors,...o}}return c}class MiniappConfigManager extends _rumCore.ConfigManager{constructor(...a){super(...a),this.version="v2"}async fetchRemoteCfg(){var a=this.getRemoteConfigUrl();return a?a.includes(".rum.aliyuncs.com")?(this.version="v1",this.getV1Config(a)):this.getV2Config(a):void 0}async getV1Config(a){// return fetch(url).then(res => res.json());
6
+ return new Promise(function(b,c){var d=_platform["default"].request||_platform["default"].httpRequest;d({url:a,method:"GET",success:function(a){b(a)},fail:function(a){c(a)}})})}async getV2Config(a){var b=(0,_rumCore.getUrlParams)(a),c={instanceId:"",agentType:"rum_web_sdk",attributes:b,instanceConfigs:[{configType:"rum_web_config",version:1}],capabilities:2};return new Promise(function(b,d){var e=_platform["default"].request||_platform["default"].httpRequest;e({url:a,method:"POST",data:JSON.stringify(c),header:{"Content-Type":"application/json","x-log-apiversion":"0.6.0"},success:function(a){b(a)},fail:function(a){d(a)}})})}getCacheConfig(){var a=(0,_platform.getStorageSync)(LOCAL_STORE_CONFIG_KEY);if(a){var b,c=this.currentConfig;try{if(b=JSON.parse(a),"pid"in b&&b.pid===c.pid||"endpoint"in b&&b.endpoint)return b.content=this.parseConfig(b.content),b}catch(a){//
7
+ }return b}}setCacheConfig(a){var b=this.currentConfig,c={...a,pid:b.pid,endpoint:b.endpoint};(0,_platform.setStorageSync)(LOCAL_STORE_CONFIG_KEY,JSON.stringify(c))}getRemoteConfigUrl(){var a=this.currentConfig,b=a.pid,c=a.remoteConfig,d=a.endpoint,e=c||{},f=e.url,g=e.region;if(f)return f;if(b){var h=b.split("@");return!h||2>h.length?void 0:"https://"+h[0]+"-sdk.rum.aliyuncs.com/config/"+(g||"cn-hangzhou")+"/"+h[1]+"?t="+Date.now()}var i=(0,_url.getURL)(d);return i.protocol+"://"+i.hostname+"/agentconfig?workspace="+i.searchParams.workspace+"&service="+i.searchParams.service_id}parseConfig(a){try{var b=a.data||a,c=b.instanceConfigs[0].config;return"v2"===this.version?parseV2Config(JSON.parse(c)):a}catch(b){return a}}}exports["default"]=MiniappConfigManager;function checkEnable(a,b,c=!0){var d,e=a.getConfig();if(!1===e.enable)return!1;var f=null===(d=e.collectors)||void 0===d?void 0:d[b];return(0,_rumCore.isBoolean)(f)?f:(0,_rumCore.isObject)(f)&&"enable"in f?f.enable:c}
package/lib/empty.js ADDED
@@ -0,0 +1,2 @@
1
+ // empty module placeholder for tree-shaking unused core modules
2
+ "use strict";
@@ -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")),_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}();
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _base=require("../utils/base"),_view=require("../utils/view");class DefaultProcessor{constructor(){this.name="default-processor"}process(a){var b=a.getRumEvent(),c=(0,_view.getCurView)(a),d={timestamp:(0,_base.getCurrentTime)(),session_id:a.session.getSessionId(),event_id:a.session.getEventId(),view:c,...b};return d}}exports["default"]=DefaultProcessor;
@@ -1 +1 @@
1
- "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_hackPage=require("../utils/hackPage"),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){var b=this;this.ctx=a,this.update=(0,_rumCore.debounce)(this.update,_rumCore.ONE_SECOND),(0,_hackPage.addPageListener)("*",function(a){a&&a.type&&a.target&&b.update()})},b.process=function(a){return this.update(),a.getRumEvent()},a}();
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_hackPage=require("../utils/hackPage");class SessionProcessor{constructor(){var a=this;this.name="session-processor",this.ctx=void 0,this.update=function(b){b&&!b.isTrusted||a.ctx.session.updateSession()}}setup(a){var b=this;this.ctx=a,this.update=(0,_rumCore.debounce)(this.update,_rumCore.ONE_SECOND),(0,_hackPage.addPageListener)("*",function(a){a&&a.type&&a.target&&b.update()})}process(a){return this.update(),a.getRumEvent()}}exports["default"]=SessionProcessor;
@@ -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=_interopRequireWildcard(require("../utils/platform"));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)}/**
1
+ "use strict";exports.__esModule=!0,exports["default"]=void 0;var _rumCore=require("@arms/rum-core"),_platform=_interopRequireWildcard(require("../utils/platform"));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)}/**
2
2
  * miniapp reporter
3
- */var MiniappReporter=/*#__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="miniapp-reporter",b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.init=function(){var a=this;(0,_rumCore.isFunction)(_platform["default"].onAppHide)&&_platform["default"].onAppHide(function(){a.flushEventQueue()})},c.request=function(a,b){var c=a.getConfig();try{b.app.type=_rumCore.AppType.miniapp,b._v=_platform.VERSION;var d=_platform["default"].request||_platform["default"].httpRequest;d({url:c.endpoint,method:"POST",dataType:"text",data:JSON.stringify(b)})}catch(a){console.warn("[arms] sendRequest fail",a)}},b}(_rumCore.Reporter),_default=exports["default"]=MiniappReporter;
3
+ */class MiniappReporter extends _rumCore.Reporter{constructor(...a){super(...a),this.name="miniapp-reporter"}init(){var a=this;(0,_rumCore.isFunction)(_platform["default"].onAppHide)&&_platform["default"].onAppHide(function(){a.flushEventQueue()})}request(a,b){var c=a.getConfig();try{b.app.type=_rumCore.AppType.miniapp,b._v=_platform.VERSION;var d=_platform["default"].request||_platform["default"].httpRequest;d({url:c.endpoint,method:"POST",dataType:"text",data:JSON.stringify(b)})}catch(a){console.warn("[arms] sendRequest fail",a)}}}var _default=exports["default"]=MiniappReporter;
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 _regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_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")),_application=_interopRequireDefault(require("./collector/application")),_renderBlock=_interopRequireDefault(require("./collector/longtask/render-block")),_defaultProcessor=_interopRequireDefault(require("./processor/default-processor")),_sessionProcessor=_interopRequireDefault(require("./processor/session-processor")),_reporter=_interopRequireDefault(require("./reporter")),_network=require("./utils/network"),_platform=require("./utils/platform"),_session=require("./utils/session"),_configManager=_interopRequireDefault(require("./configManager")),builtInCollectors=[_pv["default"],_perf["default"],_exception["default"],_api["default"],_action["default"],_application["default"],_renderBlock["default"]],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.configManager=void 0,b.updateNetType=function(a){var c=b.getConfig().net||{};b.setConfig("net",(0,_extends3["default"])({},c,{type:a}))},b}(0,_inheritsLoose2["default"])(b,a);var c=b.prototype;return c.init=/*#__PURE__*//**
2
- * 初始化
3
- */function(){function a(){return b.apply(this,arguments)}var b=(0,_asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function b(a){var c;return _regenerator["default"].wrap(function(b){for(;;)switch(b.prev=b.next){case 0:return this.configManager=new _configManager["default"],b.next=1,this.configManager.init(a);case 1:if(c=this.configManager.getConfig(),!1!==c.enable){b.next=2;break}return b.abrupt("return");case 2:return this.client.useCollectors(builtInCollectors.map(function(a){return new a})),this.client.useProcessors([new _defaultProcessor["default"],new _sessionProcessor["default"]]),this.client.useReporter(new _reporter["default"]),this.client.init(c,new _session.RumSession,this.configManager),(0,_network.getNetType)(this.updateNetType),b.abrupt("return",this);case 3:case"end":return b.stop()}},b,this)}));return a}(),c.getConfig=function(){var a;return null===(a=this.configManager)||void 0===a?void 0:a.getConfig()}/**
4
- * set config
5
- */,c.setConfig=function(){var a=this.configManager;if(a)if(2===arguments.length){var b,c=a.getConfig();a.setConfig((0,_extends3["default"])({},c,(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.getCollector=function(a){return this.client.getCollectors().find(function(b){return b.name===a})},b}(_rumCore.Shell),_default=exports["default"]=new ArmsRum;/**
1
+ "use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=!0,exports["default"]=exports.ArmsRum=void 0;var _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")),_application=_interopRequireDefault(require("./collector/application")),_renderBlock=_interopRequireDefault(require("./collector/longtask/render-block")),_defaultProcessor=_interopRequireDefault(require("./processor/default-processor")),_sessionProcessor=_interopRequireDefault(require("./processor/session-processor")),_reporter=_interopRequireDefault(require("./reporter")),_network=require("./utils/network"),_platform=require("./utils/platform"),_session=require("./utils/session"),_configManager=_interopRequireDefault(require("./configManager")),builtInCollectors=[_pv["default"],_perf["default"],_exception["default"],_api["default"],_action["default"],_application["default"],_renderBlock["default"]];/**
6
2
  * 对外导出 shell 层, 所有 shell 层模型的 API 设计约定:
7
3
  * 1. API 命名空间按照 variables / functions / events 来组织
8
4
  * 2. 事件(events)的命名格式为:on[Will|Did]VerbNoun?,参考 https://code.visualstudio.com/api/references/vscode-api#events
9
5
  * 3. 基于 Disposable 模式,对于事件的绑定、快捷键的绑定函数,返回值则是解绑函数
10
- */
6
+ */class ArmsRum extends _rumCore.Shell{constructor(...a){var b;super(...a),b=this,this.version=_platform.VERSION,this.configManager=void 0,this.updateNetType=function(a){var c=b.getConfig().net||{};b.setConfig("net",{...c,type:a})}}/**
7
+ * 初始化
8
+ */async init(a){this.configManager=new _configManager["default"],await this.configManager.init(a);var b=this.configManager.getConfig();if(!1!==b.enable)return this.client.useCollectors(builtInCollectors.map(function(a){return new a})),this.client.useProcessors([new _defaultProcessor["default"],new _sessionProcessor["default"]]),this.client.useReporter(new _reporter["default"]),this.client.init(b,new _session.RumSession,this.configManager),(0,_network.getNetType)(this.updateNetType),this}getConfig(){var a;return null===(a=this.configManager)||void 0===a?void 0:a.getConfig()}/**
9
+ * set config
10
+ */setConfig(...a){var b=this.configManager;if(b)if(2===a.length){var c,d=b.getConfig();b.setConfig((c={},c[a[0]]=a[1],c))}else b.setConfig(a[0])}getCollector(a){return this.client.getCollectors().find(function(b){return b.name===a})}}exports.ArmsRum=ArmsRum;var _default=exports["default"]=new ArmsRum;
@@ -1,5 +1,5 @@
1
- import { IConfiguration, ITracingOption } from "@arms/rum-core";
2
- import { IApiBaseAttr } from "../utils/api";
1
+ import { IConfiguration, ICollectorConfig, ITracingOption } from "@arms/rum-core";
2
+ import { IApiBaseAttr, ISseCollectorConfig } from "../utils/api";
3
3
  export interface IMiniappConfig extends IConfiguration {
4
4
  /**
5
5
  * view.name 解析
@@ -17,4 +17,23 @@ export interface IMiniappConfig extends IConfiguration {
17
17
  * request 自定义解析;
18
18
  */
19
19
  evaluateApi?(request: any, response: any, error?: Error): Promise<IApiBaseAttr>;
20
+ /**
21
+ * 各个 collector 配置
22
+ * 在小程序端扩展了 api 采集器的类型,支持 SSE 子配置
23
+ */
24
+ collectors?: {
25
+ [key: string]: boolean | ICollectorConfig;
26
+ } & {
27
+ /**
28
+ * API 采集器配置
29
+ * 支持通用的采集器配置,并扩展了 SSE 子配置
30
+ */
31
+ api?: boolean | (ICollectorConfig & {
32
+ /**
33
+ * SSE 采集器子配置
34
+ * 控制 SSE 流的启用和超时策略(仅微信小程序支持)
35
+ */
36
+ sse?: ISseCollectorConfig;
37
+ });
38
+ };
20
39
  }
@@ -19,6 +19,19 @@ export interface IApiAttr extends IApiBaseAttr {
19
19
  method: string;
20
20
  trace_id?: string;
21
21
  trace_data?: string;
22
+ sse?: ISseMetrics;
23
+ }
24
+ export interface ISseMetrics {
25
+ status: 'success' | 'error' | 'timeout' | 'abort';
26
+ time_to_first_token?: number;
27
+ inter_token_latency_avg?: number;
28
+ inter_token_latency_max?: number;
29
+ message_count?: number;
30
+ timing_data?: string;
31
+ }
32
+ export interface ISseCollectorConfig {
33
+ enabled?: boolean;
34
+ timeout?: number;
22
35
  }
23
36
  export interface Options {
24
37
  url: string;
package/lib/utils/api.js CHANGED
@@ -1 +1,3 @@
1
- "use strict";var _rumCore=require("@arms/rum-core");exports.__esModule=!0,exports.reviseApiAttr=reviseApiAttr;function reviseApiAttr(a){if((0,_rumCore.isObject)(a)){var b={};(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));var c=(0,_rumCore.verifyProperties)(a.properties);return c&&(b.properties=c),b}}
1
+ "use strict";var _rumCore=require("@arms/rum-core");exports.__esModule=!0,exports.reviseApiAttr=reviseApiAttr;// SSE 协议层指标 - 对齐浏览器端 ISseMetrics
2
+ // SSE 采集器子配置
3
+ function reviseApiAttr(a){if((0,_rumCore.isObject)(a)){var b={};(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));var c=(0,_rumCore.verifyProperties)(a.properties);return c&&(b.properties=c),b}}
package/lib/utils/base.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * @param num 原数据
4
4
  * @param decimal 小数位数
5
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)}/**
6
+ */function formatNumber(a,b=3){if(!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
7
  * 获取获取当前时间 fix Data.now() 存在的缺陷
8
8
  * duration方法用于计算时间跨度,由于Date.now存在bug,可能为负数,尽可能使用performance.now计算
9
9
  * https://blog.insiderattack.net/how-not-to-measure-time-in-programming-11089d546180
@@ -1,2 +1,2 @@
1
- "use strict";exports.__esModule=!0,exports.addAppListener=addAppListener,exports.originalApp=void 0,exports.removeAppListener=removeAppListener;var _rumCore=require("@arms/rum-core"),_platform=require("./platform"),listeners={onLaunch:[],"*":[]};function hackPage(a){Object.keys(listeners).forEach(function(b){"swan"===_platform.appName&&Object.defineProperty(a,b,{writable:!0});"*"===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],listeners["*"]);f.forEach(function(b){b.apply(a,d)})},!0)})}var originalApp=exports.originalApp=App;App=function(){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 originalApp.apply(this,b)},Object.keys(originalApp).forEach(function(a){App[a]=originalApp[a]});function addAppListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removeAppListener(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.addAppListener=addAppListener,exports.originalApp=void 0,exports.removeAppListener=removeAppListener;var _rumCore=require("@arms/rum-core"),_platform=require("./platform"),listeners={onLaunch:[],"*":[]};function hackPage(a){Object.keys(listeners).forEach(function(b){"swan"===_platform.appName&&Object.defineProperty(a,b,{writable:!0});"*"===b||(0,_rumCore.interceptFunction)(a,b,function(...a){var c=this,d=[...listeners[b],...listeners["*"]];d.forEach(function(b){b.apply(c,a)})},!0)})}var originalApp=exports.originalApp=App;App=function(...a){try{hackPage.apply(this,a)}catch(a){//
2
+ }return originalApp.apply(this,a)},Object.keys(originalApp).forEach(function(a){App[a]=originalApp[a]});function addAppListener(a,b){a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removeAppListener(a,b){if(a in listeners){var c=listeners[a],d=c.indexOf(b);c.splice(d,1)}}
@@ -1,5 +1,5 @@
1
1
  "use strict";exports.__esModule=!0,exports.addComponentListener=addComponentListener,exports.originalComponent=void 0,exports.removeComponentListener=removeComponentListener;var _rumCore=require("@arms/rum-core"),_platform=require("./platform"),listnersMap=new Map;["methods","lifetimes"].forEach(function(a){listnersMap.set(a,{})});var componentLifetimes=["created","attached","ready","moved","detached","error"],ignores=[// 'onLoad',
2
2
  "onShow",// 'onReady',
3
3
  "onHide",// 'onUnload',
4
- "onPullDownRefresh","onReachBottom","onShareAppMessage","onShareTimeline","onAddToFavorites","onPageScroll","onResize","onTabItemTap","onSaveExitState"].concat(componentLifetimes);function hackComponent(a,b){var c=listnersMap.get(b);Object.keys(a).forEach(function(b){var d=a[b];!(0,_rumCore.isFunction)(d)||ignores.includes(b)||b in c||(c[b]=[])}),Object.keys(c).forEach(function(d){var e=a;"swan"===_platform.appName&&Object.defineProperty(e,d,{writable:!0});"*"===d||("lifetimes"===b&&!(0,_rumCore.isFunction)(e[d])&&(!e.lifetimes&&(e.lifetimes={}),e=e.lifetimes),(0,_rumCore.interceptFunction)(e,d,function(){for(var a=this,b=arguments.length,e=Array(b),f=0;f<b;f++)e[f]=arguments[f];var g=[].concat(c[d],c["*"]||[]);g.forEach(function(b){b.apply(a,e)})},!0))})}var originalComponent=exports.originalComponent=Component;Component=function(){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={}),d.lifetimes||(d.lifetimes={}),hackComponent.call(this,d.methods,"methods"),hackComponent.call(this,d,"lifetimes")}catch(a){//
5
- }return originalComponent.apply(this,b)},Object.keys(originalComponent).forEach(function(a){Component[a]=originalComponent[a]});function addComponentListener(a,b){var c;c=componentLifetimes.includes(a)?listnersMap.get("lifetimes"):listnersMap.get("methods"),a in c||(c[a]=[]),c[a].push(b)}function removeComponentListener(a,b){var c;if(c=componentLifetimes.includes(a)?listnersMap.get("lifetimes"):listnersMap.get("methods"),!!(a in c)){var d=c[a],e=d.indexOf(b);d.splice(e,1)}}
4
+ "onPullDownRefresh","onReachBottom","onShareAppMessage","onShareTimeline","onAddToFavorites","onPageScroll","onResize","onTabItemTap","onSaveExitState",...componentLifetimes];function hackComponent(a,b){var c=listnersMap.get(b);Object.keys(a).forEach(function(b){var d=a[b];!(0,_rumCore.isFunction)(d)||ignores.includes(b)||b in c||(c[b]=[])}),Object.keys(c).forEach(function(d){var e=a;"swan"===_platform.appName&&Object.defineProperty(e,d,{writable:!0});"*"===d||("lifetimes"===b&&!(0,_rumCore.isFunction)(e[d])&&(!e.lifetimes&&(e.lifetimes={}),e=e.lifetimes),(0,_rumCore.interceptFunction)(e,d,function(...a){var b=this,e=[...c[d],...(c["*"]||[])];e.forEach(function(c){c.apply(b,a)})},!0))})}var originalComponent=exports.originalComponent=Component;Component=function(...a){try{var b=a[0]||{};b.methods||(b.methods={}),b.lifetimes||(b.lifetimes={}),hackComponent.call(this,b.methods,"methods"),hackComponent.call(this,b,"lifetimes")}catch(a){//
5
+ }return originalComponent.apply(this,a)},Object.keys(originalComponent).forEach(function(a){Component[a]=originalComponent[a]});function addComponentListener(a,b){var c;c=componentLifetimes.includes(a)?listnersMap.get("lifetimes"):listnersMap.get("methods"),a in c||(c[a]=[]),c[a].push(b)}function removeComponentListener(a,b){var c;if(c=componentLifetimes.includes(a)?listnersMap.get("lifetimes"):listnersMap.get("methods"),!!(a in c)){var d=c[a],e=d.indexOf(b);d.splice(e,1)}}
@@ -1,2 +1,2 @@
1
- "use strict";exports.__esModule=!0,exports.addPageListener=addPageListener,exports.originalPage=void 0,exports.removePageListener=removePageListener;var _rumCore=require("@arms/rum-core"),_platform=require("./platform"),_hackComponent=require("./hackComponent"),listeners={onLoad:[],onShow:[],onHide:[],onUnload:[],"*":[]},ignores=["onLoad","onShow","onReady","onHide","onUnload","onPullDownRefresh","onReachBottom","onShareAppMessage","onShareTimeline","onAddToFavorites","onPageScroll","onResize","onTabItemTap","onSaveExitState"];function hackPage(a){Object.keys(a).forEach(function(b){var c=a[b];!(0,_rumCore.isFunction)(c)||ignores.includes(b)||b in listeners||(listeners[b]=[])}),Object.keys(listeners).forEach(function(b){"swan"===_platform.appName&&Object.defineProperty(a,b,{writable:!0});"*"===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],listeners["*"]);f.forEach(function(b){b.apply(a,d)})},!0)})}var originalPage=exports.originalPage=Page;Page=function(){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)},Object.keys(originalPage).forEach(function(a){Page[a]=originalPage[a]});function addPageListener(a,b,c){void 0===c&&(c=!1),c||(0,_hackComponent.addComponentListener)(a,b),a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removePageListener(a,b,c){if(void 0===c&&(c=!1),c||(0,_hackComponent.removeComponentListener)(a,b),!!(a in listeners)){var d=listeners[a],e=d.indexOf(b);d.splice(e,1)}}
1
+ "use strict";exports.__esModule=!0,exports.addPageListener=addPageListener,exports.originalPage=void 0,exports.removePageListener=removePageListener;var _rumCore=require("@arms/rum-core"),_platform=require("./platform"),_hackComponent=require("./hackComponent"),listeners={onLoad:[],onShow:[],onHide:[],onUnload:[],"*":[]},ignores=["onLoad","onShow","onReady","onHide","onUnload","onPullDownRefresh","onReachBottom","onShareAppMessage","onShareTimeline","onAddToFavorites","onPageScroll","onResize","onTabItemTap","onSaveExitState"];function hackPage(a){Object.keys(a).forEach(function(b){var c=a[b];!(0,_rumCore.isFunction)(c)||ignores.includes(b)||b in listeners||(listeners[b]=[])}),Object.keys(listeners).forEach(function(b){"swan"===_platform.appName&&Object.defineProperty(a,b,{writable:!0});"*"===b||(0,_rumCore.interceptFunction)(a,b,function(...a){var c=this,d=[...listeners[b],...listeners["*"]];d.forEach(function(b){b.apply(c,a)})},!0)})}var originalPage=exports.originalPage=Page;Page=function(...a){try{hackPage.apply(this,a)}catch(a){//
2
+ }return originalPage.apply(this,a)},Object.keys(originalPage).forEach(function(a){Page[a]=originalPage[a]});function addPageListener(a,b,c=!1){c||(0,_hackComponent.addComponentListener)(a,b),a in listeners||(listeners[a]=[]),listeners[a].push(b)}function removePageListener(a,b,c=!1){if(c||(0,_hackComponent.removeComponentListener)(a,b),!!(a in listeners)){var d=listeners[a],e=d.indexOf(b);d.splice(e,1)}}
@@ -1,4 +1,4 @@
1
- "use strict";exports.__esModule=!0,exports.dingtalkName=exports["default"]=exports.bytedanceName=exports.appName=exports.alipayName=exports.VERSION=exports.HEADER_KEY=void 0,exports.getPerformance=getPerformance,exports.getStorageSync=getStorageSync,exports.sdk=exports.qqName=exports.ksName=exports.jdName=void 0,exports.setStorageSync=setStorageSync,exports.wechatName=exports.swanName=void 0;var VERSION=exports.VERSION='npm-0.1.6',OBJ="object",qqName=exports.qqName="qq",bytedanceName=exports.bytedanceName="bytedance",wechatName=exports.wechatName="wechat",dingtalkName=exports.dingtalkName="dingtalk",alipayName=exports.alipayName="alipay",swanName=exports.swanName="swan",jdName=exports.jdName="jd",ksName=exports.ksName="ks";function isFunc(a){return"function"==typeof a}/**
1
+ "use strict";exports.__esModule=!0,exports.dingtalkName=exports["default"]=exports.bytedanceName=exports.appName=exports.alipayName=exports.VERSION=exports.HEADER_KEY=void 0,exports.getPerformance=getPerformance,exports.getStorageSync=getStorageSync,exports.sdk=exports.qqName=exports.ksName=exports.jdName=void 0,exports.setStorageSync=setStorageSync,exports.wechatName=exports.swanName=void 0;var VERSION=exports.VERSION='npm-0.1.7',OBJ="object",qqName=exports.qqName="qq",bytedanceName=exports.bytedanceName="bytedance",wechatName=exports.wechatName="wechat",dingtalkName=exports.dingtalkName="dingtalk",alipayName=exports.alipayName="alipay",swanName=exports.swanName="swan",jdName=exports.jdName="jd",ksName=exports.ksName="ks";function isFunc(a){return"function"==typeof a}/**
2
2
  * 获取跨平台的 SDK
3
3
  */function getSDK(){var a,b="unknown";if(typeof ks===OBJ)a=ks,b=ksName;else if(typeof swan===OBJ)a=swan,b=swanName;else if(typeof qq===OBJ)// qq的全局也有wx命名空间,和qq等效,这会导致判断AppName失效
4
4
  a=qq,b=qqName;else if(typeof tt===OBJ)// 字节的全局也有wx命名空间,和tt等效,这会导致判断AppName失效
@@ -1,2 +1,4 @@
1
- "use strict";exports.__esModule=!0,exports.RumSession=void 0;var _rumCore=require("@arms/rum-core"),_base=require("./base"),_view=require("./view"),_platform=require("./platform"),USER_ID="_arms_uid",RUM_SESSION="_arms_session",RumSession=exports.RumSession=/*#__PURE__*/function(){function a(){this.ctx=void 0,this.sessionConfig=void 0}var b=a.prototype;return b.init=function(a){var b;this.ctx=a,this.sessionConfig=this.fixSessionConfig(null===(b=a.config)||void 0===b?void 0:b.sessionConfig)},b.getSessionId=function(){return this.getSessionInfo().sessionId},b.getSampled=function(){return this.getSessionInfo().sampled},b.checkSession=function(a){var b=this.sessionConfig,c=b.overtime,d=b.maxDuration,e=(0,_base.getCurrentTime)();return!(a.startTime+d<e||a.lastTime+c<e)},b.updateSession=function(){var a=this.getSessionInfo();if(!a.isNew){var b=a.startTime,c=(0,_base.getCurrentTime)(),d=a.sampled?1:0;(0,_platform.setStorageSync)(RUM_SESSION,a.sessionId+"-"+d+"-"+b+"-"+c)}},b.getSessionInfo=function(){var a=((0,_platform.getStorageSync)(RUM_SESSION)||"").split("-"),b=a[0],c=a[1],d=a[2],e=a[3],f={sessionId:b,sampled:"0"!==c,startTime:parseInt(d||"")||0,lastTime:parseInt(e||"")||0};return this.checkSession(f)||(f=this.resetSession()),f},b.getEventId=function(){return(0,_rumCore.generateEventId)(this.getSessionId())},b.getViewId=function(){return this.getUUID()},b.getUserId=function(){var a=(0,_platform.getStorageSync)(USER_ID);return a&&0===a.indexOf("user_")&&(a=""),a||(a="uid_"+(0,_rumCore.generateSpanId)(16,36),(0,_platform.setStorageSync)(USER_ID,a)),a},b.resetSession=function(){var a=this.sessionConfig.sampleRate,b=this.getUUID(),c=(0,_base.getCurrentTime)(),d=(0,_rumCore.performDraw)(100*a),e=b+"-"+(d?1:0)+"-"+c+"-"+c;return(0,_platform.setStorageSync)(RUM_SESSION,e),{sessionId:b,sampled:d,startTime:c,lastTime:c,isNew:!0}},b.getUUID=function(){return(0,_rumCore.generateGUID)().replace(/-/g,"")},b.fixSessionConfig=function(a){void 0===a&&(a={});var b=a,c=b.sampleRate,d=b.maxDuration,e=b.overtime;return(!(0,_rumCore.isNumber)(c)||0>c||1<c)&&(c=1),(!(0,_rumCore.isNumber)(d)||d<4*_rumCore.ONE_HOUR||d>_rumCore.ONE_DAY)&&(d=_rumCore.ONE_DAY),(!(0,_rumCore.isNumber)(e)||e>_rumCore.ONE_HOUR||e<10*_rumCore.ONE_MINUTE)&&(e=30*_rumCore.ONE_MINUTE),{sampleRate:c,maxDuration:d,overtime:e}},b.getBaseEvent=function(){return{timestamp:(0,_base.getCurrentTime)(),session_id:this.getSessionId(),event_id:this.getEventId(),view:this.ctx?(0,_view.getCurView)(this.ctx):void 0,times:1}},a}();// 存储userID的键名
2
- // 存储session
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";// 存储userID的键名
2
+ // 存储session
3
+ class RumSession{constructor(){this.ctx=void 0,this.sessionConfig=void 0}init(a){var b;this.ctx=a,this.sessionConfig=this.fixSessionConfig(null===(b=a.config)||void 0===b?void 0:b.sessionConfig)}getSessionId(){return this.getSessionInfo().sessionId}getSampled(){return this.getSessionInfo().sampled}checkSession(a){var b=this.sessionConfig,c=b.overtime,d=b.maxDuration,e=(0,_base.getCurrentTime)();return!(a.startTime+d<e||a.lastTime+c<e)}updateSession(){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)}}getSessionInfo(){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}getEventId(){return(0,_rumCore.generateEventId)(this.getSessionId())}getViewId(){return this.getUUID()}getUserId(){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}resetSession(){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}}getUUID(){return(0,_rumCore.generateGUID)().replace(/-/g,"")}fixSessionConfig(a={}){var b=a.sampleRate,c=a.sampling,d=a.maxDuration,e=a.overtime;// 优先使用 sampling(0-100),若未配置则从旧字段 sampleRate(0-1)迁移
4
+ return(!(0,_rumCore.isNumber)(c)||0>c||100<c)&&((0,_rumCore.isNumber)(b)&&0<=b&&1>=b?c=100*b:c=100),(!(0,_rumCore.isNumber)(d)||d<4*_rumCore.ONE_HOUR||d>_rumCore.ONE_DAY)&&(d=_rumCore.ONE_DAY),(!(0,_rumCore.isNumber)(e)||e>_rumCore.ONE_HOUR||e<10*_rumCore.ONE_MINUTE)&&(e=30*_rumCore.ONE_MINUTE),{sampling:c,maxDuration:d,overtime:e}}getBaseEvent(){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}}}exports.RumSession=RumSession;
@@ -0,0 +1,23 @@
1
+ import { ISseMetrics } from './api';
2
+ export declare class SseMetricsTracker {
3
+ private startTime;
4
+ private firstMessageTime;
5
+ private lastMessageTime;
6
+ private messageCount;
7
+ private intervals;
8
+ start(startTime?: number): void;
9
+ onMessage(): void;
10
+ finish(status: ISseMetrics['status']): ISseMetrics;
11
+ }
12
+ export declare function arrayBufferToString(buffer: ArrayBuffer): string;
13
+ export declare function parseSseChunk(text: string, buffer: string): {
14
+ events: string[];
15
+ remaining: string;
16
+ };
17
+ export declare function isSseRequest(options: {
18
+ header?: Record<string, string>;
19
+ headers?: Record<string, string>;
20
+ url?: string;
21
+ enableChunked?: boolean;
22
+ }): boolean;
23
+ export declare function isSseSupported(): boolean;
@@ -0,0 +1,14 @@
1
+ "use strict";var _platform=require("./platform");exports.__esModule=!0,exports.SseMetricsTracker=void 0,exports.arrayBufferToString=arrayBufferToString,exports.isSseRequest=isSseRequest,exports.isSseSupported=isSseSupported,exports.parseSseChunk=parseSseChunk;// ==================== SseMetricsTracker ====================
2
+ class SseMetricsTracker{constructor(){this.startTime=0,this.firstMessageTime=0,this.lastMessageTime=0,this.messageCount=0,this.intervals=[]}start(a){this.startTime=a||Date.now(),this.firstMessageTime=0,this.lastMessageTime=0,this.messageCount=0,this.intervals=[]}onMessage(){var a=Date.now();this.messageCount++,1===this.messageCount?this.firstMessageTime=a:this.intervals.push(a-this.lastMessageTime),this.lastMessageTime=a}finish(a){var b={status:a,message_count:this.messageCount};if(0<this.firstMessageTime&&(b.time_to_first_token=this.firstMessageTime-this.startTime),0<this.intervals.length){for(var c=0,d=0;d<this.intervals.length;d++)c+=this.intervals[d];b.inter_token_latency_avg=Math.round(c/this.intervals.length),b.inter_token_latency_max=Math.max.apply(null,this.intervals)}return b}}// ==================== 辅助函数 ====================
3
+ // ArrayBuffer 转字符串 - 兼容无 TextDecoder 环境
4
+ exports.SseMetricsTracker=SseMetricsTracker;function arrayBufferToString(a){try{// 优先使用 TextDecoder
5
+ if("undefined"!=typeof TextDecoder)return new TextDecoder("utf-8").decode(a)}catch(a){// fallthrough
6
+ }// 降级方案
7
+ for(var b="",c=new Uint8Array(a),d=0;d<c.length;d++)b+=String.fromCharCode(c[d]);try{return decodeURIComponent(escape(b))}catch(a){return b}}// SSE 协议解析 - 按 \n\n 分割事件
8
+ function parseSseChunk(a,b){// 最后一部分可能不完整
9
+ for(var c=(b+a).split("\n\n"),d=c.pop()||"",e=[],f=0;f<c.length;f++)0<c[f].trim().length&&e.push(c[f]);return{events:e,remaining:d}}// 判断请求是否为 SSE 请求
10
+ function isSseRequest(a){// 检查是否已显式设置 enableChunked
11
+ if(!0===a.enableChunked)return!0;var b=a.header||a.headers||{},c=b.Accept||b.accept||"";// 检查 Accept 头
12
+ if(-1!==c.indexOf("text/event-stream"))return!0;// 检查 Content-Type(某些场景服务端预设)
13
+ var d=b["Content-Type"]||b["content-type"]||"";return-1!==d.indexOf("text/event-stream")}// 判断当前平台是否支持 SSE 监控(仅微信小程序且支持 enableChunked)
14
+ function isSseSupported(){if(_platform.appName!==_platform.wechatName)return!1;try{return"undefined"!=typeof wx&&wx.canIUse&&wx.canIUse("request.object.enableChunked")}catch(a){return!1}}
package/lib/utils/url.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * 根据指定 URL 获取视图的名称,默认为其path部分
3
3
  * @param url 需要提取路径部分的 URL
4
4
  * @param isHash 是否为 hash 模式路由的 URL
5
- */function getPathByURL(a,b){void 0===b&&(b=!1);try{var c=getURL(a);return b?c.hash:c.pathname}catch(a){return""}}/**
5
+ */function getPathByURL(a,b=!1){try{var c=getURL(a);return b?c.hash:c.pathname}catch(a){return""}}/**
6
6
  * 检查是否为上报域名
7
7
  * @param ctx
8
8
  * @param url 需要提取路径部分的 URL
@@ -10,7 +10,7 @@
10
10
  * 安全解码 URL 组件,失败时返回原始字符串
11
11
  */function safeDecode(a){if(!a)return"";try{return decodeURIComponent(a)}catch(b){return a}}/**
12
12
  * 解析查询字符串为键值对对象
13
- */function getSearchParams(a){var b={};if(!a)return b;for(var c,d,e=a.split("&"),f=_createForOfIteratorHelperLoose(e);!(c=f()).done;)if(d=c.value,d){var g=d.indexOf("=");if(!(0>g)){var h=safeDecode(d.slice(0,g)),i=safeDecode(d.slice(g+1));if(h){var j=b[h];b[h]=void 0===j?i:(0,_rumCore.isArray)(j)?[].concat(j,[i]):[j,i]}}}return b}/**
13
+ */function getSearchParams(a){var b={};if(!a)return b;for(var c,d,e=a.split("&"),f=_createForOfIteratorHelperLoose(e);!(c=f()).done;)if(d=c.value,d){var g=d.indexOf("=");if(!(0>g)){var h=safeDecode(d.slice(0,g)),i=safeDecode(d.slice(g+1));if(h){var j=b[h];b[h]=void 0===j?i:(0,_rumCore.isArray)(j)?[...j,i]:[j,i]}}}return b}/**
14
14
  * 解析 URL 字符串为结构化对象
15
15
  */function getURL(a){if("string"!=typeof a||!a)return{uri:"",protocol:void 0,host:void 0,hostname:void 0,port:void 0,pathname:void 0,search:void 0,hash:void 0,searchParams:{}};var b=safeDecode(a),c=b.match(REGEX);if(!c)return{uri:a,protocol:void 0,host:void 0,hostname:void 0,port:void 0,pathname:void 0,search:void 0,hash:void 0,searchParams:{}};// 提取 host,移除认证信息(如果有)
16
16
  var d=c[2]||"",e=d.includes("@")?d.replace(/^[^@]+@/,""):d;return{uri:c[0]||"",protocol:c[1],host:e||void 0,hostname:c[4],port:c[5],pathname:c[6],search:c[7],hash:c[8],searchParams:getSearchParams(c[7])}}