@cloudcare/browser-core 3.2.13 → 3.2.16
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/cjs/dataMap.js +1 -1
- package/cjs/dataMap.js.map +1 -1
- package/cjs/helper/lifeCycle.js +1 -0
- package/cjs/helper/lifeCycle.js.map +1 -1
- package/cjs/helper/limitModification.js +39 -38
- package/cjs/helper/limitModification.js.map +1 -1
- package/cjs/helper/serialisation/const.js +18 -0
- package/cjs/helper/serialisation/const.js.map +1 -0
- package/cjs/helper/serialisation/contextManager.js +45 -50
- package/cjs/helper/serialisation/contextManager.js.map +1 -1
- package/cjs/helper/serialisation/customerDataTracker.js +127 -0
- package/cjs/helper/serialisation/customerDataTracker.js.map +1 -0
- package/cjs/helper/tools.js +2 -116
- package/cjs/helper/tools.js.map +1 -1
- package/cjs/index.js +16 -4
- package/cjs/index.js.map +1 -1
- package/esm/dataMap.js +1 -1
- package/esm/dataMap.js.map +1 -1
- package/esm/helper/lifeCycle.js +1 -0
- package/esm/helper/lifeCycle.js.map +1 -1
- package/esm/helper/limitModification.js +40 -40
- package/esm/helper/limitModification.js.map +1 -1
- package/esm/helper/serialisation/const.js +11 -0
- package/esm/helper/serialisation/const.js.map +1 -0
- package/esm/helper/serialisation/contextManager.js +46 -49
- package/esm/helper/serialisation/contextManager.js.map +1 -1
- package/esm/helper/serialisation/customerDataTracker.js +116 -0
- package/esm/helper/serialisation/customerDataTracker.js.map +1 -0
- package/esm/helper/tools.js +0 -108
- package/esm/helper/tools.js.map +1 -1
- package/esm/index.js +2 -1
- package/esm/index.js.map +1 -1
- package/package.json +2 -2
- package/src/dataMap.js +1 -1
- package/src/helper/lifeCycle.js +1 -0
- package/src/helper/limitModification.js +43 -48
- package/src/helper/serialisation/const.js +10 -0
- package/src/helper/serialisation/contextManager.js +41 -64
- package/src/helper/serialisation/customerDataTracker.js +139 -0
- package/src/helper/tools.js +2 -138
- package/src/index.js +2 -1
- package/cjs/helper/serialisation/heavyCustomerDataWarning.js +0 -29
- package/cjs/helper/serialisation/heavyCustomerDataWarning.js.map +0 -1
- package/esm/helper/serialisation/heavyCustomerDataWarning.js +0 -21
- package/esm/helper/serialisation/heavyCustomerDataWarning.js.map +0 -1
- package/src/helper/serialisation/heavyCustomerDataWarning.js +0 -28
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.CustomerDataCompressionStatus = exports.CUSTOMER_DATA_BYTES_LIMIT = exports.CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT = exports.BYTES_COMPUTATION_THROTTLING_DELAY = void 0;
|
|
7
|
+
exports.createCustomerDataTracker = createCustomerDataTracker;
|
|
8
|
+
exports.createCustomerDataTrackerManager = createCustomerDataTrackerManager;
|
|
9
|
+
var _byteUtils = require("../byteUtils");
|
|
10
|
+
var _tools = require("../tools");
|
|
11
|
+
var _jsonStringify = require("./jsonStringify");
|
|
12
|
+
var _display = require("../display");
|
|
13
|
+
// RUM and logs batch bytes limit is 16KB
|
|
14
|
+
// ensure that we leave room for other event attributes and maintain a decent amount of event per batch
|
|
15
|
+
// (3KB (customer data) + 1KB (other attributes)) * 4 (events per batch) = 16KB
|
|
16
|
+
var CUSTOMER_DATA_BYTES_LIMIT = 3 * _byteUtils.ONE_KIBI_BYTE;
|
|
17
|
+
|
|
18
|
+
// We observed that the compression ratio is around 8 in general, but we also want to keep a margin
|
|
19
|
+
// because some data might not be compressed (ex: last view update on page exit). We chose 16KiB
|
|
20
|
+
// because it is also the limit of the 'batchBytesCount' that we use for RUM and Logs data, but this
|
|
21
|
+
// is a bit arbitrary.
|
|
22
|
+
exports.CUSTOMER_DATA_BYTES_LIMIT = CUSTOMER_DATA_BYTES_LIMIT;
|
|
23
|
+
var CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT = 16 * _byteUtils.ONE_KIBI_BYTE;
|
|
24
|
+
exports.CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT = CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT;
|
|
25
|
+
var BYTES_COMPUTATION_THROTTLING_DELAY = 200;
|
|
26
|
+
exports.BYTES_COMPUTATION_THROTTLING_DELAY = BYTES_COMPUTATION_THROTTLING_DELAY;
|
|
27
|
+
var CustomerDataCompressionStatus = {
|
|
28
|
+
Unknown: 0,
|
|
29
|
+
Enabled: 1,
|
|
30
|
+
Disabled: 2
|
|
31
|
+
};
|
|
32
|
+
exports.CustomerDataCompressionStatus = CustomerDataCompressionStatus;
|
|
33
|
+
function createCustomerDataTrackerManager() {
|
|
34
|
+
var compressionStatus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : CustomerDataCompressionStatus.Disabled;
|
|
35
|
+
var customerDataTrackers = new Map();
|
|
36
|
+
var alreadyWarned = false;
|
|
37
|
+
function checkCustomerDataLimit() {
|
|
38
|
+
var initialBytesCount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
39
|
+
if (alreadyWarned || compressionStatus === CustomerDataCompressionStatus.Unknown) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
var bytesCountLimit = compressionStatus === CustomerDataCompressionStatus.Disabled ? CUSTOMER_DATA_BYTES_LIMIT : CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT;
|
|
43
|
+
var bytesCount = initialBytesCount;
|
|
44
|
+
customerDataTrackers.forEach(function (tracker) {
|
|
45
|
+
bytesCount += tracker.getBytesCount();
|
|
46
|
+
});
|
|
47
|
+
if (bytesCount > bytesCountLimit) {
|
|
48
|
+
displayCustomerDataLimitReachedWarning(bytesCountLimit);
|
|
49
|
+
alreadyWarned = true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
/**
|
|
54
|
+
* Creates a detached tracker. The manager will not store a reference to that tracker, and the
|
|
55
|
+
* bytes count will be counted independently from other detached trackers.
|
|
56
|
+
*
|
|
57
|
+
* This is particularly useful when we don't know when the tracker will be unused, so we don't
|
|
58
|
+
* leak memory (ex: when used in Logger instances).
|
|
59
|
+
*/
|
|
60
|
+
createDetachedTracker: function createDetachedTracker() {
|
|
61
|
+
var tracker = createCustomerDataTracker(function () {
|
|
62
|
+
return checkCustomerDataLimit(tracker.getBytesCount());
|
|
63
|
+
});
|
|
64
|
+
return tracker;
|
|
65
|
+
},
|
|
66
|
+
/**
|
|
67
|
+
* Creates a tracker if it doesn't exist, and returns it.
|
|
68
|
+
*/
|
|
69
|
+
getOrCreateTracker: function getOrCreateTracker(type) {
|
|
70
|
+
if (!customerDataTrackers.has(type)) {
|
|
71
|
+
customerDataTrackers.set(type, createCustomerDataTracker(checkCustomerDataLimit));
|
|
72
|
+
}
|
|
73
|
+
return customerDataTrackers.get(type);
|
|
74
|
+
},
|
|
75
|
+
setCompressionStatus: function setCompressionStatus(newCompressionStatus) {
|
|
76
|
+
if (compressionStatus === CustomerDataCompressionStatus.Unknown) {
|
|
77
|
+
compressionStatus = newCompressionStatus;
|
|
78
|
+
checkCustomerDataLimit();
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
getCompressionStatus: function getCompressionStatus() {
|
|
82
|
+
return compressionStatus;
|
|
83
|
+
},
|
|
84
|
+
stop: function stop() {
|
|
85
|
+
customerDataTrackers.forEach(function (tracker) {
|
|
86
|
+
return tracker.stop();
|
|
87
|
+
});
|
|
88
|
+
customerDataTrackers.clear();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function createCustomerDataTracker(checkCustomerDataLimit) {
|
|
93
|
+
var bytesCountCache = 0;
|
|
94
|
+
|
|
95
|
+
// Throttle the bytes computation to minimize the impact on performance.
|
|
96
|
+
// Especially useful if the user call context APIs synchronously multiple times in a row
|
|
97
|
+
var _throttle = (0, _tools.throttle)(function (context) {
|
|
98
|
+
bytesCountCache = (0, _byteUtils.computeBytesCount)((0, _jsonStringify.jsonStringify)(context));
|
|
99
|
+
checkCustomerDataLimit();
|
|
100
|
+
}, BYTES_COMPUTATION_THROTTLING_DELAY),
|
|
101
|
+
computeBytesCountThrottled = _throttle.throttled,
|
|
102
|
+
cancelComputeBytesCount = _throttle.cancel;
|
|
103
|
+
var resetBytesCount = function resetBytesCount() {
|
|
104
|
+
cancelComputeBytesCount();
|
|
105
|
+
bytesCountCache = 0;
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
updateCustomerData: function updateCustomerData(context) {
|
|
109
|
+
if ((0, _tools.isEmptyObject)(context)) {
|
|
110
|
+
resetBytesCount();
|
|
111
|
+
} else {
|
|
112
|
+
computeBytesCountThrottled(context);
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
resetCustomerData: resetBytesCount,
|
|
116
|
+
getBytesCount: function getBytesCount() {
|
|
117
|
+
return bytesCountCache;
|
|
118
|
+
},
|
|
119
|
+
stop: function stop() {
|
|
120
|
+
cancelComputeBytesCount();
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function displayCustomerDataLimitReachedWarning(bytesCountLimit) {
|
|
125
|
+
_display.display.warn("Customer data exceeds the recommended ".concat(bytesCountLimit / _byteUtils.ONE_KIBI_BYTE, "KiB threshold."));
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=customerDataTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customerDataTracker.js","names":["_byteUtils","require","_tools","_jsonStringify","_display","CUSTOMER_DATA_BYTES_LIMIT","ONE_KIBI_BYTE","exports","CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT","BYTES_COMPUTATION_THROTTLING_DELAY","CustomerDataCompressionStatus","Unknown","Enabled","Disabled","createCustomerDataTrackerManager","compressionStatus","arguments","length","undefined","customerDataTrackers","Map","alreadyWarned","checkCustomerDataLimit","initialBytesCount","bytesCountLimit","bytesCount","forEach","tracker","getBytesCount","displayCustomerDataLimitReachedWarning","createDetachedTracker","createCustomerDataTracker","getOrCreateTracker","type","has","set","get","setCompressionStatus","newCompressionStatus","getCompressionStatus","stop","clear","bytesCountCache","_throttle","throttle","context","computeBytesCount","jsonStringify","computeBytesCountThrottled","throttled","cancelComputeBytesCount","cancel","resetBytesCount","updateCustomerData","isEmptyObject","resetCustomerData","display","warn","concat"],"sources":["../../../src/helper/serialisation/customerDataTracker.js"],"sourcesContent":["import { ONE_KIBI_BYTE, computeBytesCount } from '../byteUtils'\nimport { throttle, isEmptyObject } from '../tools'\nimport { jsonStringify } from './jsonStringify'\nimport { display } from '../display'\n\n// RUM and logs batch bytes limit is 16KB\n// ensure that we leave room for other event attributes and maintain a decent amount of event per batch\n// (3KB (customer data) + 1KB (other attributes)) * 4 (events per batch) = 16KB\nexport const CUSTOMER_DATA_BYTES_LIMIT = 3 * ONE_KIBI_BYTE\n\n// We observed that the compression ratio is around 8 in general, but we also want to keep a margin\n// because some data might not be compressed (ex: last view update on page exit). We chose 16KiB\n// because it is also the limit of the 'batchBytesCount' that we use for RUM and Logs data, but this\n// is a bit arbitrary.\nexport const CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT = 16 * ONE_KIBI_BYTE\n\nexport const BYTES_COMPUTATION_THROTTLING_DELAY = 200\n\nexport const CustomerDataCompressionStatus = {\n Unknown: 0,\n Enabled: 1,\n Disabled: 2\n}\n\nexport function createCustomerDataTrackerManager(\n compressionStatus = CustomerDataCompressionStatus.Disabled\n) {\n const customerDataTrackers = new Map()\n\n let alreadyWarned = false\n function checkCustomerDataLimit(initialBytesCount = 0) {\n if (\n alreadyWarned ||\n compressionStatus === CustomerDataCompressionStatus.Unknown\n ) {\n return\n }\n\n const bytesCountLimit =\n compressionStatus === CustomerDataCompressionStatus.Disabled\n ? CUSTOMER_DATA_BYTES_LIMIT\n : CUSTOMER_COMPRESSED_DATA_BYTES_LIMIT\n\n let bytesCount = initialBytesCount\n customerDataTrackers.forEach((tracker) => {\n bytesCount += tracker.getBytesCount()\n })\n\n if (bytesCount > bytesCountLimit) {\n displayCustomerDataLimitReachedWarning(bytesCountLimit)\n alreadyWarned = true\n }\n }\n\n return {\n /**\n * Creates a detached tracker. The manager will not store a reference to that tracker, and the\n * bytes count will be counted independently from other detached trackers.\n *\n * This is particularly useful when we don't know when the tracker will be unused, so we don't\n * leak memory (ex: when used in Logger instances).\n */\n createDetachedTracker: () => {\n const tracker = createCustomerDataTracker(() =>\n checkCustomerDataLimit(tracker.getBytesCount())\n )\n return tracker\n },\n\n /**\n * Creates a tracker if it doesn't exist, and returns it.\n */\n getOrCreateTracker: (type) => {\n if (!customerDataTrackers.has(type)) {\n customerDataTrackers.set(\n type,\n createCustomerDataTracker(checkCustomerDataLimit)\n )\n }\n return customerDataTrackers.get(type)\n },\n\n setCompressionStatus: (newCompressionStatus) => {\n if (compressionStatus === CustomerDataCompressionStatus.Unknown) {\n compressionStatus = newCompressionStatus\n checkCustomerDataLimit()\n }\n },\n\n getCompressionStatus: () => compressionStatus,\n\n stop: () => {\n customerDataTrackers.forEach((tracker) => tracker.stop())\n customerDataTrackers.clear()\n }\n }\n}\n\nexport function createCustomerDataTracker(checkCustomerDataLimit) {\n let bytesCountCache = 0\n\n // Throttle the bytes computation to minimize the impact on performance.\n // Especially useful if the user call context APIs synchronously multiple times in a row\n const {\n throttled: computeBytesCountThrottled,\n cancel: cancelComputeBytesCount\n } = throttle((context) => {\n bytesCountCache = computeBytesCount(jsonStringify(context))\n checkCustomerDataLimit()\n }, BYTES_COMPUTATION_THROTTLING_DELAY)\n\n const resetBytesCount = () => {\n cancelComputeBytesCount()\n bytesCountCache = 0\n }\n\n return {\n updateCustomerData: (context) => {\n if (isEmptyObject(context)) {\n resetBytesCount()\n } else {\n computeBytesCountThrottled(context)\n }\n },\n resetCustomerData: resetBytesCount,\n getBytesCount: () => bytesCountCache,\n stop: () => {\n cancelComputeBytesCount()\n }\n }\n}\n\nfunction displayCustomerDataLimitReachedWarning(bytesCountLimit) {\n display.warn(\n `Customer data exceeds the recommended ${\n bytesCountLimit / ONE_KIBI_BYTE\n }KiB threshold.`\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/cjs/helper/tools.js
CHANGED
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.ONE_YEAR = exports.ONE_SECOND = exports.ONE_MINUTE = exports.ONE_HOUR = exports.ONE_DAY = exports.Browser = void 0;
|
|
7
7
|
exports.UUID = UUID;
|
|
8
|
-
exports._URL = void 0;
|
|
9
8
|
exports.addDuration = addDuration;
|
|
10
9
|
exports.ajax = void 0;
|
|
11
10
|
exports.arrayFrom = arrayFrom;
|
|
@@ -13,10 +12,9 @@ exports.assign = assign;
|
|
|
13
12
|
exports.base64Encode = exports.autoExeQueue = void 0;
|
|
14
13
|
exports.clocksNow = clocksNow;
|
|
15
14
|
exports.clocksOrigin = clocksOrigin;
|
|
16
|
-
exports.cssEscape = exports.coverExtend =
|
|
15
|
+
exports.cssEscape = exports.coverExtend = void 0;
|
|
17
16
|
exports.currentDrift = currentDrift;
|
|
18
17
|
exports.dateNow = dateNow;
|
|
19
|
-
exports.decodeURIComponent = void 0;
|
|
20
18
|
exports.deepClone = deepClone;
|
|
21
19
|
exports.deepSnakeCase = deepSnakeCase;
|
|
22
20
|
exports.detectBrowser = detectBrowser;
|
|
@@ -37,7 +35,7 @@ exports.getLinkElementOrigin = getLinkElementOrigin;
|
|
|
37
35
|
exports.getLocationOrigin = getLocationOrigin;
|
|
38
36
|
exports.getNavigationStart = getNavigationStart;
|
|
39
37
|
exports.getPathFromHash = getPathFromHash;
|
|
40
|
-
exports.getReferrer = exports.getQueryParamsFromUrl =
|
|
38
|
+
exports.getReferrer = exports.getQueryParamsFromUrl = void 0;
|
|
41
39
|
exports.getRelativeTime = getRelativeTime;
|
|
42
40
|
exports.getScreenOrientation = void 0;
|
|
43
41
|
exports.getStatusGroup = getStatusGroup;
|
|
@@ -443,16 +441,6 @@ var safeJSONParse = function safeJSONParse(str) {
|
|
|
443
441
|
return val;
|
|
444
442
|
};
|
|
445
443
|
exports.safeJSONParse = safeJSONParse;
|
|
446
|
-
var decodeURIComponent = function decodeURIComponent(val) {
|
|
447
|
-
var result = val;
|
|
448
|
-
try {
|
|
449
|
-
result = decodeURIComponent(val);
|
|
450
|
-
} catch (error) {
|
|
451
|
-
result = val;
|
|
452
|
-
}
|
|
453
|
-
return result;
|
|
454
|
-
};
|
|
455
|
-
exports.decodeURIComponent = decodeURIComponent;
|
|
456
444
|
var encodeDates = function encodeDates(obj) {
|
|
457
445
|
each(obj, function (v, k) {
|
|
458
446
|
if (isDate(v)) {
|
|
@@ -713,19 +701,6 @@ function replaceNumberCharByPath(path) {
|
|
|
713
701
|
}
|
|
714
702
|
return pathGroup || '/';
|
|
715
703
|
}
|
|
716
|
-
var getQueryParam = function getQueryParam(url, param) {
|
|
717
|
-
param = param.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
|
|
718
|
-
url = decodeURIComponent(url);
|
|
719
|
-
var regexS = '[\\?&]' + param + '=([^&#]*)',
|
|
720
|
-
regex = new RegExp(regexS),
|
|
721
|
-
results = regex.exec(url);
|
|
722
|
-
if (results === null || results && typeof results[1] !== 'string' && results[1].length) {
|
|
723
|
-
return '';
|
|
724
|
-
} else {
|
|
725
|
-
return decodeURIComponent(results[1]);
|
|
726
|
-
}
|
|
727
|
-
};
|
|
728
|
-
exports.getQueryParam = getQueryParam;
|
|
729
704
|
var urlParse = function urlParse(para) {
|
|
730
705
|
var URLParser = function URLParser(a) {
|
|
731
706
|
this._fields = {
|
|
@@ -819,45 +794,6 @@ function elementMatches(element, selector) {
|
|
|
819
794
|
}
|
|
820
795
|
return false;
|
|
821
796
|
}
|
|
822
|
-
var cookie = {
|
|
823
|
-
get: function get(name) {
|
|
824
|
-
var nameEQ = name + '=';
|
|
825
|
-
var ca = document.cookie.split(';');
|
|
826
|
-
for (var i = 0; i < ca.length; i++) {
|
|
827
|
-
var c = ca[i];
|
|
828
|
-
while (c.charAt(0) == ' ') {
|
|
829
|
-
c = c.substring(1, c.length);
|
|
830
|
-
}
|
|
831
|
-
if (c.indexOf(nameEQ) == 0) {
|
|
832
|
-
return decodeURIComponent(c.substring(nameEQ.length, c.length));
|
|
833
|
-
}
|
|
834
|
-
}
|
|
835
|
-
return null;
|
|
836
|
-
},
|
|
837
|
-
set: function set(name, value, days, is_secure) {
|
|
838
|
-
var cdomain = '',
|
|
839
|
-
expires = '',
|
|
840
|
-
secure = '';
|
|
841
|
-
days = days == null ? 73000 : days;
|
|
842
|
-
if (days !== 0) {
|
|
843
|
-
var date = new Date();
|
|
844
|
-
if (String(days).slice(-1) === 's') {
|
|
845
|
-
date.setTime(date.getTime() + Number(String(days).slice(0, -1)) * 1000);
|
|
846
|
-
} else {
|
|
847
|
-
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
|
848
|
-
}
|
|
849
|
-
expires = '; expires=' + date.toGMTString();
|
|
850
|
-
}
|
|
851
|
-
if (is_secure) {
|
|
852
|
-
secure = '; secure';
|
|
853
|
-
}
|
|
854
|
-
document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/' + cdomain + secure;
|
|
855
|
-
},
|
|
856
|
-
remove: function remove(name) {
|
|
857
|
-
cookie.set(name, '', -1);
|
|
858
|
-
}
|
|
859
|
-
};
|
|
860
|
-
exports.cookie = cookie;
|
|
861
797
|
var localStorage = {
|
|
862
798
|
get: function get(name) {
|
|
863
799
|
return window.localStorage.getItem(name);
|
|
@@ -1195,56 +1131,6 @@ function mergeInto(destination, source, circularReferenceChecker) {
|
|
|
1195
1131
|
function deepClone(value) {
|
|
1196
1132
|
return mergeInto(undefined, value);
|
|
1197
1133
|
}
|
|
1198
|
-
var _URL = function _URL(url) {
|
|
1199
|
-
var result = {};
|
|
1200
|
-
var basicProps = ['hash', 'host', 'hostname', 'href', 'origin', 'password', 'pathname', 'port', 'protocol', 'search', 'username'];
|
|
1201
|
-
var isURLAPIWorking = function isURLAPIWorking() {
|
|
1202
|
-
var url;
|
|
1203
|
-
try {
|
|
1204
|
-
url = new URL('http://modernizr.com/');
|
|
1205
|
-
return url.href === 'http://modernizr.com/';
|
|
1206
|
-
} catch (e) {
|
|
1207
|
-
return false;
|
|
1208
|
-
}
|
|
1209
|
-
};
|
|
1210
|
-
if (typeof window.URL === 'function' && isURLAPIWorking()) {
|
|
1211
|
-
result = new URL(url);
|
|
1212
|
-
if (!result.searchParams) {
|
|
1213
|
-
result.searchParams = function () {
|
|
1214
|
-
var params = getURLSearchParams(result.search);
|
|
1215
|
-
return {
|
|
1216
|
-
get: function get(searchParam) {
|
|
1217
|
-
return params[searchParam];
|
|
1218
|
-
}
|
|
1219
|
-
};
|
|
1220
|
-
}();
|
|
1221
|
-
}
|
|
1222
|
-
} else {
|
|
1223
|
-
var _regex = /^https?:\/\/.+/;
|
|
1224
|
-
if (_regex.test(url) === false) {
|
|
1225
|
-
throw 'Invalid URL';
|
|
1226
|
-
}
|
|
1227
|
-
var link = document.createElement('a');
|
|
1228
|
-
link.href = url;
|
|
1229
|
-
for (var i = basicProps.length - 1; i >= 0; i--) {
|
|
1230
|
-
var prop = basicProps[i];
|
|
1231
|
-
result[prop] = link[prop];
|
|
1232
|
-
}
|
|
1233
|
-
if (result.hostname && typeof result.pathname === 'string' && result.pathname.indexOf('/') !== 0) {
|
|
1234
|
-
result.pathname = '/' + result.pathname;
|
|
1235
|
-
}
|
|
1236
|
-
result.searchParams = function () {
|
|
1237
|
-
var params = getURLSearchParams(result.search);
|
|
1238
|
-
return {
|
|
1239
|
-
get: function get(searchParam) {
|
|
1240
|
-
return params[searchParam];
|
|
1241
|
-
}
|
|
1242
|
-
};
|
|
1243
|
-
}();
|
|
1244
|
-
}
|
|
1245
|
-
return result;
|
|
1246
|
-
};
|
|
1247
|
-
exports._URL = _URL;
|
|
1248
1134
|
var getCurrentDomain = function getCurrentDomain(url) {
|
|
1249
1135
|
var cookieTopLevelDomain = getCookieTopLevelDomain();
|
|
1250
1136
|
if (url === '') {
|