diff --git a/tracker/tracker-assist/.yarn/install-state.gz b/tracker/tracker-assist/.yarn/install-state.gz index c9614940e..d74493610 100644 Binary files a/tracker/tracker-assist/.yarn/install-state.gz and b/tracker/tracker-assist/.yarn/install-state.gz differ diff --git a/tracker/tracker-assist/CHANGELOG.md b/tracker/tracker-assist/CHANGELOG.md index a0df1c70f..33481573f 100644 --- a/tracker/tracker-assist/CHANGELOG.md +++ b/tracker/tracker-assist/CHANGELOG.md @@ -1,3 +1,8 @@ +## 10.0.0 + +- memory handling improvements to prevent possible leaks on sessions with multiple canvas nodes +- use new tracker.waitStatus api to wait for restarts + ## 9.0.0 - support for message compression inside plugin (requires v1.18 frontend) diff --git a/tracker/tracker-assist/package.json b/tracker/tracker-assist/package.json index 2d59076dd..a4175c257 100644 --- a/tracker/tracker-assist/package.json +++ b/tracker/tracker-assist/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker-assist", "description": "Tracker plugin for screen assistance through the WebRTC", - "version": "9.0.2-beta.11", + "version": "10.0.0", "keywords": [ "WebRTC", "assistance", @@ -16,11 +16,11 @@ "tsrun": "tsc", "lint": "eslint src --ext .ts,.js --fix --quiet", "build": "bun run replace-pkg-version && bun run build-es && bun run build-cjs", - "build-es": "rm -Rf lib && tsc && bun run replace-req-version", - "build-cjs": "rm -Rf cjs && tsc --project tsconfig-cjs.json && echo '{ \"type\": \"commonjs\" }' > cjs/package.json && bun run replace-paths && bun run replace-req-version", + "build-es": "rm -Rf lib && tsc --project tsconfig.json && bun run replace-req-version", + "build-cjs": "rm -Rf cjs && tsc --project tsconfig-cjs.json && echo '{ \"type\": \"commonjs\" }' > cjs/package.json && bun run replace-req-version", "replace-paths": "replace-in-files cjs/* --string='@openreplay/tracker' --replacement='@openreplay/tracker/cjs' && replace-in-files cjs/* --string='/lib/' --replacement='/'", "replace-pkg-version": "sh pkgver.sh", - "replace-req-version": "replace-in-files lib/* cjs/* --string='REQUIRED_TRACKER_VERSION' --replacement='13.0.0'", + "replace-req-version": "replace-in-files lib/* cjs/* --string='REQUIRED_TRACKER_VERSION' --replacement='14.0.10'", "prepublishOnly": "bun run test && bun run build", "lint-front": "lint-staged", "test": "jest --coverage=false", diff --git a/tracker/tracker-assist/src/RemoteControl.ts b/tracker/tracker-assist/src/RemoteControl.ts index a7dd3bd44..67e6b39d6 100644 --- a/tracker/tracker-assist/src/RemoteControl.ts +++ b/tracker/tracker-assist/src/RemoteControl.ts @@ -1,7 +1,7 @@ import Mouse from './Mouse.js' import ConfirmWindow from './ConfirmWindow/ConfirmWindow.js' import { controlConfirmDefault, } from './ConfirmWindow/defaults.js' -import type { Options as AssistOptions, } from './Assist' +import type { Options as AssistOptions, } from './Assist.js' export enum RCStatus { Disabled, diff --git a/tracker/tracker-assist/src/version.ts b/tracker/tracker-assist/src/version.ts index 49df217f0..2a941f28e 100644 --- a/tracker/tracker-assist/src/version.ts +++ b/tracker/tracker-assist/src/version.ts @@ -1 +1 @@ -export const pkgVersion = "9.0.2-beta.11"; +export const pkgVersion = "10.0.0"; diff --git a/tracker/tracker-assist/tsconfig.json b/tracker/tracker-assist/tsconfig.json index bb9a17073..4364bbc1a 100644 --- a/tracker/tracker-assist/tsconfig.json +++ b/tracker/tracker-assist/tsconfig.json @@ -4,8 +4,8 @@ "strictNullChecks": true, "alwaysStrict": true, "target": "es2017", - "module": "es6", - "moduleResolution": "node", + "module": "ESNext", + "moduleResolution": "Node", "allowSyntheticDefaultImports": true, "declaration": true, "outDir": "./lib", diff --git a/tracker/tracker/.yarn/install-state.gz b/tracker/tracker/.yarn/install-state.gz index 9cfe69d22..a11993d7b 100644 Binary files a/tracker/tracker/.yarn/install-state.gz and b/tracker/tracker/.yarn/install-state.gz differ diff --git a/tracker/tracker/CHANGELOG.md b/tracker/tracker/CHANGELOG.md index 63e02a8dc..083e40e55 100644 --- a/tracker/tracker/CHANGELOG.md +++ b/tracker/tracker/CHANGELOG.md @@ -1,250 +1,286 @@ -# 14.0.10 +## 14.0.10 - adjust timestamps for messages from tracker instances inside child iframes (if they were loaded later) - restart child trackers if parent tracker is restarted - fixes for general stability of crossdomain iframe tracking +- refactored usage of memory for everything regarding dom nodes to prevent possible memory leaks (i.e switched Map/Set to WeakMap/WeakSet where possible) +- introduced configurable Maintainer to drop nodes that are not in the dom anymore from memory; -# 14.0.9 +``` +interface MaintainerOptions { + /** + * Run cleanup each X ms + * + * @default 30 * 1000 + * */ + interval: number + /** + * Maintainer checks nodes in small batches over 50ms timeouts + * + * @default 2500 + * */ + batchSize: number + /** + * @default true + * */ + enabled: boolean +} + +new Tracker({ + ...yourOptions, + nodes: { + maintainer: { + interval: 60 * 1000, + batchSize: 2500, + enabled: true + } + } +}) +``` + +- added `startCallback` option callback to tracker.start options (returns `{ success: false, reason: string } | { success: true, sessionToken, userUUID, sessionID }`) + +## 14.0.9 - more stable crossdomain iframe tracking (refactored child/parent process discovery) - checks for bad start error -# 14.0.8 +## 14.0.8 - use separate library to handle network requests ([@openreplay/network-proxy](https://www.npmjs.com/package/@openreplay/network-proxy)) - fixes for window.message listeners -# 14.0.7 +## 14.0.7 - check for stopping status during restarts - restart if token expired during canvas fetch -# 14.0.6 +## 14.0.6 - support feature off toggle for feature flags and usability testing - additional checks for canvas snapshots -# 14.0.5 +## 14.0.5 - remove canvas snapshot interval if canvas is gone -# 14.0.4 +## 14.0.4 - remove reject from start -# 14.0.3 +## 14.0.3 - send integer instead of float for normalizedX/Y coords (basically moving from 0-100 to 0-10000 range) -# 14.0.2 +## 14.0.2 - fix logger check -# 14.0.0 & .1 +## 14.0.0 & .1 - titles for tabs - new `MouseClick` message to introduce heatmaps instead of clickmaps - crossdomain iframe tracking functionality - updated graphql plugin and messages -# 13.0.2 +## 13.0.2 - more file extensions for canvas -# 13.0.1 +## 13.0.1 - moved canvas snapshots to webp, additional option to utilize useAnimationFrame method (for webgl) - simpler, faster canvas recording manager -# 13.0.0 +## 13.0.0 - `assistOnly` flag for tracker options (EE only feature) -# 12.0.12 +## 12.0.12 - fix for potential redux plugin issues after .11 ... -# 12.0.11 +## 12.0.11 - better restart on unauth (new token assign for long sessions) - more safeguards around arraybuffer and dataview types for network proxy -# 12.0.10 +## 12.0.10 - improved logs for node binding errors, full nodelist clear before start, getSessionInfo method -# 12.0.9 +## 12.0.9 - moved logging to query -# 12.0.8 +## 12.0.8 - better logging for network batches -# 12.0.7 +## 12.0.7 - fixes for window.open reinit method -# 12.0.6 +## 12.0.6 - allow network sanitizer to return null (will ignore network req) -# 12.0.5 +## 12.0.5 - patch for img.ts srcset detector -# 12.0.4 +## 12.0.4 - patch for email sanitizer (supports + now) - update fflate version for better compression - `disableCanvas` option to disable canvas capture - better check for adopted stylesheets in doc (old browser support) -# 12.0.3 +## 12.0.3 - fixed scaling option for canvas (to ignore window.devicePixelRatio and always render the canvas as 1) -# 12.0.2 +## 12.0.2 - fix for canvas snapshot check -# 12.0.1 +## 12.0.1 - pause canvas snapshotting when its offscreen -# 12.0.0 +## 12.0.0 - offline session recording and manual sending - conditional recording with 30s buffer - websockets tracking hook -# 11.0.5 +## 11.0.5 - add method to restart canvas tracking (in case of context recreation) - scan dom tree for canvas els on tracker start -# 11.0.4 +## 11.0.4 - some additional security for canvas capture (check if canvas el itself is obscured/ignored) -# 11.0.3 +## 11.0.3 - move all logs under internal debugger - fix for XHR proxy ORSC 'abort' state -# 11.0.1 & 11.0.2 +## 11.0.1 & 11.0.2 - minor fixes and refactoring -# 11.0.0 +## 11.0.0 - canvas support - some safety guards for iframe components - user testing module -# 10.0.2 +## 10.0.2 - fix default ignore headers -# 10.0.1 +## 10.0.1 - network proxy api is now default turned on -# 10.0.0 +## 10.0.0 - networkRequest message changed to include `TransferredBodySize` - tracker now attempts to create proxy for beacon api as well (if its in scope of the current env) - safe wrapper for angular apps - better browser lag handling (and some performance improvements as a bonus) -# 9.0.11 +## 9.0.11 - new `resetTabOnWindowOpen` option to fix window.open issue with sessionStorage being inherited (replicating tabId bug), users still should use 'noopener=true' in window.open to prevent it in general... - do not create BC channel in iframe context, add regeneration of tabid incase of duplication -# 9.0.10 +## 9.0.10 - added `excludedResourceUrls` to timings options to better sanitize network data -# 9.0.9 +## 9.0.9 - Fix for `{disableStringDict: true}` behavior -# 9.0.8 +## 9.0.8 - added slight delay to iframe handler (rapid updates of stacked frames used to break player) -# 9.0.7 +## 9.0.7 - fix for `getSessionURL` method -# 9.0.6 +## 9.0.6 - added `tokenUrlMatcher` option to network settings, allowing to ingest session token header to custom allowed urls -# 9.0.5 +## 9.0.5 - same fixes but for fetch proxy -# 9.0.2 & 9.0.3 & 9.0.4 +## 9.0.2 & 9.0.3 & 9.0.4 - fixes for "setSessionTokenHeader" method -# 9.0.1 +## 9.0.1 - Warning about SSR mode - Prevent crashes due to network proxy in SSR -# 9.0.0 +## 9.0.0 - Option to disable string dictionary `{disableStringDict: true}` in Tracker constructor - Introduced Feature flags api - Fixed input durations recorded on programmable autofill - change InputMode from enum to const Object -# 8.1.2 +## 8.1.2 - option to disable string dictionary `{disableStringDict: true}` in Tracker constructor -# 8.1.1 +## 8.1.1 [collective patch] - Console and network are now using proxy objects to capture calls (opt in for network), use ` { network: { useProxy: true } }` to enable it - Force disable Multitab feature for old browsers (2016 and older + safari 14) -# 8.0.0 +## 8.0.0 - **[breaking]** support for multi-tab sessions -# 7.0.4 +## 7.0.4 - option to disable string dictionary `{disableStringDict: true}` in Tracker constructor -# 7.0.3 +## 7.0.3 - Prevent auto restart after manual stop -# 7.0.2 +## 7.0.2 - fixed header sanitization for axios causing empty string in some cases -# 7.0.1 +## 7.0.1 - fix time inputs capturing - add option `{ network: { captureInIframes: boolean } }` to disable network tracking inside iframes (default true) - added option `{ network: { axiosInstances: AxiosInstance[] } }` to include custom axios instances for better tracking -# 7.0.0 +## 7.0.0 - **[breaking]** added gzip compression to large messages - fix email regexp to significantly improve performance -# 6.0.2 +## 6.0.2 - fix network tracking for same domain iframes created by js code -# 6.0.1 +## 6.0.1 - fix webworker writer re-init request - remove useless logs @@ -252,7 +288,7 @@ - fix iframe handling - optimise node counting for dom drop -# 6.0.0 +## 6.0.0 **(Compatible with OpenReplay v1.11.0+ only)** diff --git a/tracker/tracker/package.json b/tracker/tracker/package.json index f0c424457..f3972aa6c 100644 --- a/tracker/tracker/package.json +++ b/tracker/tracker/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker", "description": "The OpenReplay tracker main package", - "version": "14.0.11-30", + "version": "14.0.10", "keywords": [ "logging", "replay" @@ -13,14 +13,29 @@ ], "license": "MIT", "type": "module", - "main": "./lib/index.js", + "exports": { + ".": { + "require": "./dist/cjs/index.js", + "import": "./dist/lib/index.js", + "types": "./dist/lib/main/index.d.ts" + }, + "./cjs": { + "require": "./dist/cjs/index.js", + "types": "./dist/cjs/main/index.d.ts" + } + }, + "files": [ + "dist/lib/**/*", + "dist/cjs/**/*" + ], + "main": "./dist/cjs/index.js", + "module": "./dist/lib/index.js", + "types": "./dist/lib/main/index.d.ts", "scripts": { "lint": "eslint src --ext .ts,.js --fix --quiet", "clean": "rm -Rf build && rm -Rf lib && rm -Rf cjs", - "tscRun": "tsc -b src/main && tsc -b src/webworker && tsc --project src/main/tsconfig-cjs.json", - "rollup": "rollup --config rollup.config.js", - "compile": "node --experimental-modules --experimental-json-modules scripts/compile.cjs", - "build": "bun run clean && bun run tscRun && bun run rollup && bun run compile", + "build:common": "tsc -b src/common", + "build": "yarn run clean && yarn build:common && rollup --config rollup.config.js", "lint-front": "lint-staged", "test": "jest --coverage=false", "test:ci": "jest --coverage=true", @@ -32,7 +47,9 @@ "@jest/globals": "^29.3.1", "@rollup/plugin-babel": "^6.0.4", "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^6.0.1", "@rollup/plugin-terser": "0.4.4", + "@rollup/plugin-typescript": "^12.1.1", "@typescript-eslint/eslint-plugin": "^5.30.0", "@typescript-eslint/parser": "^5.30.0", "eslint": "^8.57.1", @@ -52,6 +69,7 @@ "@medv/finder": "^3.2.0", "@openreplay/network-proxy": "^1.0.3", "error-stack-parser": "^2.0.6", + "error-stack-parser-es": "^0.1.5", "fflate": "^0.8.2" }, "engines": { diff --git a/tracker/tracker/rollup.config.js b/tracker/tracker/rollup.config.js index b06e29c7b..c5dda6ef4 100644 --- a/tracker/tracker/rollup.config.js +++ b/tracker/tracker/rollup.config.js @@ -1,12 +1,79 @@ import resolve from '@rollup/plugin-node-resolve' -import { babel } from '@rollup/plugin-babel' -import terser from '@rollup/plugin-terser'; +import typescript from '@rollup/plugin-typescript' +import terser from '@rollup/plugin-terser' +import replace from '@rollup/plugin-replace' +import { rollup } from 'rollup' +import { createRequire } from 'module' +const require = createRequire(import.meta.url) +const packageConfig = require('./package.json') -export default { - input: 'build/webworker/index.js', - output: { - file: 'build/webworker.js', - format: 'cjs', - }, - plugins: [resolve(), babel({ babelHelpers: 'bundled' }), terser({ mangle: { reserved: ['$'] } })], +export default async () => { + const webworkerContent = await buildWebWorker() + + const commonPlugins = [ + resolve(), + // terser(), + replace({ + preventAssignment: true, + values: { + TRACKER_VERSION: packageConfig.version, + WEBWORKER_BODY: JSON.stringify(webworkerContent), + }, + }), + ] + return [ + { + input: 'src/main/index.ts', + output: { + dir: 'dist/lib', + format: 'es', + sourcemap: true, + entryFileNames: '[name].js', + }, + plugins: [ + ...commonPlugins, + typescript({ + tsconfig: 'src/main/tsconfig.json', + }), + ], + }, + { + input: 'src/main/index.ts', + output: { + dir: 'dist/cjs', + format: 'cjs', + sourcemap: true, + entryFileNames: '[name].js', + }, + plugins: [ + ...commonPlugins, + typescript({ + tsconfig: 'src/main/tsconfig-cjs.json', + }), + ], + }, + ] +} + +async function buildWebWorker() { + console.log('building wworker') + const bundle = await rollup({ + input: 'src/webworker/index.ts', + plugins: [ + resolve(), + typescript({ + tsconfig: 'src/webworker/tsconfig.json', + }), + terser(), + ], + }) + + const { output } = await bundle.generate({ + format: 'iife', + name: 'WebWorker', + inlineDynamicImports: true, + }) + const webWorkerCode = output[0].code + console.log('webworker done!') + return webWorkerCode.replace(/"/g, '\\"').replace(/\n/g, '') } diff --git a/tracker/tracker/src/common/interaction.d.ts b/tracker/tracker/src/common/interaction.d.ts new file mode 100644 index 000000000..d6feee8a6 --- /dev/null +++ b/tracker/tracker/src/common/interaction.d.ts @@ -0,0 +1,37 @@ +import Message from './messages.gen.js'; +export interface Options { + connAttemptCount?: number; + connAttemptGap?: number; +} +type Start = { + type: 'start'; + ingestPoint: string; + pageNo: number; + timestamp: number; + url: string; + tabId: string; +} & Options; +type Auth = { + type: 'auth'; + token: string; + beaconSizeLimit?: number; +}; +export type ToWorkerData = null | 'stop' | Start | Auth | Array | { + type: 'compressed'; + batch: Uint8Array; +} | { + type: 'uncompressed'; + batch: Uint8Array; +} | 'forceFlushBatch' | 'check_queue'; +type Failure = { + type: 'failure'; + reason: string; +}; +type QEmpty = { + type: 'queue_empty'; +}; +export type FromWorkerData = 'a_stop' | 'a_start' | Failure | 'not_init' | { + type: 'compress'; + batch: Uint8Array; +} | QEmpty; +export {}; diff --git a/tracker/tracker/src/common/interaction.js b/tracker/tracker/src/common/interaction.js new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/tracker/tracker/src/common/interaction.js @@ -0,0 +1 @@ +export {}; diff --git a/tracker/tracker/src/common/interaction.js.map b/tracker/tracker/src/common/interaction.js.map new file mode 100644 index 000000000..5bd5256cf --- /dev/null +++ b/tracker/tracker/src/common/interaction.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interaction.js","sourceRoot":"","sources":["interaction.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/tracker/tracker/src/common/messages.gen.d.ts b/tracker/tracker/src/common/messages.gen.d.ts new file mode 100644 index 000000000..d631f9bb2 --- /dev/null +++ b/tracker/tracker/src/common/messages.gen.d.ts @@ -0,0 +1,548 @@ +export declare const enum Type { + Timestamp = 0, + SetPageLocationDeprecated = 4, + SetViewportSize = 5, + SetViewportScroll = 6, + CreateDocument = 7, + CreateElementNode = 8, + CreateTextNode = 9, + MoveNode = 10, + RemoveNode = 11, + SetNodeAttribute = 12, + RemoveNodeAttribute = 13, + SetNodeData = 14, + SetNodeScroll = 16, + SetInputTarget = 17, + SetInputValue = 18, + SetInputChecked = 19, + MouseMove = 20, + NetworkRequestDeprecated = 21, + ConsoleLog = 22, + PageLoadTiming = 23, + PageRenderTiming = 24, + CustomEvent = 27, + UserID = 28, + UserAnonymousID = 29, + Metadata = 30, + CSSInsertRule = 37, + CSSDeleteRule = 38, + Fetch = 39, + Profiler = 40, + OTable = 41, + StateAction = 42, + ReduxDeprecated = 44, + Vuex = 45, + MobX = 46, + NgRx = 47, + GraphQLDeprecated = 48, + PerformanceTrack = 49, + StringDict = 50, + SetNodeAttributeDict = 51, + ResourceTimingDeprecated = 53, + ConnectionInformation = 54, + SetPageVisibility = 55, + LoadFontFace = 57, + SetNodeFocus = 58, + LongTask = 59, + SetNodeAttributeURLBased = 60, + SetCSSDataURLBased = 61, + TechnicalInfo = 63, + CustomIssue = 64, + CSSInsertRuleURLBased = 67, + MouseClick = 68, + MouseClickDeprecated = 69, + CreateIFrameDocument = 70, + AdoptedSSReplaceURLBased = 71, + AdoptedSSInsertRuleURLBased = 73, + AdoptedSSDeleteRule = 75, + AdoptedSSAddOwner = 76, + AdoptedSSRemoveOwner = 77, + JSException = 78, + Zustand = 79, + BatchMetadata = 81, + PartitionedMessage = 82, + NetworkRequest = 83, + WSChannel = 84, + InputChange = 112, + SelectionChange = 113, + MouseThrashing = 114, + UnbindNodes = 115, + ResourceTiming = 116, + TabChange = 117, + TabData = 118, + CanvasNode = 119, + TagTrigger = 120, + Redux = 121, + SetPageLocation = 122, + GraphQL = 123 +} +export type Timestamp = [ + Type.Timestamp, + number +]; +export type SetPageLocationDeprecated = [ + Type.SetPageLocationDeprecated, + string, + string, + number +]; +export type SetViewportSize = [ + Type.SetViewportSize, + number, + number +]; +export type SetViewportScroll = [ + Type.SetViewportScroll, + number, + number +]; +export type CreateDocument = [ + Type.CreateDocument +]; +export type CreateElementNode = [ + Type.CreateElementNode, + number, + number, + number, + string, + boolean +]; +export type CreateTextNode = [ + Type.CreateTextNode, + number, + number, + number +]; +export type MoveNode = [ + Type.MoveNode, + number, + number, + number +]; +export type RemoveNode = [ + Type.RemoveNode, + number +]; +export type SetNodeAttribute = [ + Type.SetNodeAttribute, + number, + string, + string +]; +export type RemoveNodeAttribute = [ + Type.RemoveNodeAttribute, + number, + string +]; +export type SetNodeData = [ + Type.SetNodeData, + number, + string +]; +export type SetNodeScroll = [ + Type.SetNodeScroll, + number, + number, + number +]; +export type SetInputTarget = [ + Type.SetInputTarget, + number, + string +]; +export type SetInputValue = [ + Type.SetInputValue, + number, + string, + number +]; +export type SetInputChecked = [ + Type.SetInputChecked, + number, + boolean +]; +export type MouseMove = [ + Type.MouseMove, + number, + number +]; +export type NetworkRequestDeprecated = [ + Type.NetworkRequestDeprecated, + string, + string, + string, + string, + string, + number, + number, + number +]; +export type ConsoleLog = [ + Type.ConsoleLog, + string, + string +]; +export type PageLoadTiming = [ + Type.PageLoadTiming, + number, + number, + number, + number, + number, + number, + number, + number, + number +]; +export type PageRenderTiming = [ + Type.PageRenderTiming, + number, + number, + number +]; +export type CustomEvent = [ + Type.CustomEvent, + string, + string +]; +export type UserID = [ + Type.UserID, + string +]; +export type UserAnonymousID = [ + Type.UserAnonymousID, + string +]; +export type Metadata = [ + Type.Metadata, + string, + string +]; +export type CSSInsertRule = [ + Type.CSSInsertRule, + number, + string, + number +]; +export type CSSDeleteRule = [ + Type.CSSDeleteRule, + number, + number +]; +export type Fetch = [ + Type.Fetch, + string, + string, + string, + string, + number, + number, + number +]; +export type Profiler = [ + Type.Profiler, + string, + number, + string, + string +]; +export type OTable = [ + Type.OTable, + string, + string +]; +export type StateAction = [ + Type.StateAction, + string +]; +export type ReduxDeprecated = [ + Type.ReduxDeprecated, + string, + string, + number +]; +export type Vuex = [ + Type.Vuex, + string, + string +]; +export type MobX = [ + Type.MobX, + string, + string +]; +export type NgRx = [ + Type.NgRx, + string, + string, + number +]; +export type GraphQLDeprecated = [ + Type.GraphQLDeprecated, + string, + string, + string, + string, + number +]; +export type PerformanceTrack = [ + Type.PerformanceTrack, + number, + number, + number, + number +]; +export type StringDict = [ + Type.StringDict, + number, + string +]; +export type SetNodeAttributeDict = [ + Type.SetNodeAttributeDict, + number, + number, + number +]; +export type ResourceTimingDeprecated = [ + Type.ResourceTimingDeprecated, + number, + number, + number, + number, + number, + number, + string, + string +]; +export type ConnectionInformation = [ + Type.ConnectionInformation, + number, + string +]; +export type SetPageVisibility = [ + Type.SetPageVisibility, + boolean +]; +export type LoadFontFace = [ + Type.LoadFontFace, + number, + string, + string, + string +]; +export type SetNodeFocus = [ + Type.SetNodeFocus, + number +]; +export type LongTask = [ + Type.LongTask, + number, + number, + number, + number, + string, + string, + string +]; +export type SetNodeAttributeURLBased = [ + Type.SetNodeAttributeURLBased, + number, + string, + string, + string +]; +export type SetCSSDataURLBased = [ + Type.SetCSSDataURLBased, + number, + string, + string +]; +export type TechnicalInfo = [ + Type.TechnicalInfo, + string, + string +]; +export type CustomIssue = [ + Type.CustomIssue, + string, + string +]; +export type CSSInsertRuleURLBased = [ + Type.CSSInsertRuleURLBased, + number, + string, + number, + string +]; +export type MouseClick = [ + Type.MouseClick, + number, + number, + string, + string, + number, + number +]; +export type MouseClickDeprecated = [ + Type.MouseClickDeprecated, + number, + number, + string, + string +]; +export type CreateIFrameDocument = [ + Type.CreateIFrameDocument, + number, + number +]; +export type AdoptedSSReplaceURLBased = [ + Type.AdoptedSSReplaceURLBased, + number, + string, + string +]; +export type AdoptedSSInsertRuleURLBased = [ + Type.AdoptedSSInsertRuleURLBased, + number, + string, + number, + string +]; +export type AdoptedSSDeleteRule = [ + Type.AdoptedSSDeleteRule, + number, + number +]; +export type AdoptedSSAddOwner = [ + Type.AdoptedSSAddOwner, + number, + number +]; +export type AdoptedSSRemoveOwner = [ + Type.AdoptedSSRemoveOwner, + number, + number +]; +export type JSException = [ + Type.JSException, + string, + string, + string, + string +]; +export type Zustand = [ + Type.Zustand, + string, + string +]; +export type BatchMetadata = [ + Type.BatchMetadata, + number, + number, + number, + number, + string +]; +export type PartitionedMessage = [ + Type.PartitionedMessage, + number, + number +]; +export type NetworkRequest = [ + Type.NetworkRequest, + string, + string, + string, + string, + string, + number, + number, + number, + number +]; +export type WSChannel = [ + Type.WSChannel, + string, + string, + string, + number, + string, + string +]; +export type InputChange = [ + Type.InputChange, + number, + string, + boolean, + string, + number, + number +]; +export type SelectionChange = [ + Type.SelectionChange, + number, + number, + string +]; +export type MouseThrashing = [ + Type.MouseThrashing, + number +]; +export type UnbindNodes = [ + Type.UnbindNodes, + number +]; +export type ResourceTiming = [ + Type.ResourceTiming, + number, + number, + number, + number, + number, + number, + string, + string, + number, + boolean +]; +export type TabChange = [ + Type.TabChange, + string +]; +export type TabData = [ + Type.TabData, + string +]; +export type CanvasNode = [ + Type.CanvasNode, + string, + number +]; +export type TagTrigger = [ + Type.TagTrigger, + number +]; +export type Redux = [ + Type.Redux, + string, + string, + number, + number +]; +export type SetPageLocation = [ + Type.SetPageLocation, + string, + string, + number, + string +]; +export type GraphQL = [ + Type.GraphQL, + string, + string, + string, + string, + number +]; +type Message = Timestamp | SetPageLocationDeprecated | SetViewportSize | SetViewportScroll | CreateDocument | CreateElementNode | CreateTextNode | MoveNode | RemoveNode | SetNodeAttribute | RemoveNodeAttribute | SetNodeData | SetNodeScroll | SetInputTarget | SetInputValue | SetInputChecked | MouseMove | NetworkRequestDeprecated | ConsoleLog | PageLoadTiming | PageRenderTiming | CustomEvent | UserID | UserAnonymousID | Metadata | CSSInsertRule | CSSDeleteRule | Fetch | Profiler | OTable | StateAction | ReduxDeprecated | Vuex | MobX | NgRx | GraphQLDeprecated | PerformanceTrack | StringDict | SetNodeAttributeDict | ResourceTimingDeprecated | ConnectionInformation | SetPageVisibility | LoadFontFace | SetNodeFocus | LongTask | SetNodeAttributeURLBased | SetCSSDataURLBased | TechnicalInfo | CustomIssue | CSSInsertRuleURLBased | MouseClick | MouseClickDeprecated | CreateIFrameDocument | AdoptedSSReplaceURLBased | AdoptedSSInsertRuleURLBased | AdoptedSSDeleteRule | AdoptedSSAddOwner | AdoptedSSRemoveOwner | JSException | Zustand | BatchMetadata | PartitionedMessage | NetworkRequest | WSChannel | InputChange | SelectionChange | MouseThrashing | UnbindNodes | ResourceTiming | TabChange | TabData | CanvasNode | TagTrigger | Redux | SetPageLocation | GraphQL; +export default Message; diff --git a/tracker/tracker/src/common/messages.gen.js b/tracker/tracker/src/common/messages.gen.js new file mode 100644 index 000000000..e521319e7 --- /dev/null +++ b/tracker/tracker/src/common/messages.gen.js @@ -0,0 +1,3 @@ +// Auto-generated, do not edit +/* eslint-disable */ +export {}; diff --git a/tracker/tracker/src/common/messages.gen.js.map b/tracker/tracker/src/common/messages.gen.js.map new file mode 100644 index 000000000..26c16748d --- /dev/null +++ b/tracker/tracker/src/common/messages.gen.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.gen.js","sourceRoot":"","sources":["messages.gen.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,oBAAoB"} \ No newline at end of file diff --git a/tracker/tracker/src/common/tsconfig.tsbuildinfo b/tracker/tracker/src/common/tsconfig.tsbuildinfo new file mode 100644 index 000000000..18eb2825e --- /dev/null +++ b/tracker/tracker/src/common/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","./messages.gen.ts","./interaction.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/ts5.6/globals.typedarray.d.ts","../../node_modules/@types/node/ts5.6/buffer.buffer.d.ts","../../node_modules/undici-types/header.d.ts","../../node_modules/undici-types/readable.d.ts","../../node_modules/undici-types/file.d.ts","../../node_modules/undici-types/fetch.d.ts","../../node_modules/undici-types/formdata.d.ts","../../node_modules/undici-types/connector.d.ts","../../node_modules/undici-types/client.d.ts","../../node_modules/undici-types/errors.d.ts","../../node_modules/undici-types/dispatcher.d.ts","../../node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/undici-types/global-origin.d.ts","../../node_modules/undici-types/pool-stats.d.ts","../../node_modules/undici-types/pool.d.ts","../../node_modules/undici-types/handlers.d.ts","../../node_modules/undici-types/balanced-pool.d.ts","../../node_modules/undici-types/agent.d.ts","../../node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/undici-types/mock-agent.d.ts","../../node_modules/undici-types/mock-client.d.ts","../../node_modules/undici-types/mock-pool.d.ts","../../node_modules/undici-types/mock-errors.d.ts","../../node_modules/undici-types/proxy-agent.d.ts","../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/undici-types/retry-handler.d.ts","../../node_modules/undici-types/retry-agent.d.ts","../../node_modules/undici-types/api.d.ts","../../node_modules/undici-types/interceptors.d.ts","../../node_modules/undici-types/util.d.ts","../../node_modules/undici-types/cookies.d.ts","../../node_modules/undici-types/patch.d.ts","../../node_modules/undici-types/websocket.d.ts","../../node_modules/undici-types/eventsource.d.ts","../../node_modules/undici-types/filereader.d.ts","../../node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/undici-types/content-type.d.ts","../../node_modules/undici-types/cache.d.ts","../../node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/sqlite.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/ts5.6/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/parse5/dist/cjs/common/html.d.ts","../../node_modules/parse5/dist/cjs/common/token.d.ts","../../node_modules/parse5/dist/cjs/common/error-codes.d.ts","../../node_modules/parse5/dist/cjs/tokenizer/preprocessor.d.ts","../../node_modules/entities/lib/generated/decode-data-html.d.ts","../../node_modules/entities/lib/generated/decode-data-xml.d.ts","../../node_modules/entities/lib/decode_codepoint.d.ts","../../node_modules/entities/lib/decode.d.ts","../../node_modules/parse5/dist/cjs/tokenizer/index.d.ts","../../node_modules/parse5/dist/cjs/tree-adapters/interface.d.ts","../../node_modules/parse5/dist/cjs/parser/open-element-stack.d.ts","../../node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts","../../node_modules/parse5/dist/cjs/parser/index.d.ts","../../node_modules/parse5/dist/cjs/tree-adapters/default.d.ts","../../node_modules/parse5/dist/cjs/serializer/index.d.ts","../../node_modules/parse5/dist/cjs/common/foreign-content.d.ts","../../node_modules/parse5/dist/cjs/index.d.ts","../../node_modules/@types/tough-cookie/index.d.ts","../../node_modules/@types/jsdom/base.d.ts","../../node_modules/@types/jsdom/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/resolve/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../../../node_modules/.pnpm/@types+eslint@8.56.12/node_modules/@types/eslint/helpers.d.ts","../../../../node_modules/.pnpm/@types+estree@1.0.6/node_modules/@types/estree/index.d.ts","../../../../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../../../../node_modules/.pnpm/@types+eslint@8.56.12/node_modules/@types/eslint/index.d.ts","../../../../node_modules/.pnpm/@types+prettier@2.7.3/node_modules/@types/prettier/index.d.ts","../../../../../../../node_modules/@types/parse-json/index.d.ts"],"fileIdsList":[[61,103],[55,61,103,180,225],[49,61,103],[49,50,51,52,53,61,103],[49,51,61,103],[61,103,115,116,153,154],[61,103,116,153],[61,103,157],[61,103,158],[61,103,115,149,153,176,177,179],[61,103,178],[61,100,103],[61,102,103],[61,103,108,138],[61,103,104,109,115,116,123,135,146],[61,103,104,105,115,123],[56,57,58,61,103],[61,103,106,147],[61,103,107,108,116,124],[61,103,108,135,143],[61,103,109,111,115,123],[61,102,103,110],[61,103,111,112],[61,103,115],[61,103,113,115],[61,102,103,115],[61,103,115,116,117,135,146],[61,103,115,116,117,130,135,138],[61,98,103,151],[61,98,103,111,115,118,123,135,146],[61,103,115,116,118,119,123,135,143,146],[61,103,118,120,135,143,146],[61,103,115,121],[61,103,122,146,151],[61,103,111,115,123,135],[61,103,124],[61,103,125],[61,102,103,126],[61,100,101,102,103,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152],[61,103,128],[61,103,129],[61,103,115,130,131],[61,103,130,132,147,149],[61,103,115,135,136,137,138],[61,103,135,137],[61,103,135,136],[61,103,138],[61,103,139],[61,100,103,135],[61,103,115,141,142],[61,103,141,142],[61,103,108,123,135,143],[61,103,144],[103],[59,60,61,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152],[61,103,123,145],[61,103,118,129,146],[61,103,108,147],[61,103,135,148],[61,103,122,149],[61,103,150],[61,103,108,115,117,126,135,146,149,151],[61,103,135,152],[61,103,182,221],[61,103,182,206,221],[61,103,221],[61,103,182],[61,103,182,207,221],[61,103,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220],[61,103,207,221],[61,103,223],[61,103,164,165,166],[61,103,161],[61,103,160,161],[61,103,160],[61,103,160,161,162,168,169,172,173,174,175],[61,103,161,169],[61,103,160,161,162,168,169,170,171],[61,103,160,169],[61,103,169,173],[61,103,161,162,163,167],[61,103,162],[61,103,160,161,169],[61,70,74,103,146],[61,70,103,135,146],[61,65,103],[61,67,70,103,143,146],[61,103,123,143],[61,103,153],[61,65,103,153],[61,67,70,103,123,146],[61,62,63,66,69,103,115,135,146],[61,70,77,103],[61,62,68,103],[61,70,91,92,103],[61,66,70,103,138,146,153],[61,91,103,153],[61,64,65,103,153],[61,70,103],[61,64,65,66,67,68,69,70,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,92,93,94,95,96,97,103],[61,70,85,103],[61,70,77,78,103],[61,68,70,78,79,103],[61,69,103],[61,62,65,70,103],[61,70,74,78,79,103],[61,74,103],[61,68,70,73,103,146],[61,62,67,70,77,103],[61,103,135],[61,65,70,91,103,151,153],[47,61,103]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"69e65d976bf166ce4a9e6f6c18f94d2424bf116e90837ace179610dbccad9b42","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"469ed2e7c25e7b690f0ad5702750db3b4813a24e295737bd7b7807296809d22d","signature":"0c3e6fc060809e92494ae146a60bce9fe2e1699edd6059bc041fdab51c3186bf","impliedFormat":99},{"version":"25d5f8031bf3e8f65169169dd6cd1ea36cd0025a81590977da99541957d29519","signature":"2e4b29cedb546a80c330eebd0be32335ab8762f45f0e230f495708a3572c685c","impliedFormat":99},{"version":"7983487d0fbefb9b6ccc94390e8c826328d87e21cd4a62ea5b4c6b8f99f32550","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"9d16476349353974716bd2ad745830d0542c18c9edad4566d77ccd9d61c6cfb2","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"613b21ccdf3be6329d56e6caa13b258c842edf8377be7bc9f014ed14cdcfc308","affectsGlobalScope":true,"impliedFormat":1},{"version":"2d1319e6b5d0efd8c5eae07eb864a00102151e8b9afddd2d45db52e9aae002c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"81184fe8e67d78ac4e5374650f0892d547d665d77da2b2f544b5d84729c4a15d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f6114eb1e8f70ec08816bdaa6ec740a0a7a01f25743e36f655f00157be394374","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"76103716ba397bbb61f9fa9c9090dca59f39f9047cb1352b2179c5d8e7f4e8d0","impliedFormat":1},{"version":"53eac70430b30089a3a1959d8306b0f9cfaf0de75224b68ef25243e0b5ad1ca3","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"115971d64632ea4742b5b115fb64ed04bcaae2c3c342f13d9ba7e3f9ee39c4e7","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","impliedFormat":1},{"version":"46e07db372dd75edc1a26e68f16d1b7ffb34b7ab3db5cdb3e391a3604ad7bb7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"24642567d3729bcc545bacb65ee7c0db423400c7f1ef757cab25d05650064f98","impliedFormat":1},{"version":"e6f5a38687bebe43a4cef426b69d34373ef68be9a6b1538ec0a371e69f309354","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"875928df2f3e9a3aed4019539a15d04ff6140a06df6cd1b2feb836d22a81eaca","affectsGlobalScope":true,"impliedFormat":1},{"version":"20b97c3368b1a63d2156deea35d03b125bb07908906eb35e0438042a3bbb3e71","impliedFormat":1},{"version":"02e73584132025781e9ffa7beef9d58ee563954c592eb563dc724ebbfb7424eb","impliedFormat":1},{"version":"954580f86c8e2a4abd5dcd1bcdf1a4c7e012495f1c39e058dc738bc93024642a","impliedFormat":1},{"version":"fa56be9b96f747e93b895d8dc2aa4fb9f0816743e6e2abb9d60705e88d4743a2","impliedFormat":1},{"version":"8257c55ff6bff6169142a35fce6811b511d857b4ae4f522cdb6ce20fd2116b2c","impliedFormat":1},{"version":"6d386bc0d7f3afa1d401afc3e00ed6b09205a354a9795196caed937494a713e6","impliedFormat":1},{"version":"3a9e5dddbd6ca9507d0c06a557535ba2224a94a2b0f3e146e8215f93b7e5b3a8","affectsGlobalScope":true,"impliedFormat":1},{"version":"94c4187083503a74f4544503b5a30e2bd7af0032dc739b0c9a7ce87f8bddc7b9","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"3c36ab47df4668254ccc170fc42e7d5116fd86a7e408d8dc220e559837cd2bbb","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f6abdaf8764ef01a552a958f45e795b5e79153b87ddad3af5264b86d2681b72","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"c6b4e0a02545304935ecbf7de7a8e056a31bb50939b5b321c9d50a405b5a0bba","impliedFormat":1},{"version":"4de73e132bf47437c56b1e8416c60d9d517c8ba3822e7c623b54d4300834dd37","impliedFormat":1},{"version":"e432b0e3761ca9ba734bdd41e19a75fec1454ca8e9769bfdf8b31011854cf06a","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"15c5e91b5f08be34a78e3d976179bf5b7a9cc28dc0ef1ffebffeb3c7812a2dca","impliedFormat":1},{"version":"a8f06c2382a30b7cb89ad2dfc48fc3b2b490f3dafcd839dadc008e4e5d57031d","impliedFormat":1},{"version":"553870e516f8c772b89f3820576152ebc70181d7994d96917bb943e37da7f8a7","impliedFormat":1},{"version":"269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","impliedFormat":1},{"version":"93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","impliedFormat":1},{"version":"745c4240220559bd340c8aeb6e3c5270a709d3565e934dc22a69c304703956bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"cca97c55398b8699fa3a96ef261b01d200ed2a44d2983586ab1a81d7d7b23cd9","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef91efa0baea5d0e0f0f27b574a8bc100ce62a6d7e70220a0d58af6acab5e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"f59493f68eade5200559e5016b5855f7d12e6381eb6cab9ad8a379af367b3b2d","impliedFormat":1},{"version":"125e3472965f529de239d2bc85b54579fed8e0b060d1d04de6576fb910a6ec7f","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"6512c499b32226c5a686ab98f5b33ae15bdebd6b9f3b60f80eeadd95e358f02c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a5c09990a37469b0311a92ce8feeb8682e83918723aedbd445bd7a0f510eaaa3","impliedFormat":1},{"version":"6b29aea17044029b257e5bd4e3e4f765cd72b8d3c11c753f363ab92cc3f9f947","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"d008cf1330c86b37a8128265c80795397c287cecff273bc3ce3a4883405f5112","affectsGlobalScope":true,"impliedFormat":1},{"version":"78dc0513cc4f1642906b74dda42146bcbd9df7401717d6e89ea6d72d12ecb539","impliedFormat":1},{"version":"171fd8807643c46a9d17e843959abdf10480d57d60d38d061fb44a4c8d4a8cc4","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"fd326577c62145816fe1acc306c734c2396487f76719d3785d4e825b34540b33","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"19990350fca066265b2c190c9b6cde1229f35002ea2d4df8c9e397e9942f6c89","impliedFormat":1},{"version":"8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","impliedFormat":1},{"version":"66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","impliedFormat":1},{"version":"9863f888da357e35e013ca3465b794a490a198226bd8232c2f81fb44e16ff323","impliedFormat":1},{"version":"3ee468ba409b231f05d8120a257d8fd52f81db173cfd55d2d38825d4a9e0d4d8","impliedFormat":1},{"version":"3ee468ba409b231f05d8120a257d8fd52f81db173cfd55d2d38825d4a9e0d4d8","impliedFormat":1},{"version":"8eda1b176639dc7e6dfb326bd10532e2de9e18c4f100ed9f3d0753b04e2c9f53","impliedFormat":1},{"version":"e61235deb17d4d200b1aebd5e1b78a9f7f03108d3fe73c522476de89f2169d88","impliedFormat":1},{"version":"fa292ea8941a603dc795593c5811d9b865b96e560f99dcfcec94705d5264296d","impliedFormat":1},{"version":"db085d2171d48938a99e851dafe0e486dce9859e5dfa73c21de5ed3d4d6fb0c5","impliedFormat":1},{"version":"fb741132c87a219532b69832d9389ed13db734b436ad3d0d62d722de86321869","impliedFormat":1},{"version":"a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","impliedFormat":1},{"version":"0b098b627c5198819456b7466aef8253f562a6a64d66810804cfad6ff36204c6","impliedFormat":1},{"version":"91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","impliedFormat":1},{"version":"052ba354bab8fb943e0bc05a0769f7b81d7c3b3c6cd0f5cfa53c7b2da2a525c5","impliedFormat":1},{"version":"927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","impliedFormat":1},{"version":"3eff03b683a39dd93f7fbac0c47d78ed2ac42d71089a04d1c999fa6c3307f9fd","impliedFormat":1},{"version":"03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","impliedFormat":1},{"version":"fd0589ca571ad090b531d8c095e26caa53d4825c64d3ff2b2b1ab95d72294175","impliedFormat":1},{"version":"669843ecafb89ae1e944df06360e8966219e4c1c34c0d28aa2503272cdd444a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"8baa5d0febc68db886c40bf341e5c90dc215a90cd64552e47e8184be6b7e3358","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"d88a5e779faf033be3d52142a04fbe1cb96009868e3bbdd296b2bc6c59e06c0e","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1}],"root":[47,48],"options":{"allowSyntheticDefaultImports":true,"alwaysStrict":true,"composite":true,"esModuleInterop":true,"module":199,"noImplicitAny":true,"noImplicitThis":true,"rootDir":"..","strictNullChecks":true,"target":7},"referencedMap":[[225,1],[228,2],[226,1],[227,1],[229,1],[51,3],[49,1],[54,4],[50,3],[52,5],[53,3],[55,1],[155,6],[156,7],[157,1],[158,8],[159,9],[178,10],[179,11],[180,1],[154,1],[100,12],[101,12],[102,13],[103,14],[104,15],[105,16],[56,1],[59,17],[57,1],[58,1],[106,18],[107,19],[108,20],[109,21],[110,22],[111,23],[112,23],[114,24],[113,25],[115,26],[116,27],[117,28],[99,29],[118,30],[119,31],[120,32],[121,33],[122,34],[123,35],[124,36],[125,37],[126,38],[127,39],[128,40],[129,41],[130,42],[131,42],[132,43],[133,1],[134,1],[135,44],[137,45],[136,46],[138,47],[139,48],[140,49],[141,50],[142,51],[143,52],[144,53],[61,54],[60,1],[153,55],[145,56],[146,57],[147,58],[148,59],[149,60],[150,61],[151,62],[152,63],[181,1],[206,64],[207,65],[182,66],[185,66],[204,64],[205,64],[195,64],[194,67],[192,64],[187,64],[200,64],[198,64],[202,64],[186,64],[199,64],[203,64],[188,64],[189,64],[201,64],[183,64],[190,64],[191,64],[193,64],[197,64],[208,68],[196,64],[184,64],[221,69],[220,1],[215,68],[217,70],[216,68],[209,68],[210,68],[212,68],[214,68],[218,70],[219,70],[211,70],[213,70],[222,1],[177,1],[223,1],[224,71],[167,72],[166,1],[164,1],[165,1],[162,73],[175,74],[160,1],[161,75],[176,76],[171,77],[172,78],[170,79],[174,80],[168,81],[163,82],[173,83],[169,74],[45,1],[46,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[4,1],[21,1],[25,1],[22,1],[23,1],[24,1],[26,1],[27,1],[28,1],[5,1],[29,1],[30,1],[31,1],[32,1],[6,1],[36,1],[33,1],[34,1],[35,1],[37,1],[7,1],[38,1],[43,1],[44,1],[39,1],[40,1],[41,1],[42,1],[1,1],[77,84],[87,85],[76,84],[97,86],[68,87],[67,88],[96,89],[90,90],[95,91],[70,92],[84,93],[69,94],[93,95],[65,96],[64,89],[94,97],[66,98],[71,99],[72,1],[75,99],[62,1],[98,100],[88,101],[79,102],[80,103],[82,104],[78,105],[81,106],[91,89],[73,107],[74,108],[83,109],[63,110],[86,101],[85,99],[89,1],[92,111],[48,112],[47,1],[230,1]],"latestChangedDtsFile":"./interaction.d.ts","version":"5.6.3"} \ No newline at end of file diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index 71ab45771..ede0720ac 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -40,6 +40,7 @@ import Sanitizer from './sanitizer.js' import type { Options as SessOptions } from './session.js' import Session from './session.js' import Ticker from './ticker.js' +import { MaintainerOptions } from './nodes/maintainer.js' interface TypedWorker extends Omit { postMessage(data: ToWorkerData): void @@ -174,6 +175,16 @@ type AppOptions = { * and event listeners * */ forceNgOff?: boolean + /** + * This option is used to change how tracker handles potentially detached nodes + * + * defaults here are tested and proven to be lightweight and easy on cpu + * + * consult the docs before changing it + * */ + nodes?: { + maintainer: Partial + } } & WebworkerOptions & SessOptions @@ -340,6 +351,7 @@ export default class App { this.nodes = new Nodes({ node_id: this.options.node_id, forceNgOff: Boolean(options.forceNgOff), + maintainer: this.options.nodes?.maintainer, }) this.observer = new Observer({ app: this, options }) this.ticker = new Ticker(this) diff --git a/tracker/tracker/src/main/app/nodes/index.ts b/tracker/tracker/src/main/app/nodes/index.ts index 45a1a76a6..40e0edf92 100644 --- a/tracker/tracker/src/main/app/nodes/index.ts +++ b/tracker/tracker/src/main/app/nodes/index.ts @@ -1,9 +1,15 @@ import { createEventListener, deleteEventListener } from '../../utils.js' -import Maintainer from './maintainer.js' +import Maintainer, { MaintainerOptions } from './maintainer.js' type NodeCallback = (node: Node, isStart: boolean) => void type ElementListener = [string, EventListener, boolean] +export interface NodesOptions { + node_id: string + forceNgOff: boolean + maintainer?: Partial +} + export default class Nodes { private readonly nodes: Map = new Map() private totalNodeAmount = 0 @@ -14,10 +20,10 @@ export default class Nodes { private readonly forceNgOff: boolean private readonly maintainer: Maintainer - constructor(params: { node_id: string; forceNgOff: boolean }) { + constructor(params: NodesOptions) { this.node_id = params.node_id this.forceNgOff = params.forceNgOff - this.maintainer = new Maintainer(this.nodes, this.unregisterNode) + this.maintainer = new Maintainer(this.nodes, this.unregisterNode, params.maintainer) this.maintainer.start() } diff --git a/tracker/tracker/src/main/app/nodes/maintainer.ts b/tracker/tracker/src/main/app/nodes/maintainer.ts index 3df725acd..9ce6a12d7 100644 --- a/tracker/tracker/src/main/app/nodes/maintainer.ts +++ b/tracker/tracker/src/main/app/nodes/maintainer.ts @@ -57,25 +57,62 @@ function isNodeStillActive(node: Node): boolean { } } +export interface MaintainerOptions { + /** + * Run cleanup each X ms + * + * @default 30 * 1000 + * */ + interval: number + /** + * Maintainer checks nodes in small batches over 50ms timeouts + * + * @default 2500 + * */ + batchSize: number + /** + * @default true + * */ + enabled: boolean +} + +const defaults = { + interval: SECOND * 30, + batchSize: 2500, + enabled: true, +} + class Maintainer { private interval: ReturnType + private readonly options: MaintainerOptions constructor( private readonly nodes: Map, private readonly unregisterNode: (node: Node) => void, - ) {} + options?: Partial, + ) { + this.options = { ...defaults, ...options } + } public start = () => { + if (!this.options.enabled) { + return + } + + this.stop() + this.interval = setInterval(() => { - processMapInBatches(this.nodes, SECOND * 2.5, (node) => { + processMapInBatches(this.nodes, this.options.batchSize, (node) => { if (!isNodeStillActive(node)) { this.unregisterNode(node) } }) - }, SECOND * 30) + }, this.options.interval) } public stop = () => { - clearInterval(this.interval) + if (this.interval) { + clearInterval(this.interval) + } } } diff --git a/tracker/tracker/src/main/index.ts b/tracker/tracker/src/main/index.ts index 1407ca650..566ca5e9c 100644 --- a/tracker/tracker/src/main/index.ts +++ b/tracker/tracker/src/main/index.ts @@ -106,7 +106,10 @@ export default class API { if (!IN_BROWSER || !processOptions(options)) { return } - if ((window as any).__OPENREPLAY__) { + if ( + (window as any).__OPENREPLAY__ || + (!this.crossdomainMode && inIframe() && (window.top as any)?.__OPENREPLAY__) + ) { console.error('OpenReplay: one tracker instance has been initialised already') return } diff --git a/tracker/tracker/src/main/modules/exception.ts b/tracker/tracker/src/main/modules/exception.ts index abd6c2890..ffd3ab79e 100644 --- a/tracker/tracker/src/main/modules/exception.ts +++ b/tracker/tracker/src/main/modules/exception.ts @@ -1,7 +1,7 @@ import type App from '../app/index.js' import type Message from '../app/messages.gen.js' import { JSException } from '../app/messages.gen.js' -import ErrorStackParser from 'error-stack-parser' +import { parse } from 'error-stack-parser-es' export interface Options { captureExceptions: boolean @@ -34,7 +34,7 @@ export function getExceptionMessage( ): Message { let stack = fallbackStack try { - stack = ErrorStackParser.parse(error) + stack = parse(error) } catch (e) {} return JSException(error.name, error.message, JSON.stringify(stack), JSON.stringify(metadata)) } diff --git a/tracker/tracker/src/main/modules/tagWatcher.ts b/tracker/tracker/src/main/modules/tagWatcher.ts index 5918dbc9c..4899c2073 100644 --- a/tracker/tracker/src/main/modules/tagWatcher.ts +++ b/tracker/tracker/src/main/modules/tagWatcher.ts @@ -16,8 +16,9 @@ class TagWatcher { this.sessionStorage = params.sessionStorage this.errLog = params.errLog this.onTag = params.onTag + // @ts-ignore const tags: { id: number; selector: string }[] = JSON.parse( - sessionStorage.getItem(WATCHED_TAGS_KEY) ?? '[]', + params.sessionStorage.getItem(WATCHED_TAGS_KEY) ?? '[]', ) this.setTags(tags) this.observer = new IntersectionObserver((entries) => { diff --git a/tracker/tracker/src/main/tsconfig-cjs.json b/tracker/tracker/src/main/tsconfig-cjs.json index 33b25ddcb..a9f9e3466 100644 --- a/tracker/tracker/src/main/tsconfig-cjs.json +++ b/tracker/tracker/src/main/tsconfig-cjs.json @@ -2,6 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "module": "CommonJS", - "outDir": "../../build/cjs" + "moduleResolution": "Node", + "declarationDir": "../../dist/cjs" }, + "references": [{ "path": "../common" }] } \ No newline at end of file diff --git a/tracker/tracker/src/main/tsconfig.json b/tracker/tracker/src/main/tsconfig.json index 4a55e8b55..b35783a66 100644 --- a/tracker/tracker/src/main/tsconfig.json +++ b/tracker/tracker/src/main/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "allowSyntheticDefaultImports": true, "lib": ["es2020", "dom"], - "declaration": true + "declaration": true, + "declarationDir": "../../dist/lib", }, "references": [{ "path": "../common" }] } diff --git a/tracker/tracker/src/tests/attributeSender.unit.test.ts b/tracker/tracker/src/tests/attributeSender.unit.test.ts index 8c177ac90..0fc8f50be 100644 --- a/tracker/tracker/src/tests/attributeSender.unit.test.ts +++ b/tracker/tracker/src/tests/attributeSender.unit.test.ts @@ -10,7 +10,10 @@ describe('AttributeSender', () => { appMock = { send: (...args: any[]) => args, } - attributeSender = new AttributeSender(appMock, false) + attributeSender = new AttributeSender({ + app: appMock, + isDictDisabled: false, + }) }) afterEach(() => { diff --git a/tracker/tracker/src/tests/featureFlags.unit.test.ts b/tracker/tracker/src/tests/featureFlags.unit.test.ts index 49ea25d73..c23b6e705 100644 --- a/tracker/tracker/src/tests/featureFlags.unit.test.ts +++ b/tracker/tracker/src/tests/featureFlags.unit.test.ts @@ -1,4 +1,4 @@ -import FeatureFlags, { FetchPersistFlagsData, IFeatureFlag } from '../main/modules/FeatureFlags' +import FeatureFlags, { FetchPersistFlagsData, IFeatureFlag } from '../main/modules/featureFlags' import { describe, expect, jest, afterEach, beforeEach, test } from '@jest/globals' jest.mock('../main/app/index.js') diff --git a/tracker/tracker/src/tests/nodes.unit.test.ts b/tracker/tracker/src/tests/nodes.unit.test.ts index 532f22b67..ee32bf0a0 100644 --- a/tracker/tracker/src/tests/nodes.unit.test.ts +++ b/tracker/tracker/src/tests/nodes.unit.test.ts @@ -7,7 +7,10 @@ describe('Nodes', () => { const mockCallback = jest.fn() beforeEach(() => { - nodes = new Nodes(nodeId, false) + nodes = new Nodes({ + node_id: nodeId, + forceNgOff: false, + }) mockCallback.mockClear() }) diff --git a/tracker/tracker/src/tests/sanitizer.unit.test.ts b/tracker/tracker/src/tests/sanitizer.unit.test.ts index 30037a0e8..295a570a8 100644 --- a/tracker/tracker/src/tests/sanitizer.unit.test.ts +++ b/tracker/tracker/src/tests/sanitizer.unit.test.ts @@ -21,8 +21,11 @@ describe('Sanitizer', () => { getID: (el: { mockId: number }) => el.mockId, }, } - // @ts-expect-error - sanitizer = new Sanitizer(app, options) + sanitizer = new Sanitizer({ + // @ts-expect-error + app, + options, + }) }) afterEach(() => { @@ -78,7 +81,7 @@ describe('Sanitizer', () => { } // @ts-expect-error - sanitizer = new Sanitizer(app, options) + sanitizer = new Sanitizer({ app, options }) const spanNode = document.createElement('span') const divNode = document.createElement('div') diff --git a/tracker/tracker/src/tests/session.unit.test.ts b/tracker/tracker/src/tests/session.unit.test.ts index bd9dc22cb..e62db6b2f 100644 --- a/tracker/tracker/src/tests/session.unit.test.ts +++ b/tracker/tracker/src/tests/session.unit.test.ts @@ -1,5 +1,5 @@ import { jest, test, describe, beforeEach, afterEach, expect } from '@jest/globals' -import Session from '../main/app/Session' +import Session from '../main/app/session' import App from '../main/app/index.js' import { generateRandomId } from '../main/utils.js' @@ -34,7 +34,10 @@ describe('Session', () => { // @ts-ignore generateRandomId.mockReturnValue('random_id') - session = new Session(mockApp as unknown as App, mockOptions) + session = new Session({ + app: mockApp as App, + options: mockOptions, + }) }) afterEach(() => { diff --git a/tracker/tracker/src/tests/tagWatcher.test.ts b/tracker/tracker/src/tests/tagWatcher.test.ts index 0ce626dcb..35491a9d2 100644 --- a/tracker/tracker/src/tests/tagWatcher.test.ts +++ b/tracker/tracker/src/tests/tagWatcher.test.ts @@ -1,8 +1,12 @@ -import TagWatcher, { WATCHED_TAGS_KEY } from '../main/modules/TagWatcher' +import TagWatcher, { WATCHED_TAGS_KEY } from '../main/modules/tagWatcher' import { describe, expect, jest, afterEach, beforeEach, test } from '@jest/globals' +const getMockSaved = () => '[{"id":1,"selector":"div"},{"id":2,"selector":"span"}]' describe('TagWatcher', () => { - let sessionStorageMock: Storage + const sessionStorageMock = { + getItem: getMockSaved, + setItem: jest.fn(), + } as unknown as Storage let errLogMock: (args: any[]) => void const onTag = jest.fn() let mockObserve: Function @@ -10,11 +14,6 @@ describe('TagWatcher', () => { let mockDisconnect: Function beforeEach(() => { - sessionStorageMock = { - // @ts-ignore - getItem: jest.fn(), - setItem: jest.fn(), - } errLogMock = jest.fn() mockObserve = jest.fn() mockUnobserve = jest.fn() @@ -46,11 +45,9 @@ describe('TagWatcher', () => { } test('constructor initializes with tags from sessionStorage', () => { - // @ts-ignore - sessionStorageMock.getItem.mockReturnValue( - '[{"id":1,"selector":"div"},{"id":2,"selector":"span"}]', - ) - const watcher = new TagWatcher(sessionStorageMock, errLogMock, onTag) + const watcher = new TagWatcher({ + sessionStorage: sessionStorageMock, errLog: errLogMock, onTag + }) expect(watcher.tags).toEqual([ { id: 1, selector: 'div' }, { id: 2, selector: 'span' }, @@ -73,7 +70,9 @@ describe('TagWatcher', () => { }), }), ) - const watcher = new TagWatcher(sessionStorageMock, errLogMock, onTag) + const watcher = new TagWatcher({ + sessionStorage: sessionStorageMock, errLog: errLogMock, onTag + }) await watcher.fetchTags('https://localhost.com', '123') expect(watcher.tags).toEqual([ { id: 1, selector: 'div' }, @@ -87,7 +86,9 @@ describe('TagWatcher', () => { }) test('setTags sets intervals for each tag', () => { - const watcher = new TagWatcher(sessionStorageMock, errLogMock, onTag) + const watcher = new TagWatcher({ + sessionStorage: sessionStorageMock, errLog: errLogMock, onTag + }) watcher.setTags([ { id: 1, selector: 'div' }, { id: 2, selector: 'p' }, @@ -98,7 +99,9 @@ describe('TagWatcher', () => { }) test('onTagRendered sends messages', () => { - const watcher = new TagWatcher(sessionStorageMock, errLogMock, onTag) + const watcher = new TagWatcher({ + sessionStorage: sessionStorageMock, errLog: errLogMock, onTag + }) watcher.setTags([{ id: 1, selector: 'div' }]) // @ts-ignore document.querySelectorAll.mockReturnValue([{ __or_watcher_tagname: 'div' }]) // Mock a found element @@ -109,7 +112,9 @@ describe('TagWatcher', () => { }) test('clear method clears all intervals and resets tags', () => { - const watcher = new TagWatcher(sessionStorageMock, errLogMock, onTag) + const watcher = new TagWatcher({ + sessionStorage: sessionStorageMock, errLog: errLogMock, onTag + }) watcher.setTags([ { id: 1, selector: 'div' }, { id: 2, selector: 'p' }, diff --git a/tracker/tracker/src/webworker/tsconfig.json b/tracker/tracker/src/webworker/tsconfig.json index 5506aa82b..f30194786 100644 --- a/tracker/tracker/src/webworker/tsconfig.json +++ b/tracker/tracker/src/webworker/tsconfig.json @@ -1,7 +1,12 @@ { "extends": "../../tsconfig-base.json", "compilerOptions": { - "lib": ["es6"] + "lib": ["es6", "webworker"], + "module": "ESNext", + "moduleResolution": "Node", + "target": "es2016", + "preserveConstEnums": false, + "declaration": false }, "references": [{ "path": "../common" }] } diff --git a/tracker/tracker/tsconfig-base.json b/tracker/tracker/tsconfig-base.json index 5bda21c51..8379b4f1d 100644 --- a/tracker/tracker/tsconfig-base.json +++ b/tracker/tracker/tsconfig-base.json @@ -1,16 +1,16 @@ { "compilerOptions": { "rootDir": "src", - "outDir": "build", - "declaration": true, "noImplicitAny": true, "noImplicitThis": true, "strictNullChecks": true, "alwaysStrict": true, "target": "es2020", - "module": "es6", - "moduleResolution": "node", + "module": "NodeNext", + "moduleResolution": "NodeNext", "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, }, - "exclude": ["**/*.test.ts"] + "exclude": ["**/*.test.ts"], }