apm-web-vitals 0.0.1-rc.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of apm-web-vitals might be problematic. Click here for more details.

Files changed (85) hide show
  1. package/es/global.d.ts +14 -0
  2. package/es/index.d.ts +21 -0
  3. package/es/index.d.ts.map +1 -0
  4. package/es/index.js +36 -0
  5. package/es/index.js.map +1 -0
  6. package/es/metrics/base.d.ts +9 -0
  7. package/es/metrics/base.d.ts.map +1 -0
  8. package/es/metrics/base.js +23 -0
  9. package/es/metrics/base.js.map +1 -0
  10. package/es/metrics/cls-metric.d.ts +12 -0
  11. package/es/metrics/cls-metric.d.ts.map +1 -0
  12. package/es/metrics/cls-metric.js +82 -0
  13. package/es/metrics/cls-metric.js.map +1 -0
  14. package/es/metrics/fcp-metric.d.ts +9 -0
  15. package/es/metrics/fcp-metric.d.ts.map +1 -0
  16. package/es/metrics/fcp-metric.js +13 -0
  17. package/es/metrics/fcp-metric.js.map +1 -0
  18. package/es/metrics/fid-metric.d.ts +9 -0
  19. package/es/metrics/fid-metric.d.ts.map +1 -0
  20. package/es/metrics/fid-metric.js +13 -0
  21. package/es/metrics/fid-metric.js.map +1 -0
  22. package/es/metrics/lcp-metric.d.ts +9 -0
  23. package/es/metrics/lcp-metric.d.ts.map +1 -0
  24. package/es/metrics/lcp-metric.js +13 -0
  25. package/es/metrics/lcp-metric.js.map +1 -0
  26. package/es/metrics/ttfb-metric.d.ts +9 -0
  27. package/es/metrics/ttfb-metric.d.ts.map +1 -0
  28. package/es/metrics/ttfb-metric.js +13 -0
  29. package/es/metrics/ttfb-metric.js.map +1 -0
  30. package/es/types.d.ts +33 -0
  31. package/es/util.d.ts +11 -0
  32. package/es/util.d.ts.map +1 -0
  33. package/es/util.js +59 -0
  34. package/es/util.js.map +1 -0
  35. package/lib/global.d.ts +14 -0
  36. package/lib/index.d.ts +21 -0
  37. package/lib/index.d.ts.map +1 -0
  38. package/lib/index.js +38 -0
  39. package/lib/index.js.map +1 -0
  40. package/lib/metrics/base.d.ts +9 -0
  41. package/lib/metrics/base.d.ts.map +1 -0
  42. package/lib/metrics/base.js +29 -0
  43. package/lib/metrics/base.js.map +1 -0
  44. package/lib/metrics/cls-metric.d.ts +12 -0
  45. package/lib/metrics/cls-metric.d.ts.map +1 -0
  46. package/lib/metrics/cls-metric.js +87 -0
  47. package/lib/metrics/cls-metric.js.map +1 -0
  48. package/lib/metrics/fcp-metric.d.ts +9 -0
  49. package/lib/metrics/fcp-metric.d.ts.map +1 -0
  50. package/lib/metrics/fcp-metric.js +19 -0
  51. package/lib/metrics/fcp-metric.js.map +1 -0
  52. package/lib/metrics/fid-metric.d.ts +9 -0
  53. package/lib/metrics/fid-metric.d.ts.map +1 -0
  54. package/lib/metrics/fid-metric.js +19 -0
  55. package/lib/metrics/fid-metric.js.map +1 -0
  56. package/lib/metrics/lcp-metric.d.ts +9 -0
  57. package/lib/metrics/lcp-metric.d.ts.map +1 -0
  58. package/lib/metrics/lcp-metric.js +19 -0
  59. package/lib/metrics/lcp-metric.js.map +1 -0
  60. package/lib/metrics/ttfb-metric.d.ts +9 -0
  61. package/lib/metrics/ttfb-metric.d.ts.map +1 -0
  62. package/lib/metrics/ttfb-metric.js +19 -0
  63. package/lib/metrics/ttfb-metric.js.map +1 -0
  64. package/lib/types.d.ts +33 -0
  65. package/lib/util.d.ts +11 -0
  66. package/lib/util.d.ts.map +1 -0
  67. package/lib/util.js +69 -0
  68. package/lib/util.js.map +1 -0
  69. package/package.json +30 -0
  70. package/src/global.d.ts +14 -0
  71. package/src/index.ts +35 -0
  72. package/src/main.js +1 -0
  73. package/src/metrics/base.ts +25 -0
  74. package/src/metrics/cls-metric.ts +68 -0
  75. package/src/metrics/fcp-metric.ts +16 -0
  76. package/src/metrics/fid-metric.ts +16 -0
  77. package/src/metrics/lcp-metric.ts +16 -0
  78. package/src/metrics/ttfb-metric.ts +16 -0
  79. package/src/types.d.ts +33 -0
  80. package/src/util.ts +58 -0
  81. package/umd/index.d.ts +1 -0
  82. package/umd/index.js +292 -0
  83. package/umd/index.js.map +1 -0
  84. package/umd/index.min.js +4 -0
  85. package/umd/index.min.js.map +1 -0
package/es/global.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ /* eslint-disable */
2
+ export {};
3
+
4
+ declare global {
5
+ interface Window {
6
+ SheInAppId: string;
7
+ SheInJSONP: any;
8
+ ForcePrintAnalysisLog: boolean;
9
+ sheinqPluginCall(type: string, info?: any): string;
10
+ apmLoadPlugin(url: string): void;
11
+ readonly crypto: ChromeCrypto;
12
+ uuidv4(): string; // 埋点注入的函数
13
+ }
14
+ }
package/es/index.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ Cumulative Layout Shift 累积布局偏移 (CLS) https://web.dev/cls/
3
+ 累积布局偏移 (CLS) 是测量视觉稳定性的一个以用户为中心的重要指标,因为该项指标有助于量化用户经历意外布局偏移的频率,较低的 CLS 有助于确保一个页面是令人愉悦的。
4
+
5
+ First Input Delay 首次输入延迟 (FID) https://web.dev/fid/
6
+ 首次输入延迟 (FID) 是测量加载响应度的一个以用户为中心的重要指标,因为该项指标将用户尝试与无响应页面进行交互时的体验进行了量化,低 FID 有助于让用户确信页面是有效的。
7
+
8
+ Largest Contentful Paint 最大内容绘制 (LCP) https://web.dev/lcp/
9
+ 最大内容绘制 (LCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在页面的主要内容基本加载完成时,在页面加载时间轴中标记出相应的点,迅捷的 LCP 有助于让用户确信页面是有效的。
10
+
11
+ Interaction to Next Paint (INP) [experimental] https://web.dev/inp/
12
+ Interaction to Next Paint (INP) is an experimental metric that assesses responsiveness. When an interaction causes a page to become unresponsive, that is a poor user experience. INP observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were below. A low INP means the page was consistently able to respond quickly to all—or the vast majority—of user interactions.
13
+
14
+ First Contentful Paint 首次内容绘制 (FCP) https://web.dev/fcp/
15
+ 首次内容绘制 (FCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在用户首次在屏幕上看到任何内容时,在页面加载时间轴中标记出相应的点,迅捷的 FCP 有助于让用户确信某些事情正在进行。
16
+
17
+ Time to First Byte 第一字节时间 (TTFB) https://web.dev/ttfb/
18
+ 第一字节时间 (TTFB) 是在实验室和现场测量连接建立时间和 Web 服务器响应能力的一个基础指标。它有助于识别 Web 服务器何时对请求的响应速度太慢。对 HTML 文档的请求,该指标先于其他所有的加载性能指标。
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
package/es/index.js ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ Cumulative Layout Shift 累积布局偏移 (CLS) https://web.dev/cls/
3
+ 累积布局偏移 (CLS) 是测量视觉稳定性的一个以用户为中心的重要指标,因为该项指标有助于量化用户经历意外布局偏移的频率,较低的 CLS 有助于确保一个页面是令人愉悦的。
4
+
5
+ First Input Delay 首次输入延迟 (FID) https://web.dev/fid/
6
+ 首次输入延迟 (FID) 是测量加载响应度的一个以用户为中心的重要指标,因为该项指标将用户尝试与无响应页面进行交互时的体验进行了量化,低 FID 有助于让用户确信页面是有效的。
7
+
8
+ Largest Contentful Paint 最大内容绘制 (LCP) https://web.dev/lcp/
9
+ 最大内容绘制 (LCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在页面的主要内容基本加载完成时,在页面加载时间轴中标记出相应的点,迅捷的 LCP 有助于让用户确信页面是有效的。
10
+
11
+ Interaction to Next Paint (INP) [experimental] https://web.dev/inp/
12
+ Interaction to Next Paint (INP) is an experimental metric that assesses responsiveness. When an interaction causes a page to become unresponsive, that is a poor user experience. INP observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were below. A low INP means the page was consistently able to respond quickly to all—or the vast majority—of user interactions.
13
+
14
+ First Contentful Paint 首次内容绘制 (FCP) https://web.dev/fcp/
15
+ 首次内容绘制 (FCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在用户首次在屏幕上看到任何内容时,在页面加载时间轴中标记出相应的点,迅捷的 FCP 有助于让用户确信某些事情正在进行。
16
+
17
+ Time to First Byte 第一字节时间 (TTFB) https://web.dev/ttfb/
18
+ 第一字节时间 (TTFB) 是在实验室和现场测量连接建立时间和 Web 服务器响应能力的一个基础指标。它有助于识别 Web 服务器何时对请求的响应速度太慢。对 HTML 文档的请求,该指标先于其他所有的加载性能指标。
19
+ */
20
+
21
+ import { ApmClsMetric } from "./metrics/cls-metric";
22
+ import { ApmFcpMetric } from "./metrics/fcp-metric";
23
+ import { ApmFidMetric } from "./metrics/fid-metric";
24
+ import { ApmLcpMetric } from "./metrics/lcp-metric";
25
+ import { ApmTtfbMetric } from "./metrics/ttfb-metric";
26
+ function register() {
27
+ new ApmClsMetric({
28
+ reportAllChanges: true
29
+ });
30
+ new ApmFcpMetric();
31
+ new ApmFidMetric();
32
+ new ApmLcpMetric();
33
+ new ApmTtfbMetric();
34
+ }
35
+ register();
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["ApmClsMetric","ApmFcpMetric","ApmFidMetric","ApmLcpMetric","ApmTtfbMetric","register","reportAllChanges"],"sources":["../index.ts"],"sourcesContent":["/**\n Cumulative Layout Shift 累积布局偏移 (CLS) https://web.dev/cls/\n 累积布局偏移 (CLS) 是测量视觉稳定性的一个以用户为中心的重要指标,因为该项指标有助于量化用户经历意外布局偏移的频率,较低的 CLS 有助于确保一个页面是令人愉悦的。\n\n First Input Delay 首次输入延迟 (FID) https://web.dev/fid/\n 首次输入延迟 (FID) 是测量加载响应度的一个以用户为中心的重要指标,因为该项指标将用户尝试与无响应页面进行交互时的体验进行了量化,低 FID 有助于让用户确信页面是有效的。\n \n Largest Contentful Paint 最大内容绘制 (LCP) https://web.dev/lcp/\n 最大内容绘制 (LCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在页面的主要内容基本加载完成时,在页面加载时间轴中标记出相应的点,迅捷的 LCP 有助于让用户确信页面是有效的。\n\n Interaction to Next Paint (INP) [experimental] https://web.dev/inp/\n Interaction to Next Paint (INP) is an experimental metric that assesses responsiveness. When an interaction causes a page to become unresponsive, that is a poor user experience. INP observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were below. A low INP means the page was consistently able to respond quickly to all—or the vast majority—of user interactions.\n\n First Contentful Paint 首次内容绘制 (FCP) https://web.dev/fcp/\n 首次内容绘制 (FCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在用户首次在屏幕上看到任何内容时,在页面加载时间轴中标记出相应的点,迅捷的 FCP 有助于让用户确信某些事情正在进行。\n\n Time to First Byte 第一字节时间 (TTFB) https://web.dev/ttfb/\n 第一字节时间 (TTFB) 是在实验室和现场测量连接建立时间和 Web 服务器响应能力的一个基础指标。它有助于识别 Web 服务器何时对请求的响应速度太慢。对 HTML 文档的请求,该指标先于其他所有的加载性能指标。\n */\n\nimport { ApmClsMetric } from './metrics/cls-metric';\nimport { ApmFcpMetric } from './metrics/fcp-metric';\nimport { ApmFidMetric } from './metrics/fid-metric';\nimport { ApmLcpMetric } from './metrics/lcp-metric';\nimport { ApmTtfbMetric } from './metrics/ttfb-metric';\n\nfunction register() {\n new ApmClsMetric({ reportAllChanges: true });\n new ApmFcpMetric();\n new ApmFidMetric();\n new ApmLcpMetric();\n new ApmTtfbMetric();\n}\n\nregister();\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,YAAY;AACrB,SAASC,YAAY;AACrB,SAASC,YAAY;AACrB,SAASC,YAAY;AACrB,SAASC,aAAa;AAEtB,SAASC,QAAQ,GAAG;EAClB,IAAIL,YAAY,CAAC;IAAEM,gBAAgB,EAAE;EAAK,CAAC,CAAC;EAC5C,IAAIL,YAAY,EAAE;EAClB,IAAIC,YAAY,EAAE;EAClB,IAAIC,YAAY,EAAE;EAClB,IAAIC,aAAa,EAAE;AACrB;AAEAC,QAAQ,EAAE"}
@@ -0,0 +1,9 @@
1
+ import { Metric, ReportOpts } from 'web-vitals';
2
+ declare class MetricBase {
3
+ metricName: Metric['name'];
4
+ reportOpts?: ReportOpts;
5
+ constructor(_metricName: Metric['name'], _reportOpts?: ReportOpts);
6
+ push(metric: Metric): void;
7
+ }
8
+ export { MetricBase };
9
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/metrics/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhD,cAAM,UAAU;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;gBACZ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU;IAKjE,IAAI,CAAC,MAAM,EAAE,MAAM;CAWpB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { sendEvent, sendWebVitals } from "../util";
2
+ class MetricBase {
3
+ constructor(_metricName, _reportOpts) {
4
+ this.metricName = void 0;
5
+ this.reportOpts = void 0;
6
+ this.metricName = _metricName;
7
+ this.reportOpts = _reportOpts;
8
+ }
9
+ push(metric) {
10
+ var name = metric.name,
11
+ value = metric.value;
12
+ console.log('===产生 web-vitals ', name, metric);
13
+ var key = name.toLowerCase();
14
+ sendWebVitals(name.toLowerCase(), Math.round(value));
15
+ sendEvent({
16
+ eventCategory: 'web-vitals',
17
+ eventAction: key,
18
+ value: Math.round(value)
19
+ });
20
+ }
21
+ }
22
+ export { MetricBase };
23
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","names":["sendEvent","sendWebVitals","MetricBase","constructor","_metricName","_reportOpts","metricName","reportOpts","push","metric","name","value","console","log","key","toLowerCase","Math","round","eventCategory","eventAction"],"sources":["../../base.ts"],"sourcesContent":["import { sendEvent, sendWebVitals } from '@/util';\nimport { Metric, ReportOpts } from 'web-vitals';\n\nclass MetricBase {\n metricName: Metric['name'];\n reportOpts?: ReportOpts;\n constructor(_metricName: Metric['name'], _reportOpts?: ReportOpts) {\n this.metricName = _metricName;\n this.reportOpts = _reportOpts;\n }\n\n push(metric: Metric) {\n const { name, value } = metric;\n console.log('===产生 web-vitals ', name, metric);\n const key = name.toLowerCase();\n sendWebVitals(name.toLowerCase(), Math.round(value));\n sendEvent({\n eventCategory: 'web-vitals',\n eventAction: key,\n value: Math.round(value),\n });\n }\n}\n\nexport { MetricBase };\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,aAAa;AAGjC,MAAMC,UAAU,CAAC;EAGfC,WAAW,CAACC,WAA2B,EAAEC,WAAwB,EAAE;IAAA,KAFnEC,UAAU;IAAA,KACVC,UAAU;IAER,IAAI,CAACD,UAAU,GAAGF,WAAW;IAC7B,IAAI,CAACG,UAAU,GAAGF,WAAW;EAC/B;EAEAG,IAAI,CAACC,MAAc,EAAE;IACnB,IAAQC,IAAI,GAAYD,MAAM,CAAtBC,IAAI;MAAEC,KAAK,GAAKF,MAAM,CAAhBE,KAAK;IACnBC,OAAO,CAACC,GAAG,CAAC,mBAAmB,EAAEH,IAAI,EAAED,MAAM,CAAC;IAC9C,IAAMK,GAAG,GAAGJ,IAAI,CAACK,WAAW,EAAE;IAC9Bd,aAAa,CAACS,IAAI,CAACK,WAAW,EAAE,EAAEC,IAAI,CAACC,KAAK,CAACN,KAAK,CAAC,CAAC;IACpDX,SAAS,CAAC;MACRkB,aAAa,EAAE,YAAY;MAC3BC,WAAW,EAAEL,GAAG;MAChBH,KAAK,EAAEK,IAAI,CAACC,KAAK,CAACN,KAAK;IACzB,CAAC,CAAC;EACJ;AACF;AAEA,SAAST,UAAU"}
@@ -0,0 +1,12 @@
1
+ import { ApmMetricClass, ClsMetricWithPage } from '@/types';
2
+ import { CLSMetric, ReportOpts } from 'web-vitals';
3
+ import { MetricBase } from './base';
4
+ declare class ApmClsMetric extends MetricBase implements ApmMetricClass {
5
+ cache: ClsMetricWithPage[];
6
+ constructor(reportOpts?: ReportOpts);
7
+ init(): void;
8
+ handleCls: (_metric: CLSMetric) => void;
9
+ calCache: () => void;
10
+ }
11
+ export { ApmClsMetric };
12
+ //# sourceMappingURL=cls-metric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cls-metric.d.ts","sourceRoot":"","sources":["../../src/metrics/cls-metric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAE,SAAS,EAA4B,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,cAAM,YAAa,SAAQ,UAAW,YAAW,cAAc;IAC7D,KAAK,EAAE,iBAAiB,EAAE,CAAC;gBAEf,UAAU,CAAC,EAAE,UAAU;IAMnC,IAAI;IAgBJ,SAAS,YAAa,SAAS,KAAG,IAAI,CAapC;IAEF,QAAQ,QAAO,IAAI,CAmBjB;CACH;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,82 @@
1
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
2
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
4
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
8
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
+ import { getPage, onHidden, sendEvent, sendWebVitals } from "../util";
10
+ import { onCLS } from 'web-vitals';
11
+ import { MetricBase } from "./base";
12
+ class ApmClsMetric extends MetricBase {
13
+ constructor(reportOpts) {
14
+ super('CLS', reportOpts);
15
+ this.cache = void 0;
16
+ this.handleCls = _metric => {
17
+ var page = getPage();
18
+ var metric = _objectSpread(_objectSpread({}, _metric), {}, {
19
+ page
20
+ });
21
+ var cache = this.cache;
22
+ var len = cache.length;
23
+ // 如果cache长度为空,或者cache的最后一个数据的page和传入metric的page一样,则直接进入缓存
24
+ if (len === 0 || cache[len - 1].page == metric.page) {
25
+ this.cache.push(metric);
26
+ return;
27
+ }
28
+ // page变化的时候,把积累的缓存cls列表 累加计算,发送埋点
29
+ this.calCache();
30
+ // console.log('==== send web-vitals ', this.cache.length, page, metric.delta);
31
+ };
32
+ this.calCache = () => {
33
+ var metrics = this.cache.slice();
34
+ this.cache = [];
35
+ var sumDelta = 0;
36
+ var _iterator = _createForOfIteratorHelper(metrics),
37
+ _step;
38
+ try {
39
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
40
+ var m = _step.value;
41
+ sumDelta += m.delta;
42
+ }
43
+ } catch (err) {
44
+ _iterator.e(err);
45
+ } finally {
46
+ _iterator.f();
47
+ }
48
+ var totalDelta = Math.round(sumDelta * 1000);
49
+ // 忽略掉非常小的cls
50
+ if (totalDelta === 0) return;
51
+ sendWebVitals(metrics[0].name.toLowerCase(), totalDelta, {
52
+ page_name: metrics[0].page
53
+ });
54
+ sendEvent({
55
+ eventCategory: 'web-vitals',
56
+ eventAction: 'cls-page',
57
+ value: totalDelta,
58
+ page: metrics[0].page
59
+ });
60
+ };
61
+ this.cache = [];
62
+ this.init();
63
+ }
64
+ init() {
65
+ onCLS(this.handleCls, this.reportOpts);
66
+ // 用户切换tab 也发送积压的数据
67
+ onHidden(_ => {
68
+ if (this.cache.length > 0) {
69
+ this.calCache();
70
+ }
71
+ });
72
+ // onPageChange((_: Event) => {
73
+ // console.log('==== send web-vitals onPageChange', _.type);
74
+ // if (this.cache.length > 0) {
75
+ // this.calCache();
76
+ // }
77
+ // });
78
+ }
79
+ }
80
+
81
+ export { ApmClsMetric };
82
+ //# sourceMappingURL=cls-metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cls-metric.js","names":["getPage","onHidden","sendEvent","sendWebVitals","onCLS","MetricBase","ApmClsMetric","constructor","reportOpts","cache","handleCls","_metric","page","metric","len","length","push","calCache","metrics","slice","sumDelta","m","delta","totalDelta","Math","round","name","toLowerCase","page_name","eventCategory","eventAction","value","init","_"],"sources":["../../cls-metric.ts"],"sourcesContent":["import { ApmMetricClass, ClsMetricWithPage } from '@/types';\nimport { getPage, onHidden, sendEvent, sendWebVitals } from '@/util';\nimport { CLSMetric, CLSReportCallback, onCLS, ReportOpts } from 'web-vitals';\nimport { MetricBase } from './base';\n\nclass ApmClsMetric extends MetricBase implements ApmMetricClass {\n cache: ClsMetricWithPage[];\n\n constructor(reportOpts?: ReportOpts) {\n super('CLS', reportOpts);\n this.cache = [];\n this.init();\n }\n\n init() {\n onCLS(this.handleCls as CLSReportCallback, this.reportOpts);\n // 用户切换tab 也发送积压的数据\n onHidden((_: Event) => {\n if (this.cache.length > 0) {\n this.calCache();\n }\n });\n // onPageChange((_: Event) => {\n // console.log('==== send web-vitals onPageChange', _.type);\n // if (this.cache.length > 0) {\n // this.calCache();\n // }\n // });\n }\n\n handleCls = (_metric: CLSMetric): void => {\n const page = getPage();\n const metric: ClsMetricWithPage = { ..._metric, page };\n const cache = this.cache;\n const len = cache.length;\n // 如果cache长度为空,或者cache的最后一个数据的page和传入metric的page一样,则直接进入缓存\n if (len === 0 || cache[len - 1].page == metric.page) {\n this.cache.push(metric);\n return;\n }\n // page变化的时候,把积累的缓存cls列表 累加计算,发送埋点\n this.calCache();\n // console.log('==== send web-vitals ', this.cache.length, page, metric.delta);\n };\n\n calCache = (): void => {\n const metrics = this.cache.slice();\n this.cache = [];\n let sumDelta = 0;\n for (const m of metrics) {\n sumDelta += m.delta;\n }\n const totalDelta = Math.round(sumDelta * 1000);\n // 忽略掉非常小的cls\n if (totalDelta === 0) return;\n sendWebVitals(metrics[0].name.toLowerCase(), totalDelta, {\n page_name: metrics[0].page,\n });\n sendEvent({\n eventCategory: 'web-vitals',\n eventAction: 'cls-page',\n value: totalDelta,\n page: metrics[0].page,\n });\n };\n}\n\nexport { ApmClsMetric };\n"],"mappings":";;;;;;;;AACA,SAASA,OAAO,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,aAAa;AACpD,SAAuCC,KAAK,QAAoB,YAAY;AAC5E,SAASC,UAAU;AAEnB,MAAMC,YAAY,SAASD,UAAU,CAA2B;EAG9DE,WAAW,CAACC,UAAuB,EAAE;IACnC,KAAK,CAAC,KAAK,EAAEA,UAAU,CAAC;IAAC,KAH3BC,KAAK;IAAA,KAwBLC,SAAS,GAAIC,OAAkB,IAAW;MACxC,IAAMC,IAAI,GAAGZ,OAAO,EAAE;MACtB,IAAMa,MAAyB,mCAAQF,OAAO;QAAEC;MAAI,EAAE;MACtD,IAAMH,KAAK,GAAG,IAAI,CAACA,KAAK;MACxB,IAAMK,GAAG,GAAGL,KAAK,CAACM,MAAM;MACxB;MACA,IAAID,GAAG,KAAK,CAAC,IAAIL,KAAK,CAACK,GAAG,GAAG,CAAC,CAAC,CAACF,IAAI,IAAIC,MAAM,CAACD,IAAI,EAAE;QACnD,IAAI,CAACH,KAAK,CAACO,IAAI,CAACH,MAAM,CAAC;QACvB;MACF;MACA;MACA,IAAI,CAACI,QAAQ,EAAE;MACf;IACF,CAAC;IAAA,KAEDA,QAAQ,GAAG,MAAY;MACrB,IAAMC,OAAO,GAAG,IAAI,CAACT,KAAK,CAACU,KAAK,EAAE;MAClC,IAAI,CAACV,KAAK,GAAG,EAAE;MACf,IAAIW,QAAQ,GAAG,CAAC;MAAC,2CACDF,OAAO;QAAA;MAAA;QAAvB,oDAAyB;UAAA,IAAdG,CAAC;UACVD,QAAQ,IAAIC,CAAC,CAACC,KAAK;QACrB;MAAC;QAAA;MAAA;QAAA;MAAA;MACD,IAAMC,UAAU,GAAGC,IAAI,CAACC,KAAK,CAACL,QAAQ,GAAG,IAAI,CAAC;MAC9C;MACA,IAAIG,UAAU,KAAK,CAAC,EAAE;MACtBpB,aAAa,CAACe,OAAO,CAAC,CAAC,CAAC,CAACQ,IAAI,CAACC,WAAW,EAAE,EAAEJ,UAAU,EAAE;QACvDK,SAAS,EAAEV,OAAO,CAAC,CAAC,CAAC,CAACN;MACxB,CAAC,CAAC;MACFV,SAAS,CAAC;QACR2B,aAAa,EAAE,YAAY;QAC3BC,WAAW,EAAE,UAAU;QACvBC,KAAK,EAAER,UAAU;QACjBX,IAAI,EAAEM,OAAO,CAAC,CAAC,CAAC,CAACN;MACnB,CAAC,CAAC;IACJ,CAAC;IAtDC,IAAI,CAACH,KAAK,GAAG,EAAE;IACf,IAAI,CAACuB,IAAI,EAAE;EACb;EAEAA,IAAI,GAAG;IACL5B,KAAK,CAAC,IAAI,CAACM,SAAS,EAAuB,IAAI,CAACF,UAAU,CAAC;IAC3D;IACAP,QAAQ,CAAEgC,CAAQ,IAAK;MACrB,IAAI,IAAI,CAACxB,KAAK,CAACM,MAAM,GAAG,CAAC,EAAE;QACzB,IAAI,CAACE,QAAQ,EAAE;MACjB;IACF,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA;IACA;EACF;AAqCF;;AAEA,SAASX,YAAY"}
@@ -0,0 +1,9 @@
1
+ import { ApmMetricClass } from '@/types';
2
+ import { ReportOpts } from 'web-vitals';
3
+ import { MetricBase } from './base';
4
+ declare class ApmFcpMetric extends MetricBase implements ApmMetricClass {
5
+ constructor(reportOpts?: ReportOpts);
6
+ init(): void;
7
+ }
8
+ export { ApmFcpMetric };
9
+ //# sourceMappingURL=fcp-metric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fcp-metric.d.ts","sourceRoot":"","sources":["../../src/metrics/fcp-metric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,UAAU,EAAS,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,cAAM,YAAa,SAAQ,UAAW,YAAW,cAAc;gBACjD,UAAU,CAAC,EAAE,UAAU;IAKnC,IAAI;CAGL;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { onFCP } from 'web-vitals';
2
+ import { MetricBase } from "./base";
3
+ class ApmFcpMetric extends MetricBase {
4
+ constructor(reportOpts) {
5
+ super('FCP', reportOpts);
6
+ this.init();
7
+ }
8
+ init() {
9
+ onFCP(this.push, this.reportOpts);
10
+ }
11
+ }
12
+ export { ApmFcpMetric };
13
+ //# sourceMappingURL=fcp-metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fcp-metric.js","names":["onFCP","MetricBase","ApmFcpMetric","constructor","reportOpts","init","push"],"sources":["../../fcp-metric.ts"],"sourcesContent":["import { ApmMetricClass } from '@/types';\nimport { ReportOpts, onFCP } from 'web-vitals';\nimport { MetricBase } from './base';\n\nclass ApmFcpMetric extends MetricBase implements ApmMetricClass {\n constructor(reportOpts?: ReportOpts) {\n super('FCP', reportOpts);\n this.init();\n }\n\n init() {\n onFCP(this.push, this.reportOpts);\n }\n}\n\nexport { ApmFcpMetric };\n"],"mappings":"AACA,SAAqBA,KAAK,QAAQ,YAAY;AAC9C,SAASC,UAAU;AAEnB,MAAMC,YAAY,SAASD,UAAU,CAA2B;EAC9DE,WAAW,CAACC,UAAuB,EAAE;IACnC,KAAK,CAAC,KAAK,EAAEA,UAAU,CAAC;IACxB,IAAI,CAACC,IAAI,EAAE;EACb;EAEAA,IAAI,GAAG;IACLL,KAAK,CAAC,IAAI,CAACM,IAAI,EAAE,IAAI,CAACF,UAAU,CAAC;EACnC;AACF;AAEA,SAASF,YAAY"}
@@ -0,0 +1,9 @@
1
+ import { ApmMetricClass } from '@/types';
2
+ import { ReportOpts } from 'web-vitals';
3
+ import { MetricBase } from './base';
4
+ declare class ApmFidMetric extends MetricBase implements ApmMetricClass {
5
+ constructor(reportOpts?: ReportOpts);
6
+ init(): void;
7
+ }
8
+ export { ApmFidMetric };
9
+ //# sourceMappingURL=fid-metric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fid-metric.d.ts","sourceRoot":"","sources":["../../src/metrics/fid-metric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,UAAU,EAAS,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,cAAM,YAAa,SAAQ,UAAW,YAAW,cAAc;gBACjD,UAAU,CAAC,EAAE,UAAU;IAKnC,IAAI;CAGL;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { onFID } from 'web-vitals';
2
+ import { MetricBase } from "./base";
3
+ class ApmFidMetric extends MetricBase {
4
+ constructor(reportOpts) {
5
+ super('FID', reportOpts);
6
+ this.init();
7
+ }
8
+ init() {
9
+ onFID(this.push, this.reportOpts);
10
+ }
11
+ }
12
+ export { ApmFidMetric };
13
+ //# sourceMappingURL=fid-metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fid-metric.js","names":["onFID","MetricBase","ApmFidMetric","constructor","reportOpts","init","push"],"sources":["../../fid-metric.ts"],"sourcesContent":["import { ApmMetricClass } from '@/types';\nimport { ReportOpts, onFID } from 'web-vitals';\nimport { MetricBase } from './base';\n\nclass ApmFidMetric extends MetricBase implements ApmMetricClass {\n constructor(reportOpts?: ReportOpts) {\n super('FID', reportOpts);\n this.init();\n }\n\n init() {\n onFID(this.push, this.reportOpts);\n }\n}\n\nexport { ApmFidMetric };\n"],"mappings":"AACA,SAAqBA,KAAK,QAAQ,YAAY;AAC9C,SAASC,UAAU;AAEnB,MAAMC,YAAY,SAASD,UAAU,CAA2B;EAC9DE,WAAW,CAACC,UAAuB,EAAE;IACnC,KAAK,CAAC,KAAK,EAAEA,UAAU,CAAC;IACxB,IAAI,CAACC,IAAI,EAAE;EACb;EAEAA,IAAI,GAAG;IACLL,KAAK,CAAC,IAAI,CAACM,IAAI,EAAE,IAAI,CAACF,UAAU,CAAC;EACnC;AACF;AAEA,SAASF,YAAY"}
@@ -0,0 +1,9 @@
1
+ import { ApmMetricClass } from '@/types';
2
+ import { ReportOpts } from 'web-vitals';
3
+ import { MetricBase } from './base';
4
+ declare class ApmLcpMetric extends MetricBase implements ApmMetricClass {
5
+ constructor(reportOpts?: ReportOpts);
6
+ init(): void;
7
+ }
8
+ export { ApmLcpMetric };
9
+ //# sourceMappingURL=lcp-metric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lcp-metric.d.ts","sourceRoot":"","sources":["../../src/metrics/lcp-metric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAS,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,cAAM,YAAa,SAAQ,UAAW,YAAW,cAAc;gBACjD,UAAU,CAAC,EAAE,UAAU;IAKnC,IAAI;CAGL;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { onLCP } from 'web-vitals';
2
+ import { MetricBase } from "./base";
3
+ class ApmLcpMetric extends MetricBase {
4
+ constructor(reportOpts) {
5
+ super('LCP', reportOpts);
6
+ this.init();
7
+ }
8
+ init() {
9
+ onLCP(this.push, this.reportOpts);
10
+ }
11
+ }
12
+ export { ApmLcpMetric };
13
+ //# sourceMappingURL=lcp-metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lcp-metric.js","names":["onLCP","MetricBase","ApmLcpMetric","constructor","reportOpts","init","push"],"sources":["../../lcp-metric.ts"],"sourcesContent":["import { ApmMetricClass } from '@/types';\nimport { onLCP, ReportOpts } from 'web-vitals';\nimport { MetricBase } from './base';\n\nclass ApmLcpMetric extends MetricBase implements ApmMetricClass {\n constructor(reportOpts?: ReportOpts) {\n super('LCP', reportOpts);\n this.init();\n }\n\n init() {\n onLCP(this.push, this.reportOpts);\n }\n}\n\nexport { ApmLcpMetric };\n"],"mappings":"AACA,SAASA,KAAK,QAAoB,YAAY;AAC9C,SAASC,UAAU;AAEnB,MAAMC,YAAY,SAASD,UAAU,CAA2B;EAC9DE,WAAW,CAACC,UAAuB,EAAE;IACnC,KAAK,CAAC,KAAK,EAAEA,UAAU,CAAC;IACxB,IAAI,CAACC,IAAI,EAAE;EACb;EAEAA,IAAI,GAAG;IACLL,KAAK,CAAC,IAAI,CAACM,IAAI,EAAE,IAAI,CAACF,UAAU,CAAC;EACnC;AACF;AAEA,SAASF,YAAY"}
@@ -0,0 +1,9 @@
1
+ import { ApmMetricClass } from '@/types';
2
+ import { ReportOpts } from 'web-vitals';
3
+ import { MetricBase } from './base';
4
+ declare class ApmTtfbMetric extends MetricBase implements ApmMetricClass {
5
+ constructor(reportOpts?: ReportOpts);
6
+ init(): void;
7
+ }
8
+ export { ApmTtfbMetric };
9
+ //# sourceMappingURL=ttfb-metric.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ttfb-metric.d.ts","sourceRoot":"","sources":["../../src/metrics/ttfb-metric.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,UAAU,EAAU,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,cAAM,aAAc,SAAQ,UAAW,YAAW,cAAc;gBAClD,UAAU,CAAC,EAAE,UAAU;IAKnC,IAAI;CAGL;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { onTTFB } from 'web-vitals';
2
+ import { MetricBase } from "./base";
3
+ class ApmTtfbMetric extends MetricBase {
4
+ constructor(reportOpts) {
5
+ super('TTFB', reportOpts);
6
+ this.init();
7
+ }
8
+ init() {
9
+ onTTFB(this.push, this.reportOpts);
10
+ }
11
+ }
12
+ export { ApmTtfbMetric };
13
+ //# sourceMappingURL=ttfb-metric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ttfb-metric.js","names":["onTTFB","MetricBase","ApmTtfbMetric","constructor","reportOpts","init","push"],"sources":["../../ttfb-metric.ts"],"sourcesContent":["import { ApmMetricClass } from '@/types';\nimport { ReportOpts, onTTFB } from 'web-vitals';\nimport { MetricBase } from './base';\n\nclass ApmTtfbMetric extends MetricBase implements ApmMetricClass {\n constructor(reportOpts?: ReportOpts) {\n super('TTFB', reportOpts);\n this.init();\n }\n\n init() {\n onTTFB(this.push, this.reportOpts);\n }\n}\n\nexport { ApmTtfbMetric };\n"],"mappings":"AACA,SAAqBA,MAAM,QAAQ,YAAY;AAC/C,SAASC,UAAU;AAEnB,MAAMC,aAAa,SAASD,UAAU,CAA2B;EAC/DE,WAAW,CAACC,UAAuB,EAAE;IACnC,KAAK,CAAC,MAAM,EAAEA,UAAU,CAAC;IACzB,IAAI,CAACC,IAAI,EAAE;EACb;EAEAA,IAAI,GAAG;IACLL,MAAM,CAAC,IAAI,CAACM,IAAI,EAAE,IAAI,CAACF,UAAU,CAAC;EACpC;AACF;AAEA,SAASF,aAAa"}
package/es/types.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ import { CLSMetric } from 'web-vitals';
2
+
3
+ export interface WebVitalsInfo {
4
+ data: {
5
+ key: string;
6
+ value: number;
7
+ };
8
+ }
9
+
10
+ export interface ApmMetricClass {
11
+ metricName: Metric['name'];
12
+ reportOpts?: ReportOpts;
13
+ init(): void;
14
+ push(metirc: Metric): void;
15
+ }
16
+
17
+ export interface EventInfo {
18
+ eventCategory: 'web-vitals';
19
+ eventAction: string;
20
+ eventLabel?: string;
21
+ eventValue?: string;
22
+ eventValueBatch?: string[];
23
+ value: number;
24
+ page?: string;
25
+ }
26
+
27
+ export interface ClsMetricWithPage extends CLSMetric {
28
+ page: string;
29
+ }
30
+
31
+ export interface OnEventCallback {
32
+ (event: Event): void;
33
+ }
package/es/util.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { EventInfo, OnEventCallback } from './types';
2
+ export declare function sendWebVitals(key: string, value: number, otherInfo?: object): void;
3
+ export declare function sendEvent(e: EventInfo): void;
4
+ export declare function getPage(): string;
5
+ /**
6
+ *
7
+ * @param cb
8
+ * @param once
9
+ */
10
+ export declare const onHidden: (cb: OnEventCallback, once?: boolean) => void;
11
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAiB,MAAM,SAAS,CAAC;AAEpE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,QAU3E;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,SAAS,QAGrC;AAED,wBAAgB,OAAO,WAGtB;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,OAAQ,eAAe,SAAS,OAAO,SAc3D,CAAC"}
package/es/util.js ADDED
@@ -0,0 +1,59 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
+ export function sendWebVitals(key, value, otherInfo) {
7
+ if (!key || !window.sheinqPluginCall) return;
8
+ var info = _objectSpread(_objectSpread({}, otherInfo), {}, {
9
+ data: {
10
+ key,
11
+ value
12
+ }
13
+ });
14
+ window.sheinqPluginCall('web-vitals', info);
15
+ }
16
+ export function sendEvent(e) {
17
+ if (!window.sheinqPluginCall) return;
18
+ window.sheinqPluginCall('event', e);
19
+ }
20
+ export function getPage() {
21
+ if (!window.sheinqPluginCall) return '';
22
+ return window.sheinqPluginCall('getPage') || '';
23
+ }
24
+
25
+ /**
26
+ *
27
+ * @param cb
28
+ * @param once
29
+ */
30
+ export var onHidden = (cb, once) => {
31
+ var onHiddenOrPageHide = event => {
32
+ if (event.type === 'pagehide' || document.visibilityState === 'hidden') {
33
+ cb(event);
34
+ if (once) {
35
+ removeEventListener('visibilitychange', onHiddenOrPageHide, true);
36
+ removeEventListener('pagehide', onHiddenOrPageHide, true);
37
+ }
38
+ }
39
+ };
40
+ addEventListener('visibilitychange', onHiddenOrPageHide, true);
41
+ // Some browsers have buggy implementations of visibilitychange,
42
+ // so we use pagehide in addition, just to be safe.
43
+ addEventListener('pagehide', onHiddenOrPageHide, true);
44
+ };
45
+
46
+ // export const onPageChange = (cb: OnEventCallback, once?: boolean) => {
47
+ // const _onPageChange = (event: Event) => {
48
+ // cb(event);
49
+ // if (once) {
50
+ // removeEventListener('visibilitychange', _onPageChange, true);
51
+ // removeEventListener('pagehide', _onPageChange, true);
52
+ // }
53
+ // };
54
+ // window.addEventListener('replaceState', _onPageChange, true);
55
+ // window.addEventListener('pushState', _onPageChange, true);
56
+ // window.addEventListener('hashchange', _onPageChange, true);
57
+ // window.addEventListener('popstate', _onPageChange, true);
58
+ // };
59
+ //# sourceMappingURL=util.js.map
package/es/util.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","names":["sendWebVitals","key","value","otherInfo","window","sheinqPluginCall","info","data","sendEvent","e","getPage","onHidden","cb","once","onHiddenOrPageHide","event","type","document","visibilityState","removeEventListener","addEventListener"],"sources":["../util.ts"],"sourcesContent":["import { EventInfo, OnEventCallback, WebVitalsInfo } from './types';\n\nexport function sendWebVitals(key: string, value: number, otherInfo?: object) {\n if (!key || !window.sheinqPluginCall) return;\n const info: WebVitalsInfo = {\n ...otherInfo,\n data: {\n key,\n value,\n },\n };\n window.sheinqPluginCall('web-vitals', info);\n}\n\nexport function sendEvent(e: EventInfo) {\n if (!window.sheinqPluginCall) return;\n window.sheinqPluginCall('event', e);\n}\n\nexport function getPage() {\n if (!window.sheinqPluginCall) return '';\n return window.sheinqPluginCall('getPage') || '';\n}\n\n/**\n *\n * @param cb\n * @param once\n */\nexport const onHidden = (cb: OnEventCallback, once?: boolean) => {\n const onHiddenOrPageHide = (event: Event) => {\n if (event.type === 'pagehide' || document.visibilityState === 'hidden') {\n cb(event);\n if (once) {\n removeEventListener('visibilitychange', onHiddenOrPageHide, true);\n removeEventListener('pagehide', onHiddenOrPageHide, true);\n }\n }\n };\n addEventListener('visibilitychange', onHiddenOrPageHide, true);\n // Some browsers have buggy implementations of visibilitychange,\n // so we use pagehide in addition, just to be safe.\n addEventListener('pagehide', onHiddenOrPageHide, true);\n};\n\n// export const onPageChange = (cb: OnEventCallback, once?: boolean) => {\n// const _onPageChange = (event: Event) => {\n// cb(event);\n// if (once) {\n// removeEventListener('visibilitychange', _onPageChange, true);\n// removeEventListener('pagehide', _onPageChange, true);\n// }\n// };\n// window.addEventListener('replaceState', _onPageChange, true);\n// window.addEventListener('pushState', _onPageChange, true);\n// window.addEventListener('hashchange', _onPageChange, true);\n// window.addEventListener('popstate', _onPageChange, true);\n// };\n"],"mappings":";;;;;AAEA,OAAO,SAASA,aAAa,CAACC,GAAW,EAAEC,KAAa,EAAEC,SAAkB,EAAE;EAC5E,IAAI,CAACF,GAAG,IAAI,CAACG,MAAM,CAACC,gBAAgB,EAAE;EACtC,IAAMC,IAAmB,mCACpBH,SAAS;IACZI,IAAI,EAAE;MACJN,GAAG;MACHC;IACF;EAAC,EACF;EACDE,MAAM,CAACC,gBAAgB,CAAC,YAAY,EAAEC,IAAI,CAAC;AAC7C;AAEA,OAAO,SAASE,SAAS,CAACC,CAAY,EAAE;EACtC,IAAI,CAACL,MAAM,CAACC,gBAAgB,EAAE;EAC9BD,MAAM,CAACC,gBAAgB,CAAC,OAAO,EAAEI,CAAC,CAAC;AACrC;AAEA,OAAO,SAASC,OAAO,GAAG;EACxB,IAAI,CAACN,MAAM,CAACC,gBAAgB,EAAE,OAAO,EAAE;EACvC,OAAOD,MAAM,CAACC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE;AACjD;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMM,QAAQ,GAAG,CAACC,EAAmB,EAAEC,IAAc,KAAK;EAC/D,IAAMC,kBAAkB,GAAIC,KAAY,IAAK;IAC3C,IAAIA,KAAK,CAACC,IAAI,KAAK,UAAU,IAAIC,QAAQ,CAACC,eAAe,KAAK,QAAQ,EAAE;MACtEN,EAAE,CAACG,KAAK,CAAC;MACT,IAAIF,IAAI,EAAE;QACRM,mBAAmB,CAAC,kBAAkB,EAAEL,kBAAkB,EAAE,IAAI,CAAC;QACjEK,mBAAmB,CAAC,UAAU,EAAEL,kBAAkB,EAAE,IAAI,CAAC;MAC3D;IACF;EACF,CAAC;EACDM,gBAAgB,CAAC,kBAAkB,EAAEN,kBAAkB,EAAE,IAAI,CAAC;EAC9D;EACA;EACAM,gBAAgB,CAAC,UAAU,EAAEN,kBAAkB,EAAE,IAAI,CAAC;AACxD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1,14 @@
1
+ /* eslint-disable */
2
+ export {};
3
+
4
+ declare global {
5
+ interface Window {
6
+ SheInAppId: string;
7
+ SheInJSONP: any;
8
+ ForcePrintAnalysisLog: boolean;
9
+ sheinqPluginCall(type: string, info?: any): string;
10
+ apmLoadPlugin(url: string): void;
11
+ readonly crypto: ChromeCrypto;
12
+ uuidv4(): string; // 埋点注入的函数
13
+ }
14
+ }
package/lib/index.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ /**
2
+ Cumulative Layout Shift 累积布局偏移 (CLS) https://web.dev/cls/
3
+ 累积布局偏移 (CLS) 是测量视觉稳定性的一个以用户为中心的重要指标,因为该项指标有助于量化用户经历意外布局偏移的频率,较低的 CLS 有助于确保一个页面是令人愉悦的。
4
+
5
+ First Input Delay 首次输入延迟 (FID) https://web.dev/fid/
6
+ 首次输入延迟 (FID) 是测量加载响应度的一个以用户为中心的重要指标,因为该项指标将用户尝试与无响应页面进行交互时的体验进行了量化,低 FID 有助于让用户确信页面是有效的。
7
+
8
+ Largest Contentful Paint 最大内容绘制 (LCP) https://web.dev/lcp/
9
+ 最大内容绘制 (LCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在页面的主要内容基本加载完成时,在页面加载时间轴中标记出相应的点,迅捷的 LCP 有助于让用户确信页面是有效的。
10
+
11
+ Interaction to Next Paint (INP) [experimental] https://web.dev/inp/
12
+ Interaction to Next Paint (INP) is an experimental metric that assesses responsiveness. When an interaction causes a page to become unresponsive, that is a poor user experience. INP observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were below. A low INP means the page was consistently able to respond quickly to all—or the vast majority—of user interactions.
13
+
14
+ First Contentful Paint 首次内容绘制 (FCP) https://web.dev/fcp/
15
+ 首次内容绘制 (FCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在用户首次在屏幕上看到任何内容时,在页面加载时间轴中标记出相应的点,迅捷的 FCP 有助于让用户确信某些事情正在进行。
16
+
17
+ Time to First Byte 第一字节时间 (TTFB) https://web.dev/ttfb/
18
+ 第一字节时间 (TTFB) 是在实验室和现场测量连接建立时间和 Web 服务器响应能力的一个基础指标。它有助于识别 Web 服务器何时对请求的响应速度太慢。对 HTML 文档的请求,该指标先于其他所有的加载性能指标。
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
package/lib/index.js ADDED
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _clsMetric = require("./metrics/cls-metric");
4
+ var _fcpMetric = require("./metrics/fcp-metric");
5
+ var _fidMetric = require("./metrics/fid-metric");
6
+ var _lcpMetric = require("./metrics/lcp-metric");
7
+ var _ttfbMetric = require("./metrics/ttfb-metric");
8
+ /**
9
+ Cumulative Layout Shift 累积布局偏移 (CLS) https://web.dev/cls/
10
+ 累积布局偏移 (CLS) 是测量视觉稳定性的一个以用户为中心的重要指标,因为该项指标有助于量化用户经历意外布局偏移的频率,较低的 CLS 有助于确保一个页面是令人愉悦的。
11
+
12
+ First Input Delay 首次输入延迟 (FID) https://web.dev/fid/
13
+ 首次输入延迟 (FID) 是测量加载响应度的一个以用户为中心的重要指标,因为该项指标将用户尝试与无响应页面进行交互时的体验进行了量化,低 FID 有助于让用户确信页面是有效的。
14
+
15
+ Largest Contentful Paint 最大内容绘制 (LCP) https://web.dev/lcp/
16
+ 最大内容绘制 (LCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在页面的主要内容基本加载完成时,在页面加载时间轴中标记出相应的点,迅捷的 LCP 有助于让用户确信页面是有效的。
17
+
18
+ Interaction to Next Paint (INP) [experimental] https://web.dev/inp/
19
+ Interaction to Next Paint (INP) is an experimental metric that assesses responsiveness. When an interaction causes a page to become unresponsive, that is a poor user experience. INP observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were below. A low INP means the page was consistently able to respond quickly to all—or the vast majority—of user interactions.
20
+
21
+ First Contentful Paint 首次内容绘制 (FCP) https://web.dev/fcp/
22
+ 首次内容绘制 (FCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在用户首次在屏幕上看到任何内容时,在页面加载时间轴中标记出相应的点,迅捷的 FCP 有助于让用户确信某些事情正在进行。
23
+
24
+ Time to First Byte 第一字节时间 (TTFB) https://web.dev/ttfb/
25
+ 第一字节时间 (TTFB) 是在实验室和现场测量连接建立时间和 Web 服务器响应能力的一个基础指标。它有助于识别 Web 服务器何时对请求的响应速度太慢。对 HTML 文档的请求,该指标先于其他所有的加载性能指标。
26
+ */
27
+
28
+ function register() {
29
+ new _clsMetric.ApmClsMetric({
30
+ reportAllChanges: true
31
+ });
32
+ new _fcpMetric.ApmFcpMetric();
33
+ new _fidMetric.ApmFidMetric();
34
+ new _lcpMetric.ApmLcpMetric();
35
+ new _ttfbMetric.ApmTtfbMetric();
36
+ }
37
+ register();
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["register","ApmClsMetric","reportAllChanges","ApmFcpMetric","ApmFidMetric","ApmLcpMetric","ApmTtfbMetric"],"sources":["../index.ts"],"sourcesContent":["/**\n Cumulative Layout Shift 累积布局偏移 (CLS) https://web.dev/cls/\n 累积布局偏移 (CLS) 是测量视觉稳定性的一个以用户为中心的重要指标,因为该项指标有助于量化用户经历意外布局偏移的频率,较低的 CLS 有助于确保一个页面是令人愉悦的。\n\n First Input Delay 首次输入延迟 (FID) https://web.dev/fid/\n 首次输入延迟 (FID) 是测量加载响应度的一个以用户为中心的重要指标,因为该项指标将用户尝试与无响应页面进行交互时的体验进行了量化,低 FID 有助于让用户确信页面是有效的。\n \n Largest Contentful Paint 最大内容绘制 (LCP) https://web.dev/lcp/\n 最大内容绘制 (LCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在页面的主要内容基本加载完成时,在页面加载时间轴中标记出相应的点,迅捷的 LCP 有助于让用户确信页面是有效的。\n\n Interaction to Next Paint (INP) [experimental] https://web.dev/inp/\n Interaction to Next Paint (INP) is an experimental metric that assesses responsiveness. When an interaction causes a page to become unresponsive, that is a poor user experience. INP observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were below. A low INP means the page was consistently able to respond quickly to all—or the vast majority—of user interactions.\n\n First Contentful Paint 首次内容绘制 (FCP) https://web.dev/fcp/\n 首次内容绘制 (FCP) 是测量感知加载速度的一个以用户为中心的重要指标,因为该项指标会在用户首次在屏幕上看到任何内容时,在页面加载时间轴中标记出相应的点,迅捷的 FCP 有助于让用户确信某些事情正在进行。\n\n Time to First Byte 第一字节时间 (TTFB) https://web.dev/ttfb/\n 第一字节时间 (TTFB) 是在实验室和现场测量连接建立时间和 Web 服务器响应能力的一个基础指标。它有助于识别 Web 服务器何时对请求的响应速度太慢。对 HTML 文档的请求,该指标先于其他所有的加载性能指标。\n */\n\nimport { ApmClsMetric } from './metrics/cls-metric';\nimport { ApmFcpMetric } from './metrics/fcp-metric';\nimport { ApmFidMetric } from './metrics/fid-metric';\nimport { ApmLcpMetric } from './metrics/lcp-metric';\nimport { ApmTtfbMetric } from './metrics/ttfb-metric';\n\nfunction register() {\n new ApmClsMetric({ reportAllChanges: true });\n new ApmFcpMetric();\n new ApmFidMetric();\n new ApmLcpMetric();\n new ApmTtfbMetric();\n}\n\nregister();\n"],"mappings":";;AAoBA;AACA;AACA;AACA;AACA;AAxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,SAASA,QAAQ,GAAG;EAClB,IAAIC,uBAAY,CAAC;IAAEC,gBAAgB,EAAE;EAAK,CAAC,CAAC;EAC5C,IAAIC,uBAAY,EAAE;EAClB,IAAIC,uBAAY,EAAE;EAClB,IAAIC,uBAAY,EAAE;EAClB,IAAIC,yBAAa,EAAE;AACrB;AAEAN,QAAQ,EAAE"}
@@ -0,0 +1,9 @@
1
+ import { Metric, ReportOpts } from 'web-vitals';
2
+ declare class MetricBase {
3
+ metricName: Metric['name'];
4
+ reportOpts?: ReportOpts;
5
+ constructor(_metricName: Metric['name'], _reportOpts?: ReportOpts);
6
+ push(metric: Metric): void;
7
+ }
8
+ export { MetricBase };
9
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/metrics/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhD,cAAM,UAAU;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;gBACZ,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU;IAKjE,IAAI,CAAC,MAAM,EAAE,MAAM;CAWpB;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}