All files / plugins pad.js

17.85% Statements 5/28
0% Branches 0/24
0% Functions 0/5
19.23% Lines 5/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 36 37 38 39 40 41 42 43 44 45 46 47 48            1x             1x                           1x       1x       1x                        
import {toStr} from "../helpers/string/to_string"
import {clip} from "../helpers/number/clip"
import {toInt} from "../helpers/number/to_integer"
import { MAX_SAFE_INTEGER } from "../helpers/number/const"
import {repeat} from "./repeat";
 
const padBuilder = (pad, len = 0) => {
    const padLength = pad.length
    const length = len - padLength
 
    return repeat(pad, length + 1).substr(0, len)
}
 
const _pad = (s, pad = "", len = 0, left = false) => {
    let _s = toStr(s)
    let _len = !len ? _s.length : clip(toInt(len), 0, MAX_SAFE_INTEGER)
    let _padLen = pad.length
    let _paddingLen = _len - _s.length
    let _sideLen = _paddingLen
 
    if (_paddingLen <= 0 || _padLen === 0) {return _s}
 
    let pads = padBuilder(pad, _sideLen)
 
    return left ? pads + _s : _s + pads
}
 
export const lpad = (s, pad = ' ', len = 0) => {
    return _pad(s, pad, len,  true)
}
 
export const rpad = (s, pad = ' ', len = 0) => {
    return _pad(s, pad, len, false)
}
 
export const pad = (s, pad = '', len = 0) => {
    let _s = toStr(s)
    let _len = !len ? _s.length : clip(toInt(len), 0, MAX_SAFE_INTEGER)
    let _padLen = pad.length
    let _paddingLen = _len - _s.length
    let _sideLen = toInt(_paddingLen / 2) //?
    let _remainingLen = _paddingLen % 2 //?
 
    if (_paddingLen <= 0 || _padLen === 0) {return _s}
 
    return padBuilder(pad, _sideLen) + _s + padBuilder(pad, _sideLen + _remainingLen) //?
}