summaryrefslogtreecommitdiff
path: root/src/node_modules/es-abstract/5
diff options
context:
space:
mode:
Diffstat (limited to 'src/node_modules/es-abstract/5')
-rw-r--r--src/node_modules/es-abstract/5/AbstractEqualityComparison.js37
-rw-r--r--src/node_modules/es-abstract/5/AbstractRelationalComparison.js66
-rw-r--r--src/node_modules/es-abstract/5/CheckObjectCoercible.js14
-rw-r--r--src/node_modules/es-abstract/5/DateFromTime.js54
-rw-r--r--src/node_modules/es-abstract/5/Day.js11
-rw-r--r--src/node_modules/es-abstract/5/DayFromYear.js10
-rw-r--r--src/node_modules/es-abstract/5/DayWithinYear.js11
-rw-r--r--src/node_modules/es-abstract/5/DaysInYear.js18
-rw-r--r--src/node_modules/es-abstract/5/FromPropertyDescriptor.js39
-rw-r--r--src/node_modules/es-abstract/5/HourFromTime.js14
-rw-r--r--src/node_modules/es-abstract/5/InLeapYear.js21
-rw-r--r--src/node_modules/es-abstract/5/IsAccessorDescriptor.js23
-rw-r--r--src/node_modules/es-abstract/5/IsCallable.js5
-rw-r--r--src/node_modules/es-abstract/5/IsDataDescriptor.js23
-rw-r--r--src/node_modules/es-abstract/5/IsGenericDescriptor.js23
-rw-r--r--src/node_modules/es-abstract/5/IsPropertyDescriptor.js17
-rw-r--r--src/node_modules/es-abstract/5/MakeDate.js13
-rw-r--r--src/node_modules/es-abstract/5/MakeDay.js33
-rw-r--r--src/node_modules/es-abstract/5/MakeTime.js23
-rw-r--r--src/node_modules/es-abstract/5/MinFromTime.js14
-rw-r--r--src/node_modules/es-abstract/5/MonthFromTime.js47
-rw-r--r--src/node_modules/es-abstract/5/SameValue.js13
-rw-r--r--src/node_modules/es-abstract/5/SecFromTime.js14
-rw-r--r--src/node_modules/es-abstract/5/StrictEqualityComparison.js17
-rw-r--r--src/node_modules/es-abstract/5/TimeClip.js21
-rw-r--r--src/node_modules/es-abstract/5/TimeFromYear.js11
-rw-r--r--src/node_modules/es-abstract/5/TimeWithinDay.js12
-rw-r--r--src/node_modules/es-abstract/5/ToBoolean.js5
-rw-r--r--src/node_modules/es-abstract/5/ToInt32.js9
-rw-r--r--src/node_modules/es-abstract/5/ToInteger.js18
-rw-r--r--src/node_modules/es-abstract/5/ToNumber.js7
-rw-r--r--src/node_modules/es-abstract/5/ToObject.js14
-rw-r--r--src/node_modules/es-abstract/5/ToPrimitive.js5
-rw-r--r--src/node_modules/es-abstract/5/ToPropertyDescriptor.js52
-rw-r--r--src/node_modules/es-abstract/5/ToString.js12
-rw-r--r--src/node_modules/es-abstract/5/ToUint16.js19
-rw-r--r--src/node_modules/es-abstract/5/ToUint32.js9
-rw-r--r--src/node_modules/es-abstract/5/Type.js24
-rw-r--r--src/node_modules/es-abstract/5/WeekDay.js10
-rw-r--r--src/node_modules/es-abstract/5/YearFromTime.js16
-rw-r--r--src/node_modules/es-abstract/5/abs.js11
-rw-r--r--src/node_modules/es-abstract/5/floor.js11
-rw-r--r--src/node_modules/es-abstract/5/modulo.js9
-rw-r--r--src/node_modules/es-abstract/5/msFromTime.js11
44 files changed, 846 insertions, 0 deletions
diff --git a/src/node_modules/es-abstract/5/AbstractEqualityComparison.js b/src/node_modules/es-abstract/5/AbstractEqualityComparison.js
new file mode 100644
index 0000000..e55c764
--- /dev/null
+++ b/src/node_modules/es-abstract/5/AbstractEqualityComparison.js
@@ -0,0 +1,37 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return x === y; // ES6+ specified this shortcut anyways.
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ return false;
+};
diff --git a/src/node_modules/es-abstract/5/AbstractRelationalComparison.js b/src/node_modules/es-abstract/5/AbstractRelationalComparison.js
new file mode 100644
index 0000000..bc7ca83
--- /dev/null
+++ b/src/node_modules/es-abstract/5/AbstractRelationalComparison.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
+
+// eslint-disable-next-line max-statements
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ var bothStrings = Type(px) === 'String' && Type(py) === 'String';
+ if (!bothStrings) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ return false;
+ }
+ if (nx === 0 && ny === 0) {
+ return false;
+ }
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
+ return true;
+ }
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+ }
+ if (isPrefixOf(py, px)) {
+ return false;
+ }
+ if (isPrefixOf(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+};
diff --git a/src/node_modules/es-abstract/5/CheckObjectCoercible.js b/src/node_modules/es-abstract/5/CheckObjectCoercible.js
new file mode 100644
index 0000000..f02b289
--- /dev/null
+++ b/src/node_modules/es-abstract/5/CheckObjectCoercible.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.10
+
+module.exports = function CheckObjectCoercible(value, optMessage) {
+ if (value == null) {
+ throw new $TypeError(optMessage || ('Cannot call method on ' + value));
+ }
+ return value;
+};
diff --git a/src/node_modules/es-abstract/5/DateFromTime.js b/src/node_modules/es-abstract/5/DateFromTime.js
new file mode 100644
index 0000000..962dba1
--- /dev/null
+++ b/src/node_modules/es-abstract/5/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/src/node_modules/es-abstract/5/Day.js b/src/node_modules/es-abstract/5/Day.js
new file mode 100644
index 0000000..66c0f06
--- /dev/null
+++ b/src/node_modules/es-abstract/5/Day.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var floor = require('./floor');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return floor(t / msPerDay);
+};
diff --git a/src/node_modules/es-abstract/5/DayFromYear.js b/src/node_modules/es-abstract/5/DayFromYear.js
new file mode 100644
index 0000000..672aadc
--- /dev/null
+++ b/src/node_modules/es-abstract/5/DayFromYear.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var floor = require('./floor');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400);
+};
+
diff --git a/src/node_modules/es-abstract/5/DayWithinYear.js b/src/node_modules/es-abstract/5/DayWithinYear.js
new file mode 100644
index 0000000..cfc4002
--- /dev/null
+++ b/src/node_modules/es-abstract/5/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/src/node_modules/es-abstract/5/DaysInYear.js b/src/node_modules/es-abstract/5/DaysInYear.js
new file mode 100644
index 0000000..5f20f6d
--- /dev/null
+++ b/src/node_modules/es-abstract/5/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (modulo(y, 4) !== 0) {
+ return 365;
+ }
+ if (modulo(y, 100) !== 0) {
+ return 366;
+ }
+ if (modulo(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/src/node_modules/es-abstract/5/FromPropertyDescriptor.js b/src/node_modules/es-abstract/5/FromPropertyDescriptor.js
new file mode 100644
index 0000000..a3cefbe
--- /dev/null
+++ b/src/node_modules/es-abstract/5/FromPropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.4
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsDataDescriptor(Desc)) {
+ return {
+ value: Desc['[[Value]]'],
+ writable: !!Desc['[[Writable]]'],
+ enumerable: !!Desc['[[Enumerable]]'],
+ configurable: !!Desc['[[Configurable]]']
+ };
+ } else if (IsAccessorDescriptor(Desc)) {
+ return {
+ get: Desc['[[Get]]'],
+ set: Desc['[[Set]]'],
+ enumerable: !!Desc['[[Enumerable]]'],
+ configurable: !!Desc['[[Configurable]]']
+ };
+ } else {
+ throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
+ }
+};
diff --git a/src/node_modules/es-abstract/5/HourFromTime.js b/src/node_modules/es-abstract/5/HourFromTime.js
new file mode 100644
index 0000000..15ad1a9
--- /dev/null
+++ b/src/node_modules/es-abstract/5/HourFromTime.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return modulo(floor(t / msPerHour), HoursPerDay);
+};
diff --git a/src/node_modules/es-abstract/5/InLeapYear.js b/src/node_modules/es-abstract/5/InLeapYear.js
new file mode 100644
index 0000000..38ba8fd
--- /dev/null
+++ b/src/node_modules/es-abstract/5/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/src/node_modules/es-abstract/5/IsAccessorDescriptor.js b/src/node_modules/es-abstract/5/IsAccessorDescriptor.js
new file mode 100644
index 0000000..561382a
--- /dev/null
+++ b/src/node_modules/es-abstract/5/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var Type = require('./Type');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.1
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/src/node_modules/es-abstract/5/IsCallable.js b/src/node_modules/es-abstract/5/IsCallable.js
new file mode 100644
index 0000000..e4bfa36
--- /dev/null
+++ b/src/node_modules/es-abstract/5/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/src/node_modules/es-abstract/5/IsDataDescriptor.js b/src/node_modules/es-abstract/5/IsDataDescriptor.js
new file mode 100644
index 0000000..783e2dc
--- /dev/null
+++ b/src/node_modules/es-abstract/5/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var Type = require('./Type');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.2
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/src/node_modules/es-abstract/5/IsGenericDescriptor.js b/src/node_modules/es-abstract/5/IsGenericDescriptor.js
new file mode 100644
index 0000000..93340e9
--- /dev/null
+++ b/src/node_modules/es-abstract/5/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+var assertRecord = require('../helpers/assertRecord');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.3
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/src/node_modules/es-abstract/5/IsPropertyDescriptor.js b/src/node_modules/es-abstract/5/IsPropertyDescriptor.js
new file mode 100644
index 0000000..2a96c63
--- /dev/null
+++ b/src/node_modules/es-abstract/5/IsPropertyDescriptor.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var Type = require('./Type');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
+
+module.exports = function IsPropertyDescriptor(Desc) {
+ return isPropertyDescriptor({
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor,
+ Type: Type
+ }, Desc);
+};
diff --git a/src/node_modules/es-abstract/5/MakeDate.js b/src/node_modules/es-abstract/5/MakeDate.js
new file mode 100644
index 0000000..7b592d1
--- /dev/null
+++ b/src/node_modules/es-abstract/5/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/src/node_modules/es-abstract/5/MakeDay.js b/src/node_modules/es-abstract/5/MakeDay.js
new file mode 100644
index 0000000..614c0fc
--- /dev/null
+++ b/src/node_modules/es-abstract/5/MakeDay.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var floor = require('./floor');
+var modulo = require('./modulo');
+var MonthFromTime = require('./MonthFromTime');
+var ToInteger = require('./ToInteger');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToInteger(year);
+ var m = ToInteger(month);
+ var dt = ToInteger(date);
+ var ym = y + floor(m / 12);
+ var mn = modulo(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/src/node_modules/es-abstract/5/MakeTime.js b/src/node_modules/es-abstract/5/MakeTime.js
new file mode 100644
index 0000000..e118500
--- /dev/null
+++ b/src/node_modules/es-abstract/5/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToInteger = require('./ToInteger');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToInteger(hour);
+ var m = ToInteger(min);
+ var s = ToInteger(sec);
+ var milli = ToInteger(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/src/node_modules/es-abstract/5/MinFromTime.js b/src/node_modules/es-abstract/5/MinFromTime.js
new file mode 100644
index 0000000..c2fdd3b
--- /dev/null
+++ b/src/node_modules/es-abstract/5/MinFromTime.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return modulo(floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/src/node_modules/es-abstract/5/MonthFromTime.js b/src/node_modules/es-abstract/5/MonthFromTime.js
new file mode 100644
index 0000000..4f120f2
--- /dev/null
+++ b/src/node_modules/es-abstract/5/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/src/node_modules/es-abstract/5/SameValue.js b/src/node_modules/es-abstract/5/SameValue.js
new file mode 100644
index 0000000..47c936d
--- /dev/null
+++ b/src/node_modules/es-abstract/5/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/src/node_modules/es-abstract/5/SecFromTime.js b/src/node_modules/es-abstract/5/SecFromTime.js
new file mode 100644
index 0000000..5e20386
--- /dev/null
+++ b/src/node_modules/es-abstract/5/SecFromTime.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return modulo(floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/src/node_modules/es-abstract/5/StrictEqualityComparison.js b/src/node_modules/es-abstract/5/StrictEqualityComparison.js
new file mode 100644
index 0000000..eea5df3
--- /dev/null
+++ b/src/node_modules/es-abstract/5/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/src/node_modules/es-abstract/5/TimeClip.js b/src/node_modules/es-abstract/5/TimeClip.js
new file mode 100644
index 0000000..23726bb
--- /dev/null
+++ b/src/node_modules/es-abstract/5/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var abs = require('./abs');
+var ToNumber = require('./ToNumber');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/src/node_modules/es-abstract/5/TimeFromYear.js b/src/node_modules/es-abstract/5/TimeFromYear.js
new file mode 100644
index 0000000..df646c3
--- /dev/null
+++ b/src/node_modules/es-abstract/5/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/src/node_modules/es-abstract/5/TimeWithinDay.js b/src/node_modules/es-abstract/5/TimeWithinDay.js
new file mode 100644
index 0000000..f6a1290
--- /dev/null
+++ b/src/node_modules/es-abstract/5/TimeWithinDay.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return modulo(t, msPerDay);
+};
+
diff --git a/src/node_modules/es-abstract/5/ToBoolean.js b/src/node_modules/es-abstract/5/ToBoolean.js
new file mode 100644
index 0000000..65d8737
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/src/node_modules/es-abstract/5/ToInt32.js b/src/node_modules/es-abstract/5/ToInt32.js
new file mode 100644
index 0000000..a8d2680
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/src/node_modules/es-abstract/5/ToInteger.js b/src/node_modules/es-abstract/5/ToInteger.js
new file mode 100644
index 0000000..c29fff5
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToInteger.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var abs = require('./abs');
+var floor = require('./floor');
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.4
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number)) { return 0; }
+ if (number === 0 || !$isFinite(number)) { return number; }
+ return $sign(number) * floor(abs(number));
+};
diff --git a/src/node_modules/es-abstract/5/ToNumber.js b/src/node_modules/es-abstract/5/ToNumber.js
new file mode 100644
index 0000000..4a7a3b8
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToNumber.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.3
+
+module.exports = function ToNumber(value) {
+ return +value; // eslint-disable-line no-implicit-coercion
+};
diff --git a/src/node_modules/es-abstract/5/ToObject.js b/src/node_modules/es-abstract/5/ToObject.js
new file mode 100644
index 0000000..1d27a13
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var CheckObjectCoercible = require('./CheckObjectCoercible');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.9
+
+module.exports = function ToObject(value) {
+ CheckObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/src/node_modules/es-abstract/5/ToPrimitive.js b/src/node_modules/es-abstract/5/ToPrimitive.js
new file mode 100644
index 0000000..071df70
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToPrimitive.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.1
+
+module.exports = require('es-to-primitive/es5');
diff --git a/src/node_modules/es-abstract/5/ToPropertyDescriptor.js b/src/node_modules/es-abstract/5/ToPropertyDescriptor.js
new file mode 100644
index 0000000..7c40136
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new $TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/src/node_modules/es-abstract/5/ToString.js b/src/node_modules/es-abstract/5/ToString.js
new file mode 100644
index 0000000..80ece42
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToString.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.8
+
+module.exports = function ToString(value) {
+ return $String(value);
+};
+
diff --git a/src/node_modules/es-abstract/5/ToUint16.js b/src/node_modules/es-abstract/5/ToUint16.js
new file mode 100644
index 0000000..b10e3ed
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToUint16.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var abs = require('./abs');
+var floor = require('./floor');
+var modulo = require('./modulo');
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * floor(abs(number));
+ return modulo(posInt, 0x10000);
+};
diff --git a/src/node_modules/es-abstract/5/ToUint32.js b/src/node_modules/es-abstract/5/ToUint32.js
new file mode 100644
index 0000000..3660f62
--- /dev/null
+++ b/src/node_modules/es-abstract/5/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/src/node_modules/es-abstract/5/Type.js b/src/node_modules/es-abstract/5/Type.js
new file mode 100644
index 0000000..9cc750c
--- /dev/null
+++ b/src/node_modules/es-abstract/5/Type.js
@@ -0,0 +1,24 @@
+'use strict';
+
+// https://www.ecma-international.org/ecma-262/5.1/#sec-8
+
+module.exports = function Type(x) {
+ if (x === null) {
+ return 'Null';
+ }
+ if (typeof x === 'undefined') {
+ return 'Undefined';
+ }
+ if (typeof x === 'function' || typeof x === 'object') {
+ return 'Object';
+ }
+ if (typeof x === 'number') {
+ return 'Number';
+ }
+ if (typeof x === 'boolean') {
+ return 'Boolean';
+ }
+ if (typeof x === 'string') {
+ return 'String';
+ }
+};
diff --git a/src/node_modules/es-abstract/5/WeekDay.js b/src/node_modules/es-abstract/5/WeekDay.js
new file mode 100644
index 0000000..51d0722
--- /dev/null
+++ b/src/node_modules/es-abstract/5/WeekDay.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var Day = require('./Day');
+var modulo = require('./modulo');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return modulo(Day(t) + 4, 7);
+};
diff --git a/src/node_modules/es-abstract/5/YearFromTime.js b/src/node_modules/es-abstract/5/YearFromTime.js
new file mode 100644
index 0000000..ff5339f
--- /dev/null
+++ b/src/node_modules/es-abstract/5/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('../helpers/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/src/node_modules/es-abstract/5/abs.js b/src/node_modules/es-abstract/5/abs.js
new file mode 100644
index 0000000..b32d0c9
--- /dev/null
+++ b/src/node_modules/es-abstract/5/abs.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic');
+
+var $abs = GetIntrinsic('%Math.abs%');
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function abs(x) {
+ return $abs(x);
+};
diff --git a/src/node_modules/es-abstract/5/floor.js b/src/node_modules/es-abstract/5/floor.js
new file mode 100644
index 0000000..66d616d
--- /dev/null
+++ b/src/node_modules/es-abstract/5/floor.js
@@ -0,0 +1,11 @@
+'use strict';
+
+// var modulo = require('./modulo');
+var $floor = Math.floor;
+
+// http://www.ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function floor(x) {
+ // return x - modulo(x, 1);
+ return $floor(x);
+};
diff --git a/src/node_modules/es-abstract/5/modulo.js b/src/node_modules/es-abstract/5/modulo.js
new file mode 100644
index 0000000..bc04c06
--- /dev/null
+++ b/src/node_modules/es-abstract/5/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/src/node_modules/es-abstract/5/msFromTime.js b/src/node_modules/es-abstract/5/msFromTime.js
new file mode 100644
index 0000000..ebe5f58
--- /dev/null
+++ b/src/node_modules/es-abstract/5/msFromTime.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return modulo(t, msPerSecond);
+};