@yookue/ts-lang-utils
Version:
Common lang utilities for typescript
89 lines • 3.28 kB
JavaScript
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;
}