@cloudcare/browser-core 1.0.18 → 1.0.21
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/configuration.js +20 -2
- package/cjs/cookie.js +3 -3
- package/cjs/dataMap.js +1 -0
- package/cjs/errorCollection.js +1 -1
- package/cjs/fetchProxy.js +1 -1
- package/cjs/helper/enums.js +1 -1
- package/cjs/helper/errorTools.js +3 -3
- package/cjs/helper/mobileUtil.js +1 -1
- package/cjs/helper/tools.js +52 -31
- package/cjs/helper/urlPolyfill.js +5 -5
- package/cjs/init.js +4 -4
- package/cjs/sessionManagement.js +2 -2
- package/cjs/tracekit/computeStackTrace.js +1 -1
- package/cjs/tracekit/report.js +1 -1
- package/cjs/transport.js +1 -1
- package/cjs/xhrProxy.js +1 -1
- package/esm/configuration.js +17 -1
- package/esm/dataMap.js +1 -0
- package/esm/helper/tools.js +1 -1
- package/package.json +2 -2
- package/src/configuration.js +13 -1
- package/src/dataMap.js +1 -0
- package/src/helper/tools.js +1 -1
- package/src/transport.js +1 -0
package/cjs/configuration.js
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.DEFAULT_CONFIGURATION = void 0;
|
|
6
7
|
exports.buildCookieOptions = buildCookieOptions;
|
|
7
8
|
exports.commonInit = commonInit;
|
|
8
9
|
exports.isIntakeRequest = isIntakeRequest;
|
|
9
|
-
exports.DEFAULT_CONFIGURATION = void 0;
|
|
10
10
|
|
|
11
11
|
var _tools = require("./helper/tools");
|
|
12
12
|
|
|
@@ -151,5 +151,23 @@ function mustUseSecureCookie(userConfiguration) {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
function isIntakeRequest(url, configuration) {
|
|
154
|
-
return
|
|
154
|
+
// return haveSameOrigin(url, configuration.datakitUrl)
|
|
155
|
+
var notTakeRequest = [configuration.datakitUrl];
|
|
156
|
+
|
|
157
|
+
if (configuration.logsEndpoint) {
|
|
158
|
+
notTakeRequest.push(configuration.logsEndpoint);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
var isIntake = false;
|
|
162
|
+
|
|
163
|
+
for (var _i = 0, _notTakeRequest = notTakeRequest; _i < _notTakeRequest.length; _i++) {
|
|
164
|
+
var _url = _notTakeRequest[_i];
|
|
165
|
+
|
|
166
|
+
if (url.indexOf(_url) === 0) {
|
|
167
|
+
isIntake = true;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return isIntake;
|
|
155
173
|
}
|
package/cjs/cookie.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.COOKIE_ACCESS_DELAY = void 0;
|
|
7
|
+
exports.areCookiesAuthorized = areCookiesAuthorized;
|
|
6
8
|
exports.cacheCookieAccess = cacheCookieAccess;
|
|
7
|
-
exports.setCookie = setCookie;
|
|
8
9
|
exports.getCookie = getCookie;
|
|
9
|
-
exports.areCookiesAuthorized = areCookiesAuthorized;
|
|
10
10
|
exports.getCurrentSite = getCurrentSite;
|
|
11
|
-
exports.
|
|
11
|
+
exports.setCookie = setCookie;
|
|
12
12
|
|
|
13
13
|
var _tools = require("./helper/tools");
|
|
14
14
|
|
package/cjs/dataMap.js
CHANGED
package/cjs/errorCollection.js
CHANGED
|
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.startAutomaticErrorCollection = startAutomaticErrorCollection;
|
|
7
7
|
exports.startConsoleTracking = startConsoleTracking;
|
|
8
|
-
exports.stopConsoleTracking = stopConsoleTracking;
|
|
9
8
|
exports.startRuntimeErrorTracking = startRuntimeErrorTracking;
|
|
9
|
+
exports.stopConsoleTracking = stopConsoleTracking;
|
|
10
10
|
exports.stopRuntimeErrorTracking = stopRuntimeErrorTracking;
|
|
11
11
|
exports.trackNetworkError = trackNetworkError;
|
|
12
12
|
|
package/cjs/fetchProxy.js
CHANGED
package/cjs/helper/enums.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.TraceType = exports.RumEventType = exports.ResourceType = exports.RequestType = exports.ErrorHandling = exports.DOM_EVENT = exports.ActionType = void 0;
|
|
7
7
|
var DOM_EVENT = {
|
|
8
8
|
BEFORE_UNLOAD: 'beforeunload',
|
|
9
9
|
CLICK: 'click',
|
package/cjs/helper/errorTools.js
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.ErrorSource = void 0;
|
|
7
7
|
exports.createHandlingStack = createHandlingStack;
|
|
8
|
-
exports.toStackTraceString = toStackTraceString;
|
|
9
8
|
exports.formatErrorMessage = formatErrorMessage;
|
|
10
|
-
exports.
|
|
9
|
+
exports.formatUnknownError = formatUnknownError;
|
|
10
|
+
exports.toStackTraceString = toStackTraceString;
|
|
11
11
|
|
|
12
12
|
var _tools = require("./tools");
|
|
13
13
|
|
package/cjs/helper/mobileUtil.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.userAgent = exports.jsBirdge = exports.isIos = exports.isAndroid = void 0;
|
|
7
7
|
var userAgent = navigator.userAgent.toLowerCase();
|
|
8
8
|
exports.userAgent = userAgent;
|
|
9
9
|
|
package/cjs/helper/tools.js
CHANGED
|
@@ -3,47 +3,68 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.ONE_SECOND = exports.ONE_MINUTE = exports.ONE_KILO_BYTE = exports.ONE_HOUR = void 0;
|
|
6
7
|
exports.UUID = UUID;
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
8
|
+
exports.addEvent = exports._URL = void 0;
|
|
9
|
+
exports.addEventListener = addEventListener;
|
|
10
|
+
exports.addEventListeners = addEventListeners;
|
|
11
|
+
exports.base64Encode = exports.autoExeQueue = exports.ajax = exports.addSinglePageEvent = exports.addHashEvent = void 0;
|
|
12
|
+
exports.clocksNow = clocksNow;
|
|
13
|
+
exports.clocksOrigin = clocksOrigin;
|
|
14
|
+
exports.coverExtend = exports.cookie = void 0;
|
|
15
|
+
exports.createContextManager = createContextManager;
|
|
16
|
+
exports.decodeURIComponent = void 0;
|
|
10
17
|
exports.deepClone = deepClone;
|
|
18
|
+
exports.deepSnakeCase = deepSnakeCase;
|
|
19
|
+
exports.each = void 0;
|
|
20
|
+
exports.elapsed = elapsed;
|
|
21
|
+
exports.encodeDates = void 0;
|
|
22
|
+
exports.escapeRowData = escapeRowData;
|
|
23
|
+
exports.filter = exports.extend2Lev = exports.extend = void 0;
|
|
24
|
+
exports.find = find;
|
|
25
|
+
exports.findByPath = findByPath;
|
|
26
|
+
exports.findCommaSeparatedValue = findCommaSeparatedValue;
|
|
27
|
+
exports.getHostname = exports.getCurrentDomain = exports.getCookieTopLevelDomain = exports.formatJsonString = exports.formatDate = void 0;
|
|
28
|
+
exports.getLinkElementOrigin = getLinkElementOrigin;
|
|
29
|
+
exports.getLocationOrigin = getLocationOrigin;
|
|
30
|
+
exports.getNavigationStart = getNavigationStart;
|
|
31
|
+
exports.getReferrer = exports.getQueryParamsFromUrl = exports.getQueryParam = void 0;
|
|
32
|
+
exports.getRelativeTime = getRelativeTime;
|
|
33
|
+
exports.getScreenOrientation = void 0;
|
|
11
34
|
exports.getStatusGroup = getStatusGroup;
|
|
35
|
+
exports.getTimestamp = getTimestamp;
|
|
36
|
+
exports.getType = getType;
|
|
37
|
+
exports.hashCode = exports.hasAttribute = exports.getURLSearchParams = void 0;
|
|
38
|
+
exports.includes = includes;
|
|
39
|
+
exports.isObject = exports.isNumber = exports.isJSONString = exports.isFunction = exports.isEmptyObject = exports.isElement = exports.isDate = exports.isBoolean = exports.isArray = exports.isArguments = exports.inherit = exports.indexOf = void 0;
|
|
40
|
+
exports.isPercentage = isPercentage;
|
|
41
|
+
exports.isUndefined = exports.isSupportCors = exports.isString = void 0;
|
|
12
42
|
exports.jsonStringify = jsonStringify;
|
|
43
|
+
exports.map = exports.localStorage = exports.loadScript = exports.keys = void 0;
|
|
44
|
+
exports.mapValues = mapValues;
|
|
45
|
+
exports.mediaQueriesSupported = void 0;
|
|
46
|
+
exports.mergeInto = mergeInto;
|
|
47
|
+
exports.msToNs = msToNs;
|
|
13
48
|
exports.noop = noop;
|
|
49
|
+
exports.objectEntries = exports.now = void 0;
|
|
14
50
|
exports.performDraw = performDraw;
|
|
15
|
-
exports.round = round;
|
|
16
|
-
exports.msToNs = msToNs;
|
|
17
|
-
exports.mapValues = mapValues;
|
|
18
|
-
exports.toServerDuration = toServerDuration;
|
|
19
|
-
exports.getRelativeTime = getRelativeTime;
|
|
20
|
-
exports.preferredNow = preferredNow;
|
|
21
|
-
exports.getTimestamp = getTimestamp;
|
|
22
|
-
exports.relativeNow = relativeNow;
|
|
23
|
-
exports.clocksNow = clocksNow;
|
|
24
|
-
exports.timeStampNow = timeStampNow;
|
|
25
|
-
exports.elapsed = elapsed;
|
|
26
|
-
exports.clocksOrigin = clocksOrigin;
|
|
27
51
|
exports.preferredClock = preferredClock;
|
|
52
|
+
exports.preferredNow = preferredNow;
|
|
28
53
|
exports.preferredTimeStamp = preferredTimeStamp;
|
|
54
|
+
exports.relativeNow = relativeNow;
|
|
29
55
|
exports.relativeToClocks = relativeToClocks;
|
|
30
|
-
exports.
|
|
31
|
-
exports.
|
|
32
|
-
exports.
|
|
56
|
+
exports.replaceNumberCharByPath = replaceNumberCharByPath;
|
|
57
|
+
exports.round = round;
|
|
58
|
+
exports.safeJSONParse = void 0;
|
|
33
59
|
exports.safeTruncate = safeTruncate;
|
|
34
|
-
exports.
|
|
35
|
-
exports.
|
|
36
|
-
exports.
|
|
37
|
-
exports.
|
|
38
|
-
exports.find = find;
|
|
39
|
-
exports.isPercentage = isPercentage;
|
|
40
|
-
exports.getLocationOrigin = getLocationOrigin;
|
|
41
|
-
exports.getLinkElementOrigin = getLinkElementOrigin;
|
|
42
|
-
exports.withSnakeCaseKeys = withSnakeCaseKeys;
|
|
43
|
-
exports.deepSnakeCase = deepSnakeCase;
|
|
60
|
+
exports.throttle = exports.strip_sa_properties = exports.strip_empty_properties = exports.stringSplice = exports.strToUnicode = exports.sessionStorage = exports.searchObjString = exports.searchObjDate = exports.searchConfigData = void 0;
|
|
61
|
+
exports.timeStampNow = timeStampNow;
|
|
62
|
+
exports.toArray = exports.tirm = void 0;
|
|
63
|
+
exports.toServerDuration = toServerDuration;
|
|
44
64
|
exports.toSnakeCase = toSnakeCase;
|
|
45
|
-
exports.
|
|
46
|
-
exports.
|
|
65
|
+
exports.values = exports.utf8Encode = exports.urlParse = exports.unique = exports.typeDecide = void 0;
|
|
66
|
+
exports.withSnakeCaseKeys = withSnakeCaseKeys;
|
|
67
|
+
exports.xhr = void 0;
|
|
47
68
|
|
|
48
69
|
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
49
70
|
|
|
@@ -720,7 +741,7 @@ function UUID(placeholder) {
|
|
|
720
741
|
|
|
721
742
|
function replaceNumberCharByPath(path) {
|
|
722
743
|
if (path) {
|
|
723
|
-
return path.replace(/\/([^\/]*)\d([^\/]*)/g, '/?');
|
|
744
|
+
return path.replace(/\/([^\/]*)\d([^\/]*)/g, '/?').replace(/\/$/g, '');
|
|
724
745
|
} else {
|
|
725
746
|
return '';
|
|
726
747
|
}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
exports.haveSameOrigin = haveSameOrigin;
|
|
6
|
+
exports.buildUrl = buildUrl;
|
|
7
|
+
exports.getHash = getHash;
|
|
9
8
|
exports.getOrigin = getOrigin;
|
|
10
9
|
exports.getPathName = getPathName;
|
|
11
10
|
exports.getSearch = getSearch;
|
|
12
|
-
exports.
|
|
13
|
-
exports.
|
|
11
|
+
exports.haveSameOrigin = haveSameOrigin;
|
|
12
|
+
exports.isValidUrl = isValidUrl;
|
|
13
|
+
exports.normalizeUrl = normalizeUrl;
|
|
14
14
|
|
|
15
15
|
var _tools = require("./tools");
|
|
16
16
|
|
package/cjs/init.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.makeGlobal = makeGlobal;
|
|
7
|
-
exports.makePublicApi = makePublicApi;
|
|
8
|
-
exports.defineGlobal = defineGlobal;
|
|
9
|
-
exports.getGlobalObject = getGlobalObject;
|
|
10
6
|
exports.checkCookiesAuthorized = checkCookiesAuthorized;
|
|
11
7
|
exports.checkIsNotLocalFile = checkIsNotLocalFile;
|
|
8
|
+
exports.defineGlobal = defineGlobal;
|
|
9
|
+
exports.getGlobalObject = getGlobalObject;
|
|
10
|
+
exports.makeGlobal = makeGlobal;
|
|
11
|
+
exports.makePublicApi = makePublicApi;
|
|
12
12
|
|
|
13
13
|
var _tools = require("./helper/tools");
|
|
14
14
|
|
package/cjs/sessionManagement.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.VISIBILITY_CHECK_DELAY = exports.SESSION_TIME_OUT_DELAY = exports.SESSION_EXPIRATION_DELAY = exports.SESSION_COOKIE_NAME = exports.ANONYMOUS_ID_EXPIRATION = exports.ANONYMOUS_ID_COOKIE_NAME = void 0;
|
|
7
7
|
exports.isValidSessionString = isValidSessionString;
|
|
8
8
|
exports.persistSession = persistSession;
|
|
9
|
+
exports.startSessionManagement = startSessionManagement;
|
|
9
10
|
exports.stopSessionManagement = stopSessionManagement;
|
|
10
11
|
exports.trackActivity = trackActivity;
|
|
11
|
-
exports.ANONYMOUS_ID_EXPIRATION = exports.ANONYMOUS_ID_COOKIE_NAME = exports.VISIBILITY_CHECK_DELAY = exports.SESSION_TIME_OUT_DELAY = exports.SESSION_EXPIRATION_DELAY = exports.SESSION_COOKIE_NAME = void 0;
|
|
12
12
|
|
|
13
13
|
var _cookie = require("./cookie");
|
|
14
14
|
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
|
|
6
7
|
exports.computeStackTrace = computeStackTrace;
|
|
7
8
|
exports.computeStackTraceFromStackProp = computeStackTraceFromStackProp;
|
|
8
|
-
exports.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;
|
|
9
9
|
exports.computeStackTraceOfCaller = computeStackTraceOfCaller;
|
|
10
10
|
|
|
11
11
|
var _report = require("./report");
|
package/cjs/tracekit/report.js
CHANGED
|
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.report = report;
|
|
7
7
|
exports.subscribe = subscribe;
|
|
8
|
-
exports.unsubscribe = unsubscribe;
|
|
9
8
|
exports.traceKitWindowOnError = traceKitWindowOnError;
|
|
9
|
+
exports.unsubscribe = unsubscribe;
|
|
10
10
|
|
|
11
11
|
var _computeStackTrace = require("./computeStackTrace");
|
|
12
12
|
|
package/cjs/transport.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.processedMessageByDataMap = exports.HttpRequest = exports.Batch = void 0;
|
|
7
7
|
|
|
8
8
|
var _tools = require("./helper/tools");
|
|
9
9
|
|
package/cjs/xhrProxy.js
CHANGED
package/esm/configuration.js
CHANGED
|
@@ -136,5 +136,21 @@ function mustUseSecureCookie(userConfiguration) {
|
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
export function isIntakeRequest(url, configuration) {
|
|
139
|
-
return haveSameOrigin(url, configuration.datakitUrl)
|
|
139
|
+
// return haveSameOrigin(url, configuration.datakitUrl)
|
|
140
|
+
var notTakeRequest = [configuration.datakitUrl];
|
|
141
|
+
|
|
142
|
+
if (configuration.logsEndpoint) {
|
|
143
|
+
notTakeRequest.push(configuration.logsEndpoint);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
var isIntake = false;
|
|
147
|
+
|
|
148
|
+
for (var _url of notTakeRequest) {
|
|
149
|
+
if (url.indexOf(_url) === 0) {
|
|
150
|
+
isIntake = true;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return isIntake;
|
|
140
156
|
}
|
package/esm/dataMap.js
CHANGED
package/esm/helper/tools.js
CHANGED
|
@@ -543,7 +543,7 @@ export function UUID(placeholder) {
|
|
|
543
543
|
|
|
544
544
|
export function replaceNumberCharByPath(path) {
|
|
545
545
|
if (path) {
|
|
546
|
-
return path.replace(/\/([^\/]*)\d([^\/]*)/g, '/?');
|
|
546
|
+
return path.replace(/\/([^\/]*)\d([^\/]*)/g, '/?').replace(/\/$/g, '');
|
|
547
547
|
} else {
|
|
548
548
|
return '';
|
|
549
549
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcare/browser-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"main": "cjs/index.js",
|
|
5
5
|
"module": "esm/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
"author": "dataflux",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"description": "DataFlux RUM Web 端数据指标监控",
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "845c60151f20414b3da61bc79fbb1624b78f811b"
|
|
24
24
|
}
|
package/src/configuration.js
CHANGED
|
@@ -132,5 +132,17 @@ function mustUseSecureCookie(userConfiguration) {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
export function isIntakeRequest(url, configuration) {
|
|
135
|
-
return haveSameOrigin(url, configuration.datakitUrl)
|
|
135
|
+
// return haveSameOrigin(url, configuration.datakitUrl)
|
|
136
|
+
var notTakeRequest = [configuration.datakitUrl]
|
|
137
|
+
if (configuration.logsEndpoint) {
|
|
138
|
+
notTakeRequest.push(configuration.logsEndpoint)
|
|
139
|
+
}
|
|
140
|
+
var isIntake = false
|
|
141
|
+
for(var _url of notTakeRequest) {
|
|
142
|
+
if (url.indexOf(_url) === 0) {
|
|
143
|
+
isIntake = true
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return isIntake
|
|
136
148
|
}
|
package/src/dataMap.js
CHANGED
package/src/helper/tools.js
CHANGED
|
@@ -536,7 +536,7 @@ export function UUID(placeholder) {
|
|
|
536
536
|
// 替换url包含数字的路由
|
|
537
537
|
export function replaceNumberCharByPath(path) {
|
|
538
538
|
if (path) {
|
|
539
|
-
return path.replace(/\/([^\/]*)\d([^\/]*)/g, '/?')
|
|
539
|
+
return path.replace(/\/([^\/]*)\d([^\/]*)/g, '/?').replace(/\/$/g, '')
|
|
540
540
|
} else {
|
|
541
541
|
return ''
|
|
542
542
|
}
|