@posthog/browser-common 0.0.0 → 0.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/README.md +114 -28
- package/dist/client.d.ts +136 -0
- package/dist/client.js +18 -0
- package/dist/client.mjs +0 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +43 -0
- package/dist/config.mjs +9 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +44 -0
- package/dist/constants.mjs +4 -0
- package/dist/disposable.d.ts +13 -0
- package/dist/disposable.js +18 -0
- package/dist/disposable.mjs +0 -0
- package/dist/extension.d.ts +45 -0
- package/dist/extension.js +18 -0
- package/dist/extension.mjs +0 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +36 -0
- package/dist/index.mjs +2 -0
- package/dist/persistence.d.ts +24 -0
- package/dist/persistence.js +18 -0
- package/dist/persistence.mjs +0 -0
- package/dist/pubsub.d.ts +28 -0
- package/dist/pubsub.js +67 -0
- package/dist/pubsub.mjs +33 -0
- package/dist/token.d.ts +21 -0
- package/dist/token.js +18 -0
- package/dist/token.mjs +0 -0
- package/dist/utils/array-at-polyfill.d.ts +1 -0
- package/dist/utils/array-at-polyfill.js +16 -0
- package/dist/utils/array-at-polyfill.mjs +11 -0
- package/dist/utils/autocapture-utils.d.ts +23 -0
- package/dist/utils/autocapture-utils.js +479 -0
- package/dist/utils/autocapture-utils.mjs +385 -0
- package/dist/utils/blocked-uas.d.ts +17 -0
- package/dist/utils/blocked-uas.js +54 -0
- package/dist/utils/blocked-uas.mjs +14 -0
- package/dist/utils/cookie-utils.d.ts +1 -0
- package/dist/utils/cookie-utils.js +49 -0
- package/dist/utils/cookie-utils.mjs +15 -0
- package/dist/utils/device-model-utils.d.ts +8 -0
- package/dist/utils/device-model-utils.js +52 -0
- package/dist/utils/device-model-utils.mjs +18 -0
- package/dist/utils/element-utils.d.ts +5 -0
- package/dist/utils/element-utils.js +67 -0
- package/dist/utils/element-utils.mjs +21 -0
- package/dist/utils/elements-chain-utils.d.ts +4 -0
- package/dist/utils/elements-chain-utils.js +79 -0
- package/dist/utils/elements-chain-utils.mjs +36 -0
- package/dist/utils/encode-utils.d.ts +8 -0
- package/dist/utils/encode-utils.js +39 -0
- package/dist/utils/encode-utils.mjs +5 -0
- package/dist/utils/event-utils.d.ts +24 -0
- package/dist/utils/event-utils.js +344 -0
- package/dist/utils/event-utils.mjs +246 -0
- package/dist/utils/general-utils.d.ts +30 -0
- package/dist/utils/general-utils.js +191 -0
- package/dist/utils/general-utils.mjs +118 -0
- package/dist/utils/globals.d.ts +25 -0
- package/dist/utils/globals.js +75 -0
- package/dist/utils/globals.mjs +14 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.js +83 -0
- package/dist/utils/logger.mjs +36 -0
- package/dist/utils/matcher-utils.d.ts +3 -0
- package/dist/utils/matcher-utils.js +63 -0
- package/dist/utils/matcher-utils.mjs +26 -0
- package/dist/utils/property-utils.d.ts +23 -0
- package/dist/utils/property-utils.js +108 -0
- package/dist/utils/property-utils.mjs +65 -0
- package/dist/utils/prototype-utils.d.ts +7 -0
- package/dist/utils/prototype-utils.js +64 -0
- package/dist/utils/prototype-utils.mjs +27 -0
- package/dist/utils/regex-utils.d.ts +2 -0
- package/dist/utils/regex-utils.js +54 -0
- package/dist/utils/regex-utils.mjs +17 -0
- package/dist/utils/request-utils.d.ts +15 -0
- package/dist/utils/request-utils.js +153 -0
- package/dist/utils/request-utils.mjs +95 -0
- package/dist/utils/simple-event-emitter.d.ts +5 -0
- package/dist/utils/simple-event-emitter.js +51 -0
- package/dist/utils/simple-event-emitter.mjs +17 -0
- package/dist/utils/stylesheet-loader.d.ts +7 -0
- package/dist/utils/stylesheet-loader.js +53 -0
- package/dist/utils/stylesheet-loader.mjs +19 -0
- package/dist/utils/type-utils.d.ts +2 -0
- package/dist/utils/type-utils.js +41 -0
- package/dist/utils/type-utils.mjs +4 -0
- package/dist/utils/url-targeting-utils.d.ts +28 -0
- package/dist/utils/url-targeting-utils.js +56 -0
- package/dist/utils/url-targeting-utils.mjs +19 -0
- package/dist/utils/uuidv7.d.ts +43 -0
- package/dist/utils/uuidv7.js +172 -0
- package/dist/utils/uuidv7.js.LICENSE.txt +9 -0
- package/dist/utils/uuidv7.mjs +132 -0
- package/dist/utils/uuidv7.mjs.LICENSE.txt +9 -0
- package/package.json +79 -8
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { convertToURL, getQueryParam, maskQueryParams } from "./request-utils.mjs";
|
|
2
|
+
import { detectBrowser, detectBrowserVersion, detectDevice, detectDeviceType, detectOS, isNull, isUndefined, stripLeadingDollar, stripUrlHash } from "@posthog/core";
|
|
3
|
+
import config from "../config.mjs";
|
|
4
|
+
import { SDK_DIST_CHANNEL } from "../constants.mjs";
|
|
5
|
+
import { each, extend, stripEmptyProperties } from "./general-utils.mjs";
|
|
6
|
+
import { document as external_globals_mjs_document, location as external_globals_mjs_location, userAgent, window as external_globals_mjs_window } from "./globals.mjs";
|
|
7
|
+
import { getCookieValue } from "./cookie-utils.mjs";
|
|
8
|
+
const URL_REGEX_PREFIX = 'https?://(.*)';
|
|
9
|
+
const PERSONAL_DATA_CAMPAIGN_PARAMS = [
|
|
10
|
+
'gclid',
|
|
11
|
+
'gclsrc',
|
|
12
|
+
'dclid',
|
|
13
|
+
'gbraid',
|
|
14
|
+
'wbraid',
|
|
15
|
+
'fbclid',
|
|
16
|
+
'msclkid',
|
|
17
|
+
'twclid',
|
|
18
|
+
'li_fat_id',
|
|
19
|
+
'igshid',
|
|
20
|
+
'ttclid',
|
|
21
|
+
'rdt_cid',
|
|
22
|
+
'epik',
|
|
23
|
+
'qclid',
|
|
24
|
+
'sccid',
|
|
25
|
+
'irclid',
|
|
26
|
+
'_kx'
|
|
27
|
+
];
|
|
28
|
+
const CAMPAIGN_PARAMS = [
|
|
29
|
+
'utm_source',
|
|
30
|
+
'utm_medium',
|
|
31
|
+
'utm_campaign',
|
|
32
|
+
'utm_content',
|
|
33
|
+
'utm_term',
|
|
34
|
+
'gad_source',
|
|
35
|
+
'mc_cid',
|
|
36
|
+
...PERSONAL_DATA_CAMPAIGN_PARAMS
|
|
37
|
+
];
|
|
38
|
+
const EVENT_TO_PERSON_PROPERTIES = [
|
|
39
|
+
'$app_build',
|
|
40
|
+
'$app_name',
|
|
41
|
+
'$app_namespace',
|
|
42
|
+
'$app_version',
|
|
43
|
+
'$browser',
|
|
44
|
+
'$browser_version',
|
|
45
|
+
'$device_type',
|
|
46
|
+
'$current_url',
|
|
47
|
+
'$pathname',
|
|
48
|
+
'$os',
|
|
49
|
+
'$os_name',
|
|
50
|
+
'$os_version',
|
|
51
|
+
'$referring_domain',
|
|
52
|
+
'$referrer',
|
|
53
|
+
'$screen_height',
|
|
54
|
+
'$screen_width',
|
|
55
|
+
'$viewport_height',
|
|
56
|
+
'$viewport_width',
|
|
57
|
+
'$raw_user_agent'
|
|
58
|
+
];
|
|
59
|
+
const MASKED = '<masked>';
|
|
60
|
+
const COOKIE_CAMPAIGN_PARAMS = [
|
|
61
|
+
'li_fat_id'
|
|
62
|
+
];
|
|
63
|
+
function getCampaignParams(customTrackedParams, maskPersonalDataProperties, customPersonalDataProperties) {
|
|
64
|
+
if (!external_globals_mjs_document) return {};
|
|
65
|
+
const paramsToMask = maskPersonalDataProperties ? [
|
|
66
|
+
...PERSONAL_DATA_CAMPAIGN_PARAMS,
|
|
67
|
+
...customPersonalDataProperties || []
|
|
68
|
+
] : [];
|
|
69
|
+
const urlCampaignParams = _getCampaignParamsFromUrl(maskQueryParams(external_globals_mjs_document.URL, paramsToMask, MASKED), customTrackedParams);
|
|
70
|
+
const cookieCampaignParams = _getCampaignParamsFromCookie();
|
|
71
|
+
return extend(cookieCampaignParams, urlCampaignParams);
|
|
72
|
+
}
|
|
73
|
+
function _getCampaignParamsFromUrl(url, customParams) {
|
|
74
|
+
const campaign_keywords = CAMPAIGN_PARAMS.concat(customParams || []);
|
|
75
|
+
const params = {};
|
|
76
|
+
each(campaign_keywords, function(kwkey) {
|
|
77
|
+
const kw = getQueryParam(url, kwkey);
|
|
78
|
+
params[kwkey] = kw ? kw : null;
|
|
79
|
+
});
|
|
80
|
+
return params;
|
|
81
|
+
}
|
|
82
|
+
function _getCampaignParamsFromCookie() {
|
|
83
|
+
const params = {};
|
|
84
|
+
each(COOKIE_CAMPAIGN_PARAMS, function(kwkey) {
|
|
85
|
+
const kw = getCookieValue(kwkey);
|
|
86
|
+
params[kwkey] = kw ? kw : null;
|
|
87
|
+
});
|
|
88
|
+
return params;
|
|
89
|
+
}
|
|
90
|
+
function _getSearchEngine(referrer) {
|
|
91
|
+
if (!referrer) return null;
|
|
92
|
+
if (0 === referrer.search(URL_REGEX_PREFIX + 'google.([^/?]*)')) return 'google';
|
|
93
|
+
if (0 === referrer.search(URL_REGEX_PREFIX + 'bing.com')) return 'bing';
|
|
94
|
+
if (0 === referrer.search(URL_REGEX_PREFIX + 'yahoo.com')) return 'yahoo';
|
|
95
|
+
if (0 === referrer.search(URL_REGEX_PREFIX + 'duckduckgo.com')) return 'duckduckgo';
|
|
96
|
+
else return null;
|
|
97
|
+
}
|
|
98
|
+
function _getSearchInfoFromReferrer(referrer) {
|
|
99
|
+
const search = _getSearchEngine(referrer);
|
|
100
|
+
const param = 'yahoo' != search ? 'q' : 'p';
|
|
101
|
+
const ret = {};
|
|
102
|
+
if (!isNull(search)) {
|
|
103
|
+
ret['$search_engine'] = search;
|
|
104
|
+
const keyword = external_globals_mjs_document ? getQueryParam(external_globals_mjs_document.referrer, param) : '';
|
|
105
|
+
if (keyword.length) ret['ph_keyword'] = keyword;
|
|
106
|
+
}
|
|
107
|
+
return ret;
|
|
108
|
+
}
|
|
109
|
+
function getSearchInfo() {
|
|
110
|
+
const referrer = external_globals_mjs_document?.referrer;
|
|
111
|
+
if (!referrer) return {};
|
|
112
|
+
return _getSearchInfoFromReferrer(referrer);
|
|
113
|
+
}
|
|
114
|
+
function getBrowserLanguage() {
|
|
115
|
+
return navigator.language || navigator.userLanguage;
|
|
116
|
+
}
|
|
117
|
+
function getBrowserLanguagePrefix() {
|
|
118
|
+
const lang = getBrowserLanguage();
|
|
119
|
+
return 'string' == typeof lang ? lang.split('-')[0] : void 0;
|
|
120
|
+
}
|
|
121
|
+
const DIRECT = '$direct';
|
|
122
|
+
function getReferrer() {
|
|
123
|
+
return external_globals_mjs_document?.referrer || DIRECT;
|
|
124
|
+
}
|
|
125
|
+
function getReferringDomain() {
|
|
126
|
+
if (!external_globals_mjs_document?.referrer) return DIRECT;
|
|
127
|
+
return convertToURL(external_globals_mjs_document.referrer)?.host || DIRECT;
|
|
128
|
+
}
|
|
129
|
+
function getReferrerInfo() {
|
|
130
|
+
return {
|
|
131
|
+
$referrer: getReferrer(),
|
|
132
|
+
$referring_domain: getReferringDomain()
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function getPersonInfo(maskPersonalDataProperties, customPersonalDataProperties, disableCaptureUrlHashes = false) {
|
|
136
|
+
const paramsToMask = maskPersonalDataProperties ? [
|
|
137
|
+
...PERSONAL_DATA_CAMPAIGN_PARAMS,
|
|
138
|
+
...customPersonalDataProperties || []
|
|
139
|
+
] : [];
|
|
140
|
+
const href = disableCaptureUrlHashes ? stripUrlHash(external_globals_mjs_location?.href) : external_globals_mjs_location?.href;
|
|
141
|
+
const url = href?.substring(0, 1000);
|
|
142
|
+
return {
|
|
143
|
+
r: getReferrer().substring(0, 1000),
|
|
144
|
+
u: url ? maskQueryParams(url, paramsToMask, MASKED) : void 0
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function getPersonPropsFromInfo(info, disableCaptureUrlHashes = false) {
|
|
148
|
+
const { r: referrer, u } = info;
|
|
149
|
+
const url = disableCaptureUrlHashes ? stripUrlHash(u) : u;
|
|
150
|
+
const referring_domain = null == referrer ? void 0 : referrer == DIRECT ? DIRECT : convertToURL(referrer)?.host;
|
|
151
|
+
const props = {
|
|
152
|
+
$referrer: referrer,
|
|
153
|
+
$referring_domain: referring_domain
|
|
154
|
+
};
|
|
155
|
+
if (url) {
|
|
156
|
+
props['$current_url'] = url;
|
|
157
|
+
const location = convertToURL(url);
|
|
158
|
+
props['$host'] = location?.host;
|
|
159
|
+
props['$pathname'] = location?.pathname;
|
|
160
|
+
const campaignParams = _getCampaignParamsFromUrl(url);
|
|
161
|
+
extend(props, campaignParams);
|
|
162
|
+
}
|
|
163
|
+
if (referrer) {
|
|
164
|
+
const searchInfo = _getSearchInfoFromReferrer(referrer);
|
|
165
|
+
extend(props, searchInfo);
|
|
166
|
+
}
|
|
167
|
+
return props;
|
|
168
|
+
}
|
|
169
|
+
function getInitialPersonPropsFromInfo(info, disableCaptureUrlHashes = false) {
|
|
170
|
+
const personProps = getPersonPropsFromInfo(info, disableCaptureUrlHashes);
|
|
171
|
+
const props = {};
|
|
172
|
+
each(personProps, function(val, key) {
|
|
173
|
+
props[`$initial_${stripLeadingDollar(key)}`] = val;
|
|
174
|
+
});
|
|
175
|
+
return props;
|
|
176
|
+
}
|
|
177
|
+
function getTimezone() {
|
|
178
|
+
try {
|
|
179
|
+
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
180
|
+
} catch {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function getTimezoneOffset() {
|
|
185
|
+
try {
|
|
186
|
+
return new Date().getTimezoneOffset();
|
|
187
|
+
} catch {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function getBrowserDetectionHints() {
|
|
192
|
+
const nav = 'undefined' != typeof navigator ? navigator : void 0;
|
|
193
|
+
return nav?.brave ? {
|
|
194
|
+
brave: true
|
|
195
|
+
} : {};
|
|
196
|
+
}
|
|
197
|
+
function getEventProperties(maskPersonalDataProperties, customPersonalDataProperties, detectGoogleSearchApp, disableCaptureUrlHashes = false) {
|
|
198
|
+
if (!userAgent) return {};
|
|
199
|
+
const paramsToMask = maskPersonalDataProperties ? [
|
|
200
|
+
...PERSONAL_DATA_CAMPAIGN_PARAMS,
|
|
201
|
+
...customPersonalDataProperties || []
|
|
202
|
+
] : [];
|
|
203
|
+
const [os_name, os_version] = detectOS(userAgent);
|
|
204
|
+
const browserHints = getBrowserDetectionHints();
|
|
205
|
+
const browserOptions = {};
|
|
206
|
+
if (!isUndefined(detectGoogleSearchApp)) browserOptions.detectGoogleSearchApp = detectGoogleSearchApp;
|
|
207
|
+
const deviceOptions = {};
|
|
208
|
+
const userAgentDataPlatform = navigator?.userAgentData?.platform;
|
|
209
|
+
const maxTouchPoints = navigator?.maxTouchPoints;
|
|
210
|
+
const screenWidth = external_globals_mjs_window?.screen?.width;
|
|
211
|
+
const screenHeight = external_globals_mjs_window?.screen?.height;
|
|
212
|
+
const devicePixelRatio = external_globals_mjs_window?.devicePixelRatio;
|
|
213
|
+
if (!isUndefined(userAgentDataPlatform)) deviceOptions.userAgentDataPlatform = userAgentDataPlatform;
|
|
214
|
+
if (!isUndefined(maxTouchPoints)) deviceOptions.maxTouchPoints = maxTouchPoints;
|
|
215
|
+
if (!isUndefined(screenWidth)) deviceOptions.screenWidth = screenWidth;
|
|
216
|
+
if (!isUndefined(screenHeight)) deviceOptions.screenHeight = screenHeight;
|
|
217
|
+
if (!isUndefined(devicePixelRatio)) deviceOptions.devicePixelRatio = devicePixelRatio;
|
|
218
|
+
const properties = extend(stripEmptyProperties({
|
|
219
|
+
$os: os_name,
|
|
220
|
+
$os_version: os_version,
|
|
221
|
+
$browser: detectBrowser(userAgent, navigator.vendor, browserHints, browserOptions),
|
|
222
|
+
$device: detectDevice(userAgent),
|
|
223
|
+
$device_type: detectDeviceType(userAgent, deviceOptions),
|
|
224
|
+
$timezone: getTimezone(),
|
|
225
|
+
$timezone_offset: getTimezoneOffset()
|
|
226
|
+
}), {
|
|
227
|
+
$current_url: maskQueryParams(disableCaptureUrlHashes ? stripUrlHash(external_globals_mjs_location?.href) : external_globals_mjs_location?.href, paramsToMask, MASKED),
|
|
228
|
+
$host: external_globals_mjs_location?.host,
|
|
229
|
+
$pathname: external_globals_mjs_location?.pathname,
|
|
230
|
+
$raw_user_agent: userAgent.length > 1000 ? userAgent.substring(0, 997) + '...' : userAgent,
|
|
231
|
+
$browser_version: detectBrowserVersion(userAgent, navigator.vendor, browserHints, browserOptions),
|
|
232
|
+
$browser_language: getBrowserLanguage(),
|
|
233
|
+
$browser_language_prefix: getBrowserLanguagePrefix(),
|
|
234
|
+
$screen_height: external_globals_mjs_window?.screen.height,
|
|
235
|
+
$screen_width: external_globals_mjs_window?.screen.width,
|
|
236
|
+
$viewport_height: external_globals_mjs_window?.innerHeight,
|
|
237
|
+
$viewport_width: external_globals_mjs_window?.innerWidth,
|
|
238
|
+
$lib: config.LIB_NAME,
|
|
239
|
+
$lib_version: config.LIB_VERSION,
|
|
240
|
+
$insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10),
|
|
241
|
+
$time: Date.now() / 1000
|
|
242
|
+
});
|
|
243
|
+
if (config.SDK_DIST_CHANNEL) properties[SDK_DIST_CHANNEL] = config.SDK_DIST_CHANNEL;
|
|
244
|
+
return properties;
|
|
245
|
+
}
|
|
246
|
+
export { CAMPAIGN_PARAMS, COOKIE_CAMPAIGN_PARAMS, EVENT_TO_PERSON_PROPERTIES, MASKED, PERSONAL_DATA_CAMPAIGN_PARAMS, getBrowserDetectionHints, getBrowserLanguage, getBrowserLanguagePrefix, getCampaignParams, getEventProperties, getInitialPersonPropsFromInfo, getPersonInfo, getPersonPropsFromInfo, getReferrer, getReferrerInfo, getReferringDomain, getSearchInfo, getTimezone, getTimezoneOffset };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { PostHogConfig, Properties } from '@posthog/types';
|
|
2
|
+
export declare function find<T>(value: T[], predicate: (value: T) => boolean): T | undefined;
|
|
3
|
+
export declare function eachArray<E = any>(obj: E[] | null | undefined, iterator: (value: E, key: number) => void): void;
|
|
4
|
+
export declare function each(obj: any, iterator: (value: any, key: any) => void): void;
|
|
5
|
+
export declare const extend: (obj: Record<string, any>, ...args: Record<string, any>[]) => Record<string, any>;
|
|
6
|
+
/**
|
|
7
|
+
* Object.entries() polyfill
|
|
8
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
|
|
9
|
+
*/
|
|
10
|
+
export declare function entries<T = any>(obj: Record<string, T>): [string, T][];
|
|
11
|
+
export declare const trySafe: <T>(fn: () => T) => T | undefined;
|
|
12
|
+
export declare const safewrap: <F extends (...args: any[]) => any = (...args: any[]) => any>(f: F) => F;
|
|
13
|
+
export declare const safewrapClass: (klass: Function, functions: string[]) => void;
|
|
14
|
+
export declare const stripEmptyProperties: (p: Properties) => Properties;
|
|
15
|
+
export declare function _copyAndTruncateStrings<T extends Record<string, any> = Record<string, any>>(object: T, maxStringLength: number): T;
|
|
16
|
+
export declare function isCrossDomainCookie(documentLocation: Location | undefined): boolean;
|
|
17
|
+
export declare function addEventListener(element: Window | Document | Element | undefined, event: string, callback: EventListener, options?: AddEventListenerOptions): void;
|
|
18
|
+
/**
|
|
19
|
+
* Helper to migrate deprecated config fields to new field names with appropriate warnings
|
|
20
|
+
* @param config - The config object to check
|
|
21
|
+
* @param newField - The new field name to use
|
|
22
|
+
* @param oldField - The deprecated field name to check for
|
|
23
|
+
* @param defaultValue - The default value if neither field is set
|
|
24
|
+
* @param loggerInstance - Optional logger instance for deprecation warnings
|
|
25
|
+
* @returns The value to use (new field takes precedence over old field)
|
|
26
|
+
*/
|
|
27
|
+
export declare function migrateConfigField<T>(config: Record<string, any>, newField: string, oldField: string, defaultValue: T, loggerInstance?: {
|
|
28
|
+
warn: (message: string) => void;
|
|
29
|
+
}): T;
|
|
30
|
+
export declare function isToolbarInstance(config: Pick<PostHogConfig, 'name'>): boolean;
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
find: ()=>find,
|
|
28
|
+
migrateConfigField: ()=>migrateConfigField,
|
|
29
|
+
each: ()=>each,
|
|
30
|
+
entries: ()=>entries,
|
|
31
|
+
safewrap: ()=>safewrap,
|
|
32
|
+
eachArray: ()=>eachArray,
|
|
33
|
+
safewrapClass: ()=>safewrapClass,
|
|
34
|
+
isCrossDomainCookie: ()=>isCrossDomainCookie,
|
|
35
|
+
_copyAndTruncateStrings: ()=>_copyAndTruncateStrings,
|
|
36
|
+
addEventListener: ()=>addEventListener,
|
|
37
|
+
extend: ()=>extend,
|
|
38
|
+
stripEmptyProperties: ()=>stripEmptyProperties,
|
|
39
|
+
isToolbarInstance: ()=>isToolbarInstance,
|
|
40
|
+
trySafe: ()=>trySafe
|
|
41
|
+
});
|
|
42
|
+
const core_namespaceObject = require("@posthog/core");
|
|
43
|
+
const external_logger_js_namespaceObject = require("./logger.js");
|
|
44
|
+
function find(value, predicate) {
|
|
45
|
+
for(let i = 0; i < value.length; i++)if (predicate(value[i])) return value[i];
|
|
46
|
+
}
|
|
47
|
+
function eachArray(obj, iterator) {
|
|
48
|
+
if ((0, core_namespaceObject.isArray)(obj)) obj.forEach(iterator);
|
|
49
|
+
}
|
|
50
|
+
function each(obj, iterator) {
|
|
51
|
+
if ((0, core_namespaceObject.isNullish)(obj)) return;
|
|
52
|
+
if ((0, core_namespaceObject.isArray)(obj)) return void obj.forEach(iterator);
|
|
53
|
+
if ((0, core_namespaceObject.isFormData)(obj)) return void obj.forEach((val, key)=>iterator(val, key));
|
|
54
|
+
for(const key in obj)if (core_namespaceObject.hasOwnProperty.call(obj, key)) iterator(obj[key], key);
|
|
55
|
+
}
|
|
56
|
+
const extend = function(obj, ...args) {
|
|
57
|
+
for (const source of args)for(const prop in source)if (void 0 !== source[prop]) obj[prop] = source[prop];
|
|
58
|
+
return obj;
|
|
59
|
+
};
|
|
60
|
+
function entries(obj) {
|
|
61
|
+
const ownProps = Object.keys(obj);
|
|
62
|
+
let i = ownProps.length;
|
|
63
|
+
const resArray = new Array(i);
|
|
64
|
+
while(i--)resArray[i] = [
|
|
65
|
+
ownProps[i],
|
|
66
|
+
obj[ownProps[i]]
|
|
67
|
+
];
|
|
68
|
+
return resArray;
|
|
69
|
+
}
|
|
70
|
+
const trySafe = function(fn) {
|
|
71
|
+
try {
|
|
72
|
+
return fn();
|
|
73
|
+
} catch {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const safewrap = function(f) {
|
|
78
|
+
return function(...args) {
|
|
79
|
+
try {
|
|
80
|
+
return f.apply(this, args);
|
|
81
|
+
} catch (e) {
|
|
82
|
+
external_logger_js_namespaceObject.logger.critical('Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.');
|
|
83
|
+
external_logger_js_namespaceObject.logger.critical(e);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
const safewrapClass = function(klass, functions) {
|
|
88
|
+
for(let i = 0; i < functions.length; i++)klass.prototype[functions[i]] = safewrap(klass.prototype[functions[i]]);
|
|
89
|
+
};
|
|
90
|
+
const stripEmptyProperties = function(p) {
|
|
91
|
+
const ret = {};
|
|
92
|
+
each(p, function(v, k) {
|
|
93
|
+
if ((0, core_namespaceObject.isString)(v) && v.length > 0 || (0, core_namespaceObject.isNumber)(v)) ret[k] = v;
|
|
94
|
+
});
|
|
95
|
+
return ret;
|
|
96
|
+
};
|
|
97
|
+
function deepCircularCopy(value, customizer) {
|
|
98
|
+
const COPY_IN_PROGRESS_SET = new Set();
|
|
99
|
+
function internalDeepCircularCopy(value, key) {
|
|
100
|
+
if (value !== Object(value)) return customizer ? customizer(value, key) : value;
|
|
101
|
+
if (COPY_IN_PROGRESS_SET.has(value)) return;
|
|
102
|
+
COPY_IN_PROGRESS_SET.add(value);
|
|
103
|
+
let result;
|
|
104
|
+
if ((0, core_namespaceObject.isArray)(value)) {
|
|
105
|
+
result = [];
|
|
106
|
+
eachArray(value, (it)=>{
|
|
107
|
+
result.push(internalDeepCircularCopy(it));
|
|
108
|
+
});
|
|
109
|
+
} else {
|
|
110
|
+
const copy = {};
|
|
111
|
+
each(value, (val, key)=>{
|
|
112
|
+
if (!COPY_IN_PROGRESS_SET.has(val)) copy[key] = internalDeepCircularCopy(val, key);
|
|
113
|
+
});
|
|
114
|
+
result = copy;
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
return internalDeepCircularCopy(value);
|
|
119
|
+
}
|
|
120
|
+
function _copyAndTruncateStrings(object, maxStringLength) {
|
|
121
|
+
return deepCircularCopy(object, (value)=>{
|
|
122
|
+
if ((0, core_namespaceObject.isString)(value)) return value.slice(0, maxStringLength);
|
|
123
|
+
return value;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE = [
|
|
127
|
+
'herokuapp.com',
|
|
128
|
+
'vercel.app',
|
|
129
|
+
'netlify.app'
|
|
130
|
+
];
|
|
131
|
+
function isCrossDomainCookie(documentLocation) {
|
|
132
|
+
const hostname = documentLocation?.hostname;
|
|
133
|
+
if (!(0, core_namespaceObject.isString)(hostname)) return false;
|
|
134
|
+
const lastTwoParts = hostname.split('.').slice(-2).join('.');
|
|
135
|
+
for (const excluded of EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE)if (lastTwoParts === excluded) return false;
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
function addEventListener(element, event, callback, options) {
|
|
139
|
+
const { capture = false, passive = true } = options ?? {};
|
|
140
|
+
element?.addEventListener(event, callback, {
|
|
141
|
+
capture,
|
|
142
|
+
passive
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function migrateConfigField(config, newField, oldField, defaultValue, loggerInstance) {
|
|
146
|
+
const hasNewField = newField in config && !(0, core_namespaceObject.isNullish)(config[newField]);
|
|
147
|
+
const hasOldField = oldField in config && !(0, core_namespaceObject.isNullish)(config[oldField]);
|
|
148
|
+
if (hasNewField) return config[newField];
|
|
149
|
+
if (hasOldField) {
|
|
150
|
+
if (loggerInstance) loggerInstance.warn(`Config field '${oldField}' is deprecated. Please use '${newField}' instead. The old field will be removed in a future major version.`);
|
|
151
|
+
return config[oldField];
|
|
152
|
+
}
|
|
153
|
+
return defaultValue;
|
|
154
|
+
}
|
|
155
|
+
const TOOLBAR_INTERNAL_INSTANCE_NAME = 'ph_toolbar_internal';
|
|
156
|
+
function isToolbarInstance(config) {
|
|
157
|
+
return config.name === TOOLBAR_INTERNAL_INSTANCE_NAME;
|
|
158
|
+
}
|
|
159
|
+
exports._copyAndTruncateStrings = __webpack_exports__._copyAndTruncateStrings;
|
|
160
|
+
exports.addEventListener = __webpack_exports__.addEventListener;
|
|
161
|
+
exports.each = __webpack_exports__.each;
|
|
162
|
+
exports.eachArray = __webpack_exports__.eachArray;
|
|
163
|
+
exports.entries = __webpack_exports__.entries;
|
|
164
|
+
exports.extend = __webpack_exports__.extend;
|
|
165
|
+
exports.find = __webpack_exports__.find;
|
|
166
|
+
exports.isCrossDomainCookie = __webpack_exports__.isCrossDomainCookie;
|
|
167
|
+
exports.isToolbarInstance = __webpack_exports__.isToolbarInstance;
|
|
168
|
+
exports.migrateConfigField = __webpack_exports__.migrateConfigField;
|
|
169
|
+
exports.safewrap = __webpack_exports__.safewrap;
|
|
170
|
+
exports.safewrapClass = __webpack_exports__.safewrapClass;
|
|
171
|
+
exports.stripEmptyProperties = __webpack_exports__.stripEmptyProperties;
|
|
172
|
+
exports.trySafe = __webpack_exports__.trySafe;
|
|
173
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
174
|
+
"_copyAndTruncateStrings",
|
|
175
|
+
"addEventListener",
|
|
176
|
+
"each",
|
|
177
|
+
"eachArray",
|
|
178
|
+
"entries",
|
|
179
|
+
"extend",
|
|
180
|
+
"find",
|
|
181
|
+
"isCrossDomainCookie",
|
|
182
|
+
"isToolbarInstance",
|
|
183
|
+
"migrateConfigField",
|
|
184
|
+
"safewrap",
|
|
185
|
+
"safewrapClass",
|
|
186
|
+
"stripEmptyProperties",
|
|
187
|
+
"trySafe"
|
|
188
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
189
|
+
Object.defineProperty(exports, '__esModule', {
|
|
190
|
+
value: true
|
|
191
|
+
});
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { hasOwnProperty as core_hasOwnProperty, isArray, isFormData, isNullish, isNumber, isString } from "@posthog/core";
|
|
2
|
+
import { logger } from "./logger.mjs";
|
|
3
|
+
function find(value, predicate) {
|
|
4
|
+
for(let i = 0; i < value.length; i++)if (predicate(value[i])) return value[i];
|
|
5
|
+
}
|
|
6
|
+
function eachArray(obj, iterator) {
|
|
7
|
+
if (isArray(obj)) obj.forEach(iterator);
|
|
8
|
+
}
|
|
9
|
+
function each(obj, iterator) {
|
|
10
|
+
if (isNullish(obj)) return;
|
|
11
|
+
if (isArray(obj)) return void obj.forEach(iterator);
|
|
12
|
+
if (isFormData(obj)) return void obj.forEach((val, key)=>iterator(val, key));
|
|
13
|
+
for(const key in obj)if (core_hasOwnProperty.call(obj, key)) iterator(obj[key], key);
|
|
14
|
+
}
|
|
15
|
+
const extend = function(obj, ...args) {
|
|
16
|
+
for (const source of args)for(const prop in source)if (void 0 !== source[prop]) obj[prop] = source[prop];
|
|
17
|
+
return obj;
|
|
18
|
+
};
|
|
19
|
+
function entries(obj) {
|
|
20
|
+
const ownProps = Object.keys(obj);
|
|
21
|
+
let i = ownProps.length;
|
|
22
|
+
const resArray = new Array(i);
|
|
23
|
+
while(i--)resArray[i] = [
|
|
24
|
+
ownProps[i],
|
|
25
|
+
obj[ownProps[i]]
|
|
26
|
+
];
|
|
27
|
+
return resArray;
|
|
28
|
+
}
|
|
29
|
+
const trySafe = function(fn) {
|
|
30
|
+
try {
|
|
31
|
+
return fn();
|
|
32
|
+
} catch {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const safewrap = function(f) {
|
|
37
|
+
return function(...args) {
|
|
38
|
+
try {
|
|
39
|
+
return f.apply(this, args);
|
|
40
|
+
} catch (e) {
|
|
41
|
+
logger.critical('Implementation error. Please turn on debug mode and open a ticket on https://app.posthog.com/home#panel=support%3Asupport%3A.');
|
|
42
|
+
logger.critical(e);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
const safewrapClass = function(klass, functions) {
|
|
47
|
+
for(let i = 0; i < functions.length; i++)klass.prototype[functions[i]] = safewrap(klass.prototype[functions[i]]);
|
|
48
|
+
};
|
|
49
|
+
const stripEmptyProperties = function(p) {
|
|
50
|
+
const ret = {};
|
|
51
|
+
each(p, function(v, k) {
|
|
52
|
+
if (isString(v) && v.length > 0 || isNumber(v)) ret[k] = v;
|
|
53
|
+
});
|
|
54
|
+
return ret;
|
|
55
|
+
};
|
|
56
|
+
function deepCircularCopy(value, customizer) {
|
|
57
|
+
const COPY_IN_PROGRESS_SET = new Set();
|
|
58
|
+
function internalDeepCircularCopy(value, key) {
|
|
59
|
+
if (value !== Object(value)) return customizer ? customizer(value, key) : value;
|
|
60
|
+
if (COPY_IN_PROGRESS_SET.has(value)) return;
|
|
61
|
+
COPY_IN_PROGRESS_SET.add(value);
|
|
62
|
+
let result;
|
|
63
|
+
if (isArray(value)) {
|
|
64
|
+
result = [];
|
|
65
|
+
eachArray(value, (it)=>{
|
|
66
|
+
result.push(internalDeepCircularCopy(it));
|
|
67
|
+
});
|
|
68
|
+
} else {
|
|
69
|
+
const copy = {};
|
|
70
|
+
each(value, (val, key)=>{
|
|
71
|
+
if (!COPY_IN_PROGRESS_SET.has(val)) copy[key] = internalDeepCircularCopy(val, key);
|
|
72
|
+
});
|
|
73
|
+
result = copy;
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
return internalDeepCircularCopy(value);
|
|
78
|
+
}
|
|
79
|
+
function _copyAndTruncateStrings(object, maxStringLength) {
|
|
80
|
+
return deepCircularCopy(object, (value)=>{
|
|
81
|
+
if (isString(value)) return value.slice(0, maxStringLength);
|
|
82
|
+
return value;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
const EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE = [
|
|
86
|
+
'herokuapp.com',
|
|
87
|
+
'vercel.app',
|
|
88
|
+
'netlify.app'
|
|
89
|
+
];
|
|
90
|
+
function isCrossDomainCookie(documentLocation) {
|
|
91
|
+
const hostname = documentLocation?.hostname;
|
|
92
|
+
if (!isString(hostname)) return false;
|
|
93
|
+
const lastTwoParts = hostname.split('.').slice(-2).join('.');
|
|
94
|
+
for (const excluded of EXCLUDED_FROM_CROSS_SUBDOMAIN_COOKIE)if (lastTwoParts === excluded) return false;
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
function addEventListener(element, event, callback, options) {
|
|
98
|
+
const { capture = false, passive = true } = options ?? {};
|
|
99
|
+
element?.addEventListener(event, callback, {
|
|
100
|
+
capture,
|
|
101
|
+
passive
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function migrateConfigField(config, newField, oldField, defaultValue, loggerInstance) {
|
|
105
|
+
const hasNewField = newField in config && !isNullish(config[newField]);
|
|
106
|
+
const hasOldField = oldField in config && !isNullish(config[oldField]);
|
|
107
|
+
if (hasNewField) return config[newField];
|
|
108
|
+
if (hasOldField) {
|
|
109
|
+
if (loggerInstance) loggerInstance.warn(`Config field '${oldField}' is deprecated. Please use '${newField}' instead. The old field will be removed in a future major version.`);
|
|
110
|
+
return config[oldField];
|
|
111
|
+
}
|
|
112
|
+
return defaultValue;
|
|
113
|
+
}
|
|
114
|
+
const TOOLBAR_INTERNAL_INSTANCE_NAME = 'ph_toolbar_internal';
|
|
115
|
+
function isToolbarInstance(config) {
|
|
116
|
+
return config.name === TOOLBAR_INTERNAL_INSTANCE_NAME;
|
|
117
|
+
}
|
|
118
|
+
export { _copyAndTruncateStrings, addEventListener, each, eachArray, entries, extend, find, isCrossDomainCookie, isToolbarInstance, migrateConfigField, safewrap, safewrapClass, stripEmptyProperties, trySafe };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
declare const win: (Window & typeof globalThis) | undefined;
|
|
2
|
+
export declare const navigator: Navigator | undefined;
|
|
3
|
+
export declare const document: Document | undefined;
|
|
4
|
+
export declare const location: Location | undefined;
|
|
5
|
+
export declare const fetch: typeof globalThis.fetch | undefined;
|
|
6
|
+
export declare const XMLHttpRequest: {
|
|
7
|
+
new (): XMLHttpRequest;
|
|
8
|
+
prototype: XMLHttpRequest;
|
|
9
|
+
readonly UNSENT: 0;
|
|
10
|
+
readonly OPENED: 1;
|
|
11
|
+
readonly HEADERS_RECEIVED: 2;
|
|
12
|
+
readonly LOADING: 3;
|
|
13
|
+
readonly DONE: 4;
|
|
14
|
+
} | undefined;
|
|
15
|
+
export declare const AbortController: {
|
|
16
|
+
new (): AbortController;
|
|
17
|
+
prototype: AbortController;
|
|
18
|
+
} | undefined;
|
|
19
|
+
export declare const CompressionStream: {
|
|
20
|
+
new (format: CompressionFormat): CompressionStream;
|
|
21
|
+
prototype: CompressionStream;
|
|
22
|
+
} | undefined;
|
|
23
|
+
export declare const userAgent: string | undefined;
|
|
24
|
+
export declare function isBrowserOnline(): boolean;
|
|
25
|
+
export { win as window };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
AbortController: ()=>AbortController,
|
|
28
|
+
CompressionStream: ()=>CompressionStream,
|
|
29
|
+
XMLHttpRequest: ()=>XMLHttpRequest,
|
|
30
|
+
document: ()=>document,
|
|
31
|
+
fetch: ()=>fetch,
|
|
32
|
+
isBrowserOnline: ()=>isBrowserOnline,
|
|
33
|
+
location: ()=>location,
|
|
34
|
+
navigator: ()=>navigator,
|
|
35
|
+
userAgent: ()=>userAgent,
|
|
36
|
+
window: ()=>win
|
|
37
|
+
});
|
|
38
|
+
const win = 'undefined' != typeof window ? window : void 0;
|
|
39
|
+
const global = 'undefined' != typeof globalThis ? globalThis : win;
|
|
40
|
+
const navigator = global?.navigator;
|
|
41
|
+
const document = global?.document;
|
|
42
|
+
const location = global?.location;
|
|
43
|
+
const fetch = global?.fetch;
|
|
44
|
+
const XMLHttpRequest = global?.XMLHttpRequest && 'withCredentials' in new global.XMLHttpRequest() ? global.XMLHttpRequest : void 0;
|
|
45
|
+
const AbortController = global?.AbortController;
|
|
46
|
+
const CompressionStream = global?.CompressionStream;
|
|
47
|
+
const userAgent = navigator?.userAgent;
|
|
48
|
+
function isBrowserOnline() {
|
|
49
|
+
return !!(win && false !== win.navigator.onLine);
|
|
50
|
+
}
|
|
51
|
+
exports.AbortController = __webpack_exports__.AbortController;
|
|
52
|
+
exports.CompressionStream = __webpack_exports__.CompressionStream;
|
|
53
|
+
exports.XMLHttpRequest = __webpack_exports__.XMLHttpRequest;
|
|
54
|
+
exports.document = __webpack_exports__.document;
|
|
55
|
+
exports.fetch = __webpack_exports__.fetch;
|
|
56
|
+
exports.isBrowserOnline = __webpack_exports__.isBrowserOnline;
|
|
57
|
+
exports.location = __webpack_exports__.location;
|
|
58
|
+
exports.navigator = __webpack_exports__.navigator;
|
|
59
|
+
exports.userAgent = __webpack_exports__.userAgent;
|
|
60
|
+
exports.window = __webpack_exports__.window;
|
|
61
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
62
|
+
"AbortController",
|
|
63
|
+
"CompressionStream",
|
|
64
|
+
"XMLHttpRequest",
|
|
65
|
+
"document",
|
|
66
|
+
"fetch",
|
|
67
|
+
"isBrowserOnline",
|
|
68
|
+
"location",
|
|
69
|
+
"navigator",
|
|
70
|
+
"userAgent",
|
|
71
|
+
"window"
|
|
72
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
73
|
+
Object.defineProperty(exports, '__esModule', {
|
|
74
|
+
value: true
|
|
75
|
+
});
|