@grafana/faro-web-sdk 1.9.1 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/dist/bundle/faro-web-sdk.iife.js +1 -1
  2. package/dist/bundle/types/index.d.ts +1 -1
  3. package/dist/bundle/types/instrumentations/console/instrumentation.d.ts +1 -1
  4. package/dist/bundle/types/instrumentations/errors/const.d.ts +1 -1
  5. package/dist/bundle/types/instrumentations/errors/instrumentation.d.ts +1 -1
  6. package/dist/bundle/types/instrumentations/errors/stackFrames/const.d.ts +1 -1
  7. package/dist/bundle/types/instrumentations/performance/instrumentation.d.ts +1 -1
  8. package/dist/bundle/types/instrumentations/performance/types.d.ts +2 -1
  9. package/dist/bundle/types/instrumentations/session/instrumentation.d.ts +1 -1
  10. package/dist/bundle/types/instrumentations/view/instrumentation.d.ts +1 -1
  11. package/dist/bundle/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
  12. package/dist/bundle/types/metas/index.d.ts +0 -1
  13. package/dist/bundle/types/transports/console/transport.d.ts +1 -1
  14. package/dist/bundle/types/transports/fetch/transport.d.ts +1 -1
  15. package/dist/cjs/config/makeCoreConfig.js +3 -2
  16. package/dist/cjs/config/makeCoreConfig.js.map +1 -1
  17. package/dist/cjs/index.js +2 -3
  18. package/dist/cjs/index.js.map +1 -1
  19. package/dist/cjs/instrumentations/errors/const.js +2 -2
  20. package/dist/cjs/instrumentations/errors/const.js.map +1 -1
  21. package/dist/cjs/instrumentations/errors/registerOnerror.js +1 -1
  22. package/dist/cjs/instrumentations/errors/registerOnerror.js.map +1 -1
  23. package/dist/cjs/instrumentations/errors/stackFrames/buildStackFrame.js +1 -1
  24. package/dist/cjs/instrumentations/errors/stackFrames/buildStackFrame.js.map +1 -1
  25. package/dist/cjs/instrumentations/errors/stackFrames/const.js +2 -2
  26. package/dist/cjs/instrumentations/errors/stackFrames/const.js.map +1 -1
  27. package/dist/cjs/instrumentations/performance/navigation.js +1 -1
  28. package/dist/cjs/instrumentations/performance/navigation.js.map +1 -1
  29. package/dist/cjs/instrumentations/performance/performanceUtils.js +1 -1
  30. package/dist/cjs/instrumentations/performance/performanceUtils.js.map +1 -1
  31. package/dist/cjs/instrumentations/performance/types.js.map +1 -1
  32. package/dist/cjs/instrumentations/view/instrumentation.js +3 -4
  33. package/dist/cjs/instrumentations/view/instrumentation.js.map +1 -1
  34. package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js +2 -1
  35. package/dist/cjs/instrumentations/webVitals/webVitalsWithAttribution.js.map +1 -1
  36. package/dist/cjs/metas/browser/meta.js +7 -7
  37. package/dist/cjs/metas/browser/meta.js.map +1 -1
  38. package/dist/cjs/metas/index.js +1 -3
  39. package/dist/cjs/metas/index.js.map +1 -1
  40. package/dist/esm/config/makeCoreConfig.js +4 -3
  41. package/dist/esm/config/makeCoreConfig.js.map +1 -1
  42. package/dist/esm/index.js +1 -1
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/instrumentations/errors/const.js +1 -1
  45. package/dist/esm/instrumentations/errors/const.js.map +1 -1
  46. package/dist/esm/instrumentations/errors/registerOnerror.js +2 -2
  47. package/dist/esm/instrumentations/errors/registerOnerror.js.map +1 -1
  48. package/dist/esm/instrumentations/errors/stackFrames/buildStackFrame.js +2 -2
  49. package/dist/esm/instrumentations/errors/stackFrames/buildStackFrame.js.map +1 -1
  50. package/dist/esm/instrumentations/errors/stackFrames/const.js +1 -1
  51. package/dist/esm/instrumentations/errors/stackFrames/const.js.map +1 -1
  52. package/dist/esm/instrumentations/performance/navigation.js +2 -2
  53. package/dist/esm/instrumentations/performance/navigation.js.map +1 -1
  54. package/dist/esm/instrumentations/performance/performanceUtils.js +2 -2
  55. package/dist/esm/instrumentations/performance/performanceUtils.js.map +1 -1
  56. package/dist/esm/instrumentations/performance/types.js.map +1 -1
  57. package/dist/esm/instrumentations/view/instrumentation.js +4 -5
  58. package/dist/esm/instrumentations/view/instrumentation.js.map +1 -1
  59. package/dist/esm/instrumentations/webVitals/webVitalsWithAttribution.js +2 -1
  60. package/dist/esm/instrumentations/webVitals/webVitalsWithAttribution.js.map +1 -1
  61. package/dist/esm/metas/browser/meta.js +7 -7
  62. package/dist/esm/metas/browser/meta.js.map +1 -1
  63. package/dist/esm/metas/index.js +0 -1
  64. package/dist/esm/metas/index.js.map +1 -1
  65. package/dist/types/index.d.ts +1 -1
  66. package/dist/types/instrumentations/console/instrumentation.d.ts +1 -1
  67. package/dist/types/instrumentations/errors/const.d.ts +1 -1
  68. package/dist/types/instrumentations/errors/instrumentation.d.ts +1 -1
  69. package/dist/types/instrumentations/errors/stackFrames/const.d.ts +1 -1
  70. package/dist/types/instrumentations/performance/instrumentation.d.ts +1 -1
  71. package/dist/types/instrumentations/performance/types.d.ts +2 -1
  72. package/dist/types/instrumentations/session/instrumentation.d.ts +1 -1
  73. package/dist/types/instrumentations/view/instrumentation.d.ts +1 -1
  74. package/dist/types/instrumentations/webVitals/instrumentation.d.ts +1 -1
  75. package/dist/types/metas/index.d.ts +0 -1
  76. package/dist/types/transports/console/transport.d.ts +1 -1
  77. package/dist/types/transports/fetch/transport.d.ts +1 -1
  78. package/package.json +3 -3
  79. package/dist/bundle/types/metas/view/const.d.ts +0 -3
  80. package/dist/bundle/types/metas/view/index.d.ts +0 -1
  81. package/dist/cjs/metas/view/const.js +0 -7
  82. package/dist/cjs/metas/view/const.js.map +0 -1
  83. package/dist/cjs/metas/view/index.js +0 -6
  84. package/dist/cjs/metas/view/index.js.map +0 -1
  85. package/dist/esm/metas/view/const.js +0 -4
  86. package/dist/esm/metas/view/const.js.map +0 -1
  87. package/dist/esm/metas/view/index.js +0 -2
  88. package/dist/esm/metas/view/index.js.map +0 -1
  89. package/dist/types/metas/view/const.d.ts +0 -3
  90. package/dist/types/metas/view/index.d.ts +0 -1
@@ -1,5 +1,5 @@
1
1
  import { isString } from '@grafana/faro-core';
2
- import { unknownString } from './const';
2
+ import { unknownSymbolString } from './const';
3
3
  import { getErrorDetails } from './getErrorDetails';
4
4
  import { getValueAndTypeFromMessage } from './getValueAndTypeFromMessage';
5
5
  import { buildStackFrame } from './stackFrames';
@@ -12,7 +12,7 @@ export function registerOnerror(api) {
12
12
  let type;
13
13
  let stackFrames = [];
14
14
  const eventIsString = isString(evt);
15
- const initialStackFrame = buildStackFrame(source, unknownString, lineno, colno);
15
+ const initialStackFrame = buildStackFrame(source, unknownSymbolString, lineno, colno);
16
16
  if (error || !eventIsString) {
17
17
  [value, type, stackFrames] = getErrorDetails((error !== null && error !== void 0 ? error : evt));
18
18
  if (stackFrames.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"registerOnerror.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/registerOnerror.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;IAElC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;QAC3B,IAAI;YACF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YACjD,IAAI,KAAyB,CAAC;YAC9B,IAAI,IAAwB,CAAC;YAC7B,IAAI,WAAW,GAA0B,EAAE,CAAC;YAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAEhF,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;gBAC3B,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,GAAG,CAAkB,CAAC,CAAC;gBAE9E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5B,WAAW,GAAG,CAAC,iBAAiB,CAAC,CAAC;iBACnC;aACF;iBAAM,IAAI,aAAa,EAAE;gBACxB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;gBAChD,WAAW,GAAG,CAAC,iBAAiB,CAAC,CAAC;aACnC;YAED,IAAI,KAAK,EAAE;gBACT,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;aACxD;SACF;gBAAS;YACR,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACjC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { isString } from '@grafana/faro-core';\nimport type { API, ExceptionStackFrame } from '@grafana/faro-core';\n\nimport { unknownString } from './const';\nimport { getErrorDetails } from './getErrorDetails';\nimport { getValueAndTypeFromMessage } from './getValueAndTypeFromMessage';\nimport { buildStackFrame } from './stackFrames';\n\nexport function registerOnerror(api: API): void {\n const oldOnerror = window.onerror;\n\n window.onerror = (...args) => {\n try {\n const [evt, source, lineno, colno, error] = args;\n let value: string | undefined;\n let type: string | undefined;\n let stackFrames: ExceptionStackFrame[] = [];\n const eventIsString = isString(evt);\n const initialStackFrame = buildStackFrame(source, unknownString, lineno, colno);\n\n if (error || !eventIsString) {\n [value, type, stackFrames] = getErrorDetails((error ?? evt) as Error | Event);\n\n if (stackFrames.length === 0) {\n stackFrames = [initialStackFrame];\n }\n } else if (eventIsString) {\n [value, type] = getValueAndTypeFromMessage(evt);\n stackFrames = [initialStackFrame];\n }\n\n if (value) {\n api.pushError(new Error(value), { type, stackFrames });\n }\n } finally {\n oldOnerror?.apply(window, args);\n }\n };\n}\n"]}
1
+ {"version":3,"file":"registerOnerror.js","sourceRoot":"","sources":["../../../../src/instrumentations/errors/registerOnerror.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;IAElC,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE;QAC3B,IAAI;YACF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;YACjD,IAAI,KAAyB,CAAC;YAC9B,IAAI,IAAwB,CAAC;YAC7B,IAAI,WAAW,GAA0B,EAAE,CAAC;YAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAEtF,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;gBAC3B,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,GAAG,CAAkB,CAAC,CAAC;gBAE9E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC5B,WAAW,GAAG,CAAC,iBAAiB,CAAC,CAAC;iBACnC;aACF;iBAAM,IAAI,aAAa,EAAE;gBACxB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;gBAChD,WAAW,GAAG,CAAC,iBAAiB,CAAC,CAAC;aACnC;YAED,IAAI,KAAK,EAAE;gBACT,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;aACxD;SACF;gBAAS;YACR,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACjC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { isString } from '@grafana/faro-core';\nimport type { API, ExceptionStackFrame } from '@grafana/faro-core';\n\nimport { unknownSymbolString } from './const';\nimport { getErrorDetails } from './getErrorDetails';\nimport { getValueAndTypeFromMessage } from './getValueAndTypeFromMessage';\nimport { buildStackFrame } from './stackFrames';\n\nexport function registerOnerror(api: API): void {\n const oldOnerror = window.onerror;\n\n window.onerror = (...args) => {\n try {\n const [evt, source, lineno, colno, error] = args;\n let value: string | undefined;\n let type: string | undefined;\n let stackFrames: ExceptionStackFrame[] = [];\n const eventIsString = isString(evt);\n const initialStackFrame = buildStackFrame(source, unknownSymbolString, lineno, colno);\n\n if (error || !eventIsString) {\n [value, type, stackFrames] = getErrorDetails((error ?? evt) as Error | Event);\n\n if (stackFrames.length === 0) {\n stackFrames = [initialStackFrame];\n }\n } else if (eventIsString) {\n [value, type] = getValueAndTypeFromMessage(evt);\n stackFrames = [initialStackFrame];\n }\n\n if (value) {\n api.pushError(new Error(value), { type, stackFrames });\n }\n } finally {\n oldOnerror?.apply(window, args);\n }\n };\n}\n"]}
@@ -1,8 +1,8 @@
1
- import { unknownString } from './const';
1
+ import { unknownSymbolString } from './const';
2
2
  export function buildStackFrame(filename, func, lineno, colno) {
3
3
  const stackFrame = {
4
4
  filename: filename || document.location.href,
5
- function: func || unknownString,
5
+ function: func || unknownSymbolString,
6
6
  };
7
7
  if (lineno !== undefined) {
8
8
  stackFrame.lineno = lineno;
@@ -1 +1 @@
1
- {"version":3,"file":"buildStackFrame.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/buildStackFrame.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,UAAU,eAAe,CAC7B,QAA4B,EAC5B,IAAwB,EACxB,MAA0B,EAC1B,KAAyB;IAEzB,MAAM,UAAU,GAAwB;QACtC,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI;QAC5C,QAAQ,EAAE,IAAI,IAAI,aAAa;KAChC,CAAC;IAEF,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;KAC5B;IAED,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;KAC1B;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { ExceptionStackFrame } from '@grafana/faro-core';\n\nimport { unknownString } from './const';\n\nexport function buildStackFrame(\n filename: string | undefined,\n func: string | undefined,\n lineno: number | undefined,\n colno: number | undefined\n): ExceptionStackFrame {\n const stackFrame: ExceptionStackFrame = {\n filename: filename || document.location.href,\n function: func || unknownString,\n };\n\n if (lineno !== undefined) {\n stackFrame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n stackFrame.colno = colno;\n }\n\n return stackFrame;\n}\n"]}
1
+ {"version":3,"file":"buildStackFrame.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/buildStackFrame.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,UAAU,eAAe,CAC7B,QAA4B,EAC5B,IAAwB,EACxB,MAA0B,EAC1B,KAAyB;IAEzB,MAAM,UAAU,GAAwB;QACtC,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI;QAC5C,QAAQ,EAAE,IAAI,IAAI,mBAAmB;KACtC,CAAC;IAEF,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;KAC5B;IAED,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;KAC1B;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { ExceptionStackFrame } from '@grafana/faro-core';\n\nimport { unknownSymbolString } from './const';\n\nexport function buildStackFrame(\n filename: string | undefined,\n func: string | undefined,\n lineno: number | undefined,\n colno: number | undefined\n): ExceptionStackFrame {\n const stackFrame: ExceptionStackFrame = {\n filename: filename || document.location.href,\n function: func || unknownSymbolString,\n };\n\n if (lineno !== undefined) {\n stackFrame.lineno = lineno;\n }\n\n if (colno !== undefined) {\n stackFrame.colno = colno;\n }\n\n return stackFrame;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  export const newLineString = '\n';
2
2
  export const evalString = 'eval';
3
- export const unknownString = '?';
3
+ export const unknownSymbolString = '?';
4
4
  export const atString = '@';
5
5
  export const webkitLineRegex = /^\s*at (?:(.*\).*?|.*?) ?\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
6
6
  export const webkitEvalRegex = /\((\S*)(?::(\d+))(?::(\d+))\)/;
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AACjC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,eAAe,GAC1B,qLAAqL,CAAC;AACxL,MAAM,CAAC,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,oOAAoO,CAAC;AACvO,MAAM,CAAC,MAAM,gBAAgB,GAAG,+CAA+C,CAAC;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC","sourcesContent":["export const newLineString = '\\n';\nexport const evalString = 'eval';\nexport const unknownString = '?';\nexport const atString = '@';\n\nexport const webkitLineRegex =\n /^\\s*at (?:(.*\\).*?|.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nexport const webkitEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nexport const webkitEvalString = 'eval';\nexport const webkitAddressAtString = 'address at ';\nexport const webkitAddressAtStringLength = webkitAddressAtString.length;\n\nexport const firefoxLineRegex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|safari-extension|safari-web-extension|capacitor)?:\\/.*?|\\[native code]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nexport const firefoxEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nexport const firefoxEvalString = ' > eval';\n\nexport const safariExtensionString = 'safari-extension';\nexport const safariWebExtensionString = 'safari-web-extension';\n\nexport const reactMinifiedRegex = /Minified React error #\\d+;/i;\n"]}
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../src/instrumentations/errors/stackFrames/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAClC,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AACjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,MAAM,CAAC,MAAM,eAAe,GAC1B,qLAAqL,CAAC;AACxL,MAAM,CAAC,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC;AACnD,MAAM,CAAC,MAAM,2BAA2B,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,oOAAoO,CAAC;AACvO,MAAM,CAAC,MAAM,gBAAgB,GAAG,+CAA+C,CAAC;AAChF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC","sourcesContent":["export const newLineString = '\\n';\nexport const evalString = 'eval';\nexport const unknownSymbolString = '?';\nexport const atString = '@';\n\nexport const webkitLineRegex =\n /^\\s*at (?:(.*\\).*?|.*?) ?\\((?:address at )?)?((?:file|https?|blob|chrome-extension|address|native|eval|webpack|<anonymous>|[-a-z]+:|.*bundle|\\/)?.*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nexport const webkitEvalRegex = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\nexport const webkitEvalString = 'eval';\nexport const webkitAddressAtString = 'address at ';\nexport const webkitAddressAtStringLength = webkitAddressAtString.length;\n\nexport const firefoxLineRegex =\n /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)?((?:file|https?|blob|chrome|webpack|resource|moz-extension|safari-extension|safari-web-extension|capacitor)?:\\/.*?|\\[native code]|[^@]*(?:bundle|\\d+\\.js)|\\/[\\w\\-. /=]+)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nexport const firefoxEvalRegex = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\nexport const firefoxEvalString = ' > eval';\n\nexport const safariExtensionString = 'safari-extension';\nexport const safariWebExtensionString = 'safari-web-extension';\n\nexport const reactMinifiedRegex = /Minified React error #\\d+;/i;\n"]}
@@ -1,4 +1,4 @@
1
- import { genShortID } from '@grafana/faro-core';
1
+ import { genShortID, unknownString } from '@grafana/faro-core';
2
2
  import { getItem, setItem, webStorageType } from '../../utils';
3
3
  import { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';
4
4
  import { NAVIGATION_ENTRY } from './performanceConstants';
@@ -16,7 +16,7 @@ export function getNavigationTimings(pushEvent, ignoredUrls) {
16
16
  }
17
17
  const navEntryJson = navigationEntryRaw.toJSON();
18
18
  let spanContext = getSpanContextFromServerTiming(navEntryJson === null || navEntryJson === void 0 ? void 0 : navEntryJson.serverTiming);
19
- const faroPreviousNavigationId = (_a = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session)) !== null && _a !== void 0 ? _a : 'unknown';
19
+ const faroPreviousNavigationId = (_a = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session)) !== null && _a !== void 0 ? _a : unknownString;
20
20
  const faroNavigationEntry = Object.assign(Object.assign({}, createFaroNavigationTiming(navEntryJson)), { faroNavigationId: genShortID(), faroPreviousNavigationId });
21
21
  setItem(NAVIGATION_ID_STORAGE_KEY, faroNavigationEntry.faroNavigationId, webStorageType.session);
22
22
  pushEvent('faro.performance.navigation', faroNavigationEntry, undefined, {
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAKnH,MAAM,UAAU,oBAAoB,CAClC,SAAiC,EACjC,WAAmC;IAEnC,IAAI,0BAA+D,CAAC;IACpE,MAAM,0BAA0B,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE;QAC7E,0BAA0B,GAAG,OAAO,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,CAAC,eAAe,EAAE,EAAE;;QAC3D,MAAM,CAAC,kBAAkB,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC;QAE1D,IAAI,kBAAkB,IAAI,IAAI,IAAI,iBAAiB,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACzF,OAAO;SACR;QAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAEjD,IAAI,WAAW,GAAgB,8BAA8B,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,CAAC,CAAC;QAE1F,MAAM,wBAAwB,GAAG,MAAA,OAAO,CAAC,yBAAyB,EAAE,cAAc,CAAC,OAAO,CAAC,mCAAI,SAAS,CAAC;QAEzG,MAAM,mBAAmB,mCACpB,0BAA0B,CAAC,YAAY,CAAC,KAC3C,gBAAgB,EAAE,UAAU,EAAE,EAC9B,wBAAwB,GACzB,CAAC;QAEF,OAAO,CAAC,yBAAyB,EAAE,mBAAmB,CAAC,gBAAgB,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAEjG,SAAS,CAAC,6BAA6B,EAAE,mBAAmB,EAAE,SAAS,EAAE;YACvE,WAAW;YACX,oBAAoB,EAAE,WAAW,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS;SACtE,CAAC,CAAC;QAEH,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC;QACf,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,OAAO,0BAA0B,CAAC;AACpC,CAAC","sourcesContent":["import { genShortID } from '@grafana/faro-core';\nimport type { EventsAPI, PushEventOptions } from '@grafana/faro-core';\n\nimport { getItem, setItem, webStorageType } from '../../utils';\nimport { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';\n\nimport { NAVIGATION_ENTRY } from './performanceConstants';\nimport { createFaroNavigationTiming, entryUrlIsIgnored, getSpanContextFromServerTiming } from './performanceUtils';\nimport type { FaroNavigationItem } from './types';\n\ntype SpanContext = PushEventOptions['spanContext'];\n\nexport function getNavigationTimings(\n pushEvent: EventsAPI['pushEvent'],\n ignoredUrls: Array<string | RegExp>\n): Promise<FaroNavigationItem> {\n let faroNavigationEntryResolve: (value: FaroNavigationItem) => void;\n const faroNavigationEntryPromise = new Promise<FaroNavigationItem>((resolve) => {\n faroNavigationEntryResolve = resolve;\n });\n\n const observer = new PerformanceObserver((observedEntries) => {\n const [navigationEntryRaw] = observedEntries.getEntries();\n\n if (navigationEntryRaw == null || entryUrlIsIgnored(ignoredUrls, navigationEntryRaw.name)) {\n return;\n }\n\n const navEntryJson = navigationEntryRaw.toJSON();\n\n let spanContext: SpanContext = getSpanContextFromServerTiming(navEntryJson?.serverTiming);\n\n const faroPreviousNavigationId = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session) ?? 'unknown';\n\n const faroNavigationEntry: FaroNavigationItem = {\n ...createFaroNavigationTiming(navEntryJson),\n faroNavigationId: genShortID(),\n faroPreviousNavigationId,\n };\n\n setItem(NAVIGATION_ID_STORAGE_KEY, faroNavigationEntry.faroNavigationId, webStorageType.session);\n\n pushEvent('faro.performance.navigation', faroNavigationEntry, undefined, {\n spanContext,\n timestampOverwriteMs: performance.timeOrigin + navEntryJson.startTime,\n });\n\n faroNavigationEntryResolve(faroNavigationEntry);\n });\n\n observer.observe({\n type: NAVIGATION_ENTRY,\n buffered: true,\n });\n\n return faroNavigationEntryPromise;\n}\n"]}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG/D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAKnH,MAAM,UAAU,oBAAoB,CAClC,SAAiC,EACjC,WAAmC;IAEnC,IAAI,0BAA+D,CAAC;IACpE,MAAM,0BAA0B,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE;QAC7E,0BAA0B,GAAG,OAAO,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,CAAC,eAAe,EAAE,EAAE;;QAC3D,MAAM,CAAC,kBAAkB,CAAC,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC;QAE1D,IAAI,kBAAkB,IAAI,IAAI,IAAI,iBAAiB,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACzF,OAAO;SACR;QAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAEjD,IAAI,WAAW,GAAgB,8BAA8B,CAAC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,CAAC,CAAC;QAE1F,MAAM,wBAAwB,GAAG,MAAA,OAAO,CAAC,yBAAyB,EAAE,cAAc,CAAC,OAAO,CAAC,mCAAI,aAAa,CAAC;QAE7G,MAAM,mBAAmB,mCACpB,0BAA0B,CAAC,YAAY,CAAC,KAC3C,gBAAgB,EAAE,UAAU,EAAE,EAC9B,wBAAwB,GACzB,CAAC;QAEF,OAAO,CAAC,yBAAyB,EAAE,mBAAmB,CAAC,gBAAgB,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAEjG,SAAS,CAAC,6BAA6B,EAAE,mBAAmB,EAAE,SAAS,EAAE;YACvE,WAAW;YACX,oBAAoB,EAAE,WAAW,CAAC,UAAU,GAAG,YAAY,CAAC,SAAS;SACtE,CAAC,CAAC;QAEH,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC;QACf,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,OAAO,0BAA0B,CAAC;AACpC,CAAC","sourcesContent":["import { genShortID, unknownString } from '@grafana/faro-core';\nimport type { EventsAPI, PushEventOptions } from '@grafana/faro-core';\n\nimport { getItem, setItem, webStorageType } from '../../utils';\nimport { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';\n\nimport { NAVIGATION_ENTRY } from './performanceConstants';\nimport { createFaroNavigationTiming, entryUrlIsIgnored, getSpanContextFromServerTiming } from './performanceUtils';\nimport type { FaroNavigationItem } from './types';\n\ntype SpanContext = PushEventOptions['spanContext'];\n\nexport function getNavigationTimings(\n pushEvent: EventsAPI['pushEvent'],\n ignoredUrls: Array<string | RegExp>\n): Promise<FaroNavigationItem> {\n let faroNavigationEntryResolve: (value: FaroNavigationItem) => void;\n const faroNavigationEntryPromise = new Promise<FaroNavigationItem>((resolve) => {\n faroNavigationEntryResolve = resolve;\n });\n\n const observer = new PerformanceObserver((observedEntries) => {\n const [navigationEntryRaw] = observedEntries.getEntries();\n\n if (navigationEntryRaw == null || entryUrlIsIgnored(ignoredUrls, navigationEntryRaw.name)) {\n return;\n }\n\n const navEntryJson = navigationEntryRaw.toJSON();\n\n let spanContext: SpanContext = getSpanContextFromServerTiming(navEntryJson?.serverTiming);\n\n const faroPreviousNavigationId = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session) ?? unknownString;\n\n const faroNavigationEntry: FaroNavigationItem = {\n ...createFaroNavigationTiming(navEntryJson),\n faroNavigationId: genShortID(),\n faroPreviousNavigationId,\n };\n\n setItem(NAVIGATION_ID_STORAGE_KEY, faroNavigationEntry.faroNavigationId, webStorageType.session);\n\n pushEvent('faro.performance.navigation', faroNavigationEntry, undefined, {\n spanContext,\n timestampOverwriteMs: performance.timeOrigin + navEntryJson.startTime,\n });\n\n faroNavigationEntryResolve(faroNavigationEntry);\n });\n\n observer.observe({\n type: NAVIGATION_ENTRY,\n buffered: true,\n });\n\n return faroNavigationEntryPromise;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { isArray } from '@grafana/faro-core';
1
+ import { isArray, unknownString } from '@grafana/faro-core';
2
2
  const w3cTraceparentFormat = /^00-[a-f0-9]{32}-[a-f0-9]{16}-[0-9]{1,2}$/;
3
3
  // Extract traceparent from serverTiming, if present
4
4
  export function getSpanContextFromServerTiming(serverTimings = []) {
@@ -117,7 +117,7 @@ function getDocumentParsingTime() {
117
117
  }
118
118
  function toFaroPerformanceTimingString(v) {
119
119
  if (v == null) {
120
- return 'unknown';
120
+ return unknownString;
121
121
  }
122
122
  if (typeof v === 'number') {
123
123
  return Math.round(v).toString();
@@ -1 +1 @@
1
- {"version":3,"file":"performanceUtils.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/performanceUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray, type PushEventOptions } from '@grafana/faro-core';\n\nimport type { CacheType, FaroNavigationTiming, FaroResourceTiming } from './types';\n\nconst w3cTraceparentFormat = /^00-[a-f0-9]{32}-[a-f0-9]{16}-[0-9]{1,2}$/;\n\ntype SpanContext = PushEventOptions['spanContext'];\n\n// Extract traceparent from serverTiming, if present\nexport function getSpanContextFromServerTiming(serverTimings: PerformanceServerTiming[] = []): SpanContext | undefined {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === 'traceparent') {\n if (!w3cTraceparentFormat.test(serverEntry.description)) {\n continue;\n }\n\n const [, traceId, spanId] = serverEntry.description.split('-');\n if (traceId != null && spanId != null) {\n return { traceId, spanId };\n }\n\n break;\n }\n }\n\n return undefined;\n}\n\nexport function performanceObserverSupported(): boolean {\n return 'PerformanceObserver' in window;\n}\n\nexport function entryUrlIsIgnored(ignoredUrls: Array<string | RegExp> = [], entryName: string): boolean {\n return ignoredUrls.some((url) => url && entryName.match(url) != null);\n}\n\nexport function onDocumentReady(handleReady: () => void) {\n if (document.readyState === 'complete') {\n handleReady();\n } else {\n const readyStateCompleteHandler = () => {\n if (document.readyState === 'complete') {\n handleReady();\n document.removeEventListener('readystatechange', readyStateCompleteHandler);\n }\n };\n\n document.addEventListener('readystatechange', readyStateCompleteHandler);\n }\n}\n\ntype PerformanceEntryAllowProperties = Record<string, Array<string | number> | string | number>;\n\nexport function includePerformanceEntry(\n performanceEntryJSON: Record<string, any>,\n allowProps: PerformanceEntryAllowProperties = {}\n): boolean {\n for (const [allowPropKey, allowPropValue] of Object.entries(allowProps)) {\n const perfEntryPropVal = performanceEntryJSON[allowPropKey];\n\n if (perfEntryPropVal == null) {\n return false;\n }\n\n if (isArray(allowPropValue)) {\n return allowPropValue.includes(perfEntryPropVal);\n }\n\n return perfEntryPropVal === allowPropValue;\n }\n\n // empty object allows all\n return true;\n}\n\nexport function createFaroResourceTiming(resourceEntryRaw: PerformanceResourceTiming): FaroResourceTiming {\n const {\n connectEnd,\n connectStart,\n decodedBodySize,\n domainLookupEnd,\n domainLookupStart,\n duration,\n encodedBodySize,\n fetchStart,\n initiatorType,\n name,\n nextHopProtocol,\n redirectEnd,\n redirectStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n renderBlockingStatus: rbs,\n requestStart,\n responseEnd,\n responseStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n responseStatus,\n secureConnectionStart,\n transferSize,\n workerStart,\n } = resourceEntryRaw;\n\n return {\n name: name,\n duration: toFaroPerformanceTimingString(duration),\n tcpHandshakeTime: toFaroPerformanceTimingString(connectEnd - connectStart),\n dnsLookupTime: toFaroPerformanceTimingString(domainLookupEnd - domainLookupStart),\n tlsNegotiationTime: toFaroPerformanceTimingString(requestStart - secureConnectionStart),\n responseStatus: toFaroPerformanceTimingString(responseStatus),\n redirectTime: toFaroPerformanceTimingString(redirectEnd - redirectStart),\n requestTime: toFaroPerformanceTimingString(responseStart - requestStart),\n responseTime: toFaroPerformanceTimingString(responseEnd - responseStart),\n fetchTime: toFaroPerformanceTimingString(responseEnd - fetchStart),\n serviceWorkerTime: toFaroPerformanceTimingString(fetchStart - workerStart),\n decodedBodySize: toFaroPerformanceTimingString(decodedBodySize),\n encodedBodySize: toFaroPerformanceTimingString(encodedBodySize),\n cacheHitStatus: getCacheType(),\n renderBlockingStatus: toFaroPerformanceTimingString(rbs) as FaroResourceTiming['renderBlockingStatus'],\n protocol: nextHopProtocol,\n initiatorType: initiatorType,\n\n // TODO: add in future iteration, ideally after nested objects are supported by the collector.\n // serverTiming: resourceEntryRaw.serverTiming,\n };\n\n function getCacheType(): CacheType {\n let cacheType: CacheType = 'fullLoad';\n if (transferSize === 0) {\n if (decodedBodySize > 0) {\n cacheType = 'cache';\n }\n } else {\n if (responseStatus != null) {\n if (responseStatus === 304) {\n cacheType = 'conditionalFetch';\n }\n } else if (encodedBodySize > 0 && transferSize < encodedBodySize) {\n cacheType = 'conditionalFetch';\n }\n }\n return cacheType;\n }\n}\n\nexport function createFaroNavigationTiming(navigationEntryRaw: PerformanceNavigationTiming): FaroNavigationTiming {\n const {\n activationStart,\n domComplete,\n domContentLoadedEventEnd,\n domContentLoadedEventStart,\n domInteractive,\n fetchStart,\n loadEventEnd,\n loadEventStart,\n responseStart,\n type,\n } = navigationEntryRaw;\n\n const parserStart = getDocumentParsingTime();\n\n return {\n visibilityState: document.visibilityState,\n pageLoadTime: toFaroPerformanceTimingString(domComplete - fetchStart),\n documentParsingTime: toFaroPerformanceTimingString(parserStart ? domInteractive - parserStart : null),\n domProcessingTime: toFaroPerformanceTimingString(domComplete - domInteractive),\n domContentLoadHandlerTime: toFaroPerformanceTimingString(domContentLoadedEventEnd - domContentLoadedEventStart),\n onLoadTime: toFaroPerformanceTimingString(loadEventEnd - loadEventStart),\n\n // For more accuracy on prerendered pages page we calculate relative top the activationStart instead of the start of the navigation.\n // clamp to 0 if activationStart occurs after first byte is received.\n ttfb: toFaroPerformanceTimingString(Math.max(responseStart - (activationStart ?? 0), 0)),\n\n type: type,\n\n ...createFaroResourceTiming(navigationEntryRaw),\n };\n}\n\nfunction getDocumentParsingTime(): number | null {\n if (performance.timing?.domLoading != null) {\n // the browser is about to start parsing the first received bytes of the HTML document.\n // This property is deprecated but there isn't a really good alternative atm.\n // For now we stick with domLoading and keep researching a better alternative.\n return performance.timing.domLoading - performance.timeOrigin;\n }\n\n return null;\n}\n\nfunction toFaroPerformanceTimingString(v: unknown): string {\n if (v == null) {\n return 'unknown';\n }\n\n if (typeof v === 'number') {\n return Math.round(v).toString();\n }\n\n return v.toString();\n}\n"]}
1
+ {"version":3,"file":"performanceUtils.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/performanceUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray, type PushEventOptions, unknownString } from '@grafana/faro-core';\n\nimport type { CacheType, FaroNavigationTiming, FaroResourceTiming } from './types';\n\nconst w3cTraceparentFormat = /^00-[a-f0-9]{32}-[a-f0-9]{16}-[0-9]{1,2}$/;\n\ntype SpanContext = PushEventOptions['spanContext'];\n\n// Extract traceparent from serverTiming, if present\nexport function getSpanContextFromServerTiming(serverTimings: PerformanceServerTiming[] = []): SpanContext | undefined {\n for (const serverEntry of serverTimings) {\n if (serverEntry.name === 'traceparent') {\n if (!w3cTraceparentFormat.test(serverEntry.description)) {\n continue;\n }\n\n const [, traceId, spanId] = serverEntry.description.split('-');\n if (traceId != null && spanId != null) {\n return { traceId, spanId };\n }\n\n break;\n }\n }\n\n return undefined;\n}\n\nexport function performanceObserverSupported(): boolean {\n return 'PerformanceObserver' in window;\n}\n\nexport function entryUrlIsIgnored(ignoredUrls: Array<string | RegExp> = [], entryName: string): boolean {\n return ignoredUrls.some((url) => url && entryName.match(url) != null);\n}\n\nexport function onDocumentReady(handleReady: () => void) {\n if (document.readyState === 'complete') {\n handleReady();\n } else {\n const readyStateCompleteHandler = () => {\n if (document.readyState === 'complete') {\n handleReady();\n document.removeEventListener('readystatechange', readyStateCompleteHandler);\n }\n };\n\n document.addEventListener('readystatechange', readyStateCompleteHandler);\n }\n}\n\ntype PerformanceEntryAllowProperties = Record<string, Array<string | number> | string | number>;\n\nexport function includePerformanceEntry(\n performanceEntryJSON: Record<string, any>,\n allowProps: PerformanceEntryAllowProperties = {}\n): boolean {\n for (const [allowPropKey, allowPropValue] of Object.entries(allowProps)) {\n const perfEntryPropVal = performanceEntryJSON[allowPropKey];\n\n if (perfEntryPropVal == null) {\n return false;\n }\n\n if (isArray(allowPropValue)) {\n return allowPropValue.includes(perfEntryPropVal);\n }\n\n return perfEntryPropVal === allowPropValue;\n }\n\n // empty object allows all\n return true;\n}\n\nexport function createFaroResourceTiming(resourceEntryRaw: PerformanceResourceTiming): FaroResourceTiming {\n const {\n connectEnd,\n connectStart,\n decodedBodySize,\n domainLookupEnd,\n domainLookupStart,\n duration,\n encodedBodySize,\n fetchStart,\n initiatorType,\n name,\n nextHopProtocol,\n redirectEnd,\n redirectStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n renderBlockingStatus: rbs,\n requestStart,\n responseEnd,\n responseStart,\n // @ts-expect-error the renderBlockingStatus property is not available in all browsers\n responseStatus,\n secureConnectionStart,\n transferSize,\n workerStart,\n } = resourceEntryRaw;\n\n return {\n name: name,\n duration: toFaroPerformanceTimingString(duration),\n tcpHandshakeTime: toFaroPerformanceTimingString(connectEnd - connectStart),\n dnsLookupTime: toFaroPerformanceTimingString(domainLookupEnd - domainLookupStart),\n tlsNegotiationTime: toFaroPerformanceTimingString(requestStart - secureConnectionStart),\n responseStatus: toFaroPerformanceTimingString(responseStatus),\n redirectTime: toFaroPerformanceTimingString(redirectEnd - redirectStart),\n requestTime: toFaroPerformanceTimingString(responseStart - requestStart),\n responseTime: toFaroPerformanceTimingString(responseEnd - responseStart),\n fetchTime: toFaroPerformanceTimingString(responseEnd - fetchStart),\n serviceWorkerTime: toFaroPerformanceTimingString(fetchStart - workerStart),\n decodedBodySize: toFaroPerformanceTimingString(decodedBodySize),\n encodedBodySize: toFaroPerformanceTimingString(encodedBodySize),\n cacheHitStatus: getCacheType(),\n renderBlockingStatus: toFaroPerformanceTimingString(rbs) as FaroResourceTiming['renderBlockingStatus'],\n protocol: nextHopProtocol,\n initiatorType: initiatorType,\n\n // TODO: add in future iteration, ideally after nested objects are supported by the collector.\n // serverTiming: resourceEntryRaw.serverTiming,\n };\n\n function getCacheType(): CacheType {\n let cacheType: CacheType = 'fullLoad';\n if (transferSize === 0) {\n if (decodedBodySize > 0) {\n cacheType = 'cache';\n }\n } else {\n if (responseStatus != null) {\n if (responseStatus === 304) {\n cacheType = 'conditionalFetch';\n }\n } else if (encodedBodySize > 0 && transferSize < encodedBodySize) {\n cacheType = 'conditionalFetch';\n }\n }\n return cacheType;\n }\n}\n\nexport function createFaroNavigationTiming(navigationEntryRaw: PerformanceNavigationTiming): FaroNavigationTiming {\n const {\n activationStart,\n domComplete,\n domContentLoadedEventEnd,\n domContentLoadedEventStart,\n domInteractive,\n fetchStart,\n loadEventEnd,\n loadEventStart,\n responseStart,\n type,\n } = navigationEntryRaw;\n\n const parserStart = getDocumentParsingTime();\n\n return {\n visibilityState: document.visibilityState,\n pageLoadTime: toFaroPerformanceTimingString(domComplete - fetchStart),\n documentParsingTime: toFaroPerformanceTimingString(parserStart ? domInteractive - parserStart : null),\n domProcessingTime: toFaroPerformanceTimingString(domComplete - domInteractive),\n domContentLoadHandlerTime: toFaroPerformanceTimingString(domContentLoadedEventEnd - domContentLoadedEventStart),\n onLoadTime: toFaroPerformanceTimingString(loadEventEnd - loadEventStart),\n\n // For more accuracy on prerendered pages page we calculate relative top the activationStart instead of the start of the navigation.\n // clamp to 0 if activationStart occurs after first byte is received.\n ttfb: toFaroPerformanceTimingString(Math.max(responseStart - (activationStart ?? 0), 0)),\n\n type: type,\n\n ...createFaroResourceTiming(navigationEntryRaw),\n };\n}\n\nfunction getDocumentParsingTime(): number | null {\n if (performance.timing?.domLoading != null) {\n // the browser is about to start parsing the first received bytes of the HTML document.\n // This property is deprecated but there isn't a really good alternative atm.\n // For now we stick with domLoading and keep researching a better alternative.\n return performance.timing.domLoading - performance.timeOrigin;\n }\n\n return null;\n}\n\nfunction toFaroPerformanceTimingString(v: unknown): string {\n if (v == null) {\n return unknownString;\n }\n\n if (typeof v === 'number') {\n return Math.round(v).toString();\n }\n\n return v.toString();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/types.ts"],"names":[],"mappings":"","sourcesContent":["export type FaroNavigationTiming = Readonly<\n {\n duration: string;\n visibilityState: DocumentVisibilityState;\n documentParsingTime: string;\n domProcessingTime: string;\n pageLoadTime: string;\n domContentLoadHandlerTime: string;\n onLoadTime: string;\n ttfb: string;\n type: NavigationTimingType;\n } & FaroResourceTiming\n>;\n\nexport type FaroResourceTiming = Readonly<{\n name: string;\n duration: string;\n protocol: string;\n tcpHandshakeTime: string;\n dnsLookupTime: string;\n tlsNegotiationTime: string;\n responseStatus: string;\n redirectTime: string;\n requestTime: string;\n fetchTime: string;\n responseTime: string;\n serviceWorkerTime: string;\n decodedBodySize: string;\n encodedBodySize: string;\n cacheHitStatus: 'cache' | 'conditionalFetch' | 'fullLoad';\n renderBlockingStatus: 'blocking' | 'non-blocking' | 'unknown';\n initiatorType: string;\n // serverTiming: PerformanceServerTiming[];\n}>;\n\nexport type FaroNavigationItem = {\n faroNavigationId: string;\n faroPreviousNavigationId: string;\n} & FaroNavigationTiming &\n FaroResourceTiming;\n\nexport type FaroResourceItem = {\n faroNavigationId: string;\n faroResourceId: string;\n} & FaroResourceTiming;\n\nexport type CacheType = 'cache' | 'conditionalFetch' | 'fullLoad';\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/instrumentations/performance/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { unknownString } from '@grafana/faro-core';\n\nexport type FaroNavigationTiming = Readonly<\n {\n duration: string;\n visibilityState: DocumentVisibilityState;\n documentParsingTime: string;\n domProcessingTime: string;\n pageLoadTime: string;\n domContentLoadHandlerTime: string;\n onLoadTime: string;\n ttfb: string;\n type: NavigationTimingType;\n } & FaroResourceTiming\n>;\n\nexport type FaroResourceTiming = Readonly<{\n name: string;\n duration: string;\n protocol: string;\n tcpHandshakeTime: string;\n dnsLookupTime: string;\n tlsNegotiationTime: string;\n responseStatus: string;\n redirectTime: string;\n requestTime: string;\n fetchTime: string;\n responseTime: string;\n serviceWorkerTime: string;\n decodedBodySize: string;\n encodedBodySize: string;\n cacheHitStatus: 'cache' | 'conditionalFetch' | 'fullLoad';\n renderBlockingStatus: 'blocking' | 'non-blocking' | typeof unknownString;\n initiatorType: string;\n // serverTiming: PerformanceServerTiming[];\n}>;\n\nexport type FaroNavigationItem = {\n faroNavigationId: string;\n faroPreviousNavigationId: string;\n} & FaroNavigationTiming &\n FaroResourceTiming;\n\nexport type FaroResourceItem = {\n faroNavigationId: string;\n faroResourceId: string;\n} & FaroResourceTiming;\n\nexport type CacheType = 'cache' | 'conditionalFetch' | 'fullLoad';\n"]}
@@ -1,4 +1,4 @@
1
- import { BaseInstrumentation, EVENT_VIEW_CHANGED, VERSION } from '@grafana/faro-core';
1
+ import { BaseInstrumentation, EVENT_VIEW_CHANGED, unknownString, VERSION } from '@grafana/faro-core';
2
2
  // all this does is send VIEW_CHANGED event
3
3
  export class ViewInstrumentation extends BaseInstrumentation {
4
4
  constructor() {
@@ -7,18 +7,17 @@ export class ViewInstrumentation extends BaseInstrumentation {
7
7
  this.version = VERSION;
8
8
  }
9
9
  sendViewChangedEvent(meta) {
10
- var _a, _b, _c;
10
+ var _a, _b, _c, _d;
11
11
  const view = meta.view;
12
12
  if (view && view.name !== ((_a = this.notifiedView) === null || _a === void 0 ? void 0 : _a.name)) {
13
13
  this.api.pushEvent(EVENT_VIEW_CHANGED, {
14
- fromView: (_c = (_b = this.notifiedView) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : '',
15
- toView: view.name,
14
+ fromView: (_c = (_b = this.notifiedView) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : unknownString,
15
+ toView: (_d = view.name) !== null && _d !== void 0 ? _d : unknownString,
16
16
  }, undefined, { skipDedupe: true });
17
17
  this.notifiedView = view;
18
18
  }
19
19
  }
20
20
  initialize() {
21
- this.sendViewChangedEvent(this.metas.value);
22
21
  this.metas.addListener(this.sendViewChangedEvent.bind(this));
23
22
  }
24
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/view/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAkB,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEtG,2CAA2C;AAC3C,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IAA5D;;QACW,SAAI,GAAG,4CAA4C,CAAC;QACpD,YAAO,GAAG,OAAO,CAAC;IA6B7B,CAAC;IAvBS,oBAAoB,CAAC,IAAU;;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAK,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI,CAAA,EAAE;YACjD,IAAI,CAAC,GAAG,CAAC,SAAS,CAChB,kBAAkB,EAClB;gBACE,QAAQ,EAAE,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI,mCAAI,EAAE;gBACvC,MAAM,EAAE,IAAI,CAAC,IAAI;aAClB,EACD,SAAS,EACT,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;YAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;CACF","sourcesContent":["import { BaseInstrumentation, EVENT_VIEW_CHANGED, Meta, MetaView, VERSION } from '@grafana/faro-core';\n\n// all this does is send VIEW_CHANGED event\nexport class ViewInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-view';\n readonly version = VERSION;\n\n // previously notified view, to ensure we don't send view changed\n // event twice for the same view\n private notifiedView: MetaView | undefined;\n\n private sendViewChangedEvent(meta: Meta): void {\n const view = meta.view;\n\n if (view && view.name !== this.notifiedView?.name) {\n this.api.pushEvent(\n EVENT_VIEW_CHANGED,\n {\n fromView: this.notifiedView?.name ?? '',\n toView: view.name,\n },\n undefined,\n { skipDedupe: true }\n );\n\n this.notifiedView = view;\n }\n }\n\n initialize() {\n this.sendViewChangedEvent(this.metas.value);\n\n this.metas.addListener(this.sendViewChangedEvent.bind(this));\n }\n}\n"]}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../../src/instrumentations/view/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAkB,aAAa,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAErH,2CAA2C;AAC3C,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IAA5D;;QACW,SAAI,GAAG,4CAA4C,CAAC;QACpD,YAAO,GAAG,OAAO,CAAC;IA2B7B,CAAC;IArBS,oBAAoB,CAAC,IAAU;;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAK,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI,CAAA,EAAE;YACjD,IAAI,CAAC,GAAG,CAAC,SAAS,CAChB,kBAAkB,EAClB;gBACE,QAAQ,EAAE,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,IAAI,mCAAI,aAAa;gBAClD,MAAM,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,aAAa;aACnC,EACD,SAAS,EACT,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;YAEF,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC1B;IACH,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;CACF","sourcesContent":["import { BaseInstrumentation, EVENT_VIEW_CHANGED, Meta, MetaView, unknownString, VERSION } from '@grafana/faro-core';\n\n// all this does is send VIEW_CHANGED event\nexport class ViewInstrumentation extends BaseInstrumentation {\n readonly name = '@grafana/faro-web-sdk:instrumentation-view';\n readonly version = VERSION;\n\n // previously notified view, to ensure we don't send view changed\n // event twice for the same view\n private notifiedView: MetaView | undefined;\n\n private sendViewChangedEvent(meta: Meta): void {\n const view = meta.view;\n\n if (view && view.name !== this.notifiedView?.name) {\n this.api.pushEvent(\n EVENT_VIEW_CHANGED,\n {\n fromView: this.notifiedView?.name ?? unknownString,\n toView: view.name ?? unknownString,\n },\n undefined,\n { skipDedupe: true }\n );\n\n this.notifiedView = view;\n }\n }\n\n initialize() {\n this.metas.addListener(this.sendViewChangedEvent.bind(this));\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { onCLS, onFCP, onFID, onINP, onLCP, onTTFB } from 'web-vitals/attribution';
2
+ import { unknownString } from '@grafana/faro-core';
2
3
  import { getItem, webStorageType } from '../../utils';
3
4
  import { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';
4
5
  // duplicate keys saved in variables to save bundle size
@@ -103,7 +104,7 @@ export class WebVitalsWithAttribution {
103
104
  }
104
105
  buildInitialContext(metric) {
105
106
  var _a;
106
- const navigationEntryId = (_a = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session)) !== null && _a !== void 0 ? _a : 'unknown';
107
+ const navigationEntryId = (_a = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session)) !== null && _a !== void 0 ? _a : unknownString;
107
108
  return {
108
109
  id: metric.id,
109
110
  rating: metric.rating,
@@ -1 +1 @@
1
- {"version":3,"file":"webVitalsWithAttribution.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/webVitalsWithAttribution.ts"],"names":[],"mappings":"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","sourcesContent":["import { onCLS, onFCP, onFID, onINP, onLCP, onTTFB } from 'web-vitals/attribution';\nimport type { Metric } from 'web-vitals/attribution';\n\nimport type { MeasurementEvent, MeasurementsAPI, PushMeasurementOptions } from '@grafana/faro-core';\n\nimport { getItem, webStorageType } from '../../utils';\nimport { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';\n\ntype Values = MeasurementEvent['values'];\ntype Context = Required<PushMeasurementOptions>['context'];\n\n// duplicate keys saved in variables to save bundle size\n// refs: https://github.com/grafana/faro-web-sdk/pull/595#discussion_r1615833968\nconst loadStateKey = 'load_state';\nconst timeToFirstByteKey = 'time_to_first_byte';\n\nexport class WebVitalsWithAttribution {\n constructor(private corePushMeasurement: MeasurementsAPI['pushMeasurement']) {}\n\n initialize(): void {\n this.measureCLS();\n this.measureFCP();\n this.measureFID();\n this.measureINP();\n this.measureLCP();\n this.measureTTFB();\n }\n\n private measureCLS(): void {\n onCLS((metric) => {\n const { loadState, largestShiftValue, largestShiftTime, largestShiftTarget } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'largest_shift_value', largestShiftValue);\n this.addIfPresent(values, 'largest_shift_time', largestShiftTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'largest_shift_target', largestShiftTarget);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureFCP(): void {\n onFCP((metric) => {\n const { firstByteToFCP, timeToFirstByte, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'first_byte_to_fcp', firstByteToFCP);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureFID(): void {\n onFID((metric) => {\n const { eventTime, eventTarget, eventType, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'event_time', eventTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'event_target', eventTarget);\n this.addIfPresent(context, 'event_type', eventType);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureINP(): void {\n onINP((metric) => {\n const {\n interactionTime,\n presentationDelay,\n inputDelay,\n processingDuration,\n nextPaintTime,\n loadState,\n interactionTarget,\n interactionType,\n } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'interaction_time', interactionTime);\n this.addIfPresent(values, 'presentation_delay', presentationDelay);\n this.addIfPresent(values, 'input_delay', inputDelay);\n this.addIfPresent(values, 'processing_duration', processingDuration);\n this.addIfPresent(values, 'next_paint_time', nextPaintTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'interaction_target', interactionTarget);\n this.addIfPresent(context, 'interaction_type', interactionType);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureLCP(): void {\n onLCP((metric) => {\n const { elementRenderDelay, resourceLoadDelay, resourceLoadDuration, timeToFirstByte, element } =\n metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'element_render_delay', elementRenderDelay);\n this.addIfPresent(values, 'resource_load_delay', resourceLoadDelay);\n this.addIfPresent(values, 'resource_load_duration', resourceLoadDuration);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'element', element);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureTTFB(): void {\n onTTFB((metric) => {\n const { dnsDuration, connectionDuration, requestDuration, waitingDuration, cacheDuration } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'dns_duration', dnsDuration);\n this.addIfPresent(values, 'connection_duration', connectionDuration);\n this.addIfPresent(values, 'request_duration', requestDuration);\n this.addIfPresent(values, 'waiting_duration', waitingDuration);\n this.addIfPresent(values, 'cache_duration', cacheDuration);\n\n const context = this.buildInitialContext(metric);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private buildInitialValues(metric: Metric): Values {\n const indicator = metric.name.toLowerCase();\n return {\n [indicator]: metric.value,\n delta: metric.delta,\n };\n }\n\n private buildInitialContext(metric: Metric): Context {\n const navigationEntryId = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session) ?? 'unknown';\n\n return {\n id: metric.id,\n rating: metric.rating,\n navigation_type: metric.navigationType,\n navigation_entry_id: navigationEntryId,\n };\n }\n\n private pushMeasurement(values: Values, context: Context): void {\n const type = 'web-vitals';\n this.corePushMeasurement({ type, values }, { context });\n }\n\n private addIfPresent(source: Values | Context, key: string, metric?: number | string): void {\n if (metric) {\n source[key] = metric;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"webVitalsWithAttribution.js","sourceRoot":"","sources":["../../../../src/instrumentations/webVitals/webVitalsWithAttribution.ts"],"names":[],"mappings":"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","sourcesContent":["import { onCLS, onFCP, onFID, onINP, onLCP, onTTFB } from 'web-vitals/attribution';\nimport type { Metric } from 'web-vitals/attribution';\n\nimport { unknownString } from '@grafana/faro-core';\nimport type { MeasurementEvent, MeasurementsAPI, PushMeasurementOptions } from '@grafana/faro-core';\n\nimport { getItem, webStorageType } from '../../utils';\nimport { NAVIGATION_ID_STORAGE_KEY } from '../instrumentationConstants';\n\ntype Values = MeasurementEvent['values'];\ntype Context = Required<PushMeasurementOptions>['context'];\n\n// duplicate keys saved in variables to save bundle size\n// refs: https://github.com/grafana/faro-web-sdk/pull/595#discussion_r1615833968\nconst loadStateKey = 'load_state';\nconst timeToFirstByteKey = 'time_to_first_byte';\n\nexport class WebVitalsWithAttribution {\n constructor(private corePushMeasurement: MeasurementsAPI['pushMeasurement']) {}\n\n initialize(): void {\n this.measureCLS();\n this.measureFCP();\n this.measureFID();\n this.measureINP();\n this.measureLCP();\n this.measureTTFB();\n }\n\n private measureCLS(): void {\n onCLS((metric) => {\n const { loadState, largestShiftValue, largestShiftTime, largestShiftTarget } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'largest_shift_value', largestShiftValue);\n this.addIfPresent(values, 'largest_shift_time', largestShiftTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'largest_shift_target', largestShiftTarget);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureFCP(): void {\n onFCP((metric) => {\n const { firstByteToFCP, timeToFirstByte, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'first_byte_to_fcp', firstByteToFCP);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureFID(): void {\n onFID((metric) => {\n const { eventTime, eventTarget, eventType, loadState } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'event_time', eventTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'event_target', eventTarget);\n this.addIfPresent(context, 'event_type', eventType);\n this.addIfPresent(context, loadStateKey, loadState);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureINP(): void {\n onINP((metric) => {\n const {\n interactionTime,\n presentationDelay,\n inputDelay,\n processingDuration,\n nextPaintTime,\n loadState,\n interactionTarget,\n interactionType,\n } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'interaction_time', interactionTime);\n this.addIfPresent(values, 'presentation_delay', presentationDelay);\n this.addIfPresent(values, 'input_delay', inputDelay);\n this.addIfPresent(values, 'processing_duration', processingDuration);\n this.addIfPresent(values, 'next_paint_time', nextPaintTime);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, loadStateKey, loadState);\n this.addIfPresent(context, 'interaction_target', interactionTarget);\n this.addIfPresent(context, 'interaction_type', interactionType);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureLCP(): void {\n onLCP((metric) => {\n const { elementRenderDelay, resourceLoadDelay, resourceLoadDuration, timeToFirstByte, element } =\n metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'element_render_delay', elementRenderDelay);\n this.addIfPresent(values, 'resource_load_delay', resourceLoadDelay);\n this.addIfPresent(values, 'resource_load_duration', resourceLoadDuration);\n this.addIfPresent(values, timeToFirstByteKey, timeToFirstByte);\n\n const context = this.buildInitialContext(metric);\n this.addIfPresent(context, 'element', element);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private measureTTFB(): void {\n onTTFB((metric) => {\n const { dnsDuration, connectionDuration, requestDuration, waitingDuration, cacheDuration } = metric.attribution;\n\n const values = this.buildInitialValues(metric);\n this.addIfPresent(values, 'dns_duration', dnsDuration);\n this.addIfPresent(values, 'connection_duration', connectionDuration);\n this.addIfPresent(values, 'request_duration', requestDuration);\n this.addIfPresent(values, 'waiting_duration', waitingDuration);\n this.addIfPresent(values, 'cache_duration', cacheDuration);\n\n const context = this.buildInitialContext(metric);\n\n this.pushMeasurement(values, context);\n });\n }\n\n private buildInitialValues(metric: Metric): Values {\n const indicator = metric.name.toLowerCase();\n return {\n [indicator]: metric.value,\n delta: metric.delta,\n };\n }\n\n private buildInitialContext(metric: Metric): Context {\n const navigationEntryId = getItem(NAVIGATION_ID_STORAGE_KEY, webStorageType.session) ?? unknownString;\n\n return {\n id: metric.id,\n rating: metric.rating,\n navigation_type: metric.navigationType,\n navigation_entry_id: navigationEntryId,\n };\n }\n\n private pushMeasurement(values: Values, context: Context): void {\n const type = 'web-vitals';\n this.corePushMeasurement({ type, values }, { context });\n }\n\n private addIfPresent(source: Values | Context, key: string, metric?: number | string): void {\n if (metric) {\n source[key] = metric;\n }\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { UAParser } from 'ua-parser-js';
2
+ import { unknownString } from '@grafana/faro-core';
2
3
  export const browserMeta = () => {
3
4
  const parser = new UAParser();
4
5
  const { name, version } = parser.getBrowser();
@@ -7,16 +8,15 @@ export const browserMeta = () => {
7
8
  const language = navigator.language;
8
9
  const mobile = navigator.userAgent.includes('Mobi');
9
10
  const brands = getBrands();
10
- const unknown = 'unknown';
11
11
  return {
12
12
  browser: {
13
- name: name !== null && name !== void 0 ? name : unknown,
14
- version: version !== null && version !== void 0 ? version : unknown,
15
- os: `${osName !== null && osName !== void 0 ? osName : unknown} ${osVersion !== null && osVersion !== void 0 ? osVersion : unknown}`,
16
- userAgent: userAgent !== null && userAgent !== void 0 ? userAgent : unknown,
17
- language: language !== null && language !== void 0 ? language : unknown,
13
+ name: name !== null && name !== void 0 ? name : unknownString,
14
+ version: version !== null && version !== void 0 ? version : unknownString,
15
+ os: `${osName !== null && osName !== void 0 ? osName : unknownString} ${osVersion !== null && osVersion !== void 0 ? osVersion : unknownString}`,
16
+ userAgent: userAgent !== null && userAgent !== void 0 ? userAgent : unknownString,
17
+ language: language !== null && language !== void 0 ? language : unknownString,
18
18
  mobile,
19
- brands: brands !== null && brands !== void 0 ? brands : unknown,
19
+ brands: brands !== null && brands !== void 0 ? brands : unknownString,
20
20
  viewportWidth: `${window.innerWidth}`,
21
21
  viewportHeight: `${window.innerHeight}`,
22
22
  },
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/browser/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAIxC,MAAM,CAAC,MAAM,WAAW,GAAoC,GAAG,EAAE;IAC/D,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAC9C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,SAAS,CAAC;IAE1B,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,OAAO;YACrB,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,OAAO;YAC3B,EAAE,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,OAAO,IAAI,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,EAAE;YAClD,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO;YAC/B,QAAQ,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,OAAO;YAC7B,MAAM;YACN,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,OAAO;YACzB,aAAa,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;YACrC,cAAc,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE;SACxC;KACF,CAAC;IAEF,SAAS,SAAS;QAChB,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACrB,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,eAAe,IAAI,SAAS,IAAI,SAAS,CAAC,aAAa,EAAE;YAC3D,iHAAiH;YACjH,OAAQ,SAAiB,CAAC,aAAa,CAAC,MAAM,CAAC;SAChD;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { UAParser } from 'ua-parser-js';\n\nimport type { Meta, MetaBrowser, MetaItem } from '@grafana/faro-core';\n\nexport const browserMeta: MetaItem<Pick<Meta, 'browser'>> = () => {\n const parser = new UAParser();\n const { name, version } = parser.getBrowser();\n const { name: osName, version: osVersion } = parser.getOS();\n const userAgent = parser.getUA();\n const language = navigator.language;\n const mobile = navigator.userAgent.includes('Mobi');\n const brands = getBrands();\n const unknown = 'unknown';\n\n return {\n browser: {\n name: name ?? unknown,\n version: version ?? unknown,\n os: `${osName ?? unknown} ${osVersion ?? unknown}`,\n userAgent: userAgent ?? unknown,\n language: language ?? unknown,\n mobile,\n brands: brands ?? unknown,\n viewportWidth: `${window.innerWidth}`,\n viewportHeight: `${window.innerHeight}`,\n },\n };\n\n function getBrands(): MetaBrowser['brands'] | undefined {\n if (!name || !version) {\n return undefined;\n }\n\n if ('userAgentData' in navigator && navigator.userAgentData) {\n // userAgentData in experimental (only Chrome supports it) thus TS does not ship the respective type declarations\n return (navigator as any).userAgentData.brands;\n }\n\n return undefined;\n }\n};\n"]}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../../src/metas/browser/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,CAAC,MAAM,WAAW,GAAoC,GAAG,EAAE;IAC/D,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAC9C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACpC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,aAAa;YAC3B,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,aAAa;YACjC,EAAE,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,aAAa,IAAI,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,aAAa,EAAE;YAC9D,SAAS,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,aAAa;YACrC,QAAQ,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,aAAa;YACnC,MAAM;YACN,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,aAAa;YAC/B,aAAa,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE;YACrC,cAAc,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE;SACxC;KACF,CAAC;IAEF,SAAS,SAAS;QAChB,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;YACrB,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,eAAe,IAAI,SAAS,IAAI,SAAS,CAAC,aAAa,EAAE;YAC3D,iHAAiH;YACjH,OAAQ,SAAiB,CAAC,aAAa,CAAC,MAAM,CAAC;SAChD;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { UAParser } from 'ua-parser-js';\n\nimport { unknownString } from '@grafana/faro-core';\nimport type { Meta, MetaBrowser, MetaItem } from '@grafana/faro-core';\n\nexport const browserMeta: MetaItem<Pick<Meta, 'browser'>> = () => {\n const parser = new UAParser();\n const { name, version } = parser.getBrowser();\n const { name: osName, version: osVersion } = parser.getOS();\n const userAgent = parser.getUA();\n const language = navigator.language;\n const mobile = navigator.userAgent.includes('Mobi');\n const brands = getBrands();\n\n return {\n browser: {\n name: name ?? unknownString,\n version: version ?? unknownString,\n os: `${osName ?? unknownString} ${osVersion ?? unknownString}`,\n userAgent: userAgent ?? unknownString,\n language: language ?? unknownString,\n mobile,\n brands: brands ?? unknownString,\n viewportWidth: `${window.innerWidth}`,\n viewportHeight: `${window.innerHeight}`,\n },\n };\n\n function getBrands(): MetaBrowser['brands'] | undefined {\n if (!name || !version) {\n return undefined;\n }\n\n if ('userAgentData' in navigator && navigator.userAgentData) {\n // userAgentData in experimental (only Chrome supports it) thus TS does not ship the respective type declarations\n return (navigator as any).userAgentData.brands;\n }\n\n return undefined;\n }\n};\n"]}
@@ -2,6 +2,5 @@ export { browserMeta } from './browser';
2
2
  export { defaultMetas } from './const';
3
3
  export { pageMeta } from './page';
4
4
  export { createSession } from './session';
5
- export { defaultViewMeta } from './view';
6
5
  export { sdkMeta } from './sdk';
7
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC","sourcesContent":["export { browserMeta } from './browser';\n\nexport { defaultMetas } from './const';\n\nexport { pageMeta } from './page';\n\nexport { createSession } from './session';\n\nexport { defaultViewMeta } from './view';\n\nexport { sdkMeta } from './sdk';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC","sourcesContent":["export { browserMeta } from './browser';\n\nexport { defaultMetas } from './const';\n\nexport { pageMeta } from './page';\n\nexport { createSession } from './session';\n\nexport { sdkMeta } from './sdk';\n"]}
@@ -4,7 +4,7 @@ export { defaultEventDomain } from './consts';
4
4
  export { initializeFaro } from './initialize';
5
5
  export { buildStackFrame, ConsoleInstrumentation, ErrorsInstrumentation, getDataFromSafariExtensions, getStackFramesFromError, parseStacktrace, ViewInstrumentation, WebVitalsInstrumentation, SessionInstrumentation, PerformanceInstrumentation, } from './instrumentations';
6
6
  export type { ConsoleInstrumentationOptions, ErrorEvent, ExtendedPromiseRejectionEvent } from './instrumentations';
7
- export { browserMeta, createSession, defaultMetas, defaultViewMeta, pageMeta, sdkMeta } from './metas';
7
+ export { browserMeta, createSession, defaultMetas, pageMeta, sdkMeta } from './metas';
8
8
  export { ConsoleTransport, FetchTransport } from './transports';
9
9
  export type { ClockFn, ConsoleTransportOptions, FetchTransportOptions, FetchTransportRequestOptions, } from './transports';
10
10
  export { faro, allLogLevels, BaseExtension, BaseInstrumentation, BaseTransport, Conventions, createInternalLogger, createPromiseBuffer, deepEqual, defaultExceptionType, defaultGlobalObjectKey, defaultInternalLoggerLevel, defaultLogLevel, genShortID, getCurrentTimestamp, getInternalFaroFromGlobalObject, getTransportBody, globalObject, internalGlobalObjectKey, isArray, isBoolean, isDomError, isDomException, isElement, isElementDefined, isError, isErrorDefined, isErrorEvent, isEvent, isEventDefined, isFunction, isInstanceOf, isInt, isInternalFaroOnGlobalObject, isMap, isMapDefined, isNull, isNumber, isObject, isPrimitive, isRegExp, isString, isSymbol, isSyntheticEvent, isThenable, isToString, isTypeof, isUndefined, InternalLoggerLevel, LogLevel, noop, setInternalFaroOnGlobalObject, TransportItemType, transportItemTypeToBodyKey, VERSION, EVENT_CLICK, EVENT_NAVIGATION, EVENT_ROUTE_CHANGE, EVENT_SESSION_EXTEND, EVENT_SESSION_RESUME, EVENT_SESSION_START, EVENT_VIEW_CHANGED, } from '@grafana/faro-core';
@@ -3,7 +3,7 @@ import type { ConsoleInstrumentationOptions } from './types';
3
3
  export declare class ConsoleInstrumentation extends BaseInstrumentation {
4
4
  private options;
5
5
  readonly name = "@grafana/faro-web-sdk:instrumentation-console";
6
- readonly version = "1.9.1";
6
+ readonly version = "1.10.1";
7
7
  static defaultDisabledLevels: LogLevel[];
8
8
  constructor(options?: ConsoleInstrumentationOptions);
9
9
  initialize(): void;
@@ -3,5 +3,5 @@ export declare const primitiveUnhandledType = "UnhandledRejection";
3
3
  export declare const domErrorType = "DOMError";
4
4
  export declare const domExceptionType = "DOMException";
5
5
  export declare const objectEventValue = "Non-Error exception captured with keys:";
6
- export declare const unknownString = "?";
6
+ export declare const unknownSymbolString = "?";
7
7
  export declare const valueTypeRegex: RegExp;
@@ -1,6 +1,6 @@
1
1
  import { BaseInstrumentation } from '@grafana/faro-core';
2
2
  export declare class ErrorsInstrumentation extends BaseInstrumentation {
3
3
  readonly name = "@grafana/faro-web-sdk:instrumentation-errors";
4
- readonly version = "1.9.1";
4
+ readonly version = "1.10.1";
5
5
  initialize(): void;
6
6
  }
@@ -1,6 +1,6 @@
1
1
  export declare const newLineString = "\n";
2
2
  export declare const evalString = "eval";
3
- export declare const unknownString = "?";
3
+ export declare const unknownSymbolString = "?";
4
4
  export declare const atString = "@";
5
5
  export declare const webkitLineRegex: RegExp;
6
6
  export declare const webkitEvalRegex: RegExp;
@@ -1,7 +1,7 @@
1
1
  import { BaseInstrumentation } from '@grafana/faro-core';
2
2
  export declare class PerformanceInstrumentation extends BaseInstrumentation {
3
3
  readonly name = "@grafana/faro-web-sdk:instrumentation-performance";
4
- readonly version = "1.9.1";
4
+ readonly version = "1.10.1";
5
5
  initialize(): void;
6
6
  private getIgnoreUrls;
7
7
  }
@@ -1,3 +1,4 @@
1
+ import type { unknownString } from '@grafana/faro-core';
1
2
  export type FaroNavigationTiming = Readonly<{
2
3
  duration: string;
3
4
  visibilityState: DocumentVisibilityState;
@@ -25,7 +26,7 @@ export type FaroResourceTiming = Readonly<{
25
26
  decodedBodySize: string;
26
27
  encodedBodySize: string;
27
28
  cacheHitStatus: 'cache' | 'conditionalFetch' | 'fullLoad';
28
- renderBlockingStatus: 'blocking' | 'non-blocking' | 'unknown';
29
+ renderBlockingStatus: 'blocking' | 'non-blocking' | typeof unknownString;
29
30
  initiatorType: string;
30
31
  }>;
31
32
  export type FaroNavigationItem = {
@@ -1,7 +1,7 @@
1
1
  import { BaseInstrumentation } from '@grafana/faro-core';
2
2
  export declare class SessionInstrumentation extends BaseInstrumentation {
3
3
  readonly name = "@grafana/faro-web-sdk:instrumentation-session";
4
- readonly version = "1.9.1";
4
+ readonly version = "1.10.1";
5
5
  private notifiedSession;
6
6
  private sendSessionStartEvent;
7
7
  private createInitialSession;
@@ -1,7 +1,7 @@
1
1
  import { BaseInstrumentation } from '@grafana/faro-core';
2
2
  export declare class ViewInstrumentation extends BaseInstrumentation {
3
3
  readonly name = "@grafana/faro-web-sdk:instrumentation-view";
4
- readonly version = "1.9.1";
4
+ readonly version = "1.10.1";
5
5
  private notifiedView;
6
6
  private sendViewChangedEvent;
7
7
  initialize(): void;
@@ -1,7 +1,7 @@
1
1
  import { BaseInstrumentation } from '@grafana/faro-core';
2
2
  export declare class WebVitalsInstrumentation extends BaseInstrumentation {
3
3
  readonly name = "@grafana/faro-web-sdk:instrumentation-web-vitals";
4
- readonly version = "1.9.1";
4
+ readonly version = "1.10.1";
5
5
  initialize(): void;
6
6
  private intializeWebVitalsInstrumentation;
7
7
  }
@@ -2,5 +2,4 @@ export { browserMeta } from './browser';
2
2
  export { defaultMetas } from './const';
3
3
  export { pageMeta } from './page';
4
4
  export { createSession } from './session';
5
- export { defaultViewMeta } from './view';
6
5
  export { sdkMeta } from './sdk';
@@ -4,7 +4,7 @@ import type { ConsoleTransportOptions } from './types';
4
4
  export declare class ConsoleTransport extends BaseTransport {
5
5
  private options;
6
6
  readonly name = "@grafana/faro-web-sdk:transport-console";
7
- readonly version = "1.9.1";
7
+ readonly version = "1.10.1";
8
8
  constructor(options?: ConsoleTransportOptions);
9
9
  send(item: TransportItem): void;
10
10
  }
@@ -4,7 +4,7 @@ import type { FetchTransportOptions } from './types';
4
4
  export declare class FetchTransport extends BaseTransport {
5
5
  private options;
6
6
  readonly name = "@grafana/faro-web-sdk:transport-fetch";
7
- readonly version = "1.9.1";
7
+ readonly version = "1.10.1";
8
8
  promiseBuffer: PromiseBuffer<Response | void>;
9
9
  private readonly rateLimitBackoffMs;
10
10
  private readonly getNow;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/faro-web-sdk",
3
- "version": "1.9.1",
3
+ "version": "1.10.1",
4
4
  "description": "Faro instrumentations, metas, transports for web.",
5
5
  "keywords": [
6
6
  "observability",
@@ -52,7 +52,7 @@
52
52
  "quality:circular-deps": "madge --circular ."
53
53
  },
54
54
  "dependencies": {
55
- "@grafana/faro-core": "^1.9.1",
55
+ "@grafana/faro-core": "^1.10.1",
56
56
  "ua-parser-js": "^1.0.32",
57
57
  "web-vitals": "^4.0.1"
58
58
  },
@@ -63,5 +63,5 @@
63
63
  "publishConfig": {
64
64
  "access": "public"
65
65
  },
66
- "gitHead": "5c60c80d440289bb4f1ec511abacc56b4e29dd9f"
66
+ "gitHead": "b0f480e48d5dd405b4650c9d26e3648454806411"
67
67
  }
@@ -1,3 +0,0 @@
1
- export declare const defaultViewMeta: {
2
- name: string;
3
- };
@@ -1 +0,0 @@
1
- export { defaultViewMeta } from './const';
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultViewMeta = void 0;
4
- exports.defaultViewMeta = {
5
- name: 'default',
6
- };
7
- //# sourceMappingURL=const.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/metas/view/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG;IAC7B,IAAI,EAAE,SAAS;CAChB,CAAC","sourcesContent":["export const defaultViewMeta = {\n name: 'default',\n};\n"]}
@@ -1,6 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaultViewMeta = void 0;
4
- var const_1 = require("./const");
5
- Object.defineProperty(exports, "defaultViewMeta", { enumerable: true, get: function () { return const_1.defaultViewMeta; } });
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/metas/view/index.ts"],"names":[],"mappings":";;;AAAA,iCAA0C;AAAjC,wGAAA,eAAe,OAAA","sourcesContent":["export { defaultViewMeta } from './const';\n"]}
@@ -1,4 +0,0 @@
1
- export const defaultViewMeta = {
2
- name: 'default',
3
- };
4
- //# sourceMappingURL=const.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../src/metas/view/const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,SAAS;CAChB,CAAC","sourcesContent":["export const defaultViewMeta = {\n name: 'default',\n};\n"]}
@@ -1,2 +0,0 @@
1
- export { defaultViewMeta } from './const';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/metas/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC","sourcesContent":["export { defaultViewMeta } from './const';\n"]}
@@ -1,3 +0,0 @@
1
- export declare const defaultViewMeta: {
2
- name: string;
3
- };
@@ -1 +0,0 @@
1
- export { defaultViewMeta } from './const';