@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.
92 lines • 3.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDefaultPageContext = exports.getDefaultBufferedPageContext = exports.createPageContext = exports.isBufferedPageContext = exports.createBufferedPageContext = exports.BufferedPageContextDiscriminant = void 0;
var analytics_core_1 = require("@segment/analytics-core");
exports.BufferedPageContextDiscriminant = 'bpc';
/**
* `BufferedPageContext` object builder
*/
var createBufferedPageContext = function (url, canonicalUrl, search, path, title, referrer) { return ({
__t: exports.BufferedPageContextDiscriminant,
c: canonicalUrl,
p: path,
u: url,
s: search,
t: title,
r: referrer,
}); };
exports.createBufferedPageContext = createBufferedPageContext;
// my clever/dubious way of making sure this type guard does not get out sync with the type definition
var BUFFERED_PAGE_CONTEXT_KEYS = Object.keys((0, exports.createBufferedPageContext)('', '', '', '', '', ''));
function isBufferedPageContext(bufferedPageCtx) {
if (!(0, analytics_core_1.isPlainObject)(bufferedPageCtx))
return false;
if (bufferedPageCtx.__t !== exports.BufferedPageContextDiscriminant)
return false;
// ensure obj has all the keys we expect, and none we don't.
for (var k in bufferedPageCtx) {
if (!BUFFERED_PAGE_CONTEXT_KEYS.includes(k)) {
return false;
}
}
return true;
}
exports.isBufferedPageContext = isBufferedPageContext;
// Legacy logic: we are we appending search parameters to the canonical URL -- I guess the canonical URL is "not canonical enough" (lol)
var createCanonicalURL = function (canonicalUrl, searchParams) {
return canonicalUrl.indexOf('?') > -1
? canonicalUrl
: canonicalUrl + searchParams;
};
/**
* Strips hash from URL.
* http://www.segment.local#test -> http://www.segment.local
*/
var removeHash = function (href) {
var hashIdx = href.indexOf('#');
return hashIdx === -1 ? href : href.slice(0, hashIdx);
};
var parseCanonicalPath = function (canonicalUrl) {
try {
return new URL(canonicalUrl).pathname;
}
catch (_e) {
// this is classic behavior -- we assume that if the canonical URL is invalid, it's a raw path.
return canonicalUrl[0] === '/' ? canonicalUrl : '/' + canonicalUrl;
}
};
/**
* Create a `PageContext` from a `BufferedPageContext`.
* `BufferedPageContext` keys are minified to save bytes in the snippet.
*/
var createPageContext = function (_a) {
var canonicalUrl = _a.c, pathname = _a.p, search = _a.s, url = _a.u, referrer = _a.r, title = _a.t;
var newPath = canonicalUrl ? parseCanonicalPath(canonicalUrl) : pathname;
var newUrl = canonicalUrl
? createCanonicalURL(canonicalUrl, search)
: removeHash(url);
return {
path: newPath,
referrer: referrer,
search: search,
title: title,
url: newUrl,
};
};
exports.createPageContext = createPageContext;
/**
* Get page properties from the browser window/document.
*/
var getDefaultBufferedPageContext = function () {
var c = document.querySelector("link[rel='canonical']");
return (0, exports.createBufferedPageContext)(location.href, (c && c.getAttribute('href')) || undefined, location.search, location.pathname, document.title, document.referrer);
};
exports.getDefaultBufferedPageContext = getDefaultBufferedPageContext;
/**
* Get page properties from the browser window/document.
*/
var getDefaultPageContext = function () {
return (0, exports.createPageContext)((0, exports.getDefaultBufferedPageContext)());
};
exports.getDefaultPageContext = getDefaultPageContext;
//# sourceMappingURL=get-page-context.js.map