@amplitude/plugin-page-view-tracking-browser 1.0.6 → 1.0.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,4BAA4B,EAE5B,OAAO,EACR,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,sBAAsB,EAAE,4BAyHpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,UACtC,MAAM,UACN,MAAM,KACb,OAOF,CAAC"}
1
+ {"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,4BAA4B,EAE5B,OAAO,EACR,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,sBAAsB,EAAE,4BAgJpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,UACtC,MAAM,UACN,MAAM,KACb,OAOF,CAAC"}
@@ -15,6 +15,7 @@ var pageViewTrackingPlugin = function () {
15
15
  var options = {};
16
16
  var globalScope = (0, analytics_client_common_1.getGlobalScope)();
17
17
  var loggerProvider = undefined;
18
+ var pushState;
18
19
  var _a = tslib_1.__read(args, 2), clientOrOptions = _a[0], configOrUndefined = _a[1];
19
20
  if (clientOrOptions && 'init' in clientOrOptions) {
20
21
  amplitude = clientOrOptions;
@@ -48,12 +49,18 @@ var pageViewTrackingPlugin = function () {
48
49
  /* istanbul ignore next */
49
50
  var previousURL = typeof location !== 'undefined' ? location.href : null;
50
51
  var trackHistoryPageView = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
51
- var newURL, _a, _b, _c;
52
+ var newURL, shouldTrackPageView, _a, _b, _c;
52
53
  return tslib_1.__generator(this, function (_d) {
53
54
  switch (_d.label) {
54
55
  case 0:
55
56
  newURL = location.href;
56
- if (!((0, exports.shouldTrackHistoryPageView)(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad())) return [3 /*break*/, 4];
57
+ shouldTrackPageView = (0, exports.shouldTrackHistoryPageView)(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();
58
+ // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`
59
+ // This was previously done after `amplitude?.track(await createPageViewEvent());` and
60
+ // causes a concurrency issue where app triggers `pushState` twice with the same URL target
61
+ // but `previousURL` is only updated after the second `pushState` producing two page viewed events
62
+ previousURL = newURL;
63
+ if (!shouldTrackPageView) return [3 /*break*/, 4];
57
64
  /* istanbul ignore next */
58
65
  loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');
59
66
  if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];
@@ -68,12 +75,14 @@ var pageViewTrackingPlugin = function () {
68
75
  case 3:
69
76
  _a;
70
77
  _d.label = 4;
71
- case 4:
72
- previousURL = newURL;
73
- return [2 /*return*/];
78
+ case 4: return [2 /*return*/];
74
79
  }
75
80
  });
76
81
  }); };
82
+ /* istanbul ignore next */
83
+ var trackHistoryPageViewWrapper = function () {
84
+ void trackHistoryPageView();
85
+ };
77
86
  var plugin = {
78
87
  name: 'page-view-tracking',
79
88
  type: analytics_types_1.PluginType.ENRICHMENT,
@@ -98,9 +107,10 @@ var pageViewTrackingPlugin = function () {
98
107
  }
99
108
  if (options.trackHistoryChanges && globalScope) {
100
109
  /* istanbul ignore next */
101
- globalScope.addEventListener('popstate', function () {
102
- void trackHistoryPageView();
103
- });
110
+ globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);
111
+ // Save reference to original push state, to be used in teardown
112
+ // eslint-disable-next-line @typescript-eslint/unbound-method
113
+ pushState = globalScope.history.pushState;
104
114
  /* istanbul ignore next */
105
115
  // There is no global browser listener for changes to history, so we have
106
116
  // to modify pushState directly.
@@ -143,6 +153,17 @@ var pageViewTrackingPlugin = function () {
143
153
  }
144
154
  });
145
155
  }); },
156
+ teardown: function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
157
+ return tslib_1.__generator(this, function (_a) {
158
+ if (globalScope) {
159
+ globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);
160
+ if (pushState) {
161
+ globalScope.history.pushState = pushState;
162
+ }
163
+ }
164
+ return [2 /*return*/];
165
+ });
166
+ }); },
146
167
  };
147
168
  // Required for unit tests
148
169
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
@@ -1 +1 @@
1
- {"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { CampaignParser, getGlobalScope } from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n Logger,\n PluginType,\n} from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport {\n CreatePageViewTrackingPlugin,\n CreatePageViewTrackingPluginParameters,\n Options,\n} from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (\n ...args: CreatePageViewTrackingPluginParameters\n) => {\n let amplitude: BrowserClient | undefined;\n let options: Options = {};\n const globalScope = getGlobalScope();\n let loggerProvider: Logger | undefined = undefined;\n\n const [clientOrOptions, configOrUndefined] = args;\n if (clientOrOptions && 'init' in clientOrOptions) {\n amplitude = clientOrOptions;\n if (configOrUndefined) {\n options = configOrUndefined;\n }\n } else if (clientOrOptions) {\n options = clientOrOptions;\n }\n\n const createPageViewEvent = async (): Promise<Event> => {\n return {\n event_type: options.eventType ?? 'Page View',\n event_properties: {\n ...(await getCampaignParams()),\n page_domain: /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',\n page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',\n page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n page_url: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href.split('?')[0]) || '',\n },\n };\n };\n\n const shouldTrackOnPageLoad = () =>\n typeof options.trackOn === 'undefined' || (typeof options.trackOn === 'function' && options.trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n\n if (shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad()) {\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent());\n }\n previousURL = newURL;\n };\n\n const plugin = {\n name: 'page-view-tracking',\n type: PluginType.ENRICHMENT as const,\n\n setup: async (config: BrowserConfig, client?: BrowserClient) => {\n amplitude = amplitude ?? client;\n if (!amplitude) {\n const receivedType = clientOrOptions ? 'Options' : 'undefined';\n config.loggerProvider.error(\n `Argument of type '${receivedType}' is not assignable to parameter of type 'BrowserClient'.`,\n );\n return;\n }\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n options.trackOn = config.attribution?.trackPageViews ? 'attribution' : options.trackOn;\n\n if (!client && config.attribution?.trackPageViews) {\n loggerProvider.warn(\n `@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser.`,\n );\n config.attribution.trackPageViews = false;\n }\n\n if (options.trackHistoryChanges && globalScope) {\n /* istanbul ignore next */\n globalScope.addEventListener('popstate', () => {\n void trackHistoryPageView();\n });\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n void trackHistoryPageView();\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n\n amplitude.track(await createPageViewEvent());\n }\n },\n\n execute: async (event: Event) => {\n if (options.trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n const pageViewEvent = await createPageViewEvent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n return event;\n },\n };\n\n // Required for unit tests\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (plugin as any).__trackHistoryPageView = trackHistoryPageView;\n\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURL: string,\n oldURL: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly':\n return newURL.split('?')[0] !== oldURL.split('?')[0];\n default:\n return newURL !== oldURL;\n }\n};\n"]}
1
+ {"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { CampaignParser, getGlobalScope } from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n Logger,\n PluginType,\n} from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport {\n CreatePageViewTrackingPlugin,\n CreatePageViewTrackingPluginParameters,\n Options,\n} from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (\n ...args: CreatePageViewTrackingPluginParameters\n) => {\n let amplitude: BrowserClient | undefined;\n let options: Options = {};\n const globalScope = getGlobalScope();\n let loggerProvider: Logger | undefined = undefined;\n let pushState: undefined | ((data: any, unused: string, url?: string | URL | null) => void);\n\n const [clientOrOptions, configOrUndefined] = args;\n if (clientOrOptions && 'init' in clientOrOptions) {\n amplitude = clientOrOptions;\n if (configOrUndefined) {\n options = configOrUndefined;\n }\n } else if (clientOrOptions) {\n options = clientOrOptions;\n }\n\n const createPageViewEvent = async (): Promise<Event> => {\n return {\n event_type: options.eventType ?? 'Page View',\n event_properties: {\n ...(await getCampaignParams()),\n page_domain: /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',\n page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',\n page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n page_url: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href.split('?')[0]) || '',\n },\n };\n };\n\n const shouldTrackOnPageLoad = () =>\n typeof options.trackOn === 'undefined' || (typeof options.trackOn === 'function' && options.trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n const shouldTrackPageView =\n shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n\n if (shouldTrackPageView) {\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent());\n }\n };\n\n /* istanbul ignore next */\n const trackHistoryPageViewWrapper = () => {\n void trackHistoryPageView();\n };\n\n const plugin = {\n name: 'page-view-tracking',\n type: PluginType.ENRICHMENT as const,\n\n setup: async (config: BrowserConfig, client?: BrowserClient) => {\n amplitude = amplitude ?? client;\n if (!amplitude) {\n const receivedType = clientOrOptions ? 'Options' : 'undefined';\n config.loggerProvider.error(\n `Argument of type '${receivedType}' is not assignable to parameter of type 'BrowserClient'.`,\n );\n return;\n }\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n options.trackOn = config.attribution?.trackPageViews ? 'attribution' : options.trackOn;\n\n if (!client && config.attribution?.trackPageViews) {\n loggerProvider.warn(\n `@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser.`,\n );\n config.attribution.trackPageViews = false;\n }\n\n if (options.trackHistoryChanges && globalScope) {\n /* istanbul ignore next */\n globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n\n // Save reference to original push state, to be used in teardown\n // eslint-disable-next-line @typescript-eslint/unbound-method\n pushState = globalScope.history.pushState;\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n void trackHistoryPageView();\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n\n amplitude.track(await createPageViewEvent());\n }\n },\n\n execute: async (event: Event) => {\n if (options.trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n const pageViewEvent = await createPageViewEvent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n return event;\n },\n\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n if (pushState) {\n globalScope.history.pushState = pushState;\n }\n }\n },\n };\n\n // Required for unit tests\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (plugin as any).__trackHistoryPageView = trackHistoryPageView;\n\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURL: string,\n oldURL: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly':\n return newURL.split('?')[0] !== oldURL.split('?')[0];\n default:\n return newURL !== oldURL;\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,4BAA4B,EAE5B,OAAO,EACR,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,sBAAsB,EAAE,4BAyHpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,UACtC,MAAM,UACN,MAAM,KACb,OAOF,CAAC"}
1
+ {"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,4BAA4B,EAE5B,OAAO,EACR,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,sBAAsB,EAAE,4BAgJpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,UACtC,MAAM,UACN,MAAM,KACb,OAOF,CAAC"}
@@ -12,6 +12,7 @@ export var pageViewTrackingPlugin = function () {
12
12
  var options = {};
13
13
  var globalScope = getGlobalScope();
14
14
  var loggerProvider = undefined;
15
+ var pushState;
15
16
  var _a = __read(args, 2), clientOrOptions = _a[0], configOrUndefined = _a[1];
16
17
  if (clientOrOptions && 'init' in clientOrOptions) {
17
18
  amplitude = clientOrOptions;
@@ -45,12 +46,18 @@ export var pageViewTrackingPlugin = function () {
45
46
  /* istanbul ignore next */
46
47
  var previousURL = typeof location !== 'undefined' ? location.href : null;
47
48
  var trackHistoryPageView = function () { return __awaiter(void 0, void 0, void 0, function () {
48
- var newURL, _a, _b, _c;
49
+ var newURL, shouldTrackPageView, _a, _b, _c;
49
50
  return __generator(this, function (_d) {
50
51
  switch (_d.label) {
51
52
  case 0:
52
53
  newURL = location.href;
53
- if (!(shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad())) return [3 /*break*/, 4];
54
+ shouldTrackPageView = shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();
55
+ // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`
56
+ // This was previously done after `amplitude?.track(await createPageViewEvent());` and
57
+ // causes a concurrency issue where app triggers `pushState` twice with the same URL target
58
+ // but `previousURL` is only updated after the second `pushState` producing two page viewed events
59
+ previousURL = newURL;
60
+ if (!shouldTrackPageView) return [3 /*break*/, 4];
54
61
  /* istanbul ignore next */
55
62
  loggerProvider === null || loggerProvider === void 0 ? void 0 : loggerProvider.log('Tracking page view event');
56
63
  if (!(amplitude === null || amplitude === void 0)) return [3 /*break*/, 1];
@@ -65,12 +72,14 @@ export var pageViewTrackingPlugin = function () {
65
72
  case 3:
66
73
  _a;
67
74
  _d.label = 4;
68
- case 4:
69
- previousURL = newURL;
70
- return [2 /*return*/];
75
+ case 4: return [2 /*return*/];
71
76
  }
72
77
  });
73
78
  }); };
79
+ /* istanbul ignore next */
80
+ var trackHistoryPageViewWrapper = function () {
81
+ void trackHistoryPageView();
82
+ };
74
83
  var plugin = {
75
84
  name: 'page-view-tracking',
76
85
  type: PluginType.ENRICHMENT,
@@ -95,9 +104,10 @@ export var pageViewTrackingPlugin = function () {
95
104
  }
96
105
  if (options.trackHistoryChanges && globalScope) {
97
106
  /* istanbul ignore next */
98
- globalScope.addEventListener('popstate', function () {
99
- void trackHistoryPageView();
100
- });
107
+ globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);
108
+ // Save reference to original push state, to be used in teardown
109
+ // eslint-disable-next-line @typescript-eslint/unbound-method
110
+ pushState = globalScope.history.pushState;
101
111
  /* istanbul ignore next */
102
112
  // There is no global browser listener for changes to history, so we have
103
113
  // to modify pushState directly.
@@ -140,6 +150,17 @@ export var pageViewTrackingPlugin = function () {
140
150
  }
141
151
  });
142
152
  }); },
153
+ teardown: function () { return __awaiter(void 0, void 0, void 0, function () {
154
+ return __generator(this, function (_a) {
155
+ if (globalScope) {
156
+ globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);
157
+ if (pushState) {
158
+ globalScope.history.pushState = pushState;
159
+ }
160
+ }
161
+ return [2 /*return*/];
162
+ });
163
+ }); },
143
164
  };
144
165
  // Required for unit tests
145
166
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
@@ -1 +1 @@
1
- {"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { CampaignParser, getGlobalScope } from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n Logger,\n PluginType,\n} from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport {\n CreatePageViewTrackingPlugin,\n CreatePageViewTrackingPluginParameters,\n Options,\n} from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (\n ...args: CreatePageViewTrackingPluginParameters\n) => {\n let amplitude: BrowserClient | undefined;\n let options: Options = {};\n const globalScope = getGlobalScope();\n let loggerProvider: Logger | undefined = undefined;\n\n const [clientOrOptions, configOrUndefined] = args;\n if (clientOrOptions && 'init' in clientOrOptions) {\n amplitude = clientOrOptions;\n if (configOrUndefined) {\n options = configOrUndefined;\n }\n } else if (clientOrOptions) {\n options = clientOrOptions;\n }\n\n const createPageViewEvent = async (): Promise<Event> => {\n return {\n event_type: options.eventType ?? 'Page View',\n event_properties: {\n ...(await getCampaignParams()),\n page_domain: /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',\n page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',\n page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n page_url: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href.split('?')[0]) || '',\n },\n };\n };\n\n const shouldTrackOnPageLoad = () =>\n typeof options.trackOn === 'undefined' || (typeof options.trackOn === 'function' && options.trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n\n if (shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad()) {\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent());\n }\n previousURL = newURL;\n };\n\n const plugin = {\n name: 'page-view-tracking',\n type: PluginType.ENRICHMENT as const,\n\n setup: async (config: BrowserConfig, client?: BrowserClient) => {\n amplitude = amplitude ?? client;\n if (!amplitude) {\n const receivedType = clientOrOptions ? 'Options' : 'undefined';\n config.loggerProvider.error(\n `Argument of type '${receivedType}' is not assignable to parameter of type 'BrowserClient'.`,\n );\n return;\n }\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n options.trackOn = config.attribution?.trackPageViews ? 'attribution' : options.trackOn;\n\n if (!client && config.attribution?.trackPageViews) {\n loggerProvider.warn(\n `@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser.`,\n );\n config.attribution.trackPageViews = false;\n }\n\n if (options.trackHistoryChanges && globalScope) {\n /* istanbul ignore next */\n globalScope.addEventListener('popstate', () => {\n void trackHistoryPageView();\n });\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n void trackHistoryPageView();\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n\n amplitude.track(await createPageViewEvent());\n }\n },\n\n execute: async (event: Event) => {\n if (options.trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n const pageViewEvent = await createPageViewEvent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n return event;\n },\n };\n\n // Required for unit tests\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (plugin as any).__trackHistoryPageView = trackHistoryPageView;\n\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURL: string,\n oldURL: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly':\n return newURL.split('?')[0] !== oldURL.split('?')[0];\n default:\n return newURL !== oldURL;\n }\n};\n"]}
1
+ {"version":3,"file":"page-view-tracking.js","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"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","sourcesContent":["import { CampaignParser, getGlobalScope } from '@amplitude/analytics-client-common';\nimport {\n BrowserClient,\n BrowserConfig,\n Event,\n IdentifyOperation,\n IdentifyUserProperties,\n Logger,\n PluginType,\n} from '@amplitude/analytics-types';\nimport { BASE_CAMPAIGN } from '@amplitude/analytics-client-common';\nimport {\n CreatePageViewTrackingPlugin,\n CreatePageViewTrackingPluginParameters,\n Options,\n} from './typings/page-view-tracking';\nimport { omitUndefined } from './utils';\n\nexport const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (\n ...args: CreatePageViewTrackingPluginParameters\n) => {\n let amplitude: BrowserClient | undefined;\n let options: Options = {};\n const globalScope = getGlobalScope();\n let loggerProvider: Logger | undefined = undefined;\n let pushState: undefined | ((data: any, unused: string, url?: string | URL | null) => void);\n\n const [clientOrOptions, configOrUndefined] = args;\n if (clientOrOptions && 'init' in clientOrOptions) {\n amplitude = clientOrOptions;\n if (configOrUndefined) {\n options = configOrUndefined;\n }\n } else if (clientOrOptions) {\n options = clientOrOptions;\n }\n\n const createPageViewEvent = async (): Promise<Event> => {\n return {\n event_type: options.eventType ?? 'Page View',\n event_properties: {\n ...(await getCampaignParams()),\n page_domain: /* istanbul ignore next */ (typeof location !== 'undefined' && location.hostname) || '',\n page_location: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href) || '',\n page_path: /* istanbul ignore next */ (typeof location !== 'undefined' && location.pathname) || '',\n page_title: /* istanbul ignore next */ (typeof document !== 'undefined' && document.title) || '',\n page_url: /* istanbul ignore next */ (typeof location !== 'undefined' && location.href.split('?')[0]) || '',\n },\n };\n };\n\n const shouldTrackOnPageLoad = () =>\n typeof options.trackOn === 'undefined' || (typeof options.trackOn === 'function' && options.trackOn());\n\n /* istanbul ignore next */\n let previousURL: string | null = typeof location !== 'undefined' ? location.href : null;\n\n const trackHistoryPageView = async (): Promise<void> => {\n const newURL = location.href;\n const shouldTrackPageView =\n shouldTrackHistoryPageView(options.trackHistoryChanges, newURL, previousURL || '') && shouldTrackOnPageLoad();\n // Note: Update `previousURL` in the same clock tick as `shouldTrackHistoryPageView()`\n // This was previously done after `amplitude?.track(await createPageViewEvent());` and\n // causes a concurrency issue where app triggers `pushState` twice with the same URL target\n // but `previousURL` is only updated after the second `pushState` producing two page viewed events\n previousURL = newURL;\n\n if (shouldTrackPageView) {\n /* istanbul ignore next */\n loggerProvider?.log('Tracking page view event');\n amplitude?.track(await createPageViewEvent());\n }\n };\n\n /* istanbul ignore next */\n const trackHistoryPageViewWrapper = () => {\n void trackHistoryPageView();\n };\n\n const plugin = {\n name: 'page-view-tracking',\n type: PluginType.ENRICHMENT as const,\n\n setup: async (config: BrowserConfig, client?: BrowserClient) => {\n amplitude = amplitude ?? client;\n if (!amplitude) {\n const receivedType = clientOrOptions ? 'Options' : 'undefined';\n config.loggerProvider.error(\n `Argument of type '${receivedType}' is not assignable to parameter of type 'BrowserClient'.`,\n );\n return;\n }\n\n loggerProvider = config.loggerProvider;\n loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser');\n\n options.trackOn = config.attribution?.trackPageViews ? 'attribution' : options.trackOn;\n\n if (!client && config.attribution?.trackPageViews) {\n loggerProvider.warn(\n `@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser.`,\n );\n config.attribution.trackPageViews = false;\n }\n\n if (options.trackHistoryChanges && globalScope) {\n /* istanbul ignore next */\n globalScope.addEventListener('popstate', trackHistoryPageViewWrapper);\n\n // Save reference to original push state, to be used in teardown\n // eslint-disable-next-line @typescript-eslint/unbound-method\n pushState = globalScope.history.pushState;\n\n /* istanbul ignore next */\n // There is no global browser listener for changes to history, so we have\n // to modify pushState directly.\n // https://stackoverflow.com/a/64927639\n // eslint-disable-next-line @typescript-eslint/unbound-method\n globalScope.history.pushState = new Proxy(globalScope.history.pushState, {\n apply: (target, thisArg, [state, unused, url]) => {\n target.apply(thisArg, [state, unused, url]);\n void trackHistoryPageView();\n },\n });\n }\n\n if (shouldTrackOnPageLoad()) {\n loggerProvider.log('Tracking page view event');\n\n amplitude.track(await createPageViewEvent());\n }\n },\n\n execute: async (event: Event) => {\n if (options.trackOn === 'attribution' && isCampaignEvent(event)) {\n /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked\n loggerProvider?.log('Enriching campaign event to page view event with campaign parameters');\n const pageViewEvent = await createPageViewEvent();\n event.event_type = pageViewEvent.event_type;\n event.event_properties = {\n ...event.event_properties,\n ...pageViewEvent.event_properties,\n };\n }\n return event;\n },\n\n teardown: async () => {\n if (globalScope) {\n globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper);\n if (pushState) {\n globalScope.history.pushState = pushState;\n }\n }\n },\n };\n\n // Required for unit tests\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (plugin as any).__trackHistoryPageView = trackHistoryPageView;\n\n return plugin;\n};\n\nconst getCampaignParams = async () => omitUndefined(await new CampaignParser().parse());\n\nconst isCampaignEvent = (event: Event) => {\n if (event.event_type === '$identify' && event.user_properties) {\n const properties = event.user_properties as IdentifyUserProperties;\n const $set = properties[IdentifyOperation.SET] || {};\n const $unset = properties[IdentifyOperation.UNSET] || {};\n const userProperties = [...Object.keys($set), ...Object.keys($unset)];\n return Object.keys(BASE_CAMPAIGN).every((value) => userProperties.includes(value));\n }\n return false;\n};\n\nexport const shouldTrackHistoryPageView = (\n trackingOption: Options['trackHistoryChanges'],\n newURL: string,\n oldURL: string,\n): boolean => {\n switch (trackingOption) {\n case 'pathOnly':\n return newURL.split('?')[0] !== oldURL.split('?')[0];\n default:\n return newURL !== oldURL;\n }\n};\n"]}
@@ -1 +1 @@
1
- var pageViewTracking=function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function u(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,r=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){a=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){a.label=u[1];break}if(6===u[0]&&a.label<i[1]){a.label=i[1],i=u;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(u);break}i[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function o(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}var a,u,c,l,d=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},p=function(){var e,t=d();return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce((function(e,t){var n=t.split("=",2),r=s(n[0]),i=s(n[1]);return i?(e[r]=i,e):e}),{}):{}},s=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},f="dclid",v="fbclid",y="gbraid",g="gclid",m="ko_click_id",h="li_fat_id",_="msclkid",b="rtd_cid",w="ttclid",E="twclid",k="wbraid",T={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},O=function(){function e(){}return e.prototype.parse=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){return[2,t(t(t(t({},T),this.getUtmParam()),this.getReferrer()),this.getClickIds())]}))}))},e.prototype.getUtmParam=function(){var e=p();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,n={referrer:void 0,referring_domain:void 0};try{n.referrer=document.referrer||void 0,n.referring_domain=null!==(t=null===(e=n.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return n},e.prototype.getClickIds=function(){var e,t=p();return(e={})[f]=t[f],e[v]=t[v],e[y]=t[y],e[g]=t[g],e[m]=t[m],e[h]=t[h],e[_]=t[_],e[b]=t[b],e[w]=t[w],e[E]=t[E],e[k]=t[k],e},e}();!function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(a||(a={})),function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE="$revenue"}(u||(u={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(c||(c={})),function(e){e.BEFORE="before",e.ENRICHMENT="enrichment",e.DESTINATION="destination"}(l||(l={}));var P=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},N=function(){for(var e,o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var u={},c=d(),p=void 0,s=i(o,2),f=s[0],v=s[1];f&&"init"in f?(e=f,v&&(u=v)):f&&(u=f);var y=function(){return n(void 0,void 0,void 0,(function(){var e,n,i;return r(this,(function(r){switch(r.label){case 0:return n={event_type:null!==(i=u.eventType)&&void 0!==i?i:"Page View"},e=[{}],[4,R()];case 1:return[2,(n.event_properties=t.apply(void 0,[t.apply(void 0,e.concat([r.sent()])),{page_domain:"undefined"!=typeof location&&location.hostname||"",page_location:"undefined"!=typeof location&&location.href||"",page_path:"undefined"!=typeof location&&location.pathname||"",page_title:"undefined"!=typeof document&&document.title||"",page_url:"undefined"!=typeof location&&location.href.split("?")[0]||""}]),n)]}}))}))},g=function(){return void 0===u.trackOn||"function"==typeof u.trackOn&&u.trackOn()},m="undefined"!=typeof location?location.href:null,h=function(){return n(void 0,void 0,void 0,(function(){var t,n,i;return r(this,(function(r){switch(r.label){case 0:return t=location.href,$(u.trackHistoryChanges,t,m||"")&&g()?(null==p||p.log("Tracking page view event"),null!=e?[3,1]:[3,3]):[3,4];case 1:return i=(n=e).track,[4,y()];case 2:i.apply(n,[r.sent()]),r.label=3;case 3:r.label=4;case 4:return m=t,[2]}}))}))},_={name:"page-view-tracking",type:l.ENRICHMENT,setup:function(t,o){return n(void 0,void 0,void 0,(function(){var n,a,l,d,s;return r(this,(function(r){switch(r.label){case 0:return(e=null!=e?e:o)?((p=t.loggerProvider).log("Installing @amplitude/plugin-page-view-tracking-browser"),u.trackOn=(null===(d=t.attribution)||void 0===d?void 0:d.trackPageViews)?"attribution":u.trackOn,!o&&(null===(s=t.attribution)||void 0===s?void 0:s.trackPageViews)&&(p.warn("@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser."),t.attribution.trackPageViews=!1),u.trackHistoryChanges&&c&&(c.addEventListener("popstate",(function(){h()})),c.history.pushState=new Proxy(c.history.pushState,{apply:function(e,t,n){var r=i(n,3),o=r[0],a=r[1],u=r[2];e.apply(t,[o,a,u]),h()}})),g()?(p.log("Tracking page view event"),l=(a=e).track,[4,y()]):[3,2]):(n=f?"Options":"undefined",t.loggerProvider.error("Argument of type '".concat(n,"' is not assignable to parameter of type 'BrowserClient'.")),[2]);case 1:l.apply(a,[r.sent()]),r.label=2;case 2:return[2]}}))}))},execute:function(e){return n(void 0,void 0,void 0,(function(){var n;return r(this,(function(r){switch(r.label){case 0:return"attribution"===u.trackOn&&I(e)?(null==p||p.log("Enriching campaign event to page view event with campaign parameters"),[4,y()]):[3,2];case 1:n=r.sent(),e.event_type=n.event_type,e.event_properties=t(t({},e.event_properties),n.event_properties),r.label=2;case 2:return[2,e]}}))}))}};return _.__trackHistoryPageView=h,_},R=function(){return n(void 0,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return e=P,[4,(new O).parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}}))}))},I=function(e){if("$identify"===e.event_type&&e.user_properties){var t=e.user_properties,n=t[a.SET]||{},r=t[a.UNSET]||{},u=o(o([],i(Object.keys(n)),!1),i(Object.keys(r)),!1);return Object.keys(T).every((function(e){return u.includes(e)}))}return!1},$=function(e,t,n){return"pathOnly"===e?t.split("?")[0]!==n.split("?")[0]:t!==n},S=Object.freeze({__proto__:null});return e.Types=S,e.pageViewTrackingPlugin=N,e.plugin=N,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
1
+ var pageViewTracking=function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function u(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,r=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){a=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){a.label=u[1];break}if(6===u[0]&&a.label<i[1]){a.label=i[1],i=u;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(u);break}i[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function o(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}var a,u,c,l,d=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},s=function(){var e,t=d();return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce((function(e,t){var n=t.split("=",2),r=p(n[0]),i=p(n[1]);return i?(e[r]=i,e):e}),{}):{}},p=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},f="dclid",v="fbclid",y="gbraid",g="gclid",h="ko_click_id",m="li_fat_id",_="msclkid",b="rtd_cid",w="ttclid",E="twclid",k="wbraid",T={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},O=function(){function e(){}return e.prototype.parse=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){return[2,t(t(t(t({},T),this.getUtmParam()),this.getReferrer()),this.getClickIds())]}))}))},e.prototype.getUtmParam=function(){var e=s();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,n={referrer:void 0,referring_domain:void 0};try{n.referrer=document.referrer||void 0,n.referring_domain=null!==(t=null===(e=n.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return n},e.prototype.getClickIds=function(){var e,t=s();return(e={})[f]=t[f],e[v]=t[v],e[y]=t[y],e[g]=t[g],e[h]=t[h],e[m]=t[m],e[_]=t[_],e[b]=t[b],e[w]=t[w],e[E]=t[E],e[k]=t[k],e},e}();!function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(a||(a={})),function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE="$revenue"}(u||(u={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(c||(c={})),function(e){e.BEFORE="before",e.ENRICHMENT="enrichment",e.DESTINATION="destination"}(l||(l={}));var P=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},N=function(){for(var e,o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var u,c={},s=d(),p=void 0,f=i(o,2),v=f[0],y=f[1];v&&"init"in v?(e=v,y&&(c=y)):v&&(c=v);var g=function(){return n(void 0,void 0,void 0,(function(){var e,n,i;return r(this,(function(r){switch(r.label){case 0:return n={event_type:null!==(i=c.eventType)&&void 0!==i?i:"Page View"},e=[{}],[4,R()];case 1:return[2,(n.event_properties=t.apply(void 0,[t.apply(void 0,e.concat([r.sent()])),{page_domain:"undefined"!=typeof location&&location.hostname||"",page_location:"undefined"!=typeof location&&location.href||"",page_path:"undefined"!=typeof location&&location.pathname||"",page_title:"undefined"!=typeof document&&document.title||"",page_url:"undefined"!=typeof location&&location.href.split("?")[0]||""}]),n)]}}))}))},h=function(){return void 0===c.trackOn||"function"==typeof c.trackOn&&c.trackOn()},m="undefined"!=typeof location?location.href:null,_=function(){return n(void 0,void 0,void 0,(function(){var t,n,i,o;return r(this,(function(r){switch(r.label){case 0:return t=location.href,n=$(c.trackHistoryChanges,t,m||"")&&h(),m=t,n?(null==p||p.log("Tracking page view event"),null!=e?[3,1]:[3,3]):[3,4];case 1:return o=(i=e).track,[4,g()];case 2:o.apply(i,[r.sent()]),r.label=3;case 3:r.label=4;case 4:return[2]}}))}))},b=function(){_()},w={name:"page-view-tracking",type:l.ENRICHMENT,setup:function(t,o){return n(void 0,void 0,void 0,(function(){var n,a,l,d,f;return r(this,(function(r){switch(r.label){case 0:return(e=null!=e?e:o)?((p=t.loggerProvider).log("Installing @amplitude/plugin-page-view-tracking-browser"),c.trackOn=(null===(d=t.attribution)||void 0===d?void 0:d.trackPageViews)?"attribution":c.trackOn,!o&&(null===(f=t.attribution)||void 0===f?void 0:f.trackPageViews)&&(p.warn("@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser."),t.attribution.trackPageViews=!1),c.trackHistoryChanges&&s&&(s.addEventListener("popstate",b),u=s.history.pushState,s.history.pushState=new Proxy(s.history.pushState,{apply:function(e,t,n){var r=i(n,3),o=r[0],a=r[1],u=r[2];e.apply(t,[o,a,u]),_()}})),h()?(p.log("Tracking page view event"),l=(a=e).track,[4,g()]):[3,2]):(n=v?"Options":"undefined",t.loggerProvider.error("Argument of type '".concat(n,"' is not assignable to parameter of type 'BrowserClient'.")),[2]);case 1:l.apply(a,[r.sent()]),r.label=2;case 2:return[2]}}))}))},execute:function(e){return n(void 0,void 0,void 0,(function(){var n;return r(this,(function(r){switch(r.label){case 0:return"attribution"===c.trackOn&&I(e)?(null==p||p.log("Enriching campaign event to page view event with campaign parameters"),[4,g()]):[3,2];case 1:n=r.sent(),e.event_type=n.event_type,e.event_properties=t(t({},e.event_properties),n.event_properties),r.label=2;case 2:return[2,e]}}))}))},teardown:function(){return n(void 0,void 0,void 0,(function(){return r(this,(function(e){return s&&(s.removeEventListener("popstate",b),u&&(s.history.pushState=u)),[2]}))}))}};return w.__trackHistoryPageView=_,w},R=function(){return n(void 0,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return e=P,[4,(new O).parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}}))}))},I=function(e){if("$identify"===e.event_type&&e.user_properties){var t=e.user_properties,n=t[a.SET]||{},r=t[a.UNSET]||{},u=o(o([],i(Object.keys(n)),!1),i(Object.keys(r)),!1);return Object.keys(T).every((function(e){return u.includes(e)}))}return!1},$=function(e,t,n){return"pathOnly"===e?t.split("?")[0]!==n.split("?")[0]:t!==n},S=Object.freeze({__proto__:null});return e.Types=S,e.pageViewTrackingPlugin=N,e.plugin=N,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
Binary file
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).amplitude={})}(this,(function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function u(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,r=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){a=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){a.label=u[1];break}if(6===u[0]&&a.label<i[1]){a.label=i[1],i=u;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(u);break}i[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function o(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}var a,u,c,l,d=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},f=function(){var e,t=d();return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce((function(e,t){var n=t.split("=",2),r=p(n[0]),i=p(n[1]);return i?(e[r]=i,e):e}),{}):{}},p=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},s="dclid",v="fbclid",y="gbraid",g="gclid",m="ko_click_id",h="li_fat_id",_="msclkid",b="rtd_cid",w="ttclid",E="twclid",k="wbraid",T={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},O=function(){function e(){}return e.prototype.parse=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){return[2,t(t(t(t({},T),this.getUtmParam()),this.getReferrer()),this.getClickIds())]}))}))},e.prototype.getUtmParam=function(){var e=f();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,n={referrer:void 0,referring_domain:void 0};try{n.referrer=document.referrer||void 0,n.referring_domain=null!==(t=null===(e=n.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return n},e.prototype.getClickIds=function(){var e,t=f();return(e={})[s]=t[s],e[v]=t[v],e[y]=t[y],e[g]=t[g],e[m]=t[m],e[h]=t[h],e[_]=t[_],e[b]=t[b],e[w]=t[w],e[E]=t[E],e[k]=t[k],e},e}();!function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(a||(a={})),function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE="$revenue"}(u||(u={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(c||(c={})),function(e){e.BEFORE="before",e.ENRICHMENT="enrichment",e.DESTINATION="destination"}(l||(l={}));var P=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},N=function(){for(var e,o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var u={},c=d(),f=void 0,p=i(o,2),s=p[0],v=p[1];s&&"init"in s?(e=s,v&&(u=v)):s&&(u=s);var y=function(){return n(void 0,void 0,void 0,(function(){var e,n,i;return r(this,(function(r){switch(r.label){case 0:return n={event_type:null!==(i=u.eventType)&&void 0!==i?i:"Page View"},e=[{}],[4,R()];case 1:return[2,(n.event_properties=t.apply(void 0,[t.apply(void 0,e.concat([r.sent()])),{page_domain:"undefined"!=typeof location&&location.hostname||"",page_location:"undefined"!=typeof location&&location.href||"",page_path:"undefined"!=typeof location&&location.pathname||"",page_title:"undefined"!=typeof document&&document.title||"",page_url:"undefined"!=typeof location&&location.href.split("?")[0]||""}]),n)]}}))}))},g=function(){return void 0===u.trackOn||"function"==typeof u.trackOn&&u.trackOn()},m="undefined"!=typeof location?location.href:null,h=function(){return n(void 0,void 0,void 0,(function(){var t,n,i;return r(this,(function(r){switch(r.label){case 0:return t=location.href,$(u.trackHistoryChanges,t,m||"")&&g()?(null==f||f.log("Tracking page view event"),null!=e?[3,1]:[3,3]):[3,4];case 1:return i=(n=e).track,[4,y()];case 2:i.apply(n,[r.sent()]),r.label=3;case 3:r.label=4;case 4:return m=t,[2]}}))}))},_={name:"page-view-tracking",type:l.ENRICHMENT,setup:function(t,o){return n(void 0,void 0,void 0,(function(){var n,a,l,d,p;return r(this,(function(r){switch(r.label){case 0:return(e=null!=e?e:o)?((f=t.loggerProvider).log("Installing @amplitude/plugin-page-view-tracking-browser"),u.trackOn=(null===(d=t.attribution)||void 0===d?void 0:d.trackPageViews)?"attribution":u.trackOn,!o&&(null===(p=t.attribution)||void 0===p?void 0:p.trackPageViews)&&(f.warn("@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser."),t.attribution.trackPageViews=!1),u.trackHistoryChanges&&c&&(c.addEventListener("popstate",(function(){h()})),c.history.pushState=new Proxy(c.history.pushState,{apply:function(e,t,n){var r=i(n,3),o=r[0],a=r[1],u=r[2];e.apply(t,[o,a,u]),h()}})),g()?(f.log("Tracking page view event"),l=(a=e).track,[4,y()]):[3,2]):(n=s?"Options":"undefined",t.loggerProvider.error("Argument of type '".concat(n,"' is not assignable to parameter of type 'BrowserClient'.")),[2]);case 1:l.apply(a,[r.sent()]),r.label=2;case 2:return[2]}}))}))},execute:function(e){return n(void 0,void 0,void 0,(function(){var n;return r(this,(function(r){switch(r.label){case 0:return"attribution"===u.trackOn&&I(e)?(null==f||f.log("Enriching campaign event to page view event with campaign parameters"),[4,y()]):[3,2];case 1:n=r.sent(),e.event_type=n.event_type,e.event_properties=t(t({},e.event_properties),n.event_properties),r.label=2;case 2:return[2,e]}}))}))}};return _.__trackHistoryPageView=h,_},R=function(){return n(void 0,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return e=P,[4,(new O).parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}}))}))},I=function(e){if("$identify"===e.event_type&&e.user_properties){var t=e.user_properties,n=t[a.SET]||{},r=t[a.UNSET]||{},u=o(o([],i(Object.keys(n)),!1),i(Object.keys(r)),!1);return Object.keys(T).every((function(e){return u.includes(e)}))}return!1},$=function(e,t,n){return"pathOnly"===e?t.split("?")[0]!==n.split("?")[0]:t!==n},S=Object.freeze({__proto__:null});e.Types=S,e.pageViewTrackingPlugin=N,e.plugin=N,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).amplitude={})}(this,(function(e){"use strict";var t=function(){return t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},t.apply(this,arguments)};function n(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{c(r.next(e))}catch(e){o(e)}}function u(e){try{c(r.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))}function r(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(c){return function(u){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return a.label++,{value:u[1],done:!1};case 5:a.label++,r=u[1],u=[0];continue;case 7:u=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==u[0]&&2!==u[0])){a=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){a.label=u[1];break}if(6===u[0]&&a.label<i[1]){a.label=i[1],i=u;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(u);break}i[2]&&a.ops.pop(),a.trys.pop();continue}u=t.call(e,a)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}([u,c])}}}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,o=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=o.return)&&n.call(o)}finally{if(i)throw i.error}}return a}function o(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}var a,u,c,l,d=function(){return"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:void 0},s=function(){var e,t=d();return(null===(e=null==t?void 0:t.location)||void 0===e?void 0:e.search)?t.location.search.substring(1).split("&").filter(Boolean).reduce((function(e,t){var n=t.split("=",2),r=f(n[0]),i=f(n[1]);return i?(e[r]=i,e):e}),{}):{}},f=function(e){void 0===e&&(e="");try{return decodeURIComponent(e)}catch(e){return""}},p="dclid",v="fbclid",y="gbraid",g="gclid",h="ko_click_id",m="li_fat_id",_="msclkid",b="rtd_cid",w="ttclid",E="twclid",k="wbraid",T={utm_campaign:void 0,utm_content:void 0,utm_id:void 0,utm_medium:void 0,utm_source:void 0,utm_term:void 0,referrer:void 0,referring_domain:void 0,dclid:void 0,gbraid:void 0,gclid:void 0,fbclid:void 0,ko_click_id:void 0,li_fat_id:void 0,msclkid:void 0,rtd_cid:void 0,ttclid:void 0,twclid:void 0,wbraid:void 0},O=function(){function e(){}return e.prototype.parse=function(){return n(this,void 0,void 0,(function(){return r(this,(function(e){return[2,t(t(t(t({},T),this.getUtmParam()),this.getReferrer()),this.getClickIds())]}))}))},e.prototype.getUtmParam=function(){var e=s();return{utm_campaign:e.utm_campaign,utm_content:e.utm_content,utm_id:e.utm_id,utm_medium:e.utm_medium,utm_source:e.utm_source,utm_term:e.utm_term}},e.prototype.getReferrer=function(){var e,t,n={referrer:void 0,referring_domain:void 0};try{n.referrer=document.referrer||void 0,n.referring_domain=null!==(t=null===(e=n.referrer)||void 0===e?void 0:e.split("/")[2])&&void 0!==t?t:void 0}catch(e){}return n},e.prototype.getClickIds=function(){var e,t=s();return(e={})[p]=t[p],e[v]=t[v],e[y]=t[y],e[g]=t[g],e[h]=t[h],e[m]=t[m],e[_]=t[_],e[b]=t[b],e[w]=t[w],e[E]=t[E],e[k]=t[k],e},e}();!function(e){e.SET="$set",e.SET_ONCE="$setOnce",e.ADD="$add",e.APPEND="$append",e.PREPEND="$prepend",e.REMOVE="$remove",e.PREINSERT="$preInsert",e.POSTINSERT="$postInsert",e.UNSET="$unset",e.CLEAR_ALL="$clearAll"}(a||(a={})),function(e){e.REVENUE_PRODUCT_ID="$productId",e.REVENUE_QUANTITY="$quantity",e.REVENUE_PRICE="$price",e.REVENUE_TYPE="$revenueType",e.REVENUE="$revenue"}(u||(u={})),function(e){e.IDENTIFY="$identify",e.GROUP_IDENTIFY="$groupidentify",e.REVENUE="revenue_amount"}(c||(c={})),function(e){e.BEFORE="before",e.ENRICHMENT="enrichment",e.DESTINATION="destination"}(l||(l={}));var P=function(e){var t={};for(var n in e){var r=e[n];r&&(t[n]=r)}return t},N=function(){for(var e,o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var u,c={},s=d(),f=void 0,p=i(o,2),v=p[0],y=p[1];v&&"init"in v?(e=v,y&&(c=y)):v&&(c=v);var g=function(){return n(void 0,void 0,void 0,(function(){var e,n,i;return r(this,(function(r){switch(r.label){case 0:return n={event_type:null!==(i=c.eventType)&&void 0!==i?i:"Page View"},e=[{}],[4,R()];case 1:return[2,(n.event_properties=t.apply(void 0,[t.apply(void 0,e.concat([r.sent()])),{page_domain:"undefined"!=typeof location&&location.hostname||"",page_location:"undefined"!=typeof location&&location.href||"",page_path:"undefined"!=typeof location&&location.pathname||"",page_title:"undefined"!=typeof document&&document.title||"",page_url:"undefined"!=typeof location&&location.href.split("?")[0]||""}]),n)]}}))}))},h=function(){return void 0===c.trackOn||"function"==typeof c.trackOn&&c.trackOn()},m="undefined"!=typeof location?location.href:null,_=function(){return n(void 0,void 0,void 0,(function(){var t,n,i,o;return r(this,(function(r){switch(r.label){case 0:return t=location.href,n=$(c.trackHistoryChanges,t,m||"")&&h(),m=t,n?(null==f||f.log("Tracking page view event"),null!=e?[3,1]:[3,3]):[3,4];case 1:return o=(i=e).track,[4,g()];case 2:o.apply(i,[r.sent()]),r.label=3;case 3:r.label=4;case 4:return[2]}}))}))},b=function(){_()},w={name:"page-view-tracking",type:l.ENRICHMENT,setup:function(t,o){return n(void 0,void 0,void 0,(function(){var n,a,l,d,p;return r(this,(function(r){switch(r.label){case 0:return(e=null!=e?e:o)?((f=t.loggerProvider).log("Installing @amplitude/plugin-page-view-tracking-browser"),c.trackOn=(null===(d=t.attribution)||void 0===d?void 0:d.trackPageViews)?"attribution":c.trackOn,!o&&(null===(p=t.attribution)||void 0===p?void 0:p.trackPageViews)&&(f.warn("@amplitude/plugin-page-view-tracking-browser overrides page view tracking behavior defined in @amplitude/analytics-browser. Resolve by disabling page view tracking in @amplitude/analytics-browser."),t.attribution.trackPageViews=!1),c.trackHistoryChanges&&s&&(s.addEventListener("popstate",b),u=s.history.pushState,s.history.pushState=new Proxy(s.history.pushState,{apply:function(e,t,n){var r=i(n,3),o=r[0],a=r[1],u=r[2];e.apply(t,[o,a,u]),_()}})),h()?(f.log("Tracking page view event"),l=(a=e).track,[4,g()]):[3,2]):(n=v?"Options":"undefined",t.loggerProvider.error("Argument of type '".concat(n,"' is not assignable to parameter of type 'BrowserClient'.")),[2]);case 1:l.apply(a,[r.sent()]),r.label=2;case 2:return[2]}}))}))},execute:function(e){return n(void 0,void 0,void 0,(function(){var n;return r(this,(function(r){switch(r.label){case 0:return"attribution"===c.trackOn&&I(e)?(null==f||f.log("Enriching campaign event to page view event with campaign parameters"),[4,g()]):[3,2];case 1:n=r.sent(),e.event_type=n.event_type,e.event_properties=t(t({},e.event_properties),n.event_properties),r.label=2;case 2:return[2,e]}}))}))},teardown:function(){return n(void 0,void 0,void 0,(function(){return r(this,(function(e){return s&&(s.removeEventListener("popstate",b),u&&(s.history.pushState=u)),[2]}))}))}};return w.__trackHistoryPageView=_,w},R=function(){return n(void 0,void 0,void 0,(function(){var e;return r(this,(function(t){switch(t.label){case 0:return e=P,[4,(new O).parse()];case 1:return[2,e.apply(void 0,[t.sent()])]}}))}))},I=function(e){if("$identify"===e.event_type&&e.user_properties){var t=e.user_properties,n=t[a.SET]||{},r=t[a.UNSET]||{},u=o(o([],i(Object.keys(n)),!1),i(Object.keys(r)),!1);return Object.keys(T).every((function(e){return u.includes(e)}))}return!1},$=function(e,t,n){return"pathOnly"===e?t.split("?")[0]!==n.split("?")[0]:t!==n},S=Object.freeze({__proto__:null});e.Types=S,e.pageViewTrackingPlugin=N,e.plugin=N,Object.defineProperty(e,"__esModule",{value:!0})}));
Binary file
@@ -1 +1 @@
1
- {"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,4BAA4B,EAE5B,OAAO,EACR,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,sBAAsB,EAAE,4BAyHpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,UACtC,MAAM,UACN,MAAM,KACb,OAOF,CAAC"}
1
+ {"version":3,"file":"page-view-tracking.d.ts","sourceRoot":"","sources":["../../src/page-view-tracking.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,4BAA4B,EAE5B,OAAO,EACR,MAAM,8BAA8B,CAAC;AAGtC,eAAO,MAAM,sBAAsB,EAAE,4BAgJpC,CAAC;AAeF,eAAO,MAAM,0BAA0B,mBACrB,OAAO,CAAC,qBAAqB,CAAC,UACtC,MAAM,UACN,MAAM,KACb,OAOF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amplitude/plugin-page-view-tracking-browser",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "",
5
5
  "author": "Amplitude Inc",
6
6
  "homepage": "https://github.com/amplitude/Amplitude-TypeScript",
@@ -37,12 +37,12 @@
37
37
  "url": "https://github.com/amplitude/Amplitude-TypeScript/issues"
38
38
  },
39
39
  "dependencies": {
40
- "@amplitude/analytics-client-common": "^1.1.0",
41
- "@amplitude/analytics-types": "^1.3.0",
40
+ "@amplitude/analytics-client-common": "^1.1.1",
41
+ "@amplitude/analytics-types": "^1.3.1",
42
42
  "tslib": "^2.4.1"
43
43
  },
44
44
  "devDependencies": {
45
- "@amplitude/analytics-browser": "^1.12.0",
45
+ "@amplitude/analytics-browser": "^1.12.1",
46
46
  "@rollup/plugin-commonjs": "^23.0.4",
47
47
  "@rollup/plugin-node-resolve": "^15.0.1",
48
48
  "@rollup/plugin-typescript": "^10.0.1",
@@ -54,5 +54,5 @@
54
54
  "files": [
55
55
  "lib"
56
56
  ],
57
- "gitHead": "01c20d61e8c51b59dc7fdf83d4abd57391aecf71"
57
+ "gitHead": "bc426d86b020aa96c9dc3a824aaaecf22213b32f"
58
58
  }