UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

117 lines (116 loc) 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._capitalize = _capitalize; exports._toUpperCase = _toUpperCase; exports._toLowercase = _toLowercase; exports._upperFirst = _upperFirst; exports._lowerFirst = _lowerFirst; exports._split = _split; exports._removeWhitespace = _removeWhitespace; exports._truncate = _truncate; exports._truncateMiddle = _truncateMiddle; exports._substringBefore = _substringBefore; exports._substringBeforeLast = _substringBeforeLast; exports._substringAfter = _substringAfter; exports._substringAfterLast = _substringAfterLast; exports._substringBetweenLast = _substringBetweenLast; exports._nl2br = _nl2br; /** * Converts the first character of string to upper case and the remaining to lower case. * Returns a type-safe capitalized string. */ function _capitalize(s = '') { return (s.charAt(0).toUpperCase() + s.slice(1).toLowerCase()); } /** * Convert a string to a type-safe uppercase string. */ function _toUpperCase(s) { return s.toUpperCase(); } /** * Convert a string to a type-safe lowercase string. */ function _toLowercase(s) { return s.toLowerCase(); } function _upperFirst(s = '') { return (s.charAt(0).toUpperCase() + s.slice(1)); } function _lowerFirst(s) { return (s.charAt(0).toLowerCase() + s.slice(1)); } /** * Like String.split(), but with limit, returning the tail together with last element. * * @return Returns the new array of string segments. */ function _split(str, separator, limit) { const parts = str.split(separator); if (parts.length <= limit) return parts; return [...parts.slice(0, limit - 1), parts.slice(limit - 1).join(separator)]; } function _removeWhitespace(s) { return s.replaceAll(/\s/g, ''); } /** * _.truncate('hi-diddly-ho there, neighborino') * // => 'hi-diddly-ho there, neighbo...' */ function _truncate(s, maxLen, omission = '...') { if (!s || s.length <= maxLen) return s; if (maxLen <= omission.length) return omission; return s.slice(0, maxLen - omission.length) + omission; } /** * _.truncateMiddle('abcdefghijklmnopqrstuvwxyz', 10) * // => 'abcd...xyz' */ function _truncateMiddle(s, maxLen, omission = '...') { if (!s || s.length <= maxLen) return s; if (maxLen <= omission.length) return omission; const mark1 = Math.round((maxLen - omission.length) / 2); const mark2 = s.length - Math.floor((maxLen - omission.length) / 2); return s.slice(0, mark1) + omission + s.slice(mark2); } // These functions are modeled after Kotlin's String API function _substringBefore(s, delimiter) { const pos = s.indexOf(delimiter); return s.slice(0, pos !== -1 ? pos : undefined); } function _substringBeforeLast(s, delimiter) { const pos = s.lastIndexOf(delimiter); return s.slice(0, pos !== -1 ? pos : undefined); } function _substringAfter(s, delimiter) { const pos = s.indexOf(delimiter); return pos !== -1 ? s.slice(pos + delimiter.length) : s; } function _substringAfterLast(s, delimiter) { const pos = s.lastIndexOf(delimiter); return pos !== -1 ? s.slice(pos + delimiter.length) : s; } /** * Returns the substring between LAST `leftDelimiter` and then FIRST `rightDelimiter`. * * @example * * const s = '/Users/lalala/someFile.test.ts' * _substringBetweenLast(s, '/', '.') * // `someFile` */ function _substringBetweenLast(s, leftDelimiter, rightDelimiter) { return _substringBefore(_substringAfterLast(s, leftDelimiter), rightDelimiter); } /** * Converts `\n` (aka new-line) to `<br>`, to be presented in HTML. * Keeps `\n`, so if it's printed in non-HTML environment it still looks ok-ish. */ function _nl2br(s) { return s.replaceAll('\n', '<br>\n'); }