@amplitude/analytics-browser 0.2.4 → 0.4.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/LICENSE +21 -0
- package/README.md +8 -22
- package/lib/cjs/attribution.d.ts +1 -1
- package/lib/cjs/attribution.d.ts.map +1 -1
- package/lib/cjs/attribution.js +5 -17
- package/lib/cjs/attribution.js.map +1 -1
- package/lib/cjs/browser-client.d.ts +96 -81
- package/lib/cjs/browser-client.d.ts.map +1 -1
- package/lib/cjs/browser-client.js +194 -196
- package/lib/cjs/browser-client.js.map +1 -1
- package/lib/cjs/config.d.ts +11 -7
- package/lib/cjs/config.d.ts.map +1 -1
- package/lib/cjs/config.js +33 -34
- package/lib/cjs/config.js.map +1 -1
- package/lib/cjs/cookie-migration/index.d.ts +5 -0
- package/lib/cjs/cookie-migration/index.d.ts.map +1 -0
- package/lib/cjs/cookie-migration/index.js +55 -0
- package/lib/cjs/cookie-migration/index.js.map +1 -0
- package/lib/cjs/plugins/context.js +1 -1
- package/lib/cjs/plugins/context.js.map +1 -1
- package/lib/cjs/session-manager.d.ts +3 -3
- package/lib/cjs/session-manager.d.ts.map +1 -1
- package/lib/cjs/session-manager.js +10 -16
- package/lib/cjs/session-manager.js.map +1 -1
- package/lib/cjs/storage/cookie.d.ts +2 -2
- package/lib/cjs/storage/cookie.d.ts.map +1 -1
- package/lib/cjs/storage/cookie.js +16 -11
- package/lib/cjs/storage/cookie.js.map +1 -1
- package/lib/cjs/storage/local-storage.d.ts +1 -0
- package/lib/cjs/storage/local-storage.d.ts.map +1 -1
- package/lib/cjs/storage/local-storage.js +4 -1
- package/lib/cjs/storage/local-storage.js.map +1 -1
- package/lib/cjs/storage/memory.d.ts +1 -0
- package/lib/cjs/storage/memory.d.ts.map +1 -1
- package/lib/cjs/storage/memory.js +4 -0
- package/lib/cjs/storage/memory.js.map +1 -1
- package/lib/cjs/storage/utm-cookie.js +1 -1
- package/lib/cjs/storage/utm-cookie.js.map +1 -1
- package/lib/cjs/transports/fetch.d.ts.map +1 -1
- package/lib/cjs/transports/fetch.js +0 -2
- package/lib/cjs/transports/fetch.js.map +1 -1
- package/lib/cjs/utils/snippet-helper.d.ts +1 -0
- package/lib/cjs/utils/snippet-helper.d.ts.map +1 -1
- package/lib/cjs/utils/snippet-helper.js +1 -0
- package/lib/cjs/utils/snippet-helper.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/attribution.d.ts +1 -1
- package/lib/esm/attribution.d.ts.map +1 -1
- package/lib/esm/attribution.js +4 -16
- package/lib/esm/attribution.js.map +1 -1
- package/lib/esm/browser-client.d.ts +96 -81
- package/lib/esm/browser-client.d.ts.map +1 -1
- package/lib/esm/browser-client.js +197 -182
- package/lib/esm/browser-client.js.map +1 -1
- package/lib/esm/config.d.ts +11 -7
- package/lib/esm/config.d.ts.map +1 -1
- package/lib/esm/config.js +28 -29
- package/lib/esm/config.js.map +1 -1
- package/lib/esm/cookie-migration/index.d.ts +5 -0
- package/lib/esm/cookie-migration/index.d.ts.map +1 -0
- package/lib/esm/cookie-migration/index.js +50 -0
- package/lib/esm/cookie-migration/index.js.map +1 -0
- package/lib/esm/plugins/context.js +2 -2
- package/lib/esm/plugins/context.js.map +1 -1
- package/lib/esm/session-manager.d.ts +3 -3
- package/lib/esm/session-manager.d.ts.map +1 -1
- package/lib/esm/session-manager.js +8 -14
- package/lib/esm/session-manager.js.map +1 -1
- package/lib/esm/storage/cookie.d.ts +2 -2
- package/lib/esm/storage/cookie.d.ts.map +1 -1
- package/lib/esm/storage/cookie.js +16 -11
- package/lib/esm/storage/cookie.js.map +1 -1
- package/lib/esm/storage/local-storage.d.ts +1 -0
- package/lib/esm/storage/local-storage.d.ts.map +1 -1
- package/lib/esm/storage/local-storage.js +4 -1
- package/lib/esm/storage/local-storage.js.map +1 -1
- package/lib/esm/storage/memory.d.ts +1 -0
- package/lib/esm/storage/memory.d.ts.map +1 -1
- package/lib/esm/storage/memory.js +4 -0
- package/lib/esm/storage/memory.js.map +1 -1
- package/lib/esm/storage/utm-cookie.js +1 -1
- package/lib/esm/storage/utm-cookie.js.map +1 -1
- package/lib/esm/transports/fetch.d.ts.map +1 -1
- package/lib/esm/transports/fetch.js +0 -2
- package/lib/esm/transports/fetch.js.map +1 -1
- package/lib/esm/utils/snippet-helper.d.ts +1 -0
- package/lib/esm/utils/snippet-helper.d.ts.map +1 -1
- package/lib/esm/utils/snippet-helper.js +1 -0
- package/lib/esm/utils/snippet-helper.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/amplitude-snippet-instructions.html +5 -0
- package/lib/scripts/amplitude-snippet-min.js +1 -0
- package/package.json +13 -9
|
@@ -1,170 +1,142 @@
|
|
|
1
|
-
import { __awaiter, __generator } from "tslib";
|
|
2
|
-
import {
|
|
1
|
+
import { __assign, __awaiter, __extends, __generator, __read } from "tslib";
|
|
2
|
+
import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';
|
|
3
3
|
import { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';
|
|
4
4
|
import { Context } from './plugins/context';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { useBrowserConfig, createTransport } from './config';
|
|
6
|
+
import { getAttributions } from './attribution';
|
|
7
7
|
import { updateCookies } from './session-manager';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return __generator(this, function (_a) {
|
|
21
|
-
switch (_a.label) {
|
|
8
|
+
import { parseOldCookies } from './cookie-migration';
|
|
9
|
+
var AmplitudeBrowser = /** @class */ (function (_super) {
|
|
10
|
+
__extends(AmplitudeBrowser, _super);
|
|
11
|
+
function AmplitudeBrowser() {
|
|
12
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
13
|
+
}
|
|
14
|
+
AmplitudeBrowser.prototype.init = function (apiKey, userId, options) {
|
|
15
|
+
var _a, _b, _c;
|
|
16
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
17
|
+
var oldCookies, browserOptions;
|
|
18
|
+
return __generator(this, function (_d) {
|
|
19
|
+
switch (_d.label) {
|
|
22
20
|
case 0:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return [4 /*yield*/, _add(new Context())];
|
|
21
|
+
oldCookies = parseOldCookies(apiKey, options);
|
|
22
|
+
browserOptions = useBrowserConfig(apiKey, userId || oldCookies.userId, __assign(__assign({}, options), { deviceId: (_a = oldCookies.deviceId) !== null && _a !== void 0 ? _a : options === null || options === void 0 ? void 0 : options.deviceId, sessionId: (_b = oldCookies.sessionId) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.sessionId, optOut: (_c = options === null || options === void 0 ? void 0 : options.optOut) !== null && _c !== void 0 ? _c : oldCookies.optOut }));
|
|
23
|
+
return [4 /*yield*/, _super.prototype.init.call(this, undefined, undefined, browserOptions)];
|
|
27
24
|
case 1:
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
_d.sent();
|
|
26
|
+
// Step 3: Store user session in cookie storage
|
|
27
|
+
updateCookies(this.config, oldCookies.lastEventTime);
|
|
28
|
+
// Step 4: Install plugins
|
|
29
|
+
return [4 /*yield*/, this.add(new Context())];
|
|
30
30
|
case 2:
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
// Step 4: Install plugins
|
|
32
|
+
_d.sent();
|
|
33
|
+
return [4 /*yield*/, this.add(new Destination())];
|
|
34
|
+
case 3:
|
|
35
|
+
_d.sent();
|
|
36
|
+
// Step 4: Track attributions
|
|
37
|
+
void this.trackAttributions();
|
|
33
38
|
return [2 /*return*/];
|
|
34
39
|
}
|
|
35
40
|
});
|
|
36
|
-
});
|
|
41
|
+
});
|
|
37
42
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
* Adds a new plugin.
|
|
41
|
-
*
|
|
42
|
-
* ```typescript
|
|
43
|
-
* const plugin = {...};
|
|
44
|
-
* amplitude.add(plugin);
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
export var add = function (plugin) {
|
|
48
|
-
return {
|
|
49
|
-
promise: _add(plugin),
|
|
43
|
+
AmplitudeBrowser.prototype.getUserId = function () {
|
|
44
|
+
return this.config.userId;
|
|
50
45
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*
|
|
55
|
-
* ```typescript
|
|
56
|
-
* amplitude.remove('myPlugin');
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
export var remove = function (pluginName) {
|
|
60
|
-
return {
|
|
61
|
-
promise: _remove(pluginName),
|
|
46
|
+
AmplitudeBrowser.prototype.setUserId = function (userId) {
|
|
47
|
+
this.config.userId = userId;
|
|
48
|
+
updateCookies(this.config);
|
|
62
49
|
};
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
50
|
+
AmplitudeBrowser.prototype.getDeviceId = function () {
|
|
51
|
+
return this.config.deviceId;
|
|
52
|
+
};
|
|
53
|
+
AmplitudeBrowser.prototype.setDeviceId = function (deviceId) {
|
|
54
|
+
this.config.deviceId = deviceId;
|
|
55
|
+
updateCookies(this.config);
|
|
56
|
+
};
|
|
57
|
+
AmplitudeBrowser.prototype.getSessionId = function () {
|
|
58
|
+
return this.config.sessionId;
|
|
59
|
+
};
|
|
60
|
+
AmplitudeBrowser.prototype.setSessionId = function (sessionId) {
|
|
61
|
+
this.config.sessionId = sessionId;
|
|
62
|
+
updateCookies(this.config);
|
|
63
|
+
};
|
|
64
|
+
AmplitudeBrowser.prototype.setOptOut = function (optOut) {
|
|
65
|
+
_super.prototype.setOptOut.call(this, optOut);
|
|
66
|
+
updateCookies(this.config);
|
|
67
|
+
};
|
|
68
|
+
AmplitudeBrowser.prototype.setTransport = function (transport) {
|
|
69
|
+
this.config.transportProvider = createTransport(transport);
|
|
70
|
+
};
|
|
71
|
+
AmplitudeBrowser.prototype.identify = function (identify, eventOptions) {
|
|
72
|
+
if (isInstanceProxy(identify)) {
|
|
73
|
+
var queue = identify._q;
|
|
74
|
+
identify._q = [];
|
|
75
|
+
identify = convertProxyObjectToRealObject(new Identify(), queue);
|
|
76
|
+
}
|
|
77
|
+
return _super.prototype.identify.call(this, identify, eventOptions);
|
|
78
|
+
};
|
|
79
|
+
AmplitudeBrowser.prototype.groupIdentify = function (groupType, groupName, identify, eventOptions) {
|
|
80
|
+
if (isInstanceProxy(identify)) {
|
|
81
|
+
var queue = identify._q;
|
|
82
|
+
identify._q = [];
|
|
83
|
+
identify = convertProxyObjectToRealObject(new Identify(), queue);
|
|
84
|
+
}
|
|
85
|
+
return _super.prototype.groupIdentify.call(this, groupType, groupName, identify, eventOptions);
|
|
86
|
+
};
|
|
87
|
+
AmplitudeBrowser.prototype.revenue = function (revenue, eventOptions) {
|
|
88
|
+
if (isInstanceProxy(revenue)) {
|
|
89
|
+
var queue = revenue._q;
|
|
90
|
+
revenue._q = [];
|
|
91
|
+
revenue = convertProxyObjectToRealObject(new Revenue(), queue);
|
|
92
|
+
}
|
|
93
|
+
return _super.prototype.revenue.call(this, revenue, eventOptions);
|
|
94
|
+
};
|
|
95
|
+
AmplitudeBrowser.prototype.trackAttributions = function () {
|
|
96
|
+
var attributions = getAttributions(this.config);
|
|
97
|
+
if (Object.keys(attributions).length === 0) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
var id = new Identify();
|
|
101
|
+
Object.entries(attributions).forEach(function (_a) {
|
|
102
|
+
var _b = __read(_a, 2), key = _b[0], value = _b[1];
|
|
103
|
+
if (value) {
|
|
104
|
+
id.setOnce("initial_".concat(key), value);
|
|
105
|
+
id.set(key, value);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return this.identify(id);
|
|
109
|
+
};
|
|
110
|
+
return AmplitudeBrowser;
|
|
111
|
+
}(AmplitudeCore));
|
|
112
|
+
export { AmplitudeBrowser };
|
|
113
|
+
var client = new AmplitudeBrowser();
|
|
110
114
|
/**
|
|
111
|
-
*
|
|
115
|
+
* Initializes the Amplitude SDK with your apiKey, userId and optional configurations.
|
|
116
|
+
* This method must be called before any other operations.
|
|
112
117
|
*
|
|
113
118
|
* ```typescript
|
|
114
|
-
*
|
|
119
|
+
* await init(API_KEY, USER_ID, options).promise;
|
|
115
120
|
* ```
|
|
116
121
|
*/
|
|
117
|
-
export var
|
|
118
|
-
return getConfig().sessionId;
|
|
119
|
-
};
|
|
122
|
+
export var init = returnWrapper(client.init.bind(client));
|
|
120
123
|
/**
|
|
121
|
-
*
|
|
122
|
-
* When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).
|
|
124
|
+
* Adds a new plugin.
|
|
123
125
|
*
|
|
124
126
|
* ```typescript
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*/
|
|
128
|
-
export var setSessionId = function (sessionId) {
|
|
129
|
-
var config = getConfig();
|
|
130
|
-
config.sessionId = sessionId;
|
|
131
|
-
updateCookies(config);
|
|
132
|
-
};
|
|
133
|
-
/**
|
|
134
|
-
* Sets a new optOut config value. This toggles event tracking on/off.
|
|
135
|
-
*
|
|
136
|
-
*```typescript
|
|
137
|
-
* // Stops tracking
|
|
138
|
-
* setOptOut(true);
|
|
139
|
-
*
|
|
140
|
-
* // Starts/resumes tracking
|
|
141
|
-
* setOptOut(false);
|
|
127
|
+
* const plugin = {...};
|
|
128
|
+
* amplitude.add(plugin);
|
|
142
129
|
* ```
|
|
143
130
|
*/
|
|
144
|
-
export var
|
|
145
|
-
_setOptOut(optOut);
|
|
146
|
-
var config = getConfig();
|
|
147
|
-
updateCookies(config);
|
|
148
|
-
};
|
|
131
|
+
export var add = returnWrapper(client.add.bind(client));
|
|
149
132
|
/**
|
|
150
|
-
*
|
|
133
|
+
* Removes a plugin.
|
|
151
134
|
*
|
|
152
135
|
* ```typescript
|
|
153
|
-
*
|
|
154
|
-
* setTransport('fetch');
|
|
155
|
-
*
|
|
156
|
-
* // Use XMLHttpRequest API
|
|
157
|
-
* setTransport('xhr');
|
|
158
|
-
*
|
|
159
|
-
* // Use navigator.sendBeacon API
|
|
160
|
-
* setTransport('beacon');
|
|
136
|
+
* amplitude.remove('myPlugin');
|
|
161
137
|
* ```
|
|
162
138
|
*/
|
|
163
|
-
export var
|
|
164
|
-
var config = getConfig();
|
|
165
|
-
var transportProvider = createTransport(transport);
|
|
166
|
-
config.transportProvider = transportProvider;
|
|
167
|
-
};
|
|
139
|
+
export var remove = returnWrapper(client.remove.bind(client));
|
|
168
140
|
/**
|
|
169
141
|
* Tracks user-defined event, with specified type, optional event properties and optional overwrites.
|
|
170
142
|
*
|
|
@@ -185,15 +157,11 @@ export var setTransport = function (transport) {
|
|
|
185
157
|
* console.log(result.message); // "Event tracked successfully"
|
|
186
158
|
* ```
|
|
187
159
|
*/
|
|
188
|
-
export var track =
|
|
189
|
-
return {
|
|
190
|
-
promise: _track(eventType, eventProperties, eventOptions),
|
|
191
|
-
};
|
|
192
|
-
};
|
|
160
|
+
export var track = returnWrapper(client.track.bind(client));
|
|
193
161
|
/**
|
|
194
|
-
*
|
|
162
|
+
* Alias for track()
|
|
195
163
|
*/
|
|
196
|
-
export var logEvent =
|
|
164
|
+
export var logEvent = returnWrapper(client.logEvent.bind(client));
|
|
197
165
|
/**
|
|
198
166
|
* Sends an identify event containing user property operations
|
|
199
167
|
*
|
|
@@ -209,16 +177,7 @@ export var logEvent = track;
|
|
|
209
177
|
* console.log(result.message); // "Event tracked successfully"
|
|
210
178
|
* ```
|
|
211
179
|
*/
|
|
212
|
-
export var identify =
|
|
213
|
-
if (isInstanceProxy(identify)) {
|
|
214
|
-
var queue = identify._q;
|
|
215
|
-
identify._q = [];
|
|
216
|
-
identify = convertProxyObjectToRealObject(new Identify(), queue);
|
|
217
|
-
}
|
|
218
|
-
return {
|
|
219
|
-
promise: _identify(undefined, undefined, identify, eventOptions),
|
|
220
|
-
};
|
|
221
|
-
};
|
|
180
|
+
export var identify = returnWrapper(client.identify.bind(client));
|
|
222
181
|
/**
|
|
223
182
|
* Sends a group identify event containing group property operations.
|
|
224
183
|
*
|
|
@@ -236,21 +195,8 @@ export var identify = function (identify, eventOptions) {
|
|
|
236
195
|
* console.log(result.message); // "Event tracked successfully"
|
|
237
196
|
* ```
|
|
238
197
|
*/
|
|
239
|
-
export var groupIdentify =
|
|
240
|
-
|
|
241
|
-
var queue = identify._q;
|
|
242
|
-
identify._q = [];
|
|
243
|
-
identify = convertProxyObjectToRealObject(new Identify(), queue);
|
|
244
|
-
}
|
|
245
|
-
return {
|
|
246
|
-
promise: _groupIdentify(undefined, undefined, groupType, groupName, identify, eventOptions),
|
|
247
|
-
};
|
|
248
|
-
};
|
|
249
|
-
export var setGroup = function (groupType, groupName) {
|
|
250
|
-
return {
|
|
251
|
-
promise: _setGroup(groupType, groupName),
|
|
252
|
-
};
|
|
253
|
-
};
|
|
198
|
+
export var groupIdentify = returnWrapper(client.groupIdentify.bind(client));
|
|
199
|
+
export var setGroup = returnWrapper(client.setGroup.bind(client));
|
|
254
200
|
/**
|
|
255
201
|
* Sends a revenue event containing revenue property operations.
|
|
256
202
|
*
|
|
@@ -266,14 +212,83 @@ export var setGroup = function (groupType, groupName) {
|
|
|
266
212
|
* console.log(result.message); // "Event tracked successfully"
|
|
267
213
|
* ```
|
|
268
214
|
*/
|
|
269
|
-
export var revenue =
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
215
|
+
export var revenue = returnWrapper(client.revenue.bind(client));
|
|
216
|
+
/**
|
|
217
|
+
* Returns current user ID.
|
|
218
|
+
*
|
|
219
|
+
* ```typescript
|
|
220
|
+
* const userId = getUserId();
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
export var getUserId = client.getUserId.bind(client);
|
|
224
|
+
/**
|
|
225
|
+
* Sets a new user ID.
|
|
226
|
+
*
|
|
227
|
+
* ```typescript
|
|
228
|
+
* setUserId('userId');
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
export var setUserId = client.setUserId.bind(client);
|
|
232
|
+
/**
|
|
233
|
+
* Returns current device ID.
|
|
234
|
+
*
|
|
235
|
+
* ```typescript
|
|
236
|
+
* const deviceId = getDeviceId();
|
|
237
|
+
* ```
|
|
238
|
+
*/
|
|
239
|
+
export var getDeviceId = client.getDeviceId.bind(client);
|
|
240
|
+
/**
|
|
241
|
+
* Sets a new device ID.
|
|
242
|
+
* When setting a custom device ID, make sure the value is sufficiently unique.
|
|
243
|
+
* A uuid is recommended.
|
|
244
|
+
*
|
|
245
|
+
* ```typescript
|
|
246
|
+
* setDeviceId('deviceId');
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
export var setDeviceId = client.setDeviceId.bind(client);
|
|
250
|
+
/**
|
|
251
|
+
* Returns current session ID.
|
|
252
|
+
*
|
|
253
|
+
* ```typescript
|
|
254
|
+
* const sessionId = getSessionId();
|
|
255
|
+
* ```
|
|
256
|
+
*/
|
|
257
|
+
export var getSessionId = client.getSessionId.bind(client);
|
|
258
|
+
/**
|
|
259
|
+
* Sets a new session ID.
|
|
260
|
+
* When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).
|
|
261
|
+
*
|
|
262
|
+
* ```typescript
|
|
263
|
+
* setSessionId(Date.now());
|
|
264
|
+
* ```
|
|
265
|
+
*/
|
|
266
|
+
export var setSessionId = client.setSessionId.bind(client);
|
|
267
|
+
/**
|
|
268
|
+
* Sets a new optOut config value. This toggles event tracking on/off.
|
|
269
|
+
*
|
|
270
|
+
*```typescript
|
|
271
|
+
* // Stops tracking
|
|
272
|
+
* setOptOut(true);
|
|
273
|
+
*
|
|
274
|
+
* // Starts/resumes tracking
|
|
275
|
+
* setOptOut(false);
|
|
276
|
+
* ```
|
|
277
|
+
*/
|
|
278
|
+
export var setOptOut = client.setOptOut.bind(client);
|
|
279
|
+
/**
|
|
280
|
+
* Sets the network transport type for events.
|
|
281
|
+
*
|
|
282
|
+
* ```typescript
|
|
283
|
+
* // Use Fetch API
|
|
284
|
+
* setTransport('fetch');
|
|
285
|
+
*
|
|
286
|
+
* // Use XMLHttpRequest API
|
|
287
|
+
* setTransport('xhr');
|
|
288
|
+
*
|
|
289
|
+
* // Use navigator.sendBeacon API
|
|
290
|
+
* setTransport('beacon');
|
|
291
|
+
* ```
|
|
292
|
+
*/
|
|
293
|
+
export var setTransport = client.setTransport.bind(client);
|
|
279
294
|
//# sourceMappingURL=browser-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n add as _add,\n groupIdentify as _groupIdentify,\n Destination,\n identify as _identify,\n revenue as _revenue,\n init as _init,\n setOptOut as _setOptOut,\n Identify,\n Revenue,\n track as _track,\n setGroup as _setGroup,\n remove as _remove,\n} from '@amplitude/analytics-core';\nimport {\n AmplitudeReturn,\n BrowserConfig,\n BrowserOptions,\n EventOptions,\n Plugin,\n Result,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { createConfig, createTransport, getConfig } from './config';\nimport { trackAttributions } from './attribution';\nimport { updateCookies } from './session-manager';\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = (apiKey: string, userId?: string, options?: BrowserOptions): AmplitudeReturn<void> => {\n return {\n promise: (async () => {\n const browserOptions = createConfig(apiKey, userId, options);\n const config = _init(browserOptions) as BrowserConfig;\n updateCookies(config);\n\n await _add(new Context());\n await _add(new Destination());\n trackAttributions(config);\n })(),\n };\n};\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = (plugin: Plugin): AmplitudeReturn<void> => {\n return {\n promise: _add(plugin),\n };\n};\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = (pluginName: string): AmplitudeReturn<void> => {\n return {\n promise: _remove(pluginName),\n };\n};\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = () => {\n return getConfig().userId;\n};\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = (userId: string) => {\n const config = getConfig();\n config.userId = userId;\n updateCookies(config);\n};\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = () => {\n return getConfig().deviceId;\n};\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = (deviceId: string) => {\n const config = getConfig();\n config.deviceId = deviceId;\n updateCookies(config);\n};\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = () => {\n return getConfig().sessionId;\n};\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = (sessionId: number) => {\n const config = getConfig();\n config.sessionId = sessionId;\n updateCookies(config);\n};\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = (optOut: boolean) => {\n _setOptOut(optOut);\n const config = getConfig();\n updateCookies(config);\n};\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = (transport: TransportType) => {\n const config = getConfig();\n const transportProvider = createTransport(transport);\n config.transportProvider = transportProvider;\n};\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = (\n eventType: string,\n eventProperties?: Record<string, any>,\n eventOptions?: EventOptions,\n): AmplitudeReturn<Result> => {\n return {\n promise: _track(eventType, eventProperties, eventOptions),\n };\n};\n\n/**\n * Alis for track()\n */\nexport const logEvent = track;\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = (identify: Identify, eventOptions?: EventOptions): AmplitudeReturn<Result> => {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return {\n promise: _identify(undefined, undefined, identify, eventOptions),\n };\n};\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = (\n groupType: string,\n groupName: string | string[],\n identify: Identify,\n eventOptions?: EventOptions,\n): AmplitudeReturn<Result> => {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return {\n promise: _groupIdentify(undefined, undefined, groupType, groupName, identify, eventOptions),\n };\n};\n\nexport const setGroup = (groupType: string, groupName: string | string[]): AmplitudeReturn<Result> => {\n return {\n promise: _setGroup(groupType, groupName),\n };\n};\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = (revenue: Revenue, eventOptions?: EventOptions): AmplitudeReturn<Result> => {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return {\n promise: _revenue(revenue, eventOptions),\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../src/browser-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { AmplitudeCore, Destination, Identify, Revenue, returnWrapper } from '@amplitude/analytics-core';\nimport {\n BrowserConfig,\n BrowserOptions,\n EventOptions,\n Identify as IIdentify,\n Result,\n Revenue as IRevenue,\n TransportType,\n} from '@amplitude/analytics-types';\nimport { convertProxyObjectToRealObject, isInstanceProxy } from './utils/snippet-helper';\nimport { Context } from './plugins/context';\nimport { useBrowserConfig, createTransport } from './config';\nimport { getAttributions } from './attribution';\nimport { updateCookies } from './session-manager';\nimport { parseOldCookies } from './cookie-migration';\n\nexport class AmplitudeBrowser extends AmplitudeCore<BrowserConfig> {\n async init(apiKey: string, userId?: string, options?: BrowserOptions) {\n // Step 1: Read cookies stored by old SDK\n const oldCookies = parseOldCookies(apiKey, options);\n\n // Step 2: Create browser config\n const browserOptions = useBrowserConfig(apiKey, userId || oldCookies.userId, {\n ...options,\n deviceId: oldCookies.deviceId ?? options?.deviceId,\n sessionId: oldCookies.sessionId ?? options?.sessionId,\n optOut: options?.optOut ?? oldCookies.optOut,\n });\n await super.init(undefined, undefined, browserOptions);\n\n // Step 3: Store user session in cookie storage\n updateCookies(this.config, oldCookies.lastEventTime);\n\n // Step 4: Install plugins\n await this.add(new Context());\n await this.add(new Destination());\n\n // Step 4: Track attributions\n void this.trackAttributions();\n }\n\n getUserId() {\n return this.config.userId;\n }\n\n setUserId(userId: string) {\n this.config.userId = userId;\n updateCookies(this.config);\n }\n\n getDeviceId() {\n return this.config.deviceId;\n }\n\n setDeviceId(deviceId: string) {\n this.config.deviceId = deviceId;\n updateCookies(this.config);\n }\n\n getSessionId() {\n return this.config.sessionId;\n }\n\n setSessionId(sessionId: number) {\n this.config.sessionId = sessionId;\n updateCookies(this.config);\n }\n\n setOptOut(optOut: boolean) {\n super.setOptOut(optOut);\n updateCookies(this.config);\n }\n\n setTransport(transport: TransportType) {\n this.config.transportProvider = createTransport(transport);\n }\n\n identify(identify: IIdentify, eventOptions?: EventOptions): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.identify(identify, eventOptions);\n }\n\n groupIdentify(\n groupType: string,\n groupName: string | string[],\n identify: IIdentify,\n eventOptions?: EventOptions,\n ): Promise<Result> {\n if (isInstanceProxy(identify)) {\n const queue = identify._q;\n identify._q = [];\n identify = convertProxyObjectToRealObject(new Identify(), queue);\n }\n return super.groupIdentify(groupType, groupName, identify, eventOptions);\n }\n\n revenue(revenue: IRevenue, eventOptions?: EventOptions) {\n if (isInstanceProxy(revenue)) {\n const queue = revenue._q;\n revenue._q = [];\n revenue = convertProxyObjectToRealObject(new Revenue(), queue);\n }\n return super.revenue(revenue, eventOptions);\n }\n\n trackAttributions() {\n const attributions = getAttributions(this.config);\n if (Object.keys(attributions).length === 0) {\n return;\n }\n const id = new Identify();\n Object.entries(attributions).forEach(([key, value]: [string, string]) => {\n if (value) {\n id.setOnce(`initial_${key}`, value);\n id.set(key, value);\n }\n });\n return this.identify(id);\n }\n}\n\nconst client = new AmplitudeBrowser();\n\n/**\n * Initializes the Amplitude SDK with your apiKey, userId and optional configurations.\n * This method must be called before any other operations.\n *\n * ```typescript\n * await init(API_KEY, USER_ID, options).promise;\n * ```\n */\nexport const init = returnWrapper(client.init.bind(client));\n\n/**\n * Adds a new plugin.\n *\n * ```typescript\n * const plugin = {...};\n * amplitude.add(plugin);\n * ```\n */\nexport const add = returnWrapper(client.add.bind(client));\n\n/**\n * Removes a plugin.\n *\n * ```typescript\n * amplitude.remove('myPlugin');\n * ```\n */\nexport const remove = returnWrapper(client.remove.bind(client));\n\n/**\n * Tracks user-defined event, with specified type, optional event properties and optional overwrites.\n *\n * ```typescript\n * // event tracking with event type only\n * track('Page Load');\n *\n * // event tracking with event type and additional event properties\n * track('Page Load', { loadTime: 1000 });\n *\n * // event tracking with event type, additional event properties, and overwritten event options\n * track('Page Load', { loadTime: 1000 }, { sessionId: -1 });\n *\n * // alternatively, this tracking method is awaitable\n * const result = await track('Page Load').promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const track = returnWrapper(client.track.bind(client));\n\n/**\n * Alias for track()\n */\nexport const logEvent = returnWrapper(client.logEvent.bind(client));\n\n/**\n * Sends an identify event containing user property operations\n *\n * ```typescript\n * const id = new Identify();\n * id.set('colors', ['rose', 'gold']);\n * identify(id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await identify(id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const identify = returnWrapper(client.identify.bind(client));\n\n/**\n * Sends a group identify event containing group property operations.\n *\n * ```typescript\n * const id = new Identify();\n * id.set('skills', ['js', 'ts']);\n * const groupType = 'org';\n * const groupName = 'engineering';\n * groupIdentify(groupType, groupName, id);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await groupIdentify(groupType, groupName, id).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const groupIdentify = returnWrapper(client.groupIdentify.bind(client));\nexport const setGroup = returnWrapper(client.setGroup.bind(client));\n\n/**\n * Sends a revenue event containing revenue property operations.\n *\n * ```typescript\n * const rev = new Revenue();\n * rev.setRevenue(100);\n * revenue(rev);\n *\n * // alternatively, this tracking method is awaitable\n * const result = await revenue(rev).promise;\n * console.log(result.event); // {...}\n * console.log(result.code); // 200\n * console.log(result.message); // \"Event tracked successfully\"\n * ```\n */\nexport const revenue = returnWrapper(client.revenue.bind(client));\n\n/**\n * Returns current user ID.\n *\n * ```typescript\n * const userId = getUserId();\n * ```\n */\nexport const getUserId = client.getUserId.bind(client);\n\n/**\n * Sets a new user ID.\n *\n * ```typescript\n * setUserId('userId');\n * ```\n */\nexport const setUserId = client.setUserId.bind(client);\n\n/**\n * Returns current device ID.\n *\n * ```typescript\n * const deviceId = getDeviceId();\n * ```\n */\nexport const getDeviceId = client.getDeviceId.bind(client);\n\n/**\n * Sets a new device ID.\n * When setting a custom device ID, make sure the value is sufficiently unique.\n * A uuid is recommended.\n *\n * ```typescript\n * setDeviceId('deviceId');\n * ```\n */\nexport const setDeviceId = client.setDeviceId.bind(client);\n\n/**\n * Returns current session ID.\n *\n * ```typescript\n * const sessionId = getSessionId();\n * ```\n */\nexport const getSessionId = client.getSessionId.bind(client);\n\n/**\n * Sets a new session ID.\n * When settign a custom session ID, make sure the value is in milliseconds since epoch (Unix Timestamp).\n *\n * ```typescript\n * setSessionId(Date.now());\n * ```\n */\nexport const setSessionId = client.setSessionId.bind(client);\n\n/**\n * Sets a new optOut config value. This toggles event tracking on/off.\n *\n *```typescript\n * // Stops tracking\n * setOptOut(true);\n *\n * // Starts/resumes tracking\n * setOptOut(false);\n * ```\n */\nexport const setOptOut = client.setOptOut.bind(client);\n\n/**\n * Sets the network transport type for events.\n *\n * ```typescript\n * // Use Fetch API\n * setTransport('fetch');\n *\n * // Use XMLHttpRequest API\n * setTransport('xhr');\n *\n * // Use navigator.sendBeacon API\n * setTransport('beacon');\n * ```\n */\nexport const setTransport = client.setTransport.bind(client);\n"]}
|
package/lib/esm/config.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { BrowserOptions, BrowserConfig as IBrowserConfig, Storage, TrackingOptions, TransportType, UserSession } from '@amplitude/analytics-types';
|
|
1
|
+
import { Event, BrowserOptions, BrowserConfig as IBrowserConfig, Storage, TrackingOptions, TransportType, UserSession } from '@amplitude/analytics-types';
|
|
2
2
|
import { Config } from '@amplitude/analytics-core';
|
|
3
3
|
import { FetchTransport } from './transports/fetch';
|
|
4
|
+
import { MemoryStorage } from './storage/memory';
|
|
4
5
|
import { XHRTransport } from './transports/xhr';
|
|
5
6
|
import { SendBeaconTransport } from './transports/send-beacon';
|
|
6
|
-
export declare const
|
|
7
|
+
export declare const getDefaultConfig: () => {
|
|
7
8
|
cookieExpiration: number;
|
|
8
9
|
cookieSameSite: string;
|
|
9
10
|
cookieSecure: boolean;
|
|
11
|
+
cookieStorage: MemoryStorage<UserSession>;
|
|
10
12
|
disableCookies: boolean;
|
|
11
13
|
domain: string;
|
|
12
14
|
includeGclid: boolean;
|
|
@@ -14,6 +16,7 @@ export declare const defaultConfig: {
|
|
|
14
16
|
includeReferrer: boolean;
|
|
15
17
|
includeUtm: boolean;
|
|
16
18
|
sessionTimeout: number;
|
|
19
|
+
storageProvider: MemoryStorage<Event[]>;
|
|
17
20
|
trackingOptions: {
|
|
18
21
|
city: boolean;
|
|
19
22
|
country: boolean;
|
|
@@ -38,19 +41,20 @@ export declare class BrowserConfig extends Config implements IBrowserConfig {
|
|
|
38
41
|
cookieStorage: Storage<UserSession>;
|
|
39
42
|
disableCookies: boolean;
|
|
40
43
|
domain: string;
|
|
41
|
-
includeUtm: boolean;
|
|
42
|
-
includeReferrer: boolean;
|
|
43
44
|
includeGclid: boolean;
|
|
44
45
|
includeFbclid: boolean;
|
|
46
|
+
includeReferrer: boolean;
|
|
47
|
+
includeUtm: boolean;
|
|
45
48
|
sessionTimeout: number;
|
|
46
49
|
trackingOptions: TrackingOptions;
|
|
47
50
|
constructor(apiKey: string, userId?: string, options?: BrowserOptions);
|
|
48
51
|
}
|
|
49
|
-
export declare const
|
|
52
|
+
export declare const useBrowserConfig: (apiKey: string, userId?: string | undefined, options?: BrowserOptions | undefined) => IBrowserConfig;
|
|
50
53
|
export declare const createCookieStorage: (overrides?: BrowserOptions | undefined, baseConfig?: {
|
|
51
54
|
cookieExpiration: number;
|
|
52
55
|
cookieSameSite: string;
|
|
53
56
|
cookieSecure: boolean;
|
|
57
|
+
cookieStorage: MemoryStorage<UserSession>;
|
|
54
58
|
disableCookies: boolean;
|
|
55
59
|
domain: string;
|
|
56
60
|
includeGclid: boolean;
|
|
@@ -58,6 +62,7 @@ export declare const createCookieStorage: (overrides?: BrowserOptions | undefine
|
|
|
58
62
|
includeReferrer: boolean;
|
|
59
63
|
includeUtm: boolean;
|
|
60
64
|
sessionTimeout: number;
|
|
65
|
+
storageProvider: MemoryStorage<Event[]>;
|
|
61
66
|
trackingOptions: {
|
|
62
67
|
city: boolean;
|
|
63
68
|
country: boolean;
|
|
@@ -75,9 +80,8 @@ export declare const createCookieStorage: (overrides?: BrowserOptions | undefine
|
|
|
75
80
|
};
|
|
76
81
|
transportProvider: FetchTransport;
|
|
77
82
|
}) => Storage<UserSession>;
|
|
78
|
-
export declare const createEventsStorage: (overrides?: BrowserOptions | undefined) => Storage<
|
|
83
|
+
export declare const createEventsStorage: (overrides?: BrowserOptions | undefined) => Storage<Event[]>;
|
|
79
84
|
export declare const createDeviceId: (idFromCookies?: string | undefined, idFromOptions?: string | undefined, idFromQueryParams?: string | undefined) => string;
|
|
80
85
|
export declare const createSessionId: (idFromCookies: number | undefined, idFromOptions: number | undefined, lastEventTime: number | undefined, sessionTimeout: number) => number;
|
|
81
86
|
export declare const createTransport: (transport?: TransportType | undefined) => FetchTransport | XHRTransport | SendBeaconTransport;
|
|
82
|
-
export declare const getConfig: () => BrowserConfig;
|
|
83
87
|
//# sourceMappingURL=config.d.ts.map
|
package/lib/esm/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,aAAa,IAAI,cAAc,EAC/B,OAAO,EACP,eAAe,EACf,aAAa,EACb,WAAW,EACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,cAAc,EACd,aAAa,IAAI,cAAc,EAC/B,OAAO,EACP,eAAe,EACf,aAAa,EACb,WAAW,EACZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B3B,CAAC;AAEH,qBAAa,aAAc,SAAQ,MAAO,YAAW,cAAc;IACjE,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,CAAC;gBAErB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc;CAwBtE;AAED,eAAO,MAAM,gBAAgB,WAAY,MAAM,wEAA8C,cAmB5F,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BAkB/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,8DAS/B,CAAC;AAEF,eAAO,MAAM,cAAc,4HAE1B,CAAC;AAEF,eAAO,MAAM,eAAe,4HAA6E,MAAM,WAK9G,CAAC;AAEF,eAAO,MAAM,eAAe,gGAQ3B,CAAC"}
|