12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 'use strict';
- var GetIntrinsic = require('get-intrinsic');
- var $TypeError = GetIntrinsic('%TypeError%');
- var callBound = require('call-bind/callBound');
- var ToLength = require('./ToLength');
- var ToString = require('./ToString');
- var $strSlice = callBound('String.prototype.slice');
- // https://262.ecma-international.org/11.0/#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;
- };
|