UNPKG

format-string-by-pattern

Version:
66 lines 2.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function shouldAppendLastSeparator(current, pattern, lastSeparator) { return current.length + 1 === pattern.length && pattern.endsWith(lastSeparator); } function getFormattedString(pattern, value) { if (!value) { return value; } var cleanValue = String(value).replace(/[^\da-zA-Z\n|]/g, ''); var blockSizes = pattern .split(/[^\da-zA-Z\n|]/g) .filter(Boolean) .map(function (b) { return b.length; }); var separators = pattern.split(/[\da-zA-Z\n|]/g).filter(Boolean); var firstSeparator = separators[0]; var lastSeparator = separators[separators.length - 1]; if (pattern.startsWith(firstSeparator)) { var afterReduce_1 = separators.reduce(function (acc, cur, index) { var curBlockSize = blockSizes[index]; var beforeSlice = acc.value.slice(0, curBlockSize); var afterSlice = acc.value.slice(curBlockSize); var nextResult = beforeSlice ? acc.result.concat(cur, beforeSlice) : acc.result; return { result: nextResult, value: afterSlice, }; }, { result: '', value: cleanValue, }); var res_1 = afterReduce_1.result.slice(0, pattern.length); if (shouldAppendLastSeparator(res_1, pattern, lastSeparator)) { return res_1.concat(lastSeparator); } return res_1; } var afterReduce = blockSizes.reduce(function (acc, cur, index) { var curSeparator = separators[index] || ''; var replace = "$1" + curSeparator + "$2"; var curSlice = cur + acc.prevSlice + acc.prevSeparator.length; var curRegex = new RegExp("(.{" + curSlice + "})(.)"); var curValue = acc.value.replace(curRegex, replace); return { prevSeparator: curSeparator, prevSlice: curSlice, value: curValue, }; }, { prevSeparator: '', prevSlice: 0, value: cleanValue, }); var res = afterReduce.value.slice(0, pattern.length); if (shouldAppendLastSeparator(res, pattern, lastSeparator)) { return res.concat(lastSeparator); } return res; } function formatStringByPattern(pattern, value) { return value === undefined ? function (curriedValue) { return getFormattedString(pattern, curriedValue); } : getFormattedString(pattern, value); } exports.default = formatStringByPattern; //# sourceMappingURL=index.js.map