summaryrefslogtreecommitdiff
path: root/shell/lib/util.js
blob: 6f87dfd77f493863b548540b1b6e16a98d1e9339 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
export const inspect = arg => {
  if (arg === null || typeof arg !== 'object') return arg;

  try {
    return JSON.stringify(arg, undefined, 2);
  } catch (error) {
    return '[Circular]';
  }
};

const placeholderRegExp = /%[sdo%]/g;
const placeholderHandlers = {
  '%s': arg => String(arg),
  '%d': arg => Number(arg),
  '%o': arg => inspect(arg),
};

export const format = (fmt, ...args) => {
  if (typeof fmt !== 'string') return args.map(inspect).join(' ');

  const str = String(fmt).replace(placeholderRegExp, placeholder => {
    if (placeholder === '%%') return '%';
    if (!args.length) return placeholder;
    const [arg] = args.splice(0, 1);
    const handler = placeholderHandlers[placeholder];
    return handler ? handler(arg) : placeholder;
  });

  return [str, ...args.map(inspect)].join(' ');
};

export const range = (start, end) => {
  const size = end - start;
  return new Array(size).map((v, i) => start + i);
};