161 lines
4.6 KiB
JavaScript
161 lines
4.6 KiB
JavaScript
/**
|
||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||
*
|
||
* This source code is licensed under the MIT license found in the
|
||
* LICENSE file in the root directory of this source tree.
|
||
*
|
||
* @format
|
||
* @polyfill
|
||
* @nolint
|
||
*/
|
||
|
||
/* eslint-disable no-extend-native, no-bitwise */
|
||
|
||
/*
|
||
* NOTE: We use (Number(x) || 0) to replace NaN values with zero.
|
||
*/
|
||
|
||
if (!String.prototype.startsWith) {
|
||
String.prototype.startsWith = function(search) {
|
||
'use strict';
|
||
if (this == null) {
|
||
throw TypeError();
|
||
}
|
||
var string = String(this);
|
||
var pos = arguments.length > 1 ? Number(arguments[1]) || 0 : 0;
|
||
var start = Math.min(Math.max(pos, 0), string.length);
|
||
return string.indexOf(String(search), pos) === start;
|
||
};
|
||
}
|
||
|
||
if (!String.prototype.endsWith) {
|
||
String.prototype.endsWith = function(search) {
|
||
'use strict';
|
||
if (this == null) {
|
||
throw TypeError();
|
||
}
|
||
var string = String(this);
|
||
var stringLength = string.length;
|
||
var searchString = String(search);
|
||
var pos = arguments.length > 1 ? Number(arguments[1]) || 0 : stringLength;
|
||
var end = Math.min(Math.max(pos, 0), stringLength);
|
||
var start = end - searchString.length;
|
||
if (start < 0) {
|
||
return false;
|
||
}
|
||
return string.lastIndexOf(searchString, start) === start;
|
||
};
|
||
}
|
||
|
||
if (!String.prototype.repeat) {
|
||
String.prototype.repeat = function(count) {
|
||
'use strict';
|
||
if (this == null) {
|
||
throw TypeError();
|
||
}
|
||
var string = String(this);
|
||
count = Number(count) || 0;
|
||
if (count < 0 || count === Infinity) {
|
||
throw RangeError();
|
||
}
|
||
if (count === 1) {
|
||
return string;
|
||
}
|
||
var result = '';
|
||
while (count) {
|
||
if (count & 1) {
|
||
result += string;
|
||
}
|
||
if ((count >>= 1)) {
|
||
string += string;
|
||
}
|
||
}
|
||
return result;
|
||
};
|
||
}
|
||
|
||
if (!String.prototype.includes) {
|
||
String.prototype.includes = function(search, start) {
|
||
'use strict';
|
||
if (typeof start !== 'number') {
|
||
start = 0;
|
||
}
|
||
|
||
if (start + search.length > this.length) {
|
||
return false;
|
||
} else {
|
||
return this.indexOf(search, start) !== -1;
|
||
}
|
||
};
|
||
}
|
||
|
||
if (!String.prototype.codePointAt) {
|
||
String.prototype.codePointAt = function(position) {
|
||
if (this == null) {
|
||
throw TypeError();
|
||
}
|
||
var string = String(this);
|
||
var size = string.length;
|
||
// `ToInteger`
|
||
var index = position ? Number(position) : 0;
|
||
if (Number.isNaN(index)) {
|
||
index = 0;
|
||
}
|
||
// Account for out-of-bounds indices:
|
||
if (index < 0 || index >= size) {
|
||
return undefined;
|
||
}
|
||
// Get the first code unit
|
||
var first = string.charCodeAt(index);
|
||
var second;
|
||
if (
|
||
// check if it’s the start of a surrogate pair
|
||
first >= 0xd800 &&
|
||
first <= 0xdbff && // high surrogate
|
||
size > index + 1 // there is a next code unit
|
||
) {
|
||
second = string.charCodeAt(index + 1);
|
||
if (second >= 0xdc00 && second <= 0xdfff) {
|
||
// low surrogate
|
||
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
||
return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;
|
||
}
|
||
}
|
||
return first;
|
||
};
|
||
}
|
||
|
||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd
|
||
if (!String.prototype.padEnd) {
|
||
String.prototype.padEnd = function padEnd(targetLength, padString) {
|
||
targetLength = targetLength >> 0; //floor if number or convert non-number to 0;
|
||
padString = String(typeof padString !== 'undefined' ? padString : ' ');
|
||
if (this.length > targetLength) {
|
||
return String(this);
|
||
} else {
|
||
targetLength = targetLength - this.length;
|
||
if (targetLength > padString.length) {
|
||
padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
|
||
}
|
||
return String(this) + padString.slice(0, targetLength);
|
||
}
|
||
};
|
||
}
|
||
|
||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
|
||
if (!String.prototype.padStart) {
|
||
String.prototype.padStart = function padStart(targetLength, padString) {
|
||
targetLength = targetLength >> 0; //truncate if number or convert non-number to 0;
|
||
padString = String(typeof padString !== 'undefined' ? padString : ' ');
|
||
if (this.length > targetLength) {
|
||
return String(this);
|
||
} else {
|
||
targetLength = targetLength - this.length;
|
||
if (targetLength > padString.length) {
|
||
padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed
|
||
}
|
||
return padString.slice(0, targetLength) + String(this);
|
||
}
|
||
};
|
||
}
|