-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathconfig.ts
More file actions
100 lines (93 loc) · 3.58 KB
/
Copy pathconfig.ts
File metadata and controls
100 lines (93 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import type { LuxGlobal } from "./global";
import type { ServerTimingConfig } from "./server-timing";
import type { UrlPatternMapping } from "./url-matcher";
/**
* ConfigObject holds the parsed and normalised lux.js configuration. It is initialised once based
* on the `LUX` global.
*/
export interface ConfigObject {
allowEmptyPostBeacon: boolean;
auto: boolean;
errorBeaconDelay: number;
beaconUrl: string;
beaconUrlFallback?: string;
beaconUrlV2: string;
conversions?: UrlPatternMapping;
cookieDomain?: string;
customerid?: string;
errorBeaconUrl: string;
interactionBeaconDelay: number;
jspagelabel?: string;
label?: string;
maxAttributionEntries: number;
maxBeaconUrlLength: number;
maxBeaconUTEntries: number;
maxErrors: number;
maxMeasureTime: number;
measureUntil: "onload" | "pagehidden";
minMeasureTime: number;
newBeaconOnPageShow: boolean;
pagegroups?: UrlPatternMapping;
samplerate: number;
sendBeaconOnPageHidden: boolean;
serverTiming?: ServerTimingConfig;
snippetVersion?: LuxGlobal["snippetVersion"];
spaMode: boolean;
trackErrors: boolean;
trackHiddenPages: boolean;
}
export type UserConfig = Partial<ConfigObject>;
const luxOrigin = "https://lux.speedcurve.com";
export function fromObject(obj: UserConfig): ConfigObject {
const spaMode = getProperty(obj, "spaMode", false);
const autoMode = spaMode ? false : getProperty(obj, "auto", true);
return {
allowEmptyPostBeacon: getProperty(obj, "allowEmptyPostBeacon", false),
auto: autoMode,
errorBeaconDelay: getProperty(obj, "errorBeaconDelay", 200),
beaconUrl: getProperty(obj, "beaconUrl", luxOrigin + "/lux/"),
beaconUrlFallback: getProperty(obj, "beaconUrlFallback"),
beaconUrlV2: getProperty(obj, "beaconUrlV2", "https://beacon.speedcurve.com/store"),
conversions: getProperty(obj, "conversions"),
cookieDomain: getProperty(obj, "cookieDomain"),
customerid: getProperty(obj, "customerid"),
errorBeaconUrl: getProperty(obj, "errorBeaconUrl", "https://beacon.speedcurve.com/store/error"),
interactionBeaconDelay: getProperty(obj, "interactionBeaconDelay", 200),
jspagelabel: getProperty(obj, "jspagelabel"),
label: getProperty(obj, "label"),
maxAttributionEntries: getProperty(obj, "maxAttributionEntries", 25),
maxBeaconUrlLength: getProperty(obj, "maxBeaconUrlLength", 8190),
maxBeaconUTEntries: getProperty(obj, "maxBeaconUTEntries", 20),
maxErrors: getProperty(obj, "maxErrors", 5),
maxMeasureTime: getProperty(obj, "maxMeasureTime", 60_000),
measureUntil: getProperty(obj, "measureUntil", spaMode ? "pagehidden" : "onload"),
minMeasureTime: getProperty(obj, "minMeasureTime", 0),
newBeaconOnPageShow: getProperty(obj, "newBeaconOnPageShow", false),
pagegroups: getProperty(obj, "pagegroups"),
samplerate: getProperty(obj, "samplerate", 100),
sendBeaconOnPageHidden: getProperty(obj, "sendBeaconOnPageHidden", spaMode || autoMode),
serverTiming: getProperty(obj, "serverTiming"),
spaMode,
trackErrors: getProperty(obj, "trackErrors", true),
trackHiddenPages: getProperty(obj, "trackHiddenPages", false),
};
}
export function getProperty<T, K extends keyof T>(
obj: T,
key: K,
): Exclude<T[K], undefined> | undefined;
export function getProperty<T, K extends keyof T, D>(
obj: T,
key: K,
defaultValue: D,
): Exclude<T[K], undefined> | D;
export function getProperty<T, K extends keyof T, D>(
obj: T,
key: K,
defaultValue?: D,
): Exclude<T[K], undefined> | D | undefined {
if (typeof obj[key] !== "undefined") {
return obj[key] as Exclude<T[K], undefined>;
}
return defaultValue;
}