UNPKG

1.38 kBJavaScriptView Raw
1import { hasAnsi, lange } from '@spare/lange';
2import { isNumeric } from '@typen/num-strict';
3import { FullWidth } from '@spare/fullwidth';
4
5const fixpad = (tx, pd) => hasAnsi(tx) ? tx.length + pd - lange(tx) : pd;
6const lpad = String.prototype.padStart;
7const rpad = String.prototype.padEnd;
8
9const LPad = ({
10 ansi = true,
11 fill
12} = {}) => ansi ? (tx, pd) => lpad.call(tx, fixpad(tx, pd), fill) : (tx, pd) => lpad.call(tx, pd, fill);
13
14const RPad = ({
15 ansi = true,
16 fill
17} = {}) => ansi ? (tx, pd) => rpad.call(tx, fixpad(tx, pd), fill) : (tx, pd) => rpad.call(tx, pd, fill);
18
19const Pad = ({
20 dock,
21 ansi = true,
22 fill
23} = {}) => {
24 if (!dock) {
25 return ansi ? (tx, pd, v) => (isNumeric(v) ? lpad : rpad).call(tx, fixpad(tx, pd), fill) : (tx, pd, v) => (isNumeric(v) ? lpad : rpad).call(tx, pd, fill);
26 }
27
28 let padder = dock < 0 ? lpad : rpad;
29 return ansi ? (tx, pd) => padder.call(tx, fixpad(tx, pd), fill) : (tx, pd) => padder.call(tx, pd, fill);
30};
31
32const PadFW = ({
33 dock,
34 ansi,
35 fill,
36 fwfill
37}) => {
38 const padHW = Pad({
39 dock,
40 ansi,
41 fill
42 }),
43 padFW = Pad({
44 dock,
45 ansi,
46 fill: fwfill
47 }),
48 toFW = FullWidth({
49 ansi
50 });
51 return (x, pd, fw, v) => fw ? padFW(toFW(x), pd, v) : padHW(x, pd, v);
52};
53
54const LEFT = -1;
55const RIGHT = 1;
56const CENTRE = 0;
57
58export { CENTRE, LEFT, LPad, Pad, PadFW, RIGHT, RPad };