getNavigationEntry.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { WINDOW } from '../../types.js';
  2. /*
  3. * Copyright 2022 Google LLC
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * https://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. const getNavigationEntryFromPerformanceTiming = () => {
  18. // eslint-disable-next-line deprecation/deprecation
  19. const timing = WINDOW.performance.timing;
  20. // eslint-disable-next-line deprecation/deprecation
  21. const type = WINDOW.performance.navigation.type;
  22. const navigationEntry = {
  23. entryType: 'navigation',
  24. startTime: 0,
  25. type: type == 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate',
  26. };
  27. for (const key in timing) {
  28. if (key !== 'navigationStart' && key !== 'toJSON') {
  29. // eslint-disable-next-line deprecation/deprecation
  30. navigationEntry[key] = Math.max((timing[key ] ) - timing.navigationStart, 0);
  31. }
  32. }
  33. return navigationEntry ;
  34. };
  35. const getNavigationEntry = () => {
  36. if (WINDOW.__WEB_VITALS_POLYFILL__) {
  37. return (
  38. WINDOW.performance &&
  39. ((performance.getEntriesByType && performance.getEntriesByType('navigation')[0]) ||
  40. getNavigationEntryFromPerformanceTiming())
  41. );
  42. } else {
  43. return WINDOW.performance && performance.getEntriesByType && performance.getEntriesByType('navigation')[0];
  44. }
  45. };
  46. export { getNavigationEntry };
  47. //# sourceMappingURL=getNavigationEntry.js.map