swetrix 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,2 @@
1
+ github: swetrix
1
2
  ko_fi: andriir
@@ -46,6 +46,8 @@ export interface PageViewsOptions {
46
46
  noHeartbeat?: boolean;
47
47
  /** Send Heartbeat requests when the website tab is not active in the browser. */
48
48
  heartbeatOnBackground?: boolean;
49
+ /** Disable user-flow */
50
+ noUserFlow?: boolean;
49
51
  }
50
52
  export declare const defaultPageActions: {
51
53
  stop(): void;
@@ -64,6 +66,7 @@ export declare class Lib {
64
66
  private heartbeat;
65
67
  private checkIgnore;
66
68
  private trackPathChange;
69
+ private getPreviousPage;
67
70
  private trackPage;
68
71
  private debug;
69
72
  private canTrack;
@@ -123,14 +123,45 @@ export class Lib {
123
123
  this.trackPage(newPath, false);
124
124
  }
125
125
  }
126
+ getPreviousPage() {
127
+ // Assuming that this function is called in trackPage and this.activePage is not overwritten by new value yet
128
+ // That method of getting previous page works for SPA websites
129
+ if (this.activePage) {
130
+ return this.activePage;
131
+ }
132
+ // Checking if URL is supported by the browser (for example, IE11 does not support it)
133
+ if (typeof URL === 'function') {
134
+ // That method of getting previous page works for websites with page reloads
135
+ const referrer = getReferrer();
136
+ if (!referrer) {
137
+ return null;
138
+ }
139
+ const { host } = location;
140
+ try {
141
+ const url = new URL(referrer);
142
+ const { host: refHost, pathname } = url;
143
+ if (host !== refHost) {
144
+ return null;
145
+ }
146
+ return pathname;
147
+ }
148
+ catch {
149
+ return null;
150
+ }
151
+ }
152
+ return null;
153
+ }
126
154
  trackPage(pg, unique = false) {
127
155
  if (!this.pageData)
128
156
  return;
129
157
  this.pageData.path = pg;
130
158
  if (this.checkIgnore(pg))
131
159
  return;
132
- this.activePage = pg;
133
160
  const perf = this.getPerformanceStats();
161
+ let prev;
162
+ if (!this.pageViewsOptions?.noUserFlow) {
163
+ prev = this.getPreviousPage();
164
+ }
134
165
  const data = {
135
166
  pid: this.projectID,
136
167
  lc: getLocale(),
@@ -142,7 +173,9 @@ export class Lib {
142
173
  unique,
143
174
  pg,
144
175
  perf,
176
+ prev,
145
177
  };
178
+ this.activePage = pg;
146
179
  this.sendRequest('', data);
147
180
  }
148
181
  debug(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"Lib.js","sourceRoot":"","sources":["../../src/Lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Lib.js","sourceRoot":"","sources":["../../src/Lib.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAC1E,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,GACpD,MAAM,SAAS,CAAA;AAmEhB,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,KAAI,CAAC;CACV,CAAA;AAED,MAAM,gBAAgB,GAAG,6BAA6B,CAAA;AAEtD,MAAM,OAAO,GAAG;IAMd,YAAoB,SAAiB,EAAU,OAAoB;QAA/C,cAAS,GAAT,SAAS,CAAQ;QAAU,YAAO,GAAP,OAAO,CAAa;QAL3D,aAAQ,GAAoB,IAAI,CAAA;QAChC,qBAAgB,GAAwC,IAAI,CAAA;QAC5D,uBAAkB,GAAY,KAAK,CAAA;QACnC,eAAU,GAAkB,IAAI,CAAA;QAGtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,KAAwB;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,OAAM;SACP;QAED,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,EAAE,EAAE,IAAI,CAAC,UAAU;YACnB,EAAE,EAAE,SAAS,EAAE;YACf,EAAE,EAAE,WAAW,EAAE;YACjB,GAAG,EAAE,WAAW,EAAE;YAClB,EAAE,EAAE,YAAY,EAAE;YAClB,EAAE,EAAE,YAAY,EAAE;YAClB,EAAE,EAAE,cAAc,EAAE;YACpB,GAAG,KAAK;SACT,CAAA;QACD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,cAAc,CAAC,OAA0B;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,OAAO,kBAAkB,CAAA;SAC1B;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;SAC7B;QAED,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAA;QAC/B,IAAI,UAA0B,EAAE,QAAwB,CAAA;QACxD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;YACpB,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;SACnD;QAED,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;YACzB,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAChC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;SAChD;QAED,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;QAEtB,IAAI,CAAC,QAAQ,GAAG;YACd,IAAI;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,GAAG,EAAE;oBACT,aAAa,CAAC,QAAQ,CAAC,CAAA;oBACvB,aAAa,CAAC,UAAU,CAAC,CAAA;gBAC3B,CAAC;aACF;SACF,CAAA;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAA;IAC9B,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE;YACxF,OAAO,EAAE,CAAA;SACV;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;QAEjE,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,EAAE,CAAA;SACV;QAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAA;QAE9B,OAAO;YACL,UAAU;YACV,aAAa;YACb,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB;YAClD,aAAa;YACb,GAAG,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACpF,aAAa;YACb,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;YACvH,aAAa;YACb,QAAQ,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;YAE/C,WAAW;YACX,aAAa;YACb,MAAM,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,wBAAwB;YACxD,aAAa;YACb,QAAQ,EAAE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,WAAW;YAC1D,aAAa;YACb,SAAS,EAAE,IAAI,CAAC,cAAc;YAE9B,UAAU;YACV,aAAa;YACb,IAAI,EAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY;SAC7C,CAAA;IACH,CAAC;IAGO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,qBAAqB,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ,EAAE;YAC1F,OAAM;SACP;QAED,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,IAAI,CAAC,SAAS;SACpB,CAAA;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC9B,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAA;QAE5C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACtC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAA;gBACnC,aAAa;gBACb,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAA;aACrE;SACF;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,0EAA0E;IAClE,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAM;QAC1B,MAAM,OAAO,GAAG,OAAO,EAAE,CAAA;QACzB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAA;QAE9B,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;SAC/B;IACH,CAAC;IAEO,eAAe;QACrB,6GAA6G;QAC7G,8DAA8D;QAC9D,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO,IAAI,CAAC,UAAU,CAAA;SACvB;QAED,sFAAsF;QACtF,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;YAC7B,4EAA4E;YAC5E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;YAE9B,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,IAAI,CAAA;aACZ;YAED,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;YAEzB,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAC7B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;gBAEvC,IAAI,IAAI,KAAK,OAAO,EAAE;oBACpB,OAAO,IAAI,CAAA;iBACZ;gBAED,OAAO,QAAQ,CAAA;aAChB;YAAC,MAAM;gBACN,OAAO,IAAI,CAAA;aACZ;SACF;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,SAAS,CAAC,EAAU,EAAE,SAAkB,KAAK;QACnD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAM;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAA;QAEvB,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAAE,OAAM;QAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAEvC,IAAI,IAAI,CAAA;QAER,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,EAAE;YACtC,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;SAC9B;QAED,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,EAAE,EAAE,SAAS,EAAE;YACf,EAAE,EAAE,WAAW,EAAE;YACjB,GAAG,EAAE,WAAW,EAAE;YAClB,EAAE,EAAE,YAAY,EAAE;YAClB,EAAE,EAAE,YAAY,EAAE;YAClB,EAAE,EAAE,cAAc,EAAE;YACpB,MAAM;YACN,EAAE;YACF,IAAI;YACJ,IAAI;SACL,CAAA;QAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAC5B,CAAC;IAEO,KAAK,CAAC,OAAe;QAC3B,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;SAClC;IACH,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;YAC1B,IAAI,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAA;YACzE,OAAO,KAAK,CAAA;SACb;QAED,IAAI,CAAC,WAAW,EAAE,EAAE;YAClB,IAAI,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAA;YAC5E,OAAO,KAAK,CAAA;SACb;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,SAAS,EAAE,UAAU,KAAK,GAAG,EAAE;YACpE,IAAI,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAA;YAChF,OAAO,KAAK,CAAA;SACb;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,EAAE;YACzC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,WAAW,EAAE,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;YACtE,OAAO,KAAK,CAAA;SACb;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,WAAW,CAAC,IAAY,EAAE,IAAY;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,gBAAgB,CAAA;QACrD,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAA;QAChC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;QACzC,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QACxD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;IAChC,CAAC;CACF"}
@@ -183,15 +183,47 @@ var Lib = /** @class */ (function () {
183
183
  this.trackPage(newPath, false);
184
184
  }
185
185
  };
186
+ Lib.prototype.getPreviousPage = function () {
187
+ // Assuming that this function is called in trackPage and this.activePage is not overwritten by new value yet
188
+ // That method of getting previous page works for SPA websites
189
+ if (this.activePage) {
190
+ return this.activePage;
191
+ }
192
+ // Checking if URL is supported by the browser (for example, IE11 does not support it)
193
+ if (typeof URL === 'function') {
194
+ // That method of getting previous page works for websites with page reloads
195
+ var referrer = getReferrer();
196
+ if (!referrer) {
197
+ return null;
198
+ }
199
+ var host = location.host;
200
+ try {
201
+ var url = new URL(referrer);
202
+ var refHost = url.host, pathname = url.pathname;
203
+ if (host !== refHost) {
204
+ return null;
205
+ }
206
+ return pathname;
207
+ }
208
+ catch (_a) {
209
+ return null;
210
+ }
211
+ }
212
+ return null;
213
+ };
186
214
  Lib.prototype.trackPage = function (pg, unique) {
215
+ var _a;
187
216
  if (unique === void 0) { unique = false; }
188
217
  if (!this.pageData)
189
218
  return;
190
219
  this.pageData.path = pg;
191
220
  if (this.checkIgnore(pg))
192
221
  return;
193
- this.activePage = pg;
194
222
  var perf = this.getPerformanceStats();
223
+ var prev;
224
+ if (!((_a = this.pageViewsOptions) === null || _a === void 0 ? void 0 : _a.noUserFlow)) {
225
+ prev = this.getPreviousPage();
226
+ }
195
227
  var data = {
196
228
  pid: this.projectID,
197
229
  lc: getLocale(),
@@ -203,7 +235,9 @@ var Lib = /** @class */ (function () {
203
235
  unique: unique,
204
236
  pg: pg,
205
237
  perf: perf,
238
+ prev: prev,
206
239
  };
240
+ this.activePage = pg;
207
241
  this.sendRequest('', data);
208
242
  };
209
243
  Lib.prototype.debug = function (message) {
@@ -179,15 +179,47 @@ var Lib = /** @class */ (function () {
179
179
  this.trackPage(newPath, false);
180
180
  }
181
181
  };
182
+ Lib.prototype.getPreviousPage = function () {
183
+ // Assuming that this function is called in trackPage and this.activePage is not overwritten by new value yet
184
+ // That method of getting previous page works for SPA websites
185
+ if (this.activePage) {
186
+ return this.activePage;
187
+ }
188
+ // Checking if URL is supported by the browser (for example, IE11 does not support it)
189
+ if (typeof URL === 'function') {
190
+ // That method of getting previous page works for websites with page reloads
191
+ var referrer = getReferrer();
192
+ if (!referrer) {
193
+ return null;
194
+ }
195
+ var host = location.host;
196
+ try {
197
+ var url = new URL(referrer);
198
+ var refHost = url.host, pathname = url.pathname;
199
+ if (host !== refHost) {
200
+ return null;
201
+ }
202
+ return pathname;
203
+ }
204
+ catch (_a) {
205
+ return null;
206
+ }
207
+ }
208
+ return null;
209
+ };
182
210
  Lib.prototype.trackPage = function (pg, unique) {
211
+ var _a;
183
212
  if (unique === void 0) { unique = false; }
184
213
  if (!this.pageData)
185
214
  return;
186
215
  this.pageData.path = pg;
187
216
  if (this.checkIgnore(pg))
188
217
  return;
189
- this.activePage = pg;
190
218
  var perf = this.getPerformanceStats();
219
+ var prev;
220
+ if (!((_a = this.pageViewsOptions) === null || _a === void 0 ? void 0 : _a.noUserFlow)) {
221
+ prev = this.getPreviousPage();
222
+ }
191
223
  var data = {
192
224
  pid: this.projectID,
193
225
  lc: getLocale(),
@@ -199,7 +231,9 @@ var Lib = /** @class */ (function () {
199
231
  unique: unique,
200
232
  pg: pg,
201
233
  perf: perf,
234
+ prev: prev,
202
235
  };
236
+ this.activePage = pg;
203
237
  this.sendRequest('', data);
204
238
  };
205
239
  Lib.prototype.debug = function (message) {
package/dist/swetrix.js CHANGED
@@ -1 +1 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).swetrix={})}(this,function(n){"use strict";function t(t){return(t=location.search.match(t))&&t[2]||void 0}function o(){return void 0!==navigator.languages?navigator.languages[0]:navigator.language}function i(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(t){}}function a(){return document.referrer||void 0}function r(){return t(d)}function s(){return t(l)}function c(){return t(p)}function u(){return location.pathname||""}var e=function(){return(e=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},d=/[?&](ref|source|utm_source)=([^?&]+)/,p=/[?&](utm_campaign)=([^?&]+)/,l=/[?&](utm_medium)=([^?&]+)/,h={stop:function(){}},g=(f.prototype.track=function(t){this.canTrack()&&(t=e({pid:this.projectID,pg:this.activePage,lc:o(),tz:i(),ref:a(),so:r(),me:s(),ca:c()},t),this.sendRequest("custom",t))},f.prototype.trackPageViews=function(t){var e,n,o;return this.canTrack()?(this.pageData||(null!=(this.pageViewsOptions=t)&&t.unique||(n=setInterval(this.trackPathChange,2e3)),null!=t&&t.noHeartbeat||(setTimeout(this.heartbeat,3e3),e=setInterval(this.heartbeat,28e3)),o=u(),this.pageData={path:o,actions:{stop:function(){clearInterval(n),clearInterval(e)}}},this.trackPage(o,null==t?void 0:t.unique)),this.pageData.actions):h},f.prototype.getPerformanceStats=function(){var t;return this.canTrack()&&!this.perfStatsCollected&&null!=(t=window.performance)&&t.getEntriesByType&&(t=window.performance.getEntriesByType("navigation")[0])?(this.perfStatsCollected=!0,{dns:t.domainLookupEnd-t.domainLookupStart,tls:t.secureConnectionStart?t.requestStart-t.secureConnectionStart:0,conn:t.secureConnectionStart?t.secureConnectionStart-t.connectStart:t.connectEnd-t.connectStart,response:t.responseEnd-t.responseStart,render:t.domComplete-t.domContentLoadedEventEnd,dom_load:t.domContentLoadedEventEnd-t.responseEnd,page_load:t.loadEventStart,ttfb:t.responseStart-t.requestStart}):{}},f.prototype.heartbeat=function(){var t;(null!=(t=this.pageViewsOptions)&&t.heartbeatOnBackground||"hidden"!==document.visibilityState)&&(t={pid:this.projectID},this.sendRequest("hb",t))},f.prototype.checkIgnore=function(t){var e,n=null==(e=this.pageViewsOptions)?void 0:e.ignore;if(Array.isArray(n))for(var o=0;o<n.length;++o){if(n[o]===t)return!0;if(n[o]instanceof RegExp&&n[o].test(t))return!0}return!1},f.prototype.trackPathChange=function(){var t;this.pageData&&(t=u(),this.pageData.path!==t)&&this.trackPage(t,!1)},f.prototype.trackPage=function(t,e){var n;void 0===e&&(e=!1),this.pageData&&(this.pageData.path=t,this.checkIgnore(t)||(this.activePage=t,n=this.getPerformanceStats(),e={pid:this.projectID,lc:o(),tz:i(),ref:a(),so:r(),me:s(),ca:c(),unique:e,pg:t,perf:n},this.sendRequest("",e)))},f.prototype.debug=function(t){var e;null!=(e=this.options)&&e.debug&&console.log("[Swetrix]",t)},f.prototype.canTrack=function(){var t;return null!=(t=this.options)&&t.disabled?(this.debug("Tracking disabled: the 'disabled' setting is set to true."),!1):"undefined"==typeof window?(this.debug("Tracking disabled: script does not run in browser environment."),!1):null!=(t=this.options)&&t.respectDNT&&"1"===(null==(t=window.navigator)?void 0:t.doNotTrack)?(this.debug("Tracking disabled: respecting user's 'Do Not Track' preference."),!1):!(!(null!=(t=this.options)&&t.debug||"localhost"!==(null===location||void 0===location?void 0:location.hostname)&&"127.0.0.1"!==(null===location||void 0===location?void 0:location.hostname)&&""!==(null===location||void 0===location?void 0:location.hostname))||null!==navigator&&void 0!==navigator&&navigator.webdriver&&(this.debug("Tracking disabled: navigation is automated by WebDriver."),1))},f.prototype.sendRequest=function(t,e){var n=(null==(n=this.options)?void 0:n.apiURL)||"https://api.swetrix.com/log",o=new XMLHttpRequest;o.open("POST","".concat(n,"/").concat(t),!0),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify(e))},f);function f(t,e){this.projectID=t,this.options=e,this.pageData=null,this.pageViewsOptions=null,this.perfStatsCollected=!1,this.activePage=null,this.trackPathChange=this.trackPathChange.bind(this),this.heartbeat=this.heartbeat.bind(this)}n.LIB_INSTANCE=null,n.init=function(t,e){return n.LIB_INSTANCE||(n.LIB_INSTANCE=new g(t,e)),n.LIB_INSTANCE},n.track=function(t){n.LIB_INSTANCE&&n.LIB_INSTANCE.track(t)},n.trackViews=function(e){return new Promise(function(t){n.LIB_INSTANCE?"undefined"==typeof document||"complete"===document.readyState?t(n.LIB_INSTANCE.trackPageViews(e)):window.addEventListener("load",function(){t(n.LIB_INSTANCE.trackPageViews(e))}):t(h)})},Object.defineProperty(n,"__esModule",{value:!0})});
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).swetrix={})}(this,function(n){"use strict";function t(t){return(t=location.search.match(t))&&t[2]||void 0}function a(){return void 0!==navigator.languages?navigator.languages[0]:navigator.language}function r(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(t){}}function s(){return document.referrer||void 0}function c(){return t(o)}function u(){return t(d)}function l(){return t(p)}function i(){return location.pathname||""}var e=function(){return(e=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++)for(var i in e=arguments[n])Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t}).apply(this,arguments)},o=/[?&](ref|source|utm_source)=([^?&]+)/,p=/[?&](utm_campaign)=([^?&]+)/,d=/[?&](utm_medium)=([^?&]+)/,h={stop:function(){}},g=(f.prototype.track=function(t){this.canTrack()&&(t=e({pid:this.projectID,pg:this.activePage,lc:a(),tz:r(),ref:s(),so:c(),me:u(),ca:l()},t),this.sendRequest("custom",t))},f.prototype.trackPageViews=function(t){var e,n,o;return this.canTrack()?(this.pageData||(null!=(this.pageViewsOptions=t)&&t.unique||(n=setInterval(this.trackPathChange,2e3)),null!=t&&t.noHeartbeat||(setTimeout(this.heartbeat,3e3),e=setInterval(this.heartbeat,28e3)),o=i(),this.pageData={path:o,actions:{stop:function(){clearInterval(n),clearInterval(e)}}},this.trackPage(o,null==t?void 0:t.unique)),this.pageData.actions):h},f.prototype.getPerformanceStats=function(){var t;return this.canTrack()&&!this.perfStatsCollected&&null!=(t=window.performance)&&t.getEntriesByType&&(t=window.performance.getEntriesByType("navigation")[0])?(this.perfStatsCollected=!0,{dns:t.domainLookupEnd-t.domainLookupStart,tls:t.secureConnectionStart?t.requestStart-t.secureConnectionStart:0,conn:t.secureConnectionStart?t.secureConnectionStart-t.connectStart:t.connectEnd-t.connectStart,response:t.responseEnd-t.responseStart,render:t.domComplete-t.domContentLoadedEventEnd,dom_load:t.domContentLoadedEventEnd-t.responseEnd,page_load:t.loadEventStart,ttfb:t.responseStart-t.requestStart}):{}},f.prototype.heartbeat=function(){var t;(null!=(t=this.pageViewsOptions)&&t.heartbeatOnBackground||"hidden"!==document.visibilityState)&&(t={pid:this.projectID},this.sendRequest("hb",t))},f.prototype.checkIgnore=function(t){var e,n=null==(e=this.pageViewsOptions)?void 0:e.ignore;if(Array.isArray(n))for(var o=0;o<n.length;++o){if(n[o]===t)return!0;if(n[o]instanceof RegExp&&n[o].test(t))return!0}return!1},f.prototype.trackPathChange=function(){var t;this.pageData&&(t=i(),this.pageData.path!==t)&&this.trackPage(t,!1)},f.prototype.getPreviousPage=function(){if(this.activePage)return this.activePage;if("function"==typeof URL){var t=s();if(!t)return null;var e=location.host;try{var n=new URL(t),o=n.host,i=n.pathname;return e!==o?null:i}catch(t){}}return null},f.prototype.trackPage=function(t,e){var n,o,i;void 0===e&&(e=!1),this.pageData&&(this.pageData.path=t,this.checkIgnore(t)||(n=this.getPerformanceStats(),null!=(i=this.pageViewsOptions)&&i.noUserFlow||(o=this.getPreviousPage()),i={pid:this.projectID,lc:a(),tz:r(),ref:s(),so:c(),me:u(),ca:l(),unique:e,pg:t,perf:n,prev:o},this.activePage=t,this.sendRequest("",i)))},f.prototype.debug=function(t){var e;null!=(e=this.options)&&e.debug&&console.log("[Swetrix]",t)},f.prototype.canTrack=function(){var t;return null!=(t=this.options)&&t.disabled?(this.debug("Tracking disabled: the 'disabled' setting is set to true."),!1):"undefined"==typeof window?(this.debug("Tracking disabled: script does not run in browser environment."),!1):null!=(t=this.options)&&t.respectDNT&&"1"===(null==(t=window.navigator)?void 0:t.doNotTrack)?(this.debug("Tracking disabled: respecting user's 'Do Not Track' preference."),!1):!(!(null!=(t=this.options)&&t.debug||"localhost"!==(null===location||void 0===location?void 0:location.hostname)&&"127.0.0.1"!==(null===location||void 0===location?void 0:location.hostname)&&""!==(null===location||void 0===location?void 0:location.hostname))||null!==navigator&&void 0!==navigator&&navigator.webdriver&&(this.debug("Tracking disabled: navigation is automated by WebDriver."),1))},f.prototype.sendRequest=function(t,e){var n=(null==(n=this.options)?void 0:n.apiURL)||"https://api.swetrix.com/log",o=new XMLHttpRequest;o.open("POST","".concat(n,"/").concat(t),!0),o.setRequestHeader("Content-Type","application/json"),o.send(JSON.stringify(e))},f);function f(t,e){this.projectID=t,this.options=e,this.pageData=null,this.pageViewsOptions=null,this.perfStatsCollected=!1,this.activePage=null,this.trackPathChange=this.trackPathChange.bind(this),this.heartbeat=this.heartbeat.bind(this)}n.LIB_INSTANCE=null,n.init=function(t,e){return n.LIB_INSTANCE||(n.LIB_INSTANCE=new g(t,e)),n.LIB_INSTANCE},n.track=function(t){n.LIB_INSTANCE&&n.LIB_INSTANCE.track(t)},n.trackViews=function(e){return new Promise(function(t){n.LIB_INSTANCE?"undefined"==typeof document||"complete"===document.readyState?t(n.LIB_INSTANCE.trackPageViews(e)):window.addEventListener("load",function(){t(n.LIB_INSTANCE.trackPageViews(e))}):t(h)})},Object.defineProperty(n,"__esModule",{value:!0})});
@@ -185,15 +185,47 @@
185
185
  this.trackPage(newPath, false);
186
186
  }
187
187
  };
188
+ Lib.prototype.getPreviousPage = function () {
189
+ // Assuming that this function is called in trackPage and this.activePage is not overwritten by new value yet
190
+ // That method of getting previous page works for SPA websites
191
+ if (this.activePage) {
192
+ return this.activePage;
193
+ }
194
+ // Checking if URL is supported by the browser (for example, IE11 does not support it)
195
+ if (typeof URL === 'function') {
196
+ // That method of getting previous page works for websites with page reloads
197
+ var referrer = getReferrer();
198
+ if (!referrer) {
199
+ return null;
200
+ }
201
+ var host = location.host;
202
+ try {
203
+ var url = new URL(referrer);
204
+ var refHost = url.host, pathname = url.pathname;
205
+ if (host !== refHost) {
206
+ return null;
207
+ }
208
+ return pathname;
209
+ }
210
+ catch (_a) {
211
+ return null;
212
+ }
213
+ }
214
+ return null;
215
+ };
188
216
  Lib.prototype.trackPage = function (pg, unique) {
217
+ var _a;
189
218
  if (unique === void 0) { unique = false; }
190
219
  if (!this.pageData)
191
220
  return;
192
221
  this.pageData.path = pg;
193
222
  if (this.checkIgnore(pg))
194
223
  return;
195
- this.activePage = pg;
196
224
  var perf = this.getPerformanceStats();
225
+ var prev;
226
+ if (!((_a = this.pageViewsOptions) === null || _a === void 0 ? void 0 : _a.noUserFlow)) {
227
+ prev = this.getPreviousPage();
228
+ }
197
229
  var data = {
198
230
  pid: this.projectID,
199
231
  lc: getLocale(),
@@ -205,7 +237,9 @@
205
237
  unique: unique,
206
238
  pg: pg,
207
239
  perf: perf,
240
+ prev: prev,
208
241
  };
242
+ this.activePage = pg;
209
243
  this.sendRequest('', data);
210
244
  };
211
245
  Lib.prototype.debug = function (message) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swetrix",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "The JavaScript analytics client for Swetrix Analytics",
5
5
  "main": "dist/swetrix.cjs.js",
6
6
  "module": "dist/swetrix.es5.js",
@@ -27,19 +27,19 @@
27
27
  },
28
28
  "homepage": "https://swetrix.com/docs",
29
29
  "dependencies": {
30
- "@types/node": "^18.13.0",
30
+ "@types/node": "^18.16.1",
31
31
  "tslib": "^2.5.0"
32
32
  },
33
33
  "devDependencies": {
34
- "@rollup/plugin-commonjs": "^24.0.1",
35
- "@rollup/plugin-node-resolve": "^15.0.1",
36
- "rimraf": "^4.1.2",
34
+ "@rollup/plugin-commonjs": "^24.1.0",
35
+ "@rollup/plugin-node-resolve": "^15.0.2",
36
+ "rimraf": "^4.4.1",
37
37
  "rollup": "^2.79.1",
38
38
  "rollup-plugin-node-resolve": "^5.2.0",
39
39
  "rollup-plugin-sourcemaps": "^0.6.3",
40
40
  "rollup-plugin-typescript2": "^0.34.1",
41
41
  "rollup-plugin-uglify": "^6.0.4",
42
- "typescript": "^4.9.5"
42
+ "typescript": "^5.0.4"
43
43
  },
44
44
  "scripts": {
45
45
  "prebuild": "rimraf dist",
package/src/Lib.ts CHANGED
@@ -63,6 +63,9 @@ export interface PageViewsOptions {
63
63
 
64
64
  /** Send Heartbeat requests when the website tab is not active in the browser. */
65
65
  heartbeatOnBackground?: boolean
66
+
67
+ /** Disable user-flow */
68
+ noUserFlow?: boolean
66
69
  }
67
70
 
68
71
  export const defaultPageActions = {
@@ -212,15 +215,55 @@ export class Lib {
212
215
  }
213
216
  }
214
217
 
218
+ private getPreviousPage(): string | null {
219
+ // Assuming that this function is called in trackPage and this.activePage is not overwritten by new value yet
220
+ // That method of getting previous page works for SPA websites
221
+ if (this.activePage) {
222
+ return this.activePage
223
+ }
224
+
225
+ // Checking if URL is supported by the browser (for example, IE11 does not support it)
226
+ if (typeof URL === 'function') {
227
+ // That method of getting previous page works for websites with page reloads
228
+ const referrer = getReferrer()
229
+
230
+ if (!referrer) {
231
+ return null
232
+ }
233
+
234
+ const { host } = location
235
+
236
+ try {
237
+ const url = new URL(referrer)
238
+ const { host: refHost, pathname } = url
239
+
240
+ if (host !== refHost) {
241
+ return null
242
+ }
243
+
244
+ return pathname
245
+ } catch {
246
+ return null
247
+ }
248
+ }
249
+
250
+ return null
251
+ }
252
+
215
253
  private trackPage(pg: string, unique: boolean = false): void {
216
254
  if (!this.pageData) return
217
255
  this.pageData.path = pg
218
256
 
219
257
  if (this.checkIgnore(pg)) return
220
258
 
221
- this.activePage = pg
222
259
  const perf = this.getPerformanceStats()
223
260
 
261
+ let prev
262
+
263
+ if (!this.pageViewsOptions?.noUserFlow) {
264
+ prev = this.getPreviousPage()
265
+ }
266
+
224
267
  const data = {
225
268
  pid: this.projectID,
226
269
  lc: getLocale(),
@@ -232,8 +275,10 @@ export class Lib {
232
275
  unique,
233
276
  pg,
234
277
  perf,
278
+ prev,
235
279
  }
236
280
 
281
+ this.activePage = pg
237
282
  this.sendRequest('', data)
238
283
  }
239
284