UNPKG

@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
/** * @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