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.
- package/.github/funding.yml +1 -0
- package/dist/esnext/Lib.d.ts +3 -0
- package/dist/esnext/Lib.js +34 -1
- package/dist/esnext/Lib.js.map +1 -1
- package/dist/swetrix.cjs.js +35 -1
- package/dist/swetrix.es5.js +35 -1
- package/dist/swetrix.js +1 -1
- package/dist/swetrix.orig.js +35 -1
- package/package.json +6 -6
- package/src/Lib.ts +46 -1
package/.github/funding.yml
CHANGED
package/dist/esnext/Lib.d.ts
CHANGED
|
@@ -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;
|
package/dist/esnext/Lib.js
CHANGED
|
@@ -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) {
|
package/dist/esnext/Lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
package/dist/swetrix.cjs.js
CHANGED
|
@@ -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) {
|
package/dist/swetrix.es5.js
CHANGED
|
@@ -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
|
|
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})});
|
package/dist/swetrix.orig.js
CHANGED
|
@@ -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.
|
|
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.
|
|
30
|
+
"@types/node": "^18.16.1",
|
|
31
31
|
"tslib": "^2.5.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@rollup/plugin-commonjs": "^24.0
|
|
35
|
-
"@rollup/plugin-node-resolve": "^15.0.
|
|
36
|
-
"rimraf": "^4.1
|
|
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": "^
|
|
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
|
|