harperdb 4.7.21 → 4.7.22
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.
- package/README.md +1 -1
- package/bin/harperdb.js +1 -1
- package/bin/lite.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +1 -1
- package/launchServiceScripts/launchNatsReplyService.js +1 -1
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +1 -1
- package/npm-shrinkwrap.json +41 -82
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +1 -1
- package/server/threads/threadServer.js +1 -1
- package/studio/web/assets/{index-cZbhNKPv.js → index-BlG-cpH9.js} +2 -2
- package/studio/web/assets/{index-cZbhNKPv.js.map → index-BlG-cpH9.js.map} +1 -1
- package/studio/web/assets/{index-BMKHXWrK.js → index-BpmqvC1O.js} +5 -5
- package/studio/web/assets/{index-BMKHXWrK.js.map → index-BpmqvC1O.js.map} +1 -1
- package/studio/web/assets/{index-DP5O80Ld.js → index-DFovvBYL.js} +2 -2
- package/studio/web/assets/{index-DP5O80Ld.js.map → index-DFovvBYL.js.map} +1 -1
- package/studio/web/assets/{index.lazy-_WqXCxX6.js → index.lazy-BhReIK4y.js} +2 -2
- package/studio/web/assets/{index.lazy-_WqXCxX6.js.map → index.lazy-BhReIK4y.js.map} +1 -1
- package/studio/web/assets/{profiler-CiZIC7ZI.js → profiler-BhXa8xgR.js} +2 -2
- package/studio/web/assets/{profiler-CiZIC7ZI.js.map → profiler-BhXa8xgR.js.map} +1 -1
- package/studio/web/assets/{react-redux-D8H6oZRQ.js → react-redux-DkN7OdDj.js} +2 -2
- package/studio/web/assets/{react-redux-D8H6oZRQ.js.map → react-redux-DkN7OdDj.js.map} +1 -1
- package/studio/web/assets/{startRecording-oz3NQO5N.js → startRecording-Da15t52a.js} +2 -2
- package/studio/web/assets/{startRecording-oz3NQO5N.js.map → startRecording-Da15t52a.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/scripts/restartHdb.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startRecording-oz3NQO5N.js","sources":["../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/types/sessionReplayConstants.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/insertionCursor.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationUtils.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeStyleSheets.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttribute.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttributes.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeNode.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationStats.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/changeEncoder.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationTransaction.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeFullSnapshot.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeNodeAsChange.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeFullSnapshotAsChange.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/assembly.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeMutations.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/viewports.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/startFullSnapshots.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/itemIds.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/recordingScope.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/elementsScrollPositions.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/eventsUtils.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMove.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMouseInteraction.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackScroll.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewportResize.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMediaInteraction.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackStyleSheet.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFocus.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFrustration.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewEnd.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackInput.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/mutationBatch.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMutation.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/shadowRootsController.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/record.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/buildReplayPayload.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segment.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segmentCollection.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/startSegmentTelemetry.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/startRecordBridge.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/boot/startRecording.js"],"sourcesContent":["export const RecordType = {\n FullSnapshot: 2,\n IncrementalSnapshot: 3,\n Meta: 4,\n Focus: 6,\n ViewEnd: 7,\n VisualViewport: 8,\n FrustrationRecord: 9,\n Change: 12,\n};\nexport const NodeType = {\n Document: 0,\n DocumentType: 1,\n Element: 2,\n Text: 3,\n CDATA: 4,\n DocumentFragment: 11,\n};\nexport const ChangeType = {\n AddString: 0,\n AddNode: 1,\n RemoveNode: 2,\n Attribute: 3,\n Text: 4,\n Size: 5,\n ScrollPosition: 6,\n AddStyleSheet: 7,\n AttachedStyleSheets: 8,\n MediaPlaybackState: 9,\n VisualViewport: 10,\n};\nexport const PlaybackState = {\n Playing: 0,\n Paused: 1,\n};\nexport const IncrementalSource = {\n Mutation: 0,\n MouseMove: 1,\n MouseInteraction: 2,\n Scroll: 3,\n ViewportResize: 4,\n Input: 5,\n TouchMove: 6,\n MediaInteraction: 7,\n StyleSheetRule: 8,\n // CanvasMutation : 9,\n // Font : 10,\n};\nexport const MouseInteractionType = {\n MouseUp: 0,\n MouseDown: 1,\n Click: 2,\n ContextMenu: 3,\n DblClick: 4,\n Focus: 5,\n Blur: 6,\n TouchStart: 7,\n TouchEnd: 9,\n};\nexport const MediaInteractionType = {\n Play: 0,\n Pause: 1,\n};\n//# sourceMappingURL=sessionReplayConstants.js.map","/** Returns an InsertionCursor which starts positioned at the root of the document. */\nexport function createRootInsertionCursor(nodeIds) {\n return createInsertionCursor(undefined, undefined, nodeIds);\n}\n/**\n * Returns an InsertionCursor which starts positioned in the child list of the given\n * parent node. If a next sibling is provided, the cursor points to the position\n * immediately before the next sibling; otherwise, the cursor points to the end of the\n * child list.\n */\nexport function createChildInsertionCursor(parentId, nextSiblingId, nodeIds) {\n return createInsertionCursor(parentId, nextSiblingId, nodeIds);\n}\nfunction createInsertionCursor(parentId, nextSiblingId, nodeIds) {\n let cursor = {\n container: undefined,\n parentId,\n previousSiblingId: undefined,\n nextSiblingId,\n };\n const computeInsertionPoint = (nodeId) => {\n if (cursor.previousSiblingId === nodeId - 1) {\n // Use an AppendAfterPreviousInsertionPoint. (i.e., 0)\n return 0;\n }\n if (cursor.nextSiblingId !== undefined) {\n // Use an InsertBeforeInsertionPoint. We identify the next sibling using a\n // negative integer indicating the difference between the new node's id and its next\n // sibling's id.\n return cursor.nextSiblingId - nodeId;\n }\n if (cursor.parentId !== undefined) {\n // Use an AppendChildInsertionPoint. We identify the parent node using a positive\n // integer indicating the difference between the new node's id and its parent's id.\n return nodeId - cursor.parentId;\n }\n // There's no parent. Use a RootInsertionPoint. (i.e., null)\n return null;\n };\n return {\n advance(node) {\n const nodeId = nodeIds.getOrInsert(node);\n const insertionPoint = computeInsertionPoint(nodeId);\n cursor.previousSiblingId = nodeId;\n return { nodeId, insertionPoint };\n },\n ascend() {\n if (cursor.container) {\n cursor = cursor.container;\n }\n },\n descend() {\n if (cursor.previousSiblingId !== undefined) {\n cursor = {\n container: cursor,\n parentId: cursor.previousSiblingId,\n previousSiblingId: undefined,\n nextSiblingId: undefined,\n };\n }\n },\n };\n}\n//# sourceMappingURL=insertionCursor.js.map","import { buildUrl } from '@datadog/browser-core';\nimport { CENSORED_STRING_MARK, shouldMaskNode } from '@datadog/browser-rum-core';\n/**\n * Get the element \"value\" to be serialized as an attribute or an input update record. It respects\n * the input privacy mode of the element.\n * PERFROMANCE OPTIMIZATION: Assumes that privacy level `HIDDEN` is never encountered because of earlier checks.\n */\nexport function getElementInputValue(element, nodePrivacyLevel) {\n /*\n BROWSER SPEC NOTE: <input>, <select>\n For some <input> elements, the `value` is an exceptional property/attribute that has the\n value synced between el.value and el.getAttribute()\n input[type=button,checkbox,hidden,image,radio,reset,submit]\n */\n const tagName = element.tagName;\n const value = element.value;\n if (shouldMaskNode(element, nodePrivacyLevel)) {\n const type = element.type;\n if (tagName === 'INPUT' && (type === 'button' || type === 'submit' || type === 'reset')) {\n // Overrule `MASK` privacy level for button-like element values, as they are used during replay\n // to display their label. They can still be hidden via the \"hidden\" privacy attribute or class name.\n return value;\n }\n else if (!value || tagName === 'OPTION') {\n // <Option> value provides no benefit\n return;\n }\n return CENSORED_STRING_MARK;\n }\n if (tagName === 'OPTION' || tagName === 'SELECT') {\n return element.value;\n }\n if (tagName !== 'INPUT' && tagName !== 'TEXTAREA') {\n return;\n }\n return value;\n}\nexport const URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")([^\"]*)\"|([^)]*))\\)/gm;\nexport const ABSOLUTE_URL = /^[A-Za-z]+:|^\\/\\//;\nexport const DATA_URI = /^[\"']?data:.*,/i;\nexport function switchToAbsoluteUrl(cssText, cssHref) {\n return cssText.replace(URL_IN_CSS_REF, (matchingSubstring, singleQuote, urlWrappedInSingleQuotes, doubleQuote, urlWrappedInDoubleQuotes, urlNotWrappedInQuotes) => {\n const url = urlWrappedInSingleQuotes || urlWrappedInDoubleQuotes || urlNotWrappedInQuotes;\n if (!cssHref || !url || ABSOLUTE_URL.test(url) || DATA_URI.test(url)) {\n return matchingSubstring;\n }\n const quote = singleQuote || doubleQuote || '';\n return `url(${quote}${makeUrlAbsolute(url, cssHref)}${quote})`;\n });\n}\nfunction makeUrlAbsolute(url, baseUrl) {\n try {\n return buildUrl(url, baseUrl).href;\n }\n catch (_a) {\n return url;\n }\n}\nconst TAG_NAME_REGEX = /[^a-z1-6-_]/;\nexport function getValidTagName(tagName) {\n const processedTagName = tagName.toLowerCase().trim();\n if (TAG_NAME_REGEX.test(processedTagName)) {\n // if the tag name is odd and we cannot extract\n // anything from the string, then we return a\n // generic div\n return 'div';\n }\n return processedTagName;\n}\n/**\n * Returns the tag name of the given element, normalized to ensure a consistent lowercase\n * representation regardless of whether the element is HTML, XHTML, or SVG.\n */\nexport function normalizedTagName(element) {\n return element.tagName.toLowerCase();\n}\nexport function censoredImageForSize(width, height) {\n return `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${width}' height='${height}' style='background-color:silver'%3E%3C/svg%3E`;\n}\n//# sourceMappingURL=serializationUtils.js.map","export function serializeStyleSheets(cssStyleSheets, transaction) {\n if (cssStyleSheets === undefined || cssStyleSheets.length === 0) {\n return undefined;\n }\n const serializeStylesheet = (cssStyleSheet) => {\n const rules = cssStyleSheet.cssRules || cssStyleSheet.rules;\n const cssRules = Array.from(rules, (cssRule) => cssRule.cssText);\n transaction.addMetric('cssText', cssRules.reduce((totalLength, rule) => totalLength + rule.length, 0));\n const styleSheet = {\n cssRules,\n disabled: cssStyleSheet.disabled || undefined,\n media: cssStyleSheet.media.length > 0 ? Array.from(cssStyleSheet.media) : undefined,\n };\n return styleSheet;\n };\n // Safari iOS 16.x implements adoptedStyleSheets as a FrozenArray that:\n // - can't be iterated over through map or for...of\n // - can't be converted to regular array with Array.from\n // - can't be detected with Array.isArray or Object.isFrozen\n // Use index access to avoid the issue\n const styleSheets = [];\n for (let index = 0; index < cssStyleSheets.length; index++) {\n styleSheets.push(serializeStylesheet(cssStyleSheets[index]));\n }\n return styleSheets;\n}\n//# sourceMappingURL=serializeStyleSheets.js.map","import { NodePrivacyLevel, CENSORED_STRING_MARK, CENSORED_IMG_MARK, sanitizeIfLongDataUrl, shouldMaskAttribute, } from '@datadog/browser-rum-core';\nimport { censoredImageForSize } from './serializationUtils';\n// TODO: temporarily bump the Session Replay limit to 1Mb for dataUrls\n// This limit should be removed after [PANA-2843] is implemented\nexport const MAX_ATTRIBUTE_VALUE_CHAR_LENGTH = 1000000;\nexport function serializeAttribute(element, nodePrivacyLevel, attributeName, configuration) {\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n // dup condition for direct access case\n return null;\n }\n const attributeValue = element.getAttribute(attributeName);\n const tagName = element.tagName;\n if (shouldMaskAttribute(tagName, attributeName, attributeValue, nodePrivacyLevel, configuration)) {\n // mask image URLs\n if (tagName === 'IMG') {\n // generate image with similar dimension than the original to have the same rendering behaviour\n const image = element;\n if (image.naturalWidth > 0) {\n return censoredImageForSize(image.naturalWidth, image.naturalHeight);\n }\n const { width, height } = element.getBoundingClientRect();\n if (width > 0 || height > 0) {\n return censoredImageForSize(width, height);\n }\n // if we can't get the image size, fallback to the censored image\n return CENSORED_IMG_MARK;\n }\n if (tagName === 'SOURCE') {\n return CENSORED_IMG_MARK;\n }\n return CENSORED_STRING_MARK;\n }\n if (!attributeValue) {\n return attributeValue;\n }\n return sanitizeIfLongDataUrl(attributeValue, MAX_ATTRIBUTE_VALUE_CHAR_LENGTH);\n}\n//# sourceMappingURL=serializeAttribute.js.map","import { NodePrivacyLevel, shouldMaskNode } from '@datadog/browser-rum-core';\nimport { isSafari } from '@datadog/browser-core';\nimport { getElementInputValue, normalizedTagName, switchToAbsoluteUrl } from './serializationUtils';\nimport { serializeAttribute } from './serializeAttribute';\nexport function serializeAttributes(element, nodePrivacyLevel, transaction) {\n return {\n ...serializeDOMAttributes(element, nodePrivacyLevel, transaction),\n ...serializeVirtualAttributes(element, nodePrivacyLevel, transaction),\n };\n}\nexport function serializeDOMAttributes(element, nodePrivacyLevel, transaction) {\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n return {};\n }\n const attrs = {};\n const tagName = normalizedTagName(element);\n for (let i = 0; i < element.attributes.length; i += 1) {\n const attribute = element.attributes.item(i);\n const attributeName = attribute.name;\n const attributeValue = serializeAttribute(element, nodePrivacyLevel, attributeName, transaction.scope.configuration);\n if (attributeValue !== null) {\n attrs[attributeName] = attributeValue;\n }\n }\n if (element.value &&\n (tagName === 'textarea' || tagName === 'select' || tagName === 'option' || tagName === 'input')) {\n const formValue = getElementInputValue(element, nodePrivacyLevel);\n if (formValue !== undefined) {\n attrs.value = formValue;\n }\n }\n /**\n * <Option> can be selected, which occurs if its `value` matches ancestor `<Select>.value`\n */\n if (tagName === 'option') {\n const optionElement = element;\n if (optionElement.selected && !shouldMaskNode(optionElement, nodePrivacyLevel)) {\n attrs.selected = '';\n }\n else {\n delete attrs.selected;\n }\n }\n /**\n * Forms: input[type=checkbox,radio]\n * The `checked` property for <input> is a little bit special:\n * 1. el.checked is a setter that returns if truthy.\n * 2. getAttribute returns the string value\n * getAttribute('checked') does not sync with `Element.checked`, so use JS property\n * NOTE: `checked` property exists on `HTMLInputElement`. For serializer assumptions, we check for type=radio|check.\n */\n const inputElement = element;\n if (tagName === 'input' && (inputElement.type === 'radio' || inputElement.type === 'checkbox')) {\n if (inputElement.checked && !shouldMaskNode(inputElement, nodePrivacyLevel)) {\n attrs.checked = '';\n }\n else {\n delete attrs.checked;\n }\n }\n return attrs;\n}\nexport function serializeVirtualAttributes(element, nodePrivacyLevel, transaction) {\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n return {};\n }\n const attrs = {};\n const doc = element.ownerDocument;\n const tagName = normalizedTagName(element);\n // remote css\n if (tagName === 'link') {\n const stylesheet = Array.from(doc.styleSheets).find((s) => s.href === element.href);\n const cssText = getCssRulesString(stylesheet);\n if (cssText && stylesheet) {\n transaction.addMetric('cssText', cssText.length);\n attrs._cssText = cssText;\n }\n }\n // dynamic stylesheet\n if (tagName === 'style' && element.sheet) {\n const cssText = getCssRulesString(element.sheet);\n if (cssText) {\n transaction.addMetric('cssText', cssText.length);\n attrs._cssText = cssText;\n }\n }\n /**\n * Serialize the media playback state\n */\n if (tagName === 'audio' || tagName === 'video') {\n const mediaElement = element;\n attrs.rr_mediaState = mediaElement.paused ? 'paused' : 'played';\n }\n /**\n * Serialize the scroll state for each element only for full snapshot\n */\n let scrollTop;\n let scrollLeft;\n switch (transaction.kind) {\n case 0 /* SerializationKind.INITIAL_FULL_SNAPSHOT */:\n scrollTop = Math.round(element.scrollTop);\n scrollLeft = Math.round(element.scrollLeft);\n if (scrollTop || scrollLeft) {\n transaction.scope.elementsScrollPositions.set(element, { scrollTop, scrollLeft });\n }\n break;\n case 1 /* SerializationKind.SUBSEQUENT_FULL_SNAPSHOT */:\n if (transaction.scope.elementsScrollPositions.has(element)) {\n ;\n ({ scrollTop, scrollLeft } = transaction.scope.elementsScrollPositions.get(element));\n }\n break;\n }\n if (scrollLeft) {\n attrs.rr_scrollLeft = scrollLeft;\n }\n if (scrollTop) {\n attrs.rr_scrollTop = scrollTop;\n }\n return attrs;\n}\nexport function getCssRulesString(cssStyleSheet) {\n if (!cssStyleSheet) {\n return null;\n }\n let rules;\n try {\n rules = cssStyleSheet.rules || cssStyleSheet.cssRules;\n }\n catch (_a) {\n // if css is protected by CORS we cannot access cssRules see: https://www.w3.org/TR/cssom-1/#the-cssstylesheet-interface\n }\n if (!rules) {\n return null;\n }\n const styleSheetCssText = Array.from(rules, isSafari() ? getCssRuleStringForSafari : getCssRuleString).join('');\n return switchToAbsoluteUrl(styleSheetCssText, cssStyleSheet.href);\n}\nfunction getCssRuleStringForSafari(rule) {\n // Safari does not escape attribute selectors containing : properly\n // https://bugs.webkit.org/show_bug.cgi?id=184604\n if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n // This regex replaces [foo:bar] by [foo\\\\:bar]\n const escapeColon = /(\\[[\\w-]+[^\\\\])(:[^\\]]+\\])/g;\n return rule.cssText.replace(escapeColon, '$1\\\\$2');\n }\n return getCssRuleString(rule);\n}\nfunction getCssRuleString(rule) {\n // If it's an @import rule, try to inline sub-rules recursively with `getCssRulesString`. This\n // operation can fail if the imported stylesheet is protected by CORS, in which case we fallback\n // to the @import rule CSS text.\n return (isCSSImportRule(rule) && getCssRulesString(rule.styleSheet)) || rule.cssText;\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n return 'selectorText' in rule;\n}\n//# sourceMappingURL=serializeAttributes.js.map","import { reducePrivacyLevel, getNodeSelfPrivacyLevel, getTextContent, isNodeShadowRoot, hasChildNodes, forEachChildNodes, NodePrivacyLevel, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, } from '@datadog/browser-rum-core';\nimport { NodeType } from '../../../types';\nimport { getValidTagName } from './serializationUtils';\nimport { serializeStyleSheets } from './serializeStyleSheets';\nimport { serializeAttributes } from './serializeAttributes';\nexport function serializeNode(node, parentNodePrivacyLevel, transaction) {\n switch (node.nodeType) {\n case node.DOCUMENT_NODE:\n return serializeDocumentNode(node, parentNodePrivacyLevel, transaction);\n case node.DOCUMENT_FRAGMENT_NODE:\n return serializeDocumentFragmentNode(node, parentNodePrivacyLevel, transaction);\n case node.DOCUMENT_TYPE_NODE:\n return serializeDocumentTypeNode(node, transaction);\n case node.ELEMENT_NODE:\n return serializeElementNode(node, parentNodePrivacyLevel, transaction);\n case node.TEXT_NODE:\n return serializeTextNode(node, parentNodePrivacyLevel, transaction);\n case node.CDATA_SECTION_NODE:\n return serializeCDataNode(node, transaction);\n default:\n return null;\n }\n}\nexport function serializeChildNodes(node, parentNodePrivacyLevel, transaction) {\n const result = [];\n forEachChildNodes(node, (childNode) => {\n const serializedChildNode = serializeNode(childNode, parentNodePrivacyLevel, transaction);\n if (serializedChildNode) {\n result.push(serializedChildNode);\n }\n });\n return result;\n}\nexport function serializeDocumentNode(document, parentNodePrivacyLevel, transaction) {\n return {\n type: NodeType.Document,\n id: transaction.assignId(document),\n childNodes: serializeChildNodes(document, parentNodePrivacyLevel, transaction),\n adoptedStyleSheets: serializeStyleSheets(document.adoptedStyleSheets, transaction),\n };\n}\nfunction serializeDocumentFragmentNode(element, parentNodePrivacyLevel, transaction) {\n const isShadowRoot = isNodeShadowRoot(element);\n if (isShadowRoot) {\n transaction.scope.shadowRootsController.addShadowRoot(element, transaction.scope);\n }\n return {\n type: NodeType.DocumentFragment,\n id: transaction.assignId(element),\n childNodes: serializeChildNodes(element, parentNodePrivacyLevel, transaction),\n isShadowRoot,\n adoptedStyleSheets: isShadowRoot ? serializeStyleSheets(element.adoptedStyleSheets, transaction) : undefined,\n };\n}\nfunction serializeDocumentTypeNode(documentType, transaction) {\n return {\n type: NodeType.DocumentType,\n id: transaction.assignId(documentType),\n name: documentType.name,\n publicId: documentType.publicId,\n systemId: documentType.systemId,\n };\n}\n/**\n * Serializing Element nodes involves capturing:\n * 1. HTML ATTRIBUTES:\n * 2. JS STATE:\n * - scroll offsets\n * - Form fields (input value, checkbox checked, option selection, range)\n * - Canvas state,\n * - Media (video/audio) play mode + currentTime\n * - iframe contents\n * - webcomponents\n * 3. CUSTOM PROPERTIES:\n * - height+width for when `hidden` to cover the element\n * 4. EXCLUDED INTERACTION STATE:\n * - focus (possible, but not worth perf impact)\n * - hover (tracked only via mouse activity)\n * - fullscreen mode\n */\nfunction serializeElementNode(element, parentNodePrivacyLevel, transaction) {\n const tagName = getValidTagName(element.tagName);\n const isSVG = isSVGElement(element) || undefined;\n // For performance reason, we don't use getNodePrivacyLevel directly: we leverage the\n // parentNodePrivacyLevel option to avoid iterating over all parents\n const nodePrivacyLevel = reducePrivacyLevel(getNodeSelfPrivacyLevel(element), parentNodePrivacyLevel);\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n const { width, height } = element.getBoundingClientRect();\n return {\n type: NodeType.Element,\n id: transaction.assignId(element),\n tagName,\n attributes: {\n rr_width: `${width}px`,\n rr_height: `${height}px`,\n [PRIVACY_ATTR_NAME]: PRIVACY_ATTR_VALUE_HIDDEN,\n },\n childNodes: [],\n isSVG,\n };\n }\n // Ignore Elements like Script and some Link, Metas\n if (nodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n return null;\n }\n const id = transaction.assignId(element);\n const attributes = serializeAttributes(element, nodePrivacyLevel, transaction);\n let childNodes = [];\n if (hasChildNodes(element) &&\n // Do not serialize style children as the css rules are already in the _cssText attribute\n tagName !== 'style') {\n childNodes = serializeChildNodes(element, nodePrivacyLevel, transaction);\n }\n return {\n type: NodeType.Element,\n id,\n tagName,\n attributes,\n childNodes,\n isSVG,\n };\n}\nfunction isSVGElement(el) {\n return el.tagName === 'svg' || el instanceof SVGElement;\n}\n/**\n * Text Nodes are dependant on Element nodes\n * Privacy levels are set on elements so we check the parentElement of a text node\n * for privacy level.\n */\nfunction serializeTextNode(textNode, parentNodePrivacyLevel, transaction) {\n const textContent = getTextContent(textNode, parentNodePrivacyLevel);\n if (textContent === undefined) {\n return null;\n }\n return {\n type: NodeType.Text,\n id: transaction.assignId(textNode),\n textContent,\n };\n}\nfunction serializeCDataNode(node, transaction) {\n return {\n type: NodeType.CDATA,\n id: transaction.assignId(node),\n textContent: '',\n };\n}\n//# sourceMappingURL=serializeNode.js.map","export function createSerializationStats() {\n return {\n cssText: {\n count: 0,\n max: 0,\n sum: 0,\n },\n serializationDuration: {\n count: 0,\n max: 0,\n sum: 0,\n },\n };\n}\nexport function updateSerializationStats(stats, metric, value) {\n stats[metric].count += 1;\n stats[metric].max = Math.max(stats[metric].max, value);\n stats[metric].sum += value;\n}\nexport function aggregateSerializationStats(aggregateStats, stats) {\n for (const metric of ['cssText', 'serializationDuration']) {\n aggregateStats[metric].count += stats[metric].count;\n aggregateStats[metric].max = Math.max(aggregateStats[metric].max, stats[metric].max);\n aggregateStats[metric].sum += stats[metric].sum;\n }\n}\n//# sourceMappingURL=serializationStats.js.map","import { ChangeType } from '../../../types';\nexport function createChangeEncoder(stringIds) {\n let pendingChanges = {};\n // A helper that searches for strings in arbitrarily-nested arrays, inserts any strings\n // it finds into the string table, and replaces the strings with string table\n // references.\n const convertStringsToStringReferences = (array) => {\n for (let index = 0, length = array.length; index < length; index++) {\n const item = array[index];\n if (typeof item === 'string') {\n const previousSize = stringIds.size;\n array[index] = stringIds.getOrInsert(item);\n if (stringIds.size > previousSize) {\n add(ChangeType.AddString, item);\n }\n }\n else if (Array.isArray(item)) {\n convertStringsToStringReferences(item);\n }\n }\n };\n const add = (type, data) => {\n if (!(type in pendingChanges)) {\n pendingChanges[type] = [type];\n }\n if (type !== ChangeType.AddString && Array.isArray(data)) {\n convertStringsToStringReferences(data);\n }\n pendingChanges[type].push(data);\n };\n const flush = () => {\n const changes = [];\n [\n ChangeType.AddString,\n ChangeType.AddNode,\n ChangeType.RemoveNode,\n ChangeType.Attribute,\n ChangeType.Text,\n ChangeType.Size,\n ChangeType.ScrollPosition,\n ChangeType.AddStyleSheet,\n ChangeType.AttachedStyleSheets,\n ChangeType.MediaPlaybackState,\n ChangeType.VisualViewport,\n ].forEach((changeType) => {\n const change = pendingChanges[changeType];\n if (change) {\n changes.push(change);\n }\n });\n pendingChanges = {};\n return changes;\n };\n return { add, flush };\n}\n//# sourceMappingURL=changeEncoder.js.map","import { elapsed, timeStampNow } from '@datadog/browser-core';\nimport { ChangeType, RecordType } from '../../../types';\nimport { createSerializationStats, updateSerializationStats } from './serializationStats';\nimport { createChangeEncoder } from './changeEncoder';\n/**\n * Perform serialization within a transaction. At the end of the transaction, the\n * generated records and statistics will be emitted.\n */\nexport function serializeInTransaction(kind, emitRecord, emitStats, scope, serialize) {\n const records = [];\n const stats = createSerializationStats();\n const transaction = {\n add(record) {\n records.push(record);\n },\n addMetric(metric, value) {\n updateSerializationStats(stats, metric, value);\n },\n assignId(node) {\n const id = scope.nodeIds.getOrInsert(node);\n if (transaction.serializedNodeIds) {\n transaction.serializedNodeIds.add(id);\n }\n return id;\n },\n kind,\n scope,\n };\n const start = timeStampNow();\n serialize(transaction);\n updateSerializationStats(stats, 'serializationDuration', elapsed(start, timeStampNow()));\n for (const record of records) {\n emitRecord(record);\n }\n emitStats(stats);\n}\nexport function serializeChangesInTransaction(kind, emitRecord, emitStats, scope, timestamp, serialize) {\n const encoder = createChangeEncoder(scope.stringIds);\n const stats = createSerializationStats();\n const transaction = {\n addMetric(metric, value) {\n updateSerializationStats(stats, metric, value);\n },\n addNode(...change) {\n encoder.add(ChangeType.AddNode, change);\n },\n addStyleSheet(rules, mediaList, disabled) {\n if (disabled) {\n encoder.add(ChangeType.AddStyleSheet, [rules, mediaList || [], disabled]);\n }\n else if (mediaList) {\n encoder.add(ChangeType.AddStyleSheet, [rules, mediaList]);\n }\n else {\n encoder.add(ChangeType.AddStyleSheet, [rules]);\n }\n },\n attachStyleSheets(nodeId, sheetIds) {\n const change = [nodeId];\n for (const sheetId of sheetIds) {\n change.push(sheetId);\n }\n encoder.add(ChangeType.AttachedStyleSheets, change);\n },\n setMediaPlaybackState(nodeId, state) {\n encoder.add(ChangeType.MediaPlaybackState, [nodeId, state]);\n },\n setScrollPosition(nodeId, x, y) {\n encoder.add(ChangeType.ScrollPosition, [nodeId, x, y]);\n },\n setSize(nodeId, width, height) {\n encoder.add(ChangeType.Size, [nodeId, width, height]);\n },\n kind,\n scope,\n };\n const start = timeStampNow();\n serialize(transaction);\n updateSerializationStats(stats, 'serializationDuration', elapsed(start, timeStampNow()));\n const changes = encoder.flush();\n if (changes.length > 0) {\n emitRecord({\n data: changes,\n type: RecordType.Change,\n timestamp,\n });\n }\n emitStats(stats);\n}\n//# sourceMappingURL=serializationTransaction.js.map","import { getScrollX, getScrollY } from '@datadog/browser-rum-core';\nimport { RecordType } from '../../../types';\nimport { serializeNode } from './serializeNode';\nimport { serializeInTransaction } from './serializationTransaction';\nexport function serializeFullSnapshot(timestamp, kind, document, emitRecord, emitStats, scope) {\n serializeInTransaction(kind, emitRecord, emitStats, scope, (transaction) => {\n const defaultPrivacyLevel = transaction.scope.configuration.defaultPrivacyLevel;\n // We are sure that Documents are never ignored, so this function never returns null.\n const node = serializeNode(document, defaultPrivacyLevel, transaction);\n const record = {\n data: {\n node,\n initialOffset: {\n left: getScrollX(),\n top: getScrollY(),\n },\n },\n type: RecordType.FullSnapshot,\n timestamp,\n };\n transaction.add(record);\n });\n}\n//# sourceMappingURL=serializeFullSnapshot.js.map","import { reducePrivacyLevel, getNodeSelfPrivacyLevel, getTextContent, isNodeShadowRoot, forEachChildNodes, NodePrivacyLevel, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, getScrollX, getScrollY, isElementNode, } from '@datadog/browser-rum-core';\nimport { MediaInteractionType } from '../../../types';\nimport { serializeDOMAttributes, serializeVirtualAttributes } from './serializeAttributes';\nexport function serializeNodeAsChange(cursor, node, parentPrivacyLevel, transaction) {\n let privacyLevel;\n const selfPrivacyLevel = getNodeSelfPrivacyLevel(node);\n if (selfPrivacyLevel) {\n privacyLevel = reducePrivacyLevel(selfPrivacyLevel, parentPrivacyLevel);\n }\n else {\n privacyLevel = parentPrivacyLevel;\n }\n if (privacyLevel === NodePrivacyLevel.HIDDEN) {\n serializeHiddenNodePlaceholder(cursor, node, transaction);\n return;\n }\n // Totally ignore risky or unwanted elements. (e.g. <script>, some <link> and <meta> elements)\n if (privacyLevel === NodePrivacyLevel.IGNORE) {\n return;\n }\n switch (node.nodeType) {\n case node.CDATA_SECTION_NODE:\n serializeCDataNodeAsChange(cursor, node, transaction);\n break;\n case node.DOCUMENT_NODE:\n serializeDocumentNodeAsChange(cursor, node, transaction);\n break;\n case node.DOCUMENT_FRAGMENT_NODE:\n serializeDocumentFragmentNodeAsChange(cursor, node, transaction);\n break;\n case node.DOCUMENT_TYPE_NODE:\n serializeDocumentTypeNodeAsChange(cursor, node, transaction);\n break;\n case node.ELEMENT_NODE:\n serializeElementNodeAsChange(cursor, node, privacyLevel, transaction);\n break;\n case node.TEXT_NODE:\n serializeTextNodeAsChange(cursor, node, privacyLevel, transaction);\n break;\n default:\n return;\n }\n // If this node can't have children, we're done.\n switch (node.nodeType) {\n case node.CDATA_SECTION_NODE:\n case node.DOCUMENT_TYPE_NODE:\n case node.TEXT_NODE:\n return;\n }\n // Ignore the children of <style> elements; the CSS rules they contain are already\n // serialized as StyleSheetSnapshots.\n if (node.nodeName === 'STYLE') {\n return;\n }\n cursor.descend();\n forEachChildNodes(node, (childNode) => {\n serializeNodeAsChange(cursor, childNode, privacyLevel, transaction);\n });\n cursor.ascend();\n}\nfunction serializeDocumentNodeAsChange(cursor, document, transaction) {\n const { nodeId, insertionPoint } = cursor.advance(document);\n transaction.addNode(insertionPoint, '#document');\n transaction.setScrollPosition(nodeId, getScrollX(), getScrollY());\n serializeStyleSheetsAsChange(document.adoptedStyleSheets, nodeId, transaction);\n}\nfunction serializeDocumentFragmentNodeAsChange(cursor, documentFragment, transaction) {\n const { nodeId, insertionPoint } = cursor.advance(documentFragment);\n const isShadowRoot = isNodeShadowRoot(documentFragment);\n if (!isShadowRoot) {\n transaction.addNode(insertionPoint, '#document-fragment');\n return;\n }\n transaction.addNode(insertionPoint, '#shadow-root');\n transaction.scope.shadowRootsController.addShadowRoot(documentFragment, transaction.scope);\n serializeStyleSheetsAsChange(documentFragment.adoptedStyleSheets, nodeId, transaction);\n}\nfunction serializeDocumentTypeNodeAsChange(cursor, documentType, transaction) {\n const { insertionPoint } = cursor.advance(documentType);\n transaction.addNode(insertionPoint, '#doctype', documentType.name, documentType.publicId, documentType.systemId);\n}\nfunction serializeElementNodeAsChange(cursor, element, privacyLevel, transaction) {\n const { nodeId, insertionPoint } = cursor.advance(element);\n const domAttributes = Object.entries(serializeDOMAttributes(element, privacyLevel, transaction));\n transaction.addNode(insertionPoint, encodedElementName(element), ...domAttributes);\n const { _cssText: cssText, rr_mediaState: mediaState, rr_scrollLeft: scrollLeft, rr_scrollTop: scrollTop, } = serializeVirtualAttributes(element, privacyLevel, transaction);\n const linkOrStyle = element;\n if (cssText !== undefined && linkOrStyle.sheet) {\n const sheetId = transaction.scope.styleSheetIds.getOrInsert(linkOrStyle.sheet);\n transaction.addStyleSheet(cssText);\n transaction.attachStyleSheets(nodeId, [sheetId]);\n }\n if (mediaState === 'played') {\n transaction.setMediaPlaybackState(nodeId, MediaInteractionType.Play);\n }\n else if (mediaState === 'paused') {\n transaction.setMediaPlaybackState(nodeId, MediaInteractionType.Pause);\n }\n if (scrollLeft !== undefined || scrollTop !== undefined) {\n transaction.setScrollPosition(nodeId, scrollLeft || 0, scrollTop || 0);\n }\n}\nfunction serializeTextNodeAsChange(cursor, textNode, privacyLevel, transaction) {\n const textContent = getTextContent(textNode, privacyLevel);\n if (textContent === undefined) {\n return;\n }\n const { insertionPoint } = cursor.advance(textNode);\n transaction.addNode(insertionPoint, '#text', textContent);\n}\nfunction serializeCDataNodeAsChange(cursor, cdataNode, transaction) {\n const { insertionPoint } = cursor.advance(cdataNode);\n transaction.addNode(insertionPoint, '#cdata-section');\n}\nfunction serializeHiddenNodePlaceholder(cursor, node, transaction) {\n // We only generate placeholders for element nodes; other hidden nodes are simply not\n // serialized.\n if (!isElementNode(node)) {\n return;\n }\n const { nodeId, insertionPoint } = cursor.advance(node);\n transaction.addNode(insertionPoint, encodedElementName(node), [PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN]);\n const { width, height } = node.getBoundingClientRect();\n transaction.setSize(nodeId, width, height);\n}\nfunction serializeStyleSheetsAsChange(sheets, nodeId, transaction) {\n if (!sheets || sheets.length === 0) {\n return undefined;\n }\n transaction.attachStyleSheets(nodeId, sheets.map((sheet) => serializeStyleSheetAsChange(sheet, transaction)));\n}\nfunction serializeStyleSheetAsChange(sheet, transaction) {\n const rules = Array.from(sheet.cssRules || sheet.rules, (rule) => rule.cssText);\n const mediaList = sheet.media.length > 0 ? Array.from(sheet.media) : undefined;\n transaction.addMetric('cssText', rules.reduce((totalLength, rule) => totalLength + rule.length, 0));\n transaction.addStyleSheet(rules, mediaList, sheet.disabled);\n return transaction.scope.styleSheetIds.getOrInsert(sheet);\n}\nfunction encodedElementName(element) {\n const nodeName = element.nodeName;\n if (isSVGElement(element)) {\n return `svg>${nodeName}`;\n }\n return nodeName;\n}\nfunction isSVGElement(element) {\n return element.namespaceURI === 'http://www.w3.org/2000/svg';\n}\n//# sourceMappingURL=serializeNodeAsChange.js.map","import { serializeChangesInTransaction } from './serializationTransaction';\nimport { serializeNodeAsChange } from './serializeNodeAsChange';\nimport { createRootInsertionCursor } from './insertionCursor';\nexport function serializeFullSnapshotAsChange(timestamp, kind, document, emitRecord, emitStats, scope) {\n scope.resetIds();\n serializeChangesInTransaction(kind, emitRecord, emitStats, scope, timestamp, (transaction) => {\n serializeNodeAsChange(createRootInsertionCursor(scope.nodeIds), document, scope.configuration.defaultPrivacyLevel, transaction);\n });\n}\n//# sourceMappingURL=serializeFullSnapshotAsChange.js.map","import { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nexport function assembleIncrementalSnapshot(source, data, timestamp = timeStampNow()) {\n return {\n data: {\n source,\n ...data,\n },\n type: RecordType.IncrementalSnapshot,\n timestamp,\n };\n}\n//# sourceMappingURL=assembly.js.map","import { isNodeShadowHost, getParentNode, forEachChildNodes, getNodePrivacyLevel, getTextContent, NodePrivacyLevel, isNodeShadowRoot, } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nimport { serializeInTransaction } from './serializationTransaction';\nimport { serializeNode } from './serializeNode';\nimport { serializeAttribute } from './serializeAttribute';\nimport { getElementInputValue } from './serializationUtils';\nexport function serializeMutations(timestamp, mutations, emitRecord, emitStats, scope) {\n serializeInTransaction(2 /* SerializationKind.INCREMENTAL_SNAPSHOT */, emitRecord, emitStats, scope, (transaction) => processMutations(timestamp, mutations, transaction));\n}\nfunction processMutations(timestamp, mutations, transaction) {\n const nodePrivacyLevelCache = new Map();\n mutations\n .filter((mutation) => mutation.type === 'childList')\n .forEach((mutation) => {\n mutation.removedNodes.forEach((removedNode) => {\n traverseRemovedShadowDom(removedNode, transaction.scope.shadowRootsController.removeShadowRoot);\n });\n });\n // Discard any mutation with a 'target' node that:\n // * isn't injected in the current document or isn't known/serialized yet: those nodes are likely\n // part of a mutation occurring in a parent Node\n // * should be hidden or ignored\n const filteredMutations = mutations.filter((mutation) => mutation.target.isConnected &&\n idsAreAssignedForNodeAndAncestors(mutation.target, transaction.scope.nodeIds) &&\n getNodePrivacyLevel(mutation.target, transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache) !== NodePrivacyLevel.HIDDEN);\n const { adds, removes, hasBeenSerialized } = processChildListMutations(filteredMutations.filter((mutation) => mutation.type === 'childList'), nodePrivacyLevelCache, transaction);\n const texts = processCharacterDataMutations(filteredMutations.filter((mutation) => mutation.type === 'characterData' && !hasBeenSerialized(mutation.target)), nodePrivacyLevelCache, transaction);\n const attributes = processAttributesMutations(filteredMutations.filter((mutation) => mutation.type === 'attributes' && !hasBeenSerialized(mutation.target)), nodePrivacyLevelCache, transaction);\n if (!texts.length && !attributes.length && !removes.length && !adds.length) {\n return;\n }\n const record = assembleIncrementalSnapshot(IncrementalSource.Mutation, {\n adds,\n removes,\n texts,\n attributes,\n }, timestamp);\n transaction.add(record);\n}\nfunction processChildListMutations(mutations, nodePrivacyLevelCache, transaction) {\n // First, we iterate over mutations to collect:\n //\n // * nodes that have been added in the document and not removed by a subsequent mutation\n // * nodes that have been removed from the document but were not added in a previous mutation\n //\n // For this second category, we also collect their previous parent (mutation.target) because we'll\n // need it to emit a 'remove' mutation.\n //\n // Those two categories may overlap: if a node moved from a position to another, it is reported as\n // two mutation records, one with a \"removedNodes\" and the other with \"addedNodes\". In this case,\n // the node will be in both sets.\n const addedAndMovedNodes = new Set();\n const removedNodes = new Map();\n for (const mutation of mutations) {\n mutation.addedNodes.forEach((node) => {\n addedAndMovedNodes.add(node);\n });\n mutation.removedNodes.forEach((node) => {\n if (!addedAndMovedNodes.has(node)) {\n removedNodes.set(node, mutation.target);\n }\n addedAndMovedNodes.delete(node);\n });\n }\n // Then, we sort nodes that are still in the document by topological order, for two reasons:\n //\n // * We will serialize each added nodes with their descendants. We don't want to serialize a node\n // twice, so we need to iterate over the parent nodes first and skip any node that is contained in\n // a precedent node.\n //\n // * To emit \"add\" mutations, we need references to the parent and potential next sibling of each\n // added node. So we need to iterate over the parent nodes first, and when multiple nodes are\n // siblings, we want to iterate from last to first. This will ensure that any \"next\" node is\n // already serialized and have an id.\n const sortedAddedAndMovedNodes = Array.from(addedAndMovedNodes);\n sortAddedAndMovedNodes(sortedAddedAndMovedNodes);\n // Then, we iterate over our sorted node sets to emit mutations. We collect the newly serialized\n // node ids in a set to be able to skip subsequent related mutations.\n transaction.serializedNodeIds = new Set();\n const addedNodeMutations = [];\n for (const node of sortedAddedAndMovedNodes) {\n if (hasBeenSerialized(node)) {\n continue;\n }\n const parentNodePrivacyLevel = getNodePrivacyLevel(node.parentNode, transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n continue;\n }\n const serializedNode = serializeNode(node, parentNodePrivacyLevel, transaction);\n if (!serializedNode) {\n continue;\n }\n const parentNode = getParentNode(node);\n addedNodeMutations.push({\n nextId: getNextSibling(node),\n parentId: transaction.scope.nodeIds.get(parentNode),\n node: serializedNode,\n });\n }\n // Finally, we emit remove mutations.\n const removedNodeMutations = [];\n removedNodes.forEach((parent, node) => {\n const parentId = transaction.scope.nodeIds.get(parent);\n const id = transaction.scope.nodeIds.get(node);\n if (parentId !== undefined && id !== undefined) {\n removedNodeMutations.push({ parentId, id });\n }\n });\n return { adds: addedNodeMutations, removes: removedNodeMutations, hasBeenSerialized };\n function hasBeenSerialized(node) {\n var _a;\n const id = transaction.scope.nodeIds.get(node);\n return id !== undefined && ((_a = transaction.serializedNodeIds) === null || _a === void 0 ? void 0 : _a.has(id));\n }\n function getNextSibling(node) {\n let nextSibling = node.nextSibling;\n while (nextSibling) {\n const id = transaction.scope.nodeIds.get(nextSibling);\n if (id !== undefined) {\n return id;\n }\n nextSibling = nextSibling.nextSibling;\n }\n return null;\n }\n}\nfunction processCharacterDataMutations(mutations, nodePrivacyLevelCache, transaction) {\n var _a;\n const textMutations = [];\n // Deduplicate mutations based on their target node\n const handledNodes = new Set();\n const filteredMutations = mutations.filter((mutation) => {\n if (handledNodes.has(mutation.target)) {\n return false;\n }\n handledNodes.add(mutation.target);\n return true;\n });\n // Emit mutations\n for (const mutation of filteredMutations) {\n const value = mutation.target.textContent;\n if (value === mutation.oldValue) {\n continue;\n }\n const id = transaction.scope.nodeIds.get(mutation.target);\n if (id === undefined) {\n continue;\n }\n const parentNodePrivacyLevel = getNodePrivacyLevel(getParentNode(mutation.target), transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n continue;\n }\n textMutations.push({\n id,\n value: (_a = getTextContent(mutation.target, parentNodePrivacyLevel)) !== null && _a !== void 0 ? _a : null,\n });\n }\n return textMutations;\n}\nfunction processAttributesMutations(mutations, nodePrivacyLevelCache, transaction) {\n const attributeMutations = [];\n // Deduplicate mutations based on their target node and changed attribute\n const handledElements = new Map();\n const filteredMutations = mutations.filter((mutation) => {\n const handledAttributes = handledElements.get(mutation.target);\n if (handledAttributes && handledAttributes.has(mutation.attributeName)) {\n return false;\n }\n if (!handledAttributes) {\n handledElements.set(mutation.target, new Set([mutation.attributeName]));\n }\n else {\n handledAttributes.add(mutation.attributeName);\n }\n return true;\n });\n // Emit mutations\n const emittedMutations = new Map();\n for (const mutation of filteredMutations) {\n const uncensoredValue = mutation.target.getAttribute(mutation.attributeName);\n if (uncensoredValue === mutation.oldValue) {\n continue;\n }\n const id = transaction.scope.nodeIds.get(mutation.target);\n if (id === undefined) {\n continue;\n }\n const privacyLevel = getNodePrivacyLevel(mutation.target, transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n const attributeValue = serializeAttribute(mutation.target, privacyLevel, mutation.attributeName, transaction.scope.configuration);\n let transformedValue;\n if (mutation.attributeName === 'value') {\n const inputValue = getElementInputValue(mutation.target, privacyLevel);\n if (inputValue === undefined) {\n continue;\n }\n transformedValue = inputValue;\n }\n else if (typeof attributeValue === 'string') {\n transformedValue = attributeValue;\n }\n else {\n transformedValue = null;\n }\n let emittedMutation = emittedMutations.get(mutation.target);\n if (!emittedMutation) {\n emittedMutation = { id, attributes: {} };\n attributeMutations.push(emittedMutation);\n emittedMutations.set(mutation.target, emittedMutation);\n }\n emittedMutation.attributes[mutation.attributeName] = transformedValue;\n }\n return attributeMutations;\n}\nexport function sortAddedAndMovedNodes(nodes) {\n nodes.sort((a, b) => {\n const position = a.compareDocumentPosition(b);\n /* eslint-disable no-bitwise */\n if (position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n else if (position & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n else if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return 1;\n }\n else if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return -1;\n }\n /* eslint-enable no-bitwise */\n return 0;\n });\n}\nfunction traverseRemovedShadowDom(removedNode, shadowDomRemovedCallback) {\n if (isNodeShadowHost(removedNode)) {\n shadowDomRemovedCallback(removedNode.shadowRoot);\n }\n forEachChildNodes(removedNode, (childNode) => traverseRemovedShadowDom(childNode, shadowDomRemovedCallback));\n}\nexport function idsAreAssignedForNodeAndAncestors(node, nodeIds) {\n let current = node;\n while (current) {\n if (nodeIds.get(current) === undefined && !isNodeShadowRoot(current)) {\n return false;\n }\n current = getParentNode(current);\n }\n return true;\n}\n//# sourceMappingURL=serializeMutations.js.map","/**\n * Browsers have not standardized various dimension properties. Mobile devices typically report\n * dimensions in reference to the visual viewport, while desktop uses the layout viewport. For example,\n * Mobile Chrome will change innerWidth when a pinch zoom takes place, while Chrome Desktop (mac) will not.\n *\n * With the new Viewport API, we now calculate and normalize dimension properties to the layout viewport.\n * If the VisualViewport API is not supported by a browser, it isn't reasonably possible to detect or normalize\n * which viewport is being measured. Therefore these exported functions will fallback to assuming that the layout\n * viewport is being measured by the browser\n */\n// Scrollbar widths vary across properties on different devices and browsers\nconst TOLERANCE = 25;\n/**\n * Use the Visual Viewport API's properties to measure scrollX/Y in reference to the layout viewport\n * in order to determine if window.scrollX/Y is measuring the layout or visual viewport.\n * This finding corresponds to which viewport mouseEvent.clientX/Y and window.innerWidth/Height measures.\n */\nfunction isVisualViewportFactoredIn(visualViewport) {\n return (Math.abs(visualViewport.pageTop - visualViewport.offsetTop - window.scrollY) > TOLERANCE ||\n Math.abs(visualViewport.pageLeft - visualViewport.offsetLeft - window.scrollX) > TOLERANCE);\n}\nexport const convertMouseEventToLayoutCoordinates = (clientX, clientY) => {\n const visualViewport = window.visualViewport;\n const normalized = {\n layoutViewportX: clientX,\n layoutViewportY: clientY,\n visualViewportX: clientX,\n visualViewportY: clientY,\n };\n if (!visualViewport) {\n // On old browsers, we cannot normalize, so fallback to clientX/Y\n return normalized;\n }\n else if (isVisualViewportFactoredIn(visualViewport)) {\n // Typically Mobile Devices\n normalized.layoutViewportX = Math.round(clientX + visualViewport.offsetLeft);\n normalized.layoutViewportY = Math.round(clientY + visualViewport.offsetTop);\n }\n else {\n // Typically Desktop Devices\n normalized.visualViewportX = Math.round(clientX - visualViewport.offsetLeft);\n normalized.visualViewportY = Math.round(clientY - visualViewport.offsetTop);\n }\n return normalized;\n};\nexport const getVisualViewport = (visualViewport) => ({\n scale: visualViewport.scale,\n offsetLeft: visualViewport.offsetLeft,\n offsetTop: visualViewport.offsetTop,\n pageLeft: visualViewport.pageLeft,\n pageTop: visualViewport.pageTop,\n height: visualViewport.height,\n width: visualViewport.width,\n});\n//# sourceMappingURL=viewports.js.map","import { getViewportDimension } from '@datadog/browser-rum-core';\nimport { ExperimentalFeature, isExperimentalFeatureEnabled, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nimport { serializeFullSnapshotAsChange, serializeFullSnapshot } from './serialization';\nimport { getVisualViewport } from './viewports';\nexport function startFullSnapshots(lifeCycle, emitRecord, emitStats, flushMutations, scope, serialize = defaultSerializeFullSnapshotCallback()) {\n takeFullSnapshot(timeStampNow(), 0 /* SerializationKind.INITIAL_FULL_SNAPSHOT */, emitRecord, emitStats, scope, serialize);\n const { unsubscribe } = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, (view) => {\n flushMutations();\n takeFullSnapshot(view.startClocks.timeStamp, 1 /* SerializationKind.SUBSEQUENT_FULL_SNAPSHOT */, emitRecord, emitStats, scope, serialize);\n });\n return {\n stop: unsubscribe,\n };\n}\nexport function takeFullSnapshot(timestamp, kind, emitRecord, emitStats, scope, serialize = defaultSerializeFullSnapshotCallback()) {\n const { width, height } = getViewportDimension();\n emitRecord({\n data: {\n height,\n href: window.location.href,\n width,\n },\n type: RecordType.Meta,\n timestamp,\n });\n emitRecord({\n data: {\n has_focus: document.hasFocus(),\n },\n type: RecordType.Focus,\n timestamp,\n });\n serialize(timestamp, kind, document, emitRecord, emitStats, scope);\n if (window.visualViewport) {\n emitRecord({\n data: getVisualViewport(window.visualViewport),\n type: RecordType.VisualViewport,\n timestamp,\n });\n }\n}\nfunction defaultSerializeFullSnapshotCallback() {\n return isExperimentalFeatureEnabled(ExperimentalFeature.USE_CHANGE_RECORDS)\n ? serializeFullSnapshotAsChange\n : serializeFullSnapshot;\n}\n//# sourceMappingURL=startFullSnapshots.js.map","export function createEventIds() {\n return createWeakIdMap(1 /* EventIdConstants.FIRST_ID */);\n}\nexport function createNodeIds() {\n return createWeakIdMap(0 /* NodeIdConstants.FIRST_ID */);\n}\nexport function createStringIds() {\n return createIdMap(0 /* StringIdConstants.FIRST_ID */);\n}\nexport function createStyleSheetIds() {\n return createWeakIdMap(0 /* StyleSheetIdConstants.FIRST_ID */);\n}\nfunction createIdMap(firstId) {\n return createItemIds(() => new Map(), firstId);\n}\nfunction createWeakIdMap(firstId) {\n return createItemIds(() => new WeakMap(), firstId);\n}\nfunction createItemIds(createMap, firstId) {\n let map = createMap();\n let nextId = firstId;\n const get = (object) => map.get(object);\n return {\n clear() {\n if (nextId === firstId) {\n return;\n }\n map = createMap();\n nextId = firstId;\n },\n delete(object) {\n map.delete(object);\n },\n get,\n getOrInsert(object) {\n // Try to reuse any existing id.\n let id = get(object);\n if (id === undefined) {\n id = nextId++;\n map.set(object, id);\n }\n return id;\n },\n get nextId() {\n return nextId;\n },\n get size() {\n return nextId - firstId;\n },\n };\n}\n//# sourceMappingURL=itemIds.js.map","import { createEventIds, createNodeIds, createStringIds, createStyleSheetIds } from './itemIds';\nexport function createRecordingScope(configuration, elementsScrollPositions, shadowRootsController) {\n const eventIds = createEventIds();\n const nodeIds = createNodeIds();\n const stringIds = createStringIds();\n const styleSheetIds = createStyleSheetIds();\n const scope = {\n resetIds() {\n scope.eventIds.clear();\n scope.nodeIds.clear();\n scope.stringIds.clear();\n scope.styleSheetIds.clear();\n },\n configuration,\n elementsScrollPositions,\n eventIds,\n nodeIds,\n shadowRootsController,\n stringIds,\n styleSheetIds,\n };\n return scope;\n}\n//# sourceMappingURL=recordingScope.js.map","export function createElementsScrollPositions() {\n const scrollPositionsByElement = new WeakMap();\n return {\n set(element, scrollPositions) {\n if (element === document && !document.scrollingElement) {\n // cf https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement,\n // in some cases scrolling elements can not be defined, we don't support those for now\n return;\n }\n scrollPositionsByElement.set(element === document ? document.scrollingElement : element, scrollPositions);\n },\n get(element) {\n return scrollPositionsByElement.get(element);\n },\n has(element) {\n return scrollPositionsByElement.has(element);\n },\n };\n}\n//# sourceMappingURL=elementsScrollPositions.js.map","import { isNodeShadowHost } from '@datadog/browser-rum-core';\nexport function isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nexport function getEventTarget(event) {\n if (event.composed === true && isNodeShadowHost(event.target)) {\n return event.composedPath()[0];\n }\n return event.target;\n}\n//# sourceMappingURL=eventsUtils.js.map","import { addEventListeners, throttle } from '@datadog/browser-core';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget, isTouchEvent } from '../eventsUtils';\nimport { convertMouseEventToLayoutCoordinates } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nconst MOUSE_MOVE_OBSERVER_THRESHOLD = 50;\nexport function trackMove(emitRecord, scope) {\n const { throttled: updatePosition, cancel: cancelThrottle } = throttle((event) => {\n const target = getEventTarget(event);\n const id = scope.nodeIds.get(target);\n if (id === undefined) {\n return;\n }\n const coordinates = tryToComputeCoordinates(event);\n if (!coordinates) {\n return;\n }\n const position = {\n id,\n timeOffset: 0,\n x: coordinates.x,\n y: coordinates.y,\n };\n emitRecord(assembleIncrementalSnapshot(isTouchEvent(event) ? IncrementalSource.TouchMove : IncrementalSource.MouseMove, { positions: [position] }));\n }, MOUSE_MOVE_OBSERVER_THRESHOLD, {\n trailing: false,\n });\n const { stop: removeListener } = addEventListeners(scope.configuration, document, [\"mousemove\" /* DOM_EVENT.MOUSE_MOVE */, \"touchmove\" /* DOM_EVENT.TOUCH_MOVE */], updatePosition, {\n capture: true,\n passive: true,\n });\n return {\n stop: () => {\n removeListener();\n cancelThrottle();\n },\n };\n}\nexport function tryToComputeCoordinates(event) {\n let { clientX: x, clientY: y } = isTouchEvent(event) ? event.changedTouches[0] : event;\n if (window.visualViewport) {\n const { visualViewportX, visualViewportY } = convertMouseEventToLayoutCoordinates(x, y);\n x = visualViewportX;\n y = visualViewportY;\n }\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n return undefined;\n }\n return { x, y };\n}\n//# sourceMappingURL=trackMove.js.map","import { addEventListeners } from '@datadog/browser-core';\nimport { getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MouseInteractionType } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nimport { getEventTarget } from '../eventsUtils';\nimport { tryToComputeCoordinates } from './trackMove';\nconst eventTypeToMouseInteraction = {\n // Listen for pointerup DOM events instead of mouseup for MouseInteraction/MouseUp records. This\n // allows to reference such records from Frustration records.\n //\n // In the context of supporting Mobile Session Replay, we introduced `PointerInteraction` records\n // used by the Mobile SDKs in place of `MouseInteraction`. In the future, we should replace\n // `MouseInteraction` by `PointerInteraction` in the Browser SDK so we have an uniform way to\n // convey such interaction. This would cleanly solve the issue since we would have\n // `PointerInteraction/Up` records that we could reference from `Frustration` records.\n [\"pointerup\" /* DOM_EVENT.POINTER_UP */]: MouseInteractionType.MouseUp,\n [\"mousedown\" /* DOM_EVENT.MOUSE_DOWN */]: MouseInteractionType.MouseDown,\n [\"click\" /* DOM_EVENT.CLICK */]: MouseInteractionType.Click,\n [\"contextmenu\" /* DOM_EVENT.CONTEXT_MENU */]: MouseInteractionType.ContextMenu,\n [\"dblclick\" /* DOM_EVENT.DBL_CLICK */]: MouseInteractionType.DblClick,\n [\"focus\" /* DOM_EVENT.FOCUS */]: MouseInteractionType.Focus,\n [\"blur\" /* DOM_EVENT.BLUR */]: MouseInteractionType.Blur,\n [\"touchstart\" /* DOM_EVENT.TOUCH_START */]: MouseInteractionType.TouchStart,\n [\"touchend\" /* DOM_EVENT.TOUCH_END */]: MouseInteractionType.TouchEnd,\n};\nexport function trackMouseInteraction(emitRecord, scope) {\n const handler = (event) => {\n const target = getEventTarget(event);\n const id = scope.nodeIds.get(target);\n if (id === undefined ||\n getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN) {\n return;\n }\n const type = eventTypeToMouseInteraction[event.type];\n let interaction;\n if (type !== MouseInteractionType.Blur && type !== MouseInteractionType.Focus) {\n const coordinates = tryToComputeCoordinates(event);\n if (!coordinates) {\n return;\n }\n interaction = { id, type, x: coordinates.x, y: coordinates.y };\n }\n else {\n interaction = { id, type };\n }\n emitRecord({\n id: scope.eventIds.getOrInsert(event),\n ...assembleIncrementalSnapshot(IncrementalSource.MouseInteraction, interaction),\n });\n };\n return addEventListeners(scope.configuration, document, Object.keys(eventTypeToMouseInteraction), handler, {\n capture: true,\n passive: true,\n });\n}\n//# sourceMappingURL=trackMouseInteraction.js.map","import { throttle, addEventListener } from '@datadog/browser-core';\nimport { getScrollX, getScrollY, getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { getEventTarget } from '../eventsUtils';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nconst SCROLL_OBSERVER_THRESHOLD = 100;\nexport function trackScroll(target, emitRecord, scope) {\n const { throttled: updatePosition, cancel: cancelThrottle } = throttle((event) => {\n const target = getEventTarget(event);\n if (!target) {\n return;\n }\n const id = scope.nodeIds.get(target);\n if (id === undefined ||\n getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN) {\n return;\n }\n const scrollPositions = target === document\n ? {\n scrollTop: getScrollY(),\n scrollLeft: getScrollX(),\n }\n : {\n scrollTop: Math.round(target.scrollTop),\n scrollLeft: Math.round(target.scrollLeft),\n };\n scope.elementsScrollPositions.set(target, scrollPositions);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.Scroll, {\n id,\n x: scrollPositions.scrollLeft,\n y: scrollPositions.scrollTop,\n }));\n }, SCROLL_OBSERVER_THRESHOLD);\n const { stop: removeListener } = addEventListener(scope.configuration, target, \"scroll\" /* DOM_EVENT.SCROLL */, updatePosition, {\n capture: true,\n passive: true,\n });\n return {\n stop: () => {\n removeListener();\n cancelThrottle();\n },\n };\n}\n//# sourceMappingURL=trackScroll.js.map","import { throttle, addEventListeners, timeStampNow, noop } from '@datadog/browser-core';\nimport { initViewportObservable } from '@datadog/browser-rum-core';\nimport { IncrementalSource, RecordType } from '../../../types';\nimport { getVisualViewport } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nconst VISUAL_VIEWPORT_OBSERVER_THRESHOLD = 200;\nexport function trackViewportResize(emitRecord, scope) {\n const viewportResizeSubscription = initViewportObservable(scope.configuration).subscribe((data) => {\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.ViewportResize, data));\n });\n return {\n stop: () => {\n viewportResizeSubscription.unsubscribe();\n },\n };\n}\nexport function trackVisualViewportResize(emitRecord, scope) {\n const visualViewport = window.visualViewport;\n if (!visualViewport) {\n return { stop: noop };\n }\n const { throttled: updateDimension, cancel: cancelThrottle } = throttle(() => {\n emitRecord({\n data: getVisualViewport(visualViewport),\n type: RecordType.VisualViewport,\n timestamp: timeStampNow(),\n });\n }, VISUAL_VIEWPORT_OBSERVER_THRESHOLD, {\n trailing: false,\n });\n const { stop: removeListener } = addEventListeners(scope.configuration, visualViewport, [\"resize\" /* DOM_EVENT.RESIZE */, \"scroll\" /* DOM_EVENT.SCROLL */], updateDimension, {\n capture: true,\n passive: true,\n });\n return {\n stop: () => {\n removeListener();\n cancelThrottle();\n },\n };\n}\n//# sourceMappingURL=trackViewportResize.js.map","import { addEventListeners } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MediaInteractionType } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackMediaInteraction(emitRecord, scope) {\n return addEventListeners(scope.configuration, document, [\"play\" /* DOM_EVENT.PLAY */, \"pause\" /* DOM_EVENT.PAUSE */], (event) => {\n const target = getEventTarget(event);\n if (!target) {\n return;\n }\n const id = scope.nodeIds.get(target);\n if (id === undefined ||\n getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN) {\n return;\n }\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.MediaInteraction, {\n id,\n type: event.type === \"play\" /* DOM_EVENT.PLAY */ ? MediaInteractionType.Play : MediaInteractionType.Pause,\n }));\n }, {\n capture: true,\n passive: true,\n });\n}\n//# sourceMappingURL=trackMediaInteraction.js.map","import { instrumentMethod } from '@datadog/browser-core';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackStyleSheet(emitRecord, scope) {\n function checkStyleSheetAndCallback(styleSheet, callback) {\n if (!styleSheet || !styleSheet.ownerNode) {\n return;\n }\n const id = scope.nodeIds.get(styleSheet.ownerNode);\n if (id === undefined) {\n return;\n }\n callback(id);\n }\n const instrumentationStoppers = [\n instrumentMethod(CSSStyleSheet.prototype, 'insertRule', ({ target: styleSheet, parameters: [rule, index] }) => {\n checkStyleSheetAndCallback(styleSheet, (id) => emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n adds: [{ rule, index }],\n })));\n }),\n instrumentMethod(CSSStyleSheet.prototype, 'deleteRule', ({ target: styleSheet, parameters: [index] }) => {\n checkStyleSheetAndCallback(styleSheet, (id) => emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n removes: [{ index }],\n })));\n }),\n ];\n if (typeof CSSGroupingRule !== 'undefined') {\n instrumentGroupingCSSRuleClass(CSSGroupingRule);\n }\n else {\n instrumentGroupingCSSRuleClass(CSSMediaRule);\n instrumentGroupingCSSRuleClass(CSSSupportsRule);\n }\n function instrumentGroupingCSSRuleClass(cls) {\n instrumentationStoppers.push(instrumentMethod(cls.prototype, 'insertRule', ({ target: styleSheet, parameters: [rule, index] }) => {\n checkStyleSheetAndCallback(styleSheet.parentStyleSheet, (id) => {\n const path = getPathToNestedCSSRule(styleSheet);\n if (path) {\n path.push(index || 0);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n adds: [{ rule, index: path }],\n }));\n }\n });\n }), instrumentMethod(cls.prototype, 'deleteRule', ({ target: styleSheet, parameters: [index] }) => {\n checkStyleSheetAndCallback(styleSheet.parentStyleSheet, (id) => {\n const path = getPathToNestedCSSRule(styleSheet);\n if (path) {\n path.push(index);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n removes: [{ index: path }],\n }));\n }\n });\n }));\n }\n return {\n stop: () => {\n instrumentationStoppers.forEach((stopper) => stopper.stop());\n },\n };\n}\nexport function getPathToNestedCSSRule(rule) {\n const path = [];\n let currentRule = rule;\n while (currentRule.parentRule) {\n const rules = Array.from(currentRule.parentRule.cssRules);\n const index = rules.indexOf(currentRule);\n path.unshift(index);\n currentRule = currentRule.parentRule;\n }\n // A rule may not be attached to a stylesheet\n if (!currentRule.parentStyleSheet) {\n return;\n }\n const rules = Array.from(currentRule.parentStyleSheet.cssRules);\n const index = rules.indexOf(currentRule);\n path.unshift(index);\n return path;\n}\n//# sourceMappingURL=trackStyleSheet.js.map","import { addEventListeners, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackFocus(emitRecord, scope) {\n return addEventListeners(scope.configuration, window, [\"focus\" /* DOM_EVENT.FOCUS */, \"blur\" /* DOM_EVENT.BLUR */], () => {\n emitRecord({\n data: { has_focus: document.hasFocus() },\n type: RecordType.Focus,\n timestamp: timeStampNow(),\n });\n });\n}\n//# sourceMappingURL=trackFocus.js.map","import { ActionType, RumEventType } from '@datadog/browser-rum-core';\nimport { RecordType } from '../../../types';\nexport function trackFrustration(lifeCycle, emitRecord, scope) {\n const frustrationSubscription = lifeCycle.subscribe(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, (data) => {\n var _a, _b;\n if (data.rawRumEvent.type === RumEventType.ACTION &&\n data.rawRumEvent.action.type === ActionType.CLICK &&\n ((_b = (_a = data.rawRumEvent.action.frustration) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.length) &&\n 'events' in data.domainContext &&\n data.domainContext.events &&\n data.domainContext.events.length) {\n emitRecord({\n timestamp: data.rawRumEvent.date,\n type: RecordType.FrustrationRecord,\n data: {\n frustrationTypes: data.rawRumEvent.action.frustration.type,\n recordIds: data.domainContext.events.map((e) => scope.eventIds.getOrInsert(e)),\n },\n });\n }\n });\n return {\n stop: () => {\n frustrationSubscription.unsubscribe();\n },\n };\n}\n//# sourceMappingURL=trackFrustration.js.map","import { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackViewEnd(lifeCycle, emitRecord, flushMutations) {\n const viewEndSubscription = lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, () => {\n flushMutations();\n emitRecord({\n timestamp: timeStampNow(),\n type: RecordType.ViewEnd,\n });\n });\n return {\n stop: () => {\n viewEndSubscription.unsubscribe();\n },\n };\n}\n//# sourceMappingURL=trackViewEnd.js.map","import { instrumentSetter, addEventListeners, noop } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel, shouldMaskNode } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { getElementInputValue } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackInput(target, emitRecord, scope) {\n const defaultPrivacyLevel = scope.configuration.defaultPrivacyLevel;\n const lastInputStateMap = new WeakMap();\n const isShadowRoot = target !== document;\n const { stop: stopEventListeners } = addEventListeners(scope.configuration, target, \n // The 'input' event bubbles across shadow roots, so we don't have to listen for it on shadow\n // roots since it will be handled by the event listener that we did add to the document. Only\n // the 'change' event is blocked and needs to be handled on shadow roots.\n isShadowRoot ? [\"change\" /* DOM_EVENT.CHANGE */] : [\"input\" /* DOM_EVENT.INPUT */, \"change\" /* DOM_EVENT.CHANGE */], (event) => {\n const target = getEventTarget(event);\n if (target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement) {\n onElementChange(target);\n }\n }, {\n capture: true,\n passive: true,\n });\n let stopPropertySetterInstrumentation;\n if (!isShadowRoot) {\n const instrumentationStoppers = [\n instrumentSetter(HTMLInputElement.prototype, 'value', onElementChange),\n instrumentSetter(HTMLInputElement.prototype, 'checked', onElementChange),\n instrumentSetter(HTMLSelectElement.prototype, 'value', onElementChange),\n instrumentSetter(HTMLTextAreaElement.prototype, 'value', onElementChange),\n instrumentSetter(HTMLSelectElement.prototype, 'selectedIndex', onElementChange),\n ];\n stopPropertySetterInstrumentation = () => {\n instrumentationStoppers.forEach((stopper) => stopper.stop());\n };\n }\n else {\n stopPropertySetterInstrumentation = noop;\n }\n return {\n stop: () => {\n stopPropertySetterInstrumentation();\n stopEventListeners();\n },\n };\n function onElementChange(target) {\n const nodePrivacyLevel = getNodePrivacyLevel(target, defaultPrivacyLevel);\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n return;\n }\n const type = target.type;\n let inputState;\n if (type === 'radio' || type === 'checkbox') {\n if (shouldMaskNode(target, nodePrivacyLevel)) {\n return;\n }\n inputState = { isChecked: target.checked };\n }\n else {\n const value = getElementInputValue(target, nodePrivacyLevel);\n if (value === undefined) {\n return;\n }\n inputState = { text: value };\n }\n // Can be multiple changes on the same node within the same batched mutation observation.\n createRecordIfStateChanged(target, inputState);\n // If a radio was checked, other radios with the same name attribute will be unchecked.\n const name = target.name;\n if (type === 'radio' && name && target.checked) {\n document.querySelectorAll(`input[type=\"radio\"][name=\"${CSS.escape(name)}\"]`).forEach((el) => {\n if (el !== target) {\n // TODO: Consider the privacy implications for various differing input privacy levels\n createRecordIfStateChanged(el, { isChecked: false });\n }\n });\n }\n }\n /**\n * There can be multiple changes on the same node within the same batched mutation observation.\n */\n function createRecordIfStateChanged(target, inputState) {\n const id = scope.nodeIds.get(target);\n if (id === undefined) {\n return;\n }\n const lastInputState = lastInputStateMap.get(target);\n if (!lastInputState ||\n lastInputState.text !== inputState.text ||\n lastInputState.isChecked !== inputState.isChecked) {\n lastInputStateMap.set(target, inputState);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.Input, {\n id,\n ...inputState,\n }));\n }\n }\n}\n//# sourceMappingURL=trackInput.js.map","import { noop, throttle, requestIdleCallback } from '@datadog/browser-core';\n/**\n * Maximum duration to wait before processing mutations. If the browser is idle, mutations will be\n * processed more quickly. If the browser is busy executing small tasks (ex: rendering frames), the\n * mutations will wait MUTATION_PROCESS_MAX_DELAY milliseconds before being processed. If the\n * browser is busy executing a longer task, mutations will be processed after this task.\n */\nconst MUTATION_PROCESS_MAX_DELAY = 100;\n/**\n * Minimum duration to wait before processing mutations. This is used to batch mutations together\n * and be able to deduplicate them to save processing time and bandwidth.\n * 16ms is the duration of a frame at 60fps that ensure fluid UI.\n */\nexport const MUTATION_PROCESS_MIN_DELAY = 16;\nexport function createMutationBatch(processMutationBatch) {\n let cancelScheduledFlush = noop;\n let pendingMutations = [];\n function flush() {\n cancelScheduledFlush();\n processMutationBatch(pendingMutations);\n pendingMutations = [];\n }\n const { throttled: throttledFlush, cancel: cancelThrottle } = throttle(flush, MUTATION_PROCESS_MIN_DELAY, {\n leading: false,\n });\n return {\n addMutations: (mutations) => {\n if (pendingMutations.length === 0) {\n cancelScheduledFlush = requestIdleCallback(throttledFlush, { timeout: MUTATION_PROCESS_MAX_DELAY });\n }\n pendingMutations.push(...mutations);\n },\n flush,\n stop: () => {\n cancelScheduledFlush();\n cancelThrottle();\n },\n };\n}\n//# sourceMappingURL=mutationBatch.js.map","import { monitor, noop, timeStampNow } from '@datadog/browser-core';\nimport { getMutationObserverConstructor } from '@datadog/browser-rum-core';\nimport { createMutationBatch } from '../mutationBatch';\nimport { serializeMutations } from '../serialization';\n/**\n * Buffers and aggregate mutations generated by a MutationObserver into MutationPayload\n */\nexport function trackMutation(target, emitRecord, emitStats, scope, serialize = defaultSerializeMutationsCallback()) {\n const MutationObserver = getMutationObserverConstructor();\n if (!MutationObserver) {\n return { stop: noop, flush: noop };\n }\n const mutationBatch = createMutationBatch((mutations) => {\n serialize(timeStampNow(), mutations.concat(observer.takeRecords()), emitRecord, emitStats, scope);\n });\n const observer = new MutationObserver(monitor(mutationBatch.addMutations));\n observer.observe(target, {\n attributeOldValue: true,\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n });\n return {\n stop: () => {\n observer.disconnect();\n mutationBatch.stop();\n },\n flush: () => {\n mutationBatch.flush();\n },\n };\n}\nfunction defaultSerializeMutationsCallback() {\n return serializeMutations;\n}\n//# sourceMappingURL=trackMutation.js.map","import { trackInput, trackMutation, trackScroll } from './trackers';\nexport const initShadowRootsController = (emitRecord, emitStats) => {\n const controllerByShadowRoot = new Map();\n const shadowRootsController = {\n addShadowRoot: (shadowRoot, scope) => {\n if (controllerByShadowRoot.has(shadowRoot)) {\n return;\n }\n const mutationTracker = trackMutation(shadowRoot, emitRecord, emitStats, scope);\n // The change event does not bubble up across the shadow root, we have to listen on the shadow root\n const inputTracker = trackInput(shadowRoot, emitRecord, scope);\n // The scroll event does not bubble up across the shadow root, we have to listen on the shadow root\n const scrollTracker = trackScroll(shadowRoot, emitRecord, scope);\n controllerByShadowRoot.set(shadowRoot, {\n flush: () => mutationTracker.flush(),\n stop: () => {\n mutationTracker.stop();\n inputTracker.stop();\n scrollTracker.stop();\n },\n });\n },\n removeShadowRoot: (shadowRoot) => {\n const entry = controllerByShadowRoot.get(shadowRoot);\n if (!entry) {\n // unidentified root cause: observed in some cases with shadow DOM added by browser extensions\n return;\n }\n entry.stop();\n controllerByShadowRoot.delete(shadowRoot);\n },\n stop: () => {\n controllerByShadowRoot.forEach(({ stop }) => stop());\n },\n flush: () => {\n controllerByShadowRoot.forEach(({ flush }) => flush());\n },\n };\n return shadowRootsController;\n};\n//# sourceMappingURL=shadowRootsController.js.map","import { sendToExtension } from '@datadog/browser-core';\nimport * as replayStats from '../replayStats';\nimport { trackFocus, trackFrustration, trackInput, trackMediaInteraction, trackMouseInteraction, trackMove, trackMutation, trackScroll, trackStyleSheet, trackViewEnd, trackViewportResize, trackVisualViewportResize, } from './trackers';\nimport { createElementsScrollPositions } from './elementsScrollPositions';\nimport { initShadowRootsController } from './shadowRootsController';\nimport { startFullSnapshots } from './startFullSnapshots';\nimport { createRecordingScope } from './recordingScope';\nexport function record(options) {\n const { emitRecord, emitStats, configuration, lifeCycle } = options;\n // runtime checks for user options\n if (!emitRecord || !emitStats) {\n throw new Error('emit functions are required');\n }\n const processRecord = (record) => {\n emitRecord(record);\n sendToExtension('record', { record });\n const view = options.viewHistory.findView();\n replayStats.addRecord(view.id);\n };\n const shadowRootsController = initShadowRootsController(processRecord, emitStats);\n const scope = createRecordingScope(configuration, createElementsScrollPositions(), shadowRootsController);\n const { stop: stopFullSnapshots } = startFullSnapshots(lifeCycle, processRecord, emitStats, flushMutations, scope);\n function flushMutations() {\n shadowRootsController.flush();\n mutationTracker.flush();\n }\n const mutationTracker = trackMutation(document, processRecord, emitStats, scope);\n const trackers = [\n mutationTracker,\n trackMove(processRecord, scope),\n trackMouseInteraction(processRecord, scope),\n trackScroll(document, processRecord, scope),\n trackViewportResize(processRecord, scope),\n trackInput(document, processRecord, scope),\n trackMediaInteraction(processRecord, scope),\n trackStyleSheet(processRecord, scope),\n trackFocus(processRecord, scope),\n trackVisualViewportResize(processRecord, scope),\n trackFrustration(lifeCycle, processRecord, scope),\n trackViewEnd(lifeCycle, processRecord, flushMutations),\n ];\n return {\n stop: () => {\n shadowRootsController.stop();\n trackers.forEach((tracker) => tracker.stop());\n stopFullSnapshots();\n },\n flushMutations,\n shadowRootsController,\n };\n}\n//# sourceMappingURL=record.js.map","export function buildReplayPayload(data, metadata, stats, rawSegmentBytesCount) {\n const formData = new FormData();\n formData.append('segment', new Blob([data], {\n type: 'application/octet-stream',\n }), `${metadata.session.id}-${metadata.start}`);\n const metadataAndSegmentSizes = {\n raw_segment_size: rawSegmentBytesCount,\n compressed_segment_size: data.byteLength,\n ...metadata,\n };\n const serializedMetadataAndSegmentSizes = JSON.stringify(metadataAndSegmentSizes);\n formData.append('event', new Blob([serializedMetadataAndSegmentSizes], { type: 'application/json' }));\n return {\n data: formData,\n bytesCount: data.byteLength,\n cssText: stats.cssText,\n isFullSnapshot: metadata.index_in_view === 0,\n rawSize: rawSegmentBytesCount,\n recordCount: metadata.records_count,\n serializationDuration: stats.serializationDuration,\n };\n}\n//# sourceMappingURL=buildReplayPayload.js.map","import { RecordType } from '../../types';\nimport * as replayStats from '../replayStats';\nimport { aggregateSerializationStats, createSerializationStats } from '../record';\nexport function createSegment({ context, creationReason, encoder, }) {\n let encodedBytesCount = 0;\n const viewId = context.view.id;\n const indexInView = replayStats.getSegmentsCount(viewId);\n const metadata = {\n start: Infinity,\n end: -Infinity,\n creation_reason: creationReason,\n records_count: 0,\n has_full_snapshot: false,\n index_in_view: indexInView,\n source: 'browser',\n ...context,\n };\n const serializationStats = createSerializationStats();\n replayStats.addSegment(viewId);\n function addRecord(record, callback) {\n metadata.start = Math.min(metadata.start, record.timestamp);\n metadata.end = Math.max(metadata.end, record.timestamp);\n metadata.records_count += 1;\n metadata.has_full_snapshot || (metadata.has_full_snapshot = record.type === RecordType.FullSnapshot || (record.type === RecordType.Change && metadata.index_in_view === 0));\n const prefix = encoder.isEmpty ? '{\"records\":[' : ',';\n encoder.write(prefix + JSON.stringify(record), (additionalEncodedBytesCount) => {\n encodedBytesCount += additionalEncodedBytesCount;\n callback(encodedBytesCount);\n });\n }\n function addStats(stats) {\n aggregateSerializationStats(serializationStats, stats);\n }\n function flush(callback) {\n if (encoder.isEmpty) {\n throw new Error('Empty segment flushed');\n }\n encoder.write(`],${JSON.stringify(metadata).slice(1)}\\n`);\n encoder.finish((encoderResult) => {\n replayStats.addWroteData(metadata.view.id, encoderResult.rawBytesCount);\n callback(metadata, serializationStats, encoderResult);\n });\n }\n return { addRecord, addStats, flush };\n}\n//# sourceMappingURL=segment.js.map","import { isPageExitReason, ONE_SECOND, clearTimeout, setTimeout } from '@datadog/browser-core';\nimport { buildReplayPayload } from './buildReplayPayload';\nimport { createSegment } from './segment';\nexport const SEGMENT_DURATION_LIMIT = 5 * ONE_SECOND;\n/**\n * beacon payload max queue size implementation is 64kb\n * ensure that we leave room for logs, rum and potential other users\n */\nexport let SEGMENT_BYTES_LIMIT = 60000;\nexport function startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, httpRequest, encoder) {\n return doStartSegmentCollection(lifeCycle, () => computeSegmentContext(configuration.applicationId, sessionManager, viewHistory), httpRequest, encoder);\n}\nexport function doStartSegmentCollection(lifeCycle, getSegmentContext, httpRequest, encoder) {\n let state = {\n status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n nextSegmentCreationReason: 'init',\n };\n const { unsubscribe: unsubscribeViewCreated } = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, () => {\n flushSegment('view_change');\n });\n const { unsubscribe: unsubscribePageMayExit } = lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_MAY_EXIT */, (pageMayExitEvent) => {\n flushSegment(pageMayExitEvent.reason);\n });\n function flushSegment(flushReason) {\n if (state.status === 1 /* SegmentCollectionStatus.SegmentPending */) {\n state.segment.flush((metadata, stats, encoderResult) => {\n const payload = buildReplayPayload(encoderResult.output, metadata, stats, encoderResult.rawBytesCount);\n if (isPageExitReason(flushReason)) {\n httpRequest.sendOnExit(payload);\n }\n else {\n httpRequest.send(payload);\n }\n });\n clearTimeout(state.expirationTimeoutId);\n }\n if (flushReason !== 'stop') {\n state = {\n status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n nextSegmentCreationReason: flushReason,\n };\n }\n else {\n state = {\n status: 2 /* SegmentCollectionStatus.Stopped */,\n };\n }\n }\n return {\n addRecord: (record) => {\n if (state.status === 2 /* SegmentCollectionStatus.Stopped */) {\n return;\n }\n if (state.status === 0 /* SegmentCollectionStatus.WaitingForInitialRecord */) {\n const context = getSegmentContext();\n if (!context) {\n return;\n }\n state = {\n status: 1 /* SegmentCollectionStatus.SegmentPending */,\n segment: createSegment({ encoder, context, creationReason: state.nextSegmentCreationReason }),\n expirationTimeoutId: setTimeout(() => {\n flushSegment('segment_duration_limit');\n }, SEGMENT_DURATION_LIMIT),\n };\n }\n state.segment.addRecord(record, (encodedBytesCount) => {\n if (encodedBytesCount > SEGMENT_BYTES_LIMIT) {\n flushSegment('segment_bytes_limit');\n }\n });\n },\n addStats: (stats) => {\n if (state.status === 1 /* SegmentCollectionStatus.SegmentPending */) {\n state.segment.addStats(stats);\n }\n },\n stop: () => {\n flushSegment('stop');\n unsubscribeViewCreated();\n unsubscribePageMayExit();\n },\n };\n}\nexport function computeSegmentContext(applicationId, sessionManager, viewHistory) {\n const session = sessionManager.findTrackedSession();\n const viewContext = viewHistory.findView();\n if (!session || !viewContext) {\n return undefined;\n }\n return {\n application: {\n id: applicationId,\n },\n session: {\n id: session.id,\n },\n view: {\n id: viewContext.id,\n },\n };\n}\nexport function setSegmentBytesLimit(newSegmentBytesLimit = 60000) {\n SEGMENT_BYTES_LIMIT = newSegmentBytesLimit;\n}\n//# sourceMappingURL=segmentCollection.js.map","import { ExperimentalFeature, addTelemetryMetrics, isExperimentalFeatureEnabled, noop, } from '@datadog/browser-core';\nexport function startSegmentTelemetry(telemetry, requestObservable) {\n if (!telemetry.metricsEnabled) {\n return { stop: noop };\n }\n const { unsubscribe } = requestObservable.subscribe((requestEvent) => {\n if (requestEvent.type === 'failure' ||\n requestEvent.type === 'queue-full' ||\n (requestEvent.type === 'success' && requestEvent.payload.isFullSnapshot)) {\n const metrics = createSegmentMetrics(requestEvent.type, requestEvent.bandwidth, requestEvent.payload);\n // monitor-until: 2026-07-01\n addTelemetryMetrics(\"Segment network request metrics\" /* TelemetryMetrics.SEGMENT_METRICS_TELEMETRY_NAME */, { metrics });\n }\n });\n return {\n stop: unsubscribe,\n };\n}\nfunction createSegmentMetrics(result, bandwidthStats, payload) {\n return {\n cssText: {\n count: payload.cssText.count,\n max: payload.cssText.max,\n sum: payload.cssText.sum,\n },\n encoding: {\n fullSnapshot: isExperimentalFeatureEnabled(ExperimentalFeature.USE_CHANGE_RECORDS) ? 'change' : 'v1',\n incrementalSnapshot: 'v1',\n },\n isFullSnapshot: payload.isFullSnapshot,\n ongoingRequests: {\n count: bandwidthStats.ongoingRequestCount,\n totalSize: bandwidthStats.ongoingByteCount,\n },\n recordCount: payload.recordCount,\n result,\n serializationDuration: {\n count: payload.serializationDuration.count,\n max: payload.serializationDuration.max,\n sum: payload.serializationDuration.sum,\n },\n size: {\n compressed: payload.bytesCount,\n raw: payload.rawSize,\n },\n };\n}\n//# sourceMappingURL=startSegmentTelemetry.js.map","import { getEventBridge } from '@datadog/browser-core';\nexport function startRecordBridge(viewHistory) {\n const bridge = getEventBridge();\n return {\n addRecord: (record) => {\n // Get the current active view, not at the time of the record, aligning with the segment logic.\n // This approach could potentially associate the record to an incorrect view, in case the record date is in the past (e.g. frustration records).\n // However the risk is minimal. We could address the issue when potential negative impact are identified.\n const view = viewHistory.findView();\n bridge.send('record', record, view.id);\n },\n };\n}\n//# sourceMappingURL=startRecordBridge.js.map","import { createHttpRequest, addTelemetryDebug, canUseEventBridge, noop } from '@datadog/browser-core';\nimport { record } from '../domain/record';\nimport { startSegmentCollection, SEGMENT_BYTES_LIMIT, startSegmentTelemetry } from '../domain/segmentCollection';\nimport { startRecordBridge } from '../domain/startRecordBridge';\nexport function startRecording(lifeCycle, configuration, sessionManager, viewHistory, encoder, telemetry, httpRequest) {\n const cleanupTasks = [];\n const reportError = (error) => {\n lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error });\n // monitor-until: forever, to keep an eye on the errors reported to customers\n addTelemetryDebug('Error reported to customer', { 'error.message': error.message });\n };\n const replayRequest = httpRequest || createHttpRequest([configuration.sessionReplayEndpointBuilder], reportError, SEGMENT_BYTES_LIMIT);\n let addRecord;\n let addStats;\n if (!canUseEventBridge()) {\n const segmentCollection = startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, replayRequest, encoder);\n addRecord = segmentCollection.addRecord;\n addStats = segmentCollection.addStats;\n cleanupTasks.push(segmentCollection.stop);\n const segmentTelemetry = startSegmentTelemetry(telemetry, replayRequest.observable);\n cleanupTasks.push(segmentTelemetry.stop);\n }\n else {\n ;\n ({ addRecord } = startRecordBridge(viewHistory));\n addStats = noop;\n }\n const { stop: stopRecording } = record({\n emitRecord: addRecord,\n emitStats: addStats,\n configuration,\n lifeCycle,\n viewHistory,\n });\n cleanupTasks.push(stopRecording);\n return {\n stop: () => {\n cleanupTasks.forEach((task) => task());\n },\n };\n}\n//# sourceMappingURL=startRecording.js.map"],"names":["document","isSVGElement","record","target","index","replayStats.addRecord","replayStats.getSegmentsCount","replayStats.addSegment","addRecord","replayStats.addWroteData"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40]}
|
|
1
|
+
{"version":3,"file":"startRecording-Da15t52a.js","sources":["../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/types/sessionReplayConstants.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/insertionCursor.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationUtils.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeStyleSheets.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttribute.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeAttributes.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeNode.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationStats.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/changeEncoder.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializationTransaction.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeFullSnapshot.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeNodeAsChange.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeFullSnapshotAsChange.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/assembly.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/serialization/serializeMutations.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/viewports.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/startFullSnapshots.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/itemIds.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/recordingScope.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/elementsScrollPositions.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/eventsUtils.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMove.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMouseInteraction.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackScroll.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewportResize.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMediaInteraction.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackStyleSheet.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFocus.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackFrustration.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackViewEnd.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackInput.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/mutationBatch.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/trackers/trackMutation.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/shadowRootsController.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/record/record.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/buildReplayPayload.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segment.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/segmentCollection.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/segmentCollection/startSegmentTelemetry.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/domain/startRecordBridge.js","../../node_modules/.pnpm/@datadog+browser-rum@6.28.1/node_modules/@datadog/browser-rum/esm/boot/startRecording.js"],"sourcesContent":["export const RecordType = {\n FullSnapshot: 2,\n IncrementalSnapshot: 3,\n Meta: 4,\n Focus: 6,\n ViewEnd: 7,\n VisualViewport: 8,\n FrustrationRecord: 9,\n Change: 12,\n};\nexport const NodeType = {\n Document: 0,\n DocumentType: 1,\n Element: 2,\n Text: 3,\n CDATA: 4,\n DocumentFragment: 11,\n};\nexport const ChangeType = {\n AddString: 0,\n AddNode: 1,\n RemoveNode: 2,\n Attribute: 3,\n Text: 4,\n Size: 5,\n ScrollPosition: 6,\n AddStyleSheet: 7,\n AttachedStyleSheets: 8,\n MediaPlaybackState: 9,\n VisualViewport: 10,\n};\nexport const PlaybackState = {\n Playing: 0,\n Paused: 1,\n};\nexport const IncrementalSource = {\n Mutation: 0,\n MouseMove: 1,\n MouseInteraction: 2,\n Scroll: 3,\n ViewportResize: 4,\n Input: 5,\n TouchMove: 6,\n MediaInteraction: 7,\n StyleSheetRule: 8,\n // CanvasMutation : 9,\n // Font : 10,\n};\nexport const MouseInteractionType = {\n MouseUp: 0,\n MouseDown: 1,\n Click: 2,\n ContextMenu: 3,\n DblClick: 4,\n Focus: 5,\n Blur: 6,\n TouchStart: 7,\n TouchEnd: 9,\n};\nexport const MediaInteractionType = {\n Play: 0,\n Pause: 1,\n};\n//# sourceMappingURL=sessionReplayConstants.js.map","/** Returns an InsertionCursor which starts positioned at the root of the document. */\nexport function createRootInsertionCursor(nodeIds) {\n return createInsertionCursor(undefined, undefined, nodeIds);\n}\n/**\n * Returns an InsertionCursor which starts positioned in the child list of the given\n * parent node. If a next sibling is provided, the cursor points to the position\n * immediately before the next sibling; otherwise, the cursor points to the end of the\n * child list.\n */\nexport function createChildInsertionCursor(parentId, nextSiblingId, nodeIds) {\n return createInsertionCursor(parentId, nextSiblingId, nodeIds);\n}\nfunction createInsertionCursor(parentId, nextSiblingId, nodeIds) {\n let cursor = {\n container: undefined,\n parentId,\n previousSiblingId: undefined,\n nextSiblingId,\n };\n const computeInsertionPoint = (nodeId) => {\n if (cursor.previousSiblingId === nodeId - 1) {\n // Use an AppendAfterPreviousInsertionPoint. (i.e., 0)\n return 0;\n }\n if (cursor.nextSiblingId !== undefined) {\n // Use an InsertBeforeInsertionPoint. We identify the next sibling using a\n // negative integer indicating the difference between the new node's id and its next\n // sibling's id.\n return cursor.nextSiblingId - nodeId;\n }\n if (cursor.parentId !== undefined) {\n // Use an AppendChildInsertionPoint. We identify the parent node using a positive\n // integer indicating the difference between the new node's id and its parent's id.\n return nodeId - cursor.parentId;\n }\n // There's no parent. Use a RootInsertionPoint. (i.e., null)\n return null;\n };\n return {\n advance(node) {\n const nodeId = nodeIds.getOrInsert(node);\n const insertionPoint = computeInsertionPoint(nodeId);\n cursor.previousSiblingId = nodeId;\n return { nodeId, insertionPoint };\n },\n ascend() {\n if (cursor.container) {\n cursor = cursor.container;\n }\n },\n descend() {\n if (cursor.previousSiblingId !== undefined) {\n cursor = {\n container: cursor,\n parentId: cursor.previousSiblingId,\n previousSiblingId: undefined,\n nextSiblingId: undefined,\n };\n }\n },\n };\n}\n//# sourceMappingURL=insertionCursor.js.map","import { buildUrl } from '@datadog/browser-core';\nimport { CENSORED_STRING_MARK, shouldMaskNode } from '@datadog/browser-rum-core';\n/**\n * Get the element \"value\" to be serialized as an attribute or an input update record. It respects\n * the input privacy mode of the element.\n * PERFROMANCE OPTIMIZATION: Assumes that privacy level `HIDDEN` is never encountered because of earlier checks.\n */\nexport function getElementInputValue(element, nodePrivacyLevel) {\n /*\n BROWSER SPEC NOTE: <input>, <select>\n For some <input> elements, the `value` is an exceptional property/attribute that has the\n value synced between el.value and el.getAttribute()\n input[type=button,checkbox,hidden,image,radio,reset,submit]\n */\n const tagName = element.tagName;\n const value = element.value;\n if (shouldMaskNode(element, nodePrivacyLevel)) {\n const type = element.type;\n if (tagName === 'INPUT' && (type === 'button' || type === 'submit' || type === 'reset')) {\n // Overrule `MASK` privacy level for button-like element values, as they are used during replay\n // to display their label. They can still be hidden via the \"hidden\" privacy attribute or class name.\n return value;\n }\n else if (!value || tagName === 'OPTION') {\n // <Option> value provides no benefit\n return;\n }\n return CENSORED_STRING_MARK;\n }\n if (tagName === 'OPTION' || tagName === 'SELECT') {\n return element.value;\n }\n if (tagName !== 'INPUT' && tagName !== 'TEXTAREA') {\n return;\n }\n return value;\n}\nexport const URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")([^\"]*)\"|([^)]*))\\)/gm;\nexport const ABSOLUTE_URL = /^[A-Za-z]+:|^\\/\\//;\nexport const DATA_URI = /^[\"']?data:.*,/i;\nexport function switchToAbsoluteUrl(cssText, cssHref) {\n return cssText.replace(URL_IN_CSS_REF, (matchingSubstring, singleQuote, urlWrappedInSingleQuotes, doubleQuote, urlWrappedInDoubleQuotes, urlNotWrappedInQuotes) => {\n const url = urlWrappedInSingleQuotes || urlWrappedInDoubleQuotes || urlNotWrappedInQuotes;\n if (!cssHref || !url || ABSOLUTE_URL.test(url) || DATA_URI.test(url)) {\n return matchingSubstring;\n }\n const quote = singleQuote || doubleQuote || '';\n return `url(${quote}${makeUrlAbsolute(url, cssHref)}${quote})`;\n });\n}\nfunction makeUrlAbsolute(url, baseUrl) {\n try {\n return buildUrl(url, baseUrl).href;\n }\n catch (_a) {\n return url;\n }\n}\nconst TAG_NAME_REGEX = /[^a-z1-6-_]/;\nexport function getValidTagName(tagName) {\n const processedTagName = tagName.toLowerCase().trim();\n if (TAG_NAME_REGEX.test(processedTagName)) {\n // if the tag name is odd and we cannot extract\n // anything from the string, then we return a\n // generic div\n return 'div';\n }\n return processedTagName;\n}\n/**\n * Returns the tag name of the given element, normalized to ensure a consistent lowercase\n * representation regardless of whether the element is HTML, XHTML, or SVG.\n */\nexport function normalizedTagName(element) {\n return element.tagName.toLowerCase();\n}\nexport function censoredImageForSize(width, height) {\n return `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='${width}' height='${height}' style='background-color:silver'%3E%3C/svg%3E`;\n}\n//# sourceMappingURL=serializationUtils.js.map","export function serializeStyleSheets(cssStyleSheets, transaction) {\n if (cssStyleSheets === undefined || cssStyleSheets.length === 0) {\n return undefined;\n }\n const serializeStylesheet = (cssStyleSheet) => {\n const rules = cssStyleSheet.cssRules || cssStyleSheet.rules;\n const cssRules = Array.from(rules, (cssRule) => cssRule.cssText);\n transaction.addMetric('cssText', cssRules.reduce((totalLength, rule) => totalLength + rule.length, 0));\n const styleSheet = {\n cssRules,\n disabled: cssStyleSheet.disabled || undefined,\n media: cssStyleSheet.media.length > 0 ? Array.from(cssStyleSheet.media) : undefined,\n };\n return styleSheet;\n };\n // Safari iOS 16.x implements adoptedStyleSheets as a FrozenArray that:\n // - can't be iterated over through map or for...of\n // - can't be converted to regular array with Array.from\n // - can't be detected with Array.isArray or Object.isFrozen\n // Use index access to avoid the issue\n const styleSheets = [];\n for (let index = 0; index < cssStyleSheets.length; index++) {\n styleSheets.push(serializeStylesheet(cssStyleSheets[index]));\n }\n return styleSheets;\n}\n//# sourceMappingURL=serializeStyleSheets.js.map","import { NodePrivacyLevel, CENSORED_STRING_MARK, CENSORED_IMG_MARK, sanitizeIfLongDataUrl, shouldMaskAttribute, } from '@datadog/browser-rum-core';\nimport { censoredImageForSize } from './serializationUtils';\n// TODO: temporarily bump the Session Replay limit to 1Mb for dataUrls\n// This limit should be removed after [PANA-2843] is implemented\nexport const MAX_ATTRIBUTE_VALUE_CHAR_LENGTH = 1000000;\nexport function serializeAttribute(element, nodePrivacyLevel, attributeName, configuration) {\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n // dup condition for direct access case\n return null;\n }\n const attributeValue = element.getAttribute(attributeName);\n const tagName = element.tagName;\n if (shouldMaskAttribute(tagName, attributeName, attributeValue, nodePrivacyLevel, configuration)) {\n // mask image URLs\n if (tagName === 'IMG') {\n // generate image with similar dimension than the original to have the same rendering behaviour\n const image = element;\n if (image.naturalWidth > 0) {\n return censoredImageForSize(image.naturalWidth, image.naturalHeight);\n }\n const { width, height } = element.getBoundingClientRect();\n if (width > 0 || height > 0) {\n return censoredImageForSize(width, height);\n }\n // if we can't get the image size, fallback to the censored image\n return CENSORED_IMG_MARK;\n }\n if (tagName === 'SOURCE') {\n return CENSORED_IMG_MARK;\n }\n return CENSORED_STRING_MARK;\n }\n if (!attributeValue) {\n return attributeValue;\n }\n return sanitizeIfLongDataUrl(attributeValue, MAX_ATTRIBUTE_VALUE_CHAR_LENGTH);\n}\n//# sourceMappingURL=serializeAttribute.js.map","import { NodePrivacyLevel, shouldMaskNode } from '@datadog/browser-rum-core';\nimport { isSafari } from '@datadog/browser-core';\nimport { getElementInputValue, normalizedTagName, switchToAbsoluteUrl } from './serializationUtils';\nimport { serializeAttribute } from './serializeAttribute';\nexport function serializeAttributes(element, nodePrivacyLevel, transaction) {\n return {\n ...serializeDOMAttributes(element, nodePrivacyLevel, transaction),\n ...serializeVirtualAttributes(element, nodePrivacyLevel, transaction),\n };\n}\nexport function serializeDOMAttributes(element, nodePrivacyLevel, transaction) {\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n return {};\n }\n const attrs = {};\n const tagName = normalizedTagName(element);\n for (let i = 0; i < element.attributes.length; i += 1) {\n const attribute = element.attributes.item(i);\n const attributeName = attribute.name;\n const attributeValue = serializeAttribute(element, nodePrivacyLevel, attributeName, transaction.scope.configuration);\n if (attributeValue !== null) {\n attrs[attributeName] = attributeValue;\n }\n }\n if (element.value &&\n (tagName === 'textarea' || tagName === 'select' || tagName === 'option' || tagName === 'input')) {\n const formValue = getElementInputValue(element, nodePrivacyLevel);\n if (formValue !== undefined) {\n attrs.value = formValue;\n }\n }\n /**\n * <Option> can be selected, which occurs if its `value` matches ancestor `<Select>.value`\n */\n if (tagName === 'option') {\n const optionElement = element;\n if (optionElement.selected && !shouldMaskNode(optionElement, nodePrivacyLevel)) {\n attrs.selected = '';\n }\n else {\n delete attrs.selected;\n }\n }\n /**\n * Forms: input[type=checkbox,radio]\n * The `checked` property for <input> is a little bit special:\n * 1. el.checked is a setter that returns if truthy.\n * 2. getAttribute returns the string value\n * getAttribute('checked') does not sync with `Element.checked`, so use JS property\n * NOTE: `checked` property exists on `HTMLInputElement`. For serializer assumptions, we check for type=radio|check.\n */\n const inputElement = element;\n if (tagName === 'input' && (inputElement.type === 'radio' || inputElement.type === 'checkbox')) {\n if (inputElement.checked && !shouldMaskNode(inputElement, nodePrivacyLevel)) {\n attrs.checked = '';\n }\n else {\n delete attrs.checked;\n }\n }\n return attrs;\n}\nexport function serializeVirtualAttributes(element, nodePrivacyLevel, transaction) {\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n return {};\n }\n const attrs = {};\n const doc = element.ownerDocument;\n const tagName = normalizedTagName(element);\n // remote css\n if (tagName === 'link') {\n const stylesheet = Array.from(doc.styleSheets).find((s) => s.href === element.href);\n const cssText = getCssRulesString(stylesheet);\n if (cssText && stylesheet) {\n transaction.addMetric('cssText', cssText.length);\n attrs._cssText = cssText;\n }\n }\n // dynamic stylesheet\n if (tagName === 'style' && element.sheet) {\n const cssText = getCssRulesString(element.sheet);\n if (cssText) {\n transaction.addMetric('cssText', cssText.length);\n attrs._cssText = cssText;\n }\n }\n /**\n * Serialize the media playback state\n */\n if (tagName === 'audio' || tagName === 'video') {\n const mediaElement = element;\n attrs.rr_mediaState = mediaElement.paused ? 'paused' : 'played';\n }\n /**\n * Serialize the scroll state for each element only for full snapshot\n */\n let scrollTop;\n let scrollLeft;\n switch (transaction.kind) {\n case 0 /* SerializationKind.INITIAL_FULL_SNAPSHOT */:\n scrollTop = Math.round(element.scrollTop);\n scrollLeft = Math.round(element.scrollLeft);\n if (scrollTop || scrollLeft) {\n transaction.scope.elementsScrollPositions.set(element, { scrollTop, scrollLeft });\n }\n break;\n case 1 /* SerializationKind.SUBSEQUENT_FULL_SNAPSHOT */:\n if (transaction.scope.elementsScrollPositions.has(element)) {\n ;\n ({ scrollTop, scrollLeft } = transaction.scope.elementsScrollPositions.get(element));\n }\n break;\n }\n if (scrollLeft) {\n attrs.rr_scrollLeft = scrollLeft;\n }\n if (scrollTop) {\n attrs.rr_scrollTop = scrollTop;\n }\n return attrs;\n}\nexport function getCssRulesString(cssStyleSheet) {\n if (!cssStyleSheet) {\n return null;\n }\n let rules;\n try {\n rules = cssStyleSheet.rules || cssStyleSheet.cssRules;\n }\n catch (_a) {\n // if css is protected by CORS we cannot access cssRules see: https://www.w3.org/TR/cssom-1/#the-cssstylesheet-interface\n }\n if (!rules) {\n return null;\n }\n const styleSheetCssText = Array.from(rules, isSafari() ? getCssRuleStringForSafari : getCssRuleString).join('');\n return switchToAbsoluteUrl(styleSheetCssText, cssStyleSheet.href);\n}\nfunction getCssRuleStringForSafari(rule) {\n // Safari does not escape attribute selectors containing : properly\n // https://bugs.webkit.org/show_bug.cgi?id=184604\n if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n // This regex replaces [foo:bar] by [foo\\\\:bar]\n const escapeColon = /(\\[[\\w-]+[^\\\\])(:[^\\]]+\\])/g;\n return rule.cssText.replace(escapeColon, '$1\\\\$2');\n }\n return getCssRuleString(rule);\n}\nfunction getCssRuleString(rule) {\n // If it's an @import rule, try to inline sub-rules recursively with `getCssRulesString`. This\n // operation can fail if the imported stylesheet is protected by CORS, in which case we fallback\n // to the @import rule CSS text.\n return (isCSSImportRule(rule) && getCssRulesString(rule.styleSheet)) || rule.cssText;\n}\nfunction isCSSImportRule(rule) {\n return 'styleSheet' in rule;\n}\nfunction isCSSStyleRule(rule) {\n return 'selectorText' in rule;\n}\n//# sourceMappingURL=serializeAttributes.js.map","import { reducePrivacyLevel, getNodeSelfPrivacyLevel, getTextContent, isNodeShadowRoot, hasChildNodes, forEachChildNodes, NodePrivacyLevel, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, } from '@datadog/browser-rum-core';\nimport { NodeType } from '../../../types';\nimport { getValidTagName } from './serializationUtils';\nimport { serializeStyleSheets } from './serializeStyleSheets';\nimport { serializeAttributes } from './serializeAttributes';\nexport function serializeNode(node, parentNodePrivacyLevel, transaction) {\n switch (node.nodeType) {\n case node.DOCUMENT_NODE:\n return serializeDocumentNode(node, parentNodePrivacyLevel, transaction);\n case node.DOCUMENT_FRAGMENT_NODE:\n return serializeDocumentFragmentNode(node, parentNodePrivacyLevel, transaction);\n case node.DOCUMENT_TYPE_NODE:\n return serializeDocumentTypeNode(node, transaction);\n case node.ELEMENT_NODE:\n return serializeElementNode(node, parentNodePrivacyLevel, transaction);\n case node.TEXT_NODE:\n return serializeTextNode(node, parentNodePrivacyLevel, transaction);\n case node.CDATA_SECTION_NODE:\n return serializeCDataNode(node, transaction);\n default:\n return null;\n }\n}\nexport function serializeChildNodes(node, parentNodePrivacyLevel, transaction) {\n const result = [];\n forEachChildNodes(node, (childNode) => {\n const serializedChildNode = serializeNode(childNode, parentNodePrivacyLevel, transaction);\n if (serializedChildNode) {\n result.push(serializedChildNode);\n }\n });\n return result;\n}\nexport function serializeDocumentNode(document, parentNodePrivacyLevel, transaction) {\n return {\n type: NodeType.Document,\n id: transaction.assignId(document),\n childNodes: serializeChildNodes(document, parentNodePrivacyLevel, transaction),\n adoptedStyleSheets: serializeStyleSheets(document.adoptedStyleSheets, transaction),\n };\n}\nfunction serializeDocumentFragmentNode(element, parentNodePrivacyLevel, transaction) {\n const isShadowRoot = isNodeShadowRoot(element);\n if (isShadowRoot) {\n transaction.scope.shadowRootsController.addShadowRoot(element, transaction.scope);\n }\n return {\n type: NodeType.DocumentFragment,\n id: transaction.assignId(element),\n childNodes: serializeChildNodes(element, parentNodePrivacyLevel, transaction),\n isShadowRoot,\n adoptedStyleSheets: isShadowRoot ? serializeStyleSheets(element.adoptedStyleSheets, transaction) : undefined,\n };\n}\nfunction serializeDocumentTypeNode(documentType, transaction) {\n return {\n type: NodeType.DocumentType,\n id: transaction.assignId(documentType),\n name: documentType.name,\n publicId: documentType.publicId,\n systemId: documentType.systemId,\n };\n}\n/**\n * Serializing Element nodes involves capturing:\n * 1. HTML ATTRIBUTES:\n * 2. JS STATE:\n * - scroll offsets\n * - Form fields (input value, checkbox checked, option selection, range)\n * - Canvas state,\n * - Media (video/audio) play mode + currentTime\n * - iframe contents\n * - webcomponents\n * 3. CUSTOM PROPERTIES:\n * - height+width for when `hidden` to cover the element\n * 4. EXCLUDED INTERACTION STATE:\n * - focus (possible, but not worth perf impact)\n * - hover (tracked only via mouse activity)\n * - fullscreen mode\n */\nfunction serializeElementNode(element, parentNodePrivacyLevel, transaction) {\n const tagName = getValidTagName(element.tagName);\n const isSVG = isSVGElement(element) || undefined;\n // For performance reason, we don't use getNodePrivacyLevel directly: we leverage the\n // parentNodePrivacyLevel option to avoid iterating over all parents\n const nodePrivacyLevel = reducePrivacyLevel(getNodeSelfPrivacyLevel(element), parentNodePrivacyLevel);\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n const { width, height } = element.getBoundingClientRect();\n return {\n type: NodeType.Element,\n id: transaction.assignId(element),\n tagName,\n attributes: {\n rr_width: `${width}px`,\n rr_height: `${height}px`,\n [PRIVACY_ATTR_NAME]: PRIVACY_ATTR_VALUE_HIDDEN,\n },\n childNodes: [],\n isSVG,\n };\n }\n // Ignore Elements like Script and some Link, Metas\n if (nodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n return null;\n }\n const id = transaction.assignId(element);\n const attributes = serializeAttributes(element, nodePrivacyLevel, transaction);\n let childNodes = [];\n if (hasChildNodes(element) &&\n // Do not serialize style children as the css rules are already in the _cssText attribute\n tagName !== 'style') {\n childNodes = serializeChildNodes(element, nodePrivacyLevel, transaction);\n }\n return {\n type: NodeType.Element,\n id,\n tagName,\n attributes,\n childNodes,\n isSVG,\n };\n}\nfunction isSVGElement(el) {\n return el.tagName === 'svg' || el instanceof SVGElement;\n}\n/**\n * Text Nodes are dependant on Element nodes\n * Privacy levels are set on elements so we check the parentElement of a text node\n * for privacy level.\n */\nfunction serializeTextNode(textNode, parentNodePrivacyLevel, transaction) {\n const textContent = getTextContent(textNode, parentNodePrivacyLevel);\n if (textContent === undefined) {\n return null;\n }\n return {\n type: NodeType.Text,\n id: transaction.assignId(textNode),\n textContent,\n };\n}\nfunction serializeCDataNode(node, transaction) {\n return {\n type: NodeType.CDATA,\n id: transaction.assignId(node),\n textContent: '',\n };\n}\n//# sourceMappingURL=serializeNode.js.map","export function createSerializationStats() {\n return {\n cssText: {\n count: 0,\n max: 0,\n sum: 0,\n },\n serializationDuration: {\n count: 0,\n max: 0,\n sum: 0,\n },\n };\n}\nexport function updateSerializationStats(stats, metric, value) {\n stats[metric].count += 1;\n stats[metric].max = Math.max(stats[metric].max, value);\n stats[metric].sum += value;\n}\nexport function aggregateSerializationStats(aggregateStats, stats) {\n for (const metric of ['cssText', 'serializationDuration']) {\n aggregateStats[metric].count += stats[metric].count;\n aggregateStats[metric].max = Math.max(aggregateStats[metric].max, stats[metric].max);\n aggregateStats[metric].sum += stats[metric].sum;\n }\n}\n//# sourceMappingURL=serializationStats.js.map","import { ChangeType } from '../../../types';\nexport function createChangeEncoder(stringIds) {\n let pendingChanges = {};\n // A helper that searches for strings in arbitrarily-nested arrays, inserts any strings\n // it finds into the string table, and replaces the strings with string table\n // references.\n const convertStringsToStringReferences = (array) => {\n for (let index = 0, length = array.length; index < length; index++) {\n const item = array[index];\n if (typeof item === 'string') {\n const previousSize = stringIds.size;\n array[index] = stringIds.getOrInsert(item);\n if (stringIds.size > previousSize) {\n add(ChangeType.AddString, item);\n }\n }\n else if (Array.isArray(item)) {\n convertStringsToStringReferences(item);\n }\n }\n };\n const add = (type, data) => {\n if (!(type in pendingChanges)) {\n pendingChanges[type] = [type];\n }\n if (type !== ChangeType.AddString && Array.isArray(data)) {\n convertStringsToStringReferences(data);\n }\n pendingChanges[type].push(data);\n };\n const flush = () => {\n const changes = [];\n [\n ChangeType.AddString,\n ChangeType.AddNode,\n ChangeType.RemoveNode,\n ChangeType.Attribute,\n ChangeType.Text,\n ChangeType.Size,\n ChangeType.ScrollPosition,\n ChangeType.AddStyleSheet,\n ChangeType.AttachedStyleSheets,\n ChangeType.MediaPlaybackState,\n ChangeType.VisualViewport,\n ].forEach((changeType) => {\n const change = pendingChanges[changeType];\n if (change) {\n changes.push(change);\n }\n });\n pendingChanges = {};\n return changes;\n };\n return { add, flush };\n}\n//# sourceMappingURL=changeEncoder.js.map","import { elapsed, timeStampNow } from '@datadog/browser-core';\nimport { ChangeType, RecordType } from '../../../types';\nimport { createSerializationStats, updateSerializationStats } from './serializationStats';\nimport { createChangeEncoder } from './changeEncoder';\n/**\n * Perform serialization within a transaction. At the end of the transaction, the\n * generated records and statistics will be emitted.\n */\nexport function serializeInTransaction(kind, emitRecord, emitStats, scope, serialize) {\n const records = [];\n const stats = createSerializationStats();\n const transaction = {\n add(record) {\n records.push(record);\n },\n addMetric(metric, value) {\n updateSerializationStats(stats, metric, value);\n },\n assignId(node) {\n const id = scope.nodeIds.getOrInsert(node);\n if (transaction.serializedNodeIds) {\n transaction.serializedNodeIds.add(id);\n }\n return id;\n },\n kind,\n scope,\n };\n const start = timeStampNow();\n serialize(transaction);\n updateSerializationStats(stats, 'serializationDuration', elapsed(start, timeStampNow()));\n for (const record of records) {\n emitRecord(record);\n }\n emitStats(stats);\n}\nexport function serializeChangesInTransaction(kind, emitRecord, emitStats, scope, timestamp, serialize) {\n const encoder = createChangeEncoder(scope.stringIds);\n const stats = createSerializationStats();\n const transaction = {\n addMetric(metric, value) {\n updateSerializationStats(stats, metric, value);\n },\n addNode(...change) {\n encoder.add(ChangeType.AddNode, change);\n },\n addStyleSheet(rules, mediaList, disabled) {\n if (disabled) {\n encoder.add(ChangeType.AddStyleSheet, [rules, mediaList || [], disabled]);\n }\n else if (mediaList) {\n encoder.add(ChangeType.AddStyleSheet, [rules, mediaList]);\n }\n else {\n encoder.add(ChangeType.AddStyleSheet, [rules]);\n }\n },\n attachStyleSheets(nodeId, sheetIds) {\n const change = [nodeId];\n for (const sheetId of sheetIds) {\n change.push(sheetId);\n }\n encoder.add(ChangeType.AttachedStyleSheets, change);\n },\n setMediaPlaybackState(nodeId, state) {\n encoder.add(ChangeType.MediaPlaybackState, [nodeId, state]);\n },\n setScrollPosition(nodeId, x, y) {\n encoder.add(ChangeType.ScrollPosition, [nodeId, x, y]);\n },\n setSize(nodeId, width, height) {\n encoder.add(ChangeType.Size, [nodeId, width, height]);\n },\n kind,\n scope,\n };\n const start = timeStampNow();\n serialize(transaction);\n updateSerializationStats(stats, 'serializationDuration', elapsed(start, timeStampNow()));\n const changes = encoder.flush();\n if (changes.length > 0) {\n emitRecord({\n data: changes,\n type: RecordType.Change,\n timestamp,\n });\n }\n emitStats(stats);\n}\n//# sourceMappingURL=serializationTransaction.js.map","import { getScrollX, getScrollY } from '@datadog/browser-rum-core';\nimport { RecordType } from '../../../types';\nimport { serializeNode } from './serializeNode';\nimport { serializeInTransaction } from './serializationTransaction';\nexport function serializeFullSnapshot(timestamp, kind, document, emitRecord, emitStats, scope) {\n serializeInTransaction(kind, emitRecord, emitStats, scope, (transaction) => {\n const defaultPrivacyLevel = transaction.scope.configuration.defaultPrivacyLevel;\n // We are sure that Documents are never ignored, so this function never returns null.\n const node = serializeNode(document, defaultPrivacyLevel, transaction);\n const record = {\n data: {\n node,\n initialOffset: {\n left: getScrollX(),\n top: getScrollY(),\n },\n },\n type: RecordType.FullSnapshot,\n timestamp,\n };\n transaction.add(record);\n });\n}\n//# sourceMappingURL=serializeFullSnapshot.js.map","import { reducePrivacyLevel, getNodeSelfPrivacyLevel, getTextContent, isNodeShadowRoot, forEachChildNodes, NodePrivacyLevel, PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN, getScrollX, getScrollY, isElementNode, } from '@datadog/browser-rum-core';\nimport { MediaInteractionType } from '../../../types';\nimport { serializeDOMAttributes, serializeVirtualAttributes } from './serializeAttributes';\nexport function serializeNodeAsChange(cursor, node, parentPrivacyLevel, transaction) {\n let privacyLevel;\n const selfPrivacyLevel = getNodeSelfPrivacyLevel(node);\n if (selfPrivacyLevel) {\n privacyLevel = reducePrivacyLevel(selfPrivacyLevel, parentPrivacyLevel);\n }\n else {\n privacyLevel = parentPrivacyLevel;\n }\n if (privacyLevel === NodePrivacyLevel.HIDDEN) {\n serializeHiddenNodePlaceholder(cursor, node, transaction);\n return;\n }\n // Totally ignore risky or unwanted elements. (e.g. <script>, some <link> and <meta> elements)\n if (privacyLevel === NodePrivacyLevel.IGNORE) {\n return;\n }\n switch (node.nodeType) {\n case node.CDATA_SECTION_NODE:\n serializeCDataNodeAsChange(cursor, node, transaction);\n break;\n case node.DOCUMENT_NODE:\n serializeDocumentNodeAsChange(cursor, node, transaction);\n break;\n case node.DOCUMENT_FRAGMENT_NODE:\n serializeDocumentFragmentNodeAsChange(cursor, node, transaction);\n break;\n case node.DOCUMENT_TYPE_NODE:\n serializeDocumentTypeNodeAsChange(cursor, node, transaction);\n break;\n case node.ELEMENT_NODE:\n serializeElementNodeAsChange(cursor, node, privacyLevel, transaction);\n break;\n case node.TEXT_NODE:\n serializeTextNodeAsChange(cursor, node, privacyLevel, transaction);\n break;\n default:\n return;\n }\n // If this node can't have children, we're done.\n switch (node.nodeType) {\n case node.CDATA_SECTION_NODE:\n case node.DOCUMENT_TYPE_NODE:\n case node.TEXT_NODE:\n return;\n }\n // Ignore the children of <style> elements; the CSS rules they contain are already\n // serialized as StyleSheetSnapshots.\n if (node.nodeName === 'STYLE') {\n return;\n }\n cursor.descend();\n forEachChildNodes(node, (childNode) => {\n serializeNodeAsChange(cursor, childNode, privacyLevel, transaction);\n });\n cursor.ascend();\n}\nfunction serializeDocumentNodeAsChange(cursor, document, transaction) {\n const { nodeId, insertionPoint } = cursor.advance(document);\n transaction.addNode(insertionPoint, '#document');\n transaction.setScrollPosition(nodeId, getScrollX(), getScrollY());\n serializeStyleSheetsAsChange(document.adoptedStyleSheets, nodeId, transaction);\n}\nfunction serializeDocumentFragmentNodeAsChange(cursor, documentFragment, transaction) {\n const { nodeId, insertionPoint } = cursor.advance(documentFragment);\n const isShadowRoot = isNodeShadowRoot(documentFragment);\n if (!isShadowRoot) {\n transaction.addNode(insertionPoint, '#document-fragment');\n return;\n }\n transaction.addNode(insertionPoint, '#shadow-root');\n transaction.scope.shadowRootsController.addShadowRoot(documentFragment, transaction.scope);\n serializeStyleSheetsAsChange(documentFragment.adoptedStyleSheets, nodeId, transaction);\n}\nfunction serializeDocumentTypeNodeAsChange(cursor, documentType, transaction) {\n const { insertionPoint } = cursor.advance(documentType);\n transaction.addNode(insertionPoint, '#doctype', documentType.name, documentType.publicId, documentType.systemId);\n}\nfunction serializeElementNodeAsChange(cursor, element, privacyLevel, transaction) {\n const { nodeId, insertionPoint } = cursor.advance(element);\n const domAttributes = Object.entries(serializeDOMAttributes(element, privacyLevel, transaction));\n transaction.addNode(insertionPoint, encodedElementName(element), ...domAttributes);\n const { _cssText: cssText, rr_mediaState: mediaState, rr_scrollLeft: scrollLeft, rr_scrollTop: scrollTop, } = serializeVirtualAttributes(element, privacyLevel, transaction);\n const linkOrStyle = element;\n if (cssText !== undefined && linkOrStyle.sheet) {\n const sheetId = transaction.scope.styleSheetIds.getOrInsert(linkOrStyle.sheet);\n transaction.addStyleSheet(cssText);\n transaction.attachStyleSheets(nodeId, [sheetId]);\n }\n if (mediaState === 'played') {\n transaction.setMediaPlaybackState(nodeId, MediaInteractionType.Play);\n }\n else if (mediaState === 'paused') {\n transaction.setMediaPlaybackState(nodeId, MediaInteractionType.Pause);\n }\n if (scrollLeft !== undefined || scrollTop !== undefined) {\n transaction.setScrollPosition(nodeId, scrollLeft || 0, scrollTop || 0);\n }\n}\nfunction serializeTextNodeAsChange(cursor, textNode, privacyLevel, transaction) {\n const textContent = getTextContent(textNode, privacyLevel);\n if (textContent === undefined) {\n return;\n }\n const { insertionPoint } = cursor.advance(textNode);\n transaction.addNode(insertionPoint, '#text', textContent);\n}\nfunction serializeCDataNodeAsChange(cursor, cdataNode, transaction) {\n const { insertionPoint } = cursor.advance(cdataNode);\n transaction.addNode(insertionPoint, '#cdata-section');\n}\nfunction serializeHiddenNodePlaceholder(cursor, node, transaction) {\n // We only generate placeholders for element nodes; other hidden nodes are simply not\n // serialized.\n if (!isElementNode(node)) {\n return;\n }\n const { nodeId, insertionPoint } = cursor.advance(node);\n transaction.addNode(insertionPoint, encodedElementName(node), [PRIVACY_ATTR_NAME, PRIVACY_ATTR_VALUE_HIDDEN]);\n const { width, height } = node.getBoundingClientRect();\n transaction.setSize(nodeId, width, height);\n}\nfunction serializeStyleSheetsAsChange(sheets, nodeId, transaction) {\n if (!sheets || sheets.length === 0) {\n return undefined;\n }\n transaction.attachStyleSheets(nodeId, sheets.map((sheet) => serializeStyleSheetAsChange(sheet, transaction)));\n}\nfunction serializeStyleSheetAsChange(sheet, transaction) {\n const rules = Array.from(sheet.cssRules || sheet.rules, (rule) => rule.cssText);\n const mediaList = sheet.media.length > 0 ? Array.from(sheet.media) : undefined;\n transaction.addMetric('cssText', rules.reduce((totalLength, rule) => totalLength + rule.length, 0));\n transaction.addStyleSheet(rules, mediaList, sheet.disabled);\n return transaction.scope.styleSheetIds.getOrInsert(sheet);\n}\nfunction encodedElementName(element) {\n const nodeName = element.nodeName;\n if (isSVGElement(element)) {\n return `svg>${nodeName}`;\n }\n return nodeName;\n}\nfunction isSVGElement(element) {\n return element.namespaceURI === 'http://www.w3.org/2000/svg';\n}\n//# sourceMappingURL=serializeNodeAsChange.js.map","import { serializeChangesInTransaction } from './serializationTransaction';\nimport { serializeNodeAsChange } from './serializeNodeAsChange';\nimport { createRootInsertionCursor } from './insertionCursor';\nexport function serializeFullSnapshotAsChange(timestamp, kind, document, emitRecord, emitStats, scope) {\n scope.resetIds();\n serializeChangesInTransaction(kind, emitRecord, emitStats, scope, timestamp, (transaction) => {\n serializeNodeAsChange(createRootInsertionCursor(scope.nodeIds), document, scope.configuration.defaultPrivacyLevel, transaction);\n });\n}\n//# sourceMappingURL=serializeFullSnapshotAsChange.js.map","import { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nexport function assembleIncrementalSnapshot(source, data, timestamp = timeStampNow()) {\n return {\n data: {\n source,\n ...data,\n },\n type: RecordType.IncrementalSnapshot,\n timestamp,\n };\n}\n//# sourceMappingURL=assembly.js.map","import { isNodeShadowHost, getParentNode, forEachChildNodes, getNodePrivacyLevel, getTextContent, NodePrivacyLevel, isNodeShadowRoot, } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nimport { serializeInTransaction } from './serializationTransaction';\nimport { serializeNode } from './serializeNode';\nimport { serializeAttribute } from './serializeAttribute';\nimport { getElementInputValue } from './serializationUtils';\nexport function serializeMutations(timestamp, mutations, emitRecord, emitStats, scope) {\n serializeInTransaction(2 /* SerializationKind.INCREMENTAL_SNAPSHOT */, emitRecord, emitStats, scope, (transaction) => processMutations(timestamp, mutations, transaction));\n}\nfunction processMutations(timestamp, mutations, transaction) {\n const nodePrivacyLevelCache = new Map();\n mutations\n .filter((mutation) => mutation.type === 'childList')\n .forEach((mutation) => {\n mutation.removedNodes.forEach((removedNode) => {\n traverseRemovedShadowDom(removedNode, transaction.scope.shadowRootsController.removeShadowRoot);\n });\n });\n // Discard any mutation with a 'target' node that:\n // * isn't injected in the current document or isn't known/serialized yet: those nodes are likely\n // part of a mutation occurring in a parent Node\n // * should be hidden or ignored\n const filteredMutations = mutations.filter((mutation) => mutation.target.isConnected &&\n idsAreAssignedForNodeAndAncestors(mutation.target, transaction.scope.nodeIds) &&\n getNodePrivacyLevel(mutation.target, transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache) !== NodePrivacyLevel.HIDDEN);\n const { adds, removes, hasBeenSerialized } = processChildListMutations(filteredMutations.filter((mutation) => mutation.type === 'childList'), nodePrivacyLevelCache, transaction);\n const texts = processCharacterDataMutations(filteredMutations.filter((mutation) => mutation.type === 'characterData' && !hasBeenSerialized(mutation.target)), nodePrivacyLevelCache, transaction);\n const attributes = processAttributesMutations(filteredMutations.filter((mutation) => mutation.type === 'attributes' && !hasBeenSerialized(mutation.target)), nodePrivacyLevelCache, transaction);\n if (!texts.length && !attributes.length && !removes.length && !adds.length) {\n return;\n }\n const record = assembleIncrementalSnapshot(IncrementalSource.Mutation, {\n adds,\n removes,\n texts,\n attributes,\n }, timestamp);\n transaction.add(record);\n}\nfunction processChildListMutations(mutations, nodePrivacyLevelCache, transaction) {\n // First, we iterate over mutations to collect:\n //\n // * nodes that have been added in the document and not removed by a subsequent mutation\n // * nodes that have been removed from the document but were not added in a previous mutation\n //\n // For this second category, we also collect their previous parent (mutation.target) because we'll\n // need it to emit a 'remove' mutation.\n //\n // Those two categories may overlap: if a node moved from a position to another, it is reported as\n // two mutation records, one with a \"removedNodes\" and the other with \"addedNodes\". In this case,\n // the node will be in both sets.\n const addedAndMovedNodes = new Set();\n const removedNodes = new Map();\n for (const mutation of mutations) {\n mutation.addedNodes.forEach((node) => {\n addedAndMovedNodes.add(node);\n });\n mutation.removedNodes.forEach((node) => {\n if (!addedAndMovedNodes.has(node)) {\n removedNodes.set(node, mutation.target);\n }\n addedAndMovedNodes.delete(node);\n });\n }\n // Then, we sort nodes that are still in the document by topological order, for two reasons:\n //\n // * We will serialize each added nodes with their descendants. We don't want to serialize a node\n // twice, so we need to iterate over the parent nodes first and skip any node that is contained in\n // a precedent node.\n //\n // * To emit \"add\" mutations, we need references to the parent and potential next sibling of each\n // added node. So we need to iterate over the parent nodes first, and when multiple nodes are\n // siblings, we want to iterate from last to first. This will ensure that any \"next\" node is\n // already serialized and have an id.\n const sortedAddedAndMovedNodes = Array.from(addedAndMovedNodes);\n sortAddedAndMovedNodes(sortedAddedAndMovedNodes);\n // Then, we iterate over our sorted node sets to emit mutations. We collect the newly serialized\n // node ids in a set to be able to skip subsequent related mutations.\n transaction.serializedNodeIds = new Set();\n const addedNodeMutations = [];\n for (const node of sortedAddedAndMovedNodes) {\n if (hasBeenSerialized(node)) {\n continue;\n }\n const parentNodePrivacyLevel = getNodePrivacyLevel(node.parentNode, transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n continue;\n }\n const serializedNode = serializeNode(node, parentNodePrivacyLevel, transaction);\n if (!serializedNode) {\n continue;\n }\n const parentNode = getParentNode(node);\n addedNodeMutations.push({\n nextId: getNextSibling(node),\n parentId: transaction.scope.nodeIds.get(parentNode),\n node: serializedNode,\n });\n }\n // Finally, we emit remove mutations.\n const removedNodeMutations = [];\n removedNodes.forEach((parent, node) => {\n const parentId = transaction.scope.nodeIds.get(parent);\n const id = transaction.scope.nodeIds.get(node);\n if (parentId !== undefined && id !== undefined) {\n removedNodeMutations.push({ parentId, id });\n }\n });\n return { adds: addedNodeMutations, removes: removedNodeMutations, hasBeenSerialized };\n function hasBeenSerialized(node) {\n var _a;\n const id = transaction.scope.nodeIds.get(node);\n return id !== undefined && ((_a = transaction.serializedNodeIds) === null || _a === void 0 ? void 0 : _a.has(id));\n }\n function getNextSibling(node) {\n let nextSibling = node.nextSibling;\n while (nextSibling) {\n const id = transaction.scope.nodeIds.get(nextSibling);\n if (id !== undefined) {\n return id;\n }\n nextSibling = nextSibling.nextSibling;\n }\n return null;\n }\n}\nfunction processCharacterDataMutations(mutations, nodePrivacyLevelCache, transaction) {\n var _a;\n const textMutations = [];\n // Deduplicate mutations based on their target node\n const handledNodes = new Set();\n const filteredMutations = mutations.filter((mutation) => {\n if (handledNodes.has(mutation.target)) {\n return false;\n }\n handledNodes.add(mutation.target);\n return true;\n });\n // Emit mutations\n for (const mutation of filteredMutations) {\n const value = mutation.target.textContent;\n if (value === mutation.oldValue) {\n continue;\n }\n const id = transaction.scope.nodeIds.get(mutation.target);\n if (id === undefined) {\n continue;\n }\n const parentNodePrivacyLevel = getNodePrivacyLevel(getParentNode(mutation.target), transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n if (parentNodePrivacyLevel === NodePrivacyLevel.HIDDEN || parentNodePrivacyLevel === NodePrivacyLevel.IGNORE) {\n continue;\n }\n textMutations.push({\n id,\n value: (_a = getTextContent(mutation.target, parentNodePrivacyLevel)) !== null && _a !== void 0 ? _a : null,\n });\n }\n return textMutations;\n}\nfunction processAttributesMutations(mutations, nodePrivacyLevelCache, transaction) {\n const attributeMutations = [];\n // Deduplicate mutations based on their target node and changed attribute\n const handledElements = new Map();\n const filteredMutations = mutations.filter((mutation) => {\n const handledAttributes = handledElements.get(mutation.target);\n if (handledAttributes && handledAttributes.has(mutation.attributeName)) {\n return false;\n }\n if (!handledAttributes) {\n handledElements.set(mutation.target, new Set([mutation.attributeName]));\n }\n else {\n handledAttributes.add(mutation.attributeName);\n }\n return true;\n });\n // Emit mutations\n const emittedMutations = new Map();\n for (const mutation of filteredMutations) {\n const uncensoredValue = mutation.target.getAttribute(mutation.attributeName);\n if (uncensoredValue === mutation.oldValue) {\n continue;\n }\n const id = transaction.scope.nodeIds.get(mutation.target);\n if (id === undefined) {\n continue;\n }\n const privacyLevel = getNodePrivacyLevel(mutation.target, transaction.scope.configuration.defaultPrivacyLevel, nodePrivacyLevelCache);\n const attributeValue = serializeAttribute(mutation.target, privacyLevel, mutation.attributeName, transaction.scope.configuration);\n let transformedValue;\n if (mutation.attributeName === 'value') {\n const inputValue = getElementInputValue(mutation.target, privacyLevel);\n if (inputValue === undefined) {\n continue;\n }\n transformedValue = inputValue;\n }\n else if (typeof attributeValue === 'string') {\n transformedValue = attributeValue;\n }\n else {\n transformedValue = null;\n }\n let emittedMutation = emittedMutations.get(mutation.target);\n if (!emittedMutation) {\n emittedMutation = { id, attributes: {} };\n attributeMutations.push(emittedMutation);\n emittedMutations.set(mutation.target, emittedMutation);\n }\n emittedMutation.attributes[mutation.attributeName] = transformedValue;\n }\n return attributeMutations;\n}\nexport function sortAddedAndMovedNodes(nodes) {\n nodes.sort((a, b) => {\n const position = a.compareDocumentPosition(b);\n /* eslint-disable no-bitwise */\n if (position & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return -1;\n }\n else if (position & Node.DOCUMENT_POSITION_CONTAINS) {\n return 1;\n }\n else if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return 1;\n }\n else if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return -1;\n }\n /* eslint-enable no-bitwise */\n return 0;\n });\n}\nfunction traverseRemovedShadowDom(removedNode, shadowDomRemovedCallback) {\n if (isNodeShadowHost(removedNode)) {\n shadowDomRemovedCallback(removedNode.shadowRoot);\n }\n forEachChildNodes(removedNode, (childNode) => traverseRemovedShadowDom(childNode, shadowDomRemovedCallback));\n}\nexport function idsAreAssignedForNodeAndAncestors(node, nodeIds) {\n let current = node;\n while (current) {\n if (nodeIds.get(current) === undefined && !isNodeShadowRoot(current)) {\n return false;\n }\n current = getParentNode(current);\n }\n return true;\n}\n//# sourceMappingURL=serializeMutations.js.map","/**\n * Browsers have not standardized various dimension properties. Mobile devices typically report\n * dimensions in reference to the visual viewport, while desktop uses the layout viewport. For example,\n * Mobile Chrome will change innerWidth when a pinch zoom takes place, while Chrome Desktop (mac) will not.\n *\n * With the new Viewport API, we now calculate and normalize dimension properties to the layout viewport.\n * If the VisualViewport API is not supported by a browser, it isn't reasonably possible to detect or normalize\n * which viewport is being measured. Therefore these exported functions will fallback to assuming that the layout\n * viewport is being measured by the browser\n */\n// Scrollbar widths vary across properties on different devices and browsers\nconst TOLERANCE = 25;\n/**\n * Use the Visual Viewport API's properties to measure scrollX/Y in reference to the layout viewport\n * in order to determine if window.scrollX/Y is measuring the layout or visual viewport.\n * This finding corresponds to which viewport mouseEvent.clientX/Y and window.innerWidth/Height measures.\n */\nfunction isVisualViewportFactoredIn(visualViewport) {\n return (Math.abs(visualViewport.pageTop - visualViewport.offsetTop - window.scrollY) > TOLERANCE ||\n Math.abs(visualViewport.pageLeft - visualViewport.offsetLeft - window.scrollX) > TOLERANCE);\n}\nexport const convertMouseEventToLayoutCoordinates = (clientX, clientY) => {\n const visualViewport = window.visualViewport;\n const normalized = {\n layoutViewportX: clientX,\n layoutViewportY: clientY,\n visualViewportX: clientX,\n visualViewportY: clientY,\n };\n if (!visualViewport) {\n // On old browsers, we cannot normalize, so fallback to clientX/Y\n return normalized;\n }\n else if (isVisualViewportFactoredIn(visualViewport)) {\n // Typically Mobile Devices\n normalized.layoutViewportX = Math.round(clientX + visualViewport.offsetLeft);\n normalized.layoutViewportY = Math.round(clientY + visualViewport.offsetTop);\n }\n else {\n // Typically Desktop Devices\n normalized.visualViewportX = Math.round(clientX - visualViewport.offsetLeft);\n normalized.visualViewportY = Math.round(clientY - visualViewport.offsetTop);\n }\n return normalized;\n};\nexport const getVisualViewport = (visualViewport) => ({\n scale: visualViewport.scale,\n offsetLeft: visualViewport.offsetLeft,\n offsetTop: visualViewport.offsetTop,\n pageLeft: visualViewport.pageLeft,\n pageTop: visualViewport.pageTop,\n height: visualViewport.height,\n width: visualViewport.width,\n});\n//# sourceMappingURL=viewports.js.map","import { getViewportDimension } from '@datadog/browser-rum-core';\nimport { ExperimentalFeature, isExperimentalFeatureEnabled, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../types';\nimport { serializeFullSnapshotAsChange, serializeFullSnapshot } from './serialization';\nimport { getVisualViewport } from './viewports';\nexport function startFullSnapshots(lifeCycle, emitRecord, emitStats, flushMutations, scope, serialize = defaultSerializeFullSnapshotCallback()) {\n takeFullSnapshot(timeStampNow(), 0 /* SerializationKind.INITIAL_FULL_SNAPSHOT */, emitRecord, emitStats, scope, serialize);\n const { unsubscribe } = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, (view) => {\n flushMutations();\n takeFullSnapshot(view.startClocks.timeStamp, 1 /* SerializationKind.SUBSEQUENT_FULL_SNAPSHOT */, emitRecord, emitStats, scope, serialize);\n });\n return {\n stop: unsubscribe,\n };\n}\nexport function takeFullSnapshot(timestamp, kind, emitRecord, emitStats, scope, serialize = defaultSerializeFullSnapshotCallback()) {\n const { width, height } = getViewportDimension();\n emitRecord({\n data: {\n height,\n href: window.location.href,\n width,\n },\n type: RecordType.Meta,\n timestamp,\n });\n emitRecord({\n data: {\n has_focus: document.hasFocus(),\n },\n type: RecordType.Focus,\n timestamp,\n });\n serialize(timestamp, kind, document, emitRecord, emitStats, scope);\n if (window.visualViewport) {\n emitRecord({\n data: getVisualViewport(window.visualViewport),\n type: RecordType.VisualViewport,\n timestamp,\n });\n }\n}\nfunction defaultSerializeFullSnapshotCallback() {\n return isExperimentalFeatureEnabled(ExperimentalFeature.USE_CHANGE_RECORDS)\n ? serializeFullSnapshotAsChange\n : serializeFullSnapshot;\n}\n//# sourceMappingURL=startFullSnapshots.js.map","export function createEventIds() {\n return createWeakIdMap(1 /* EventIdConstants.FIRST_ID */);\n}\nexport function createNodeIds() {\n return createWeakIdMap(0 /* NodeIdConstants.FIRST_ID */);\n}\nexport function createStringIds() {\n return createIdMap(0 /* StringIdConstants.FIRST_ID */);\n}\nexport function createStyleSheetIds() {\n return createWeakIdMap(0 /* StyleSheetIdConstants.FIRST_ID */);\n}\nfunction createIdMap(firstId) {\n return createItemIds(() => new Map(), firstId);\n}\nfunction createWeakIdMap(firstId) {\n return createItemIds(() => new WeakMap(), firstId);\n}\nfunction createItemIds(createMap, firstId) {\n let map = createMap();\n let nextId = firstId;\n const get = (object) => map.get(object);\n return {\n clear() {\n if (nextId === firstId) {\n return;\n }\n map = createMap();\n nextId = firstId;\n },\n delete(object) {\n map.delete(object);\n },\n get,\n getOrInsert(object) {\n // Try to reuse any existing id.\n let id = get(object);\n if (id === undefined) {\n id = nextId++;\n map.set(object, id);\n }\n return id;\n },\n get nextId() {\n return nextId;\n },\n get size() {\n return nextId - firstId;\n },\n };\n}\n//# sourceMappingURL=itemIds.js.map","import { createEventIds, createNodeIds, createStringIds, createStyleSheetIds } from './itemIds';\nexport function createRecordingScope(configuration, elementsScrollPositions, shadowRootsController) {\n const eventIds = createEventIds();\n const nodeIds = createNodeIds();\n const stringIds = createStringIds();\n const styleSheetIds = createStyleSheetIds();\n const scope = {\n resetIds() {\n scope.eventIds.clear();\n scope.nodeIds.clear();\n scope.stringIds.clear();\n scope.styleSheetIds.clear();\n },\n configuration,\n elementsScrollPositions,\n eventIds,\n nodeIds,\n shadowRootsController,\n stringIds,\n styleSheetIds,\n };\n return scope;\n}\n//# sourceMappingURL=recordingScope.js.map","export function createElementsScrollPositions() {\n const scrollPositionsByElement = new WeakMap();\n return {\n set(element, scrollPositions) {\n if (element === document && !document.scrollingElement) {\n // cf https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement,\n // in some cases scrolling elements can not be defined, we don't support those for now\n return;\n }\n scrollPositionsByElement.set(element === document ? document.scrollingElement : element, scrollPositions);\n },\n get(element) {\n return scrollPositionsByElement.get(element);\n },\n has(element) {\n return scrollPositionsByElement.has(element);\n },\n };\n}\n//# sourceMappingURL=elementsScrollPositions.js.map","import { isNodeShadowHost } from '@datadog/browser-rum-core';\nexport function isTouchEvent(event) {\n return Boolean(event.changedTouches);\n}\nexport function getEventTarget(event) {\n if (event.composed === true && isNodeShadowHost(event.target)) {\n return event.composedPath()[0];\n }\n return event.target;\n}\n//# sourceMappingURL=eventsUtils.js.map","import { addEventListeners, throttle } from '@datadog/browser-core';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget, isTouchEvent } from '../eventsUtils';\nimport { convertMouseEventToLayoutCoordinates } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nconst MOUSE_MOVE_OBSERVER_THRESHOLD = 50;\nexport function trackMove(emitRecord, scope) {\n const { throttled: updatePosition, cancel: cancelThrottle } = throttle((event) => {\n const target = getEventTarget(event);\n const id = scope.nodeIds.get(target);\n if (id === undefined) {\n return;\n }\n const coordinates = tryToComputeCoordinates(event);\n if (!coordinates) {\n return;\n }\n const position = {\n id,\n timeOffset: 0,\n x: coordinates.x,\n y: coordinates.y,\n };\n emitRecord(assembleIncrementalSnapshot(isTouchEvent(event) ? IncrementalSource.TouchMove : IncrementalSource.MouseMove, { positions: [position] }));\n }, MOUSE_MOVE_OBSERVER_THRESHOLD, {\n trailing: false,\n });\n const { stop: removeListener } = addEventListeners(scope.configuration, document, [\"mousemove\" /* DOM_EVENT.MOUSE_MOVE */, \"touchmove\" /* DOM_EVENT.TOUCH_MOVE */], updatePosition, {\n capture: true,\n passive: true,\n });\n return {\n stop: () => {\n removeListener();\n cancelThrottle();\n },\n };\n}\nexport function tryToComputeCoordinates(event) {\n let { clientX: x, clientY: y } = isTouchEvent(event) ? event.changedTouches[0] : event;\n if (window.visualViewport) {\n const { visualViewportX, visualViewportY } = convertMouseEventToLayoutCoordinates(x, y);\n x = visualViewportX;\n y = visualViewportY;\n }\n if (!Number.isFinite(x) || !Number.isFinite(y)) {\n return undefined;\n }\n return { x, y };\n}\n//# sourceMappingURL=trackMove.js.map","import { addEventListeners } from '@datadog/browser-core';\nimport { getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MouseInteractionType } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nimport { getEventTarget } from '../eventsUtils';\nimport { tryToComputeCoordinates } from './trackMove';\nconst eventTypeToMouseInteraction = {\n // Listen for pointerup DOM events instead of mouseup for MouseInteraction/MouseUp records. This\n // allows to reference such records from Frustration records.\n //\n // In the context of supporting Mobile Session Replay, we introduced `PointerInteraction` records\n // used by the Mobile SDKs in place of `MouseInteraction`. In the future, we should replace\n // `MouseInteraction` by `PointerInteraction` in the Browser SDK so we have an uniform way to\n // convey such interaction. This would cleanly solve the issue since we would have\n // `PointerInteraction/Up` records that we could reference from `Frustration` records.\n [\"pointerup\" /* DOM_EVENT.POINTER_UP */]: MouseInteractionType.MouseUp,\n [\"mousedown\" /* DOM_EVENT.MOUSE_DOWN */]: MouseInteractionType.MouseDown,\n [\"click\" /* DOM_EVENT.CLICK */]: MouseInteractionType.Click,\n [\"contextmenu\" /* DOM_EVENT.CONTEXT_MENU */]: MouseInteractionType.ContextMenu,\n [\"dblclick\" /* DOM_EVENT.DBL_CLICK */]: MouseInteractionType.DblClick,\n [\"focus\" /* DOM_EVENT.FOCUS */]: MouseInteractionType.Focus,\n [\"blur\" /* DOM_EVENT.BLUR */]: MouseInteractionType.Blur,\n [\"touchstart\" /* DOM_EVENT.TOUCH_START */]: MouseInteractionType.TouchStart,\n [\"touchend\" /* DOM_EVENT.TOUCH_END */]: MouseInteractionType.TouchEnd,\n};\nexport function trackMouseInteraction(emitRecord, scope) {\n const handler = (event) => {\n const target = getEventTarget(event);\n const id = scope.nodeIds.get(target);\n if (id === undefined ||\n getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN) {\n return;\n }\n const type = eventTypeToMouseInteraction[event.type];\n let interaction;\n if (type !== MouseInteractionType.Blur && type !== MouseInteractionType.Focus) {\n const coordinates = tryToComputeCoordinates(event);\n if (!coordinates) {\n return;\n }\n interaction = { id, type, x: coordinates.x, y: coordinates.y };\n }\n else {\n interaction = { id, type };\n }\n emitRecord({\n id: scope.eventIds.getOrInsert(event),\n ...assembleIncrementalSnapshot(IncrementalSource.MouseInteraction, interaction),\n });\n };\n return addEventListeners(scope.configuration, document, Object.keys(eventTypeToMouseInteraction), handler, {\n capture: true,\n passive: true,\n });\n}\n//# sourceMappingURL=trackMouseInteraction.js.map","import { throttle, addEventListener } from '@datadog/browser-core';\nimport { getScrollX, getScrollY, getNodePrivacyLevel, NodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { getEventTarget } from '../eventsUtils';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nconst SCROLL_OBSERVER_THRESHOLD = 100;\nexport function trackScroll(target, emitRecord, scope) {\n const { throttled: updatePosition, cancel: cancelThrottle } = throttle((event) => {\n const target = getEventTarget(event);\n if (!target) {\n return;\n }\n const id = scope.nodeIds.get(target);\n if (id === undefined ||\n getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN) {\n return;\n }\n const scrollPositions = target === document\n ? {\n scrollTop: getScrollY(),\n scrollLeft: getScrollX(),\n }\n : {\n scrollTop: Math.round(target.scrollTop),\n scrollLeft: Math.round(target.scrollLeft),\n };\n scope.elementsScrollPositions.set(target, scrollPositions);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.Scroll, {\n id,\n x: scrollPositions.scrollLeft,\n y: scrollPositions.scrollTop,\n }));\n }, SCROLL_OBSERVER_THRESHOLD);\n const { stop: removeListener } = addEventListener(scope.configuration, target, \"scroll\" /* DOM_EVENT.SCROLL */, updatePosition, {\n capture: true,\n passive: true,\n });\n return {\n stop: () => {\n removeListener();\n cancelThrottle();\n },\n };\n}\n//# sourceMappingURL=trackScroll.js.map","import { throttle, addEventListeners, timeStampNow, noop } from '@datadog/browser-core';\nimport { initViewportObservable } from '@datadog/browser-rum-core';\nimport { IncrementalSource, RecordType } from '../../../types';\nimport { getVisualViewport } from '../viewports';\nimport { assembleIncrementalSnapshot } from '../assembly';\nconst VISUAL_VIEWPORT_OBSERVER_THRESHOLD = 200;\nexport function trackViewportResize(emitRecord, scope) {\n const viewportResizeSubscription = initViewportObservable(scope.configuration).subscribe((data) => {\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.ViewportResize, data));\n });\n return {\n stop: () => {\n viewportResizeSubscription.unsubscribe();\n },\n };\n}\nexport function trackVisualViewportResize(emitRecord, scope) {\n const visualViewport = window.visualViewport;\n if (!visualViewport) {\n return { stop: noop };\n }\n const { throttled: updateDimension, cancel: cancelThrottle } = throttle(() => {\n emitRecord({\n data: getVisualViewport(visualViewport),\n type: RecordType.VisualViewport,\n timestamp: timeStampNow(),\n });\n }, VISUAL_VIEWPORT_OBSERVER_THRESHOLD, {\n trailing: false,\n });\n const { stop: removeListener } = addEventListeners(scope.configuration, visualViewport, [\"resize\" /* DOM_EVENT.RESIZE */, \"scroll\" /* DOM_EVENT.SCROLL */], updateDimension, {\n capture: true,\n passive: true,\n });\n return {\n stop: () => {\n removeListener();\n cancelThrottle();\n },\n };\n}\n//# sourceMappingURL=trackViewportResize.js.map","import { addEventListeners } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel } from '@datadog/browser-rum-core';\nimport { IncrementalSource, MediaInteractionType } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackMediaInteraction(emitRecord, scope) {\n return addEventListeners(scope.configuration, document, [\"play\" /* DOM_EVENT.PLAY */, \"pause\" /* DOM_EVENT.PAUSE */], (event) => {\n const target = getEventTarget(event);\n if (!target) {\n return;\n }\n const id = scope.nodeIds.get(target);\n if (id === undefined ||\n getNodePrivacyLevel(target, scope.configuration.defaultPrivacyLevel) === NodePrivacyLevel.HIDDEN) {\n return;\n }\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.MediaInteraction, {\n id,\n type: event.type === \"play\" /* DOM_EVENT.PLAY */ ? MediaInteractionType.Play : MediaInteractionType.Pause,\n }));\n }, {\n capture: true,\n passive: true,\n });\n}\n//# sourceMappingURL=trackMediaInteraction.js.map","import { instrumentMethod } from '@datadog/browser-core';\nimport { IncrementalSource } from '../../../types';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackStyleSheet(emitRecord, scope) {\n function checkStyleSheetAndCallback(styleSheet, callback) {\n if (!styleSheet || !styleSheet.ownerNode) {\n return;\n }\n const id = scope.nodeIds.get(styleSheet.ownerNode);\n if (id === undefined) {\n return;\n }\n callback(id);\n }\n const instrumentationStoppers = [\n instrumentMethod(CSSStyleSheet.prototype, 'insertRule', ({ target: styleSheet, parameters: [rule, index] }) => {\n checkStyleSheetAndCallback(styleSheet, (id) => emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n adds: [{ rule, index }],\n })));\n }),\n instrumentMethod(CSSStyleSheet.prototype, 'deleteRule', ({ target: styleSheet, parameters: [index] }) => {\n checkStyleSheetAndCallback(styleSheet, (id) => emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n removes: [{ index }],\n })));\n }),\n ];\n if (typeof CSSGroupingRule !== 'undefined') {\n instrumentGroupingCSSRuleClass(CSSGroupingRule);\n }\n else {\n instrumentGroupingCSSRuleClass(CSSMediaRule);\n instrumentGroupingCSSRuleClass(CSSSupportsRule);\n }\n function instrumentGroupingCSSRuleClass(cls) {\n instrumentationStoppers.push(instrumentMethod(cls.prototype, 'insertRule', ({ target: styleSheet, parameters: [rule, index] }) => {\n checkStyleSheetAndCallback(styleSheet.parentStyleSheet, (id) => {\n const path = getPathToNestedCSSRule(styleSheet);\n if (path) {\n path.push(index || 0);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n adds: [{ rule, index: path }],\n }));\n }\n });\n }), instrumentMethod(cls.prototype, 'deleteRule', ({ target: styleSheet, parameters: [index] }) => {\n checkStyleSheetAndCallback(styleSheet.parentStyleSheet, (id) => {\n const path = getPathToNestedCSSRule(styleSheet);\n if (path) {\n path.push(index);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.StyleSheetRule, {\n id,\n removes: [{ index: path }],\n }));\n }\n });\n }));\n }\n return {\n stop: () => {\n instrumentationStoppers.forEach((stopper) => stopper.stop());\n },\n };\n}\nexport function getPathToNestedCSSRule(rule) {\n const path = [];\n let currentRule = rule;\n while (currentRule.parentRule) {\n const rules = Array.from(currentRule.parentRule.cssRules);\n const index = rules.indexOf(currentRule);\n path.unshift(index);\n currentRule = currentRule.parentRule;\n }\n // A rule may not be attached to a stylesheet\n if (!currentRule.parentStyleSheet) {\n return;\n }\n const rules = Array.from(currentRule.parentStyleSheet.cssRules);\n const index = rules.indexOf(currentRule);\n path.unshift(index);\n return path;\n}\n//# sourceMappingURL=trackStyleSheet.js.map","import { addEventListeners, timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackFocus(emitRecord, scope) {\n return addEventListeners(scope.configuration, window, [\"focus\" /* DOM_EVENT.FOCUS */, \"blur\" /* DOM_EVENT.BLUR */], () => {\n emitRecord({\n data: { has_focus: document.hasFocus() },\n type: RecordType.Focus,\n timestamp: timeStampNow(),\n });\n });\n}\n//# sourceMappingURL=trackFocus.js.map","import { ActionType, RumEventType } from '@datadog/browser-rum-core';\nimport { RecordType } from '../../../types';\nexport function trackFrustration(lifeCycle, emitRecord, scope) {\n const frustrationSubscription = lifeCycle.subscribe(12 /* LifeCycleEventType.RAW_RUM_EVENT_COLLECTED */, (data) => {\n var _a, _b;\n if (data.rawRumEvent.type === RumEventType.ACTION &&\n data.rawRumEvent.action.type === ActionType.CLICK &&\n ((_b = (_a = data.rawRumEvent.action.frustration) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.length) &&\n 'events' in data.domainContext &&\n data.domainContext.events &&\n data.domainContext.events.length) {\n emitRecord({\n timestamp: data.rawRumEvent.date,\n type: RecordType.FrustrationRecord,\n data: {\n frustrationTypes: data.rawRumEvent.action.frustration.type,\n recordIds: data.domainContext.events.map((e) => scope.eventIds.getOrInsert(e)),\n },\n });\n }\n });\n return {\n stop: () => {\n frustrationSubscription.unsubscribe();\n },\n };\n}\n//# sourceMappingURL=trackFrustration.js.map","import { timeStampNow } from '@datadog/browser-core';\nimport { RecordType } from '../../../types';\nexport function trackViewEnd(lifeCycle, emitRecord, flushMutations) {\n const viewEndSubscription = lifeCycle.subscribe(5 /* LifeCycleEventType.VIEW_ENDED */, () => {\n flushMutations();\n emitRecord({\n timestamp: timeStampNow(),\n type: RecordType.ViewEnd,\n });\n });\n return {\n stop: () => {\n viewEndSubscription.unsubscribe();\n },\n };\n}\n//# sourceMappingURL=trackViewEnd.js.map","import { instrumentSetter, addEventListeners, noop } from '@datadog/browser-core';\nimport { NodePrivacyLevel, getNodePrivacyLevel, shouldMaskNode } from '@datadog/browser-rum-core';\nimport { IncrementalSource } from '../../../types';\nimport { getEventTarget } from '../eventsUtils';\nimport { getElementInputValue } from '../serialization';\nimport { assembleIncrementalSnapshot } from '../assembly';\nexport function trackInput(target, emitRecord, scope) {\n const defaultPrivacyLevel = scope.configuration.defaultPrivacyLevel;\n const lastInputStateMap = new WeakMap();\n const isShadowRoot = target !== document;\n const { stop: stopEventListeners } = addEventListeners(scope.configuration, target, \n // The 'input' event bubbles across shadow roots, so we don't have to listen for it on shadow\n // roots since it will be handled by the event listener that we did add to the document. Only\n // the 'change' event is blocked and needs to be handled on shadow roots.\n isShadowRoot ? [\"change\" /* DOM_EVENT.CHANGE */] : [\"input\" /* DOM_EVENT.INPUT */, \"change\" /* DOM_EVENT.CHANGE */], (event) => {\n const target = getEventTarget(event);\n if (target instanceof HTMLInputElement ||\n target instanceof HTMLTextAreaElement ||\n target instanceof HTMLSelectElement) {\n onElementChange(target);\n }\n }, {\n capture: true,\n passive: true,\n });\n let stopPropertySetterInstrumentation;\n if (!isShadowRoot) {\n const instrumentationStoppers = [\n instrumentSetter(HTMLInputElement.prototype, 'value', onElementChange),\n instrumentSetter(HTMLInputElement.prototype, 'checked', onElementChange),\n instrumentSetter(HTMLSelectElement.prototype, 'value', onElementChange),\n instrumentSetter(HTMLTextAreaElement.prototype, 'value', onElementChange),\n instrumentSetter(HTMLSelectElement.prototype, 'selectedIndex', onElementChange),\n ];\n stopPropertySetterInstrumentation = () => {\n instrumentationStoppers.forEach((stopper) => stopper.stop());\n };\n }\n else {\n stopPropertySetterInstrumentation = noop;\n }\n return {\n stop: () => {\n stopPropertySetterInstrumentation();\n stopEventListeners();\n },\n };\n function onElementChange(target) {\n const nodePrivacyLevel = getNodePrivacyLevel(target, defaultPrivacyLevel);\n if (nodePrivacyLevel === NodePrivacyLevel.HIDDEN) {\n return;\n }\n const type = target.type;\n let inputState;\n if (type === 'radio' || type === 'checkbox') {\n if (shouldMaskNode(target, nodePrivacyLevel)) {\n return;\n }\n inputState = { isChecked: target.checked };\n }\n else {\n const value = getElementInputValue(target, nodePrivacyLevel);\n if (value === undefined) {\n return;\n }\n inputState = { text: value };\n }\n // Can be multiple changes on the same node within the same batched mutation observation.\n createRecordIfStateChanged(target, inputState);\n // If a radio was checked, other radios with the same name attribute will be unchecked.\n const name = target.name;\n if (type === 'radio' && name && target.checked) {\n document.querySelectorAll(`input[type=\"radio\"][name=\"${CSS.escape(name)}\"]`).forEach((el) => {\n if (el !== target) {\n // TODO: Consider the privacy implications for various differing input privacy levels\n createRecordIfStateChanged(el, { isChecked: false });\n }\n });\n }\n }\n /**\n * There can be multiple changes on the same node within the same batched mutation observation.\n */\n function createRecordIfStateChanged(target, inputState) {\n const id = scope.nodeIds.get(target);\n if (id === undefined) {\n return;\n }\n const lastInputState = lastInputStateMap.get(target);\n if (!lastInputState ||\n lastInputState.text !== inputState.text ||\n lastInputState.isChecked !== inputState.isChecked) {\n lastInputStateMap.set(target, inputState);\n emitRecord(assembleIncrementalSnapshot(IncrementalSource.Input, {\n id,\n ...inputState,\n }));\n }\n }\n}\n//# sourceMappingURL=trackInput.js.map","import { noop, throttle, requestIdleCallback } from '@datadog/browser-core';\n/**\n * Maximum duration to wait before processing mutations. If the browser is idle, mutations will be\n * processed more quickly. If the browser is busy executing small tasks (ex: rendering frames), the\n * mutations will wait MUTATION_PROCESS_MAX_DELAY milliseconds before being processed. If the\n * browser is busy executing a longer task, mutations will be processed after this task.\n */\nconst MUTATION_PROCESS_MAX_DELAY = 100;\n/**\n * Minimum duration to wait before processing mutations. This is used to batch mutations together\n * and be able to deduplicate them to save processing time and bandwidth.\n * 16ms is the duration of a frame at 60fps that ensure fluid UI.\n */\nexport const MUTATION_PROCESS_MIN_DELAY = 16;\nexport function createMutationBatch(processMutationBatch) {\n let cancelScheduledFlush = noop;\n let pendingMutations = [];\n function flush() {\n cancelScheduledFlush();\n processMutationBatch(pendingMutations);\n pendingMutations = [];\n }\n const { throttled: throttledFlush, cancel: cancelThrottle } = throttle(flush, MUTATION_PROCESS_MIN_DELAY, {\n leading: false,\n });\n return {\n addMutations: (mutations) => {\n if (pendingMutations.length === 0) {\n cancelScheduledFlush = requestIdleCallback(throttledFlush, { timeout: MUTATION_PROCESS_MAX_DELAY });\n }\n pendingMutations.push(...mutations);\n },\n flush,\n stop: () => {\n cancelScheduledFlush();\n cancelThrottle();\n },\n };\n}\n//# sourceMappingURL=mutationBatch.js.map","import { monitor, noop, timeStampNow } from '@datadog/browser-core';\nimport { getMutationObserverConstructor } from '@datadog/browser-rum-core';\nimport { createMutationBatch } from '../mutationBatch';\nimport { serializeMutations } from '../serialization';\n/**\n * Buffers and aggregate mutations generated by a MutationObserver into MutationPayload\n */\nexport function trackMutation(target, emitRecord, emitStats, scope, serialize = defaultSerializeMutationsCallback()) {\n const MutationObserver = getMutationObserverConstructor();\n if (!MutationObserver) {\n return { stop: noop, flush: noop };\n }\n const mutationBatch = createMutationBatch((mutations) => {\n serialize(timeStampNow(), mutations.concat(observer.takeRecords()), emitRecord, emitStats, scope);\n });\n const observer = new MutationObserver(monitor(mutationBatch.addMutations));\n observer.observe(target, {\n attributeOldValue: true,\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n });\n return {\n stop: () => {\n observer.disconnect();\n mutationBatch.stop();\n },\n flush: () => {\n mutationBatch.flush();\n },\n };\n}\nfunction defaultSerializeMutationsCallback() {\n return serializeMutations;\n}\n//# sourceMappingURL=trackMutation.js.map","import { trackInput, trackMutation, trackScroll } from './trackers';\nexport const initShadowRootsController = (emitRecord, emitStats) => {\n const controllerByShadowRoot = new Map();\n const shadowRootsController = {\n addShadowRoot: (shadowRoot, scope) => {\n if (controllerByShadowRoot.has(shadowRoot)) {\n return;\n }\n const mutationTracker = trackMutation(shadowRoot, emitRecord, emitStats, scope);\n // The change event does not bubble up across the shadow root, we have to listen on the shadow root\n const inputTracker = trackInput(shadowRoot, emitRecord, scope);\n // The scroll event does not bubble up across the shadow root, we have to listen on the shadow root\n const scrollTracker = trackScroll(shadowRoot, emitRecord, scope);\n controllerByShadowRoot.set(shadowRoot, {\n flush: () => mutationTracker.flush(),\n stop: () => {\n mutationTracker.stop();\n inputTracker.stop();\n scrollTracker.stop();\n },\n });\n },\n removeShadowRoot: (shadowRoot) => {\n const entry = controllerByShadowRoot.get(shadowRoot);\n if (!entry) {\n // unidentified root cause: observed in some cases with shadow DOM added by browser extensions\n return;\n }\n entry.stop();\n controllerByShadowRoot.delete(shadowRoot);\n },\n stop: () => {\n controllerByShadowRoot.forEach(({ stop }) => stop());\n },\n flush: () => {\n controllerByShadowRoot.forEach(({ flush }) => flush());\n },\n };\n return shadowRootsController;\n};\n//# sourceMappingURL=shadowRootsController.js.map","import { sendToExtension } from '@datadog/browser-core';\nimport * as replayStats from '../replayStats';\nimport { trackFocus, trackFrustration, trackInput, trackMediaInteraction, trackMouseInteraction, trackMove, trackMutation, trackScroll, trackStyleSheet, trackViewEnd, trackViewportResize, trackVisualViewportResize, } from './trackers';\nimport { createElementsScrollPositions } from './elementsScrollPositions';\nimport { initShadowRootsController } from './shadowRootsController';\nimport { startFullSnapshots } from './startFullSnapshots';\nimport { createRecordingScope } from './recordingScope';\nexport function record(options) {\n const { emitRecord, emitStats, configuration, lifeCycle } = options;\n // runtime checks for user options\n if (!emitRecord || !emitStats) {\n throw new Error('emit functions are required');\n }\n const processRecord = (record) => {\n emitRecord(record);\n sendToExtension('record', { record });\n const view = options.viewHistory.findView();\n replayStats.addRecord(view.id);\n };\n const shadowRootsController = initShadowRootsController(processRecord, emitStats);\n const scope = createRecordingScope(configuration, createElementsScrollPositions(), shadowRootsController);\n const { stop: stopFullSnapshots } = startFullSnapshots(lifeCycle, processRecord, emitStats, flushMutations, scope);\n function flushMutations() {\n shadowRootsController.flush();\n mutationTracker.flush();\n }\n const mutationTracker = trackMutation(document, processRecord, emitStats, scope);\n const trackers = [\n mutationTracker,\n trackMove(processRecord, scope),\n trackMouseInteraction(processRecord, scope),\n trackScroll(document, processRecord, scope),\n trackViewportResize(processRecord, scope),\n trackInput(document, processRecord, scope),\n trackMediaInteraction(processRecord, scope),\n trackStyleSheet(processRecord, scope),\n trackFocus(processRecord, scope),\n trackVisualViewportResize(processRecord, scope),\n trackFrustration(lifeCycle, processRecord, scope),\n trackViewEnd(lifeCycle, processRecord, flushMutations),\n ];\n return {\n stop: () => {\n shadowRootsController.stop();\n trackers.forEach((tracker) => tracker.stop());\n stopFullSnapshots();\n },\n flushMutations,\n shadowRootsController,\n };\n}\n//# sourceMappingURL=record.js.map","export function buildReplayPayload(data, metadata, stats, rawSegmentBytesCount) {\n const formData = new FormData();\n formData.append('segment', new Blob([data], {\n type: 'application/octet-stream',\n }), `${metadata.session.id}-${metadata.start}`);\n const metadataAndSegmentSizes = {\n raw_segment_size: rawSegmentBytesCount,\n compressed_segment_size: data.byteLength,\n ...metadata,\n };\n const serializedMetadataAndSegmentSizes = JSON.stringify(metadataAndSegmentSizes);\n formData.append('event', new Blob([serializedMetadataAndSegmentSizes], { type: 'application/json' }));\n return {\n data: formData,\n bytesCount: data.byteLength,\n cssText: stats.cssText,\n isFullSnapshot: metadata.index_in_view === 0,\n rawSize: rawSegmentBytesCount,\n recordCount: metadata.records_count,\n serializationDuration: stats.serializationDuration,\n };\n}\n//# sourceMappingURL=buildReplayPayload.js.map","import { RecordType } from '../../types';\nimport * as replayStats from '../replayStats';\nimport { aggregateSerializationStats, createSerializationStats } from '../record';\nexport function createSegment({ context, creationReason, encoder, }) {\n let encodedBytesCount = 0;\n const viewId = context.view.id;\n const indexInView = replayStats.getSegmentsCount(viewId);\n const metadata = {\n start: Infinity,\n end: -Infinity,\n creation_reason: creationReason,\n records_count: 0,\n has_full_snapshot: false,\n index_in_view: indexInView,\n source: 'browser',\n ...context,\n };\n const serializationStats = createSerializationStats();\n replayStats.addSegment(viewId);\n function addRecord(record, callback) {\n metadata.start = Math.min(metadata.start, record.timestamp);\n metadata.end = Math.max(metadata.end, record.timestamp);\n metadata.records_count += 1;\n metadata.has_full_snapshot || (metadata.has_full_snapshot = record.type === RecordType.FullSnapshot || (record.type === RecordType.Change && metadata.index_in_view === 0));\n const prefix = encoder.isEmpty ? '{\"records\":[' : ',';\n encoder.write(prefix + JSON.stringify(record), (additionalEncodedBytesCount) => {\n encodedBytesCount += additionalEncodedBytesCount;\n callback(encodedBytesCount);\n });\n }\n function addStats(stats) {\n aggregateSerializationStats(serializationStats, stats);\n }\n function flush(callback) {\n if (encoder.isEmpty) {\n throw new Error('Empty segment flushed');\n }\n encoder.write(`],${JSON.stringify(metadata).slice(1)}\\n`);\n encoder.finish((encoderResult) => {\n replayStats.addWroteData(metadata.view.id, encoderResult.rawBytesCount);\n callback(metadata, serializationStats, encoderResult);\n });\n }\n return { addRecord, addStats, flush };\n}\n//# sourceMappingURL=segment.js.map","import { isPageExitReason, ONE_SECOND, clearTimeout, setTimeout } from '@datadog/browser-core';\nimport { buildReplayPayload } from './buildReplayPayload';\nimport { createSegment } from './segment';\nexport const SEGMENT_DURATION_LIMIT = 5 * ONE_SECOND;\n/**\n * beacon payload max queue size implementation is 64kb\n * ensure that we leave room for logs, rum and potential other users\n */\nexport let SEGMENT_BYTES_LIMIT = 60000;\nexport function startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, httpRequest, encoder) {\n return doStartSegmentCollection(lifeCycle, () => computeSegmentContext(configuration.applicationId, sessionManager, viewHistory), httpRequest, encoder);\n}\nexport function doStartSegmentCollection(lifeCycle, getSegmentContext, httpRequest, encoder) {\n let state = {\n status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n nextSegmentCreationReason: 'init',\n };\n const { unsubscribe: unsubscribeViewCreated } = lifeCycle.subscribe(2 /* LifeCycleEventType.VIEW_CREATED */, () => {\n flushSegment('view_change');\n });\n const { unsubscribe: unsubscribePageMayExit } = lifeCycle.subscribe(11 /* LifeCycleEventType.PAGE_MAY_EXIT */, (pageMayExitEvent) => {\n flushSegment(pageMayExitEvent.reason);\n });\n function flushSegment(flushReason) {\n if (state.status === 1 /* SegmentCollectionStatus.SegmentPending */) {\n state.segment.flush((metadata, stats, encoderResult) => {\n const payload = buildReplayPayload(encoderResult.output, metadata, stats, encoderResult.rawBytesCount);\n if (isPageExitReason(flushReason)) {\n httpRequest.sendOnExit(payload);\n }\n else {\n httpRequest.send(payload);\n }\n });\n clearTimeout(state.expirationTimeoutId);\n }\n if (flushReason !== 'stop') {\n state = {\n status: 0 /* SegmentCollectionStatus.WaitingForInitialRecord */,\n nextSegmentCreationReason: flushReason,\n };\n }\n else {\n state = {\n status: 2 /* SegmentCollectionStatus.Stopped */,\n };\n }\n }\n return {\n addRecord: (record) => {\n if (state.status === 2 /* SegmentCollectionStatus.Stopped */) {\n return;\n }\n if (state.status === 0 /* SegmentCollectionStatus.WaitingForInitialRecord */) {\n const context = getSegmentContext();\n if (!context) {\n return;\n }\n state = {\n status: 1 /* SegmentCollectionStatus.SegmentPending */,\n segment: createSegment({ encoder, context, creationReason: state.nextSegmentCreationReason }),\n expirationTimeoutId: setTimeout(() => {\n flushSegment('segment_duration_limit');\n }, SEGMENT_DURATION_LIMIT),\n };\n }\n state.segment.addRecord(record, (encodedBytesCount) => {\n if (encodedBytesCount > SEGMENT_BYTES_LIMIT) {\n flushSegment('segment_bytes_limit');\n }\n });\n },\n addStats: (stats) => {\n if (state.status === 1 /* SegmentCollectionStatus.SegmentPending */) {\n state.segment.addStats(stats);\n }\n },\n stop: () => {\n flushSegment('stop');\n unsubscribeViewCreated();\n unsubscribePageMayExit();\n },\n };\n}\nexport function computeSegmentContext(applicationId, sessionManager, viewHistory) {\n const session = sessionManager.findTrackedSession();\n const viewContext = viewHistory.findView();\n if (!session || !viewContext) {\n return undefined;\n }\n return {\n application: {\n id: applicationId,\n },\n session: {\n id: session.id,\n },\n view: {\n id: viewContext.id,\n },\n };\n}\nexport function setSegmentBytesLimit(newSegmentBytesLimit = 60000) {\n SEGMENT_BYTES_LIMIT = newSegmentBytesLimit;\n}\n//# sourceMappingURL=segmentCollection.js.map","import { ExperimentalFeature, addTelemetryMetrics, isExperimentalFeatureEnabled, noop, } from '@datadog/browser-core';\nexport function startSegmentTelemetry(telemetry, requestObservable) {\n if (!telemetry.metricsEnabled) {\n return { stop: noop };\n }\n const { unsubscribe } = requestObservable.subscribe((requestEvent) => {\n if (requestEvent.type === 'failure' ||\n requestEvent.type === 'queue-full' ||\n (requestEvent.type === 'success' && requestEvent.payload.isFullSnapshot)) {\n const metrics = createSegmentMetrics(requestEvent.type, requestEvent.bandwidth, requestEvent.payload);\n // monitor-until: 2026-07-01\n addTelemetryMetrics(\"Segment network request metrics\" /* TelemetryMetrics.SEGMENT_METRICS_TELEMETRY_NAME */, { metrics });\n }\n });\n return {\n stop: unsubscribe,\n };\n}\nfunction createSegmentMetrics(result, bandwidthStats, payload) {\n return {\n cssText: {\n count: payload.cssText.count,\n max: payload.cssText.max,\n sum: payload.cssText.sum,\n },\n encoding: {\n fullSnapshot: isExperimentalFeatureEnabled(ExperimentalFeature.USE_CHANGE_RECORDS) ? 'change' : 'v1',\n incrementalSnapshot: 'v1',\n },\n isFullSnapshot: payload.isFullSnapshot,\n ongoingRequests: {\n count: bandwidthStats.ongoingRequestCount,\n totalSize: bandwidthStats.ongoingByteCount,\n },\n recordCount: payload.recordCount,\n result,\n serializationDuration: {\n count: payload.serializationDuration.count,\n max: payload.serializationDuration.max,\n sum: payload.serializationDuration.sum,\n },\n size: {\n compressed: payload.bytesCount,\n raw: payload.rawSize,\n },\n };\n}\n//# sourceMappingURL=startSegmentTelemetry.js.map","import { getEventBridge } from '@datadog/browser-core';\nexport function startRecordBridge(viewHistory) {\n const bridge = getEventBridge();\n return {\n addRecord: (record) => {\n // Get the current active view, not at the time of the record, aligning with the segment logic.\n // This approach could potentially associate the record to an incorrect view, in case the record date is in the past (e.g. frustration records).\n // However the risk is minimal. We could address the issue when potential negative impact are identified.\n const view = viewHistory.findView();\n bridge.send('record', record, view.id);\n },\n };\n}\n//# sourceMappingURL=startRecordBridge.js.map","import { createHttpRequest, addTelemetryDebug, canUseEventBridge, noop } from '@datadog/browser-core';\nimport { record } from '../domain/record';\nimport { startSegmentCollection, SEGMENT_BYTES_LIMIT, startSegmentTelemetry } from '../domain/segmentCollection';\nimport { startRecordBridge } from '../domain/startRecordBridge';\nexport function startRecording(lifeCycle, configuration, sessionManager, viewHistory, encoder, telemetry, httpRequest) {\n const cleanupTasks = [];\n const reportError = (error) => {\n lifeCycle.notify(14 /* LifeCycleEventType.RAW_ERROR_COLLECTED */, { error });\n // monitor-until: forever, to keep an eye on the errors reported to customers\n addTelemetryDebug('Error reported to customer', { 'error.message': error.message });\n };\n const replayRequest = httpRequest || createHttpRequest([configuration.sessionReplayEndpointBuilder], reportError, SEGMENT_BYTES_LIMIT);\n let addRecord;\n let addStats;\n if (!canUseEventBridge()) {\n const segmentCollection = startSegmentCollection(lifeCycle, configuration, sessionManager, viewHistory, replayRequest, encoder);\n addRecord = segmentCollection.addRecord;\n addStats = segmentCollection.addStats;\n cleanupTasks.push(segmentCollection.stop);\n const segmentTelemetry = startSegmentTelemetry(telemetry, replayRequest.observable);\n cleanupTasks.push(segmentTelemetry.stop);\n }\n else {\n ;\n ({ addRecord } = startRecordBridge(viewHistory));\n addStats = noop;\n }\n const { stop: stopRecording } = record({\n emitRecord: addRecord,\n emitStats: addStats,\n configuration,\n lifeCycle,\n viewHistory,\n });\n cleanupTasks.push(stopRecording);\n return {\n stop: () => {\n cleanupTasks.forEach((task) => task());\n },\n };\n}\n//# sourceMappingURL=startRecording.js.map"],"names":["document","isSVGElement","record","target","index","replayStats.addRecord","replayStats.getSegmentsCount","replayStats.addSegment","addRecord","replayStats.addWroteData"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40]}
|