@segment/analytics-next
Version:
Analytics Next (aka Analytics 2.0) is the latest version of Segment’s JavaScript SDK - enabling you to send your data to any tool without having to learn, test, or use a new API every time.
98 lines • 3.7 kB
JavaScript
var _a;
import { __awaiter, __generator, __spreadArray } from "tslib";
/* eslint-disable @typescript-eslint/no-floating-promises */
import { getCDN, setGlobalCDNUrl } from '../lib/parse-cdn';
import { setVersionType } from '../lib/version-type';
if (process.env.IS_WEBPACK_BUILD) {
if (process.env.ASSET_PATH) {
// @ts-ignore
__webpack_public_path__ = process.env.ASSET_PATH;
}
else {
var cdn = getCDN();
setGlobalCDNUrl(cdn);
// @ts-ignore
__webpack_public_path__ = cdn
? cdn + '/analytics-next/bundles/'
: 'https://cdn.segment.com/analytics-next/bundles/';
}
}
setVersionType('web');
import { install } from './standalone-analytics';
import '../lib/csp-detection';
import { shouldPolyfill } from '../lib/browser-polyfill';
import { RemoteMetrics } from '../core/stats/remote-metrics';
import { embeddedWriteKey } from '../lib/embedded-write-key';
import { loadAjsClassicFallback, isAnalyticsCSPError, } from '../lib/csp-detection';
import { setGlobalAnalyticsKey } from '../lib/global-analytics-helper';
var ajsIdentifiedCSP = false;
var sendErrorMetrics = function (tags) {
// this should not be instantied at the root, or it will break ie11.
var metrics = new RemoteMetrics();
metrics.increment('analytics_js.invoke.error', __spreadArray(__spreadArray([], tags, true), [
"wk:".concat(embeddedWriteKey()),
], false));
};
function onError(err) {
console.error('[analytics.js]', 'Failed to load Analytics.js', err);
sendErrorMetrics(__spreadArray([
'type:initialization'
], (err instanceof Error
? ["message:".concat(err === null || err === void 0 ? void 0 : err.message), "name:".concat(err === null || err === void 0 ? void 0 : err.name)]
: []), true));
}
document.addEventListener('securitypolicyviolation', function (e) {
if (ajsIdentifiedCSP || !isAnalyticsCSPError(e)) {
return;
}
ajsIdentifiedCSP = true;
sendErrorMetrics(['type:csp']);
loadAjsClassicFallback().catch(console.error);
});
/**
* Attempts to run a promise and catch both sync and async errors.
**/
function attempt(promise) {
return __awaiter(this, void 0, void 0, function () {
var result, err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, promise()];
case 1:
result = _a.sent();
return [2 /*return*/, result];
case 2:
err_1 = _a.sent();
onError(err_1);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
});
}
var globalAnalyticsKey = (_a = document.querySelector('script[data-global-segment-analytics-key]')) === null || _a === void 0 ? void 0 : _a.dataset.globalSegmentAnalyticsKey;
if (globalAnalyticsKey) {
setGlobalAnalyticsKey(globalAnalyticsKey);
}
if (shouldPolyfill()) {
// load polyfills in order to get AJS to work with old browsers
var script_1 = document.createElement('script');
script_1.setAttribute('src', 'https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.7.0/polyfill.min.js');
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
return document.body.appendChild(script_1);
});
}
else {
document.body.appendChild(script_1);
}
script_1.onload = function () {
attempt(install);
};
}
else {
attempt(install);
}
//# sourceMappingURL=standalone.js.map