@ema/js-base-library
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
273 lines (270 loc) • 17.1 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
var StringUtil = /** @class */ (function () {
function StringUtil() {
}
/**
* @param {?} str
* @param {?} prefix
* @param {?} suffix
* @param {?=} stripDelimiters
* @return {?}
*/
StringUtil.allBetween = /**
* @param {?} str
* @param {?} prefix
* @param {?} suffix
* @param {?=} stripDelimiters
* @return {?}
*/
function (str, prefix, suffix, stripDelimiters) {
if (stripDelimiters === void 0) { stripDelimiters = true; }
/** @type {?} */
var regex = new RegExp(prefix + '(.*?)' + suffix, 'g');
/** @type {?} */
var matches = str.match(regex);
/** @type {?} */
var instances = [];
if (matches && matches.length) {
matches.forEach((/**
* @param {?} match
* @param {?} i
* @return {?}
*/
function (match, i) {
stripDelimiters ? instances.push(match.replace(prefix, '').replace(suffix, '')) : instances.push(match);
}));
}
return instances;
};
/**
* @param {?} str
* @param {?} prefix
* @param {?} suffix
* @param {?=} ignoreCase
* @return {?}
*/
StringUtil.between = /**
* @param {?} str
* @param {?} prefix
* @param {?} suffix
* @param {?=} ignoreCase
* @return {?}
*/
function (str, prefix, suffix, ignoreCase) {
if (ignoreCase === void 0) { ignoreCase = false; }
if (!str) {
return str;
}
/**
* @param {?} s
* @param {?} prefix
* @param {?} suffix
* @return {?}
*/
function between(s, prefix, suffix) {
// Usage: var betweenResult = between('hello you guys','hello ',' guys'); // result = 'you'
/** @type {?} */
var i = s.indexOf(prefix);
if (i >= 0) {
s = s.substring(i + prefix.length);
}
else {
return '';
}
if (suffix) {
i = s.indexOf(suffix);
if (i >= 0) {
s = s.substring(0, i);
}
else {
return '';
}
}
return s;
}
return between(str, prefix, suffix);
};
/**
* @param {?} str
* @return {?}
*/
StringUtil.camelCase = /**
* @param {?} str
* @return {?}
*/
function (str) {
/** @type {?} */
var res = str.replace(/\w+/g, (/**
* @param {?} w
* @return {?}
*/
function (w) { return w[0].toUpperCase() + w.slice(1).toLowerCase(); }));
return res;
};
/**
* @param {?} str
* @return {?}
*/
StringUtil.lowerCamelCase = /**
* @param {?} str
* @return {?}
*/
function (str) {
/** @type {?} */
var res = StringUtil.lowercaseFirst(str.replace(/\w+/g, (/**
* @param {?} w
* @return {?}
*/
function (w) { return w[0].toUpperCase() + w.slice(1).toLowerCase(); })));
return res;
};
/**
* @param {?} str
* @return {?}
*/
StringUtil.kebabToCamelCase = /**
* @param {?} str
* @return {?}
*/
function (str) {
/** @type {?} */
var res = StringUtil.uppercaseFirst(str.replace(/(\-\w)/g, (/**
* @param {?} m
* @return {?}
*/
function (m) { return m[1].toUpperCase(); })));
return res;
};
//
//
/**
* @param {?} str
* @return {?}
*/
StringUtil.kebabToLowerCamelCase =
//
/**
* @param {?} str
* @return {?}
*/
function (str) {
/** @type {?} */
var res = StringUtil.lowercaseFirst(str.replace(/(\-\w)/g, (/**
* @param {?} m
* @return {?}
*/
function (m) { return m[1].toUpperCase(); })));
return res;
};
/**
* @param {?} str
* @return {?}
*/
StringUtil.camelToKebabCase = /**
* @param {?} str
* @return {?}
*/
function (str) {
/** @type {?} */
var res = str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
return res;
};
/* static snakeToCamelCase(str) {
return str.replace(/\w+/g, function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
}
static snakeToLowerCamelCase(str) {
return str.replace(/\w+/g, function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
}*/
/* static snakeToCamelCase(str) {
return str.replace(/\w+/g, function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
}
static snakeToLowerCamelCase(str) {
return str.replace(/\w+/g, function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
}*/
/**
* @param {?} str
* @return {?}
*/
StringUtil.isJson = /* static snakeToCamelCase(str) {
return str.replace(/\w+/g, function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
}
static snakeToLowerCamelCase(str) {
return str.replace(/\w+/g, function(w){return w[0].toUpperCase() + w.slice(1).toLowerCase();});
}*/
/**
* @param {?} str
* @return {?}
*/
function (str) {
try {
JSON.parse(str);
}
catch (e) {
return false;
}
return true;
};
//
//
/**
* @param {?} str
* @return {?}
*/
StringUtil.lowercaseFirst =
//
/**
* @param {?} str
* @return {?}
*/
function (str) {
return str.charAt(0).toLowerCase() + str.slice(1);
};
/**
* @param {?} str
* @return {?}
*/
StringUtil.uppercaseFirst = /**
* @param {?} str
* @return {?}
*/
function (str) {
return str.charAt(0).toUpperCase() + str.slice(1);
};
/**
* @param {?} str
* @param {?} stringToReplace
* @param {?} replacement
* @param {?=} ignoreCase
* @return {?}
*/
StringUtil.replaceAll = /**
* @param {?} str
* @param {?} stringToReplace
* @param {?} replacement
* @param {?=} ignoreCase
* @return {?}
*/
function (str, stringToReplace, replacement, ignoreCase) {
if (ignoreCase === void 0) { ignoreCase = false; }
if (!str) {
return str;
}
/**
* @param {?} src
* @param {?} str1
* @param {?} str2
* @param {?} ignore
* @return {?}
*/
function replaceAll(src, str1, str2, ignore) {
return String(src).replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g, '\\$&'), (ignore ? 'gi' : 'g')), (typeof (str2) === 'string') ? str2.replace(/\$/g, '$$$$') : str2);
}
return replaceAll(str, stringToReplace, replacement, ignoreCase);
};
return StringUtil;
}());
export { StringUtil };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXV0aWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZW1hL2pzLWJhc2UtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi91dGlscy9zdHJpbmctdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7SUFBQTtJQW9HQSxDQUFDOzs7Ozs7OztJQWxHVSxxQkFBVTs7Ozs7OztJQUFqQixVQUFrQixHQUFXLEVBQUUsTUFBYyxFQUFFLE1BQWMsRUFBRSxlQUErQjtRQUEvQixnQ0FBQSxFQUFBLHNCQUErQjs7WUFDdEYsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBQyxPQUFPLEdBQUMsTUFBTSxFQUFDLEdBQUcsQ0FBQzs7WUFDN0MsT0FBTyxHQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDOztZQUNqQyxTQUFTLEdBQUcsRUFBRTtRQUNsQixJQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxPQUFPOzs7OztZQUFDLFVBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JCLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDM0csQ0FBQyxFQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Ozs7Ozs7O0lBRU0sa0JBQU87Ozs7Ozs7SUFBZCxVQUFlLEdBQVcsRUFBRSxNQUFjLEVBQUUsTUFBYyxFQUFFLFVBQTJCO1FBQTNCLDJCQUFBLEVBQUEsa0JBQTJCO1FBQ25GLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPLEdBQUcsQ0FBQztTQUNkOzs7Ozs7O1FBQ0QsU0FBUyxPQUFPLENBQUMs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O0lBR0wsaUJBQUM7QUFBRCxDQUFDLEFBcEdELElBb0dDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFN0cmluZ1V0aWwge1xuXG4gICAgc3RhdGljIGFsbEJldHdlZW4oc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCBzdWZmaXg6IHN0cmluZywgc3RyaXBEZWxpbWl0ZXJzOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwcmVmaXgrJyguKj8pJytzdWZmaXgsJ2cnKTtcbiAgICAgICAgbGV0IG1hdGNoZXM6IGFueVtdID0gc3RyLm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgbGV0IGluc3RhbmNlcyA9IFtdO1xuICAgICAgICBpZihtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBtYXRjaGVzLmZvckVhY2goKG1hdGNoLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RyaXBEZWxpbWl0ZXJzID8gaW5zdGFuY2VzLnB1c2gobWF0Y2gucmVwbGFjZShwcmVmaXgsICcnKS5yZXBsYWNlKHN1ZmZpeCwgJycpKSA6IGluc3RhbmNlcy5wdXNoKG1hdGNoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgYmV0d2VlbihzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nLCBpZ25vcmVDYXNlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBiZXR3ZWVuKHM6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBVc2FnZTogIHZhciBiZXR3ZWVuUmVzdWx0ID0gYmV0d2VlbignaGVsbG8geW91IGd1eXMnLCdoZWxsbyAnLCcgZ3V5cycpOyAvLyByZXN1bHQgPSAneW91J1xuICAgICAgICAgICAgbGV0IGkgPSBzLmluZGV4T2YocHJlZml4KTtcbiAgICAgICAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoaSArIHByZWZpeC5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3VmZml4KSB7XG4gICAgICAgICAgICAgICAgaSA9IHMuaW5kZXhPZihzdWZmaXgpO1xuICAgICAgICAgICAgICAgIGlmIChpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDAsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmV0d2VlbihzdHIsIHByZWZpeCwgc3VmZml4KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2FtZWxDYXNlKHN0cik6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXM6IHN0cmluZyA9IHN0ci5yZXBsYWNlKC9cXHcrL2csIGZ1bmN0aW9uKHcpe3JldHVybiB3WzBdLnRvVXBwZXJDYXNlKCkgKyB3LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7fSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvd2VyQ2FtZWxDYXNlKHN0cik6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXM6IHN0cmluZyA9IFN0cmluZ1V0aWwubG93ZXJjYXNlRmlyc3Qoc3RyLnJlcGxhY2UoL1xcdysvZywgZnVuY3Rpb24odyl7cmV0dXJuIHdbMF0udG9VcHBlckNhc2UoKSArIHcuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTt9KSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGtlYmFiVG9DYW1lbENhc2Uoc3RyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlczogc3RyaW5nID0gU3RyaW5nVXRpbC51cHBlcmNhc2VGaXJzdChzdHIucmVwbGFjZSgvKFxcLVxcdykvZywgZnVuY3Rpb24obSl7cmV0dXJuIG1bMV0udG9VcHBlckNhc2UoKTt9KSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8vXG4gICAgc3RhdGljIGtlYmFiVG9Mb3dlckNhbWVsQ2FzZShzdHIpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzOiBzdHJpbmcgPSBTdHJpbmdVdGlsLmxvd2VyY2FzZUZpcnN0KHN0ci5yZXBsYWNlKC8oXFwtXFx3KS9nLCBmdW5jdGlvbihtKXtyZXR1cm4gbVsxXS50b1VwcGVyQ2FzZSgpO30pKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgY2FtZWxUb0tlYmFiQ2FzZShzdHIpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzOiBzdHJpbmcgPSBzdHIucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgIC8qIHN0YXRpYyBzbmFrZVRvQ2FtZWxDYXNlKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcdysvZywgZnVuY3Rpb24odyl7cmV0dXJuIHdbMF0udG9VcHBlckNhc2UoKSArIHcuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTt9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc25ha2VUb0xvd2VyQ2FtZWxDYXNlKHN0cikge1xuICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcdysvZywgZnVuY3Rpb24odyl7cmV0dXJuIHdbMF0udG9VcHBlckNhc2UoKSArIHcuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTt9KTtcbiAgICB9Ki9cblxuICAgIHN0YXRpYyBpc0pzb24oc3RyKTogYm9vbGVhbiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy9cbiAgICBzdGF0aWMgbG93ZXJjYXNlRmlyc3Qoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xuICAgIH1cblxuICAgIHN0YXRpYyB1cHBlcmNhc2VGaXJzdChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlcGxhY2VBbGwoc3RyOiBzdHJpbmcsIHN0cmluZ1RvUmVwbGFjZTogc3RyaW5nLCByZXBsYWNlbWVudDogc3RyaW5nLCBpZ25vcmVDYXNlOiBib29sZWFuID0gZmFsc2UgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUFsbChzcmMsIHN0cjEsIHN0cjIsIGlnbm9yZSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzcmMpLnJlcGxhY2UobmV3IFJlZ0V4cChzdHIxLnJlcGxhY2UoLyhbXFwvXFwsXFwhXFxcXFxcXlxcJFxce1xcfVxcW1xcXVxcKFxcKVxcLlxcKlxcK1xcP1xcfFxcPFxcPlxcLVxcJl0pL2csICdcXFxcJCYnKSwgKGlnbm9yZSA/ICdnaScgOiAnZycpKSwgKHR5cGVvZihzdHIyKSA9PT0gJ3N0cmluZycpID8gc3RyMi5yZXBsYWNlKC9cXCQvZywgJyQkJCQnKSA6IHN0cjIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXBsYWNlQWxsKHN0ciwgc3RyaW5nVG9SZXBsYWNlLCByZXBsYWNlbWVudCwgaWdub3JlQ2FzZSk7XG4gICAgfVxuXG5cbn1cblxuIl19