posthog-js 1.77.0 → 1.77.2

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/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "posthog-js",
3
- "version": "1.77.0",
3
+ "version": "1.77.2",
4
4
  "description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
5
5
  "repository": "https://github.com/PostHog/posthog-js",
6
6
  "author": "hey@posthog.com",
@@ -78,10 +78,11 @@
78
78
  "rrweb-snapshot": "2.0.0-alpha.8",
79
79
  "rrweb-v1": "npm:rrweb@1.1.3",
80
80
  "sinon": "9.0.2",
81
- "testcafe": "^1.19.0",
82
- "testcafe-browser-provider-browserstack": "^1.14.0",
81
+ "testcafe": "1.19.0",
82
+ "testcafe-browser-provider-browserstack": "1.14.0",
83
83
  "tslib": "^2.4.0",
84
- "typescript": "^4.7.4"
84
+ "typescript": "^4.7.4",
85
+ "yargs": "^17.7.2"
85
86
  },
86
87
  "lint-staged": {
87
88
  "*.{ts,tsx,js,json}": "prettier --write",
@@ -2,6 +2,12 @@ import { _bind_instance_methods, _each, _extend, _includes, _isFunction, _isUnde
2
2
  import { getClassName, getSafeText, isElementNode, isSensitiveElement, isTag, isTextNode, shouldCaptureDomEvent, shouldCaptureElement, shouldCaptureValue, autocaptureCompatibleElements, isAngularStyleAttr, isDocumentFragment, getDirectAndNestedSpanText, } from './autocapture-utils';
3
3
  import RageClick from './extensions/rageclick';
4
4
  import { AUTOCAPTURE_DISABLED_SERVER_SIDE } from './constants';
5
+ function limitText(length, text) {
6
+ if (text.length > length) {
7
+ return text.slice(0, length) + '...';
8
+ }
9
+ return text;
10
+ }
5
11
  var autocapture = {
6
12
  _initializedTokens: [],
7
13
  _isDisabledServerSide: null,
@@ -50,10 +56,10 @@ var autocapture = {
50
56
  };
51
57
  if (autocaptureCompatibleElements.indexOf(tag_name) > -1 && !maskText) {
52
58
  if (tag_name.toLowerCase() === 'a' || tag_name.toLowerCase() === 'button') {
53
- props['$el_text'] = getDirectAndNestedSpanText(elem);
59
+ props['$el_text'] = limitText(1024, getDirectAndNestedSpanText(elem));
54
60
  }
55
61
  else {
56
- props['$el_text'] = getSafeText(elem);
62
+ props['$el_text'] = limitText(1024, getSafeText(elem));
57
63
  }
58
64
  }
59
65
  var classes = getClassName(elem);
@@ -66,7 +72,7 @@ var autocapture = {
66
72
  if (isSensitiveElement(elem) && ['name', 'id', 'class'].indexOf(attr.name) === -1)
67
73
  return;
68
74
  if (!maskInputs && shouldCaptureValue(attr.value) && !isAngularStyleAttr(attr.name)) {
69
- props['attr__' + attr.name] = attr.value;
75
+ props['attr__' + attr.name] = limitText(1024, attr.value);
70
76
  }
71
77
  });
72
78
  var nthChild = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"autocapture.js","sourceRoot":"","sources":["../../src/autocapture.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n _bind_instance_methods,\n _each,\n _extend,\n _includes,\n _isFunction,\n _isUndefined,\n _register_event,\n _safewrap_instance_methods,\n logger,\n} from './utils'\nimport {\n getClassName,\n getSafeText,\n isElementNode,\n isSensitiveElement,\n isTag,\n isTextNode,\n shouldCaptureDomEvent,\n shouldCaptureElement,\n shouldCaptureValue,\n autocaptureCompatibleElements,\n isAngularStyleAttr,\n isDocumentFragment,\n getDirectAndNestedSpanText,\n} from './autocapture-utils'\nimport RageClick from './extensions/rageclick'\nimport { AutocaptureConfig, AutoCaptureCustomProperty, DecideResponse, Properties } from './types'\nimport { PostHog } from './posthog-core'\nimport { AUTOCAPTURE_DISABLED_SERVER_SIDE } from './constants'\n\nconst autocapture = {\n _initializedTokens: [] as string[],\n _isDisabledServerSide: null as boolean | null,\n _isAutocaptureEnabled: false as boolean,\n\n _setIsAutocaptureEnabled: function (instance: PostHog): void {\n const disabled_server_side =\n this._isDisabledServerSide === null\n ? !!instance.persistence?.props[AUTOCAPTURE_DISABLED_SERVER_SIDE]\n : this._isDisabledServerSide\n const enabled_client_side = !!instance.get_config('autocapture')\n this._isAutocaptureEnabled = enabled_client_side && !disabled_server_side\n },\n\n _previousElementSibling: function (el: Element): Element | null {\n if (el.previousElementSibling) {\n return el.previousElementSibling\n } else {\n let _el: Element | null = el\n do {\n _el = _el.previousSibling as Element | null // resolves to ChildNode->Node, which is Element's parent class\n } while (_el && !isElementNode(_el))\n return _el\n }\n },\n\n _getAugmentPropertiesFromElement: function (elem: Element): Properties {\n const shouldCaptureEl = shouldCaptureElement(elem)\n if (!shouldCaptureEl) {\n return {}\n }\n\n const props: Properties = {}\n\n _each(elem.attributes, function (attr: Attr) {\n if (attr.name.indexOf('data-ph-capture-attribute') === 0) {\n const propertyKey = attr.name.replace('data-ph-capture-attribute-', '')\n const propertyValue = attr.value\n if (propertyKey && propertyValue && shouldCaptureValue(propertyValue)) {\n props[propertyKey] = propertyValue\n }\n }\n })\n return props\n },\n\n _getPropertiesFromElement: function (elem: Element, maskInputs: boolean, maskText: boolean): Properties {\n const tag_name = elem.tagName.toLowerCase()\n const props: Properties = {\n tag_name: tag_name,\n }\n if (autocaptureCompatibleElements.indexOf(tag_name) > -1 && !maskText) {\n if (tag_name.toLowerCase() === 'a' || tag_name.toLowerCase() === 'button') {\n props['$el_text'] = getDirectAndNestedSpanText(elem)\n } else {\n props['$el_text'] = getSafeText(elem)\n }\n }\n\n const classes = getClassName(elem)\n if (classes.length > 0)\n props['classes'] = classes.split(' ').filter(function (c) {\n return c !== ''\n })\n\n _each(elem.attributes, function (attr: Attr) {\n // Only capture attributes we know are safe\n if (isSensitiveElement(elem) && ['name', 'id', 'class'].indexOf(attr.name) === -1) return\n\n if (!maskInputs && shouldCaptureValue(attr.value) && !isAngularStyleAttr(attr.name)) {\n props['attr__' + attr.name] = attr.value\n }\n })\n\n let nthChild = 1\n let nthOfType = 1\n let currentElem: Element | null = elem\n while ((currentElem = this._previousElementSibling(currentElem))) {\n // eslint-disable-line no-cond-assign\n nthChild++\n if (currentElem.tagName === elem.tagName) {\n nthOfType++\n }\n }\n props['nth_child'] = nthChild\n props['nth_of_type'] = nthOfType\n\n return props\n },\n\n _getDefaultProperties: function (eventType: string): Properties {\n return {\n $event_type: eventType,\n $ce_version: 1,\n }\n },\n\n _extractCustomPropertyValue: function (customProperty: AutoCaptureCustomProperty): string {\n const propValues: string[] = []\n _each(document.querySelectorAll(customProperty['css_selector']), function (matchedElem) {\n let value\n\n if (['input', 'select'].indexOf(matchedElem.tagName.toLowerCase()) > -1) {\n value = matchedElem['value']\n } else if (matchedElem['textContent']) {\n value = matchedElem['textContent']\n }\n\n if (shouldCaptureValue(value)) {\n propValues.push(value)\n }\n })\n return propValues.join(', ')\n },\n\n // TODO: delete custom_properties after changeless typescript refactor\n _getCustomProperties: function (targetElementList: Element[]): Properties {\n const props: Properties = {} // will be deleted\n _each(this._customProperties, (customProperty) => {\n _each(customProperty['event_selectors'], (eventSelector) => {\n const eventElements = document.querySelectorAll(eventSelector)\n _each(eventElements, (eventElement) => {\n if (_includes(targetElementList, eventElement) && shouldCaptureElement(eventElement)) {\n props[customProperty['name']] = this._extractCustomPropertyValue(customProperty)\n }\n })\n })\n })\n return props\n },\n\n _getEventTarget: function (e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (typeof e.target === 'undefined') {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n },\n\n _captureEvent: function (e: Event, instance: PostHog, eventName = '$autocapture'): boolean | void {\n /*** Don't mess with this code without running IE8 tests on it ***/\n let target = this._getEventTarget(e)\n if (isTextNode(target)) {\n // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = (target.parentNode || null) as Element | null\n }\n\n if (eventName === '$autocapture' && e.type === 'click' && e instanceof MouseEvent) {\n if (this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime())) {\n this._captureEvent(e, instance, '$rageclick')\n }\n }\n\n if (target && shouldCaptureDomEvent(target, e, this.config)) {\n const targetElementList = [target]\n let curEl = target\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n targetElementList.push(curEl.parentNode as Element)\n curEl = curEl.parentNode as Element\n }\n\n const elementsJson: Properties[] = []\n const autocaptureAugmentProperties: Properties = {}\n let href,\n explicitNoCapture = false\n _each(targetElementList, (el) => {\n const shouldCaptureEl = shouldCaptureElement(el)\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href')\n href = shouldCaptureEl && shouldCaptureValue(href) && href\n }\n\n // allow users to programmatically prevent capturing of elements by adding class 'ph-no-capture'\n const classes = getClassName(el).split(' ')\n if (_includes(classes, 'ph-no-capture')) {\n explicitNoCapture = true\n }\n\n elementsJson.push(\n this._getPropertiesFromElement(\n el,\n instance.get_config('mask_all_element_attributes'),\n instance.get_config('mask_all_text')\n )\n )\n\n const augmentProperties = this._getAugmentPropertiesFromElement(el)\n _extend(autocaptureAugmentProperties, augmentProperties)\n })\n\n if (!instance.get_config('mask_all_text')) {\n // if the element is a button or anchor tag get the span text from any\n // children and include it as/with the text property on the parent element\n if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'button') {\n elementsJson[0]['$el_text'] = getDirectAndNestedSpanText(target)\n } else {\n elementsJson[0]['$el_text'] = getSafeText(target)\n }\n }\n\n if (href) {\n elementsJson[0]['attr__href'] = href\n }\n\n if (explicitNoCapture) {\n return false\n }\n\n const props = _extend(\n this._getDefaultProperties(e.type),\n {\n $elements: elementsJson,\n },\n this._getCustomProperties(targetElementList),\n autocaptureAugmentProperties\n )\n\n instance.capture(eventName, props)\n return true\n }\n },\n\n // only reason is to stub for unit tests\n // since you can't override window.location props\n _navigate: function (href: string): void {\n window.location.href = href\n },\n\n _addDomEventHandlers: function (instance: PostHog): void {\n const handler = (e: Event) => {\n e = e || window.event\n this._captureEvent(e, instance)\n }\n _register_event(document, 'submit', handler, false, true)\n _register_event(document, 'change', handler, false, true)\n _register_event(document, 'click', handler, false, true)\n },\n\n _customProperties: [] as AutoCaptureCustomProperty[],\n rageclicks: null as RageClick | null,\n config: undefined as AutocaptureConfig | undefined,\n\n init: function (instance: PostHog): void {\n if (typeof instance.__autocapture !== 'boolean') {\n this.config = instance.__autocapture\n }\n\n // precompile the regex\n if (this.config?.url_allowlist) {\n this.config.url_allowlist = this.config.url_allowlist.map((url) => new RegExp(url))\n }\n\n this.rageclicks = new RageClick(instance.get_config('rageclick'))\n },\n\n afterDecideResponse: function (response: DecideResponse, instance: PostHog): void {\n const token = instance.get_config('token')\n if (this._initializedTokens.indexOf(token) > -1) {\n logger.log('autocapture already initialized for token \"' + token + '\"')\n return\n }\n\n if (instance.persistence) {\n instance.persistence.register({\n [AUTOCAPTURE_DISABLED_SERVER_SIDE]: !!response['autocapture_opt_out'],\n })\n }\n // store this in-memory incase persistence is disabled\n this._isDisabledServerSide = !!response['autocapture_opt_out']\n\n this._setIsAutocaptureEnabled(instance)\n\n this._initializedTokens.push(token)\n\n if (\n response &&\n response['config'] &&\n response['config']['enable_collect_everything'] &&\n this._isAutocaptureEnabled\n ) {\n // TODO: delete custom_properties after changeless typescript refactor\n if (response['custom_properties']) {\n this._customProperties = response['custom_properties']\n }\n this._addDomEventHandlers(instance)\n } else {\n instance['__autocapture'] = false\n }\n },\n\n // this is a mechanism to ramp up CE with no server-side interaction.\n // when CE is active, every page load results in a decide request. we\n // need to gently ramp this up so we don't overload decide. this decides\n // deterministically if CE is enabled for this project by modding the char\n // value of the project token.\n enabledForProject: function (\n token: string | null | undefined,\n numBuckets: number,\n numEnabledBuckets: number\n ): boolean {\n if (!token) {\n return true\n }\n numBuckets = !_isUndefined(numBuckets) ? numBuckets : 10\n numEnabledBuckets = !_isUndefined(numEnabledBuckets) ? numEnabledBuckets : 10\n let charCodeSum = 0\n for (let i = 0; i < token.length; i++) {\n charCodeSum += token.charCodeAt(i)\n }\n return charCodeSum % numBuckets < numEnabledBuckets\n },\n\n isBrowserSupported: function (): boolean {\n return _isFunction(document.querySelectorAll)\n },\n}\n\n_bind_instance_methods(autocapture)\n_safewrap_instance_methods(autocapture)\n\nexport { autocapture }\n"]}
1
+ {"version":3,"file":"autocapture.js","sourceRoot":"","sources":["../../src/autocapture.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n _bind_instance_methods,\n _each,\n _extend,\n _includes,\n _isFunction,\n _isUndefined,\n _register_event,\n _safewrap_instance_methods,\n logger,\n} from './utils'\nimport {\n getClassName,\n getSafeText,\n isElementNode,\n isSensitiveElement,\n isTag,\n isTextNode,\n shouldCaptureDomEvent,\n shouldCaptureElement,\n shouldCaptureValue,\n autocaptureCompatibleElements,\n isAngularStyleAttr,\n isDocumentFragment,\n getDirectAndNestedSpanText,\n} from './autocapture-utils'\nimport RageClick from './extensions/rageclick'\nimport { AutocaptureConfig, AutoCaptureCustomProperty, DecideResponse, Properties } from './types'\nimport { PostHog } from './posthog-core'\nimport { AUTOCAPTURE_DISABLED_SERVER_SIDE } from './constants'\n\nfunction limitText(length: number, text: string): string {\n if (text.length > length) {\n return text.slice(0, length) + '...'\n }\n return text\n}\n\nconst autocapture = {\n _initializedTokens: [] as string[],\n _isDisabledServerSide: null as boolean | null,\n _isAutocaptureEnabled: false as boolean,\n\n _setIsAutocaptureEnabled: function (instance: PostHog): void {\n const disabled_server_side =\n this._isDisabledServerSide === null\n ? !!instance.persistence?.props[AUTOCAPTURE_DISABLED_SERVER_SIDE]\n : this._isDisabledServerSide\n const enabled_client_side = !!instance.get_config('autocapture')\n this._isAutocaptureEnabled = enabled_client_side && !disabled_server_side\n },\n\n _previousElementSibling: function (el: Element): Element | null {\n if (el.previousElementSibling) {\n return el.previousElementSibling\n } else {\n let _el: Element | null = el\n do {\n _el = _el.previousSibling as Element | null // resolves to ChildNode->Node, which is Element's parent class\n } while (_el && !isElementNode(_el))\n return _el\n }\n },\n\n _getAugmentPropertiesFromElement: function (elem: Element): Properties {\n const shouldCaptureEl = shouldCaptureElement(elem)\n if (!shouldCaptureEl) {\n return {}\n }\n\n const props: Properties = {}\n\n _each(elem.attributes, function (attr: Attr) {\n if (attr.name.indexOf('data-ph-capture-attribute') === 0) {\n const propertyKey = attr.name.replace('data-ph-capture-attribute-', '')\n const propertyValue = attr.value\n if (propertyKey && propertyValue && shouldCaptureValue(propertyValue)) {\n props[propertyKey] = propertyValue\n }\n }\n })\n return props\n },\n\n _getPropertiesFromElement: function (elem: Element, maskInputs: boolean, maskText: boolean): Properties {\n const tag_name = elem.tagName.toLowerCase()\n const props: Properties = {\n tag_name: tag_name,\n }\n if (autocaptureCompatibleElements.indexOf(tag_name) > -1 && !maskText) {\n if (tag_name.toLowerCase() === 'a' || tag_name.toLowerCase() === 'button') {\n props['$el_text'] = limitText(1024, getDirectAndNestedSpanText(elem))\n } else {\n props['$el_text'] = limitText(1024, getSafeText(elem))\n }\n }\n\n const classes = getClassName(elem)\n if (classes.length > 0)\n props['classes'] = classes.split(' ').filter(function (c) {\n return c !== ''\n })\n\n _each(elem.attributes, function (attr: Attr) {\n // Only capture attributes we know are safe\n if (isSensitiveElement(elem) && ['name', 'id', 'class'].indexOf(attr.name) === -1) return\n\n if (!maskInputs && shouldCaptureValue(attr.value) && !isAngularStyleAttr(attr.name)) {\n props['attr__' + attr.name] = limitText(1024, attr.value)\n }\n })\n\n let nthChild = 1\n let nthOfType = 1\n let currentElem: Element | null = elem\n while ((currentElem = this._previousElementSibling(currentElem))) {\n // eslint-disable-line no-cond-assign\n nthChild++\n if (currentElem.tagName === elem.tagName) {\n nthOfType++\n }\n }\n props['nth_child'] = nthChild\n props['nth_of_type'] = nthOfType\n\n return props\n },\n\n _getDefaultProperties: function (eventType: string): Properties {\n return {\n $event_type: eventType,\n $ce_version: 1,\n }\n },\n\n _extractCustomPropertyValue: function (customProperty: AutoCaptureCustomProperty): string {\n const propValues: string[] = []\n _each(document.querySelectorAll(customProperty['css_selector']), function (matchedElem) {\n let value\n\n if (['input', 'select'].indexOf(matchedElem.tagName.toLowerCase()) > -1) {\n value = matchedElem['value']\n } else if (matchedElem['textContent']) {\n value = matchedElem['textContent']\n }\n\n if (shouldCaptureValue(value)) {\n propValues.push(value)\n }\n })\n return propValues.join(', ')\n },\n\n // TODO: delete custom_properties after changeless typescript refactor\n _getCustomProperties: function (targetElementList: Element[]): Properties {\n const props: Properties = {} // will be deleted\n _each(this._customProperties, (customProperty) => {\n _each(customProperty['event_selectors'], (eventSelector) => {\n const eventElements = document.querySelectorAll(eventSelector)\n _each(eventElements, (eventElement) => {\n if (_includes(targetElementList, eventElement) && shouldCaptureElement(eventElement)) {\n props[customProperty['name']] = this._extractCustomPropertyValue(customProperty)\n }\n })\n })\n })\n return props\n },\n\n _getEventTarget: function (e: Event): Element | null {\n // https://developer.mozilla.org/en-US/docs/Web/API/Event/target#Compatibility_notes\n if (typeof e.target === 'undefined') {\n return (e.srcElement as Element) || null\n } else {\n if ((e.target as HTMLElement)?.shadowRoot) {\n return (e.composedPath()[0] as Element) || null\n }\n return (e.target as Element) || null\n }\n },\n\n _captureEvent: function (e: Event, instance: PostHog, eventName = '$autocapture'): boolean | void {\n /*** Don't mess with this code without running IE8 tests on it ***/\n let target = this._getEventTarget(e)\n if (isTextNode(target)) {\n // defeat Safari bug (see: http://www.quirksmode.org/js/events_properties.html)\n target = (target.parentNode || null) as Element | null\n }\n\n if (eventName === '$autocapture' && e.type === 'click' && e instanceof MouseEvent) {\n if (this.rageclicks?.isRageClick(e.clientX, e.clientY, new Date().getTime())) {\n this._captureEvent(e, instance, '$rageclick')\n }\n }\n\n if (target && shouldCaptureDomEvent(target, e, this.config)) {\n const targetElementList = [target]\n let curEl = target\n while (curEl.parentNode && !isTag(curEl, 'body')) {\n if (isDocumentFragment(curEl.parentNode)) {\n targetElementList.push((curEl.parentNode as any).host)\n curEl = (curEl.parentNode as any).host\n continue\n }\n targetElementList.push(curEl.parentNode as Element)\n curEl = curEl.parentNode as Element\n }\n\n const elementsJson: Properties[] = []\n const autocaptureAugmentProperties: Properties = {}\n let href,\n explicitNoCapture = false\n _each(targetElementList, (el) => {\n const shouldCaptureEl = shouldCaptureElement(el)\n\n // if the element or a parent element is an anchor tag\n // include the href as a property\n if (el.tagName.toLowerCase() === 'a') {\n href = el.getAttribute('href')\n href = shouldCaptureEl && shouldCaptureValue(href) && href\n }\n\n // allow users to programmatically prevent capturing of elements by adding class 'ph-no-capture'\n const classes = getClassName(el).split(' ')\n if (_includes(classes, 'ph-no-capture')) {\n explicitNoCapture = true\n }\n\n elementsJson.push(\n this._getPropertiesFromElement(\n el,\n instance.get_config('mask_all_element_attributes'),\n instance.get_config('mask_all_text')\n )\n )\n\n const augmentProperties = this._getAugmentPropertiesFromElement(el)\n _extend(autocaptureAugmentProperties, augmentProperties)\n })\n\n if (!instance.get_config('mask_all_text')) {\n // if the element is a button or anchor tag get the span text from any\n // children and include it as/with the text property on the parent element\n if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'button') {\n elementsJson[0]['$el_text'] = getDirectAndNestedSpanText(target)\n } else {\n elementsJson[0]['$el_text'] = getSafeText(target)\n }\n }\n\n if (href) {\n elementsJson[0]['attr__href'] = href\n }\n\n if (explicitNoCapture) {\n return false\n }\n\n const props = _extend(\n this._getDefaultProperties(e.type),\n {\n $elements: elementsJson,\n },\n this._getCustomProperties(targetElementList),\n autocaptureAugmentProperties\n )\n\n instance.capture(eventName, props)\n return true\n }\n },\n\n // only reason is to stub for unit tests\n // since you can't override window.location props\n _navigate: function (href: string): void {\n window.location.href = href\n },\n\n _addDomEventHandlers: function (instance: PostHog): void {\n const handler = (e: Event) => {\n e = e || window.event\n this._captureEvent(e, instance)\n }\n _register_event(document, 'submit', handler, false, true)\n _register_event(document, 'change', handler, false, true)\n _register_event(document, 'click', handler, false, true)\n },\n\n _customProperties: [] as AutoCaptureCustomProperty[],\n rageclicks: null as RageClick | null,\n config: undefined as AutocaptureConfig | undefined,\n\n init: function (instance: PostHog): void {\n if (typeof instance.__autocapture !== 'boolean') {\n this.config = instance.__autocapture\n }\n\n // precompile the regex\n if (this.config?.url_allowlist) {\n this.config.url_allowlist = this.config.url_allowlist.map((url) => new RegExp(url))\n }\n\n this.rageclicks = new RageClick(instance.get_config('rageclick'))\n },\n\n afterDecideResponse: function (response: DecideResponse, instance: PostHog): void {\n const token = instance.get_config('token')\n if (this._initializedTokens.indexOf(token) > -1) {\n logger.log('autocapture already initialized for token \"' + token + '\"')\n return\n }\n\n if (instance.persistence) {\n instance.persistence.register({\n [AUTOCAPTURE_DISABLED_SERVER_SIDE]: !!response['autocapture_opt_out'],\n })\n }\n // store this in-memory incase persistence is disabled\n this._isDisabledServerSide = !!response['autocapture_opt_out']\n\n this._setIsAutocaptureEnabled(instance)\n\n this._initializedTokens.push(token)\n\n if (\n response &&\n response['config'] &&\n response['config']['enable_collect_everything'] &&\n this._isAutocaptureEnabled\n ) {\n // TODO: delete custom_properties after changeless typescript refactor\n if (response['custom_properties']) {\n this._customProperties = response['custom_properties']\n }\n this._addDomEventHandlers(instance)\n } else {\n instance['__autocapture'] = false\n }\n },\n\n // this is a mechanism to ramp up CE with no server-side interaction.\n // when CE is active, every page load results in a decide request. we\n // need to gently ramp this up so we don't overload decide. this decides\n // deterministically if CE is enabled for this project by modding the char\n // value of the project token.\n enabledForProject: function (\n token: string | null | undefined,\n numBuckets: number,\n numEnabledBuckets: number\n ): boolean {\n if (!token) {\n return true\n }\n numBuckets = !_isUndefined(numBuckets) ? numBuckets : 10\n numEnabledBuckets = !_isUndefined(numEnabledBuckets) ? numEnabledBuckets : 10\n let charCodeSum = 0\n for (let i = 0; i < token.length; i++) {\n charCodeSum += token.charCodeAt(i)\n }\n return charCodeSum % numBuckets < numEnabledBuckets\n },\n\n isBrowserSupported: function (): boolean {\n return _isFunction(document.querySelectorAll)\n },\n}\n\n_bind_instance_methods(autocapture)\n_safewrap_instance_methods(autocapture)\n\nexport { autocapture }\n"]}
@@ -1,4 +1,5 @@
1
1
  interface PageViewData {
2
+ pathname: string;
2
3
  maxScrollHeight?: number;
3
4
  maxScrollY?: number;
4
5
  lastScrollY?: number;
@@ -16,12 +17,15 @@ interface ScrollProperties {
16
17
  $prev_pageview_max_content?: number;
17
18
  $prev_pageview_max_content_percentage?: number;
18
19
  }
20
+ interface PageViewEventProperties extends ScrollProperties {
21
+ $prev_pageview_pathname?: string;
22
+ }
19
23
  export declare class PageViewManager {
20
24
  _pageViewData: PageViewData | undefined;
21
25
  _hasSeenPageView: boolean;
22
26
  _createPageViewData(): PageViewData;
23
- doPageView(): ScrollProperties;
24
- doPageLeave(): ScrollProperties;
27
+ doPageView(): PageViewEventProperties;
28
+ doPageLeave(): PageViewEventProperties;
25
29
  _calculatePrevPageScrollProperties(prevPageViewData: PageViewData | undefined): ScrollProperties;
26
30
  _updateScrollData: () => void;
27
31
  startMeasuringScrollPosition(): void;
@@ -1,4 +1,15 @@
1
- import * as utils from './utils';
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ import { window } from './utils';
2
13
  var PageViewManager = /** @class */ (function () {
3
14
  function PageViewManager() {
4
15
  var _this = this;
@@ -22,7 +33,9 @@ var PageViewManager = /** @class */ (function () {
22
33
  };
23
34
  }
24
35
  PageViewManager.prototype._createPageViewData = function () {
25
- return {};
36
+ return {
37
+ pathname: window.location.pathname,
38
+ };
26
39
  };
27
40
  PageViewManager.prototype.doPageView = function () {
28
41
  var prevPageViewData;
@@ -42,11 +55,11 @@ var PageViewManager = /** @class */ (function () {
42
55
  // update the scroll properties for the new page, but wait until the next tick
43
56
  // of the event loop
44
57
  setTimeout(this._updateScrollData, 0);
45
- return this._calculatePrevPageScrollProperties(prevPageViewData);
58
+ return __assign({ $prev_pageview_pathname: prevPageViewData === null || prevPageViewData === void 0 ? void 0 : prevPageViewData.pathname }, this._calculatePrevPageScrollProperties(prevPageViewData));
46
59
  };
47
60
  PageViewManager.prototype.doPageLeave = function () {
48
61
  var prevPageViewData = this._pageViewData;
49
- return this._calculatePrevPageScrollProperties(prevPageViewData);
62
+ return __assign({ $prev_pageview_pathname: prevPageViewData === null || prevPageViewData === void 0 ? void 0 : prevPageViewData.pathname }, this._calculatePrevPageScrollProperties(prevPageViewData));
50
63
  };
51
64
  PageViewManager.prototype._calculatePrevPageScrollProperties = function (prevPageViewData) {
52
65
  if (!prevPageViewData ||
@@ -83,26 +96,26 @@ var PageViewManager = /** @class */ (function () {
83
96
  };
84
97
  };
85
98
  PageViewManager.prototype.startMeasuringScrollPosition = function () {
86
- utils.window.addEventListener('scroll', this._updateScrollData);
87
- utils.window.addEventListener('scrollend', this._updateScrollData);
88
- utils.window.addEventListener('resize', this._updateScrollData);
99
+ window.addEventListener('scroll', this._updateScrollData);
100
+ window.addEventListener('scrollend', this._updateScrollData);
101
+ window.addEventListener('resize', this._updateScrollData);
89
102
  };
90
103
  PageViewManager.prototype.stopMeasuringScrollPosition = function () {
91
- utils.window.removeEventListener('scroll', this._updateScrollData);
92
- utils.window.removeEventListener('scrollend', this._updateScrollData);
93
- utils.window.removeEventListener('resize', this._updateScrollData);
104
+ window.removeEventListener('scroll', this._updateScrollData);
105
+ window.removeEventListener('scrollend', this._updateScrollData);
106
+ window.removeEventListener('resize', this._updateScrollData);
94
107
  };
95
108
  PageViewManager.prototype._scrollHeight = function () {
96
- return Math.max(0, utils.window.document.documentElement.scrollHeight - utils.window.document.documentElement.clientHeight);
109
+ return Math.max(0, window.document.documentElement.scrollHeight - window.document.documentElement.clientHeight);
97
110
  };
98
111
  PageViewManager.prototype._scrollY = function () {
99
- return utils.window.scrollY || utils.window.pageYOffset || utils.window.document.documentElement.scrollTop || 0;
112
+ return window.scrollY || window.pageYOffset || window.document.documentElement.scrollTop || 0;
100
113
  };
101
114
  PageViewManager.prototype._contentHeight = function () {
102
- return utils.window.document.documentElement.scrollHeight || 0;
115
+ return window.document.documentElement.scrollHeight || 0;
103
116
  };
104
117
  PageViewManager.prototype._contentY = function () {
105
- var clientHeight = utils.window.document.documentElement.clientHeight || 0;
118
+ var clientHeight = window.document.documentElement.clientHeight || 0;
106
119
  return this._scrollY() + clientHeight;
107
120
  };
108
121
  return PageViewManager;
@@ -1 +1 @@
1
- {"version":3,"file":"page-view.js","sourceRoot":"","sources":["../../src/page-view.ts"],"names":[],"mappings":"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","sourcesContent":["import * as utils from './utils'\n\ninterface PageViewData {\n // scroll is how far down the page the user has scrolled,\n // content is how far down the page the user can view content\n // (e.g. if the page is 1000 tall, but the user's screen is only 500 tall,\n // and they don't scroll at all, then scroll is 0 and content is 500)\n maxScrollHeight?: number\n maxScrollY?: number\n lastScrollY?: number\n maxContentHeight?: number\n maxContentY?: number\n lastContentY?: number\n}\n\ninterface ScrollProperties {\n $prev_pageview_last_scroll?: number\n $prev_pageview_last_scroll_percentage?: number\n $prev_pageview_max_scroll?: number\n $prev_pageview_max_scroll_percentage?: number\n $prev_pageview_last_content?: number\n $prev_pageview_last_content_percentage?: number\n $prev_pageview_max_content?: number\n $prev_pageview_max_content_percentage?: number\n}\n\nexport class PageViewManager {\n _pageViewData: PageViewData | undefined\n _hasSeenPageView = false\n\n _createPageViewData(): PageViewData {\n return {}\n }\n\n doPageView(): ScrollProperties {\n let prevPageViewData: PageViewData | undefined\n // if there were events created before the first PageView, we would have created a\n // pageViewData for them. If this happened, we don't want to create a new pageViewData\n if (!this._hasSeenPageView) {\n this._hasSeenPageView = true\n prevPageViewData = undefined\n if (!this._pageViewData) {\n this._pageViewData = this._createPageViewData()\n }\n } else {\n prevPageViewData = this._pageViewData\n this._pageViewData = this._createPageViewData()\n }\n\n // update the scroll properties for the new page, but wait until the next tick\n // of the event loop\n setTimeout(this._updateScrollData, 0)\n\n return this._calculatePrevPageScrollProperties(prevPageViewData)\n }\n\n doPageLeave(): ScrollProperties {\n const prevPageViewData = this._pageViewData\n return this._calculatePrevPageScrollProperties(prevPageViewData)\n }\n\n _calculatePrevPageScrollProperties(prevPageViewData: PageViewData | undefined): ScrollProperties {\n if (\n !prevPageViewData ||\n prevPageViewData.maxScrollHeight == null ||\n prevPageViewData.lastScrollY == null ||\n prevPageViewData.maxScrollY == null ||\n prevPageViewData.maxContentHeight == null ||\n prevPageViewData.lastContentY == null ||\n prevPageViewData.maxContentY == null\n ) {\n return {}\n }\n\n let { maxScrollHeight, lastScrollY, maxScrollY, maxContentHeight, lastContentY, maxContentY } = prevPageViewData\n\n // Use ceil, so that e.g. scrolling 999.5px of a 1000px page is considered 100% scrolled\n maxScrollHeight = Math.ceil(maxScrollHeight)\n lastScrollY = Math.ceil(lastScrollY)\n maxScrollY = Math.ceil(maxScrollY)\n maxContentHeight = Math.ceil(maxContentHeight)\n lastContentY = Math.ceil(lastContentY)\n maxContentY = Math.ceil(maxContentY)\n\n // if the maximum scroll height is near 0, then the percentage is 1\n const lastScrollPercentage = maxScrollHeight <= 1 ? 1 : clamp(lastScrollY / maxScrollHeight, 0, 1)\n const maxScrollPercentage = maxScrollHeight <= 1 ? 1 : clamp(maxScrollY / maxScrollHeight, 0, 1)\n const lastContentPercentage = maxContentHeight <= 1 ? 1 : clamp(lastContentY / maxContentHeight, 0, 1)\n const maxContentPercentage = maxContentHeight <= 1 ? 1 : clamp(maxContentY / maxContentHeight, 0, 1)\n\n return {\n $prev_pageview_last_scroll: lastScrollY,\n $prev_pageview_last_scroll_percentage: lastScrollPercentage,\n $prev_pageview_max_scroll: maxScrollY,\n $prev_pageview_max_scroll_percentage: maxScrollPercentage,\n $prev_pageview_last_content: lastContentY,\n $prev_pageview_last_content_percentage: lastContentPercentage,\n $prev_pageview_max_content: maxContentY,\n $prev_pageview_max_content_percentage: maxContentPercentage,\n }\n }\n\n _updateScrollData = () => {\n if (!this._pageViewData) {\n this._pageViewData = this._createPageViewData()\n }\n const pageViewData = this._pageViewData\n\n const scrollY = this._scrollY()\n const scrollHeight = this._scrollHeight()\n const contentY = this._contentY()\n const contentHeight = this._contentHeight()\n\n pageViewData.lastScrollY = scrollY\n pageViewData.maxScrollY = Math.max(scrollY, pageViewData.maxScrollY ?? 0)\n pageViewData.maxScrollHeight = Math.max(scrollHeight, pageViewData.maxScrollHeight ?? 0)\n\n pageViewData.lastContentY = contentY\n pageViewData.maxContentY = Math.max(contentY, pageViewData.maxContentY ?? 0)\n pageViewData.maxContentHeight = Math.max(contentHeight, pageViewData.maxContentHeight ?? 0)\n }\n\n startMeasuringScrollPosition() {\n utils.window.addEventListener('scroll', this._updateScrollData)\n utils.window.addEventListener('scrollend', this._updateScrollData)\n utils.window.addEventListener('resize', this._updateScrollData)\n }\n\n stopMeasuringScrollPosition() {\n utils.window.removeEventListener('scroll', this._updateScrollData)\n utils.window.removeEventListener('scrollend', this._updateScrollData)\n utils.window.removeEventListener('resize', this._updateScrollData)\n }\n\n _scrollHeight(): number {\n return Math.max(\n 0,\n utils.window.document.documentElement.scrollHeight - utils.window.document.documentElement.clientHeight\n )\n }\n\n _scrollY(): number {\n return utils.window.scrollY || utils.window.pageYOffset || utils.window.document.documentElement.scrollTop || 0\n }\n\n _contentHeight(): number {\n return utils.window.document.documentElement.scrollHeight || 0\n }\n\n _contentY(): number {\n const clientHeight = utils.window.document.documentElement.clientHeight || 0\n return this._scrollY() + clientHeight\n }\n}\n\nfunction clamp(x: number, min: number, max: number) {\n return Math.max(min, Math.min(x, max))\n}\n"]}
1
+ {"version":3,"file":"page-view.js","sourceRoot":"","sources":["../../src/page-view.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AA+BhC;IAAA;QAAA,iBAoIC;QAlIG,qBAAgB,GAAG,KAAK,CAAA;QAkFxB,sBAAiB,GAAG;;YAChB,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE;gBACrB,KAAI,CAAC,aAAa,GAAG,KAAI,CAAC,mBAAmB,EAAE,CAAA;aAClD;YACD,IAAM,YAAY,GAAG,KAAI,CAAC,aAAa,CAAA;YAEvC,IAAM,OAAO,GAAG,KAAI,CAAC,QAAQ,EAAE,CAAA;YAC/B,IAAM,YAAY,GAAG,KAAI,CAAC,aAAa,EAAE,CAAA;YACzC,IAAM,QAAQ,GAAG,KAAI,CAAC,SAAS,EAAE,CAAA;YACjC,IAAM,aAAa,GAAG,KAAI,CAAC,cAAc,EAAE,CAAA;YAE3C,YAAY,CAAC,WAAW,GAAG,OAAO,CAAA;YAClC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAA,YAAY,CAAC,UAAU,mCAAI,CAAC,CAAC,CAAA;YACzE,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAA,YAAY,CAAC,eAAe,mCAAI,CAAC,CAAC,CAAA;YAExF,YAAY,CAAC,YAAY,GAAG,QAAQ,CAAA;YACpC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAA,YAAY,CAAC,WAAW,mCAAI,CAAC,CAAC,CAAA;YAC5E,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAA,YAAY,CAAC,gBAAgB,mCAAI,CAAC,CAAC,CAAA;QAC/F,CAAC,CAAA;IA8BL,CAAC;IAhIG,6CAAmB,GAAnB;QACI,OAAO;YACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;SACrC,CAAA;IACL,CAAC;IAED,oCAAU,GAAV;QACI,IAAI,gBAA0C,CAAA;QAC9C,kFAAkF;QAClF,sFAAsF;QACtF,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;YAC5B,gBAAgB,GAAG,SAAS,CAAA;YAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;aAClD;SACJ;aAAM;YACH,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAA;YACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;SAClD;QAED,8EAA8E;QAC9E,oBAAoB;QACpB,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;QAErC,kBACI,uBAAuB,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,QAAQ,IAChD,IAAI,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,EAC/D;IACL,CAAC;IAED,qCAAW,GAAX;QACI,IAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAA;QAC3C,kBACI,uBAAuB,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,QAAQ,IAChD,IAAI,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,EAC/D;IACL,CAAC;IAED,4DAAkC,GAAlC,UAAmC,gBAA0C;QACzE,IACI,CAAC,gBAAgB;YACjB,gBAAgB,CAAC,eAAe,IAAI,IAAI;YACxC,gBAAgB,CAAC,WAAW,IAAI,IAAI;YACpC,gBAAgB,CAAC,UAAU,IAAI,IAAI;YACnC,gBAAgB,CAAC,gBAAgB,IAAI,IAAI;YACzC,gBAAgB,CAAC,YAAY,IAAI,IAAI;YACrC,gBAAgB,CAAC,WAAW,IAAI,IAAI,EACtC;YACE,OAAO,EAAE,CAAA;SACZ;QAEK,IAAA,eAAe,GAA2E,gBAAgB,gBAA3F,EAAE,WAAW,GAA8D,gBAAgB,YAA9E,EAAE,UAAU,GAAkD,gBAAgB,WAAlE,EAAE,gBAAgB,GAAgC,gBAAgB,iBAAhD,EAAE,YAAY,GAAkB,gBAAgB,aAAlC,EAAE,WAAW,GAAK,gBAAgB,YAArB,CAAqB;QAEhH,wFAAwF;QACxF,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC5C,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACpC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAClC,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC9C,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACtC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEpC,mEAAmE;QACnE,IAAM,oBAAoB,GAAG,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAClG,IAAM,mBAAmB,GAAG,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAChG,IAAM,qBAAqB,GAAG,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtG,IAAM,oBAAoB,GAAG,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEpG,OAAO;YACH,0BAA0B,EAAE,WAAW;YACvC,qCAAqC,EAAE,oBAAoB;YAC3D,yBAAyB,EAAE,UAAU;YACrC,oCAAoC,EAAE,mBAAmB;YACzD,2BAA2B,EAAE,YAAY;YACzC,sCAAsC,EAAE,qBAAqB;YAC7D,0BAA0B,EAAE,WAAW;YACvC,qCAAqC,EAAE,oBAAoB;SAC9D,CAAA;IACL,CAAC;IAsBD,sDAA4B,GAA5B;QACI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACzD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC5D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7D,CAAC;IAED,qDAA2B,GAA3B;QACI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC5D,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC/D,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAChE,CAAC;IAED,uCAAa,GAAb;QACI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;IACnH,CAAC;IAED,kCAAQ,GAAR;QACI,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,IAAI,CAAC,CAAA;IACjG,CAAC;IAED,wCAAc,GAAd;QACI,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,CAAC,CAAA;IAC5D,CAAC;IAED,mCAAS,GAAT;QACI,IAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,CAAC,CAAA;QACtE,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,YAAY,CAAA;IACzC,CAAC;IACL,sBAAC;AAAD,CAAC,AApID,IAoIC;;AAED,SAAS,KAAK,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;AAC1C,CAAC","sourcesContent":["import { window } from './utils'\n\ninterface PageViewData {\n pathname: string\n // scroll is how far down the page the user has scrolled,\n // content is how far down the page the user can view content\n // (e.g. if the page is 1000 tall, but the user's screen is only 500 tall,\n // and they don't scroll at all, then scroll is 0 and content is 500)\n maxScrollHeight?: number\n maxScrollY?: number\n lastScrollY?: number\n maxContentHeight?: number\n maxContentY?: number\n lastContentY?: number\n}\n\ninterface ScrollProperties {\n $prev_pageview_last_scroll?: number\n $prev_pageview_last_scroll_percentage?: number\n $prev_pageview_max_scroll?: number\n $prev_pageview_max_scroll_percentage?: number\n $prev_pageview_last_content?: number\n $prev_pageview_last_content_percentage?: number\n $prev_pageview_max_content?: number\n $prev_pageview_max_content_percentage?: number\n}\n\ninterface PageViewEventProperties extends ScrollProperties {\n $prev_pageview_pathname?: string\n}\n\nexport class PageViewManager {\n _pageViewData: PageViewData | undefined\n _hasSeenPageView = false\n\n _createPageViewData(): PageViewData {\n return {\n pathname: window.location.pathname,\n }\n }\n\n doPageView(): PageViewEventProperties {\n let prevPageViewData: PageViewData | undefined\n // if there were events created before the first PageView, we would have created a\n // pageViewData for them. If this happened, we don't want to create a new pageViewData\n if (!this._hasSeenPageView) {\n this._hasSeenPageView = true\n prevPageViewData = undefined\n if (!this._pageViewData) {\n this._pageViewData = this._createPageViewData()\n }\n } else {\n prevPageViewData = this._pageViewData\n this._pageViewData = this._createPageViewData()\n }\n\n // update the scroll properties for the new page, but wait until the next tick\n // of the event loop\n setTimeout(this._updateScrollData, 0)\n\n return {\n $prev_pageview_pathname: prevPageViewData?.pathname,\n ...this._calculatePrevPageScrollProperties(prevPageViewData),\n }\n }\n\n doPageLeave(): PageViewEventProperties {\n const prevPageViewData = this._pageViewData\n return {\n $prev_pageview_pathname: prevPageViewData?.pathname,\n ...this._calculatePrevPageScrollProperties(prevPageViewData),\n }\n }\n\n _calculatePrevPageScrollProperties(prevPageViewData: PageViewData | undefined): ScrollProperties {\n if (\n !prevPageViewData ||\n prevPageViewData.maxScrollHeight == null ||\n prevPageViewData.lastScrollY == null ||\n prevPageViewData.maxScrollY == null ||\n prevPageViewData.maxContentHeight == null ||\n prevPageViewData.lastContentY == null ||\n prevPageViewData.maxContentY == null\n ) {\n return {}\n }\n\n let { maxScrollHeight, lastScrollY, maxScrollY, maxContentHeight, lastContentY, maxContentY } = prevPageViewData\n\n // Use ceil, so that e.g. scrolling 999.5px of a 1000px page is considered 100% scrolled\n maxScrollHeight = Math.ceil(maxScrollHeight)\n lastScrollY = Math.ceil(lastScrollY)\n maxScrollY = Math.ceil(maxScrollY)\n maxContentHeight = Math.ceil(maxContentHeight)\n lastContentY = Math.ceil(lastContentY)\n maxContentY = Math.ceil(maxContentY)\n\n // if the maximum scroll height is near 0, then the percentage is 1\n const lastScrollPercentage = maxScrollHeight <= 1 ? 1 : clamp(lastScrollY / maxScrollHeight, 0, 1)\n const maxScrollPercentage = maxScrollHeight <= 1 ? 1 : clamp(maxScrollY / maxScrollHeight, 0, 1)\n const lastContentPercentage = maxContentHeight <= 1 ? 1 : clamp(lastContentY / maxContentHeight, 0, 1)\n const maxContentPercentage = maxContentHeight <= 1 ? 1 : clamp(maxContentY / maxContentHeight, 0, 1)\n\n return {\n $prev_pageview_last_scroll: lastScrollY,\n $prev_pageview_last_scroll_percentage: lastScrollPercentage,\n $prev_pageview_max_scroll: maxScrollY,\n $prev_pageview_max_scroll_percentage: maxScrollPercentage,\n $prev_pageview_last_content: lastContentY,\n $prev_pageview_last_content_percentage: lastContentPercentage,\n $prev_pageview_max_content: maxContentY,\n $prev_pageview_max_content_percentage: maxContentPercentage,\n }\n }\n\n _updateScrollData = () => {\n if (!this._pageViewData) {\n this._pageViewData = this._createPageViewData()\n }\n const pageViewData = this._pageViewData\n\n const scrollY = this._scrollY()\n const scrollHeight = this._scrollHeight()\n const contentY = this._contentY()\n const contentHeight = this._contentHeight()\n\n pageViewData.lastScrollY = scrollY\n pageViewData.maxScrollY = Math.max(scrollY, pageViewData.maxScrollY ?? 0)\n pageViewData.maxScrollHeight = Math.max(scrollHeight, pageViewData.maxScrollHeight ?? 0)\n\n pageViewData.lastContentY = contentY\n pageViewData.maxContentY = Math.max(contentY, pageViewData.maxContentY ?? 0)\n pageViewData.maxContentHeight = Math.max(contentHeight, pageViewData.maxContentHeight ?? 0)\n }\n\n startMeasuringScrollPosition() {\n window.addEventListener('scroll', this._updateScrollData)\n window.addEventListener('scrollend', this._updateScrollData)\n window.addEventListener('resize', this._updateScrollData)\n }\n\n stopMeasuringScrollPosition() {\n window.removeEventListener('scroll', this._updateScrollData)\n window.removeEventListener('scrollend', this._updateScrollData)\n window.removeEventListener('resize', this._updateScrollData)\n }\n\n _scrollHeight(): number {\n return Math.max(0, window.document.documentElement.scrollHeight - window.document.documentElement.clientHeight)\n }\n\n _scrollY(): number {\n return window.scrollY || window.pageYOffset || window.document.documentElement.scrollTop || 0\n }\n\n _contentHeight(): number {\n return window.document.documentElement.scrollHeight || 0\n }\n\n _contentY(): number {\n const clientHeight = window.document.documentElement.clientHeight || 0\n return this._scrollY() + clientHeight\n }\n}\n\nfunction clamp(x: number, min: number, max: number) {\n return Math.max(min, Math.min(x, max))\n}\n"]}
package/lib/src/utils.js CHANGED
@@ -431,7 +431,7 @@ export var _utf8Encode = function (string) {
431
431
  // This is to block various web spiders from executing our JS and
432
432
  // sending false capturing data
433
433
  export var _isBlockedUA = function (ua) {
434
- if (/(google web preview|baiduspider|yandexbot|bingbot|googlebot|yahoo! slurp|ahrefsbot|facebookexternalhit|facebookcatalog|applebot|semrushbot|duckduckbot|twitterbot|rogerbot|linkedinbot|mj12bot|sitebulb|bot.htm|bot.php|hubspot|crawler|prerender)/i.test(ua)) {
434
+ if (/(google web preview|baiduspider|yandexbot|bingbot|googlebot|yahoo! slurp|ahrefsbot|facebookexternalhit|facebookcatalog|applebot|semrushbot|duckduckbot|twitterbot|rogerbot|linkedinbot|mj12bot|sitebulb|bot.htm|bot.php|hubspot|crawler|prerender|gptbot)/i.test(ua)) {
435
435
  return true;
436
436
  }
437
437
  return false;