summaryrefslogtreecommitdiffstats
path: root/js/vendor/es6-shim/es6-shim.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/es6-shim/es6-shim.js')
-rw-r--r--js/vendor/es6-shim/es6-shim.js3738
1 files changed, 0 insertions, 3738 deletions
diff --git a/js/vendor/es6-shim/es6-shim.js b/js/vendor/es6-shim/es6-shim.js
deleted file mode 100644
index 1f49f68d0..000000000
--- a/js/vendor/es6-shim/es6-shim.js
+++ /dev/null
@@ -1,3738 +0,0 @@
- /*!
- * https://github.com/paulmillr/es6-shim
- * @license es6-shim Copyright 2013-2016 by Paul Miller (http://paulmillr.com)
- * and contributors, MIT License
- * es6-shim: v0.35.0
- * see https://github.com/paulmillr/es6-shim/blob/0.35.0/LICENSE
- * Details and documentation:
- * https://github.com/paulmillr/es6-shim/
- */
-
-// UMD (Universal Module Definition)
-// see https://github.com/umdjs/umd/blob/master/returnExports.js
-(function (root, factory) {
- /*global define, module, exports */
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(factory);
- } else if (typeof exports === 'object') {
- // Node. Does not work with strict CommonJS, but
- // only CommonJS-like environments that support module.exports,
- // like Node.
- module.exports = factory();
- } else {
- // Browser globals (root is window)
- root.returnExports = factory();
- }
-}(this, function () {
- 'use strict';
-
- var _apply = Function.call.bind(Function.apply);
- var _call = Function.call.bind(Function.call);
- var isArray = Array.isArray;
- var keys = Object.keys;
-
- var not = function notThunker(func) {
- return function notThunk() { return !_apply(func, this, arguments); };
- };
- var throwsError = function (func) {
- try {
- func();
- return false;
- } catch (e) {
- return true;
- }
- };
- var valueOrFalseIfThrows = function valueOrFalseIfThrows(func) {
- try {
- return func();
- } catch (e) {
- return false;
- }
- };
-
- var isCallableWithoutNew = not(throwsError);
- var arePropertyDescriptorsSupported = function () {
- // if Object.defineProperty exists but throws, it's IE 8
- return !throwsError(function () { Object.defineProperty({}, 'x', { get: function () {} }); });
- };
- var supportsDescriptors = !!Object.defineProperty && arePropertyDescriptorsSupported();
- var functionsHaveNames = (function foo() {}).name === 'foo';
-
- var _forEach = Function.call.bind(Array.prototype.forEach);
- var _reduce = Function.call.bind(Array.prototype.reduce);
- var _filter = Function.call.bind(Array.prototype.filter);
- var _some = Function.call.bind(Array.prototype.some);
-
- var defineProperty = function (object, name, value, force) {
- if (!force && name in object) { return; }
- if (supportsDescriptors) {
- Object.defineProperty(object, name, {
- configurable: true,
- enumerable: false,
- writable: true,
- value: value
- });
- } else {
- object[name] = value;
- }
- };
-
- // Define configurable, writable and non-enumerable props
- // if they don’t exist.
- var defineProperties = function (object, map, forceOverride) {
- _forEach(keys(map), function (name) {
- var method = map[name];
- defineProperty(object, name, method, !!forceOverride);
- });
- };
-
- var _toString = Function.call.bind(Object.prototype.toString);
- var isCallable = typeof /abc/ === 'function' ? function IsCallableSlow(x) {
- // Some old browsers (IE, FF) say that typeof /abc/ === 'function'
- return typeof x === 'function' && _toString(x) === '[object Function]';
- } : function IsCallableFast(x) { return typeof x === 'function'; };
-
- var Value = {
- getter: function (object, name, getter) {
- if (!supportsDescriptors) {
- throw new TypeError('getters require true ES5 support');
- }
- Object.defineProperty(object, name, {
- configurable: true,
- enumerable: false,
- get: getter
- });
- },
- proxy: function (originalObject, key, targetObject) {
- if (!supportsDescriptors) {
- throw new TypeError('getters require true ES5 support');
- }
- var originalDescriptor = Object.getOwnPropertyDescriptor(originalObject, key);
- Object.defineProperty(targetObject, key, {
- configurable: originalDescriptor.configurable,
- enumerable: originalDescriptor.enumerable,
- get: function getKey() { return originalObject[key]; },
- set: function setKey(value) { originalObject[key] = value; }
- });
- },
- redefine: function (object, property, newValue) {
- if (supportsDescriptors) {
- var descriptor = Object.getOwnPropertyDescriptor(object, property);
- descriptor.value = newValue;
- Object.defineProperty(object, property, descriptor);
- } else {
- object[property] = newValue;
- }
- },
- defineByDescriptor: function (object, property, descriptor) {
- if (supportsDescriptors) {
- Object.defineProperty(object, property, descriptor);
- } else if ('value' in descriptor) {
- object[property] = descriptor.value;
- }
- },
- preserveToString: function (target, source) {
- if (source && isCallable(source.toString)) {
- defineProperty(target, 'toString', source.toString.bind(source), true);
- }
- }
- };
-
- // Simple shim for Object.create on ES3 browsers
- // (unlike real shim, no attempt to support `prototype === null`)
- var create = Object.create || function (prototype, properties) {
- var Prototype = function Prototype() {};
- Prototype.prototype = prototype;
- var object = new Prototype();
- if (typeof properties !== 'undefined') {
- keys(properties).forEach(function (key) {
- Value.defineByDescriptor(object, key, properties[key]);
- });
- }
- return object;
- };
-
- var supportsSubclassing = function (C, f) {
- if (!Object.setPrototypeOf) { return false; /* skip test on IE < 11 */ }
- return valueOrFalseIfThrows(function () {
- var Sub = function Subclass(arg) {
- var o = new C(arg);
- Object.setPrototypeOf(o, Subclass.prototype);
- return o;
- };
- Object.setPrototypeOf(Sub, C);
- Sub.prototype = create(C.prototype, {
- constructor: { value: Sub }
- });
- return f(Sub);
- });
- };
-
- var getGlobal = function () {
- /* global self, window, global */
- // the only reliable means to get the global object is
- // `Function('return this')()`
- // However, this causes CSP violations in Chrome apps.
- if (typeof self !== 'undefined') { return self; }
- if (typeof window !== 'undefined') { return window; }
- if (typeof global !== 'undefined') { return global; }
- throw new Error('unable to locate global object');
- };
-
- var globals = getGlobal();
- var globalIsFinite = globals.isFinite;
- var _indexOf = Function.call.bind(String.prototype.indexOf);
- var _arrayIndexOfApply = Function.apply.bind(Array.prototype.indexOf);
- var _concat = Function.call.bind(Array.prototype.concat);
- var _sort = Function.call.bind(Array.prototype.sort);
- var _strSlice = Function.call.bind(String.prototype.slice);
- var _push = Function.call.bind(Array.prototype.push);
- var _pushApply = Function.apply.bind(Array.prototype.push);
- var _shift = Function.call.bind(Array.prototype.shift);
- var _max = Math.max;
- var _min = Math.min;
- var _floor = Math.floor;
- var _abs = Math.abs;
- var _log = Math.log;
- var _sqrt = Math.sqrt;
- var _hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty);
- var ArrayIterator; // make our implementation private
- var noop = function () {};
-
- var Symbol = globals.Symbol || {};
- var symbolSpecies = Symbol.species || '@@species';
-
- var numberIsNaN = Number.isNaN || function isNaN(value) {
- // NaN !== NaN, but they are identical.
- // NaNs are the only non-reflexive value, i.e., if x !== x,
- // then x is NaN.
- // isNaN is broken: it converts its argument to number, so
- // isNaN('foo') => true
- return value !== value;
- };
- var numberIsFinite = Number.isFinite || function isFinite(value) {
- return typeof value === 'number' && globalIsFinite(value);
- };
-
- // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js
- // can be replaced with require('is-arguments') if we ever use a build process instead
- var isStandardArguments = function isArguments(value) {
- return _toString(value) === '[object Arguments]';
- };
- var isLegacyArguments = function isArguments(value) {
- return value !== null &&
- typeof value === 'object' &&
- typeof value.length === 'number' &&
- value.length >= 0 &&
- _toString(value) !== '[object Array]' &&
- _toString(value.callee) === '[object Function]';
- };
- var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
-
- var Type = {
- primitive: function (x) { return x === null || (typeof x !== 'function' && typeof x !== 'object'); },
- object: function (x) { return x !== null && typeof x === 'object'; },
- string: function (x) { return _toString(x) === '[object String]'; },
- regex: function (x) { return _toString(x) === '[object RegExp]'; },
- symbol: function (x) {
- return typeof globals.Symbol === 'function' && typeof x === 'symbol';
- }
- };
-
- var overrideNative = function overrideNative(object, property, replacement) {
- var original = object[property];
- defineProperty(object, property, replacement, true);
- Value.preserveToString(object[property], original);
- };
-
- var hasSymbols = typeof Symbol === 'function' && typeof Symbol['for'] === 'function' && Type.symbol(Symbol());
-
- // This is a private name in the es6 spec, equal to '[Symbol.iterator]'
- // we're going to use an arbitrary _-prefixed name to make our shims
- // work properly with each other, even though we don't have full Iterator
- // support. That is, `Array.from(map.keys())` will work, but we don't
- // pretend to export a "real" Iterator interface.
- var $iterator$ = Type.symbol(Symbol.iterator) ? Symbol.iterator : '_es6-shim iterator_';
- // Firefox ships a partial implementation using the name @@iterator.
- // https://bugzilla.mozilla.org/show_bug.cgi?id=907077#c14
- // So use that name if we detect it.
- if (globals.Set && typeof new globals.Set()['@@iterator'] === 'function') {
- $iterator$ = '@@iterator';
- }
-
- // Reflect
- if (!globals.Reflect) {
- defineProperty(globals, 'Reflect', {}, true);
- }
- var Reflect = globals.Reflect;
-
- var $String = String;
-
- var ES = {
- // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-call-f-v-args
- Call: function Call(F, V) {
- var args = arguments.length > 2 ? arguments[2] : [];
- if (!ES.IsCallable(F)) {
- throw new TypeError(F + ' is not a function');
- }
- return _apply(F, V, args);
- },
-
- RequireObjectCoercible: function (x, optMessage) {
- /* jshint eqnull:true */
- if (x == null) {
- throw new TypeError(optMessage || 'Cannot call method on ' + x);
- }
- return x;
- },
-
- // This might miss the "(non-standard exotic and does not implement
- // [[Call]])" case from
- // http://www.ecma-international.org/ecma-262/6.0/#sec-typeof-operator-runtime-semantics-evaluation
- // but we can't find any evidence these objects exist in practice.
- // If we find some in the future, you could test `Object(x) === x`,
- // which is reliable according to
- // http://www.ecma-international.org/ecma-262/6.0/#sec-toobject
- // but is not well optimized by runtimes and creates an object
- // whenever it returns false, and thus is very slow.
- TypeIsObject: function (x) {
- if (x === void 0 || x === null || x === true || x === false) {
- return false;
- }
- return typeof x === 'function' || typeof x === 'object';
- },
-
- ToObject: function (o, optMessage) {
- return Object(ES.RequireObjectCoercible(o, optMessage));
- },
-
- IsCallable: isCallable,
-
- IsConstructor: function (x) {
- // We can't tell callables from constructors in ES5
- return ES.IsCallable(x);
- },
-
- ToInt32: function (x) {
- return ES.ToNumber(x) >> 0;
- },
-
- ToUint32: function (x) {
- return ES.ToNumber(x) >>> 0;
- },
-
- ToNumber: function (value) {
- if (_toString(value) === '[object Symbol]') {
- throw new TypeError('Cannot convert a Symbol value to a number');
- }
- return +value;
- },
-
- ToInteger: function (value) {
- var number = ES.ToNumber(value);
- if (numberIsNaN(number)) { return 0; }
- if (number === 0 || !numberIsFinite(number)) { return number; }
- return (number > 0 ? 1 : -1) * _floor(_abs(number));
- },
-
- ToLength: function (value) {
- var len = ES.ToInteger(value);
- if (len <= 0) { return 0; } // includes converting -0 to +0
- if (len > Number.MAX_SAFE_INTEGER) { return Number.MAX_SAFE_INTEGER; }
- return len;
- },
-
- SameValue: function (a, b) {
- if (a === b) {
- // 0 === -0, but they are not identical.
- if (a === 0) { return 1 / a === 1 / b; }
- return true;
- }
- return numberIsNaN(a) && numberIsNaN(b);
- },
-
- SameValueZero: function (a, b) {
- // same as SameValue except for SameValueZero(+0, -0) == true
- return (a === b) || (numberIsNaN(a) && numberIsNaN(b));
- },
-
- IsIterable: function (o) {
- return ES.TypeIsObject(o) && (typeof o[$iterator$] !== 'undefined' || isArguments(o));
- },
-
- GetIterator: function (o) {
- if (isArguments(o)) {
- // special case support for `arguments`
- return new ArrayIterator(o, 'value');
- }
- var itFn = ES.GetMethod(o, $iterator$);
- if (!ES.IsCallable(itFn)) {
- // Better diagnostics if itFn is null or undefined
- throw new TypeError('value is not an iterable');
- }
- var it = ES.Call(itFn, o);
- if (!ES.TypeIsObject(it)) {
- throw new TypeError('bad iterator');
- }
- return it;
- },
-
- GetMethod: function (o, p) {
- var func = ES.ToObject(o)[p];
- if (func === void 0 || func === null) {
- return void 0;
- }
- if (!ES.IsCallable(func)) {
- throw new TypeError('Method not callable: ' + p);
- }
- return func;
- },
-
- IteratorComplete: function (iterResult) {
- return !!(iterResult.done);
- },
-
- IteratorClose: function (iterator, completionIsThrow) {
- var returnMethod = ES.GetMethod(iterator, 'return');
- if (returnMethod === void 0) {
- return;
- }
- var innerResult, innerException;
- try {
- innerResult = ES.Call(returnMethod, iterator);
- } catch (e) {
- innerException = e;
- }
- if (completionIsThrow) {
- return;
- }
- if (innerException) {
- throw innerException;
- }
- if (!ES.TypeIsObject(innerResult)) {
- throw new TypeError("Iterator's return method returned a non-object.");
- }
- },
-
- IteratorNext: function (it) {
- var result = arguments.length > 1 ? it.next(arguments[1]) : it.next();
- if (!ES.TypeIsObject(result)) {
- throw new TypeError('bad iterator');
- }
- return result;
- },
-
- IteratorStep: function (it) {
- var result = ES.IteratorNext(it);
- var done = ES.IteratorComplete(result);
- return done ? false : result;
- },
-
- Construct: function (C, args, newTarget, isES6internal) {
- var target = typeof newTarget === 'undefined' ? C : newTarget;
-
- if (!isES6internal && Reflect.construct) {
- // Try to use Reflect.construct if available
- return Reflect.construct(C, args, target);
- }
- // OK, we have to fake it. This will only work if the
- // C.[[ConstructorKind]] == "base" -- but that's the only
- // kind we can make in ES5 code anyway.
-
- // OrdinaryCreateFromConstructor(target, "%ObjectPrototype%")
- var proto = target.prototype;
- if (!ES.TypeIsObject(proto)) {
- proto = Object.prototype;
- }
- var obj = create(proto);
- // Call the constructor.
- var result = ES.Call(C, obj, args);
- return ES.TypeIsObject(result) ? result : obj;
- },
-
- SpeciesConstructor: function (O, defaultConstructor) {
- var C = O.constructor;
- if (C === void 0) {
- return defaultConstructor;
- }
- if (!ES.TypeIsObject(C)) {
- throw new TypeError('Bad constructor');
- }
- var S = C[symbolSpecies];
- if (S === void 0 || S === null) {
- return defaultConstructor;
- }
- if (!ES.IsConstructor(S)) {
- throw new TypeError('Bad @@species');
- }
- return S;
- },
-
- CreateHTML: function (string, tag, attribute, value) {
- var S = ES.ToString(string);
- var p1 = '<' + tag;
- if (attribute !== '') {
- var V = ES.ToString(value);
- var escapedV = V.replace(/"/g, '&quot;');
- p1 += ' ' + attribute + '="' + escapedV + '"';
- }
- var p2 = p1 + '>';
- var p3 = p2 + S;
- return p3 + '</' + tag + '>';
- },
-
- IsRegExp: function IsRegExp(argument) {
- if (!ES.TypeIsObject(argument)) {
- return false;
- }
- var isRegExp = argument[Symbol.match];
- if (typeof isRegExp !== 'undefined') {
- return !!isRegExp;
- }
- return Type.regex(argument);
- },
-
- ToString: function ToString(string) {
- return $String(string);
- }
- };
-
- // Well-known Symbol shims
- if (supportsDescriptors && hasSymbols) {
- var defineWellKnownSymbol = function defineWellKnownSymbol(name) {
- if (Type.symbol(Symbol[name])) {
- return Symbol[name];
- }
- var sym = Symbol['for']('Symbol.' + name);
- Object.defineProperty(Symbol, name, {
- configurable: false,
- enumerable: false,
- writable: false,
- value: sym
- });
- return sym;
- };
- if (!Type.symbol(Symbol.search)) {
- var symbolSearch = defineWellKnownSymbol('search');
- var originalSearch = String.prototype.search;
- defineProperty(RegExp.prototype, symbolSearch, function search(string) {
- return ES.Call(originalSearch, string, [this]);
- });
- var searchShim = function search(regexp) {
- var O = ES.RequireObjectCoercible(this);
- if (regexp !== null && typeof regexp !== 'undefined') {
- var searcher = ES.GetMethod(regexp, symbolSearch);
- if (typeof searcher !== 'undefined') {
- return ES.Call(searcher, regexp, [O]);
- }
- }
- return ES.Call(originalSearch, O, [ES.ToString(regexp)]);
- };
- overrideNative(String.prototype, 'search', searchShim);
- }
- if (!Type.symbol(Symbol.replace)) {
- var symbolReplace = defineWellKnownSymbol('replace');
- var originalReplace = String.prototype.replace;
- defineProperty(RegExp.prototype, symbolReplace, function replace(string, replaceValue) {
- return ES.Call(originalReplace, string, [this, replaceValue]);
- });
- var replaceShim = function replace(searchValue, replaceValue) {
- var O = ES.RequireObjectCoercible(this);
- if (searchValue !== null && typeof searchValue !== 'undefined') {
- var replacer = ES.GetMethod(searchValue, symbolReplace);
- if (typeof replacer !== 'undefined') {
- return ES.Call(replacer, searchValue, [O, replaceValue]);
- }
- }
- return ES.Call(originalReplace, O, [ES.ToString(searchValue), replaceValue]);
- };
- overrideNative(String.prototype, 'replace', replaceShim);
- }
- if (!Type.symbol(Symbol.split)) {
- var symbolSplit = defineWellKnownSymbol('split');
- var originalSplit = String.prototype.split;
- defineProperty(RegExp.prototype, symbolSplit, function split(string, limit) {
- return ES.Call(originalSplit, string, [this, limit]);
- });
- var splitShim = function split(separator, limit) {
- var O = ES.RequireObjectCoercible(this);
- if (separator !== null && typeof separator !== 'undefined') {
- var splitter = ES.GetMethod(separator, symbolSplit);
- if (typeof splitter !== 'undefined') {
- return ES.Call(splitter, separator, [O, limit]);
- }
- }
- return ES.Call(originalSplit, O, [ES.ToString(separator), limit]);
- };
- overrideNative(String.prototype, 'split', splitShim);
- }
- var symbolMatchExists = Type.symbol(Symbol.match);
- var stringMatchIgnoresSymbolMatch = symbolMatchExists && (function () {
- // Firefox 41, through Nightly 45 has Symbol.match, but String#match ignores it.
- // Firefox 40 and below have Symbol.match but String#match works fine.
- var o = {};
- o[Symbol.match] = function () { return 42; };
- return 'a'.match(o) !== 42;
- }());
- if (!symbolMatchExists || stringMatchIgnoresSymbolMatch) {
- var symbolMatch = defineWellKnownSymbol('match');
-
- var originalMatch = String.prototype.match;
- defineProperty(RegExp.prototype, symbolMatch, function match(string) {
- return ES.Call(originalMatch, string, [this]);
- });
-
- var matchShim = function match(regexp) {
- var O = ES.RequireObjectCoercible(this);
- if (regexp !== null && typeof regexp !== 'undefined') {
- var matcher = ES.GetMethod(regexp, symbolMatch);
- if (typeof matcher !== 'undefined') {
- return ES.Call(matcher, regexp, [O]);
- }
- }
- return ES.Call(originalMatch, O, [ES.ToString(regexp)]);
- };
- overrideNative(String.prototype, 'match', matchShim);
- }
- }
-
- var wrapConstructor = function wrapConstructor(original, replacement, keysToSkip) {
- Value.preserveToString(replacement, original);
- if (Object.setPrototypeOf) {
- // sets up proper prototype chain where possible
- Object.setPrototypeOf(original, replacement);
- }
- if (supportsDescriptors) {
- _forEach(Object.getOwnPropertyNames(original), function (key) {
- if (key in noop || keysToSkip[key]) { return; }
- Value.proxy(original, key, replacement);
- });
- } else {
- _forEach(Object.keys(original), function (key) {
- if (key in noop || keysToSkip[key]) { return; }
- replacement[key] = original[key];
- });
- }
- replacement.prototype = original.prototype;
- Value.redefine(original.prototype, 'constructor', replacement);
- };
-
- var defaultSpeciesGetter = function () { return this; };
- var addDefaultSpecies = function (C) {
- if (supportsDescriptors && !_hasOwnProperty(C, symbolSpecies)) {
- Value.getter(C, symbolSpecies, defaultSpeciesGetter);
- }
- };
-
- var addIterator = function (prototype, impl) {
- var implementation = impl || function iterator() { return this; };
- defineProperty(prototype, $iterator$, implementation);
- if (!prototype[$iterator$] && Type.symbol($iterator$)) {
- // implementations are buggy when $iterator$ is a Symbol
- prototype[$iterator$] = implementation;
- }
- };
-
- var createDataProperty = function createDataProperty(object, name, value) {
- if (supportsDescriptors) {
- Object.defineProperty(object, name, {
- configurable: true,
- enumerable: true,
- writable: true,
- value: value
- });
- } else {
- object[name] = value;
- }
- };
- var createDataPropertyOrThrow = function createDataPropertyOrThrow(object, name, value) {
- createDataProperty(object, name, value);
- if (!ES.SameValue(object[name], value)) {
- throw new TypeError('property is nonconfigurable');
- }
- };
-
- var emulateES6construct = function (o, defaultNewTarget, defaultProto, slots) {
- // This is an es5 approximation to es6 construct semantics. in es6,
- // 'new Foo' invokes Foo.[[Construct]] which (for almost all objects)
- // just sets the internal variable NewTarget (in es6 syntax `new.target`)
- // to Foo and then returns Foo().
-
- // Many ES6 object then have constructors of the form:
- // 1. If NewTarget is undefined, throw a TypeError exception
- // 2. Let xxx by OrdinaryCreateFromConstructor(NewTarget, yyy, zzz)
-
- // So we're going to emulate those first two steps.
- if (!ES.TypeIsObject(o)) {
- throw new TypeError('Constructor requires `new`: ' + defaultNewTarget.name);
- }
- var proto = defaultNewTarget.prototype;
- if (!ES.TypeIsObject(proto)) {
- proto = defaultProto;
- }
- var obj = create(proto);
- for (var name in slots) {
- if (_hasOwnProperty(slots, name)) {
- var value = slots[name];
- defineProperty(obj, name, value, true);
- }
- }
- return obj;
- };
-
- // Firefox 31 reports this function's length as 0
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1062484
- if (String.fromCodePoint && String.fromCodePoint.length !== 1) {
- var originalFromCodePoint = String.fromCodePoint;
- overrideNative(String, 'fromCodePoint', function fromCodePoint(codePoints) { return ES.Call(originalFromCodePoint, this, arguments); });
- }
-
- var StringShims = {
- fromCodePoint: function fromCodePoint(codePoints) {
- var result = [];
- var next;
- for (var i = 0, length = arguments.length; i < length; i++) {
- next = Number(arguments[i]);
- if (!ES.SameValue(next, ES.ToInteger(next)) || next < 0 || next > 0x10FFFF) {
- throw new RangeError('Invalid code point ' + next);
- }
-
- if (next < 0x10000) {
- _push(result, String.fromCharCode(next));
- } else {
- next -= 0x10000;
- _push(result, String.fromCharCode((next >> 10) + 0xD800));
- _push(result, String.fromCharCode((next % 0x400) + 0xDC00));
- }
- }
- return result.join('');
- },
-
- raw: function raw(callSite) {
- var cooked = ES.ToObject(callSite, 'bad callSite');
- var rawString = ES.ToObject(cooked.raw, 'bad raw value');
- var len = rawString.length;
- var literalsegments = ES.ToLength(len);
- if (literalsegments <= 0) {
- return '';
- }
-
- var stringElements = [];
- var nextIndex = 0;
- var nextKey, next, nextSeg, nextSub;
- while (nextIndex < literalsegments) {
- nextKey = ES.ToString(nextIndex);
- nextSeg = ES.ToString(rawString[nextKey]);
- _push(stringElements, nextSeg);
- if (nextIndex + 1 >= literalsegments) {
- break;
- }
- next = nextIndex + 1 < arguments.length ? arguments[nextIndex + 1] : '';
- nextSub = ES.ToString(next);
- _push(stringElements, nextSub);
- nextIndex += 1;
- }
- return stringElements.join('');
- }
- };
- if (String.raw && String.raw({ raw: { 0: 'x', 1: 'y', length: 2 } }) !== 'xy') {
- // IE 11 TP has a broken String.raw implementation
- overrideNative(String, 'raw', StringShims.raw);
- }
- defineProperties(String, StringShims);
-
- // Fast repeat, uses the `Exponentiation by squaring` algorithm.
- // Perf: http://jsperf.com/string-repeat2/2
- var stringRepeat = function repeat(s, times) {
- if (times < 1) { return ''; }
- if (times % 2) { return repeat(s, times - 1) + s; }
- var half = repeat(s, times / 2);
- return half + half;
- };
- var stringMaxLength = Infinity;
-
- var StringPrototypeShims = {
- repeat: function repeat(times) {
- var thisStr = ES.ToString(ES.RequireObjectCoercible(this));
- var numTimes = ES.ToInteger(times);
- if (numTimes < 0 || numTimes >= stringMaxLength) {
- throw new RangeError('repeat count must be less than infinity and not overflow maximum string size');
- }
- return stringRepeat(thisStr, numTimes);
- },
-
- startsWith: function startsWith(searchString) {
- var S = ES.ToString(ES.RequireObjectCoercible(this));
- if (ES.IsRegExp(searchString)) {
- throw new TypeError('Cannot call method "startsWith" with a regex');
- }
- var searchStr = ES.ToString(searchString);
- var position;
- if (arguments.length > 1) {
- position = arguments[1];
- }
- var start = _max(ES.ToInteger(position), 0);
- return _strSlice(S, start, start + searchStr.length) === searchStr;
- },
-
- endsWith: function endsWith(searchString) {
- var S = ES.ToString(ES.RequireObjectCoercible(this));
- if (ES.IsRegExp(searchString)) {
- throw new TypeError('Cannot call method "endsWith" with a regex');
- }
- var searchStr = ES.ToString(searchString);
- var len = S.length;
- var endPosition;
- if (arguments.length > 1) {
- endPosition = arguments[1];
- }
- var pos = typeof endPosition === 'undefined' ? len : ES.ToInteger(endPosition);
- var end = _min(_max(pos, 0), len);
- return _strSlice(S, end - searchStr.length, end) === searchStr;
- },
-
- includes: function includes(searchString) {
- if (ES.IsRegExp(searchString)) {
- throw new TypeError('"includes" does not accept a RegExp');
- }
- var searchStr = ES.ToString(searchString);
- var position;
- if (arguments.length > 1) {
- position = arguments[1];
- }
- // Somehow this trick makes method 100% compat with the spec.
- return _indexOf(this, searchStr, position) !== -1;
- },
-
- codePointAt: function codePointAt(pos) {
- var thisStr = ES.ToString(ES.RequireObjectCoercible(this));
- var position = ES.ToInteger(pos);
- var length = thisStr.length;
- if (position >= 0 && position < length) {
- var first = thisStr.charCodeAt(position);
- var isEnd = (position + 1 === length);
- if (first < 0xD800 || first > 0xDBFF || isEnd) { return first; }
- var second = thisStr.charCodeAt(position + 1);
- if (second < 0xDC00 || second > 0xDFFF) { return first; }
- return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
- }
- }
- };
- if (String.prototype.includes && 'a'.includes('a', Infinity) !== false) {
- overrideNative(String.prototype, 'includes', StringPrototypeShims.includes);
- }
-
- if (String.prototype.startsWith && String.prototype.endsWith) {
- var startsWithRejectsRegex = throwsError(function () {
- /* throws if spec-compliant */
- '/a/'.startsWith(/a/);
- });
- var startsWithHandlesInfinity = valueOrFalseIfThrows(function () {
- return 'abc'.startsWith('a', Infinity) === false;
- });
- if (!startsWithRejectsRegex || !startsWithHandlesInfinity) {
- // Firefox (< 37?) and IE 11 TP have a noncompliant startsWith implementation
- overrideNative(String.prototype, 'startsWith', StringPrototypeShims.startsWith);
- overrideNative(String.prototype, 'endsWith', StringPrototypeShims.endsWith);
- }
- }
- if (hasSymbols) {
- var startsWithSupportsSymbolMatch = valueOrFalseIfThrows(function () {
- var re = /a/;
- re[Symbol.match] = false;
- return '/a/'.startsWith(re);
- });
- if (!startsWithSupportsSymbolMatch) {
- overrideNative(String.prototype, 'startsWith', StringPrototypeShims.startsWith);
- }
- var endsWithSupportsSymbolMatch = valueOrFalseIfThrows(function () {
- var re = /a/;
- re[Symbol.match] = false;
- return '/a/'.endsWith(re);
- });
- if (!endsWithSupportsSymbolMatch) {
- overrideNative(String.prototype, 'endsWith', StringPrototypeShims.endsWith);
- }
- var includesSupportsSymbolMatch = valueOrFalseIfThrows(function () {
- var re = /a/;
- re[Symbol.match] = false;
- return '/a/'.includes(re);
- });
- if (!includesSupportsSymbolMatch) {
- overrideNative(String.prototype, 'includes', StringPrototypeShims.includes);
- }
- }
-
- defineProperties(String.prototype, StringPrototypeShims);
-
- // whitespace from: http://es5.github.io/#x15.5.4.20
- // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
- var ws = [
- '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
- '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
- '\u2029\uFEFF'
- ].join('');
- var trimRegexp = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
- var trimShim = function trim() {
- return ES.ToString(ES.RequireObjectCoercible(this)).replace(trimRegexp, '');
- };
- var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
- var nonWSregex = new RegExp('[' + nonWS + ']', 'g');
- var isBadHexRegex = /^[\-+]0x[0-9a-f]+$/i;
- var hasStringTrimBug = nonWS.trim().length !== nonWS.length;
- defineProperty(String.prototype, 'trim', trimShim, hasStringTrimBug);
-
- // see https://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype-@@iterator
- var StringIterator = function (s) {
- ES.RequireObjectCoercible(s);
- this._s = ES.ToString(s);
- this._i = 0;
- };
- StringIterator.prototype.next = function () {
- var s = this._s, i = this._i;
- if (typeof s === 'undefined' || i >= s.length) {
- this._s = void 0;
- return { value: void 0, done: true };
- }
- var first = s.charCodeAt(i), second, len;
- if (first < 0xD800 || first > 0xDBFF || (i + 1) === s.length) {
- len = 1;
- } else {
- second = s.charCodeAt(i + 1);
- len = (second < 0xDC00 || second > 0xDFFF) ? 1 : 2;
- }
- this._i = i + len;
- return { value: s.substr(i, len), done: false };
- };
- addIterator(StringIterator.prototype);
- addIterator(String.prototype, function () {
- return new StringIterator(this);
- });
-
- var ArrayShims = {
- from: function from(items) {
- var C = this;
- var mapFn;
- if (arguments.length > 1) {
- mapFn = arguments[1];
- }
- var mapping, T;
- if (typeof mapFn === 'undefined') {
- mapping = false;
- } else {
- if (!ES.IsCallable(mapFn)) {
- throw new TypeError('Array.from: when provided, the second argument must be a function');
- }
- if (arguments.length > 2) {
- T = arguments[2];
- }
- mapping = true;
- }
-
- // Note that that Arrays will use ArrayIterator:
- // https://bugs.ecmascript.org/show_bug.cgi?id=2416
- var usingIterator = typeof (isArguments(items) || ES.GetMethod(items, $iterator$)) !== 'undefined';
-
- var length, result, i;
- if (usingIterator) {
- result = ES.IsConstructor(C) ? Object(new C()) : [];
- var iterator = ES.GetIterator(items);
- var next, nextValue;
-
- i = 0;
- while (true) {
- next = ES.IteratorStep(iterator);
- if (next === false) {
- break;
- }
- nextValue =