| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import {arrayToString} from './array-to-string.js';
- import {valueToString} from './value-to-string.js';
- /**
- * Format - extended version of https://github.com/tmpfs/format-util
- *
- * native:
- * s - string
- * d - digits
- * j - json
- *
- * extras:
- * v - value (valueToString.js)
- * l - list (arrayToString.js)
- *
- * @param {*} pattern
- * @param {...*} args
- * @returns {string}
- */
- export function format(pattern, ...args) {
- if (pattern instanceof Date) {
- pattern = pattern.toISOString();
- } else if (typeof pattern !== 'string') {
- pattern = String(pattern);
- }
- const re = /(%?)(%([sdjvl]))/g;
- const argsQueue = [...args];
- if (argsQueue.length) {
- pattern = pattern.replace(re, function (match, escaped, ptn, flag) {
- let arg = argsQueue.shift();
- switch (flag) {
- case 's':
- arg = String(arg);
- break;
- case 'd':
- arg = Number(arg);
- break;
- case 'j':
- arg = JSON.stringify(arg);
- break;
- case 'v':
- arg = valueToString(arg);
- break;
- case 'l':
- arg = arrayToString(arg);
- break;
- }
- if (!escaped) return arg;
- argsQueue.unshift(arg);
- return match;
- });
- }
- // has arguments after interpolation
- if (argsQueue.length) pattern += ' ' + argsQueue.join(' ');
- // update escaped %% values
- pattern = pattern.replace(/%{2}/g, '%');
- return '' + pattern;
- }
|