@newrelic/browser-agent 1.321.0-rc.7 → 1.321.0-rc.9

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 (46) hide show
  1. package/dist/cjs/common/constants/env.cdn.js +1 -1
  2. package/dist/cjs/common/constants/env.npm.js +1 -1
  3. package/dist/cjs/common/util/console.js +1 -0
  4. package/dist/cjs/common/v2/manifest.js +142 -0
  5. package/dist/cjs/common/v2/script-tracker-types.js +27 -0
  6. package/dist/cjs/common/v2/script-tracker.js +223 -25
  7. package/dist/cjs/common/v2/utils.js +47 -1
  8. package/dist/cjs/features/generic_events/aggregate/index.js +28 -1
  9. package/dist/cjs/loaders/api/register-api-types.js +13 -4
  10. package/dist/cjs/loaders/api/register.js +18 -0
  11. package/dist/esm/common/constants/env.cdn.js +1 -1
  12. package/dist/esm/common/constants/env.npm.js +1 -1
  13. package/dist/esm/common/util/console.js +1 -0
  14. package/dist/esm/common/v2/manifest.js +136 -0
  15. package/dist/esm/common/v2/script-tracker-types.js +24 -0
  16. package/dist/esm/common/v2/script-tracker.js +222 -26
  17. package/dist/esm/common/v2/utils.js +46 -1
  18. package/dist/esm/features/generic_events/aggregate/index.js +29 -2
  19. package/dist/esm/loaders/api/register-api-types.js +14 -4
  20. package/dist/esm/loaders/api/register.js +18 -1
  21. package/dist/tsconfig.tsbuildinfo +1 -1
  22. package/dist/types/common/config/init-types.d.ts +1 -1
  23. package/dist/types/common/util/console.d.ts +1 -0
  24. package/dist/types/common/util/console.d.ts.map +1 -1
  25. package/dist/types/common/v2/manifest.d.ts +66 -0
  26. package/dist/types/common/v2/manifest.d.ts.map +1 -0
  27. package/dist/types/common/v2/script-tracker-types.d.ts +25 -0
  28. package/dist/types/common/v2/script-tracker-types.d.ts.map +1 -0
  29. package/dist/types/common/v2/script-tracker.d.ts +25 -4
  30. package/dist/types/common/v2/script-tracker.d.ts.map +1 -1
  31. package/dist/types/common/v2/utils.d.ts +12 -0
  32. package/dist/types/common/v2/utils.d.ts.map +1 -1
  33. package/dist/types/features/generic_events/aggregate/index.d.ts.map +1 -1
  34. package/dist/types/loaders/api/register-api-types.d.ts +31 -4
  35. package/dist/types/loaders/api/register-api-types.d.ts.map +1 -1
  36. package/dist/types/loaders/api/register.d.ts +1 -0
  37. package/dist/types/loaders/api/register.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/src/common/util/console.js +1 -0
  40. package/src/common/v2/manifest.js +126 -0
  41. package/src/common/v2/script-tracker-types.js +24 -0
  42. package/src/common/v2/script-tracker.js +218 -26
  43. package/src/common/v2/utils.js +42 -1
  44. package/src/features/generic_events/aggregate/index.js +22 -2
  45. package/src/loaders/api/register-api-types.js +14 -4
  46. package/src/loaders/api/register.js +16 -1
@@ -17,11 +17,14 @@ import { single } from '../../common/util/invoke'
17
17
  import { measure } from './measure'
18
18
  import { recordCustomEvent } from './recordCustomEvent'
19
19
  import { subscribeToPageUnload } from '../../common/window/page-visibility'
20
- import { findScriptTimings } from '../../common/v2/script-tracker'
20
+ import { findScriptTimings, applyManifestTimings } from '../../common/v2/script-tracker'
21
21
  import { trackMFEVitals } from '../../common/v2/mfe-vitals'
22
22
  import { generateRandomHexString } from '../../common/ids/unique-id'
23
+ import { parseManifest } from '../../common/v2/manifest'
23
24
  import { cleanURL } from '../../common/url/clean-url'
24
25
 
26
+ const TIMING_METHODS = ['entry', 'scripts', 'all']
27
+
25
28
  /**
26
29
  * @typedef {import('./register-api-types').RegisterAPI} RegisterAPI
27
30
  */
@@ -49,6 +52,7 @@ export const warnings = {
49
52
  disabled: single(() => warn(55)),
50
53
  invalidTarget: single((target) => warn(48, target)),
51
54
  deregistered: single(() => warn(68)),
55
+ invalidTimingMethod: single((value) => warn(80, value)),
52
56
  duplicateName: single((target) => warn(81, target)),
53
57
  duplicateId: single((target) => warn(82, target))
54
58
  }
@@ -84,9 +88,17 @@ function register (agentRef, target) {
84
88
  get id () { return agentRef.runtime.appMetadata.agents?.[0].entityGuid }, // getter because this is asynchronously set
85
89
  type: V2_TYPES.BA
86
90
  }
91
+ target.manifest = parseManifest(target.manifest)
92
+ if (target.timingMethod !== undefined && !TIMING_METHODS.includes(target.timingMethod)) {
93
+ warnings.invalidTimingMethod(target.timingMethod)
94
+ target.timingMethod = undefined
95
+ }
87
96
 
88
97
  // The script timings for this entity, which will be used to populate part of the MicroFrontEndTiming custom event.
89
98
  const timings = findScriptTimings(target)
99
+ // Always applied when a manifest is present -- totalWeight/renderBlocking accumulate from manifest assets
100
+ // regardless of timingMethod; actual timing widening inside stays gated to 'scripts'/'all' (see applyManifestTimings).
101
+ if (target.manifest) applyManifestTimings(timings, target)
90
102
 
91
103
  // Track MFE vitals for this entity, which will be used to populate part of the MicroFrontEndTiming custom event.
92
104
  const vitals = trackMFEVitals(target, timings)
@@ -227,6 +239,9 @@ function register (agentRef, target) {
227
239
  timeToFetch, // fetchStart to fetchEnd
228
240
  timeToLoad: timeToFetch + timeToExecute, // fetch time and script time together
229
241
  timeToRegister: timings.registeredAt, // timestamp when register() was called
242
+ totalWeight: timings.totalWeight, // sum of transferSize bytes across every detected asset (entry script + matched manifest assets)
243
+ // renderBlocking: true if any detected asset was 'blocking', false if only 'non-blocking' assets were seen, omitted entirely if no detected asset reported the attribute at all
244
+ ...(timings.renderBlocking !== undefined && { renderBlocking: timings.renderBlocking }),
230
245
  // leave room to extend these with more data keys as needed
231
246
  ...(vitals.fcp.value >= 0 && { 'vitals.fcp.value': vitals.fcp.value }), // FCP vital object with value and metadata
232
247
  ...(vitals.lcp.value >= 0 && { 'vitals.lcp.value': vitals.lcp.value }), // LCP vital object with value and metadata