"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); // @ts-ignore var char_regex_1 = __importDefault(require("char-regex")); /** * Converts a string to an array of string chars * @param {string} str The string to turn into array * @returns {string[]} */ function toArray(str) { if (typeof str !== 'string') { throw new Error('A string is expected as input'); } return str.match(char_regex_1.default()) || []; } exports.toArray = toArray; /** * Returns the length of a string * * @export * @param {string} str * @returns {number} */ function length(str) { // Check for input if (typeof str !== 'string') { throw new Error('Input must be a string'); } var match = str.match(char_regex_1.default()); return match === null ? 0 : match.length; } exports.length = length; /** * Returns a substring by providing start and end position * * @export * @param {string} str * @param {number} [begin=0] Starting position * @param {number} end End position * @returns {string} */ function substring(str, begin, end) { if (begin === void 0) { begin = 0; } // Check for input if (typeof str !== 'string') { throw new Error('Input must be a string'); } // Even though negative numbers work here, theyre not in the spec if (typeof begin !== 'number' || begin < 0) { begin = 0; } if (typeof end === 'number' && end < 0) { end = 0; } var match = str.match(char_regex_1.default()); if (!match) return ''; return match.slice(begin, end).join(''); } exports.substring = substring; /** * Returns a substring by providing start position and length * * @export * @param {string} str * @param {number} [begin=0] Starting position * @param {number} len Desired length * @returns {string} */ function substr(str, begin, len) { if (begin === void 0) { begin = 0; } // Check for input if (typeof str !== 'string') { throw new Error('Input must be a string'); } var strLength = length(str); // Fix type if (typeof begin !== 'number') { begin = parseInt(begin, 10); } // Return zero-length string if got oversize number. if (begin >= strLength) { return ''; } // Calculating postive version of negative value. if (begin < 0) { begin += strLength; } var end; if (typeof len === 'undefined') { end = strLength; } else { // Fix type if (typeof len !== 'number') { len = parseInt(len, 10); } end = len >= 0 ? len + begin : begin; } var match = str.match(char_regex_1.default()); if (!match) return ''; return match.slice(begin, end).join(''); } exports.substr = substr; /** * Enforces a string to be a certain length by * adding or removing characters * * @export * @param {string} str * @param {number} [limit=16] Limit * @param {string} [padString='#'] The Pad String * @param {string} [padPosition='right'] The Pad Position * @returns {string} */ function limit(str, limit, padString, padPosition) { if (limit === void 0) { limit = 16; } if (padString === void 0) { padString = '#'; } if (padPosition === void 0) { padPosition = 'right'; } // Input should be a string, limit should be a number if (typeof str !== 'string' || typeof limit !== 'number') { throw new Error('Invalid arguments specified'); } // Pad position should be either left or right if (['left', 'right'].indexOf(padPosition) === -1) { throw new Error('Pad position should be either left or right'); } // Pad string can be anything, we convert it to string if (typeof padString !== 'string') { padString = String(padString); } // Calculate string length considering astral code points var strLength = length(str); if (strLength > limit) { return substring(str, 0, limit); } else if (strLength < limit) { var padRepeats = padString.repeat(limit - strLength); return padPosition === 'left' ? padRepeats + str : str + padRepeats; } return str; } exports.limit = limit; /** * Returns the index of the first occurrence of a given string * * @export * @param {string} str * @param {string} [searchStr] the string to search * @param {number} [pos] starting position * @returns {number} */ function indexOf(str, searchStr, pos) { if (pos === void 0) { pos = 0; } if (typeof str !== 'string') { throw new Error('Input must be a string'); } if (str === '') { if (searchStr === '') { return 0; } return -1; } // fix type pos = Number(pos); pos = isNaN(pos) ? 0 : pos; searchStr = String(searchStr); var strArr = toArray(str); if (pos >= strArr.length) { if (searchStr === '') { return strArr.length; } return -1; } if (searchStr === '') { return pos; } var searchArr = toArray(searchStr); var finded = false; var index; for (index = pos; index < strArr.length; index += 1) { var searchIndex = 0; while (searchIndex < searchArr.length && searchArr[searchIndex] === strArr[index + searchIndex]) { searchIndex += 1; } if (searchIndex === searchArr.length && searchArr[searchIndex - 1] === strArr[index + searchIndex - 1]) { finded = true; break; } } return finded ? index : -1; } exports.indexOf = indexOf;