| 'use strict'; | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var fails = require('../internals/fails'); | 
| var padStart = require('../internals/string-pad').start; | 
|   | 
| var $RangeError = RangeError; | 
| var $isFinite = isFinite; | 
| var abs = Math.abs; | 
| var DatePrototype = Date.prototype; | 
| var nativeDateToISOString = DatePrototype.toISOString; | 
| var thisTimeValue = uncurryThis(DatePrototype.getTime); | 
| var getUTCDate = uncurryThis(DatePrototype.getUTCDate); | 
| var getUTCFullYear = uncurryThis(DatePrototype.getUTCFullYear); | 
| var getUTCHours = uncurryThis(DatePrototype.getUTCHours); | 
| var getUTCMilliseconds = uncurryThis(DatePrototype.getUTCMilliseconds); | 
| var getUTCMinutes = uncurryThis(DatePrototype.getUTCMinutes); | 
| var getUTCMonth = uncurryThis(DatePrototype.getUTCMonth); | 
| var getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds); | 
|   | 
| // `Date.prototype.toISOString` method implementation | 
| // https://tc39.es/ecma262/#sec-date.prototype.toisostring | 
| // PhantomJS / old WebKit fails here: | 
| module.exports = (fails(function () { | 
|   return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z'; | 
| }) || !fails(function () { | 
|   nativeDateToISOString.call(new Date(NaN)); | 
| })) ? function toISOString() { | 
|   if (!$isFinite(thisTimeValue(this))) throw new $RangeError('Invalid time value'); | 
|   var date = this; | 
|   var year = getUTCFullYear(date); | 
|   var milliseconds = getUTCMilliseconds(date); | 
|   var sign = year < 0 ? '-' : year > 9999 ? '+' : ''; | 
|   return sign + padStart(abs(year), sign ? 6 : 4, 0) + | 
|     '-' + padStart(getUTCMonth(date) + 1, 2, 0) + | 
|     '-' + padStart(getUTCDate(date), 2, 0) + | 
|     'T' + padStart(getUTCHours(date), 2, 0) + | 
|     ':' + padStart(getUTCMinutes(date), 2, 0) + | 
|     ':' + padStart(getUTCSeconds(date), 2, 0) + | 
|     '.' + padStart(milliseconds, 3, 0) + | 
|     'Z'; | 
| } : nativeDateToISOString; |