@qurvo/sdk-browser 0.0.13 → 0.0.15
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/dist/index.d.ts +134 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +229 -14
- package/dist/index.js.map +1 -1
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +260 -0
- package/dist/index.test.js.map +1 -0
- package/dist/qurvo.iife.js +1 -1
- package/dist/qurvo.iife.js.map +4 -4
- package/dist/utm.d.ts +15 -0
- package/dist/utm.d.ts.map +1 -0
- package/dist/utm.js +45 -0
- package/dist/utm.js.map +1 -0
- package/dist/utm.test.d.ts +2 -0
- package/dist/utm.test.d.ts.map +1 -0
- package/dist/utm.test.js +59 -0
- package/dist/utm.test.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
package/dist/utm.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Standard UTM parameter names that the SDK auto-captures from the page URL. */
|
|
2
|
+
declare const UTM_PARAMS: readonly ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
|
|
3
|
+
export type UtmKey = (typeof UTM_PARAMS)[number];
|
|
4
|
+
/**
|
|
5
|
+
* Parse UTM parameters from a URL search string.
|
|
6
|
+
* Returns only non-empty UTM values. Returns an empty object if none are present.
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseUtmParams(search: string): Partial<Record<UtmKey, string>>;
|
|
9
|
+
/**
|
|
10
|
+
* Get current UTM parameters from `window.location.search`.
|
|
11
|
+
* Safe to call in non-browser environments (returns empty object).
|
|
12
|
+
*/
|
|
13
|
+
export declare function getUtmParams(): Partial<Record<UtmKey, string>>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=utm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utm.d.ts","sourceRoot":"","sources":["../src/utm.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,QAAA,MAAM,UAAU,kFAMN,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkB9E;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAG9D"}
|
package/dist/utm.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseUtmParams = parseUtmParams;
|
|
4
|
+
exports.getUtmParams = getUtmParams;
|
|
5
|
+
/** Standard UTM parameter names that the SDK auto-captures from the page URL. */
|
|
6
|
+
const UTM_PARAMS = [
|
|
7
|
+
'utm_source',
|
|
8
|
+
'utm_medium',
|
|
9
|
+
'utm_campaign',
|
|
10
|
+
'utm_term',
|
|
11
|
+
'utm_content',
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Parse UTM parameters from a URL search string.
|
|
15
|
+
* Returns only non-empty UTM values. Returns an empty object if none are present.
|
|
16
|
+
*/
|
|
17
|
+
function parseUtmParams(search) {
|
|
18
|
+
if (!search)
|
|
19
|
+
return {};
|
|
20
|
+
let params;
|
|
21
|
+
try {
|
|
22
|
+
params = new URLSearchParams(search);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
const result = {};
|
|
28
|
+
for (const key of UTM_PARAMS) {
|
|
29
|
+
const value = params.get(key);
|
|
30
|
+
if (value) {
|
|
31
|
+
result[key] = value;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get current UTM parameters from `window.location.search`.
|
|
38
|
+
* Safe to call in non-browser environments (returns empty object).
|
|
39
|
+
*/
|
|
40
|
+
function getUtmParams() {
|
|
41
|
+
if (typeof window === 'undefined')
|
|
42
|
+
return {};
|
|
43
|
+
return parseUtmParams(window.location.search);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=utm.js.map
|
package/dist/utm.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utm.js","sourceRoot":"","sources":["../src/utm.ts"],"names":[],"mappings":";;AAeA,wCAkBC;AAMD,oCAGC;AA1CD,iFAAiF;AACjF,MAAM,UAAU,GAAG;IACjB,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,aAAa;CACL,CAAC;AAIX;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEvB,IAAI,MAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utm.test.d.ts","sourceRoot":"","sources":["../src/utm.test.ts"],"names":[],"mappings":""}
|
package/dist/utm.test.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const utm_1 = require("./utm");
|
|
5
|
+
(0, vitest_1.describe)('parseUtmParams', () => {
|
|
6
|
+
(0, vitest_1.it)('extracts all 5 UTM parameters', () => {
|
|
7
|
+
const search = '?utm_source=google&utm_medium=cpc&utm_campaign=spring&utm_term=shoes&utm_content=banner';
|
|
8
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)(search)).toEqual({
|
|
9
|
+
utm_source: 'google',
|
|
10
|
+
utm_medium: 'cpc',
|
|
11
|
+
utm_campaign: 'spring',
|
|
12
|
+
utm_term: 'shoes',
|
|
13
|
+
utm_content: 'banner',
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
(0, vitest_1.it)('returns only present UTM parameters', () => {
|
|
17
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?utm_source=google&utm_medium=email')).toEqual({
|
|
18
|
+
utm_source: 'google',
|
|
19
|
+
utm_medium: 'email',
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
(0, vitest_1.it)('returns empty object when no UTM params present', () => {
|
|
23
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?page=1&sort=asc')).toEqual({});
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.it)('returns empty object for empty search string', () => {
|
|
26
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('')).toEqual({});
|
|
27
|
+
});
|
|
28
|
+
(0, vitest_1.it)('returns empty object for search string with only ?', () => {
|
|
29
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?')).toEqual({});
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.it)('ignores empty UTM values', () => {
|
|
32
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?utm_source=&utm_medium=email')).toEqual({
|
|
33
|
+
utm_medium: 'email',
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
(0, vitest_1.it)('decodes URL-encoded UTM values', () => {
|
|
37
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?utm_source=google%20ads&utm_campaign=spring%2Fsale')).toEqual({
|
|
38
|
+
utm_source: 'google ads',
|
|
39
|
+
utm_campaign: 'spring/sale',
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
(0, vitest_1.it)('ignores non-UTM parameters', () => {
|
|
43
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?utm_source=google&ref=abc&fbclid=xyz')).toEqual({
|
|
44
|
+
utm_source: 'google',
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)('handles UTM params mixed with hash fragments (search only)', () => {
|
|
48
|
+
// URLSearchParams only gets the search part, not the hash
|
|
49
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?utm_source=twitter')).toEqual({
|
|
50
|
+
utm_source: 'twitter',
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
(0, vitest_1.it)('is case-sensitive (only lowercase utm_ keys)', () => {
|
|
54
|
+
(0, vitest_1.expect)((0, utm_1.parseUtmParams)('?UTM_SOURCE=google&utm_source=bing')).toEqual({
|
|
55
|
+
utm_source: 'bing',
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=utm.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utm.test.js","sourceRoot":"","sources":["../src/utm.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,+BAAuC;AAEvC,IAAA,iBAAQ,EAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GACV,yFAAyF,CAAC;QAC5F,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACrC,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,QAAQ;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,qCAAqC,CAAC,CAAC,CAAC,OAAO,CAAC;YACpE,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,+BAA+B,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9D,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,qDAAqD,CAAC,CAAC,CAAC,OAAO,CAAC;YACpF,UAAU,EAAE,YAAY;YACxB,YAAY,EAAE,aAAa;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,uCAAuC,CAAC,CAAC,CAAC,OAAO,CAAC;YACtE,UAAU,EAAE,QAAQ;SACrB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,0DAA0D;QAC1D,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC;YACpD,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,IAAA,eAAM,EAAC,IAAA,oBAAc,EAAC,oCAAoC,CAAC,CAAC,CAAC,OAAO,CAAC;YACnE,UAAU,EAAE,MAAM;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "0.0.
|
|
1
|
+
export declare const SDK_VERSION = "0.0.15";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qurvo/sdk-browser",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.15",
|
|
4
4
|
"description": "Browser SDK for Qurvo analytics — event tracking, user identification, auto-capture",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"fflate": "^0.8.2",
|
|
16
|
-
"@qurvo/sdk-core": "0.0.
|
|
16
|
+
"@qurvo/sdk-core": "0.0.11"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"esbuild": "^0.25.0",
|
|
20
20
|
"typescript": "^5.7.0",
|
|
21
|
+
"vitest": "^3.1.1",
|
|
21
22
|
"@qurvo/tsconfig": "0.0.0"
|
|
22
23
|
},
|
|
23
24
|
"scripts": {
|