landom-sdk 0.1.0
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/LICENSE +21 -0
- package/README.md +220 -0
- package/dist/landom-sdk.cjs.js +19 -0
- package/dist/landom-sdk.cjs.js.map +1 -0
- package/dist/landom-sdk.esm.js +19 -0
- package/dist/landom-sdk.esm.js.map +1 -0
- package/dist/landom-sdk.umd.js +19 -0
- package/dist/landom-sdk.umd.js.map +1 -0
- package/dist/types/core/context.d.ts +7 -0
- package/dist/types/core/event-queue.d.ts +30 -0
- package/dist/types/core/sdk.d.ts +27 -0
- package/dist/types/events/click.d.ts +6 -0
- package/dist/types/events/exit.d.ts +7 -0
- package/dist/types/events/input.d.ts +6 -0
- package/dist/types/events/ping.d.ts +7 -0
- package/dist/types/events/replay.d.ts +6 -0
- package/dist/types/events/scroll.d.ts +6 -0
- package/dist/types/events/start.d.ts +6 -0
- package/dist/types/events/visibility.d.ts +6 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/transport/transport.d.ts +23 -0
- package/dist/types/types/index.d.ts +75 -0
- package/dist/types/utils/dom.d.ts +6 -0
- package/dist/types/utils/logger.d.ts +10 -0
- package/dist/types/utils/selector.d.ts +12 -0
- package/dist/types/utils/session.d.ts +18 -0
- package/dist/types/utils/throttle.d.ts +12 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"landom-sdk.esm.js","sources":["../src/types/index.ts","../src/utils/logger.ts","../src/transport/transport.ts","../src/utils/session.ts","../src/core/event-queue.ts","../src/core/context.ts","../src/events/start.ts","../src/events/visibility.ts","../src/utils/throttle.ts","../src/events/scroll.ts","../src/utils/dom.ts","../src/utils/selector.ts","../src/events/click.ts","../src/events/input.ts","../node_modules/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/rrweb/es/rrweb/packages/types/dist/types.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../node_modules/rrweb/es/rrweb/ext/tslib/tslib.es6.js","../node_modules/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../src/events/replay.ts","../src/events/ping.ts","../src/events/exit.ts","../src/core/sdk.ts"],"sourcesContent":["// ─── 이벤트 타입 ───\n\nexport type EventType =\n | 'start'\n | 'visibility'\n | 'scroll'\n | 'click'\n | 'input'\n | 'replay'\n | 'ping'\n | 'exit'\n | 'custom';\n\n// ─── 이벤트별 payload ───\n\nexport interface StartPayload {\n // 페이지 진입 시점 — 별도 데이터 없음\n}\n\nexport interface VisibilityPayload {\n isVisible: boolean;\n}\n\nexport interface ScrollPayload {\n yOffset: number;\n percentage: number;\n}\n\nexport interface ClickPayload {\n targetId: string;\n}\n\nexport interface InputPayload {\n fieldId: string;\n}\n\nexport interface ReplayPayload {\n event: unknown;\n isCheckout: boolean;\n version: 'rrweb';\n}\n\nexport interface CompressedReplayPayload {\n compressed: true;\n compression: 'gzip';\n encoding: 'base64';\n data: string;\n version: 'rrweb';\n}\n\nexport interface PingPayload {\n sectionId: string;\n}\n\nexport interface ExitPayload {\n lastElementId: string;\n maxDepth: number;\n}\n\nexport interface CustomPayload {\n [key: string]: unknown;\n}\n\nexport type EventPayload =\n | StartPayload\n | VisibilityPayload\n | ScrollPayload\n | ClickPayload\n | InputPayload\n | ReplayPayload\n | CompressedReplayPayload\n | PingPayload\n | ExitPayload\n | CustomPayload;\n\n// ─── SDK 이벤트 (큐에 저장되는 단위) ───\n\nexport interface SDKEvent {\n type: EventType;\n timestamp: number;\n // 발생 요소의 CSS selector. 연결된 요소가 없는 이벤트는 null.\n cssSelector: string | null;\n payload: EventPayload;\n}\n\n// ─── 전송 payload (서버로 보내는 배치 구조) ───\n\nexport interface TransportPayload {\n sessionId: string;\n userAgent: string;\n url: string;\n events: SDKEvent[];\n}\n\n// ─── SDK 설정 ───\n\nexport interface SDKConfig {\n apiKey: string;\n endpoint: string;\n flushInterval: number;\n flushQueueSize: number;\n maxQueueSize: number;\n maxRetries: number;\n enableReplay: boolean;\n replayMaskAllInputs: boolean;\n replayBlockClass: string;\n replayBlockSelector?: string;\n replayMaskTextClass: string;\n replayMaskTextSelector?: string;\n replayInlineStylesheet: boolean;\n replayCheckoutEveryNms: number;\n replayMousemoveSampling: number | false;\n replayMousemoveCallbackSampling: number;\n replayScrollSampling: number;\n replayInputSampling: 'all' | 'last';\n beforeSend?: (event: SDKEvent) => SDKEvent | null;\n debug: boolean;\n}\n\nexport type SDKOptions = Partial<SDKConfig> & Pick<SDKConfig, 'apiKey'>;\n\n// ─── SDK 기본값 ───\n\nexport const DEFAULT_CONFIG: Omit<SDKConfig, 'apiKey'> = {\n endpoint: '/api/v1/events',\n flushInterval: 3000,\n flushQueueSize: 20,\n maxQueueSize: 100,\n maxRetries: 3,\n enableReplay: true,\n replayMaskAllInputs: true,\n replayBlockClass: 'rr-block',\n replayBlockSelector: '.no-record',\n replayMaskTextClass: 'rr-mask',\n // cross-origin stylesheet도 재생 가능하도록 인라인 (페이로드 ↑ 트레이드오프)\n replayInlineStylesheet: true,\n replayCheckoutEveryNms: 600_000,\n replayMousemoveSampling: false,\n replayMousemoveCallbackSampling: 500,\n replayScrollSampling: 200,\n replayInputSampling: 'last',\n debug: false,\n};\n","/** SDK 내부 로거 인터페이스(디버깅용으로 넣음) */\nexport interface Logger {\n log(...args: unknown[]): void;\n warn(...args: unknown[]): void;\n}\n\nconst noop = () => {};\n\n/**\n * 조건부 로거 생성\n * debug가 true일 때만 콘솔에 [LandOm] 접두사와 함께 출력\n */\nexport function createLogger(debug: boolean): Logger {\n if (!debug) {\n return { log: noop, warn: noop };\n }\n\n return {\n log: (...args: unknown[]) => console.log('[LandOm]', ...args),\n warn: (...args: unknown[]) => console.warn('[LandOm]', ...args),\n };\n}\n","import type { SDKEvent, TransportPayload } from '../types';\nimport type { Logger } from '../utils/logger';\n\n/** Transport 생성에 필요한 설정 */\nexport interface TransportConfig {\n endpoint: string;\n apiKey: string;\n maxRetries: number;\n logger: Logger;\n}\n\n/**\n * 이벤트 전송 모듈\n *\n * 두 가지 전송 방식 \n * - send(): fetch(keepalive)로 전송. 커스텀 헤더(X-Project-Key) 사용 가능.\n * - sendSync(): navigator.sendBeacon으로 전송. 페이지 이탈 시 사용.\n * sendBeacon은 커스텀 헤더를 설정할 수 없으므로 body에 apiKey를 포함\n */\nexport function createTransport(config: TransportConfig) {\n const { endpoint, apiKey, maxRetries, logger } = config;\n\n /** 재시도 가능한 HTTP 상태인지 판별 (서버 오류, 429 등) */\n function isRetryable(status: number): boolean {\n return status === 429 || status >= 500;\n }\n\n /**\n * fetch(keepalive)로 비동기 전송\n * 실패 시 exponential backoff로 최대 maxRetries회 재시도\n * @returns 전송 성공 여부\n */\n /** keepalive 최대 허용 크기 (64KB, 여유분 확보) */\n const KEEPALIVE_LIMIT = 60_000;\n\n async function send(payload: TransportPayload): Promise<boolean> {\n const body = JSON.stringify(payload);\n const useKeepalive = body.length <= KEEPALIVE_LIMIT;\n\n if (!useKeepalive) {\n logger.warn('페이로드 크기 초과, keepalive 비활성화:', body.length, 'bytes');\n }\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), 10_000);\n\n const res = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Project-Key': apiKey,\n },\n body,\n keepalive: useKeepalive,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (res.ok) {\n logger.log('전송 완료:', payload.events.length, '건');\n return true;\n }\n\n // 재시도 불가능한 상태(4xx 클라이언트 오류)는 즉시 포기\n if (!isRetryable(res.status)) {\n logger.warn('전송 실패 (재시도 불가):', res.status, res.statusText);\n return false;\n }\n\n logger.warn(\n `전송 실패 (${res.status}), 재시도 ${attempt + 1}/${maxRetries}`,\n );\n } catch (err) {\n logger.warn(\n `전송 에러, 재시도 ${attempt + 1}/${maxRetries}:`,\n err,\n );\n }\n\n // 마지막 시도가 아니면 exponential backoff 대기\n if (attempt < maxRetries) {\n const delay = 1000 * 2 ** attempt; // 1s → 2s → 4s\n await new Promise((r) => setTimeout(r, delay));\n }\n }\n\n logger.warn('최대 재시도 초과, 전송 포기:', payload.events.length, '건');\n return false;\n }\n\n /** sendBeacon 안전 한계 (64KB, 여유분 확보) */\n const SENDBEACON_LIMIT = 60_000;\n\n /** 청크별로 직렬화한 body 크기가 한계 이하가 되도록 events를 분할 */\n function chunkEvents(payload: TransportPayload, limit: number): SDKEvent[][] {\n const envelopeSize = JSON.stringify({\n ...payload,\n apiKey,\n events: [],\n }).length;\n const budget = limit - envelopeSize - 8; // ',' 및 안전 여분\n\n const chunks: SDKEvent[][] = [];\n let current: SDKEvent[] = [];\n let currentSize = 0;\n\n for (const ev of payload.events) {\n const evSize = JSON.stringify(ev).length + 1; // 구분자 1바이트\n if (current.length > 0 && currentSize + evSize > budget) {\n chunks.push(current);\n current = [];\n currentSize = 0;\n }\n current.push(ev);\n currentSize += evSize;\n }\n if (current.length > 0) chunks.push(current);\n\n return chunks;\n }\n\n /**\n * navigator.sendBeacon으로 동기 전송 (페이지 이탈 시 사용).\n * 헤더 설정 불가 → body에 apiKey 포함.\n * 64KB 한계를 넘기지 않도록 events를 청크로 분할해 다회 호출.\n * 페이지 이탈 컨텍스트라 fetch fallback은 의미 없음 (요청이 unload와 함께 취소됨).\n * sendBeacon 실패 청크는 드롭하고 경고만 남긴다.\n */\n function sendSync(payload: TransportPayload): void {\n const chunks = chunkEvents(payload, SENDBEACON_LIMIT);\n\n for (const events of chunks) {\n const body = JSON.stringify({ ...payload, apiKey, events });\n\n if (body.length > SENDBEACON_LIMIT) {\n // 단일 이벤트가 청크 한계를 넘는 케이스 (예: 거대한 replay 페이로드)\n logger.warn(\n 'sendSync: 단일 청크가 sendBeacon 한계 초과, 드롭:',\n body.length,\n 'bytes,',\n events.length,\n '건',\n );\n continue;\n }\n\n const blob = new Blob([body], { type: 'application/json' });\n const ok = navigator.sendBeacon(endpoint, blob);\n\n if (ok) {\n logger.log('sendBeacon 전송:', events.length, '건');\n } else {\n logger.warn('sendBeacon 실패, 청크 드롭:', events.length, '건');\n }\n }\n }\n\n return { send, sendSync };\n}\n\n/** createTransport 반환 타입 */\nexport type Transport = ReturnType<typeof createTransport>;\n","const SESSION_KEY = 'landom_session';\nconst IDLE_TIMEOUT = 30 * 60 * 1000; // 30분 비활동 시 세션 만료\nconst MAX_DURATION = 24 * 60 * 60 * 1000; // 24시간 최대 세션 지속\n\n/** sessionStorage에 저장되는 세션 데이터 */\ninterface SessionData {\n sessionId: string;\n startedAt: number;\n lastActivityAt: number;\n}\n\n// ─── UUIDv7 (RFC 9562) ───\n\n/**\n * UUIDv7 생성\n * 상위 48비트에 밀리초 타임스탬프를 담아 시간순 정렬\n */\nexport function generateUUIDv7(): string {\n const now = Date.now();\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n\n // 상위 48비트: 밀리초 단위 Unix 타임스탬프\n bytes[0] = (now / 2 ** 40) & 0xff;\n bytes[1] = (now / 2 ** 32) & 0xff;\n bytes[2] = (now / 2 ** 24) & 0xff;\n bytes[3] = (now / 2 ** 16) & 0xff;\n bytes[4] = (now / 2 ** 8) & 0xff;\n bytes[5] = now & 0xff;\n\n // 버전 7 표시\n bytes[6] = (bytes[6] & 0x0f) | 0x70;\n // variant 10xx 표시\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n // 바이트 배열을 8-4-4-4-12 형식의 hex 문자열로 변환\n const hex = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\n// ─── Storage 헬퍼 ───\n\n/** sessionStorage에서 JSON 파싱하여 읽기 (실패 시 null) */\nfunction readStorage<T>(key: string): T | null {\n try {\n const raw = sessionStorage.getItem(key);\n return raw ? (JSON.parse(raw) as T) : null;\n } catch {\n return null;\n }\n}\n\n/** sessionStorage에 JSON 직렬화하여 저장 (private browsing 등에서 실패 시 무시) */\nfunction writeStorage(key: string, value: unknown): void {\n try {\n sessionStorage.setItem(key, JSON.stringify(value));\n } catch {\n // sessionStorage 사용 불가 시 무시\n }\n}\n\n// ─── 세션 관리 ───\n\n/** 새 세션 생성 후 sessionStorage에 저장 */\nfunction createSession(): SessionData {\n const now = Date.now();\n const session: SessionData = {\n sessionId: generateUUIDv7(),\n startedAt: now,\n lastActivityAt: now,\n };\n writeStorage(SESSION_KEY, session);\n return session;\n}\n\n/** 세션 만료 여부 확인 (30분 비활동 또는 24시간 초과) */\nfunction isExpired(session: SessionData): boolean {\n const now = Date.now();\n const idle = now - session.lastActivityAt > IDLE_TIMEOUT;\n const maxed = now - session.startedAt > MAX_DURATION;\n return idle || maxed;\n}\n\n/** 기존 세션 반환, 없거나 만료되었으면 새로 생성 */\nexport function getOrCreateSession(): SessionData {\n const existing = readStorage<SessionData>(SESSION_KEY);\n if (existing && !isExpired(existing)) {\n return existing;\n }\n return createSession();\n}\n\n/** 마지막 활동 시간 갱신 */\nexport function touchSession(): void {\n const session = getOrCreateSession();\n session.lastActivityAt = Date.now();\n writeStorage(SESSION_KEY, session);\n}\n\n/** 현재 세션 ID 반환 (활동 시간도 갱신) */\nexport function getSessionId(): string {\n const session = getOrCreateSession();\n session.lastActivityAt = Date.now();\n writeStorage(SESSION_KEY, session);\n return session.sessionId;\n}\n\n","import type { SDKEvent, TransportPayload } from '../types';\nimport type { Transport } from '../transport/transport';\nimport type { Logger } from '../utils/logger';\nimport { getSessionId } from '../utils/session';\n\n/** EventQueue 생성에 필요한 설정 */\nexport interface EventQueueConfig {\n flushInterval: number;\n flushQueueSize: number;\n maxQueueSize: number;\n beforeSend?: (event: SDKEvent) => SDKEvent | null;\n transport: Transport;\n logger: Logger;\n}\n\n/**\n * 이벤트 큐 모듈\n *\n * 이벤트를 배열에 버퍼링하고, 조건 충족 시 배치 전송한다.\n * - flushInterval마다 자동 flush\n * - flushQueueSize 도달 시 즉시 flush\n * - maxQueueSize 초과 시 오래된 이벤트 드롭\n * - beforeSend 훅으로 이벤트 가공/필터링\n */\nexport function createEventQueue(config: EventQueueConfig) {\n const {\n flushInterval,\n flushQueueSize,\n maxQueueSize,\n beforeSend,\n transport,\n logger,\n } = config;\n\n let queue: SDKEvent[] = [];\n let timerId: ReturnType<typeof setInterval> | null = null;\n\n /** 공통 전송 payload 생성 */\n function buildPayload(events: SDKEvent[]): TransportPayload {\n return {\n sessionId: getSessionId(),\n userAgent: navigator.userAgent,\n url: location.href,\n events,\n };\n }\n\n /**\n * maxQueueSize 초과 시 큐 정리.\n * 분석 핵심 이벤트(click, exit 등)를 보존하기 위해 오래된 replay 이벤트를 먼저 드롭한다.\n * 그래도 초과면 가장 오래된 이벤트부터 드롭한다.\n */\n function enforceMaxSize(): void {\n if (queue.length <= maxQueueSize) return;\n\n let need = queue.length - maxQueueSize;\n let droppedReplay = 0;\n const survivors: SDKEvent[] = [];\n\n for (const e of queue) {\n if (need > 0 && e.type === 'replay') {\n need--;\n droppedReplay++;\n continue;\n }\n survivors.push(e);\n }\n\n let droppedOther = 0;\n if (need > 0) {\n droppedOther = Math.min(need, survivors.length);\n survivors.splice(0, droppedOther);\n }\n\n queue = survivors;\n logger.warn(`큐 초과: replay ${droppedReplay}건, 기타 ${droppedOther}건 드롭`);\n }\n\n /** 이벤트 추가 (beforeSend 적용, maxQueueSize 초과 시 드롭) */\n function push(event: SDKEvent): void {\n // beforeSend 훅 적용\n const processed = beforeSend ? beforeSend(event) : event;\n if (!processed) {\n logger.log('beforeSend에 의해 제외됨:', event.type);\n return;\n }\n\n queue.push(processed);\n enforceMaxSize();\n\n // flushQueueSize 도달 시 즉시 flush\n if (queue.length >= flushQueueSize) {\n flush();\n }\n }\n\n /** 큐에 쌓인 이벤트를 비동기 전송 (fetch), 실패 시 큐 앞에 복원 */\n async function flush(): Promise<void> {\n if (queue.length === 0) return;\n\n // 오프라인이면 전송 건너뛰기 (큐에 계속 쌓아둠)\n if (!navigator.onLine) {\n logger.log('오프라인 상태, 전송 보류:', queue.length, '건');\n return;\n }\n\n const events = queue.splice(0);\n const payload = buildPayload(events);\n logger.log('flush:', events.length, '건');\n\n const ok = await transport.send(payload);\n if (!ok) {\n queue.unshift(...events);\n enforceMaxSize();\n }\n }\n\n /** 큐에 쌓인 이벤트를 동기 전송 (sendBeacon) — 이탈 시 사용 */\n function flushSync(): void {\n if (queue.length === 0) return;\n\n const events = queue.splice(0);\n const payload = buildPayload(events);\n logger.log('flushSync:', events.length, '건');\n transport.sendSync(payload);\n }\n\n /** 온라인 복귀 시 즉시 flush */\n function onOnline(): void {\n logger.log('온라인 복귀, 보류 이벤트 전송');\n flush();\n }\n\n /** 주기적 flush 타이머 시작 + 온라인 복귀 리스너 등록 */\n function start(): void {\n if (timerId !== null) return;\n timerId = setInterval(flush, flushInterval);\n window.addEventListener('online', onOnline);\n logger.log(`큐 시작 (${flushInterval}ms 간격)`);\n }\n\n /** 타이머 중지 + 리스너 해제 + 잔여 이벤트 flush */\n function stop(): void {\n if (timerId !== null) {\n clearInterval(timerId);\n timerId = null;\n }\n window.removeEventListener('online', onOnline);\n flush();\n }\n\n return { push, flush, flushSync, start, stop };\n}\n\n/** createEventQueue 반환 타입 */\nexport type EventQueue = ReturnType<typeof createEventQueue>;\n","import type { SDKConfig } from '../types';\nimport type { Logger } from '../utils/logger';\nimport type { EventQueue } from './event-queue';\n\n/**\n * SDK 내부 공유 컨텍스트\n * 순환 의존성을 방지하기 위해 sdk.ts와 이벤트 수집기 사이의 공유 상태를 분리\n */\n\nlet queue: EventQueue;\nlet config: SDKConfig;\nlet logger: Logger;\n\nexport function setContext(q: EventQueue, c: SDKConfig, l: Logger): void {\n queue = q;\n config = c;\n logger = l;\n}\n\nexport function getQueue(): EventQueue {\n return queue;\n}\n\nexport function getConfig(): SDKConfig {\n return config;\n}\n\nexport function getLogger(): Logger {\n return logger;\n}\n","import type { Collector } from '../core/sdk';\nimport { getQueue } from '../core/context';\n\n/**\n * 페이지 진입(start) 이벤트 수집\n * init 시 즉시 start 이벤트를 발행\n */\nexport function createStartCollector(): Collector {\n return {\n setup() {\n getQueue().push({\n type: 'start',\n timestamp: Date.now(),\n cssSelector: null,\n payload: {},\n });\n },\n teardown() {\n // 정리할 리스너 없음\n },\n };\n}\n","import type { Collector } from '../core/sdk';\nimport { getQueue } from '../core/context';\nimport { touchSession } from '../utils/session';\n\n/**\n * 탭 전환/최소화(visibility) 이벤트 수집기\n * visibilitychange 이벤트로 탭 활성/비활성 상태를 추적\n */\nexport function createVisibilityCollector(): Collector {\n function handler() {\n const isVisible = document.visibilityState === 'visible';\n\n // 탭 복귀 시 세션 활동 시간 갱신\n if (isVisible) {\n touchSession();\n }\n\n getQueue().push({\n type: 'visibility',\n timestamp: Date.now(),\n cssSelector: null,\n payload: { isVisible },\n });\n }\n\n return {\n setup() {\n document.addEventListener('visibilitychange', handler);\n },\n teardown() {\n document.removeEventListener('visibilitychange', handler);\n },\n };\n}\n","/**\n * Trailing-edge throttle\n * 마지막 호출 기준으로 ms 간격마다 한 번씩 실행한다\n * 스크롤 등 고빈도 이벤트의 호출 횟수를 제한할 때 사용\n *\n * 예시 (ms = 500):\n * 0ms → 스크롤 100px 들어옴 → lastArgs = 100, 타이머 시작\n * 50ms → 스크롤 200px 들어옴 → lastArgs = 200, 타이머 있으니 무시\n * 100ms → 스크롤 350px 들어옴 → lastArgs = 350, 타이머 있으니 무시\n * 500ms → 타이머 만료 → fn(350) 실행 (마지막 값만 사용됨)\n */\nexport function throttle<T extends (...args: any[]) => void>(\n fn: T,\n ms: number,\n): T {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n let lastArgs: Parameters<T> | null = null;\n\n const throttled = (...args: Parameters<T>) => {\n lastArgs = args;\n\n // 이미 타이머가 걸려있으면 최신 인자만 저장하고 대기\n if (timeoutId !== null) return;\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n if (lastArgs) {\n fn(...lastArgs);\n lastArgs = null;\n }\n }, ms);\n };\n\n return throttled as T;\n}\n","import type { Collector } from '../core/sdk';\nimport { getQueue } from '../core/context';\nimport { throttle } from '../utils/throttle';\nimport { touchSession } from '../utils/session';\n\nconst THROTTLE_MS = 500;\n\n/**\n * 스크롤(scroll) 이벤트 수집기\n * 500ms trailing-edge 쓰로틀로 스크롤 위치와 비율을 기록\n */\nexport function createScrollCollector(): Collector {\n const handler = throttle(() => {\n touchSession();\n\n const yOffset = window.scrollY;\n // 전체 문서 높이 - 뷰포트 높이 = 최대 스크롤 가능 거리\n const maxScroll = document.documentElement.scrollHeight - window.innerHeight;\n const percentage = maxScroll > 0 ? Math.round((yOffset / maxScroll) * 100) / 100 : 0;\n\n getQueue().push({\n type: 'scroll',\n timestamp: Date.now(),\n cssSelector: null,\n payload: { yOffset, percentage },\n });\n }, THROTTLE_MS);\n\n return {\n setup() {\n window.addEventListener('scroll', handler, { passive: true });\n },\n teardown() {\n window.removeEventListener('scroll', handler);\n },\n };\n}\n","/**\n * DOM 요소에서 식별자를 추출한다\n * 우선순위: #id > tag.firstClass > tag\n * 클릭, 입력, 이탈 이벤트에서 타겟 요소를 식별하는 데 사용\n */\nexport function getElementId(el: Element): string {\n // 1순위: id 속성\n if (el.id) {\n return `#${el.id}`;\n }\n\n const tag = el.tagName.toLowerCase();\n\n // 2순위: 태그명 + 첫 번째 클래스\n if (typeof el.className === 'string' && el.className.trim()) {\n const firstClass = el.className.trim().split(/\\s+/)[0];\n return `${tag}.${firstClass}`;\n }\n\n // 3순위: 태그명만\n return tag;\n}\n","/**\n * 요소의 CSS selector를 생성한다.\n * LandOm-LLM의 html_tools/selector_lookup.py:build_css_selector와 동일한 규칙을 따른다.\n * 규칙이 어긋나면 백엔드의 selector→funnel 매핑이 깨지므로 변경 시 LLM 쪽과 동기화 필수.\n *\n * 규칙:\n * 1) id 속성이 있으면 `tag[id=\"...\"]`를 쓰고 더 이상 위로 올라가지 않는다\n * 2) 그 외에는 `tag:nth-of-type(N)` (같은 태그명 형제 중 1-based 위치)\n * 3) 결합자는 ` > ` (직계 자식)\n * 4) root까지만 올라간다 (기본값 document.body)\n */\nexport function buildCssSelector(node: Element, root: Element = document.body): string {\n const parts: string[] = [];\n const rootParent = root.parentElement;\n let current: Element | null = node;\n\n while (current) {\n if (current === rootParent) break;\n\n const id = current.getAttribute('id');\n if (id) {\n const safeId = id.replace(/\"/g, '\\\\\"');\n parts.push(`${current.tagName.toLowerCase()}[id=\"${safeId}\"]`);\n break;\n }\n\n let position = 1;\n let sib: Element | null = current.previousElementSibling;\n while (sib) {\n if (sib.tagName === current.tagName) position++;\n sib = sib.previousElementSibling;\n }\n parts.push(`${current.tagName.toLowerCase()}:nth-of-type(${position})`);\n\n if (current === root) break;\n current = current.parentElement;\n }\n\n return parts.reverse().join(' > ');\n}\n","import type { Collector } from '../core/sdk';\nimport { getQueue } from '../core/context';\nimport { getElementId } from '../utils/dom';\nimport { buildCssSelector } from '../utils/selector';\nimport { touchSession } from '../utils/session';\n\n/**\n * 클릭(click) 이벤트 수집\n * capture: true로 문서 최상단에서 모든 클릭을 감지\n */\nexport function createClickCollector(): Collector {\n function handler(e: MouseEvent) {\n const target = e.target as Element | null;\n if (!target) return;\n\n touchSession();\n\n getQueue().push({\n type: 'click',\n timestamp: Date.now(),\n cssSelector: buildCssSelector(target),\n payload: { targetId: getElementId(target) },\n });\n }\n\n return {\n setup() {\n document.addEventListener('click', handler, { capture: true });\n },\n teardown() {\n document.removeEventListener('click', handler, { capture: true });\n },\n };\n}\n","import type { Collector } from '../core/sdk';\nimport { getQueue } from '../core/context';\nimport { getElementId } from '../utils/dom';\nimport { buildCssSelector } from '../utils/selector';\nimport { touchSession } from '../utils/session';\n\n/** input 이벤트 대상 태그 */\nconst INPUT_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\n/**\n * 입력(input) 이벤트 수집기\n * focus 이벤트로 입력 필드 진입만 1회 기록( 값은 수집하지 않음)\n */\nexport function createInputCollector(): Collector {\n function handler(e: FocusEvent) {\n const target = e.target as Element | null;\n if (!target || !INPUT_TAGS.has(target.tagName)) return;\n\n touchSession();\n\n getQueue().push({\n type: 'input',\n timestamp: Date.now(),\n cssSelector: buildCssSelector(target),\n payload: { fieldId: getElementId(target) },\n });\n }\n\n return {\n setup() {\n // capture: true로 포커스 이벤트 감지 (focus는 버블링되지 않음)\n document.addEventListener('focus', handler, { capture: true });\n },\n teardown() {\n document.removeEventListener('focus', handler, { capture: true });\n },\n };\n}\n","var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n var host = n === null || n === void 0 ? void 0 : n.host;\r\n return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction getCssRulesString(s) {\r\n try {\r\n var rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules).map(getCssRuleString).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction getCssRuleString(rule) {\r\n var cssStringified = rule.cssText;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n cssStringified = getCssRulesString(rule.styleSheet) || cssStringified;\r\n }\r\n catch (_a) {\r\n }\r\n }\r\n return cssStringified;\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nvar Mirror = (function () {\r\n function Mirror() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n Mirror.prototype.getId = function (n) {\r\n var _a;\r\n if (!n)\r\n return -1;\r\n var id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n return id !== null && id !== void 0 ? id : -1;\r\n };\r\n Mirror.prototype.getNode = function (id) {\r\n return this.idNodeMap.get(id) || null;\r\n };\r\n Mirror.prototype.getIds = function () {\r\n return Array.from(this.idNodeMap.keys());\r\n };\r\n Mirror.prototype.getMeta = function (n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n };\r\n Mirror.prototype.removeNodeFromMap = function (n) {\r\n var _this = this;\r\n var id = this.getId(n);\r\n this.idNodeMap[\"delete\"](id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach(function (childNode) {\r\n return _this.removeNodeFromMap(childNode);\r\n });\r\n }\r\n };\r\n Mirror.prototype.has = function (id) {\r\n return this.idNodeMap.has(id);\r\n };\r\n Mirror.prototype.hasNode = function (node) {\r\n return this.nodeMetaMap.has(node);\r\n };\r\n Mirror.prototype.add = function (n, meta) {\r\n var id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n };\r\n Mirror.prototype.replace = function (id, n) {\r\n var oldNode = this.getNode(id);\r\n if (oldNode) {\r\n var meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n };\r\n Mirror.prototype.reset = function () {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n };\r\n return Mirror;\r\n}());\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction maskInputValue(_a) {\r\n var maskInputOptions = _a.maskInputOptions, tagName = _a.tagName, type = _a.type, value = _a.value, maskInputFn = _a.maskInputFn;\r\n var text = value || '';\r\n if (maskInputOptions[tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n if (maskInputFn) {\r\n text = maskInputFn(text);\r\n }\r\n else {\r\n text = '*'.repeat(text.length);\r\n }\r\n }\r\n return text;\r\n}\r\nvar ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n var chunkSize = 50;\r\n for (var x = 0; x < canvas.width; x += chunkSize) {\r\n for (var y = 0; y < canvas.height; y += chunkSize) {\r\n var getImageData = ctx.getImageData;\r\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n var pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some(function (pixel) { return pixel !== 0; }))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\n\nvar _id = 1;\r\nvar tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nvar IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n var processedTagName = element.tagName.toLowerCase().trim();\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction stringifyStyleSheet(sheet) {\r\n return sheet.cssRules\r\n ? Array.from(sheet.cssRules)\r\n .map(function (rule) { return rule.cssText || ''; })\r\n .join('')\r\n : '';\r\n}\r\nfunction extractOrigin(url) {\r\n var origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nvar canvasService;\r\nvar canvasCtx;\r\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nvar RELATIVE_PATH = /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/|#).*/;\r\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, function (origin, quote1, path1, quote2, path2, path3) {\r\n var filePath = path1 || path2 || path3;\r\n var maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (!RELATIVE_PATH.test(filePath)) {\r\n return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n }\r\n if (filePath[0] === '/') {\r\n return \"url(\".concat(maybeQuote).concat(extractOrigin(href) + filePath).concat(maybeQuote, \")\");\r\n }\r\n var stack = href.split('/');\r\n var parts = filePath.split('/');\r\n stack.pop();\r\n for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\r\n var part = parts_1[_i];\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return \"url(\".concat(maybeQuote).concat(stack.join('/')).concat(maybeQuote, \")\");\r\n });\r\n}\r\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n var pos = 0;\r\n function collectCharacters(regEx) {\r\n var chars;\r\n var match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n var output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n var url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n var descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n var inParens = false;\r\n while (true) {\r\n var c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n var a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n var a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value) {\r\n if (name === 'src' ||\r\n (name === 'href' && value && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n value &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset' && value) {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style' && value) {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data' && value) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else {\r\n return value;\r\n }\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector) {\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (var eIndex = element.classList.length; eIndex--;) {\r\n var className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n if (!node)\r\n return false;\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n }\r\n for (var eIndex = node.classList.length; eIndex--;) {\r\n var className = node.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector) {\r\n var el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n if (typeof maskTextClass === 'string') {\r\n if (el.classList.contains(maskTextClass))\r\n return true;\r\n if (el.closest(\".\".concat(maskTextClass)))\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, maskTextClass, true))\r\n return true;\r\n }\r\n if (maskTextSelector) {\r\n if (el.matches(maskTextSelector))\r\n return true;\r\n if (el.closest(maskTextSelector))\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n var win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n var fired = false;\r\n var readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n var timer_1 = setTimeout(function () {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', function () {\r\n clearTimeout(timer_1);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n var blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n var fired = false;\r\n var styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n var timer = setTimeout(function () {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', function () {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c;\r\n var rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: []\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId: rootId\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc: doc,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskInputFn: maskInputFn,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: newlyAddedElement,\r\n rootId: rootId\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n maskTextFn: maskTextFn,\r\n rootId: rootId\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId: rootId\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId: rootId\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n var docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n var _a;\r\n var maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, maskTextFn = options.maskTextFn, rootId = options.rootId;\r\n var parentTagName = n.parentNode && n.parentNode.tagName;\r\n var textContent = n.textContent;\r\n var isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n var isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n textContent = stringifyStyleSheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(\"Cannot get CSS styles from text's parentNode. Error: \".concat(err), n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n if (!isStyle &&\r\n !isScript &&\r\n textContent &&\r\n needMaskingText(n, maskTextClass, maskTextSelector)) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle: isStyle,\r\n rootId: rootId\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c, rootId = options.rootId;\r\n var needBlock = _isBlockedElement(n, blockClass, blockSelector);\r\n var tagName = getValidTagName(n);\r\n var attributes = {};\r\n var len = n.attributes.length;\r\n for (var i = 0; i < len; i++) {\r\n var attr = n.attributes[i];\r\n attributes[attr.name] = transformAttribute(doc, tagName, attr.name, attr.value);\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n var stylesheet = Array.from(doc.styleSheets).find(function (s) {\r\n return s.href === n.href;\r\n });\r\n var cssText = null;\r\n if (stylesheet) {\r\n cssText = getCssRulesString(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n var cssText = getCssRulesString(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\r\n var value = n.value;\r\n var checked = n.checked;\r\n if (attributes.type !== 'radio' &&\r\n attributes.type !== 'checkbox' &&\r\n attributes.type !== 'submit' &&\r\n attributes.type !== 'button' &&\r\n value) {\r\n attributes.value = maskInputValue({\r\n type: attributes.type,\r\n tagName: tagName,\r\n value: value,\r\n maskInputOptions: maskInputOptions,\r\n maskInputFn: maskInputFn\r\n });\r\n }\r\n else if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n var canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n var blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n var image_1 = n;\r\n var oldValue_1 = image_1.crossOrigin;\r\n image_1.crossOrigin = 'anonymous';\r\n var recordInlineImage = function () {\r\n try {\r\n canvasService.width = image_1.naturalWidth;\r\n canvasService.height = image_1.naturalHeight;\r\n canvasCtx.drawImage(image_1, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(\"Cannot inline img src=\".concat(image_1.currentSrc, \"! Error: \").concat(err));\r\n }\r\n oldValue_1\r\n ? (attributes.crossOrigin = oldValue_1)\r\n : image_1.removeAttribute('crossorigin');\r\n };\r\n if (image_1.complete && image_1.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image_1.onload = recordInlineImage;\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n attributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n attributes.rr_mediaCurrentTime = n.currentTime;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;\r\n attributes = {\r\n \"class\": attributes[\"class\"],\r\n rr_width: \"\".concat(width, \"px\"),\r\n rr_height: \"\".concat(height, \"px\")\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName: tagName,\r\n attributes: attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock: needBlock,\r\n rootId: rootId\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'preload' &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n sn.attributes.href.endsWith('.js')))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.inlineStylesheet, inlineStylesheet = _b === void 0 ? true : _b, _c = options.maskInputOptions, maskInputOptions = _c === void 0 ? {} : _c, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _d = options.dataURLOptions, dataURLOptions = _d === void 0 ? {} : _d, _e = options.inlineImages, inlineImages = _e === void 0 ? false : _e, _f = options.recordCanvas, recordCanvas = _f === void 0 ? false : _f, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _g = options.iframeLoadTimeout, iframeLoadTimeout = _g === void 0 ? 5000 : _g, onStylesheetLoad = options.onStylesheetLoad, _h = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _h === void 0 ? 5000 : _h, _j = options.keepIframeSrcFn, keepIframeSrcFn = _j === void 0 ? function () { return false; } : _j, _k = options.newlyAddedElement, newlyAddedElement = _k === void 0 ? false : _k;\r\n var _l = options.preserveWhiteSpace, preserveWhiteSpace = _l === void 0 ? true : _l;\r\n var _serializedNode = serializeNode(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: newlyAddedElement\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n var id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n var serializedNode = Object.assign(_serializedNode, { id: id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n var recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n var shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n var bypassOptions = {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: skipChild,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n };\r\n for (var _i = 0, _m = Array.from(n.childNodes); _i < _m.length; _i++) {\r\n var childN = _m[_i];\r\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (var _o = 0, _p = Array.from(n.shadowRoot.childNodes); _o < _p.length; _o++) {\r\n var childN = _p[_o];\r\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, function () {\r\n var iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n serializedNode.attributes.rel === 'stylesheet') {\r\n onceStylesheetLoaded(n, function () {\r\n if (onStylesheetLoad) {\r\n var serializedLinkNode = serializeNodeWithId(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n var _a = options || {}, _b = _a.mirror, mirror = _b === void 0 ? new Mirror() : _b, _c = _a.blockClass, blockClass = _c === void 0 ? 'rr-block' : _c, _d = _a.blockSelector, blockSelector = _d === void 0 ? null : _d, _e = _a.maskTextClass, maskTextClass = _e === void 0 ? 'rr-mask' : _e, _f = _a.maskTextSelector, maskTextSelector = _f === void 0 ? null : _f, _g = _a.inlineStylesheet, inlineStylesheet = _g === void 0 ? true : _g, _h = _a.inlineImages, inlineImages = _h === void 0 ? false : _h, _j = _a.recordCanvas, recordCanvas = _j === void 0 ? false : _j, _k = _a.maskAllInputs, maskAllInputs = _k === void 0 ? false : _k, maskTextFn = _a.maskTextFn, maskInputFn = _a.maskInputFn, _l = _a.slimDOM, slimDOM = _l === void 0 ? false : _l, dataURLOptions = _a.dataURLOptions, preserveWhiteSpace = _a.preserveWhiteSpace, onSerialize = _a.onSerialize, onIframeLoad = _a.onIframeLoad, iframeLoadTimeout = _a.iframeLoadTimeout, onStylesheetLoad = _a.onStylesheetLoad, stylesheetLoadTimeout = _a.stylesheetLoadTimeout, _m = _a.keepIframeSrcFn, keepIframeSrcFn = _m === void 0 ? function () { return false; } : _m;\r\n var maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true\r\n }\r\n : maskAllInputs === false\r\n ? {\r\n password: true\r\n }\r\n : maskAllInputs;\r\n var slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: false\r\n });\r\n}\r\n\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options) {\r\n if (options === void 0) { options = {}; }\r\n var lineno = 1;\r\n var column = 1;\r\n function updatePosition(str) {\r\n var lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n var i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n var start = { line: lineno, column: column };\r\n return function (node) {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n var Position = (function () {\r\n function Position(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column: column };\r\n this.source = options.source;\r\n }\r\n return Position;\r\n }());\r\n Position.prototype.content = css;\r\n var errorsList = [];\r\n function error(msg) {\r\n var err = new Error(\"\".concat(options.source || '', \":\").concat(lineno, \":\").concat(column, \": \").concat(msg));\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n var rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList\r\n }\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n var node;\r\n var rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node !== false) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n var m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n var str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules) {\r\n if (rules === void 0) { rules = []; }\r\n var c;\r\n while ((c = comment())) {\r\n if (c !== false) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n var pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n var i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n var str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str\r\n });\r\n }\r\n function selector() {\r\n var m = match(/^([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n return trim(m[0])\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\r\n return m.replace(/,/g, '\\u200C');\r\n })\r\n .split(/\\s*(?![^(]*\\)),\\s*/)\r\n .map(function (s) {\r\n return s.replace(/\\u200C/g, ',');\r\n });\r\n }\r\n function declaration() {\r\n var pos = position();\r\n var propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n var prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(\"property missing ':'\");\r\n }\r\n var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n var ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : ''\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n var decls = [];\r\n if (!open()) {\r\n return error(\"missing '{'\");\r\n }\r\n comments(decls);\r\n var decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(\"missing '}'\");\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n var m;\r\n var vals = [];\r\n var pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations()\r\n });\r\n }\r\n function atkeyframes() {\r\n var pos = position();\r\n var m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n var vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n var name = m[1];\r\n if (!open()) {\r\n return error(\"@keyframes missing '{'\");\r\n }\r\n var frame;\r\n var frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@keyframes missing '}'\");\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name: name,\r\n vendor: vendor,\r\n keyframes: frames\r\n });\r\n }\r\n function atsupports() {\r\n var pos = position();\r\n var m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var supports = trim(m[1]);\r\n if (!open()) {\r\n return error(\"@supports missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@supports missing '}'\");\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports: supports,\r\n rules: style\r\n });\r\n }\r\n function athost() {\r\n var pos = position();\r\n var m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(\"@host missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@host missing '}'\");\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style\r\n });\r\n }\r\n function atmedia() {\r\n var pos = position();\r\n var m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var media = trim(m[1]);\r\n if (!open()) {\r\n return error(\"@media missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@media missing '}'\");\r\n }\r\n return pos({\r\n type: 'media',\r\n media: media,\r\n rules: style\r\n });\r\n }\r\n function atcustommedia() {\r\n var pos = position();\r\n var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2])\r\n });\r\n }\r\n function atpage() {\r\n var pos = position();\r\n var m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n var sel = selector() || [];\r\n if (!open()) {\r\n return error(\"@page missing '{'\");\r\n }\r\n var decls = comments();\r\n var decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@page missing '}'\");\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls\r\n });\r\n }\r\n function atdocument() {\r\n var pos = position();\r\n var m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var vendor = trim(m[1]);\r\n var doc = trim(m[2]);\r\n if (!open()) {\r\n return error(\"@document missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@document missing '}'\");\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor: vendor,\r\n rules: style\r\n });\r\n }\r\n function atfontface() {\r\n var pos = position();\r\n var m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(\"@font-face missing '{'\");\r\n }\r\n var decls = comments();\r\n var decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@font-face missing '}'\");\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls\r\n });\r\n }\r\n var atimport = _compileAtrule('import');\r\n var atcharset = _compileAtrule('charset');\r\n var atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return function () {\r\n var pos = position();\r\n var m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n var ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n var pos = position();\r\n var sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations()\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n var isNode = obj && typeof obj.type === 'string';\r\n var childParent = isNode ? obj : parent;\r\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\r\n var k = _a[_i];\r\n var value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach(function (v) {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null\r\n });\r\n }\r\n return obj;\r\n}\n\nvar tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient'\r\n};\r\nfunction getTagName(n) {\r\n var tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nvar HOVER_SELECTOR = /([^\\\\]):hover/;\r\nvar HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n var cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n var ast = parse(cssText, {\r\n silent: true\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n var selectors = [];\r\n ast.stylesheet.rules.forEach(function (rule) {\r\n if ('selectors' in rule) {\r\n (rule.selectors || []).forEach(function (selector) {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n });\r\n if (selectors.length === 0) {\r\n return cssText;\r\n }\r\n var selectorMatcher = new RegExp(selectors\r\n .filter(function (selector, index) { return selectors.indexOf(selector) === index; })\r\n .sort(function (a, b) { return b.length - a.length; })\r\n .map(function (selector) {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n var result = cssText.replace(selectorMatcher, function (selector) {\r\n var newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return \"\".concat(selector, \", \").concat(newSelector);\r\n });\r\n cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n var stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass: stylesWithHoverClass\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n var doc = options.doc, hackCss = options.hackCss, cache = options.cache;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n var tagName = getTagName(n);\r\n var node_1;\r\n if (n.isSVG) {\r\n node_1 = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n node_1 = doc.createElement(tagName);\r\n }\r\n var specialAttributes = {};\r\n for (var name_1 in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name_1)) {\r\n continue;\r\n }\r\n var value = n.attributes[name_1];\r\n if (tagName === 'option' &&\r\n name_1 === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name_1.startsWith('rr_')) {\r\n specialAttributes[name_1] = value;\r\n continue;\r\n }\r\n var isTextarea = tagName === 'textarea' && name_1 === 'value';\r\n var isRemoteOrDynamicCss = tagName === 'style' && name_1 === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = addHoverClass(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n var child = doc.createTextNode(value);\r\n for (var _i = 0, _a = Array.from(node_1.childNodes); _i < _a.length; _i++) {\r\n var c = _a[_i];\r\n if (c.nodeType === node_1.TEXT_NODE) {\r\n node_1.removeChild(c);\r\n }\r\n }\r\n node_1.appendChild(child);\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name_1 === 'xlink:href') {\r\n node_1.setAttributeNS('http://www.w3.org/1999/xlink', name_1, value.toString());\r\n }\r\n else if (name_1 === 'onload' ||\r\n name_1 === 'onclick' ||\r\n name_1.substring(0, 7) === 'onmouse') {\r\n node_1.setAttribute('_' + name_1, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name_1 === 'content') {\r\n node_1.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'preload' &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node_1.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node_1.setAttribute(name_1, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n var _loop_1 = function (name_2) {\r\n var value = specialAttributes[name_2];\r\n if (tagName === 'canvas' && name_2 === 'rr_dataURL') {\r\n var image_1 = document.createElement('img');\r\n image_1.onload = function () {\r\n var ctx = node_1.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image_1, 0, 0, image_1.width, image_1.height);\r\n }\r\n };\r\n image_1.src = value.toString();\r\n if (node_1.RRNodeType)\r\n node_1.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name_2 === 'rr_dataURL') {\r\n var image = node_1;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name_2 === 'rr_width') {\r\n node_1.style.width = value.toString();\r\n }\r\n else if (name_2 === 'rr_height') {\r\n node_1.style.height = value.toString();\r\n }\r\n else if (name_2 === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node_1.currentTime = value;\r\n }\r\n else if (name_2 === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node_1\r\n .play()[\"catch\"](function (e) { return console.warn('media playback error', e); });\r\n break;\r\n case 'paused':\r\n node_1.pause();\r\n break;\r\n }\r\n }\r\n };\r\n for (var name_2 in specialAttributes) {\r\n _loop_1(name_2);\r\n }\r\n if (n.isShadowHost) {\r\n if (!node_1.shadowRoot) {\r\n node_1.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node_1.shadowRoot.firstChild) {\r\n node_1.shadowRoot.removeChild(node_1.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node_1;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? addHoverClass(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n var doc = options.doc, mirror = options.mirror, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.hackCss, hackCss = _b === void 0 ? true : _b, afterAppend = options.afterAppend, cache = options.cache;\r\n var node = buildNode(n, { doc: doc, hackCss: hackCss, cache: cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n }\r\n else {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (var _i = 0, _c = n.childNodes; _i < _c.length; _i++) {\r\n var childN = _c[_i];\r\n var childNode = buildNodeWithSN(childN, {\r\n doc: doc,\r\n mirror: mirror,\r\n skipChild: false,\r\n hackCss: hackCss,\r\n afterAppend: afterAppend,\r\n cache: cache\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (var _i = 0, _a = mirror.getIds(); _i < _a.length; _i++) {\r\n var id = _a[_i];\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n var n = mirror.getMeta(node);\r\n if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n return;\r\n }\r\n var el = node;\r\n for (var name_3 in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name_3) &&\r\n name_3.startsWith('rr_'))) {\r\n continue;\r\n }\r\n var value = n.attributes[name_3];\r\n if (name_3 === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name_3 === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n var doc = options.doc, onVisit = options.onVisit, _a = options.hackCss, hackCss = _a === void 0 ? true : _a, afterAppend = options.afterAppend, cache = options.cache, _b = options.mirror, mirror = _b === void 0 ? new Mirror() : _b;\r\n var node = buildNodeWithSN(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n skipChild: false,\r\n hackCss: hackCss,\r\n afterAppend: afterAppend,\r\n cache: cache\r\n });\r\n visit(mirror, function (visitedNode) {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, createCache, createMirror, genId, getCssRuleString, getCssRulesString, is2DCanvasBlank, isCSSImportRule, isElement, isNativeShadowDom, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, transformAttribute };\n","import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n const options = { capture: true, passive: true };\r\n target.addEventListener(type, fn, options);\r\n return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n '\\r\\n' +\r\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n '\\r\\n' +\r\n 'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n map: {},\r\n getId() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return -1;\r\n },\r\n getNode() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return null;\r\n },\r\n removeNodeFromMap() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n has() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return false;\r\n },\r\n reset() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n _mirror = new Proxy(_mirror, {\r\n get(target, prop, receiver) {\r\n if (prop === 'map') {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n let timeout = null;\r\n let previous = 0;\r\n return function (...args) {\r\n const now = Date.now();\r\n if (!previous && options.leading === false) {\r\n previous = now;\r\n }\r\n const remaining = wait - (now - previous);\r\n const context = this;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n func.apply(context, args);\r\n }\r\n else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(() => {\r\n previous = options.leading === false ? 0 : Date.now();\r\n timeout = null;\r\n func.apply(context, args);\r\n }, remaining);\r\n }\r\n };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n win.Object.defineProperty(target, key, isRevoked\r\n ? d\r\n : {\r\n set(value) {\r\n setTimeout(() => {\r\n d.set.call(this, value);\r\n }, 0);\r\n if (original && original.set) {\r\n original.set.call(this, value);\r\n }\r\n },\r\n });\r\n return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n try {\r\n if (!(name in source)) {\r\n return () => {\r\n };\r\n }\r\n const original = source[name];\r\n const wrapped = replacement(original);\r\n if (typeof wrapped === 'function') {\r\n wrapped.prototype = wrapped.prototype || {};\r\n Object.defineProperties(wrapped, {\r\n __rrweb_original__: {\r\n enumerable: false,\r\n value: original,\r\n },\r\n });\r\n }\r\n source[name] = wrapped;\r\n return () => {\r\n source[name] = original;\r\n };\r\n }\r\n catch (_a) {\r\n return () => {\r\n };\r\n }\r\n}\r\nfunction getWindowHeight() {\r\n return (window.innerHeight ||\r\n (document.documentElement && document.documentElement.clientHeight) ||\r\n (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n return (window.innerWidth ||\r\n (document.documentElement && document.documentElement.clientWidth) ||\r\n (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (!el)\r\n return false;\r\n if (typeof blockClass === 'string') {\r\n if (el.classList.contains(blockClass))\r\n return true;\r\n if (checkAncestors && el.closest('.' + blockClass) !== null)\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, blockClass, checkAncestors))\r\n return true;\r\n }\r\n if (blockSelector) {\r\n if (node.matches(blockSelector))\r\n return true;\r\n if (checkAncestors && el.closest(blockSelector) !== null)\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n if (isShadowRoot(target)) {\r\n return false;\r\n }\r\n const id = mirror.getId(target);\r\n if (!mirror.has(id)) {\r\n return true;\r\n }\r\n if (target.parentNode &&\r\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n if (!target.parentNode) {\r\n return true;\r\n }\r\n return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction isTouchEvent(event) {\r\n return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n win.NodeList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n win.DOMTokenList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if (!Node.prototype.contains) {\r\n Node.prototype.contains = (...args) => {\r\n let node = args[0];\r\n if (!(0 in args)) {\r\n throw new TypeError('1 argument is required');\r\n }\r\n do {\r\n if (this === node) {\r\n return true;\r\n }\r\n } while ((node = node && node.parentNode));\r\n return false;\r\n };\r\n }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n const queueNodeMap = {};\r\n const putIntoMap = (m, parent) => {\r\n const nodeInTree = {\r\n value: m,\r\n parent,\r\n children: [],\r\n };\r\n queueNodeMap[m.node.id] = nodeInTree;\r\n return nodeInTree;\r\n };\r\n const queueNodeTrees = [];\r\n for (const mutation of queue) {\r\n const { nextId, parentId } = mutation;\r\n if (nextId && nextId in queueNodeMap) {\r\n const nextInTree = queueNodeMap[nextId];\r\n if (nextInTree.parent) {\r\n const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n }\r\n else {\r\n const idx = queueNodeTrees.indexOf(nextInTree);\r\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n }\r\n continue;\r\n }\r\n if (parentId in queueNodeMap) {\r\n const parentInTree = queueNodeMap[parentId];\r\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n continue;\r\n }\r\n queueNodeTrees.push(putIntoMap(mutation, null));\r\n }\r\n return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n cb(tree.value);\r\n for (let i = tree.children.length - 1; i >= 0; i--) {\r\n iterateResolveTree(tree.children[i], cb);\r\n }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n return Boolean(n.nodeName === 'LINK' &&\r\n n.nodeType === n.ELEMENT_NODE &&\r\n n.getAttribute &&\r\n n.getAttribute('rel') === 'stylesheet' &&\r\n mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n var _a, _b;\r\n const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n if (!frameElement || frameElement === rootIframe) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n relativeScale: 1,\r\n absoluteScale: 1,\r\n };\r\n }\r\n const frameDimension = frameElement.getBoundingClientRect();\r\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n return {\r\n x: frameDimension.x * frameBaseDimension.relativeScale +\r\n frameBaseDimension.x,\r\n y: frameDimension.y * frameBaseDimension.relativeScale +\r\n frameBaseDimension.y,\r\n relativeScale,\r\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n };\r\n}\r\nfunction hasShadowRoot(n) {\r\n return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n const rule = rules[position[0]];\r\n if (position.length === 1) {\r\n return rule;\r\n }\r\n else {\r\n return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n const positions = [...nestedIndex];\r\n const index = positions.pop();\r\n return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n const idSet = new Set();\r\n const uniqueMutations = [];\r\n for (let i = mutations.length; i--;) {\r\n const mutation = mutations[i];\r\n if (!idSet.has(mutation.id)) {\r\n uniqueMutations.push(mutation);\r\n idSet.add(mutation.id);\r\n }\r\n }\r\n return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n constructor() {\r\n this.id = 1;\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n }\r\n getId(stylesheet) {\r\n var _a;\r\n return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n }\r\n has(stylesheet) {\r\n return this.styleIDMap.has(stylesheet);\r\n }\r\n add(stylesheet, id) {\r\n if (this.has(stylesheet))\r\n return this.getId(stylesheet);\r\n let newId;\r\n if (id === undefined) {\r\n newId = this.id++;\r\n }\r\n else\r\n newId = id;\r\n this.styleIDMap.set(stylesheet, newId);\r\n this.idStyleMap.set(newId, stylesheet);\r\n return newId;\r\n }\r\n getStyle(id) {\r\n return this.idStyleMap.get(id) || null;\r\n }\r\n reset() {\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n this.id = 1;\r\n }\r\n generateId() {\r\n return this.id++;\r\n }\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getWindowHeight, getWindowWidth, hasShadowRoot, hookSetter, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, isTouchEvent, iterateResolveTree, on, patch, polyfill, queueToResolveTrees, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, maskInputValue, transformAttribute, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n constructor() {\r\n this.length = 0;\r\n this.head = null;\r\n }\r\n get(position) {\r\n if (position >= this.length) {\r\n throw new Error('Position outside of list range');\r\n }\r\n let current = this.head;\r\n for (let index = 0; index < position; index++) {\r\n current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n }\r\n return current;\r\n }\r\n addNode(n) {\r\n const node = {\r\n value: n,\r\n previous: null,\r\n next: null,\r\n };\r\n n.__ln = node;\r\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n const current = n.previousSibling.__ln.next;\r\n node.next = current;\r\n node.previous = n.previousSibling.__ln;\r\n n.previousSibling.__ln.next = node;\r\n if (current) {\r\n current.previous = node;\r\n }\r\n }\r\n else if (n.nextSibling &&\r\n isNodeInLinkedList(n.nextSibling) &&\r\n n.nextSibling.__ln.previous) {\r\n const current = n.nextSibling.__ln.previous;\r\n node.previous = current;\r\n node.next = n.nextSibling.__ln;\r\n n.nextSibling.__ln.previous = node;\r\n if (current) {\r\n current.next = node;\r\n }\r\n }\r\n else {\r\n if (this.head) {\r\n this.head.previous = node;\r\n }\r\n node.next = this.head;\r\n this.head = node;\r\n }\r\n this.length++;\r\n }\r\n removeNode(n) {\r\n const current = n.__ln;\r\n if (!this.head) {\r\n return;\r\n }\r\n if (!current.previous) {\r\n this.head = current.next;\r\n if (this.head) {\r\n this.head.previous = null;\r\n }\r\n }\r\n else {\r\n current.previous.next = current.next;\r\n if (current.next) {\r\n current.next.previous = current.previous;\r\n }\r\n }\r\n if (n.__ln) {\r\n delete n.__ln;\r\n }\r\n this.length--;\r\n }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n constructor() {\r\n this.frozen = false;\r\n this.locked = false;\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.mapRemoves = [];\r\n this.movedMap = {};\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.processMutations = (mutations) => {\r\n mutations.forEach(this.processMutation);\r\n this.emit();\r\n };\r\n this.emit = () => {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const adds = [];\r\n const addList = new DoubleLinkedList();\r\n const getNextId = (n) => {\r\n let ns = n;\r\n let nextId = IGNORED_NODE;\r\n while (nextId === IGNORED_NODE) {\r\n ns = ns && ns.nextSibling;\r\n nextId = ns && this.mirror.getId(ns);\r\n }\r\n return nextId;\r\n };\r\n const pushAdd = (n) => {\r\n var _a, _b, _c, _d;\r\n let shadowHost = null;\r\n if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n n.getRootNode().host)\r\n shadowHost = n.getRootNode().host;\r\n let rootShadowHost = shadowHost;\r\n while (((_d = (_c = rootShadowHost === null || rootShadowHost === void 0 ? void 0 : rootShadowHost.getRootNode) === null || _c === void 0 ? void 0 : _c.call(rootShadowHost)) === null || _d === void 0 ? void 0 : _d.nodeType) ===\r\n Node.DOCUMENT_FRAGMENT_NODE &&\r\n rootShadowHost.getRootNode().host)\r\n rootShadowHost = rootShadowHost.getRootNode().host;\r\n const notInDoc = !this.doc.contains(n) &&\r\n (!rootShadowHost || !this.doc.contains(rootShadowHost));\r\n if (!n.parentNode || notInDoc) {\r\n return;\r\n }\r\n const parentId = isShadowRoot(n.parentNode)\r\n ? this.mirror.getId(shadowHost)\r\n : this.mirror.getId(n.parentNode);\r\n const nextId = getNextId(n);\r\n if (parentId === -1 || nextId === -1) {\r\n return addList.addNode(n);\r\n }\r\n const sn = serializeNodeWithId(n, {\r\n doc: this.doc,\r\n mirror: this.mirror,\r\n blockClass: this.blockClass,\r\n blockSelector: this.blockSelector,\r\n maskTextClass: this.maskTextClass,\r\n maskTextSelector: this.maskTextSelector,\r\n skipChild: true,\r\n newlyAddedElement: true,\r\n inlineStylesheet: this.inlineStylesheet,\r\n maskInputOptions: this.maskInputOptions,\r\n maskTextFn: this.maskTextFn,\r\n maskInputFn: this.maskInputFn,\r\n slimDOMOptions: this.slimDOMOptions,\r\n dataURLOptions: this.dataURLOptions,\r\n recordCanvas: this.recordCanvas,\r\n inlineImages: this.inlineImages,\r\n onSerialize: (currentN) => {\r\n if (isSerializedIframe(currentN, this.mirror)) {\r\n this.iframeManager.addIframe(currentN);\r\n }\r\n if (isSerializedStylesheet(currentN, this.mirror)) {\r\n this.stylesheetManager.trackLinkElement(currentN);\r\n }\r\n if (hasShadowRoot(n)) {\r\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n this.iframeManager.attachIframe(iframe, childSn);\r\n this.shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (link, childSn) => {\r\n this.stylesheetManager.attachLinkElement(link, childSn);\r\n },\r\n });\r\n if (sn) {\r\n adds.push({\r\n parentId,\r\n nextId,\r\n node: sn,\r\n });\r\n }\r\n };\r\n while (this.mapRemoves.length) {\r\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n }\r\n for (const n of Array.from(this.movedSet.values())) {\r\n if (isParentRemoved(this.removes, n, this.mirror) &&\r\n !this.movedSet.has(n.parentNode)) {\r\n continue;\r\n }\r\n pushAdd(n);\r\n }\r\n for (const n of Array.from(this.addedSet.values())) {\r\n if (!isAncestorInSet(this.droppedSet, n) &&\r\n !isParentRemoved(this.removes, n, this.mirror)) {\r\n pushAdd(n);\r\n }\r\n else if (isAncestorInSet(this.movedSet, n)) {\r\n pushAdd(n);\r\n }\r\n else {\r\n this.droppedSet.add(n);\r\n }\r\n }\r\n let candidate = null;\r\n while (addList.length) {\r\n let node = null;\r\n if (candidate) {\r\n const parentId = this.mirror.getId(candidate.value.parentNode);\r\n const nextId = getNextId(candidate.value);\r\n if (parentId !== -1 && nextId !== -1) {\r\n node = candidate;\r\n }\r\n }\r\n if (!node) {\r\n for (let index = addList.length - 1; index >= 0; index--) {\r\n const _node = addList.get(index);\r\n if (_node) {\r\n const parentId = this.mirror.getId(_node.value.parentNode);\r\n const nextId = getNextId(_node.value);\r\n if (nextId === -1)\r\n continue;\r\n else if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n else {\r\n const unhandledNode = _node.value;\r\n if (unhandledNode.parentNode &&\r\n unhandledNode.parentNode.nodeType ===\r\n Node.DOCUMENT_FRAGMENT_NODE) {\r\n const shadowHost = unhandledNode.parentNode\r\n .host;\r\n const parentId = this.mirror.getId(shadowHost);\r\n if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!node) {\r\n while (addList.head) {\r\n addList.removeNode(addList.head.value);\r\n }\r\n break;\r\n }\r\n candidate = node.previous;\r\n addList.removeNode(node.value);\r\n pushAdd(node.value);\r\n }\r\n const payload = {\r\n texts: this.texts\r\n .map((text) => ({\r\n id: this.mirror.getId(text.node),\r\n value: text.value,\r\n }))\r\n .filter((text) => this.mirror.has(text.id)),\r\n attributes: this.attributes\r\n .map((attribute) => ({\r\n id: this.mirror.getId(attribute.node),\r\n attributes: attribute.attributes,\r\n }))\r\n .filter((attribute) => this.mirror.has(attribute.id)),\r\n removes: this.removes,\r\n adds,\r\n };\r\n if (!payload.texts.length &&\r\n !payload.attributes.length &&\r\n !payload.removes.length &&\r\n !payload.adds.length) {\r\n return;\r\n }\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.movedMap = {};\r\n this.mutationCb(payload);\r\n };\r\n this.processMutation = (m) => {\r\n if (isIgnored(m.target, this.mirror)) {\r\n return;\r\n }\r\n switch (m.type) {\r\n case 'characterData': {\r\n const value = m.target.textContent;\r\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) &&\r\n value !== m.oldValue) {\r\n this.texts.push({\r\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector) && value\r\n ? this.maskTextFn\r\n ? this.maskTextFn(value)\r\n : value.replace(/[\\S]/g, '*')\r\n : value,\r\n node: m.target,\r\n });\r\n }\r\n break;\r\n }\r\n case 'attributes': {\r\n const target = m.target;\r\n let value = m.target.getAttribute(m.attributeName);\r\n if (m.attributeName === 'value') {\r\n value = maskInputValue({\r\n maskInputOptions: this.maskInputOptions,\r\n tagName: m.target.tagName,\r\n type: m.target.getAttribute('type'),\r\n value,\r\n maskInputFn: this.maskInputFn,\r\n });\r\n }\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n value === m.oldValue) {\r\n return;\r\n }\r\n let item = this.attributes.find((a) => a.node === m.target);\r\n if (target.tagName === 'IFRAME' &&\r\n m.attributeName === 'src' &&\r\n !this.keepIframeSrcFn(value)) {\r\n if (!target.contentDocument) {\r\n m.attributeName = 'rr_src';\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!item) {\r\n item = {\r\n node: m.target,\r\n attributes: {},\r\n };\r\n this.attributes.push(item);\r\n }\r\n if (m.attributeName === 'style') {\r\n const old = this.doc.createElement('span');\r\n if (m.oldValue) {\r\n old.setAttribute('style', m.oldValue);\r\n }\r\n if (item.attributes.style === undefined ||\r\n item.attributes.style === null) {\r\n item.attributes.style = {};\r\n }\r\n const styleObj = item.attributes.style;\r\n for (const pname of Array.from(target.style)) {\r\n const newValue = target.style.getPropertyValue(pname);\r\n const newPriority = target.style.getPropertyPriority(pname);\r\n if (newValue !== old.style.getPropertyValue(pname) ||\r\n newPriority !== old.style.getPropertyPriority(pname)) {\r\n if (newPriority === '') {\r\n styleObj[pname] = newValue;\r\n }\r\n else {\r\n styleObj[pname] = [newValue, newPriority];\r\n }\r\n }\r\n }\r\n for (const pname of Array.from(old.style)) {\r\n if (target.style.getPropertyValue(pname) === '') {\r\n styleObj[pname] = false;\r\n }\r\n }\r\n }\r\n else {\r\n item.attributes[m.attributeName] = transformAttribute(this.doc, target.tagName, m.attributeName, value);\r\n }\r\n break;\r\n }\r\n case 'childList': {\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\r\n return;\r\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n m.removedNodes.forEach((n) => {\r\n const nodeId = this.mirror.getId(n);\r\n const parentId = isShadowRoot(m.target)\r\n ? this.mirror.getId(m.target.host)\r\n : this.mirror.getId(m.target);\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n isIgnored(n, this.mirror) ||\r\n !isSerialized(n, this.mirror)) {\r\n return;\r\n }\r\n if (this.addedSet.has(n)) {\r\n deepDelete(this.addedSet, n);\r\n this.droppedSet.add(n);\r\n }\r\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n else if (this.movedSet.has(n) &&\r\n this.movedMap[moveKey(nodeId, parentId)]) {\r\n deepDelete(this.movedSet, n);\r\n }\r\n else {\r\n this.removes.push({\r\n parentId,\r\n id: nodeId,\r\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n ? true\r\n : undefined,\r\n });\r\n }\r\n this.mapRemoves.push(n);\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n this.genAdds = (n, target) => {\r\n if (this.mirror.hasNode(n)) {\r\n if (isIgnored(n, this.mirror)) {\r\n return;\r\n }\r\n this.movedSet.add(n);\r\n let targetId = null;\r\n if (target && this.mirror.hasNode(target)) {\r\n targetId = this.mirror.getId(target);\r\n }\r\n if (targetId && targetId !== -1) {\r\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n }\r\n }\r\n else {\r\n this.addedSet.add(n);\r\n this.droppedSet.delete(n);\r\n }\r\n if (!isBlocked(n, this.blockClass, this.blockSelector, false))\r\n n.childNodes.forEach((childN) => this.genAdds(childN));\r\n };\r\n }\r\n init(options) {\r\n [\r\n 'mutationCb',\r\n 'blockClass',\r\n 'blockSelector',\r\n 'maskTextClass',\r\n 'maskTextSelector',\r\n 'inlineStylesheet',\r\n 'maskInputOptions',\r\n 'maskTextFn',\r\n 'maskInputFn',\r\n 'keepIframeSrcFn',\r\n 'recordCanvas',\r\n 'inlineImages',\r\n 'slimDOMOptions',\r\n 'dataURLOptions',\r\n 'doc',\r\n 'mirror',\r\n 'iframeManager',\r\n 'stylesheetManager',\r\n 'shadowDomManager',\r\n 'canvasManager',\r\n ].forEach((key) => {\r\n this[key] = options[key];\r\n });\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n this.canvasManager.freeze();\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n this.canvasManager.unfreeze();\r\n this.emit();\r\n }\r\n isFrozen() {\r\n return this.frozen;\r\n }\r\n lock() {\r\n this.locked = true;\r\n this.canvasManager.lock();\r\n }\r\n unlock() {\r\n this.locked = false;\r\n this.canvasManager.unlock();\r\n this.emit();\r\n }\r\n reset() {\r\n this.shadowDomManager.reset();\r\n this.canvasManager.reset();\r\n }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n addsSet.delete(n);\r\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n if (removes.length === 0)\r\n return false;\r\n return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const parentId = mirror.getId(parentNode);\r\n if (removes.some((r) => r.id === parentId)) {\r\n return true;\r\n }\r\n return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n if (set.size === 0)\r\n return false;\r\n return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n if (set.has(parentNode)) {\r\n return true;\r\n }\r\n return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","import { maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowHeight, getWindowWidth, hookSetter, patch, isTouchEvent } from '../utils.js';\nimport { MouseInteractions, IncrementalSource } from '../../../types/dist/types.js';\nimport MutationBuffer from './mutation.js';\n\nconst mutationBuffers = [];\r\nconst isCSSGroupingRuleSupported = typeof CSSGroupingRule !== 'undefined';\r\nconst isCSSMediaRuleSupported = typeof CSSMediaRule !== 'undefined';\r\nconst isCSSSupportsRuleSupported = typeof CSSSupportsRule !== 'undefined';\r\nconst isCSSConditionRuleSupported = typeof CSSConditionRule !== 'undefined';\r\nfunction getEventTarget(event) {\r\n try {\r\n if ('composedPath' in event) {\r\n const path = event.composedPath();\r\n if (path.length) {\r\n return path[0];\r\n }\r\n }\r\n else if ('path' in event && event.path.length) {\r\n return event.path[0];\r\n }\r\n return event.target;\r\n }\r\n catch (_a) {\r\n return event.target;\r\n }\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n var _a, _b;\r\n const mutationBuffer = new MutationBuffer();\r\n mutationBuffers.push(mutationBuffer);\r\n mutationBuffer.init(options);\r\n let mutationObserverCtor = window.MutationObserver ||\r\n window.__rrMutationObserver;\r\n const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n if (angularZoneSymbol &&\r\n window[angularZoneSymbol]) {\r\n mutationObserverCtor = window[angularZoneSymbol];\r\n }\r\n const observer = new mutationObserverCtor(mutationBuffer.processMutations.bind(mutationBuffer));\r\n observer.observe(rootEl, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n characterData: true,\r\n characterDataOldValue: true,\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n if (sampling.mousemove === false) {\r\n return () => {\r\n };\r\n }\r\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n ? sampling.mousemoveCallback\r\n : 500;\r\n let positions = [];\r\n let timeBaseline;\r\n const wrappedCb = throttle((source) => {\r\n const totalOffset = Date.now() - timeBaseline;\r\n mousemoveCb(positions.map((p) => {\r\n p.timeOffset -= totalOffset;\r\n return p;\r\n }), source);\r\n positions = [];\r\n timeBaseline = null;\r\n }, callbackThreshold);\r\n const updatePosition = throttle((evt) => {\r\n const target = getEventTarget(evt);\r\n const { clientX, clientY } = isTouchEvent(evt)\r\n ? evt.changedTouches[0]\r\n : evt;\r\n if (!timeBaseline) {\r\n timeBaseline = Date.now();\r\n }\r\n positions.push({\r\n x: clientX,\r\n y: clientY,\r\n id: mirror.getId(target),\r\n timeOffset: Date.now() - timeBaseline,\r\n });\r\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n ? IncrementalSource.Drag\r\n : evt instanceof MouseEvent\r\n ? IncrementalSource.MouseMove\r\n : IncrementalSource.TouchMove);\r\n }, threshold, {\r\n trailing: false,\r\n });\r\n const handlers = [\r\n on('mousemove', updatePosition, doc),\r\n on('touchmove', updatePosition, doc),\r\n on('drag', updatePosition, doc),\r\n ];\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n if (sampling.mouseInteraction === false) {\r\n return () => {\r\n };\r\n }\r\n const disableMap = sampling.mouseInteraction === true ||\r\n sampling.mouseInteraction === undefined\r\n ? {}\r\n : sampling.mouseInteraction;\r\n const handlers = [];\r\n const getHandler = (eventKey) => {\r\n return (event) => {\r\n const target = getEventTarget(event);\r\n if (isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const e = isTouchEvent(event) ? event.changedTouches[0] : event;\r\n if (!e) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n const { clientX, clientY } = e;\r\n mouseInteractionCb({\r\n type: MouseInteractions[eventKey],\r\n id,\r\n x: clientX,\r\n y: clientY,\r\n });\r\n };\r\n };\r\n Object.keys(MouseInteractions)\r\n .filter((key) => Number.isNaN(Number(key)) &&\r\n !key.endsWith('_Departed') &&\r\n disableMap[key] !== false)\r\n .forEach((eventKey) => {\r\n const eventName = eventKey.toLowerCase();\r\n const handler = getHandler(eventKey);\r\n handlers.push(on(eventName, handler, doc));\r\n });\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n const updatePosition = throttle((evt) => {\r\n const target = getEventTarget(evt);\r\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n if (target === doc) {\r\n const scrollEl = (doc.scrollingElement || doc.documentElement);\r\n scrollCb({\r\n id,\r\n x: scrollEl.scrollLeft,\r\n y: scrollEl.scrollTop,\r\n });\r\n }\r\n else {\r\n scrollCb({\r\n id,\r\n x: target.scrollLeft,\r\n y: target.scrollTop,\r\n });\r\n }\r\n }, sampling.scroll || 100);\r\n return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb, }) {\r\n let lastH = -1;\r\n let lastW = -1;\r\n const updateDimension = throttle(() => {\r\n const height = getWindowHeight();\r\n const width = getWindowWidth();\r\n if (lastH !== height || lastW !== width) {\r\n viewportResizeCb({\r\n width: Number(width),\r\n height: Number(height),\r\n });\r\n lastH = height;\r\n lastW = width;\r\n }\r\n }, 200);\r\n return on('resize', updateDimension, window);\r\n}\r\nfunction wrapEventWithUserTriggeredFlag(v, enable) {\r\n const value = Object.assign({}, v);\r\n if (!enable)\r\n delete value.userTriggered;\r\n return value;\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, ignoreClass, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, }) {\r\n function eventHandler(event) {\r\n let target = getEventTarget(event);\r\n const userTriggered = event.isTrusted;\r\n if (target && target.tagName === 'OPTION')\r\n target = target.parentElement;\r\n if (!target ||\r\n !target.tagName ||\r\n INPUT_TAGS.indexOf(target.tagName) < 0 ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const type = target.type;\r\n if (target.classList.contains(ignoreClass)) {\r\n return;\r\n }\r\n let text = target.value;\r\n let isChecked = false;\r\n if (type === 'radio' || type === 'checkbox') {\r\n isChecked = target.checked;\r\n }\r\n else if (maskInputOptions[target.tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n text = maskInputValue({\r\n maskInputOptions,\r\n tagName: target.tagName,\r\n type,\r\n value: text,\r\n maskInputFn,\r\n });\r\n }\r\n cbWithDedup(target, wrapEventWithUserTriggeredFlag({ text, isChecked, userTriggered }, userTriggeredOnInput));\r\n const name = target.name;\r\n if (type === 'radio' && name && isChecked) {\r\n doc\r\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n .forEach((el) => {\r\n if (el !== target) {\r\n cbWithDedup(el, wrapEventWithUserTriggeredFlag({\r\n text: el.value,\r\n isChecked: !isChecked,\r\n userTriggered: false,\r\n }, userTriggeredOnInput));\r\n }\r\n });\r\n }\r\n }\r\n function cbWithDedup(target, v) {\r\n const lastInputValue = lastInputValueMap.get(target);\r\n if (!lastInputValue ||\r\n lastInputValue.text !== v.text ||\r\n lastInputValue.isChecked !== v.isChecked) {\r\n lastInputValueMap.set(target, v);\r\n const id = mirror.getId(target);\r\n inputCb(Object.assign(Object.assign({}, v), { id }));\r\n }\r\n }\r\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n const handlers = events.map((eventName) => on(eventName, eventHandler, doc));\r\n const currentWindow = doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n }\r\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n const hookProperties = [\r\n [currentWindow.HTMLInputElement.prototype, 'value'],\r\n [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n ];\r\n if (propertyDescriptor && propertyDescriptor.set) {\r\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n set() {\r\n eventHandler({ target: this });\r\n },\r\n }, false, currentWindow)));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n const positions = [];\r\n function recurse(childRule, pos) {\r\n if ((isCSSGroupingRuleSupported &&\r\n childRule.parentRule instanceof CSSGroupingRule) ||\r\n (isCSSMediaRuleSupported &&\r\n childRule.parentRule instanceof CSSMediaRule) ||\r\n (isCSSSupportsRuleSupported &&\r\n childRule.parentRule instanceof CSSSupportsRule) ||\r\n (isCSSConditionRuleSupported &&\r\n childRule.parentRule instanceof CSSConditionRule)) {\r\n const rules = Array.from(childRule.parentRule.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n else if (childRule.parentStyleSheet) {\r\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n return pos;\r\n }\r\n return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n let id, styleId;\r\n if (!sheet)\r\n return {};\r\n if (sheet.ownerNode)\r\n id = mirror.getId(sheet.ownerNode);\r\n else\r\n styleId = styleMirror.getId(sheet);\r\n return {\r\n styleId,\r\n id,\r\n };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n win.CSSStyleSheet.prototype.insertRule = function (rule, index) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [{ rule, index }],\r\n });\r\n }\r\n return insertRule.apply(this, [rule, index]);\r\n };\r\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n win.CSSStyleSheet.prototype.deleteRule = function (index) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [{ index }],\r\n });\r\n }\r\n return deleteRule.apply(this, [index]);\r\n };\r\n let replace;\r\n if (win.CSSStyleSheet.prototype.replace) {\r\n replace = win.CSSStyleSheet.prototype.replace;\r\n win.CSSStyleSheet.prototype.replace = function (text) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replace: text,\r\n });\r\n }\r\n return replace.apply(this, [text]);\r\n };\r\n }\r\n let replaceSync;\r\n if (win.CSSStyleSheet.prototype.replaceSync) {\r\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n win.CSSStyleSheet.prototype.replaceSync = function (text) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replaceSync: text,\r\n });\r\n }\r\n return replaceSync.apply(this, [text]);\r\n };\r\n }\r\n const supportedNestedCSSRuleTypes = {};\r\n if (isCSSGroupingRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n }\r\n else {\r\n if (isCSSMediaRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n }\r\n if (isCSSConditionRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n }\r\n if (isCSSSupportsRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n }\r\n }\r\n const unmodifiedFunctions = {};\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n unmodifiedFunctions[typeKey] = {\r\n insertRule: type.prototype.insertRule,\r\n deleteRule: type.prototype.deleteRule,\r\n };\r\n type.prototype.insertRule = function (rule, index) {\r\n const { id, styleId } = getIdAndStyleId(this.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [\r\n {\r\n rule,\r\n index: [\r\n ...getNestedCSSRulePositions(this),\r\n index || 0,\r\n ],\r\n },\r\n ],\r\n });\r\n }\r\n return unmodifiedFunctions[typeKey].insertRule.apply(this, [rule, index]);\r\n };\r\n type.prototype.deleteRule = function (index) {\r\n const { id, styleId } = getIdAndStyleId(this.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [\r\n { index: [...getNestedCSSRulePositions(this), index] },\r\n ],\r\n });\r\n }\r\n return unmodifiedFunctions[typeKey].deleteRule.apply(this, [index]);\r\n };\r\n });\r\n return () => {\r\n win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n });\r\n };\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n var _a, _b, _c;\r\n let hostId = null;\r\n if (host.nodeName === '#document')\r\n hostId = mirror.getId(host);\r\n else\r\n hostId = mirror.getId(host.host);\r\n const patchTarget = host.nodeName === '#document'\r\n ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n const originalPropertyDescriptor = Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets');\r\n if (hostId === null ||\r\n hostId === -1 ||\r\n !patchTarget ||\r\n !originalPropertyDescriptor)\r\n return () => {\r\n };\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get() {\r\n var _a;\r\n return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n },\r\n set(sheets) {\r\n var _a;\r\n const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n if (hostId !== null && hostId !== -1) {\r\n try {\r\n stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return result;\r\n },\r\n });\r\n return () => {\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get: originalPropertyDescriptor.get,\r\n set: originalPropertyDescriptor.set,\r\n });\r\n };\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n win.CSSStyleDeclaration.prototype.setProperty = function (property, value, priority) {\r\n var _a;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return setProperty.apply(this, [property, value, priority]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n set: {\r\n property,\r\n value,\r\n priority,\r\n },\r\n index: getNestedCSSRulePositions(this.parentRule),\r\n });\r\n }\r\n return setProperty.apply(this, [property, value, priority]);\r\n };\r\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = function (property) {\r\n var _a;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return removeProperty.apply(this, [property]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n remove: {\r\n property,\r\n },\r\n index: getNestedCSSRulePositions(this.parentRule),\r\n });\r\n }\r\n return removeProperty.apply(this, [property]);\r\n };\r\n return () => {\r\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n };\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, mirror, sampling, }) {\r\n const handler = (type) => throttle((event) => {\r\n const target = getEventTarget(event);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const { currentTime, volume, muted, playbackRate, } = target;\r\n mediaInteractionCb({\r\n type,\r\n id: mirror.getId(target),\r\n currentTime,\r\n volume,\r\n muted,\r\n playbackRate,\r\n });\r\n }, sampling.media || 500);\r\n const handlers = [\r\n on('play', handler(0)),\r\n on('pause', handler(1)),\r\n on('seeked', handler(2)),\r\n on('volumechange', handler(3)),\r\n on('ratechange', handler(4)),\r\n ];\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return () => {\r\n };\r\n }\r\n const handlers = [];\r\n const fontMap = new WeakMap();\r\n const originalFontFace = win.FontFace;\r\n win.FontFace = function FontFace(family, source, descriptors) {\r\n const fontFace = new originalFontFace(family, source, descriptors);\r\n fontMap.set(fontFace, {\r\n family,\r\n buffer: typeof source !== 'string',\r\n descriptors,\r\n fontSource: typeof source === 'string'\r\n ? source\r\n : JSON.stringify(Array.from(new Uint8Array(source))),\r\n });\r\n return fontFace;\r\n };\r\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n return function (fontFace) {\r\n setTimeout(() => {\r\n const p = fontMap.get(fontFace);\r\n if (p) {\r\n fontCb(p);\r\n fontMap.delete(fontFace);\r\n }\r\n }, 0);\r\n return original.apply(this, [fontFace]);\r\n };\r\n });\r\n handlers.push(() => {\r\n win.FontFace = originalFontFace;\r\n });\r\n handlers.push(restoreHandler);\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initSelectionObserver(param) {\r\n const { doc, mirror, blockClass, blockSelector, selectionCb } = param;\r\n let collapsed = true;\r\n const updateSelection = () => {\r\n const selection = doc.getSelection();\r\n if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n return;\r\n collapsed = selection.isCollapsed || false;\r\n const ranges = [];\r\n const count = selection.rangeCount || 0;\r\n for (let i = 0; i < count; i++) {\r\n const range = selection.getRangeAt(i);\r\n const { startContainer, startOffset, endContainer, endOffset } = range;\r\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) ||\r\n isBlocked(endContainer, blockClass, blockSelector, true);\r\n if (blocked)\r\n continue;\r\n ranges.push({\r\n start: mirror.getId(startContainer),\r\n startOffset,\r\n end: mirror.getId(endContainer),\r\n endOffset,\r\n });\r\n }\r\n selectionCb({ ranges });\r\n };\r\n updateSelection();\r\n return on('selectionchange', updateSelection);\r\n}\r\nfunction mergeHooks(o, hooks) {\r\n const { mutationCb, mousemoveCb, mouseInteractionCb, scrollCb, viewportResizeCb, inputCb, mediaInteractionCb, styleSheetRuleCb, styleDeclarationCb, canvasMutationCb, fontCb, selectionCb, } = o;\r\n o.mutationCb = (...p) => {\r\n if (hooks.mutation) {\r\n hooks.mutation(...p);\r\n }\r\n mutationCb(...p);\r\n };\r\n o.mousemoveCb = (...p) => {\r\n if (hooks.mousemove) {\r\n hooks.mousemove(...p);\r\n }\r\n mousemoveCb(...p);\r\n };\r\n o.mouseInteractionCb = (...p) => {\r\n if (hooks.mouseInteraction) {\r\n hooks.mouseInteraction(...p);\r\n }\r\n mouseInteractionCb(...p);\r\n };\r\n o.scrollCb = (...p) => {\r\n if (hooks.scroll) {\r\n hooks.scroll(...p);\r\n }\r\n scrollCb(...p);\r\n };\r\n o.viewportResizeCb = (...p) => {\r\n if (hooks.viewportResize) {\r\n hooks.viewportResize(...p);\r\n }\r\n viewportResizeCb(...p);\r\n };\r\n o.inputCb = (...p) => {\r\n if (hooks.input) {\r\n hooks.input(...p);\r\n }\r\n inputCb(...p);\r\n };\r\n o.mediaInteractionCb = (...p) => {\r\n if (hooks.mediaInteaction) {\r\n hooks.mediaInteaction(...p);\r\n }\r\n mediaInteractionCb(...p);\r\n };\r\n o.styleSheetRuleCb = (...p) => {\r\n if (hooks.styleSheetRule) {\r\n hooks.styleSheetRule(...p);\r\n }\r\n styleSheetRuleCb(...p);\r\n };\r\n o.styleDeclarationCb = (...p) => {\r\n if (hooks.styleDeclaration) {\r\n hooks.styleDeclaration(...p);\r\n }\r\n styleDeclarationCb(...p);\r\n };\r\n o.canvasMutationCb = (...p) => {\r\n if (hooks.canvasMutation) {\r\n hooks.canvasMutation(...p);\r\n }\r\n canvasMutationCb(...p);\r\n };\r\n o.fontCb = (...p) => {\r\n if (hooks.font) {\r\n hooks.font(...p);\r\n }\r\n fontCb(...p);\r\n };\r\n o.selectionCb = (...p) => {\r\n if (hooks.selection) {\r\n hooks.selection(...p);\r\n }\r\n selectionCb(...p);\r\n };\r\n}\r\nfunction initObservers(o, hooks = {}) {\r\n const currentWindow = o.doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n };\r\n }\r\n mergeHooks(o, hooks);\r\n const mutationObserver = initMutationObserver(o, o.doc);\r\n const mousemoveHandler = initMoveObserver(o);\r\n const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n const scrollHandler = initScrollObserver(o);\r\n const viewportResizeHandler = initViewportResizeObserver(o);\r\n const inputHandler = initInputObserver(o);\r\n const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n win: currentWindow,\r\n });\r\n const fontObserver = o.collectFonts\r\n ? initFontObserver(o)\r\n : () => {\r\n };\r\n const selectionObserver = initSelectionObserver(o);\r\n const pluginHandlers = [];\r\n for (const plugin of o.plugins) {\r\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n }\r\n return () => {\r\n mutationBuffers.forEach((b) => b.reset());\r\n mutationObserver.disconnect();\r\n mousemoveHandler();\r\n mouseInteractionHandler();\r\n scrollHandler();\r\n viewportResizeHandler();\r\n inputHandler();\r\n mediaInteractionHandler();\r\n styleSheetObserver();\r\n adoptedStyleSheetObserver();\r\n styleDeclarationObserver();\r\n fontObserver();\r\n selectionObserver();\r\n pluginHandlers.forEach((h) => h());\r\n };\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n constructor(generateIdFn) {\r\n this.generateIdFn = generateIdFn;\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n }\r\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n let id = idToRemoteIdMap.get(remoteId);\r\n if (!id) {\r\n id = this.generateIdFn();\r\n idToRemoteIdMap.set(remoteId, id);\r\n remoteIdToIdMap.set(id, remoteId);\r\n }\r\n return id;\r\n }\r\n getIds(iframe, remoteId) {\r\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n }\r\n getRemoteId(iframe, id, map) {\r\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n if (typeof id !== 'number')\r\n return id;\r\n const remoteId = remoteIdToIdMap.get(id);\r\n if (!remoteId)\r\n return -1;\r\n return remoteId;\r\n }\r\n getRemoteIds(iframe, ids) {\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n }\r\n reset(iframe) {\r\n if (!iframe) {\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n return;\r\n }\r\n this.iframeIdToRemoteIdMap.delete(iframe);\r\n this.iframeRemoteIdToIdMap.delete(iframe);\r\n }\r\n getIdToRemoteIdMap(iframe) {\r\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n if (!idToRemoteIdMap) {\r\n idToRemoteIdMap = new Map();\r\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n }\r\n return idToRemoteIdMap;\r\n }\r\n getRemoteIdToIdMap(iframe) {\r\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n if (!remoteIdToIdMap) {\r\n remoteIdToIdMap = new Map();\r\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n }\r\n return remoteIdToIdMap;\r\n }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\n\nclass IframeManager {\r\n constructor(options) {\r\n this.iframes = new WeakMap();\r\n this.crossOriginIframeMap = new WeakMap();\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.mutationCb = options.mutationCb;\r\n this.wrappedEmit = options.wrappedEmit;\r\n this.stylesheetManager = options.stylesheetManager;\r\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n this.mirror = options.mirror;\r\n if (this.recordCrossOriginIframes) {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n }\r\n }\r\n addIframe(iframeEl) {\r\n this.iframes.set(iframeEl, true);\r\n if (iframeEl.contentWindow)\r\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n }\r\n addLoadListener(cb) {\r\n this.loadListener = cb;\r\n }\r\n attachIframe(iframeEl, childSn) {\r\n var _a;\r\n this.mutationCb({\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: childSn,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n });\r\n (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n if (iframeEl.contentDocument &&\r\n iframeEl.contentDocument.adoptedStyleSheets &&\r\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n }\r\n handleMessage(message) {\r\n if (message.data.type === 'rrweb') {\r\n const iframeSourceWindow = message.source;\r\n if (!iframeSourceWindow)\r\n return;\r\n const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n if (!iframeEl)\r\n return;\r\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, message.data.event);\r\n if (transformedEvent)\r\n this.wrappedEmit(transformedEvent, message.data.isCheckout);\r\n }\r\n }\r\n transformCrossOriginEvent(iframeEl, e) {\r\n var _a;\r\n switch (e.type) {\r\n case EventType.FullSnapshot: {\r\n this.crossOriginIframeMirror.reset(iframeEl);\r\n this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n this.replaceIdOnNode(e.data.node, iframeEl);\r\n return {\r\n timestamp: e.timestamp,\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: e.data.node,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n },\r\n };\r\n }\r\n case EventType.Meta:\r\n case EventType.Load:\r\n case EventType.DomContentLoaded: {\r\n return false;\r\n }\r\n case EventType.Plugin: {\r\n return e;\r\n }\r\n case EventType.Custom: {\r\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n return e;\r\n }\r\n case EventType.IncrementalSnapshot: {\r\n switch (e.data.source) {\r\n case IncrementalSource.Mutation: {\r\n e.data.adds.forEach((n) => {\r\n this.replaceIds(n, iframeEl, [\r\n 'parentId',\r\n 'nextId',\r\n 'previousId',\r\n ]);\r\n this.replaceIdOnNode(n.node, iframeEl);\r\n });\r\n e.data.removes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n });\r\n e.data.attributes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n e.data.texts.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.Drag:\r\n case IncrementalSource.TouchMove:\r\n case IncrementalSource.MouseMove: {\r\n e.data.positions.forEach((p) => {\r\n this.replaceIds(p, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.ViewportResize: {\r\n return false;\r\n }\r\n case IncrementalSource.MediaInteraction:\r\n case IncrementalSource.MouseInteraction:\r\n case IncrementalSource.Scroll:\r\n case IncrementalSource.CanvasMutation:\r\n case IncrementalSource.Input: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n return e;\r\n }\r\n case IncrementalSource.StyleSheetRule:\r\n case IncrementalSource.StyleDeclaration: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n return e;\r\n }\r\n case IncrementalSource.Font: {\r\n return e;\r\n }\r\n case IncrementalSource.Selection: {\r\n e.data.ranges.forEach((range) => {\r\n this.replaceIds(range, iframeEl, ['start', 'end']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.AdoptedStyleSheet: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n });\r\n return e;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n replace(iframeMirror, obj, iframeEl, keys) {\r\n for (const key of keys) {\r\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n continue;\r\n if (Array.isArray(obj[key])) {\r\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n }\r\n else {\r\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n }\r\n }\r\n return obj;\r\n }\r\n replaceIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n }\r\n replaceStyleIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n }\r\n replaceIdOnNode(node, iframeEl) {\r\n this.replaceIds(node, iframeEl, ['id']);\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.replaceIdOnNode(child, iframeEl);\r\n });\r\n }\r\n }\r\n}\n\nexport { IframeManager };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManager {\r\n constructor(options) {\r\n this.shadowDoms = new WeakSet();\r\n this.restorePatches = [];\r\n this.mutationCb = options.mutationCb;\r\n this.scrollCb = options.scrollCb;\r\n this.bypassOptions = options.bypassOptions;\r\n this.mirror = options.mirror;\r\n const manager = this;\r\n this.restorePatches.push(patch(Element.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot)\r\n manager.addShadowRoot(this.shadowRoot, this.ownerDocument);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n addShadowRoot(shadowRoot, doc) {\r\n if (!isNativeShadowDom(shadowRoot))\r\n return;\r\n if (this.shadowDoms.has(shadowRoot))\r\n return;\r\n this.shadowDoms.add(shadowRoot);\r\n initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror }));\r\n setTimeout(() => {\r\n if (shadowRoot.adoptedStyleSheets &&\r\n shadowRoot.adoptedStyleSheets.length > 0)\r\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n initAdoptedStyleSheetObserver({\r\n mirror: this.mirror,\r\n stylesheetManager: this.bypassOptions.stylesheetManager,\r\n }, shadowRoot);\r\n }, 0);\r\n }\r\n observeAttachShadow(iframeElement) {\r\n if (iframeElement.contentWindow) {\r\n const manager = this;\r\n this.restorePatches.push(patch(iframeElement.contentWindow.HTMLElement.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot)\r\n manager.addShadowRoot(this.shadowRoot, iframeElement.contentDocument);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n }\r\n reset() {\r\n this.restorePatches.forEach((restorePatch) => restorePatch());\r\n this.shadowDoms = new WeakSet();\r\n }\r\n}\n\nexport { ShadowDomManager };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\nexport { decode, encode };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n let contextMap = canvasVarMap.get(ctx);\r\n if (!contextMap) {\r\n contextMap = new Map();\r\n canvasVarMap.set(ctx, contextMap);\r\n }\r\n if (!contextMap.has(ctor)) {\r\n contextMap.set(ctor, []);\r\n }\r\n return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n if (!value ||\r\n !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n return;\r\n const name = value.constructor.name;\r\n const list = variableListFor(ctx, name);\r\n let index = list.indexOf(value);\r\n if (index === -1) {\r\n index = list.length;\r\n list.push(value);\r\n }\r\n return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n if (value instanceof Array) {\r\n return value.map((arg) => serializeArg(arg, win, ctx));\r\n }\r\n else if (value === null) {\r\n return value;\r\n }\r\n else if (value instanceof Float32Array ||\r\n value instanceof Float64Array ||\r\n value instanceof Int32Array ||\r\n value instanceof Uint32Array ||\r\n value instanceof Uint8Array ||\r\n value instanceof Uint16Array ||\r\n value instanceof Int16Array ||\r\n value instanceof Int8Array ||\r\n value instanceof Uint8ClampedArray) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [Object.values(value)],\r\n };\r\n }\r\n else if (value instanceof ArrayBuffer) {\r\n const name = value.constructor.name;\r\n const base64 = encode(value);\r\n return {\r\n rr_type: name,\r\n base64,\r\n };\r\n }\r\n else if (value instanceof DataView) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [\r\n serializeArg(value.buffer, win, ctx),\r\n value.byteOffset,\r\n value.byteLength,\r\n ],\r\n };\r\n }\r\n else if (value instanceof HTMLImageElement) {\r\n const name = value.constructor.name;\r\n const { src } = value;\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof HTMLCanvasElement) {\r\n const name = 'HTMLImageElement';\r\n const src = value.toDataURL();\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof ImageData) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n };\r\n }\r\n else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n const name = value.constructor.name;\r\n const index = saveWebGLVar(value, win, ctx);\r\n return {\r\n rr_type: name,\r\n index: index,\r\n };\r\n }\r\n return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n return [...args].map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n const webGLConstructorNames = [\r\n 'WebGLActiveInfo',\r\n 'WebGLBuffer',\r\n 'WebGLFramebuffer',\r\n 'WebGLProgram',\r\n 'WebGLRenderbuffer',\r\n 'WebGLShader',\r\n 'WebGLShaderPrecisionFormat',\r\n 'WebGLTexture',\r\n 'WebGLUniformLocation',\r\n 'WebGLVertexArrayObject',\r\n 'WebGLVertexArrayObjectOES',\r\n ];\r\n const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\r\n const handlers = [];\r\n const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n for (const prop of props2D) {\r\n try {\r\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n return function (...args) {\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n setTimeout(() => {\r\n const recordArgs = serializeArgs([...args], win, this);\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: recordArgs,\r\n });\r\n }, 0);\r\n }\r\n return original.apply(this, args);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction initCanvasContextObserver(win, blockClass, blockSelector) {\r\n const handlers = [];\r\n try {\r\n const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n return function (contextType, ...args) {\r\n if (!isBlocked(this, blockClass, blockSelector, true)) {\r\n if (!('__context' in this))\r\n this.__context = contextType;\r\n }\r\n return original.apply(this, [contextType, ...args]);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, mirror, win) {\r\n const handlers = [];\r\n const props = Object.getOwnPropertyNames(prototype);\r\n for (const prop of props) {\r\n if ([\r\n 'isContextLost',\r\n 'canvas',\r\n 'drawingBufferWidth',\r\n 'drawingBufferHeight',\r\n ].includes(prop)) {\r\n continue;\r\n }\r\n try {\r\n if (typeof prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(prototype, prop, function (original) {\r\n return function (...args) {\r\n const result = original.apply(this, args);\r\n saveWebGLVar(result, win, this);\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n const recordArgs = serializeArgs([...args], win, this);\r\n const mutation = {\r\n type,\r\n property: prop,\r\n args: recordArgs,\r\n };\r\n cb(this.canvas, mutation);\r\n }\r\n return result;\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type,\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, mirror) {\r\n const handlers = [];\r\n handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, mirror, win));\r\n if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, mirror, win));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","var WorkerClass = null;\n\ntry {\n var WorkerThreads =\n typeof module !== 'undefined' && typeof module.require === 'function' && module.require('worker_threads') ||\n typeof __non_webpack_require__ === 'function' && __non_webpack_require__('worker_threads') ||\n typeof require === 'function' && require('worker_threads');\n WorkerClass = WorkerThreads.Worker;\n} catch(e) {} // eslint-disable-line\n\nexport { WorkerClass };\n","import { WorkerClass } from './_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js';\n\nfunction decodeBase64(base64, enableUnicode) {\n return Buffer.from(base64, 'base64').toString(enableUnicode ? 'utf16' : 'utf8');\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n var source = decodeBase64(base64, enableUnicode);\n var start = source.indexOf('\\n', 10) + 1;\n var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n return function WorkerFactory(options) {\n return new WorkerClass(body, Object.assign({}, options, { eval: true }));\n };\n}\n\nexport { createBase64WorkerFactory };\n","function decodeBase64(base64, enableUnicode) {\n var binaryString = atob(base64);\n if (enableUnicode) {\n var binaryView = new Uint8Array(binaryString.length);\n for (var i = 0, n = binaryString.length; i < n; ++i) {\n binaryView[i] = binaryString.charCodeAt(i);\n }\n return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer));\n }\n return binaryString;\n}\n\nfunction createURL(base64, sourcemapArg, enableUnicodeArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n var source = decodeBase64(base64, enableUnicode);\n var start = source.indexOf('\\n', 10) + 1;\n var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n var blob = new Blob([body], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n var url;\n return function WorkerFactory(options) {\n url = url || createURL(base64, sourcemapArg, enableUnicodeArg);\n return new Worker(url, options);\n };\n}\n\nexport { createBase64WorkerFactory };\n","var kIsNodeJS = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n\nfunction isNodeJS() {\n return kIsNodeJS;\n}\n\nexport { isNodeJS };\n","import { createBase64WorkerFactory as createBase64WorkerFactory$1 } from './_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js';\nimport { createBase64WorkerFactory as createBase64WorkerFactory$2 } from './_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';\nimport { isNodeJS } from './_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js';\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n if (isNodeJS()) {\n return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);\n }\n return createBase64WorkerFactory$2(base64, sourcemapArg, enableUnicodeArg);\n}\n\nexport { createBase64WorkerFactory };\n","import { createBase64WorkerFactory } from './_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js';\n\nvar WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucykgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgY29uc3QgaWQgPSBgJHt3aWR0aH0tJHtoZWlnaHR9YDsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRCbG9iTWFwLmdldChpZCk7DQogICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0geWllbGQgYmxvYi5hcnJheUJ1ZmZlcigpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQogICAgY29uc3Qgd29ya2VyID0gc2VsZjsNCiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgY29uc3QgeyBpZCwgYml0bWFwLCB3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucyB9ID0gZS5kYXRhOw0KICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zKTsNCiAgICAgICAgICAgICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICBiaXRtYXAuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKGFycmF5QnVmZmVyKTsNCiAgICAgICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgICAgIGxhc3RCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7DQogICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgICAgaWQsDQogICAgICAgICAgICAgICAgICAgIHR5cGUsDQogICAgICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfTsKCn0pKCk7Cgo=', null, false);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\n\nclass CanvasManager {\r\n constructor(options) {\r\n this.pendingCanvasMutations = new Map();\r\n this.rafStamps = { latestId: 0, invokeId: null };\r\n this.frozen = false;\r\n this.locked = false;\r\n this.processMutation = (target, mutation) => {\r\n const newFrame = this.rafStamps.invokeId &&\r\n this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n if (newFrame || !this.rafStamps.invokeId)\r\n this.rafStamps.invokeId = this.rafStamps.latestId;\r\n if (!this.pendingCanvasMutations.has(target)) {\r\n this.pendingCanvasMutations.set(target, []);\r\n }\r\n this.pendingCanvasMutations.get(target).push(mutation);\r\n };\r\n const { sampling = 'all', win, blockClass, blockSelector, recordCanvas, dataURLOptions, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n if (recordCanvas && sampling === 'all')\r\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\r\n if (recordCanvas && typeof sampling === 'number')\r\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\r\n dataURLOptions,\r\n });\r\n }\r\n reset() {\r\n this.pendingCanvasMutations.clear();\r\n this.resetObservers && this.resetObservers();\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n }\r\n lock() {\r\n this.locked = true;\r\n }\r\n unlock() {\r\n this.locked = false;\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector);\r\n const snapshotInProgressMap = new Map();\r\n const worker = new WorkerFactory();\r\n worker.onmessage = (e) => {\r\n const { id } = e.data;\r\n snapshotInProgressMap.set(id, false);\r\n if (!('base64' in e.data))\r\n return;\r\n const { base64, type, width, height } = e.data;\r\n this.mutationCb({\r\n id,\r\n type: CanvasContext['2D'],\r\n commands: [\r\n {\r\n property: 'clearRect',\r\n args: [0, 0, width, height],\r\n },\r\n {\r\n property: 'drawImage',\r\n args: [\r\n {\r\n rr_type: 'ImageBitmap',\r\n args: [\r\n {\r\n rr_type: 'Blob',\r\n data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n type,\r\n },\r\n ],\r\n },\r\n 0,\r\n 0,\r\n ],\r\n },\r\n ],\r\n });\r\n };\r\n const timeBetweenSnapshots = 1000 / fps;\r\n let lastSnapshotTime = 0;\r\n let rafId;\r\n const getCanvas = () => {\r\n const matchedCanvas = [];\r\n win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\r\n matchedCanvas.push(canvas);\r\n }\r\n });\r\n return matchedCanvas;\r\n };\r\n const takeCanvasSnapshots = (timestamp) => {\r\n if (lastSnapshotTime &&\r\n timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n return;\r\n }\r\n lastSnapshotTime = timestamp;\r\n getCanvas()\r\n .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n var _a;\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n const context = canvas.getContext(canvas.__context);\r\n if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n context === null || context === void 0 ? void 0 : context.clear(context.COLOR_BUFFER_BIT);\r\n }\r\n }\r\n const bitmap = yield createImageBitmap(canvas);\r\n worker.postMessage({\r\n id,\r\n bitmap,\r\n width: canvas.width,\r\n height: canvas.height,\r\n dataURLOptions: options.dataURLOptions,\r\n }, [bitmap]);\r\n }));\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n };\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n initCanvasMutationObserver(win, blockClass, blockSelector) {\r\n this.startRAFTimestamping();\r\n this.startPendingCanvasMutationFlusher();\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector);\r\n const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\r\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, this.mirror);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n canvas2DReset();\r\n canvasWebGL1and2Reset();\r\n };\r\n }\r\n startPendingCanvasMutationFlusher() {\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n startRAFTimestamping() {\r\n const setLatestRAFTimestamp = (timestamp) => {\r\n this.rafStamps.latestId = timestamp;\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n };\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n }\r\n flushPendingCanvasMutations() {\r\n this.pendingCanvasMutations.forEach((values, canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n this.flushPendingCanvasMutationFor(canvas, id);\r\n });\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n flushPendingCanvasMutationFor(canvas, id) {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n if (!valuesWithType || id === -1)\r\n return;\r\n const values = valuesWithType.map((value) => {\r\n const rest = __rest(value, [\"type\"]);\r\n return rest;\r\n });\r\n const { type } = valuesWithType[0];\r\n this.mutationCb({ id, type, commands: values });\r\n this.pendingCanvasMutations.delete(canvas);\r\n }\r\n}\n\nexport { CanvasManager };\n","import { getCssRuleString } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n constructor(options) {\r\n this.trackedLinkElements = new WeakSet();\r\n this.styleMirror = new StyleSheetMirror();\r\n this.mutationCb = options.mutationCb;\r\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n }\r\n attachLinkElement(linkEl, childSn) {\r\n if ('_cssText' in childSn.attributes)\r\n this.mutationCb({\r\n adds: [],\r\n removes: [],\r\n texts: [],\r\n attributes: [\r\n {\r\n id: childSn.id,\r\n attributes: childSn\r\n .attributes,\r\n },\r\n ],\r\n });\r\n this.trackLinkElement(linkEl);\r\n }\r\n trackLinkElement(linkEl) {\r\n if (this.trackedLinkElements.has(linkEl))\r\n return;\r\n this.trackedLinkElements.add(linkEl);\r\n this.trackStylesheetInLinkElement(linkEl);\r\n }\r\n adoptStyleSheets(sheets, hostId) {\r\n if (sheets.length === 0)\r\n return;\r\n const adoptedStyleSheetData = {\r\n id: hostId,\r\n styleIds: [],\r\n };\r\n const styles = [];\r\n for (const sheet of sheets) {\r\n let styleId;\r\n if (!this.styleMirror.has(sheet)) {\r\n styleId = this.styleMirror.add(sheet);\r\n const rules = Array.from(sheet.rules || CSSRule);\r\n styles.push({\r\n styleId,\r\n rules: rules.map((r, index) => {\r\n return {\r\n rule: getCssRuleString(r),\r\n index,\r\n };\r\n }),\r\n });\r\n }\r\n else\r\n styleId = this.styleMirror.getId(sheet);\r\n adoptedStyleSheetData.styleIds.push(styleId);\r\n }\r\n if (styles.length > 0)\r\n adoptedStyleSheetData.styles = styles;\r\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n }\r\n reset() {\r\n this.styleMirror.reset();\r\n this.trackedLinkElements = new WeakSet();\r\n }\r\n trackStylesheetInLinkElement(linkEl) {\r\n }\r\n}\n\nexport { StylesheetManager };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, getWindowWidth, getWindowHeight, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\nimport { IframeManager } from './iframe-manager.js';\nimport { ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\n\nfunction wrapEvent(e) {\r\n return Object.assign(Object.assign({}, e), { timestamp: Date.now() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, ignoreClass = 'rr-ignore', maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), } = options;\r\n const inEmittingFrame = recordCrossOriginIframes\r\n ? window.parent === window\r\n : true;\r\n let passEmitsToParent = false;\r\n if (!inEmittingFrame) {\r\n try {\r\n window.parent.document;\r\n passEmitsToParent = false;\r\n }\r\n catch (e) {\r\n passEmitsToParent = true;\r\n }\r\n }\r\n if (inEmittingFrame && !emit) {\r\n throw new Error('emit function is required');\r\n }\r\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n sampling.mousemove = mousemoveWait;\r\n }\r\n mirror.reset();\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true,\r\n }\r\n : _maskInputOptions !== undefined\r\n ? _maskInputOptions\r\n : { password: true };\r\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n ? {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaVerification: true,\r\n headMetaAuthorship: _slimDOMOptions === 'all',\r\n headMetaDescKeywords: _slimDOMOptions === 'all',\r\n }\r\n : _slimDOMOptions\r\n ? _slimDOMOptions\r\n : {};\r\n polyfill();\r\n let lastFullSnapshotEvent;\r\n let incrementalSnapshotCount = 0;\r\n const eventProcessor = (e) => {\r\n for (const plugin of plugins || []) {\r\n if (plugin.eventProcessor) {\r\n e = plugin.eventProcessor(e);\r\n }\r\n }\r\n if (packFn) {\r\n e = packFn(e);\r\n }\r\n return e;\r\n };\r\n wrappedEmit = (e, isCheckout) => {\r\n var _a;\r\n if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n e.type !== EventType.FullSnapshot &&\r\n !(e.type === EventType.IncrementalSnapshot &&\r\n e.data.source === IncrementalSource.Mutation)) {\r\n mutationBuffers.forEach((buf) => buf.unfreeze());\r\n }\r\n if (inEmittingFrame) {\r\n emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n }\r\n else if (passEmitsToParent) {\r\n const message = {\r\n type: 'rrweb',\r\n event: eventProcessor(e),\r\n isCheckout,\r\n };\r\n window.parent.postMessage(message, '*');\r\n }\r\n if (e.type === EventType.FullSnapshot) {\r\n lastFullSnapshotEvent = e;\r\n incrementalSnapshotCount = 0;\r\n }\r\n else if (e.type === EventType.IncrementalSnapshot) {\r\n if (e.data.source === IncrementalSource.Mutation &&\r\n e.data.isAttachIframe) {\r\n return;\r\n }\r\n incrementalSnapshotCount++;\r\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n const exceedTime = checkoutEveryNms &&\r\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n if (exceedCount || exceedTime) {\r\n takeFullSnapshot(true);\r\n }\r\n }\r\n };\r\n const wrappedMutationEmit = (m) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n }));\r\n };\r\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n }));\r\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n }));\r\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n }));\r\n const stylesheetManager = new StylesheetManager({\r\n mutationCb: wrappedMutationEmit,\r\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n });\r\n const iframeManager = new IframeManager({\r\n mirror,\r\n mutationCb: wrappedMutationEmit,\r\n stylesheetManager: stylesheetManager,\r\n recordCrossOriginIframes,\r\n wrappedEmit,\r\n });\r\n for (const plugin of plugins || []) {\r\n if (plugin.getMirror)\r\n plugin.getMirror({\r\n nodeMirror: mirror,\r\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n });\r\n }\r\n canvasManager = new CanvasManager({\r\n recordCanvas,\r\n mutationCb: wrappedCanvasMutationEmit,\r\n win: window,\r\n blockClass,\r\n blockSelector,\r\n mirror,\r\n sampling: sampling.canvas,\r\n dataURLOptions,\r\n });\r\n const shadowDomManager = new ShadowDomManager({\r\n mutationCb: wrappedMutationEmit,\r\n scrollCb: wrappedScrollEmit,\r\n bypassOptions: {\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n dataURLOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n recordCanvas,\r\n inlineImages,\r\n sampling,\r\n slimDOMOptions,\r\n iframeManager,\r\n stylesheetManager,\r\n canvasManager,\r\n keepIframeSrcFn,\r\n },\r\n mirror,\r\n });\r\n takeFullSnapshot = (isCheckout = false) => {\r\n var _a, _b, _c, _d, _e, _f;\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Meta,\r\n data: {\r\n href: window.location.href,\r\n width: getWindowWidth(),\r\n height: getWindowHeight(),\r\n },\r\n }), isCheckout);\r\n stylesheetManager.reset();\r\n mutationBuffers.forEach((buf) => buf.lock());\r\n const node = snapshot(document, {\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskAllInputs: maskInputOptions,\r\n maskTextFn,\r\n slimDOM: slimDOMOptions,\r\n dataURLOptions,\r\n recordCanvas,\r\n inlineImages,\r\n onSerialize: (n) => {\r\n if (isSerializedIframe(n, mirror)) {\r\n iframeManager.addIframe(n);\r\n }\r\n if (isSerializedStylesheet(n, mirror)) {\r\n stylesheetManager.trackLinkElement(n);\r\n }\r\n if (hasShadowRoot(n)) {\r\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n iframeManager.attachIframe(iframe, childSn);\r\n shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (linkEl, childSn) => {\r\n stylesheetManager.attachLinkElement(linkEl, childSn);\r\n },\r\n keepIframeSrcFn,\r\n });\r\n if (!node) {\r\n return console.warn('Failed to snapshot the document');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.FullSnapshot,\r\n data: {\r\n node,\r\n initialOffset: {\r\n left: window.pageXOffset !== undefined\r\n ? window.pageXOffset\r\n : (document === null || document === void 0 ? void 0 : document.documentElement.scrollLeft) ||\r\n ((_b = (_a = document === null || document === void 0 ? void 0 : document.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n ((_c = document === null || document === void 0 ? void 0 : document.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n 0,\r\n top: window.pageYOffset !== undefined\r\n ? window.pageYOffset\r\n : (document === null || document === void 0 ? void 0 : document.documentElement.scrollTop) ||\r\n ((_e = (_d = document === null || document === void 0 ? void 0 : document.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n ((_f = document === null || document === void 0 ? void 0 : document.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n 0,\r\n },\r\n },\r\n }));\r\n mutationBuffers.forEach((buf) => buf.unlock());\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n };\r\n try {\r\n const handlers = [];\r\n handlers.push(on('DOMContentLoaded', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.DomContentLoaded,\r\n data: {},\r\n }));\r\n }));\r\n const observe = (doc) => {\r\n var _a;\r\n return initObservers({\r\n mutationCb: wrappedMutationEmit,\r\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n })),\r\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n })),\r\n scrollCb: wrappedScrollEmit,\r\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n })),\r\n inputCb: (v) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Input }, v),\r\n })),\r\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n })),\r\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n })),\r\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n })),\r\n canvasMutationCb: wrappedCanvasMutationEmit,\r\n fontCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Font }, p),\r\n })),\r\n selectionCb: (p) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n }));\r\n },\r\n blockClass,\r\n ignoreClass,\r\n maskTextClass,\r\n maskTextSelector,\r\n maskInputOptions,\r\n inlineStylesheet,\r\n sampling,\r\n recordCanvas,\r\n inlineImages,\r\n userTriggeredOnInput,\r\n collectFonts,\r\n doc,\r\n maskInputFn,\r\n maskTextFn,\r\n keepIframeSrcFn,\r\n blockSelector,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n mirror,\r\n iframeManager,\r\n stylesheetManager,\r\n shadowDomManager,\r\n canvasManager,\r\n ignoreCSSAttributes,\r\n plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n observer: p.observer,\r\n options: p.options,\r\n callback: (payload) => wrappedEmit(wrapEvent({\r\n type: EventType.Plugin,\r\n data: {\r\n plugin: p.name,\r\n payload,\r\n },\r\n })),\r\n }))) || [],\r\n }, hooks);\r\n };\r\n iframeManager.addLoadListener((iframeEl) => {\r\n handlers.push(observe(iframeEl.contentDocument));\r\n });\r\n const init = () => {\r\n takeFullSnapshot();\r\n handlers.push(observe(document));\r\n recording = true;\r\n };\r\n if (document.readyState === 'interactive' ||\r\n document.readyState === 'complete') {\r\n init();\r\n }\r\n else {\r\n handlers.push(on('load', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Load,\r\n data: {},\r\n }));\r\n init();\r\n }, window));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n recording = false;\r\n };\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n if (!recording) {\r\n throw new Error('please add custom event after start recording');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Custom,\r\n data: {\r\n tag,\r\n payload,\r\n },\r\n }));\r\n};\r\nrecord.freezePage = () => {\r\n mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n if (!recording) {\r\n throw new Error('please take full snapshot after start recording');\r\n }\r\n takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","import { record } from 'rrweb';\nimport type { eventWithTime } from '@rrweb/types';\nimport type { Collector } from '../core/sdk';\nimport { getConfig, getLogger, getQueue } from '../core/context';\nimport type { EventPayload, ReplayPayload, SDKEvent } from '../types';\n\nfunction uint8ArrayToBase64(bytes: Uint8Array): string {\n let binary = '';\n const chunkSize = 0x8000;\n\n for (let i = 0; i < bytes.length; i += chunkSize) {\n const chunk = bytes.subarray(i, i + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n\n return btoa(binary);\n}\n\nasync function gzipString(input: string): Promise<Uint8Array> {\n const stream = new Blob([input]).stream().pipeThrough(new CompressionStream('gzip'));\n const buffer = await new Response(stream).arrayBuffer();\n return new Uint8Array(buffer);\n}\n\nasync function createReplayPayload(\n event: eventWithTime,\n isCheckout: boolean,\n): Promise<EventPayload> {\n const rawPayload: ReplayPayload = {\n event,\n isCheckout,\n version: 'rrweb',\n };\n\n const compressed = await gzipString(JSON.stringify(rawPayload));\n\n return {\n compressed: true,\n compression: 'gzip',\n encoding: 'base64',\n data: uint8ArrayToBase64(compressed),\n version: 'rrweb',\n };\n}\n\n/**\n * rrweb 기반 세션 리플레이 수집기.\n * 개인정보 보호를 위해 input 값은 기본 마스킹하고, rr-block/rr-mask 클래스를 지원한다.\n */\nexport function createReplayCollector(): Collector {\n let stopRecording: (() => void) | undefined;\n\n return {\n setup(): void {\n const config = getConfig();\n const logger = getLogger();\n\n stopRecording = record({\n emit(event, isCheckout) {\n createReplayPayload(event, Boolean(isCheckout))\n .then((payload) => {\n const replayEvent: SDKEvent = {\n type: 'replay',\n timestamp: event.timestamp ?? Date.now(),\n cssSelector: null,\n payload,\n };\n getQueue().push(replayEvent);\n })\n .catch((err) => {\n // 서버는 압축된 페이로드 컨트랙트만 처리한다.\n // 비압축 fallback을 보내면 컨트랙트가 깨지므로 이 이벤트는 드롭한다.\n logger.warn('rrweb payload 압축 실패, 이벤트 드롭:', err);\n });\n },\n maskAllInputs: config.replayMaskAllInputs,\n blockClass: config.replayBlockClass,\n blockSelector: config.replayBlockSelector,\n maskTextClass: config.replayMaskTextClass,\n maskTextSelector: config.replayMaskTextSelector,\n slimDOMOptions: 'all',\n inlineStylesheet: config.replayInlineStylesheet,\n checkoutEveryNms: config.replayCheckoutEveryNms,\n sampling: {\n mousemove: config.replayMousemoveSampling,\n mousemoveCallback: config.replayMousemoveCallbackSampling,\n scroll: config.replayScrollSampling,\n input: config.replayInputSampling,\n },\n });\n\n if (stopRecording) {\n logger.log('rrweb 리플레이 수집 시작');\n } else {\n logger.warn('rrweb 리플레이 수집을 시작하지 못했습니다.');\n }\n },\n\n teardown(): void {\n if (!stopRecording) return;\n stopRecording();\n stopRecording = undefined;\n getLogger().log('rrweb 리플레이 수집 종료');\n },\n };\n}\n","import type { Collector } from '../core/sdk';\nimport { getQueue } from '../core/context';\nimport { buildCssSelector } from '../utils/selector';\n\nconst PING_INTERVAL = 5000; // 5초마다 현재 섹션 보고\n\n/**\n * 체류 섹션(ping) 이벤트 수집기\n * IntersectionObserver로 현재 뷰포트에 보이는 섹션을 감지하고\n * 5초 간격으로 현재 체류 섹션을 보고\n */\nexport function createPingCollector(): Collector {\n let observer: IntersectionObserver | null = null;\n let timerId: ReturnType<typeof setInterval> | null = null;\n let currentSection: Element | null = null;\n\n return {\n setup() {\n // section 요소들을 관찰하여 현재 보이는 섹션 추적\n observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting && entry.target.id) {\n currentSection = entry.target;\n }\n }\n },\n { threshold: 0.3 }, // 30% 이상 보일 때 감지\n );\n\n // 페이지 내 모든 section 요소 관찰\n const sections = document.querySelectorAll('section[id]');\n sections.forEach((section) => observer!.observe(section));\n\n // 5초마다 현재 섹션 보고\n timerId = setInterval(() => {\n if (!currentSection) return;\n\n getQueue().push({\n type: 'ping',\n timestamp: Date.now(),\n cssSelector: buildCssSelector(currentSection),\n payload: { sectionId: currentSection.id },\n });\n }, PING_INTERVAL);\n },\n\n teardown() {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n if (timerId !== null) {\n clearInterval(timerId);\n timerId = null;\n }\n currentSection = null;\n },\n };\n}\n","import type { Collector } from '../core/sdk';\nimport { getQueue } from '../core/context';\nimport { getElementId } from '../utils/dom';\nimport { buildCssSelector } from '../utils/selector';\n\n/**\n * 이탈(exit) 이벤트 수집기\n * beforeunload + visibilitychange로 이탈을 감지\n * 이탈 직전 보이는 요소와 최대 스크롤 깊이를 기록하고 flushSync로 즉시 전송\n */\nexport function createExitCollector(): Collector {\n let hasFired = false; // beforeunload + visibilitychange 중복 방지\n let maxDepth = 0;\n\n /** 스크롤 시 최대 깊이 갱신 */\n function trackDepth() {\n const maxScroll = document.documentElement.scrollHeight - window.innerHeight;\n if (maxScroll <= 0) return;\n const current = Math.round((window.scrollY / maxScroll) * 100);\n if (current > maxDepth) {\n maxDepth = current;\n }\n }\n\n /** 이탈 처리: exit 이벤트 발행 + flushSync */\n function handleExit() {\n if (hasFired) return;\n hasFired = true;\n\n trackDepth();\n\n // 뷰포트 하단에 보이는 마지막 요소 식별\n const lastEl = document.elementFromPoint(\n window.innerWidth / 2,\n window.innerHeight - 1,\n );\n const lastElementId = lastEl ? getElementId(lastEl) : 'unknown';\n\n const queue = getQueue();\n queue.push({\n type: 'exit',\n timestamp: Date.now(),\n cssSelector: lastEl ? buildCssSelector(lastEl) : null,\n payload: { lastElementId, maxDepth },\n });\n\n // 이탈 시 sendBeacon으로 즉시 전송\n queue.flushSync();\n }\n\n /** visibilitychange에서 hidden일 때만 이탈 처리 */\n function onVisibilityChange() {\n if (document.visibilityState === 'hidden') {\n handleExit();\n }\n }\n\n return {\n setup() {\n // 스크롤 시 최대 깊이 추적\n window.addEventListener('scroll', trackDepth, { passive: true });\n // 이탈 감지 (두 가지 이벤트 모두 등록)\n window.addEventListener('beforeunload', handleExit);\n document.addEventListener('visibilitychange', onVisibilityChange);\n },\n teardown() {\n window.removeEventListener('scroll', trackDepth);\n window.removeEventListener('beforeunload', handleExit);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n hasFired = false;\n maxDepth = 0;\n },\n };\n}\n","import type { SDKConfig, SDKOptions, SDKEvent, EventType, EventPayload } from '../types';\nimport { DEFAULT_CONFIG } from '../types';\nimport { createLogger } from '../utils/logger';\nimport { createTransport } from '../transport/transport';\nimport { createEventQueue } from './event-queue';\nimport { setContext } from './context';\nimport { createStartCollector } from '../events/start';\nimport { createVisibilityCollector } from '../events/visibility';\nimport { createScrollCollector } from '../events/scroll';\nimport { createClickCollector } from '../events/click';\nimport { createInputCollector } from '../events/input';\nimport { createReplayCollector } from '../events/replay';\nimport { createPingCollector } from '../events/ping';\nimport { createExitCollector } from '../events/exit';\nimport type { Logger } from '../utils/logger';\nimport type { EventQueue } from './event-queue';\n\n/** 이벤트 수집기 인터페이스 (setup/teardown) */\nexport interface Collector {\n setup(): void;\n teardown(): void;\n}\n\n/** SDK 싱글턴 상태 */\nlet isInitialized = false;\nlet logger: Logger;\nlet queue: EventQueue;\nlet collectors: Collector[] = [];\n\n/**\n * SDK 초기화\n * 싱글턴으로 동작하며, 중복 호출 시 경고만 출력한다.\n * 이벤트 수집기는 registerCollectors()로 별도 등록한다.\n */\nexport function init(options: SDKOptions): void {\n if (isInitialized) {\n console.warn('[LandOm] 이미 초기화되었습니다.');\n return;\n }\n\n const config = { ...DEFAULT_CONFIG, ...options };\n logger = createLogger(config.debug);\n\n const transport = createTransport({\n endpoint: config.endpoint,\n apiKey: config.apiKey,\n maxRetries: config.maxRetries,\n logger,\n });\n\n queue = createEventQueue({\n flushInterval: config.flushInterval,\n flushQueueSize: config.flushQueueSize,\n maxQueueSize: config.maxQueueSize,\n beforeSend: config.beforeSend,\n transport,\n logger,\n });\n\n // 컨텍스트 설정 (이벤트 수집기들이 참조)\n setContext(queue, config, logger);\n\n queue.start();\n isInitialized = true;\n\n // 기본 이벤트 수집기 등록\n const builtins: Collector[] = [\n createStartCollector(),\n createVisibilityCollector(),\n createScrollCollector(),\n createClickCollector(),\n createInputCollector(),\n createPingCollector(),\n createExitCollector(),\n ];\n if (config.enableReplay) {\n builtins.splice(5, 0, createReplayCollector());\n }\n registerCollectors(builtins);\n\n logger.log('SDK 초기화 완료', config);\n}\n\n/**\n * 이벤트 수집기 일괄 등록 및 시작\n * init() 이후에 호출해야 한다.\n */\nexport function registerCollectors(items: Collector[]): void {\n collectors = items;\n collectors.forEach((c) => c.setup());\n logger.log(`수집기 ${collectors.length}개 등록`);\n}\n\n/**\n * 이벤트를 큐에 추가\n * 외부에서 커스텀 이벤트를 보낼 때 사용\n */\nexport function capture(type: EventType, payload: EventPayload = {}): void {\n if (!isInitialized) {\n console.warn('[LandOm] 초기화 전에는 capture를 호출할 수 없습니다.');\n return;\n }\n\n const event: SDKEvent = {\n type,\n timestamp: Date.now(),\n cssSelector: null,\n payload,\n };\n\n queue.push(event);\n}\n\n\n/**\n * SDK 종료\n * 모든 수집기 해제 + 잔여 이벤트 flush + 상태 초기화\n */\nexport function destroy(): void {\n if (!isInitialized) return;\n\n collectors.forEach((c) => c.teardown());\n collectors = [];\n queue.stop();\n isInitialized = false;\n logger.log('SDK 종료');\n}\n"],"names":["DEFAULT_CONFIG","noop","createLogger","debug","args","createTransport","config","endpoint","apiKey","maxRetries","logger","isRetryable","status","KEEPALIVE_LIMIT","send","payload","body","useKeepalive","attempt","controller","timeoutId","res","err","delay","r","SENDBEACON_LIMIT","chunkEvents","limit","envelopeSize","budget","chunks","current","currentSize","ev","evSize","sendSync","events","blob","SESSION_KEY","generateUUIDv7","now","bytes","hex","b","readStorage","key","raw","e","writeStorage","value","createSession","session","isExpired","idle","maxed","getOrCreateSession","existing","touchSession","getSessionId","createEventQueue","flushInterval","flushQueueSize","maxQueueSize","beforeSend","transport","queue","timerId","buildPayload","enforceMaxSize","need","droppedReplay","survivors","droppedOther","push","event","processed","flush","flushSync","onOnline","start","stop","setContext","q","c","l","getQueue","getConfig","getLogger","createStartCollector","createVisibilityCollector","handler","isVisible","throttle","fn","ms","lastArgs","THROTTLE_MS","createScrollCollector","yOffset","maxScroll","percentage","getElementId","el","tag","firstClass","buildCssSelector","node","root","parts","rootParent","id","safeId","position","sib","createClickCollector","target","INPUT_TAGS","createInputCollector","NodeType","isElement","n","isShadowRoot","host","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","cssText","getCssRulesString","s","rules","getCssRuleString","error","rule","cssStringified","isCSSImportRule","_a","Mirror","_this","childNode","meta","oldNode","createMirror","maskInputValue","maskInputOptions","tagName","type","maskInputFn","text","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","canvas","ctx","chunkSize","x","y","getImageData","originalGetImageData","pixelBuffer","pixel","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName","element","processedTagName","stringifyStyleSheet","sheet","extractOrigin","url","origin","canvasService","canvasCtx","URL_IN_CSS_REF","RELATIVE_PATH","DATA_URI","absoluteToStylesheet","href","quote1","path1","quote2","path2","path3","filePath","maybeQuote","stack","_i","parts_1","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","pos","collectCharacters","regEx","chars","match","output","absoluteToDoc","descriptorsStr","inParens","a","isSVGElement","getHref","transformAttribute","name","_isBlockedElement","blockClass","blockSelector","eIndex","className","classMatchesRegex","regex","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","iframeEl","listener","iframeLoadTimeout","win","fired","readyState","timer_1","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","timer","serializeNode","options","mirror","inlineStylesheet","maskTextFn","_b","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","_c","newlyAddedElement","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","needBlock","attributes","len","i","attr","stylesheet","checked","canvasDataURL","blankCanvas","blankCanvasDataURL","image_1","oldValue_1","recordInlineImage","_d","width","height","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","skipChild","_e","_f","onSerialize","onIframeLoad","_g","onStylesheetLoad","_h","stylesheetLoadTimeout","_j","_k","_l","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","bypassOptions","_m","childN","serializedChildNode","_o","_p","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","maskAllInputs","slimDOM","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","prop","receiver","func","wait","timeout","previous","remaining","context","hookSetter","d","isRevoked","original","patch","source","replacement","wrapped","getWindowHeight","getWindowWidth","isBlocked","isSerialized","isIgnored","isAncestorRemoved","isTouchEvent","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","newId","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","CanvasContext","CanvasContext2","isNodeInLinkedList","DoubleLinkedList","index","moveKey","parentId","MutationBuffer","mutations","adds","addList","getNextId","ns","nextId","pushAdd","shadowHost","rootShadowHost","notInDoc","currentN","iframe","childSn","isParentRemoved","isAncestorInSet","candidate","_node","unhandledNode","attribute","m","item","old","styleObj","pname","newValue","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","parentNode","set","_isAncestorInSet","mutationBuffers","isCSSGroupingRuleSupported","isCSSMediaRuleSupported","isCSSSupportsRuleSupported","isCSSConditionRuleSupported","getEventTarget","path","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","angularZoneSymbol","observer","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","p","updatePosition","evt","clientX","clientY","handlers","h","initMouseInteractionObserver","mouseInteractionCb","disableMap","getHandler","eventKey","eventName","initScrollObserver","scrollCb","scrollEl","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","wrapEventWithUserTriggeredFlag","v","enable","lastInputValueMap","initInputObserver","inputCb","ignoreClass","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","lastInputValue","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","recurse","childRule","getIdAndStyleId","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","deleteRule","replace","replaceSync","supportedNestedCSSRuleTypes","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","result","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","priority","removeProperty","initMediaInteractionObserver","mediaInteractionCb","currentTime","volume","muted","playbackRate","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","ranges","count","range","startContainer","startOffset","endContainer","endOffset","mergeHooks","o","hooks","mutationCb","canvasMutationCb","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","pluginHandlers","plugin","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","map","ids","IframeManager","cb","message","transformedEvent","style","iframeMirror","obj","keys","child","ShadowDomManager","manager","option","iframeElement","restorePatch","__rest","t","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","lookup","encode","arraybuffer","base64","canvasVarMap","variableListFor","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","list","serializeArg","arg","src","serializeArgs","initCanvas2DMutationObserver","props2D","recordArgs","hookHandler","initCanvasContextObserver","contextType","patchGLPrototype","prototype","props","mutation","initCanvasWebGLMutationObserver","WorkerClass","WorkerThreads","decodeBase64","enableUnicode","createBase64WorkerFactory","sourcemapArg","enableUnicodeArg","binaryString","createURL","kIsNodeJS","isNodeJS","createBase64WorkerFactory$1","createBase64WorkerFactory$2","WorkerFactory","CanvasManager","fps","canvasContextReset","snapshotInProgressMap","worker","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","timestamp","bitmap","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","values","valuesWithType","StylesheetManager","linkEl","adoptedStyleSheetData","styles","wrapEvent","wrappedEmit","takeFullSnapshot","canvasManager","recording","record","emit","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordCrossOriginIframes","collectFonts","plugins","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","buf","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","shadowDomManager","observe","init","uint8ArrayToBase64","binary","chunk","gzipString","input","stream","buffer","createReplayPayload","compressed","createReplayCollector","stopRecording","replayEvent","PING_INTERVAL","createPingCollector","currentSection","entries","entry","section","createExitCollector","hasFired","maxDepth","trackDepth","handleExit","lastEl","lastElementId","onVisibilityChange","isInitialized","collectors","builtins","registerCollectors","items","capture","destroy"],"mappings":"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","x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]}
|