Skip to content

Commit 72c2fff

Browse files
committed
feat(server): add utm parameter parser
1 parent 34c2412 commit 72c2fff

File tree

1 file changed

+39
-0
lines changed
  • packages/analytics/src/server

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const UTM_PARAMS = ["source", "medium", "content", "term", "campaign"] as const;
2+
3+
function parseUtmParameter(name: string, strictUtm: boolean) {
4+
if (strictUtm) {
5+
return UTM_PARAMS.find((param) => name === `utm_${param}`);
6+
}
7+
8+
if (name === "ref") {
9+
return "source";
10+
}
11+
12+
return UTM_PARAMS.find((param) => name === `utm_${param}` || name === param);
13+
}
14+
15+
interface UtmOptions {
16+
strictUtm: boolean;
17+
}
18+
19+
interface UtmParameters {
20+
source?: string | undefined;
21+
campaign?: string | undefined;
22+
medium?: string | undefined;
23+
content?: string | undefined;
24+
term?: string | undefined;
25+
}
26+
27+
export function parseUtmParameters(searchParams: URLSearchParams, options: UtmOptions) {
28+
const params: UtmParameters = {};
29+
30+
for (const [name, value] of searchParams.entries()) {
31+
const param = parseUtmParameter(name, options.strictUtm);
32+
33+
if (param) {
34+
params[param] = value;
35+
}
36+
}
37+
38+
return params;
39+
}

0 commit comments

Comments
 (0)