@naturalcycles/js-lib
Version:
Standard library for universal (browser + Node.js) javascript
117 lines (116 loc) • 3.74 kB
JavaScript
;
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');
}