UNPKG

@yookue/ts-lang-utils

Version:

Common lang utilities for typescript

89 lines 3.28 kB
import { minLength } from "../ArrayUtils/minLength"; import { isPlain } from "../ObjectUtils/isPlain"; import { toString } from "../ObjectUtils/toString"; export function formatPercent(text) { for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { params[_key - 1] = arguments[_key]; } if (!text || text.length <= 2 || !params || !params.length) { return text; } var matches = text.match(/%[bcdfjosxX]/g) || []; var count = minLength(matches, params); if (count === 0) { return text; } var result = text; for (var i = 0; i < count; i++) { var param = params[i]; var pattern = matches[i].substring(1); switch (pattern) { case 'b': case 'c': case 'd': case 'o': case 'x': case 'X': try { var value = undefined; if (typeof param === 'string') { value = Number.parseInt(param); } else if (param instanceof String) { value = Number.parseInt(param.toString()); } else if (typeof param === 'number') { value = param; } if (value) { if (pattern === 'b') { result = result.replace("%".concat(pattern), value.toString(2)); } else if (pattern === 'c') { result = result.replace("%".concat(pattern), String.fromCharCode(value)); } else if (pattern === 'd') { result = result.replace("%".concat(pattern), value.toString(10)); } else if (pattern === 'o') { result = result.replace("%".concat(pattern), '0' + value.toString(8)); } else if (pattern === 'x') { result = result.replace("%".concat(pattern), '0x' + value.toString(16)); } else if (pattern === 'X') { result = result.replace("%".concat(pattern), '0x' + value.toString(16).toUpperCase()); } } } catch (_unused) { throw new TypeError("Invalid parameter type of '".concat(param, "', index ").concat(i)); } break; case 'f': try { var _value = undefined; if (typeof param === 'string') { _value = Number.parseFloat(param); } else if (param instanceof String) { _value = Number.parseFloat(param.toString()); } else if (typeof param === 'number') { _value = param; } if (_value) { result = result.replace("%".concat(pattern), '0x' + _value.toString()); } } catch (_unused2) { throw new TypeError("Invalid parameter type of '".concat(param, "', index ").concat(i)); } break; case 'j': if (param === undefined || param === null) { result = result.replace("%".concat(pattern), ''); break; } else if (isPlain(param)) { result = result.replace("%".concat(pattern), JSON.stringify(param)); break; } throw new TypeError("Invalid parameter type of '".concat(param, "', index ").concat(i)); case 's': result = result.replace("%".concat(pattern), toString(param, '')); break; default: break; } } return result; }