'use strict'; var GetIntrinsic = require('../GetIntrinsic'); var $TypeError = GetIntrinsic('%TypeError%'); var callBound = require('../helpers/callBound'); var ToLength = require('./ToLength'); var ToString = require('./ToString'); var $strSlice = callBound('String.prototype.slice'); // https://tc39.es/ecma262/2020/#sec-stringpad module.exports = function StringPad(O, maxLength, fillString, placement) { if (placement !== 'start' && placement !== 'end') { throw new $TypeError('Assertion failed: `placement` must be "start" or "end"'); } var S = ToString(O); var intMaxLength = ToLength(maxLength); var stringLength = S.length; if (intMaxLength <= stringLength) { return S; } var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString); if (filler === '') { return S; } var fillLen = intMaxLength - stringLength; // the String value consisting of repeated concatenations of filler truncated to length fillLen. var truncatedStringFiller = ''; while (truncatedStringFiller.length < fillLen) { truncatedStringFiller += filler; } truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen); if (placement === 'start') { return truncatedStringFiller + S; } return S + truncatedStringFiller; };